2019 年 5 月,我办理了离职手续,离开了上一家公司。国贸 CBD 确实是个充满梦想的地方,但每个人都在压力下奔波,成为了金钱的奴隶。离开并非因为不喜欢这里,而是为了寻求更大的舞台,让自己沉淀和成长。我认为钱和理想并不互斥,赚得少不代表工作价值低,但我们需要在责任与成长之间找到平衡。
美团网
美团作为国内头部大厂,技术实力不容小觑。面试流程包括资料填写、多轮面谈。
一面重点:
- 数据结构:手写 HashMap。这属于 JDK Collection 包的基础,利用数组加内部类实现哈希表结构,通过 Hash 算法和链表操作完成插入查询。这部分需要熟悉源码逻辑。
- 并发编程:生产者消费者模式。当时没能立刻写出代码,其实最简单的方式是用
wait和notify阻塞唤醒,或者使用ReentrantLock、CountDownLatch等工具类。基础不牢地动山摇,这点需要反思。 - 算法题:字符串处理,位图法解决,难度适中。
- 架构设计:要求画出熟悉的系统架构图。我分享了过往项目中通过 Hessian 解耦前台调用与后台业务逻辑的方案,利用序列化反序列化传递实体,提升接口可重用性和系统维护性。
二面及终面: 深入探讨了 JDK Collection 细节、项目部署思想、并发锁机制(读写锁 vs synchronized)、事务隔离级别(脏读、不可重复读、提交读)以及 Spring 事务管理原理(编程式与 AOP 式)。最后部门负责人询问离职原因和期望薪资,整体感觉公司环境不错,福利完善。
百度
百度社招名额较少,部分部门特批才有机会。面试流程紧凑。
一面: 刚来就写代码,单链表算法题,完成后面试官满意。随后追问项目细节:Spring 如何管理 Zookeeper?Zookeeper Leader 选举流程?ZAB 算法原理?ZAB 基于 Paxos,是获得图灵奖的算法,当时回答得比较心虚,好在面试官未深究。
二面: 资深面试官主要考察 JVM 和并发。
- JVM:性能调优,
jstack使用,Full GC 与 Minor GC 分析。 - 并发:多线程同步状态问题,如多个线程达到同一状态后执行,可用
CyclicBarrier实现;读写锁避免写线程饿死的策略;控制线程超时撤销,利用Callable返回FutureTask或Future接口触发撤销。 - 项目:对账系统设计,数据量、并发量及数据库设计。
三面/四面: 涉及第三方支付技术流程理解,支付细节复杂,需展现业务认知。最后一面技术总监侧重考察异步处理幂等性(唯一索引或分布式锁),以及软技能:团队价值定位、沟通协作能力、跨部门冲突解决。这部分准备不足,回答略显生涩。
阿里
阿里招聘薪资诱人,面试包含电话面及多轮技术面。
核心考点:
- JVM 相关:完整 GC 流程(YGC 到 FGC),对象晋升老年代机制,垃圾收集器优缺点(重点 CMS),内存溢出排错,JMM 模型,类加载器,反射机制。
- 架构与分布式:Tomcat 调优参数,缓存策略(Redis 持久化、集群、淘汰策略),防缓存雪崩,分布式唯一序列号生成,秒杀系统设计(超时关闭交易),分布式锁实现,MQ 选型与消息丢失保证,分布式事务原理,一致性 Hash,Paxos 算法,Redis 与 Memcached 内存管理区别。
最终拿到了 Offer,但在 996 工作制与个人生活之间需要慎重权衡。
总结
这次面试经历涵盖了从底层原理到架构设计的广泛内容。很多同行问我技术是如何积累的,其实无非是在工作中注重积累,保持持续学习。希望这份复盘能为正在求职或打算跳槽的程序员提供一点查漏补缺的参考。


