金三银四、金九银十Java面试你准备好了吗本文涵盖技术面高频考点基础/集合/并发/JVM/MySQL/Redis/Spring和HR面必问问题及回答话术助你拿下Offer一、技术面核心考点1. Java基础1.1 面向对象三大特性封装隐藏内部实现暴露必要接口。继承子类复用父类代码实现extends。多态同一个行为具有多个不同表现形式重载、重写、父类引用指向子类对象。1.2 String、StringBuffer、StringBuilder区别类型是否可变线程安全使用场景String不可变final char[]安全少量字符串操作StringBuffer可变安全synchronized多线程大量拼接StringBuilder可变不安全单线程大量拼接1.3 和 equals 的区别基本类型比较值引用类型比较内存地址。equalsObject默认比较地址String/Integer等重写后比较内容。1.4 HashMap原理必问1.7数组链表头插法多线程死循环。1.8数组链表红黑树链表8且数组64转为红黑树尾插法。put流程计算hash → 寻址 → 若空则创建否则遍历链表/树 → 找到key替换否则新增 → 检查是否需要扩容。扩容机制初始16负载因子0.752倍扩容rehash重新计算位置。1.5 常见异常分类受检异常编译时需处理IOException, SQLException。非受检异常RuntimeException空指针、数组越界、类型转换。ErrorJVM内部错误OOM, StackOverflow。2. 并发编程2.1 线程创建方式继承Thread实现Runnable无返回值实现Callable FutureTask有返回值线程池2.2 synchronized 和 Lock 区别维度synchronizedLockReentrantLock实现JVM关键字Java API锁获取自动释放lock/unlock手动释放可中断不可中断可中断lockInterruptibly公平锁非公平均可默认非公平条件等待wait/notifyawait/signal2.3 volatile 工作原理保证可见性写后立即刷新到主存读从主存读。禁止指令重排序内存屏障。不保证原子性i 非原子。2.4 线程池核心参数javapublic ThreadPoolExecutor( int corePoolSize, // 核心线程数 int maximumPoolSize, // 最大线程数 long keepAliveTime, // 空闲线程存活时间 TimeUnit unit, BlockingQueueRunnable workQueue, // 工作队列 ThreadFactory threadFactory, RejectedExecutionHandler handler // 拒绝策略 )拒绝策略Abort抛异常、CallerRuns调用者执行、Discard丢弃、DiscardOldest丢弃队列头。3. JVM加分项高阶必问3.1 内存模型JMM主内存 vs 工作内存8大原子操作lock/unlock/read/load/use/assign/store/write。3.2 运行时数据区域堆对象实例、数组GC主要区域。栈局部变量、操作数栈、方法出口线程私有。方法区类元信息、常量、静态变量1.8后元空间取代永久代。程序计数器当前线程执行的字节码行号。本地方法栈native方法。3.3 GC判断及算法可达性分析GC Roots栈帧引用、静态属性、常量引用、JNI引用等。引用类型强、软内存不足回收、弱下次GC回收、虚唯一目的通知。GC算法标记-清除有碎片、标记-复制新生代、标记-整理老年代。垃圾收集器CMS并发标记清除低停顿、G1区域化可控停顿、ZGC低延迟。3.4 类加载机制加载 → 验证 → 准备 → 解析 → 初始化 → 使用 → 卸载。双亲委派加载类时先委托父类加载器避免重复加载和核心类被篡改。打破双亲委派Tomcat、JDBC使用线程上下文类加载器。4. MySQL4.1 索引原理及优化B树叶子节点存储数据且双向链表支持范围查询。聚簇索引主键索引叶子存行数据、非聚簇索引二级索引叶子存主键。回表通过二级索引找到主键再回聚簇索引查完整行。覆盖索引查询字段均在索引中避免回表。最左前缀联合索引(a,b,c)where a1 and b2会走索引where b2不会。4.2 事务隔离级别隔离级别脏读不可重复读幻读Read Uncommitted可能可能可能Read Committed (RC)不可能可能可能Repeatable Read (RR)不可能不可能可能InnoDB通过间隙锁解决Serializable不可能不可能不可能MVCC基于隐藏列DB_TRX_ID, DB_ROLL_PTR undo log ReadView实现非阻塞读。4.3 SQL优化实战避免select *。避免索引列上使用函数或隐式转换如where phone138...phone是varchar。分页优化limit 100000,10→ 改为where id 上次最大id limit 10。使用explain分析执行计划关注typeconst eq_ref ref range index all。5. Redis5.1 数据类型及使用场景String缓存对象、计数器、分布式锁。Hash存储对象如用户属性。List消息队列、栈、最新列表。Set去重、交并差集共同好友。Sorted Set排行榜、延迟队列score为时间戳。5.2 缓存三大问题及解决方案穿透查询不存在的数据 → 布隆过滤器、缓存空对象短时间。击穿热点key过期高并发重建 → 互斥锁、逻辑过期不设物理过期后台异步刷新。雪崩大量key同时过期 → 过期时间加随机值、高可用集群。5.3 持久化方式RDB快照指定时间间隔内存快照fork子进程性能好可能丢数据。AOF追加写命令三种同步策略always/everysec/no文件大时可重写。5.4 分布式锁实现要点使用SET key value NX EX seconds原子操作。value需唯一标识如UUID释放时使用Lua脚本判断是否自己的锁防止误删。主从切换锁失效问题 → RedLock多独立节点或Redisson。6. Spring框架6.1 IOC和DIIOC控制反转将对象创建及依赖管理的控制权交给容器。DI依赖注入构造器注入、setter注入、字段注入Autowired不推荐。6.2 Bean生命周期实例化 → 属性赋值 → 执行Aware接口 → BeanPostProcessor前置处理 → PostConstruct → InitializingBean → init-method → BeanPostProcessor后置处理 → 注册销毁回调 → 使用 → 销毁。6.3 Spring事务传播行为必问REQUIRED当前有事务则加入否则新建默认。REQUIRES_NEW总是新建事务挂起当前事务。NESTED嵌套事务外层回滚影响内层内层回滚不影响外层基于保存点。其他SUPPORTS、NOT_SUPPORTED、MANDATORY、NEVER。6.4 Spring Boot自动配置原理SpringBootApplicationConfigurationEnableAutoConfigurationComponentScan。EnableAutoConfiguration通过ImportSelector读取META-INF/spring.factories中的配置类条件注解Conditional决定是否加载。7. 其他高频题微服务/MQ等7.1 CAP理论Consistency一致性、Availability可用性、Partition tolerance分区容错性P必须满足C和A只能选一个。EurekaAP优先可用性ZooKeeperCP优先一致性。7.2 消息队列如何保证消息不丢失生产者发送确认机制Confirm。Broker持久化、多副本同步刷盘。消费者手动提交offset业务处理完再确认。二、HR面通关攻略1. 常见问题及回答策略Q1请做一下自我介绍。模板我是谁 工作/项目经历亮点与岗位匹配 为什么来贵公司。示例“面试官好我叫张三有3年Java开发经验。在上家公司负责电商订单系统独立设计并实现了高并发下库存扣减方案系统压测QPS提升到5000。我看到贵公司正在大力发展新零售业务和我之前经验非常契合希望能加入团队。”Q2你为什么离职禁忌抱怨前公司、领导、薪资低显得斤斤计较。正确角度追求更大平台/技术挑战/职业发展。示例“上家公司业务趋于稳定技术挑战较少。我希望到一个技术驱动、有成长空间的环境中提升自己。贵公司正在做分布式架构升级非常吸引我。”Q3你的缺点是什么原则说一个真实但非致命缺点 改进措施。示例“我有时候过于追求代码完美导致前期设计耗时较多。后来我采用敏捷迭代先交付核心功能再重构平衡了质量和效率。”Q4你对薪资有什么要求策略提前调研岗位薪资范围报价比期望稍高一点留出谈判空间。可以说“我目前年薪XX期望涨幅20%左右。不过我更看重平台和成长具体可以按公司薪资体系来谈。”Q5你未来3-5年的职业规划安全回答短期深入技术栈成为团队核心中期能独立带项目或往架构/管理方向发展长期与公司共同成长。Q6你还有什么想问我们的必须提问显示诚意。建议问团队目前的技术栈及未来规划我入职后主要参与哪块业务公司对新员工的培养机制贵公司对这个岗位的期望是什么2. HR面加分细节着装得体技术岗休闲商务即可不要过于随意短裤拖鞋。礼貌和微笑视频面试保持眼神看摄像头线下面试敲门、道谢。表达清晰语速适中避免嗯、啊过多。准备作品/笔记可以展示GitHub或技术博客体现持续学习。不主动问加班、年假等offer阶段再沟通。3. 谈薪技巧让HR先说出薪资范围。报期望薪资时给出具体数字如“25K”而不是“25K左右”。强调自己的价值用过往数据性能提升、节省成本、完成项目数量支撑。询问薪资构成基本工资、绩效比例、年终奖、补贴、调薪机制。三、面试流程与心态典型Java面试流程简历筛选 → 笔试部分公司 → 技术一面基础 → 技术二面项目/架构 → 技术三面交叉/主管 → HR面 → Offer审批 → 谈薪 → 背调 → 入职。心态建议面试是双向选择不要卑微。答不上来诚实的说“这块了解不深但我可以谈一下相关理解”或者“后面会补充学习”。每次面试后复盘记录被问到的问题查漏补缺。四、推荐复习资料书籍《Java核心技术》《深入理解Java虚拟机》《Java并发编程实战》《Redis设计与实现》在线题库LeetCode算法、牛客网Java专项八股文档JavaGuide、Cyc2018最后祝你面试顺利早日拿到心仪Offer