前言
2021 年互联网行业的行情不太好,也有可能接下去会一直这样,特别是对于没有大厂背景的同学来说,所以请记住一个很重要的原则:不要裸辞。
需要注意的点:
- 先挑几个小公司找下面试感觉,太久没面,需要找找面试的感觉
- 你要在回答的过程中让面试官感受到你身上一些优秀的特质
- 解决问题的过程能让人快速成长,并且解决的问题可能会成为你面试时的亮点,特别是对于那些项目没什么亮点的。
- 挑几个自己做过最牛逼的功能、或者解决过最有挑战的问题,并且要对这些内容理解的非常透彻,不能在给面试官介绍的时候“支支吾吾”
- 框架也好、中间件也好,必须要有几个特别深入研究过的
- 自己讲出来的每个功能点、知识点,都要做好“被挑战”的心里准备,因此对于每个功能点、知识点都要多思考。
- 如果你是真想跳槽,或者说你已经裸辞了,那么在收到电子 offer 前都不要停止面试,即使收到口头 offer 也不稳,特别是在这个炎夏。
- 面试前的准备非常重要,但更重要的是平时工作的积累,4 年经验问的问题很多是无法通过临时准备的,很多都是需要你不断去积累,才能有好的方案。

个人情况
坐标魔都,17年本科毕业于普通一本,毕业后就职于一家传统电信公司,19年后就职于美团点评。
面试情况
相比于 19 年,由于有了美团的背景,今年在简历这关顺利了很多,不得不感叹大厂背景真香。
本着尽量少请假的原因,所以面试的公司比较少,只面了 3 家:阿里、网易、拼多多。
3 家公司都走完了面试流程,最后拿到了阿里和拼多多的 offer,自己还是比较满意的。
至于网易挂掉的原因,具体原因不是很清楚,面试发挥的还行,BOSS 面的时候可以看出对我还是比较满意,但最终没有收到 offer。
如果对于这三家公司的面试流程有问题的,可以在公众号上留言,能解答的我会第一时间解答。
4 年经验应该具备哪些技能
首先,简单的聊一下我认为的 4 年经验左右、优秀的 Java 程序员应该具备的技能有哪些,按“专业技能”和“项目”两块,包括但不限于以下内容。
专业节能方面
- 基础:JDK 常用类的原理、源码、使用场景。设计模式:常用几种的原理、使用场景,单例、动态代理、模板、责任链等。
- 数据结构:数组、链表、栈、队列、树。
- 网络:TCP、HTTP、HTTPS、负载均衡算法。
- 框架:Spring IoC 原理、Spring AOP 原理和使用、Spring 常用的扩展点、MyBatis 的核心流程。
- 中间件:常用中间件的核心原理与最佳实践,并对其中的 1 到 2 个有深入的学习,Redis、Kafka(RocketMQ、RabbitMQ)、Dubbo、Zookeeper。数据库(MySQL):索引原理、隔离级别、锁机制、分库分表、慢 SQL 定位及优化、线上问题解决。Netty:NIO 原理、核心组件、I/O 多路复用(epoll)、零拷贝。JVM:运行时数据区、垃圾回收算法、垃圾回收器(CMS、G1)、常用配置参数、线上问题定位及解决。稳定性保障:隔离、限流、熔断、降级等。Linux:基本命令的使用、快速定位和排查问题。分布式理论:CAP、BASE、2PC、3PC、TCC。
项目方面
- 能独立完成一个复杂模块的需求分析、方案设计和最终落地实现。能不断思考,寻找更优的设计和解决方案,积极优化慢 SQL、慢服务。具备排查问题的能力,遇到线上问题能及时定位和修复上线,例如:数据库死锁、服务器宕机、服务器 Full GC 频繁等。具备难题攻关的能力,能不断解决项目遇到的挑战,能给予初级工程师技术上的指导。初步具备带领团队(1-3人左右)的能力,能合理分配需求,做好进度把控、风险评估、Code Review。
严格来说,要完全做到上面这些有点难,我自己也并不具备,但是,我们可以将其视为目标,不断去努力。
面试常见形式
大厂面试通常是“连环炮”的形式,举个栗子:
面试官:用过哪些 Map
我:LinkedHashMap、ConcurrentHashMap、HashMap、TreeMap
面试官:这四种 Map 的区别
我:ConcurrentHashMap 线程安全,LinkedHashMap 可以记录插入顺序和访问顺序,TreeMap 可以自定义排序,除了这几个场景,其他场景基本都可以使用 HashMap
面试官:ConcurrentHashMap 怎么保证线程安全
我:JDK 1.8 以前通过分段锁,JDK 1.8 以后通过 CAS + Synchronized
面试官:ConcurrentHashMap 在 JDK 1.8 前后的锁有什么区别
我:JDK 1.8 以前锁分段,JDK 1.8 以后锁单个节点,锁粒度降低,并发度变高
面试官:#%¥%……#%¥
我:喵喵喵~
这种模式的问法,其实就是想了解候选人对一个知识点的理解是仅仅停留在表面,还是真的去深入研究过
面试内容
下面介绍下一些常见的面试内容,其中的面试题不一定是我真实遇到的,有可能是从别人的面试题中收集的,也有可能是我自己觉得重要的知识点,仅供参考。
1、项目
项目对于一个 3 - 5 年经验的开发来说是非常重要的,面试官也非常看重这一块。这个经验的开发基本是各大公司的编码主力,因此面试这个年限的候选人,通常项目是很重要的一块。面试官通常会让你先自己介绍下自己参与度最高(或者最牛逼)的项目,然后从中进行提问。常见的如以下:
- 介绍下你参与度最高的项目
- 画下项目的架构图如果核心流程处理到一半,服务器崩溃了,会怎么处理
- 项目中遇到过哪些挑战或问题,
- 怎么解决的项目的稳定性和可用性
- 怎么保障数据安全这块怎么设计项目的技术选型,
- 为什么选这些
- ..
2、场景题
越到后面的面试官,越喜欢问场景题,场景题比较考验候选人平时的积累和解决问题能力。这个环节很容易挂掉一批人,特别是容易紧张的同学,很容易脑子会一片空白。场景题的核心一般是处理大数据量的问题、解决性能方面的问题。
场景题本质上是比较开放的,没有什么标准答案,只要自己的方案能够解决问题,能够“自圆其说”就行。
这个环节面试官可能会将线上真实的场景拿出来提问,我自己就遇到过。
3、专业技能
集合
- 经常用到哪些 Map这几种 Map 的区别CocurrentHashMap 怎么保证线程安全CocurrentHashMap 在 JDK 1.8 前后的锁有什么区别聊下 HashMap 的原理HashMap 在 Put 时,新链表节点是放在头部还是尾部HashMap 扩容时的流程HashMap 在 JDK 1.8 有什么改变CocurrentHashMap 在 JDK 1.8 有什么改变TreeMap 的原理Map、List、Set 分别说下你知道的线程安全类和线程不安全的类
多线程、锁
- 线程池使用的是哪种线程池参数怎么配置线程池各个参数的作用线程池的参数配置要注意什么线程池的工作流程
- JDK 中的并发类知道哪些AQS 的底层原理介绍下悲观锁和乐观锁使用过哪些锁synchronized 和 Lock 的区别、使用场景
- synchronized 原理synchronized 作用于静态方法、普通方法、this、Lock.class 的区别为什么引入偏向锁、轻量级锁,介绍下升级流程死锁的必要条件,如何预防死锁介绍下 CountDownLatch 和 CyclicBarrier介绍下 CAS,存在什么问题介绍下 ThreadLocal,存在什么问题
网络
- HTTPS 是怎么加密的普通 Hash 和一致性 Hash 原理一致性 Hash 的缺点TCP 三次握手过程,为什么需要三次握手为什么 TIME_WAIT 状态需要经过 2MSL 才能返回到 CLOSE 状态TCP 的拥塞控制TCP 如何解决流控、乱序、丢包问题为什么会出现粘包和拆包,如何解决
Spring、Mybatis
- Mybatis 中 # 和 $ 的区别怎么防止 SQL 注入使用 Mybatis 时,调用 DAO(Mapper)接口时是怎么调用到 SQL 的介绍下 Spring IoC 的流程BeanFactory 和 FactoryBean 的区别Spring 的 AOP 是怎么实现的Spring 的事务传播行为有哪些,讲下嵌套事务
- 什么情况下对象不能被代理Spring 怎么解决循环依赖的问题要在 Spring IoC 容器构建完毕之后执行一些逻辑,怎么实现@Resource 和 @Autowire 的区别@Autowire 怎么使用名称来注入bean 的 init-method 属性指定的方法里用到了其他 bean 实例,会有问题吗
- @PostConstruct 修饰的方法里用到了其他 bean 实例,会有问题吗Spring 中,有两个 id 相同的 bean,会报错吗,如果会报错,在哪个阶段报错Spring 中,bean 的 class 属性指定了一个不存在的 class,会报错吗,如果会报错,在哪个阶段Spring 中的常见扩展点有哪些
MySQL
- MySQL 索引的数据结构为什么使用 B+ 树,与其他索引相比有什么优点各种索引之间的区别B+ 树在进行范围查找时怎么处理
- MySQL 索引叶子节点存放的是什么联合索引(复合索引)的底层实现
- MySQL 如何锁住一行数据SELECT 语句能加互斥锁吗
- 多个事务同时对一行数据进行 SELECT FOR UPDATE 会阻塞还是异常MySQL 使用的版本和执行引擎MySQL 不同执行引擎的区别MySQL 的事务隔离级别
- MySQL 的可重复读是怎么实现的MySQL 是否会出现幻读
- MySQL 的 gap 锁
- MySQL 的主从同步原理分库分表的实现方案分布式唯一 ID 方案如何优化慢查询explain 中每个字段的意思explain 中的 type 字段有哪些常见的值explain 中你通常关注哪些字段,为什么
JVM
- 运行时数据区
- 服务器使用的什么垃圾收集器CMS 垃圾收集的原理G1 垃圾收集的特点,为什么低延迟有哪些垃圾回收算法,优缺点
- 哪些对象可以作为 GC Roots有哪些类加载器
- 双亲委派模式,哪些场景是打破双亲委派模式
- 线上服务器出现频繁 Full GC,怎么排查定位问题常用哪些命令
- 介绍下 JVM 调优的过程
Kafka
- 为什么使用 Kafka介绍下 Kafka 的各个组件如何保证写入 Kafka 的数据不丢失如何保证从 Kafka 消费的数据不丢失
- Kafka 为什么性能这么高
- 零拷贝技术使用哪个方法实现Java 中也有类似的零拷贝技术,是哪个方法Kafka 怎么保证消息的顺序消费Kafka 怎么避免重复消费什么是 HighWatermark 和 LEO什么是 ISR,为什么需要引入 ISR
Redis
- 项目中使用的 Redis 版本Redis 在项目中的使用场景Redis 怎么保证高可用Redis 的选举流程Redis 和 Memcache 的区别
- Redis 的集群模式Redis 集群要增加分片,槽的迁移怎么保证无损Redis 分布式锁的实现Redis 删除过期键的策略Redis 的内存淘汰策略
- Redis 的 Hash 对象底层结构Redis 中 Hash 对象的扩容流程Redis 的 Hash 对象的扩容流程在数据量大的时候会有什么问题吗Redis 的持久化机制有哪几种
- RDB 和 AOF 的实现原理、优缺点AOF 重写的过程哨兵模式的原理使用缓存时,先操作数据库还是先操作缓存为什么是让缓存失效,而不是更新缓存缓存穿透、缓存击穿、缓存雪崩更新缓存的几种设计模式
Zookeeper
- Zookeeper 的使用场景Zookeeper 怎么实现分布式锁Zookeeper 怎么保证数据的一致性ZAB 协议的原理Zookeeper 遵循 CAP 中的哪些Zookeeper 和 Eureka 的区别
- Zookeeper 的 Leader 选举Observer 的作用Leader 发送了 commit 消息,但是所有的 follower 都没有收到这条消息,Leader 就挂了,后续会怎么处理
分布式
- CAP 理论BASE 理论分布式事务 2PC 和 TCC 的原理
- TCC 在 cancel 阶段如果出现失败怎么处理Paxos 算法、Raft 算法
关于这些面试题,我这边也准备了很多面试题给同学们去做面试准备:
一键三连(点赞+收藏+关注)后直接添加微信:mxh5261 即可免费获取!

面试资料
除此之外,还给读者朋友准备了一份面试复盘资料
其中包含了许多的模块(见目录)
目录
- JVM
- JAVA集合
- JAVA多线程并发
- JAVA基础
- Spring原理
- 微服务
- Netty与RPC
- 网络
- 曰志
- Zookeeper
- Kafka
- RabitMQ
- Hbase
- MongoDB
- Cassandra
- 设计模式
- 负载均衡
- 数据库
- 致性算法
- JAVA算法
- 数据结构
- 加密算法
- 分布式缓存
- Hadoop
- Spark
- Storm
- 机器学习
- 云计算

这一份面试复盘资料和前面的面试题都是可以免费的送给有需要的读者朋友们的!
获取方式:一键三连(点赞+收藏+关注)后直接添加微信:mxh5261 即可免费获取!
本文是一位拥有4年Java经验的开发者分享的面试心得,涉及阿里、网易、拼多多的面试经历。文章强调了面试准备、工作经验的重要性,以及面试中可能遇到的专业技能问题,如JVM、Spring、数据库、分布式理论等,并提到了4年经验开发者应具备的技能和项目经验。
433

被折叠的 条评论
为什么被折叠?



