大厂面试题系列|美团 Java 面试 154 道题分享!

高分请说明下,大厂面试题系列|美团 Java 面试 154 道题分享!
最新回答
轻拥

2026-10-18 08:32:33

以下是针对美团Java面试154道题的核心知识点梳理与解答:

一、Java集合(22题)
  1. ArrayList vs Vector

    线程安全:Vector所有方法同步,ArrayList非线程安全。

    扩容机制:ArrayList默认扩容1.5倍,Vector默认2倍。

    性能:ArrayList因无同步开销,性能更高。

  2. ArrayList vs Vector vs LinkedList

    ArrayList:基于动态数组,随机访问快(O(1)),插入/删除中间元素慢(O(n))。

    Vector:线程安全版ArrayList,性能较低。

    LinkedList:基于双向链表,插入/删除快(O(1)),随机访问慢(O(n))。

  3. 快速失败(fail-fast) vs 安全失败(fail-safe)

    fail-fast:迭代时检测到集合被修改(如ConcurrentModificationException),如ArrayList迭代器。

    fail-safe:基于副本操作,不抛异常,如CopyOnWriteArrayList。

  4. HashMap数据结构与原理

    数据结构:JDK8前为数组+链表,JDK8后链表长度≥8时转为红黑树。

    工作原理:通过hash()计算键的哈希值,定位桶位置;冲突时采用链表或树解决。

    扩容条件:当元素数≥容量*负载因子(默认0.75)时扩容为2倍。

  5. List/Map/Set存取特点

    List:允许重复,按插入顺序存储,通过索引访问。

    Map:键值对存储,键唯一,通过键访问值。

    Set:元素唯一,无序(HashSet)或有序(TreeSet)。

  6. Set重复判断

    equals():判断逻辑相等性,覆盖equals()的类需同时覆盖hashCode()。

    ==:判断内存地址是否相同。

    规则:若x.equals(y)==true,则x.hashCode()必须等于y.hashCode(),反之不成立。

  7. Heap vs Stack

    Heap:存储对象实例,由GC管理,空间大。

    Stack:存储局部变量和方法调用,线程私有,空间小。

  8. 集合类框架接口

    核心接口:Collection(List/Set)、Map。

    扩展接口:Queue、Deque、SortedMap等。

  9. HashSet vs TreeSet

    HashSet:基于HashMap,无序,性能高(O(1))。

    TreeSet:基于红黑树,有序(自然排序或Comparator),性能低(O(log n))。

  10. LinkedHashMap原理

    继承HashMap,通过双向链表维护插入顺序或访问顺序(LRU缓存)。

二、JVM与调优(21题)
  1. 类加载过程

    加载:读取.class文件,生成Class对象。

    验证:检查文件格式、符号引用等。

    准备:分配内存并初始化静态变量。

    解析:将符号引用转为直接引用。

    初始化:执行静态代码块和静态变量赋值。

  2. GC机制与对象存活判断

    可达性分析:从GC Roots(如栈引用、静态变量)出发,不可达对象标记为可回收。

    回收算法:标记-清除、复制、标记-整理、分代收集。

  3. 垃圾回收器

    Serial:单线程,适用于客户端。

    Parallel:多线程,注重吞吐量。

    CMS/G1:并发收集,减少停顿时间。

  4. 内存泄漏与拷贝

    内存泄漏:对象仍被引用但无法使用(如静态集合)。

    深拷贝:复制对象及所有引用对象(需实现Cloneable)。

    浅拷贝:仅复制对象本身(如Object.clone())。

  5. System.gc()与finalize()

    System.gc():建议JVM执行GC,不保证立即执行。

    finalize():对象被回收前调用,通常用于资源释放(已过时)。

三、并发编程(28题)
  1. Synchronized原理

    锁对象:实例锁(对象头Mark Word)或类锁(Class对象)。

    可重入性:同一线程可重复获取锁。

    优化:锁膨胀(偏向锁→轻量级锁→重量级锁)、锁消除、锁粗化。

  2. CAS与乐观锁

    CAS:比较并交换(Compare-And-Swap),通过Unsafe类实现。

    乐观锁:假设无冲突,冲突时重试(如AtomicInteger)。

    缺点:ABA问题、自旋开销。

  3. ReentrantLock vs Synchronized

    ReentrantLock:支持公平锁、超时、可中断,需手动释放。

    Synchronized:非公平锁,自动释放,代码简洁。

  4. 线程池核心参数

    corePoolSize:核心线程数。

    maximumPoolSize:最大线程数。

    keepAliveTime:空闲线程存活时间。

    workQueue:任务队列(如LinkedBlockingQueue)。

四、Spring(25题)
  1. IoC与DI

    IoC:控制反转,由容器管理对象生命周期。

    DI:依赖注入,通过构造器/Setter注入依赖。

  2. Bean生命周期

    实例化→属性赋值→Aware接口回调→BeanPostProcessor前置处理→初始化→BeanPostProcessor后置处理→使用→销毁。

  3. 自动装配模式

    byName:按属性名匹配Bean。

    byType:按类型匹配。

    constructor:按构造器参数类型匹配。

五、Spring Boot(22题)
  1. 核心特性

    自动配置:根据依赖自动配置Bean。

    Starter依赖:简化依赖管理(如spring-boot-starter-web)。

    Actuator:监控端点(如/health、/metrics)。

  2. 热部署

    Spring Loaded或DevTools:修改代码后自动重启。

六、Netty(10题)
  1. NIO特点

    非阻塞I/O:通过Channel和Selector实现多路复用。

    零拷贝:减少数据在内核空间与用户空间的拷贝(如FileRegion.transferTo())。

七、Redis(16题)
  1. 数据结构与应用场景

    String:缓存、计数器。

    Hash:存储对象字段。

    List:消息队列、最新消息排行。

    Set:标签、共同关注。

    ZSet:排行榜、延迟队列。

  2. 持久化

    RDB:定时快照,适合备份。

    AOF:记录写操作,适合数据安全要求高的场景。

八、设计模式(10题)
  1. 常用模式

    单例模式:饿汉式、懒汉式(双重检查锁)。

    工厂模式:简单工厂、工厂方法、抽象工厂。

    观察者模式:事件驱动(如GUI监听)。

九、MySQL与Redis协同
  1. 热点数据管理

    策略:通过LRU算法或访问频率筛选热点数据,结合Redis的过期时间自动淘汰冷数据。

以上内容覆盖了美团Java面试的核心知识点,建议结合实际项目经验深入理解。