想进大厂的小伙伴,一定要看看面试秘籍

想进大厂的小伙伴,一定要看看面试秘籍
最新回答
桃靥

2021-10-24 21:53:44

以下是对面试相关核心问题的梳理与解答

JVM 相关
  • JVM 内存模型与堆结构

    堆是线程共享区域,分为新生代(Eden、Survivor)、老年代,用于存储对象实例。

    方法区(元空间)存储类信息、常量等;栈用于线程私有方法调用;程序计数器记录指令位置。

  • CMS 垃圾回收过程与 STW

    初始标记(STW)、并发标记、重新标记(STW)、并发清除。共 2 次 STW

    根集对象:包括虚拟机栈中的引用、方法区静态引用、本地方法栈引用等,作为 GC 起始点。

  • 双亲委派模型

    类加载器自底向上检查类是否已加载,防止重复加载同一字节码,确保类唯一性。

  • 垃圾回收算法与回收器

    算法:标记-清除(产生碎片)、复制(新生代)、标记-整理(老年代)、分代收集。

    回收器:Serial(单线程)、Parallel Scavenge(并行)、CMS(并发)、G1(分区+并发)。

  • G1 特点

    面向大堆,将堆划分为多个 Region,优先回收垃圾多的区域(Mixed GC),减少 FGC 频率。

Java 并发与线程
  • 锁升级

    Java 对象头标记位经历无锁→偏向锁→轻量级锁→重量级锁,减少线程竞争开销。

  • 可重入锁(ReentrantLock)

    同一线程可重复获取锁,避免死锁,支持公平/非公平模式。

  • 自旋锁

    线程未获取锁时循环尝试,减少线程切换开销,适用于短时间竞争场景。

  • volatile 关键字

    保证可见性(禁止指令重排序,强制写入主存),适用于单次读写场景(如状态标志)。

  • 线程池(ThreadPoolExecutor)

    参数:核心线程数、最大线程数、队列容量、存活时间、拒绝策略(如 AbortPolicy)。

    拒绝策略:直接拒绝、调用者运行、丢弃队列最旧任务、丢弃最新任务。

集合与数据结构
  • HashMap 与 ConcurrentHashMap

    HashMap:线程不安全,多线程可能导致数据不一致或死循环(JDK1.7 头插法)。

    ConcurrentHashMap:JDK1.8 采用 CAS + synchronized 锁分段,尾插法扩容,支持高并发。

  • ArrayList 扩容

    默认容量 10,扩容时容量变为原来的 1.5 倍,涉及数组拷贝。

  • 深拷贝 vs 浅拷贝

    浅拷贝复制引用,深拷贝递归复制对象所有层级。

MySQL 数据库
  • 索引结构

    B+树:多路平衡树,叶子节点链表连接,适合范围查询;哈希索引仅支持等值查询。

  • 事务隔离级别

    读未提交、读已提交(解决脏读)、可重复读(MVCC 解决幻读,InnoDB 默认)、串行化。

  • 聚簇索引 vs 非聚簇索引

    聚簇索引(主键索引)叶子节点存储数据;非聚簇索引(二级索引)叶子节点存储主键值。

  • 慢 SQL 优化

    避免全表扫描,添加合适索引;拆分复杂查询;使用 EXPLAIN 分析执行计划。

Redis 缓存
  • 持久化机制

    RDB:定时快照,适合灾难恢复;AOF:记录写操作,数据更完整但体积大。

  • 分布式锁

    基于 SETNX 实现,需设置过期时间防止死锁;Redlock 算法解决多实例场景问题。

  • 缓存穿透/雪崩

    穿透:空值缓存或布隆过滤器过滤无效请求;雪崩:随机过期时间或分层缓存。

Kafka 消息队列
  • 核心角色

    Producer:发送消息;Broker:存储消息;Consumer:消费消息;ZooKeeper:管理元数据。

  • 高可用性

    副本机制(ISR 列表);Leader 选举由 Controller 协调。

  • Exactly-Once 语义

    通过事务消息 + 幂等性 Producer 实现,确保消息不重复不丢失。

Spring 框架
  • IOC 与 AOP

    IOC:控制反转,通过依赖注入管理对象生命周期;AOP:动态代理实现横切关注点(如日志)。

  • Spring Boot 自动配置

    基于 spring-boot-autoconfigure 模块,通过 @Conditional 注解按条件加载配置。

算法与设计题
  • 快速排序

    分治思想,选取基准值将数组分为左右两部分,递归排序,平均时间复杂度 O(n log n)

  • LRU 缓存

    哈希表 + 双向链表实现,访问节点移至链表头部,淘汰尾部节点。

  • 微信抢红包架构

    分库分表存储红包数据;使用 Redis 原子操作扣减金额;消息队列异步处理结果。

排查问题思路
  • OOM 排查

    分析堆转储文件(jmap -dump),使用 MAT 或 VisualVM 定位内存泄漏对象。

  • CPU 占用高

    top 定位高负载进程,jstack 导出线程堆栈,分析阻塞或死循环代码。

  • 线程未响应

    检查线程状态(BLOCKED/WAITING),分析锁竞争或死锁(jstack)。

以上内容覆盖了 JVM、并发、数据库、框架等核心知识点,适合作为大厂面试的复习框架。 实际面试中需结合具体场景深入展开,并注重项目经验与原理理解的结合。