这位求职者拥有2年的硕士学位,来自一个较为冷门的本科专业,完全是通过死记硬背来转行进入计算机行业,基础相对薄弱。
在2022年10月,他开始了自学Java技术栈,跟随B站的黑马和尚硅谷视频学习并实践编程。经过不懈努力,他在除夕夜前后完成了Spring Cloud的学习。此后,他开始研究各大公司的面试经验,并在牛客网上看到推荐的Guide哥的JavaGuide,随后加入了知识星球并进行了自我介绍。接下来,他开始背诵面试常见问题,从2023年1月到3月间进行断断续续的学习,同时参与了Guide哥的RPC项目和黑马点评项目,之后便开始大规模投递简历,最终取得了令人满意的结果。
- 八股文的学习必须结合项目实践,项目内的各项知识点都应进行头脑风暴。面试大佬的答案都是在项目和比赛中锤炼出来的,光靠背诵是无法掌握的。
 - 尽快开始投递简历,不要犹豫,先从小公司的实习岗位入手,逐渐晋升到大厂的实习和秋招。当HR询问时,要展现出自己具备的各项能力。一天之内面试5家公司的经历,让他在忙碌中收获了多个offer。
 - 一定要对面试进行录音或录屏!面试后进行复盘,分析自己的表达和逻辑,查漏补缺。身边很多人面试后不复盘,而你如果能够复盘,就已经超越了大多数人。
 - 在刷题方面,通过大量面试,他发现力扣上的题目大部分都已做过,陌生的题目几乎没有。力扣的Hot 100题目应牢记于心。
 - 面试时的心态很重要,需表现出与公司价值观相符的态度。例如,面试阿里时要自信(不要过度道歉),面试华为时则要展现出能抗压的形象。如何调整心态,唯有多加练习与面试。
 - 若有机试环节,务必要取得优异的成绩,用任何方法都可以(你懂的)。
 
总结一下:
- 一份优质的简历:实习和项目经历需经得起考验,条理清晰且逻辑合理。
 - 随时保持思考,展现出自己的见解(ps:我有个奇怪的想法,面试官得让觉得你有想法)。
 - 面试时要保持清晰的思路,避免全是死记硬背的内容,要表现出兴趣、心态和自信。
 - 学会输出,进行多次练习。
 
以下是面试经历:(几乎所有公司我都面试过,部分录音懒得复盘,如果需要可以告诉我,我会再总结)
网易 Java 后端开发(已接到offer,最终选择了此岗位)
一面:(乱序,回忆版)
- 自我介绍
 - 编写一个简单的登录业务(MVC模型)
 - 实习及项目相关经历(包括一段中型公司的实习)
 - Spring常见面试问题(如AOP、IOC及常见注解等)
 - 处理数据库多版本接入的方式
 - BASE特性及其实现方式
 - 手撕题:通过前序和中序遍历构造二叉树
 - Netty的核心组件
 - Netty的NIO与BIO
 - Redis的单线程与多线程
 - 除了MySQL和Redis外,还使用过哪些数据源?你了解Hive吗?
 - 与面试官讨论俄乌冲突及国际形势……
 
二面:(乱序)
- 自我介绍
 - 实习及项目相关经历
 - RPC具备多少Dubbo的功能?如何暴露服务?如果服务挂了怎么办?
 - 数据库多表查询编写SQL
 - 如何设计数据库表
 - 有调试过数据库参数吗?
 - 网络与操作系统的常规知识
 - 手撕题:双向链表的反转
 - Git合并分支的相关细节问题(不会,没合并过)
 - ZK、DB、Redis锁的选型
 - 提出反问
 
美团 Java 后端开发(已接到offer)
一面:(乱序,回忆版)
- 自我介绍
 - 手撕题:验证二叉搜索树
 - 实习及项目相关经历
 - HTTP协议的组成、报文格式、头与body的分割、Cookie的携带方式
 - 计算机网络分层模型
 - TCP的可靠性保障机制
 - HTTPS校验的哈希算法
 - HTTP 2.0与HTTP 1的区别
 - 什么是队头阻塞?2.0为什么不使用UDP?
 - 总体问了很多计算机网络的基础知识
 - 面试中询问自己的亮点可以分享
 - 提出反问
 
二面:(乱序,回忆版)
- 自我介绍
 - 手撕题:反转链表
 - 实习及项目相关经历
 - 用户态与内核态
 - RPC过程与这两种状态的关系
 - 自定义的序列化方式偏向于Json还是Protobuf?这两个序列化有何区别?与自定义序列化的性能差异如何解决?如何处理分包与粘包?如何进行注册与注销?讲述SPI实现及依赖倒置?动态桩的定义?客户端是否能指定调用IP?
 - 简单八股问题
 - 闲聊及实习时长
 - 提出反问
 
B站 安卓开发 一面未通过
- 自我介绍
 - 手撕题:LRU、二叉树层序遍历、单例模式
 - 实习及项目相关经历
 - HashMap、ConcurrentHashMap的底层实现
 - 讲解红黑树的原理
 - static与final关键字结合JVM的理解
 - 讲解JMM
 - 垃圾回收及死亡对象的判断方法,具体讲解可达性分析
 - 线程与进程、进程的通信方式、线程状态、上下文切换、死锁及其解决方案、wait与sleep、多线程相关知识及安全问题、两种锁的区别和底层实现
 - 内存管理
 - Java设计模式
 - Java代理
 - IO模型
 - 提出反问
 
面试体验非常愉快,面试官全程充满笑容,自我介绍结束后还夸赞我的表现,尽管我对安卓并没有什么了解。
Wind Java 后端开发 一面未通过(这是我最早的面试,当时复习不够)
- 自我介绍
 - 线程池相关(最大线程数与核心线程数相等的问题)
 - 解决循环依赖注入的方案
 - Spring Boot常用注解
 - @Resource与@Autowired的区别
 - ${字符串替换符}与#{占位符预编译处理}的区别
 - Linux常用命令
 - Redis数据结构SDS的优化
 - Redis失效如何验证登录
 - Redis集群相关问题
 - Redis的ZSET底层实现
 - 对消息队列及中间件的了解
 - 线程内存泄漏的问题
 - MySQL主从数据库设计
 - 提出反问
 
MetaApp Java 后端开发 一面未通过(也是比较早的面试)
- 自我介绍
 - ThreadLocal底层实现
 - AOP与IOC原理及其应用和相关注解
 - ArrayList与LinkedList的区别
 - MySQL索引的使用
 - MySQL的并发问题
 - MySQL事务的理解
 - MySQL刷盘原理
 - Redis的持久化机制
 - Redis缓存问题
 - MySQL三大日志
 - 线程池的理解与创建方法
 - 手撕算法:打印二叉树指定路径、青蛙跳台阶问题
 - 程序题:判断两个对象是否相等
 - 提出反问