别让时间破碎了梦想,遇见未来不可思议的自己——秋招总结
新的一届校招开始啦,大家可以找我投递简历呀呀呀~
19年的10月只剩下最后一天,我们这一届的秋招也接近尾声~
在我找准备找工作的过程中,在网络上搜集过很多有用的信息,也在牛客上看到过很多往届的经验总结帖,这些帖子给了我很多帮助!
分享是进步的最快方式。
因此在工作尘埃落定之后,决定将我的秋招经历总结记录下来,希望大家共同进步。
我是20届应届硕士,本科毕业于西电,研究生就读于中科院。求职方向是后端研发工程师(Java方向)。
在此次秋招过程中,投递了大概11家公司(都是投递的提前批,后续我会介绍提前批和正式批的区别)。
参与面试的公司的有9家,一共拿到7个offer。分别是美团SSP、华为SSP(15级)、百度SSP、拼多多SP、祖龙娱乐SP,加上两个白菜offer(阿里和网易)。
我的总结主要侧重于后端方向,当然其他方向找工作的师弟师妹也可以参考一下。算法方向的可以参考我室友的经验总结
(https://www.nowcoder.com/discuss/328830)。
1. 阴差阳错进入后端工程师方向
应届生找工作,首先是方向的选择。无论是开发,算法还是安全,都是很优秀的从业方向,并不存在方向上的优劣。
对于方向还未确定的学弟学妹们,主要可以从三个方面来考虑:
- 个人兴趣:是否真的喜欢这个方向
- 已有基础:在该方向上是否已经有一定的技术积累
- 客观环境:手上的项目是否与该方向相符
如果单纯从个人兴趣来选择职业方向,我想是需要慎重的。需要反问自己是否真正的做好了准备,往往兴趣一旦成为日复一日的职业,将会变得很枯燥。因此,职业方向的选择需要三个方面结合起来考虑。
后端工程师并不是我最初所选择的职业方向。最初保研时,我的目标是“算法方向+硕士名额”(当时还没有做好读博的准备,其实现在对读博并没有那么排斥)。一开始联系到一位北大的老师,但只有博士名额。后来了解到中科院硕士名额多,便在教师主页上找到现在的老师。
理想与现实总是有差距的,虽然老师主页的研究方向上写着DM方向,但实验室的实际项目主要是网络空间探测,并没有算法研究的相关基础。一盆冷水浇到头上。
花了一段时间考虑加调研之后,结合已有技术基础、实验室客观环境等因素(以及个人并不排斥后端工程师方向),我及时地将职业方向调整为了后端工程师方向。
应届生的方向选择相对于社招职工来说,其实是很灵活的。大家不妨花一段时间,仔细考虑一下以后的职业发展。不要死磕一个方向,也不要匆忙下决定,正所谓磨刀不误砍柴工嘛~
2. 养成良好的思维方式和逻辑
回顾四年本科加上已经过去的两年研究生生涯,除了知识的汲取和积累之外,我觉得更重要的是所养成的思维方式和逻辑。一个好的思维方式能够让你少走许多弯路。
当然,我在求学的道路上肯定走过许多弯路,但同时也在不断修正自己前进的方向。
我总结了几点个人觉得比较有用的建议,分享给大家:
- 选择大于努力(这是我和室友两人的血的教训
)
- 功在平时
- 善于利用开源资料
(1)选择大于努力
为什么选择大于努力?一个好的选择往往会让你能够在同等的付出下取得更好的成果。一个适合自己的专业、一个适合自己的科研方向、一个适合自己的公司/部门等等,都对以后的个人发展有着很大的影响。
相反,假如你选择了一个不适合自己的专业或者方向,你需要花费更多的时间来让自己的个人发展重新走上正轨。
当然,选择大于努力不意味着你做出了选择就无法挽回,无非就是你需要投入更多的成本(如你的精力,时间)。因此大家如果做出了相对错误的选择,也不要轻言放弃。特别是我们现在还年轻,还有容错。
做决定一定要慎重!
(2)功在平时
本科的时候都习惯了在考试的时候临门一脚,突击复习。但随着年龄的增大,积累的东西也会越来越多,临门一脚的压力也会越来越大。因此试着调整自己的学习习惯是很重要的。
最难的事情便是坚持!
平时多注意积累,自己的水平肯定会越来越高。功在平时!
(3)善于利用开源资料
这个世界最不缺少的就是牛人!
任何时候都不要自满,比自己厉害的大有人在。
互联网的核心精神就是开放
网络上有很多优秀的资源(大佬的blog,GitHub上优秀的开源项目,成熟优秀的开源框架等等),我们要学会利用这些优秀的资源,站在巨人的肩膀上,我们才能看的更远。
3. 后端工程师技术栈
一个应届的后端工程师所需要的具备的能力/经验分为四个级别:- 必备级:数据结构算法、Java语言基础、网络协议
- 补充级:操作系统、Spring全家桶、数据存储转发相关
- 实战级:项目经验、实习经历
- 锦上添花级:高并发场景的处理经验、大数据处理
- 必备级是你必须要会的,如果不会,那就可以告别秋招了。理论上必备级的技术栈准备的很熟练的情况下,找到一份白菜offer是没有问题的。但过程可能会很艰难。
- 必备级+补充级的技术栈很熟练的情况下,你就可以收割大厂白菜offer了。如果基础很扎实,那么SP也是可以的。
- 必备级+补充级+实战级的技术栈如果很熟练,运用自如。那么你就可以收割大厂SP offer了。如果准备的尤为扎实,那么SSP offer也不在话下。
- 必备级+补充级+实战级+锦上添花级的技术栈如果你都运用自如,那么SSP offer在向你招手。
3.1 必备级技术栈:数据结构算法、Java语言基础、网络协议
(1) 数据结构算法
只要你寻找的是技术岗的工作,那么数据结构算法一定是你必备的技能。算法能力的日积月累是很重要的。
我本科是电子信息工程专业的,研究生才转入计算机专业。虽说西电只要是电子信息与计算科学相关的专业都会学习计算机方面的通识课,但当时对算法课并不是很重视,因此涉猎不深。
真正重视是研一选修了卜东波教授的《计算机算法设计与分析》一课,卜老师讲课深入浅出,替我重塑了算法方面的知识体系,受益匪浅。相信中科院选修了卜老师课程的同学都会有相同的观点。
提升算法能力,完善的知识体系和日积月累的磨练是缺一不可的。如果仅仅想靠临时抱佛脚那是远远不够的。
- 完善的知识体系:知识体系的构建除了课堂学习之外,我推荐左神的《程序员代码面试指南:IT名企算法与数据》一书,该书对于面试所需的算法知识整理的相对全面。(我起初下了PDF版本的书学习(实在是愧对左神),学到最后才觉得左神这本书是真的有很多干货在里面,非常值得学习。于是便立马从京东上下单一本正版书籍,也算是支持左神了。)
- 日积月累的磨练:想要不断锻炼自己的算法熟练度,大家可以去LeetCode上坚持刷题。LeetCode上的题目后面都会有前人想出的最优解,大家在自己AC之后一定要与最优解进行对比。最优解的思路有时是很奇妙的,会加速自己算法水平的提升。
(2) Java语言基础
Java语言基础的复习我提供几个经验之谈:
- 大家在复习的过程中要注意结合Java源码阅读进行理解,这样往往能够加深自己的印象,也能够理解的更为深入。
- 在阅读源码过程中大家不要死磕,可以结合已有的博客基础进行阅读,先理解前人的经验总结,然后自己再回过头重新理解源码中的精髓。这样可以达到事半功倍的效果。
(3) 网络协议
网络协议的学习要理论基础和实战经验相结合。任何知识经过实战的检验才会更加扎实,正所谓纸上得来终觉浅嘛~
关于Spring Cloud的学习,其实我涉猎并不深入,了解其熔断机制等浅粗原理。作为一个RPC框架,仅仅了解其中的皮毛。还需要往后不断深入学习。
在我看来,提前批是可以投递的,多一次机会何乐而不为呢
。除非你提前批表现着实很差,那样确实会有影响。
- 理论基础:理论知识的学***家除了书本以及大佬的blog总结之外,在这里我推荐极客时间上的一门课《趣谈网络协议》,这个专栏生动形象的讲解并梳理了网络协议的基础知识。
- 实战经验:除了理论知识外,我们要锻炼自己的实战能力,加深对知识点的印象。善于运用工具(如wireshark、Nmap、Zmap、Zgrab、postman等工具)进行发包、抓包,数据分析等实战过程。
3.2 补充级技术栈:操作系统、Spring全家桶、数据存储转发相关
(1) 操作系统
Linux操作系统在我们实际的开发过程中是必备的,因此熟练掌握Linux系统的使用以及其底层原理尤为重要。
Linux的操作系统的使用在这里我就不再赘述了。对于操作系统的底层原理,大家可以从三个方面去复习:
- Linux内核资源调度模型
- Linux IO模型
- Linux 内存模型
如果把这三个能够摸透,就已经很不错了。
(2) Spring全家桶
从事Java后端开发的同学都知道,Spring已经成为了业内公认的后端开发框架。Spring大家族从最初的Spring Framework到Spring Boot再到Spring Cloud,生态已经越来越完善。
因此后端工程师一定要具备Spring相关的技术栈。
对于Spring Boot的学习,大家不能仅仅局限于调用Spring Boot中的API,而需要了解其底层的原理。例如:
- Spring Boot中的Bean是如何注入的,又是如何调用的?
- Spring Boot在初始化时完成了哪些操作?等等
关于Spring Cloud的学习,其实我涉猎并不深入,了解其熔断机制等浅粗原理。作为一个RPC框架,仅仅了解其中的皮毛。还需要往后不断深入学习。
(3) 数据存储转发相关
数据存储转发相关的工具主要有:数据库,缓存、消息中间件等。如MySQL、Redis、Kafka,ES等。
针对MySQL,大家可以从下面几个方面来进行梳理:
- MySQL事务:事务隔离级别与脏读、幻读、不可重复读等之间的关系,如何通过MySQL锁实现事务不同的隔离级别
- MySQL索引:MySQL索引的原理,采用的数据结构,以及不同数据结构的优劣等。MySQL不同索引的区别以及如何优化。
- MySQL日志:MySQL的两种日志机制的区别,以及日志的原理,作用等。如何保证数据不丢失?
- MySQL主从备份:主从备份架构如何与读写分离应用结合起来?
- 等等
针对Redis,大家可以从下面几个方面来进行梳理:
- Redis的内部数据结构:不同数据结构的底层实现方式,不同数据结构的应用场景等
- Redis的特性:单线程下如何实现高性能
- Redis的持久化:RDB持久化和AOF持久化
- Redis哨兵架构:如何解决主从复制情况下的节点更替
- 等等
针对Kafka和ES,我对其底层原理了解的并不是很透彻,掌握程度仅限于使用层面。因此如果想要继续深入了解其内部原理的同学可以仿照上面的方式,自己进行梳理和总结。
3.3 实战级技术栈:项目经验、实习经历
既然是找的后端工程师的工作岗位,那么后端相关的实际项目或者实习经历肯定是需要的。很多研究生可能导师任务重,并不会放出去实习,因而担心没有实习经历会不会找不到好工作。 在这里可以给大家吃一个定心丸:实习经历与好工作之间没有必然的联系
我们实验室采取的是996的工作时间,因此我并没有出去实习,在秋招过程中也收获了这么多offer。
那么什么才是重要的呢?项目经历或者实习经历给你带来的是项目经验的积累,因此无论是实验室的项目还是实习项目,你所需要做的是不断地积累总结,提高自己的coding能力。
如果说你实习的过程中,仅仅满足于日复一日的业务代码的编写(做一个简单的CRUD boy),不重视自己对项目整体的把握学习,不注意积累思考。那么实习并没有起到它真正的作用。
3.4 锦上添花级技术栈:高并发场景的处理经验、大数据处理技巧
应届生其实接触高并发的商业项目的机会很少,除非你去大厂实习,才能真正接触到一线高业务量下的高并发场景。 我本人并不具备高并发场景的处理经验,因此能给出的建议较少。如果你有机会去实习,能够接触到这样的场景,一定要珍惜机会!
大数据处理技巧这个其实是面试中经常会询问的一类问题,例如:
- 海量数据下,TOP K出现次数的数据的筛选
- 海量数据下的数据去重
- 如何对短时间内的大量请求访问进行限流
- 海量数据排序
- 等等
其主要采取的一些技术方法有:布隆过滤器,一致性HASH算法,外排思想,MapReduce等等。
4. 秋招投递
秋招的工作投递可以分为提前批和正式批。两者没有本质上的区别。
提前批的优势:
- 多一次机会,提前批失败,正式批仍然可以投递
- 提前批投递人数相对较少,因此面试流程迅速,周期短
提前批劣势:
- 虽说提前批失败了正式批仍然可以投递,但是正式批的面试官是可以看到提前批的面试记录的,因此还是会有一定的影响
- 提前批投递的人数虽然相对较少,但厉害的人也会很多,因此竞争难度相对也大。
5. 尘埃落定
经历了三个月的秋招,对比手上的offer,我最终选择了去美团~哈哈,要去开水团喝开水了。 原因其实是多方面的,面试官的融洽交流,所去团队的技术氛围,薪资(毕竟我团给我开了开发岗的顶薪~)等等。
没有十全十美的事情,有的只是当下相对完美的选择。
希望这次的选择是向前进道路上迈出的坚实正确的一步~
其实想一想,如果不是那有何妨。不如立足当下,珍惜时间~ 努力让自己的选择变成正确的选择即可
~
就像当初保研时,虽然手握2/300的专业排名,放弃了清北的读博机会来到了中科院。但谁又能说当初的决定是错的呢,立足当下,珍惜时间即可!
用一句我最喜欢的话收尾~
别让时间破碎了梦想,遇见未来不可思议的自己~
2019年10月31日 益园