适用范围:
后端开发 && (本、硕应届生 || 工作1-3年 || 目标职级p4-6)
本文主要从以下个方面回顾一下最近跳槽的事,从准备到收获,感触蛮多; 做一个笔记记录一下,也给“迷茫”的人一点点可能的意见
仅仅一家之言, 面试情况因为面试官的原因千变万化,仅作为参考哦~
基础介绍
一、公司面经 个人思考
二、准备过程 复习计划
三、各种学习资料推荐
基础介绍
个人技术栈:PHP、Java、MySQL、Redis、Dubbo、RocketMQ、ELK、Nginx、git等
因为我自己在老公司也会负责新人招聘和一些培训,其实也算看过蛮多简历,但是一看都是熟悉、熟练、精通,一问啥都不会的情况实在是太多太多了。 我先给出我自己对这些的定义,方便后文,仅算一家之言的暴论
熟悉程度 | 应具备的能力 |
---|---|
了解 | 明白运行机理,使用中出现问题时,具备准确“猜”出问题出现原因的能力 |
熟悉 | 看过部分核心源码/研究过部分设计思路,能快速定位问题原因,并拥有处理使用中遇到的错误的能力 |
熟练 | 看过核心源码 / 深入研究过框架或中间件的设计思路,从设计者的角度上思考过,能熟练的解决使用中遇到的问题,能深入浅出的棒他人理解实现机理 |
精通 | master深入研究过源码实现/设计思路,自己能设计/实现过相同功能的产品,能给出自己在这一方面的系统解决方案 |
我这里提到一个“猜”, 这个来自某缪姓老领导给过我的建议。
这个“猜”不是瞎猜,而是根据经验和问题的表象,大致判断出问题可能出现的原因,其实很多东西的核心是有通的部分的,而对工程师来说,猜的能力培养是对职业生涯终身受益的。不过确实需要很长时间的经验积累 开发经验作为支撑。
自身熟悉程度
语言/中间件 | 熟悉程度 | 具体描述 |
---|---|---|
PHP | 熟悉 | 日常开发训练出的,杭州php环境不是特别好,没有特别精进去研究 |
Java | 熟练 | 中途转,日常开发训练出来的,会是不是开发中捞捞使用类的源码看看 |
Go | 了解 | 硕士阶段写算法论文的时候强制自己使用,很久不用了 |
MySQL | 熟练 | 日常使用很多,有过很多百亿级别表的业务,深入了解过机理,没看过源码不敢说精通 |
Redis | 熟练 | 看过关于数据结构、过期、集群等核心实现的源码,内部做过Redis分享等 |
Dubbo | 熟练 | 深入研究过设计原理,自己模仿过实现。看过SPI、注册中心、集群等部分的源码实现,做过很多笔记 |
RocketMQ | 熟练 | 深入研究过rocketMq实现原理,对核心源码仔细理解过 |
Nginx、Netty、ELK | 了解 | 能熟练使用、接入工程解决问题,出现问题可以快速定位 |
git | 熟练 | 研究过git的整体实现,看过部分git源码 |
Spring | 熟悉 | 深入研究过Bean及Aop相关的源码 |
Mybatis | 熟悉 | 深入了解过源码,开发过插件 |
从上面来看,我个人是没有在简历里体现过精通这个概念的,我个人对精通的理解是行业头部解决人员/ master,或者你自己真的充分有信息可以给出相似或更优的解决方案的。
从我个人面试其他人的时候,说实话,我自己也是比较反感精通这个事= = 曾经面了一个人两年经验,写的各种精通,例如精通git,精通Dubbo、精通mysql、ES等等等。
因为一开始Java基础不是特别好,我改问他git的reset是如何实现回滚的? 答:“这个我不是很清楚,但是我会用,用的贼熟练”。 二问:“我看你写的精通Mysql,那如果我手上一个业务大概10亿量级有性能问题,你有哪些解决思路?” 答:“就是你优化sql,explian找慢的原因就好了,xx(被我打断,想说explain的东西)“ 三问:“那100亿呢?有什么方案,可以不局限在mysql,任何都可以“ 答:“你这个问题问到我了诶(我当时简直无语。。。), 我想想(然后沉默了很久)“ 后面我就没怎么问了。。。。。
一、公司面经 个人思考
1.1 公司面经
先说一下我自己的结果好了, 总共投了3个公司,均在杭州。具体部门就匿了,不想被搅到乱七八糟的事情里= = || 以下所以均是技术上的讨论,不会涉及公司机密及面试具体特别的细节 我自身在公司职级是P4(当时不太懂招聘的事情。。被老东家的HR坑了,按理说研究生毕业应该直接p5起。。),因为20年疫情,也没有晋升,自我评估属于p5 ~p6的水平,面的也是高级/资深
网易 酷家乐 阿里 都走完了全流程,前两家都拿到了offer,阿里还在等最后的定级和薪资
前两家实际最后给的反馈也都是综合考虑年限 经历-》都给到p5 (其实感觉职业前期有过升p再进行跳槽会更好,包括老东家的老领导其实也找我聊过很多次,但是“ 画饼”这种事情,对吧。。还是看实际情况吧) 这三家的职位其实主要招3-5年经验的人, 可能因为硕士毕业 1.5年实际工龄,最后都蛮幸运的走完了流程。 首先感谢一下3家的面试官们~
三家公司分析表
公司 | 综合难度 | 职级/年限限制 | 轮数 | 整体耗时 |
---|---|---|---|---|
网易 | 中 | 相对弱 | 3技术 1HR | 非常快1周内 |
阿里 | 中 | 强(年限) | 1电话沟通 1笔试 3电话 | 超级慢好久好久。。。 |
酷家乐 | 高 | 相对弱 | 1电话(技术) 3技术 1HR | 快两周 |
三家总体的综合是这样,下面是具体到公司面试情况:
1.1.1 网易 网易是由老东家离职的一个关系蛮好的朋友内推的,简历筛选1天,电面一天,约现场因为主管有事拖到了第二周,整体速度非常快。。。我人傻了(真的。。)
- 一轮电话 40min 自我介绍 过往项目中印象最深的地方 Redis这块你们项目达到3.5左右的QPS,如果出现问题你有什么解决方案,这个场景有其他的解决方案么? Redis集群的理解,迁移slot的时候会出现哪些可能的问题? 说一下你对MySQL的理解 limit的原理说一下? 数据库的替代方案?其他市面开源框架的了解程度 整体流程说完大概45分钟,主要是看业务难点 自己有没有业务思考和替代方案以及一些基础知识的熟悉情况。 网易后续流程都是现场一次性走完
- 二面(主管) 45min 自我介绍 过往业务印象最深的地方、着重说现上问题的解决方案、 更大的业务量你会如何设计; 针对解决方案里MySQL、Redis 问了很多自身的理解,中间件为什么要这么设计的原因等; 对RocketMQ的持久化源码实现说一下? RocketMQ各种问题如何理解(会造成的影响,如何避免); 数据库的替代解决方案 线上调优的经验/思路? 想问他的事 很多细节的问题记不清了,主要是考察业务深入度和一些技术实现的理解 之后主管介绍了一下面试部门主要负责的业务和我未来可能要做的事 主要还是根据你说的问,相对比较放飞和自由,看你的技术视野和深度 主管是男的,但是属于看着十分和善的人,(舔一波,)整体流程比较好,会引导你答问题
- 三面(交叉) 40min 自我介绍 针对过往业务问,要求画了一下目前公司的技术架构图以及业务架构图 针对里面的技术点问了一下 想问他的问题 其他的实在是冷到想不起来。。。那天太冷了,印象比较深的是面试官最后他不停摇手告别,有点点微胖又满脸笑就特别可爱 哈哈哈
- HR 似乎专门是负责招聘的HR,不是聊薪资和定级,全程都比较Cool。。中间有几次她被我无厘头逗到憋不住 哈哈哈哈 总体有点点吓人= = 自我介绍 过往项目和印象最深的点 做过什么公共性的项目 说一下你过去的经验和收获,你能为团队带来什么 带领小项目或者团队中遇到的问题,如何解决 喜欢听什么人的歌? 期望薪资,以及涨幅原因 为什么想离职? 一周内会出结果找我 有很多问题比较零散想不起来了,离职原因多从自身原因出发比较好
总结: 网易总体看,我面试的部门 问题比较贴近实际开发,比较考验一个人的技术视野宽度以及深度,对个人思考程度有一定的要求。相对来说属于中等难度,毕竟没问算法
1.1.2 酷家乐
酷家乐也是离职的同事帮忙内推,先是在业务平台,后来被转到技术中台部门(对并发场景解决经验有要求),从实际电面到现场也是一周内走完
- 一轮电话面 自我介绍 过往项目比较有难度的点,做过哪些优化 对描述的Redis、Mysql优化方案又详细问了一下这样 处理的原因 口述一道算法题的解法 :从一个数组中找出3数之和=x的结果集 整理就花了30 ,而且因为问的问题特别飘。。导致我一度认为自己挂了
- 现场技术二面(业务) 自我介绍 简历中提及的项目和负责过的东西,挨个询问设计思路、为什么要做、做了带来什么提升、中间遇到哪些问题等 JVM调优的经验,线上大促压测的经验,如何评估JVM参数(详细说) 想问他 的问题 纯看对简历中项目的熟悉程度,跟自己对业务的理解深度
- 现场技术三面(算法) 自我介绍 三道算法题 1、股票问题, 只能购买一次 求最大受益 2、3进制转7进制 3、三个数组A、B、C 分别各自产生一个数a、b、c 求|a-b| |a - c| |b - c|的最小值 这一题我一直把自己卡在贪心法去解,拖了很多,中途几个解决方案都被自己提出的反例驳回了== 最后给了一点提示,算是成功解出来了 以上算法均不考虑暴力解法 面试官属于比较温和的大叔哈哈哈哈, 很有耐心
- 现场技术四面(架构设计) 自我介绍 过去项目中最有技术挑战的点,我做过什么优化 让你设计一个业务中台的秒杀系统,你的设计方案,需要使用的中间件、系统图等,在旁边黑板画一下(比较开放的题,考对中间件的熟悉、分布式事务、表,前端知识等,网上也有不少思路,我是按照目前公司的架构和自己的理解做了一套) 介绍了一下他们团队主要负责的业务,以及业务规模,我可能分配的事情 最后的面试官我不确定是不是主管,是个很亲切的姐姐,感觉技术很强的样子
- HR 比较轻松了,聊了一下自我介绍,过去的经历,期望的薪资和职级,要了一下微信,说一周内会出薪资和职级结果找我
总结: 总的来说我个人在酷家乐的面试情况是觉得是有相对来说,最专业的流程,每轮的点也比较深也很广,相对来说难度蛮高。因为还在起步阶段,可能薪资最后不会给到其他大厂那样特别高,知名度也是,我个人面完其实被他们的氛围有点打动的。。。但是毕竟要受很多因素制约,最后选择的可能性不是特别高。。。 不过真心认为酷家乐的技术团队还是蛮强, 蛮推荐去
1.1.3 阿里
阿里面的流程比较长, 我是在20年的9月份尝试出去面过,但是不准备走,只是想通过面试发现自己的薄弱点,所以在Boss上投了一个。先走了三个流程:一个电话面基础,一轮笔试题,一轮业务面。之后就是挂起的状态,在流程中一直锁简历。 这次出来找,一个之前的同事想内推看看,因为简历锁的冲突,那边又捞起来了。。。算是整个流程4个多月。那边说了一下他们的考虑,主要是年限问题,所以想再看看一个季度的成长再决定。
- 一轮电话面 40min 自我介绍 说一下你们项目中使用的主要技术框架 概括性的说一下你对MySQL的理解。 说一下Dubbo吧,按照你自己的学习和认知说一下 RocketMQ保证消息不丢的手段、以及事务 你觉得RocketMQ设计比较好的点说说看 动态代理说说你的理解工作中使用经历 说说你对Redis整体设计的理解,和你觉得设计比较好的点。 介绍了一下他们事业部相关的情况,会在下星期走后续的流程。 主要是面了一下技术广度和深度,算是摸底面。
- 二轮笔试 限时1H 三道算法题。 第一题是关于字符串的,判断A是否是B的子串 第二题是设计模式,给一个工厂模式的范例 第三题是多线程, 一个餐厅8个厨子 10个顾客,5个碟子,模拟一下情况
- 三轮电面 55min 自我介绍 研究生阶段做的事情,以及做得好的点 研究生阶段做到项目 对简历上负责的项目问 , 觉得比较难的技术点,你是怎么解决的 在项目沟通中有没有比较难沟通的时候,是怎么解决的 在技术选型上有自己的考虑么?说说看 如果让你负责一个20人左右的团队,有一个需要一个月左右的小项目,你会如何做? 这里其实讨论了蛮多,但是有点久远 不太记得清了
- 四轮电面 40min 说一下从9月到现在3个多月里,你负责做过的事以及比较有难点的东西吧? 你负责的双11、12规模怎么样的?你对项目目标和背景 以及保障点的认识说一下? 玩法中具体的实现方案? 压测说一下 你刚才说到的技术方案有更好的解么?如果我把流量提升100倍的量,你再会怎么设计呢? 你在当PM的时候,团队管理以及工程进度上,做过什么事? 比较复杂的问题,其他团队不愿意配合的时候,你会怎么跟进? 这3个多月你的学习情况说一下
- 五轮电话面30min 跟第四轮问题差不多,额外多问了一些并发包的源码实现、反射的源码等, 电话接的比较突然,跟拿到其他公司offer也算隔了比较久,很多细节实现都记不清了,全直接说不知道了 总结: 阿里总体面下来他们考虑更多是 项目经验 (管理&开发) 个人成长性,因为是社招,对工作年限有一定的要求。虽然写的比较简单,但是实际面试的时候,问的问题面特别广,相对也比较深。 补:个人体验上,对阿里的面试整体不是很舒服。 先是不预约吧,可以说是突然袭击看表现 后面预约了,同一时间段几个人同时打你电话,五电话面的时候接着一个,外面不停有电话往里打。。。 不知道怎么吐槽了,感觉像是年底了冲冲KPI吧。。
二、准备过程 复习计划 开始有跳槽的想法是在20年3月,公司进行了大规模裁员,可能我作为相对核心的开发,两轮都没有裁到我。 这时候实际开始有居安思危的想法,想着对实习 工作阶段的东西进行整理,万一出什么事不用再开始忙。 这里主要分了三大步,并给出我自己的例子用来参考: A、基础梳理:2020.3 - 2020.8 先上Boss等平台梳理要求,以及自己的技术栈;按照知识点梳理,思考业务中的使用;对源码的思考;制作复习笔记。 举例1----MySQL: 1、通过书籍 / 文章梳理出知识点 :例如 MySQL技术内幕、极客时间 2、思考自己业务上对知识的应用,并延展开。 例如: 为什么要通用InnoDB引擎? 哪些情况可以用MyIsam呢? 行锁这一块可以用在哪些场景? limit如何实现的? B树、红黑树对B 树的缺点? B 树对计算机系统层面上来说有什么优点? MVCC如何实现的?对业务上会出现哪些问题? 举例2----Dubbo: 1、准备:先过了一遍官网的文档 & 示例。重点读了一本深入理解Apache Dubbo。 2、思考: 画一遍Dubbo的架构设计图 画一遍dubbo注册和请求的流程图。 Dubbo IO线程和通信线程的交互图。 服务治理时的原理,以及timeout部分源码 注册中心如何实现的。 Dubbo 如何和Spring打通的? Dubbo SPI的优点和实现原理。业务中如何使用SPI这种方式做业务呢?等等 这个过程算是很漫长,一定要坚持写笔记,坚持想,坚持看,哪怕是错的也没关系,慢慢水平上来之后再纠错再反思。
B、尝试阶段 2020.8-2020.9 这里主要花了一个月时间去面试,有大公司有小公司,也拿到了相对当时工资来说还不错的offer,最终没有走,因为定的目标就是尝试。 主要目标是总结面试,对面的不好的地方进行整理,再提升。 C、冲刺阶段 2020.10-2020.12 赶上公司双11、12, 也算是一边作为PM带小项目,一遍继续整理知识。 这里算是比较好的机会,总结了很多关于公司的项目目标、规划、项目流程以及管理的经验。 最终算是取到了不错的效果。
总结:
坚持学习,保持热情,相信自己,不要灰心。
三、各种学习资料推荐
1、公众号: 我对现在的公众号其实比较反感, 一是很多人都是在贩卖焦虑 二是很多人都是在刷重复的东西。。想象一下早上打开微信,十几个公众号推一样东西的绝望。。。。 三讨厌标题狗。。。 给出几个我感觉相对有干货的公众号,他们也要恰饭,对于一些贩卖焦虑和标题的文章,就当没看见吧。。。。也算是矮子拔高个了 排名不分先后哦 , 按照微信公众号列表的顺序: 程序员DD 、 Golang语言社区 、 GitHubDaily、 Hollis 、架构师之路、 路人甲Java等
2、git项目、文章 & 网站 https://github.com/doocs
2 Java多线程入门类和接口 多线程社区
Java工程师成神之路
LeetCode、剑指Offer、程序员面试金典题解 题库 - 力扣 (LeetCode)
Snailclimb/guide-rpc-framework
免费在线学习代码重构和设计模式
Data Structure Visualization 数据结构演示 非常好的
怎么学习golang?- Go语言中文网 - Golang中文社区
简明 Vim 练级攻略 | | 酷 壳 - CoolShell vim
CL0610/Java-concurrency java并发总结
3、书籍 & 专栏等 推荐 《大话数据结构》
《大话设计模式》 《Head First设计模式》 《深入理解Java虚拟机》 《深入理解Java内存模型》 《极客时间-mysql45讲》 《MySQL技术内幕-InnoDB引擎》 《高性能MySQL》 《MyBatis技术内幕》 《深入理解Apache Dubbo》 《RocketMQ技术内幕:RocketMQ架构设计与实现原理》
Spring官方文档
《Redis实战》 《Redis设计与实现》 Redis源码 《Redis深度历险:核心原理与应用实践》
《啊哈算法》 《Java8实战》 《Java8编程思想》
《Java多线程编程核心技术》 《linux命令行与shell脚本编程》 《Git权威指南》
《阿里巴巴开发手册-华山版》
4、生产力工具
测试:
charles 种cookie switchHost 改本地host postMan 测试接口 笔记: Notion 超赞 mac 备忘录 Typora Background music
开发: Alfred 可以自己写脚本实现很多有意思的小功能 Intellj IDEA PhpStorm PyCharm DataGrip VsCode Sublime text Iterm Oh my zsh
— 本文结束 —