21届技术菜鸡的一年求职回顾
写在前面:自我介绍一下,21届末流211科班菜鸡,在校时学业荒废,技术基础薄弱,成绩一般,保研无望,遂准备工作。
求职战果:阿里、百度、滴滴、OPPO、招银等,battmd拿到了一半吧。
牛客可以说是承载了我的整个求职期间的心路历程,时间横跨一年,若有兴趣可以翻阅我的历史发帖。
本文力求在回忆总结、播撒鸡汤的同时多上点于阅读者有益的干货,对故事没兴趣请直接翻到本文后半部分
艰难起步:2020.4-2020.8
人没办法预知未来。
正如2020年4月21日的那个深夜,当我为字节跳动一周后的面试激动地彻夜难眠时,不会想到迎接我的将是毫无悬念的失败。
这一周里,我拼命背基础、写LeetCode,天亮就起,凌晨才睡,吃饭都在刷牛客找面经。只可惜,几年间落下的知识没办法用一朝来弥补,没有系统搭建的计算机知识体系,只靠着背几道面试题是经不起面试官的细问的,二面面试官问得我哑口无言的几个问题我至今都还记得。当时字节的流程经常是一下午连着三面,每次间隔十分钟,若是能过,三面结束就有结果,否则就此止步。二面结束后,我出门狂奔了几公里,心情沮丧,但隐约又觉得自己摸到了那扇通往大厂的大门。
五月份,学校开学了,我陆续又接到了几家公司的面试邀约,印象尤为深刻的是快手的面试,面试官戴着口罩,眼神凌厉,问得不仅是常规的八股,更涉及到计算机组成原理的一些专业知识,如磁盘的io,内存的读取之类,基础不扎实的我只好支支吾吾东拉西扯,最不应该的是连手写单例模式也没有做到bugfree,一面之后再无下文。
期间也面了好未来之类的中厂,面试官问我是否会Spirngboot、redis,得到否定的回答后微微摇头。小厂的机会我也没有拒绝,可惜统统以失败告终。好在最终还是拿到了美的集团的实习offer,这也是我整个实习春招期间拿到的唯一offer,它的面试真的很简单,只有一面,时长二十分钟,简单介绍了一下项目,问了一下快排,就结束了。当天下午hr就打来电话告知通过,感谢美的的认可,这对当时的我来说的确是一个不小的鼓励。
以现在的眼光审视当时的自己,那时的知识储备实在是匮乏得可怜,简历上除了罗列了一些知识点外,只有一个大二参加比赛的客户端项目,我却拿着它面试后台开发的岗位,面试官拿着简历简直无从下手,失败也就不足为奇。意识到这一点后,我开始学习JAVA开发的相关框架(SSM、SpringBoot等),一边着手准备项目,同时继续刷LeetCode。这段时间里我找了个github上的博客项目,把它的结构大概了解了一下后,就放上简历作为自己的项目,框架方面,看了B站上狂神说的视频,收获不能说很大,但对于Spring至少有了基本的认识,配合知乎、牛客上的相关面经,足以应付一些简单的问题了。
转眼时间已经来到了七月底,距我开始准备求职已过三个月,我又面试了涂鸦智能、奇安信等公司,依然没有通过。这时的我,开始面临一个选择,是否要去美的暑期实习?再三权衡后,我登上了去佛山的✈️(美的总部位于佛山顺德)
在美的的导师是个操着浓重湖南口音普通话的中年人,沟通起来有点吃力,人挺好的(有饭局还带我蹭),但也许是因为工作繁忙,没时间给我太大帮助。另一个同事杰哥教了我挺多,帮我拷代码装环境,虽然总是diss我的电脑文件夹凌乱,还让我不要总唉声叹气哈哈,还教我买块固态备份文件后自己重装一下系统。至今还记得有个周五下午,他给我讲了一两个小时的学习路线规划,告诉了我极客时间这个网站,给我举例自己是怎么运用上面的课程解决工作上的问题的,虽然后期由于时间紧张他也没多少时间搭理我了,还是很感谢他的帮助。另外需要重点吐槽的是美的给实习生发的💻是我近年来见过的最垃圾的电脑,六七年前的thinkpad,卡得你一愣一愣的,办公还必须得用它。
在美的我只待了一个月的时间,说来惭愧,这段时间代码几乎是一行都没有写,直到入职两周的时候代码的环境还有问题...归结原因,一方面是由于美的美云智数的业务模式所致,它是类似项目外包的经营模式,说好听点可以叫SaaS,售卖企业信息化软件服务。项目当时正处于开发得七七八八的验收阶段,所有人都很忙碌,没人期待实习生有什么产出,自己太菜项目的Bug我也无力解决,也没人给我系统讲解项目的结构。所以我常常是处于无所事事的状态,上班就坐在工位上刷面经、整理笔记,六点到就跑路回到公寓接着做题(美的提供免费单人宿舍,这点很不错)。总得来说,这是一段挺愉快的经历,遗憾的是没有时间好好体验大顺德的美食hh,但求职的压力始终没有消散,不断面试不断失败,甚至电脑还进水了......那几天心态崩溃,我把自己的负面也记录在了牛客上,也有了很多牛友鼓励,甚至有人表示愿意先借我一台电脑,感动。好在这段时间我也有所收获,花了一周时间搞了个RPC项目,没错就是你们都知道的那个,靠着这个项目,我面上了滴滴的测开实习岗位。这是我此生离大厂最近的一次,我必须再次做出自己的选择:去,还是不去?
渐入佳境:2020.9-2021.3
最终,我做出了当初和去美的一样的选择,从广东一路向北,来到北京。
滴滴的工作氛围就相当nice,团队年轻化,95、96的年轻人居多,我在测试组,很多女生,工位左右都是姐姐。左手边坐着把我招进来的姐姐,生活方面有问题都问她,右手边年长些的是我的mentor,负责在工作方面引导我。但时间长了就感觉到,自己对测试/侧开的工作并不喜欢,对于需求的了解不够清晰,经常有问题都得找开发,编写测试case的过程也让我觉得头疼。
后来就有了转岗的念头,可能真的是运气吧,我成功调整到了开发小组。新mentor是个工作激情十足的人,他做我mentor的日子里也是我实习收获最大的一段时间,虽然偶尔有点严厉,但真的是手把手在教我,让我从什么都不懂的纯小白成长为了能够胜任简单开发工作的菜鸟级开发选手。这段时间里虽然辛苦,但却足够充实。
再战春招:2020.3-2021.5
等到我准备离职回校时,时间来到了三月底。我又有些不安分了,想着抓住毕业前的机会,利用实习半年的经历再试试春招,看看自己的上限在哪儿。最终把很多秋招时不敢投递的国内顶级top厂都面了一遍,也就不再有遗憾了。这几家公司的面试经历我也罗列一下。
- 面试百度纯属偶然,是一位百度的经理在脉脉上和我打招呼,晚上十一点约的第二天早上现场面试,感觉难度适中,拿到了offer
- 字节投递的是抖音直播,一面面试官问得很有水准,很多没答上来,二面面试官的问题简单,但细节扣得很深,遗憾止步
- 快手不知为何,多次投递简历筛选都不通过,也许是去年面试评价太差了。
- 腾讯被捞了一次,还没面的时候发现自己就灰了,草草二十分钟了事再无后续,估计是kpi
- 阿里,最终拿到offer。
分享一个投递心得:我拿到offer的几个大厂都不是在官网直接投递的,滴滴和阿里都是在Boss上的内推人帮我组内直推走流程,能够实时跟踪反馈结果!百度也是直属leader在脉脉上联系的,不是广告,供牛油们参考下。
分享下求职路上让我印象最深刻的几个瞬间:
第一天到佛山的时候,去得太早物业还没开门,太阳太晒,跑到小区旁边的网吧开了台机子刷LeetCode
在美的面试顺丰,怕被同事发现,跑到楼梯口、楼下的草坪旁坐着面试
第一天到北京看房时约了OPPO的面试,看到一半跑去面试
快离开北京时早上早饭没吃就去百度现场面试连着两面,面完匆匆吃顿饭赶回去对项目,接着赶紧面阿里,面完后再收拾东西叫货拉拉搬家从海淀搬到石景山
现在回想起来,倒也不能说是辛苦,做一件事情是否困难很大程度取决于你对成功的渴求有多强烈,走到今天这步,应该算是六分努力四分运气吧,有了不错的起点,未来的路还漫长。
这一年从南昌到佛山再到北京,经历了美的和滴滴,接下来的几年可能要在杭州度过了,期待。
故事讲完了,上干货
求职必备的App/小程序/网站
- 牛客网必须排第一,收集信息,查找面经必备,也能在上面报团取暖,没事吹水缓解压力哈哈
- Boss直聘,很多是直接为自己团队招人的,一般更缺人,比起官网投递成功率upup、其他的智联、拉钩、***之类个人感觉用处不大,基本没回音
- 脉脉,搜集公司、部门信息首选,也能在上面找到公司hr帮忙内推。闲来无事吃吃瓜也是极好的
- 小程序offershow,应届薪资哪家强,中国山东...啊呸,还不快查offershow
- 网站codetop、leetcode,面试字节,算法方面有它就够了
- 简历推荐网站超级简历,模板美观大方,还免费
- 技术学习网站推荐两个:掘金,上面有很多小册子,其实就是电子书,质量高的不少;极客时间,很多课程,比较系统,就是有点偏贵,不过为了进大厂这点投资还是划算的对不对~这两个网站的风格很清爽舒适,让我很是喜欢,学习也要颜控对不对
- B站,课程很多,但是我没有耐心看完那些动辄几十小时的课程...
以上资源全都是我自己用过的,强力推荐
学习书籍
其实看书这玩意大家都知道,买书如山倒,看书如抽丝,我自己本身只爱看小说/名人传记之类的杂书,对于专业书籍一向是耐不住性子去啃的,这里只推荐我自己看过的一些比较通俗易读的书
《从根儿上理解mysql》:下面有篇幅会介绍
《深入理解JAVA虚拟机》javaguide上的jvm知识用于搭建体系,这本书深入细节
《码农翻身》对于初学者来说很有帮助,以拟人化的视角了解多线程等知识,趣味性很强,读来不吃力
《图解计算机网络》
《剑指offer》、《啊哈算法》简单易懂,适合入门
学习方式
我主要推崇通过两种方式学习,但归根结底是一种思想。
先提一个观点,表达和写代码一样,是程序员的核心素养
表达能力不行,首先你面试通不过,就算技术能力过硬,那也是茶壶倒饺子,人家看不见。其次就算你成功入职了,怎么和测试、产品对方案,你的思想别人没办法正确领会。向老板工作汇报,怎么体现你的战功和武功?述职晋升的时候,怎么在短短半小时里打动评委?
所以,表达能力作为程序员软技能里的Top one,它hin重要!!!
你是不是有点困惑,哎这部分不是讲学习方法的嘛,怎么又扯到表达上了?
哎别急,我要说的学习方法,就是通过表达来进行学习,在学习的同时,又锻炼了自己的表达能力,一举两得,岂不妙哉~
文字表达
我猜无数人都和我一样,收集过网上各类人等分享出来的XX知识点大全,长篇累牍,pdf动辄几十MB,然后下载保存关闭文件夹,三连操作一气呵成,感觉自己离大厂又更近了呢~然而现实是知识点保存之后只会默默躲在文件夹里吃灰,99%的人这辈子都再也不会把它们翻出来。
我的观点是,知识点被整理出来的最大意义,只对于它们的整理者有用!整理知识点的过程,是整理者对于自己知识体系的系统梳理,不断在面试中完善的过程,调整自己的认知。只有你自己打出来的每行字,你才明白它要说的是什么,对于其他人来说,只剩下很小的参考意义。写笔记是个好习惯,值得长期坚持。可以自己搭建一个简单的个人博客,用gitpage+jekyll,免费省心,半小时内搞定。软件强推Typora,此刻我就在用这个软件编辑这篇文章,MarkDown风格,优雅美观。
- 语言表达
> 相传,程序员届有一个古老的传说,桌面上有一只黄色小鸭子的程序员往往能在最短时间内解决自己写出来的bug。
>
> 具体操作方式是,沐浴,更衣,焚香,然后双手合十,口中疾呼,急急如律令!debug之神小黄鸭就会被召唤出来解决你的Bug。
不开玩笑了,其实小黄鸭调试法,其实是让你对着小黄鸭去讲解一遍这段代码自己的思路,用表达的方式去梳理自己的逻辑,通过这种方式找到潜藏的漏洞。听着玄乎,但却真实有效,很多时候,你以为你知道的内容其实并不清晰,学习知识也是一样,怎么判断一个知识点到底有没有掌握?就看你能不能自己独立把它讲述出来。
或者像笔者一样有男/女朋友也可以,同道中人自然更好,拉着一起学习,互相促进;不是学计算机的也可以讲一些通用的知识,比如LeetCode上的股票买入时机、凑硬币问题,讲解一些智力题等等,既学到了知识,又增进了感情,工作和生活兼顾,感觉人生已经到达了***~
不要嫌你的听众笨听不懂,听不懂只有一个原因:你讲得还不够深入浅出,你对知识的理解还不够扎实,再精美的高楼大厦也是由一块块不起眼的砖瓦搭建的,要相信任何知识点都可以用浅显易懂的方式表述出来,继续学习吧少年,再来一遍。
项目方面
我最初的项目是一个单体博客项目,但一个简单的单体博客项目是绝对满足不了面试官的期望的,尤其是在后端开发岗竞争尤为激烈的情况下,分布式、微服务几乎是必备的技能,如果项目上没有体现出来,那么面试官必定会对这方面的知识点加以盘问。所以面一家挂一家。而RPC项目作为一个代码量本身不大的项目,更适合求职。以下几点说明
- 使用到了网路编程框架、协调服务Zookeeper、序列化框架fastJson等
- 在基础知识上,运用到了动态代理、反射、这些高阶一点的JAVA特性
- 可以聊聊性能相关的qps,通过负载均衡的方式减轻单机压力等等,这方面可以聊的就多了,消息队列、nginx等,不过项目本身没有用到
项目一定要自己一行一行手打出来,不要偷懒,有不会的地方就去学习了解对应的内容。大概两周时间就够了,接下来要做的,就是整理一套自己对于项目理解的话术,并且不断通过面试官的反馈去调整自己的表达方式。一般面试开始的时候,自我介绍结束之后就是介绍项目环节,这段时间要着重展示自己的技术栈和亮点,为之后面试官的提问做好铺垫。项目的最大意义,是让面试官找到提问你的点,也就是所谓的抓手
自我介绍方面
建议分点,模板可以是“总分总”的形式,把自己的个人介绍分成校园生活、实习经历、个人技术栈等板块,分点介绍,这样不容易把面试官绕晕,能够很清晰地get到你的点。而每个大板块里又可以分几个小点,比如在实习期间做了哪些需求,在校期间的比赛、奖项等。一定要条理分明,否则你这边吹得天花乱坠,面试官听得云里雾里,效果不会好的。
对于很多同学来说,包括我自己之前也是,没有实习,在校经历又乏善可陈,就容易困惑,我到底该介绍点什么好?我觉得可以着重介绍自己最近在看得技术书籍、分享自己的收获,也不失为一种方式,这样做的目的:
填充自我介绍时间,不会太过短暂
引导面试官之后的提问,很可能就着重围绕你擅长的这方面
个人印象分up,容易给面试官一种善于自我驱动的感觉
你看,就像这样,分点陈述,是不是so easy,妈妈再也不用担心我的自我介绍了~
至于你到底看了什么书,就看个人的兴趣了,我自己是在极客时间上买了一本《从根儿上理解mysql》,这本书个人认为是极好的,虽然到现在也没有全部看完,但是数据库的实现原理方面已经足够我面试吹水用了,通过它我对于一些面经的理解更加深刻了,比如说,mysql怎么实现的mvcc(多版本并发控制)、为什么被删掉的数据依然存储在硬盘中,怎么个存法、事务是怎么实现的等等,这些书中都有答案。而且一些细节问题我相信很多面试官也是不了解的,毕竟工作中用得不多,那么这就是你展示你的技术深度的时刻了,比起只会硬背面经的竞争者,是不是立马亮眼了起来?
面试技巧方面
这一整年下来,从最初面试字节时说话都有些颤抖,到后来睡梦中迷迷糊糊接起电话就能聊(吹)个十分钟不带喘气的,我大概经历了技术面试四十多场。
- 其实面试的时候,碰到不了解的问题很正常,每个人都有自己的知识边界,面试官也未必全知全能。
- 对面试官来说,问问题的目的不仅仅是询问你对单个知识点的理解,更是对你整个知识体系的全面考察,如果你这里不了解,但其他地方有深度,可以把面试官往那边引导
- 比如说面试官问到IOC,你说IOC不是很了解,但可以讲讲Spring的另一块基石AOP巴拉巴拉(当然IOC不知道你已经没了,太过基础,这里只是简单举个例子)
- 总之,尽量避免长时间的停顿,会让气氛变得比较尴尬,进而影响接下来的发挥
- 其他方面就不多介绍了,对前期的求职者来说,每次面试机会都弥足珍贵,最好录音一下,面试完以后去复盘,从各个角度给自己挑刺,包括回答的语气、知识点是否回答完善等等。没把握的时候多找小厂练手,能力提升后再去面大厂,避免留下糟糕的面评。我今年投递快手无法通过简历筛选也许就是因为去年状态太差留下了糟糕的面评导致。
- 有一些面试百分百会问到的问题必须准备,
- 介绍下项目/实习中的亮点或者难点
- 项目/实习中收获最大的是什么
- 项目/实习中结合了哪些知识点
- 反问环节
- 我一般必问的问题是面试官对自己的评价。面试不是自娱自乐,你的表演效果如何,需要得到观众的评价。
面试的过程也是不断打磨自己面试技巧的手段,珍惜每个面试机会。比如我自己在今年春招的时候,由于有了实习经历,每次面试面试必问的一个问题就是让我介绍一下实习过程的项目。其实坦白说实习过程做得事情也没有多大难度,最开始我选择了一个业务场景相对复杂的需求,为了把这个需求讲透彻,自己整理了一大段关于背景的描述,一开始现场面试的时候感觉还好,配合当面纸笔画图描述,往往花费一定时间还能让面试官大致理解到我的点。后来视频面试甚至电话面试就发现,讲这个需求的ROI(收益比)实在太低了,花费了大量时间,从面试官那里没有得到很强的正向反馈。所以后来我换了一件事情去描述,效果就好了一些。
算法方面
其实现在我觉得算法只是一道门槛,对智力正常的IT从业者来说,只要花时间去练习,是肯定能达到要求的,一般公司即使是大厂也不会在这方面太过刁难。如果一上来就出一道Hard(不常见的那种,超高频的接雨水、LRU、K个链表等不在此列),只能说明这个面试官不讲武德,你和这个岗位还少点缘分,那挂掉倒也无妨,毕竟大厂那么多。我自己是大概刷了300不到,到达这个题量之后可能会发现,之前的题目基本上又忘光了,很好,可以来第二遍了,第二遍就会轻松很多,简单回忆一下,重点题一定要多练。
最开始写算法的时候我发现自己快排怎么都记不下来,学了忘忘了学。后来有一周我给自己规定每天早上醒来就写一遍,一周后写这它已经不过脑子了,拿着键盘就是敲,形成了肌肉记忆。通过刻意练习,巩固所学,在理解的基础上去记忆。还记得OPPO二面的时候我当场表演了手撕堆排、滴滴转正的时候表演手撕LRU,这种比较长的算法写出来是很加分的。
资源方面首推LeetCode的评论区,各路大神都会分享自己的题解。还有很多网红,什么甜姨啦,liweiwei,labuladong等等,都各有特点。看到有人喷他们,感觉倒也大可不必,每个人的思路不同,不适合你的也许其他人能从中获益。我看题解一般就是,这篇看不懂,马上就换,不去死扣,多看几篇总有适合自己思路的解答,不懂就留言提问,一般都会积极回复的。
课程方面只看过左神(左程云)的算法课,表达和编程的高手,配合上极富煽动力的语言和对题目轻蔑的语气,很容易给你一种自己能和他一样🐂的错觉。在初学阶段入个门是极好的,19年的时候基础版看过一遍。前阵子发现左神新课里顶着的新发型有点丑。。。我曾经可是他的颜粉啊,爷青结。。。。
面经
牛客网上的各类面经已经堆积如山了,不想在这里贴太多基础面经,就分享一下最近让我印象比较深刻的抖音一面的问题吧。
- 实现可重入锁的方式(AQS)
- go 中的线程安全,全局变量、channel是否安全、GPM模型、channel的buffer
- nginx如何实现限流,令牌桶和木桶的区别
- CAS中的AAB问题怎么解决
- redis跳表的数据结构
- 扩容对nginx负载均衡策略的ip哈希产生的影响(往一致性哈希去答)
- 缓存击穿问题,除了设置热点数据不过期以外的解决方案
- redis扩容的具体实现方式
- ReentrantLock如何实现(AQS实现)
阿里则偏爱jvm调优一类的问题
面抖音的时候又是时隔半年后春招第一次面试,不知怎么我总拿字节练手。。。其实也做了相对充足的准备,像去年一样闭关了一周,非常焦虑想要拿到offer。一面的时候面试官提出了很多没有意料到的问题,算法还来了个KMP,勉勉强强通过了,二面其实问题反而简单,没有意外,但是一些基础问题的细节没答好,还是没有通过。字节也算是心中的白月光吧,可惜越渴望好像就越得不到,阿里oc后字节hr又来约面试,拒绝了,以后社招有机会再面吧。
总结:
校招求职路漫漫,什么时候能结束这场战役?也许就在明天,也许是一年后
有个好心态非常重要,永远相信美好的事情即将发生(好像暴露米粉身份了)
抓住能让自己成长的每个机会,努力去做自己认为对的事情
成为一个乐观,皮实,自省的人,你我共勉
有问题直接楼里问哈,能回答的楼主尽力去解答一下
答疑篇
(1)怎么讲实习项目,这里扩展讲一下。
- 首先实习绝对是巨大的优势,特别是大厂实习。工作中的流程,从捕捉需求,到设计技术方案、再到初步自测、给mentorCR、给测试提测、再到上下游联调、灰度上线、全量上线这一套开发步骤是没有实习过的同学感受不到的。当面试官让你介绍实习做的事情的时候,虽然你很可能只是做做边角之类的辅助工作,接个小需求(像我一样),但可以适当地包装一下。具体怎么包装呢?
- 第一,在实习期间就要多加注意,什么样的工作是能在面试中展示的,业务上的事情主要是CRUD,对于系统代码的梳理,其实这部分是实习生工作的重点,但是对于不同赛道的面试官来说,很多时候很难get到你的点,不推荐讲业务。而涉及到数据库、网络之类的工作,属于技术人的必备技能,更适合去讲述,可以在实习期间就有目的性的去关注系统的sql,有哪些可以优化的点,结合八股里的知识点,比如说联合索引、最左匹配之类的,好好挖掘一下,打造自己的亮点。
- 第二,定期梳理,比如说每个月去整理一下这个月做了哪些事情,可以主动发月报给mentor/leader看,获取他们的意见,也防止实习期太长产生遗忘
(2)测试/测试开发相关问题
- 面试难度是否更低
这个是肯定的,通常意义下,测试/测试开发岗的面试难度普遍要更低一些。考察的技术栈和后端基本吻合,一些测试相关的知识稍作了解即可,确实是对自己技术不自信时进入大厂的一条捷径,基本上大厂里相同资历的测开和开发的薪资是相差无几的。
发展前景如何
这个我也不好妄下定论,就把我了解到的一些信息贴出来仅做参考吧。首先由于第一点,测试岗的面试难度是要低于开发的,我觉得各有利弊吧。
- 弊处是相对导致测试团队不那么受重视,分配到的资源较少,测试Leader如果不能在整个技术大团队中为团队争取,可能会导致晋升名额少或是团队整体绩效不高。
- 利是测试岗相对不那么内卷,努努力在技术上多打磨一下自己,比较容易崭露头角,成为团队中的核心骨干。其次是加班一般是没有开发那么多的,当然项目上线前总得来说还是很忙碌的
- 综合来说,我觉得判断自己适不适合测试/测开首先要找准自己的定位,如果是对于技术不那么执着,不那么“爱卷”,把测开作为自己的职业也未必不是一个好的选择。