为何辞职
- 个人规划。年满30,期望自己在管理能力上有所提升。目前的小组虽然对于一个程序员技术能力提升帮助很大,但是缺少锻炼管理能力的机会(想带新人、想去负责一个多人合作完成的项目)。
- 经济压力。疫情背景下,收入减少。90后独生子、目前身背房贷、需要赡养老人,精打细算下还能勉强维持。未来成家后还需要抚养小孩,这钱咋算都不够。所以,在疫情前景不明的前提下,更倾向于一个受疫情影响低的行业。
准备和应战
- Mysql数据库。主要学习来源是极客时间上《Mysql实战45讲》以及在工作中解决死锁、慢SQL等问题的积累。面试中常问到的比较多的就事务的四大特性怎么实现、MVCC怎么实现、间隙锁怎么实现(面试官学习来源可能也是《Mysql实战45讲》)。问到慢SQL怎么优化的问题,个人觉得可以从索引的最左原则、排序、join这个三个方面阐述。
- 算法与数据结构。主要学习来源是《算法(第4版)》这本书。其实算法与数据结构是深入学习其他课程的基础,把这门课学深了,在使用其他第三方开源组件时就能更快上手并且利用其特性完成一些特殊的功能。比如,可以利用Redis的zset实现一个延时/优先级队列,这个思想和利用堆来实现一个延时/优先级队列思想是一致的。
- Redis。关于Redis数据结构,在学习算法与数据结构时或多或少都接触。所以在Redis的准备中,我更多地是去关注高可用方面的知识,比如复制、哨兵、集群,虽然工作很少接触,但是面试很常问。
- 消息中间件。这块市面上主要有三种,RabbitMq、Kafka、RocketMq。需要关注的点其实都差不多,如何保证消息不丢失、如果提高吞吐量、延时队列如何实现、如何实现顺序消费。三者在以上关注点的解决方案上差异还是挺大的。如果对于中间件高可用方面研究比较深的话,也可以在面试中提出,属于加分项,面试官可能都不知道(面试官心里:懂得挺多啊)
- 架构。主要学习来源是《亿级流量网站架构核心技术》这本书,再结合SpringClond、SpringClondAlibaba的常用组件的源码巩固学习。
- 八股文。HashMap源码、ConcurrentHashMap源码、AQS源码、线程池各个参数的意义、synchronized和lock区别、乐观锁和悲观锁区别、spring生命周期(已触发条件反射-口干舌燥)
- 管理。尤其是终面或者HR面会问到,这方面的学习来源还是日常观察与总结,观察团队leader以及其他自驱能力强的同事,他们是怎么去负责一个项目、怎么去驱动别人更好的完成工作的。
- 关于刷题。量力而为,虽然目前BAT大厂算法题是敲门砖,但是为了这个花费太多时间,放弃其他很不错的工作机会,是有点得不偿失。