💡应聘技术问题
问题:"请介绍一下 JVM 内存模型,各个区域的作用是什么?"
参考答案:JVM 运行时数据区分成两块:线程私有的和线程共享的。
线程私有的有三个:程序计数器、虚拟机栈、本地方法栈。程序计数器记录当前线程执行到哪一行字节码,线程切换之后能恢复到正确位置。虚拟机栈在每个方法执行时建一个栈帧,里面放局部变量表、操作数栈、动态链接、方法返回地址。本地方法栈给 Native 方法用。
线程共享的有两个:堆和方法区。堆放对象实例和数组,GC 主要就是清理堆。方法区存类信息、常量、静态变量,JDK 8 之后改成元空间(Metaspace),用本地内存实现。
追问通常落在 GC:新生代复制算法、老年代标记-整理、CMS 和 G1 的区别,提前看一眼。
问题:"Spring Boot 的自动配置原理是什么?"
参考答案:入口是 @EnableAutoConfiguration,底层用 SpringFactoriesLoader 加载 META-INF/spring.factories(JDK 8)/ META-INF/spring/...AutoConfiguration.imports(JDK 9+)里所有的自动配置类。
每个自动配置类上挂了一堆 @Conditional 注解,最常见的是 @ConditionalOnClass(classpath 有某个类才生效)、ConditionalOnMissingBean(容器里没这个 Bean 才注入默认实现)。条件满足才往容器里塞 Bean。
application.properties 或 application.yml 可以覆盖默认值。不想要某个自动配置,配 spring.autoconfigure.exclude 就行。
问题:"Redis 和 MySQL 如何保证数据一致性?"
参考答案:这个问题没有银弹,常见四种方案各有问题:
- 先更数据库,再删缓存(Cache Aside):最常用,但极端情况下(缓存刚好失效、读+写并发)可能不一致
- 延迟双删:更库前后各删一次缓存,第二次通过异步延迟做,减小不一致窗口
工程里大多数业务用方案 3 就行。强一致就上分布式锁,弱一致就接消息队列做重试。
问题:"请介绍一个你最熟悉的项目,包括技术选型和遇到的挑战"
参考答案:准备这种问题按这个结构讲:
- 项目背景:一两句话讲清楚做什么、给谁用、规模多大、自己负责哪块
- 技术选型:核心用了什么栈,为什么选它不选另一个(不要只列名字)
- 难点挑战:具体踩过什么坑,怎么定位的,最终怎么解决的
- 量化成果:性能从多少到多少、QPS 提升、解决过什么线上事故
说"我做了",别说"我参与了"。数据要给具体数字,比如"接口 P99 从 800ms 降到 120ms",比"显著提升"有力。
问题:"设计一个微信消息推送系统,QPS 峰值 10 万,怎么做?"
参考答案:分几层来讲:
- 接入层:NGINX + 多机房部署,按用户 ID 哈希路由,热点用户单独打散
- 消息队列:Kafka 扛写入,按业务 topic 分区,顺序写 + 批量提交
- 在线推送:长连接(自研或基于 Netty)维持客户端连接,消息到达后从内存里查连接直接推
- 离线推送:在线不上的走 APNs/厂商通道,同时落库离线消息
- 存储:消息 ID + 接收者 ID + 状态,Redis 存最近会话,MySQL/TiKV 存历史
- 限流与降级:单用户限速 100/s,MQ 积压时关闭非核心通知类型
追问点:消息不丢、去重、顺序、撤回,这几样准备一下。
🎯应聘面试准备
问:想应聘上述岗位,需要做哪些准备?
答:
简历优化
1. 核心信息前置
- 学历背景: 本科及以上,计算机相关专业,2025 届应届毕业生
- 工作经验: 课程项目、实习项目、开源贡献、算法竞赛,挑跟后台开发对得上的写
- 技术栈: Java 为主,至少熟悉 Spring/Spring Boot,MySQL、Redis、Kafka 至少用过其中一两个
- 意向岗位:
2. 匹配岗位关键词
- 技术栈: Java、JVM、Spring、Spring Boot、Spring Cloud、MyBatis、MySQL、Redis、Kafka
- 工程能力: 数据结构与算法、计算机原理(操作系统、网络)、后台服务开发与调优
- 工具与平台: Git、Maven/Gradle、Docker、Linux 常用命令、JVM 调优工具(jstat、jmap、arthas)
- 能力标签:
技能梳理
Java 基础
- 集合框架:HashMap 源码、ConcurrentHashMap 1.7/1.8 区别、扩容机制
- 并发:synchronized 锁升级、volatile 语义、AQS 原理、ThreadPoolExecutor 参数
- IO:BIO/NIO/AIO 区别、Netty 模型
数据库与缓存
- MySQL:InnoDB 索引(B+ 树)、事务隔离级别、锁机制、慢查询优化
- Redis:五大数据结构、持久化(RDB/AOF)、集群方案、缓存三大问题(穿透/击穿/雪崩)
框架与中间件
- Spring:IOC/AOP 原理、Bean 生命周期、循环依赖
- Spring Boot:自动配置、Starter 机制、启动流程
- Spring Cloud:注册中心、配置中心、网关、熔断
计算机基础
- 网络:TCP 三次握手、四次挥手、HTTP/HTTPS、TCP 拥塞控制
- 操作系统:进程/线程、内存管理、IO 多路复用(epoll)、零拷贝
项目经验
- 至少 1 个完整 Web 后台项目(Spring Boot + MySQL + Redis)
- 1-2 个课程设计或实习项目,准备好能讲 20 分钟那种细节
面试准备
经典问题
- HashMap 在 JDK 7 和 JDK 8 的实现区别
系统设计
- feed 流系统(拉 vs 推、关注关系、消息扩散)
项目经验准备
- 准备开源项目贡献经历(GitHub 上有 star 的项目都可以写)