### 百度现场面试知识点概览
#### 一、Java基础知识与高级特性
**1. Java中的多态**
- 多态是指一个类的行为能够表现出多种形态的能力。在Java中,多态主要通过继承和接口实现。具体表现为:
- 方法重载(Overloading):在同一个类中定义多个同名方法,但参数列表不同。
- 方法覆盖(Overriding):子类重新定义父类的方法。
- 对象的多态性:父类引用指向子类对象。
**2. 为何同时重写hashCode()和equals()**
- 当两个对象相等(通过equals方法判断)时,它们的hashCode值也必须相同。
- 如果只重写了equals而没有重写hashCode,可能导致散列表存储的元素出现不一致的问题。
- 为了保持数据结构的一致性,通常建议同时重写这两个方法。
**3. HashMap的工作原理**
- **内部结构**:HashMap采用哈希表实现,通过键的hashCode计算出存储位置,提高查找效率。
- **存储流程**:首先根据键的哈希值确定位置;若该位置为空,则插入新节点;若位置已有节点,则比较新键与已有键是否相等,相等则替换旧值,不相等则采用链表或红黑树等方式存储。
- **扩容机制**:当容量达到阈值(默认0.75*容量),进行扩容操作,通常是将容量翻倍,并重新哈希。
**4. HashMap如何变为线程安全**
- **同步容器**:如使用`Collections.synchronizedMap(new HashMap<>)`包装。
- 优点:简单易用。
- 缺点:性能较差,因为对整个Map加锁。
- **并发容器**:如使用`ConcurrentHashMap`。
- 优点:性能更高,采用分割锁等技术减少竞争。
- 缺点:实现复杂度高。
- **显式锁**:使用`ReentrantLock`等显式锁机制手动控制并发访问。
- 优点:灵活性高。
- 缺点:需要开发者具备一定的并发编程经验。
**5. 垃圾回收机制**
- **GC算法**:包括标记-清除算法、复制算法、标记-整理算法等。
- **分代收集**:将堆分为年轻代和老年代,年轻代进一步细分为Eden区和Survivor区。新对象优先在年轻代分配,经过多次GC后存活的对象晋升至老年代。
**6. JVM参数详解**
- **堆内存设置**:`-Xms`初始堆大小、`-Xmx`最大堆大小。
- **GC相关参数**:`-XX:+UseG1GC`启用G1垃圾收集器、`-XX:MaxGCPauseMillis`指定最长暂停时间。
- **日志与调试**:`-verbose:gc`开启GC日志、`-XX:+HeapDumpOnOutOfMemoryError`OOM时生成堆转储文件。
#### 二、设计模式与算法
**1. 设计模式概述**
- **单例模式**:确保一个类只有一个实例,并提供一个全局访问点。常用实现方式有饿汉式、懒汉式等。
- **工厂模式**:提供创建对象的接口,让子类决定实例化哪一个类。
- **观察者模式**:对象间的一种一对多依赖关系,以便当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
**2. 算法题目解析**
- **反转单链表**:通过三个指针(当前节点、前一个节点、下一个节点)迭代实现。
- **构建微博子结构数据结构**:利用哈希表或数组记录父子关系,通过遍历建立树状结构。
- **爬楼梯问题**:动态规划解法,状态转移方程为`f(n) = f(n-1) + f(n-2)`。
#### 三、系统设计与运维
**1. 负载均衡**
- **算法**:轮询、最少连接数、IP哈希等。
- **一致性哈希**:解决哈希环上的数据分布不均问题,适用于动态调整节点数量的场景。
- **DDoS防护**:使用CDN、限流、过滤恶意流量等策略。
**2. TCP协议**
- **三次握手与四次挥手**:三次握手用于建立连接,四次挥手用于关闭连接。四次挥手中的最后一个ACK包是为了确认对方已经收到关闭请求。
**3. 数据库管理**
- **备份与恢复**:全量备份、增量备份、差异备份等。
- **主从复制**:实现数据冗余,提高读写分离能力。
- **数据不一致原因及解决办法**:主从复制延迟、网络故障等导致,可通过优化配置、增强监控等方式解决。
**4. Linux系统**
- **查看CPU占用率高的进程**:使用`top`命令或`ps aux`结合`sort`命令找出高CPU占用率的进程。
**5. 分布式事务**
- **两阶段提交(2PC)**:协调者向参与者发送准备请求,参与者响应准备结果,最后协调者根据所有参与者的准备结果决定是否提交。
- **最终一致性**:通过补偿机制等方式实现数据最终一致。
#### 四、高级中间件与框架
**1. Redis**
- **特点**:高性能的键值存储系统,支持多种数据结构。
- **持久化机制**:RDB快照和AOF日志两种方式。RDB适合快速恢复,但可能会丢失最新数据;AOF则更安全,但恢复速度较慢且占用空间大。
- **哨兵部署**:提供高可用方案,监控主从实例状态,自动故障转移。
**2. MySQL**
- **存储引擎**:InnoDB支持事务、外键等特性,适合OLTP;MyISAM不支持事务,但查询速度快,适合OLAP。
- **优化**:合理选择索引类型、调整配置参数等。
#### 五、面试技巧与心态调整
- **心态调整**:面试过程中遇到难题不要紧张,保持积极乐观的态度。
- **挫折应对**:遇到挫折时,及时反思总结经验教训,不断学习进步。
以上是基于给定文件内容所提取的关键知识点概述,希望能帮助读者更好地理解和掌握相关技术点。