写给双非的校招经验书
秋招基本是要结束了,有幸收获了一些一线大厂的白菜,和一些二三线的sp。
因为是双非,这一路其实还是挺崎岖的。所以希望回馈给帮助了我很大的社区,如果可以能帮助大家少走些弯路,我将感到非常荣幸。
因为我主阶职业是后端,副职业是前端和算法。所以~下边可能后端的内容会更多些。
I am the bone of my sword——技术
技术考察的通常是技术深度与技术广度。
所谓技术深度,就是有没有钻研过一些事情,不仅知道是怎么样,还知道为什么是这样。
广度,就是对技术的热爱程度,比如新的技术是否了解,比如常见的解决方案是否清楚。
以下分点对上边的内容做出阐释。
技术深度
基础
首先要说的是基础!~这也是校招最最最重要的部分。
那么什么是基础呢~?我认为有两点。第一点,是编程语言;第二点,是计算机学科基础。
编程语言
首先说编程语言。
很多人都说自己熟悉Java,要问熟悉哪一块,一般都是说集合类和并发(大概是因为流传的面试题多?)。那我也以这两块举例吧。
我是非常反对背面试题的,因为内容真的太有限了(当然你能找到一只大佬带着你背除外)。很多背面试题的同学,在问到诸如HashMap为什么要二倍扩容,为什么要头插,为什么创建时候就要指定大小;线程池的实现原理,各个参数的作用,阿里规约为什么反对Executors创建线程池等涉及到具体应用及技术细节问题的时候,就会暴露出来。
我比较推荐的方式,先规划出语言的每个部分,然后各个部分从上到下。比如Java有容器、Java并发、虚拟机、IO几大部分知识点。就拿容器来说,比如Java集合类有两大接口Collection与Map,其中Collection下又有Set接口、List接口和Queue接口,再往下List下又有ArrayList、Vector、LinkedList等实现类。到了具体实现类,首先研究常见的API,这里用这个语言做做算法题就好。然后要去看这些实现类的源码,并思考为什么会这么设计,有没有用到什么设计模式,我比较推荐的方法是,去找他们对应的源码分析blog。接下来,总结一下收获,比如Arraylist怎么添加元素、怎么扩容、怎么删除元素、AddAll怎么实现的、Fail-Fast精妙之处在哪等等等...
我想这么复习下来,编程语言,就没有太多问题了。
附上我比较喜欢的整理方法。
计算机学科基础
很多同学把这里理解的有点奇怪。首先很重要的是复习计算机基础不是复习408!
应该复习到的计算机基础有数据结构、算法、计算机网络、数据库、操作系统、编译原理、设计模式。
这些问题,都是需要理解的,而不只是记忆,这也是和复习408不同的地方。
比如会这么问~MySQL为什么用B+树做索引,而不是红黑树、或者AVL、或者B树呢? Python中,进程线程有什么区别,不同进程如何通信?
所以,应当选用应用型的书籍进行复习。比如《MySQL技术内幕》>> 《数据库系统概念》。
常见解决方案与中间件
比如Redis、消息队列、MongoDB等等。
这里的掌握要结合业务并结合源码的学习。
比如
订单业务,遇到了大量订单怎么办。(采用消息队列做流量削峰)
那采用Kafka作为消息队列,怎么去保证消息的可靠?(采用确认机制,与同步刷盘)
但是这样会不会导致订单下了两遍? (保证消息消费幂等性)
Kafka为什么会高性能?(刷盘策略、提交策略)
因为我的经历非常幸运,参加了很多次技术分享,所以这些知识得以掌握。如果不具有相关条件,阿里中间件的许多工程师,经常做一些在线分享,也是干货满满,知乎的许多问答也是,可以参考。
技术广度
可能面试会问一些和岗位无关的东西。比如我被问过线性代数、深度学习、C++(Java岗)等等。
主要还是靠查是不是对技术有兴趣。当然这个是要慢慢培养的。
Steel is my body,and fire is my blood——心态
没有offer心态爆炸、实验室杂事太多心态爆炸、同学太傻X心态爆炸、笔试爆0心态爆炸、不公平待遇心态爆炸、被人议论心态爆炸。
每当心态爆炸时,可以看看这张图,保持心态。
I have created over a thousand blades——项目
项目不一定是自己从0到1搞出来的,也可以是参与过的,甚至是把别人项目搞懂了也行。
一定要了解的是,需求是什么,怎么实现的,有哪些坑。
比较首推的,肯定是实习。不论是大厂小厂。
大厂能提供光环和技术挑战,小厂也可以增长一下生产环境的见识,如果可以的话,可能是短期,一定要去实习一下。
如果实验室项目。双非的项目,通常都很菜。所以,一定要自己制造挑战。
比如选课系统,从原来要分专业分时选,到可以同时为全校服务。虽然可能要自己去想方案,但是实验场景至少有了。
总之实验室项目,不是实现功能就行,一定要优化优化再优化。
对于后端,我个人推荐两个项目
一个是工作流系统,一个是秒杀系统。
工作流系统,训练自己写业务代码的能力,怎么把逻辑绕好,怎么在复杂的逻辑之下,把代码写得优美。
秒杀系统,应对高流量高并发,训练架构能力,与优化调试能力,看log查瓶颈的能力。(需要实验场景)
最后,做完项目,一定要整理一下技术难点与问题。
Unknown to Death,Nor known to Life——社交
我个人崇尚浅社交。需要的是"你若盛开,蝴蝶自来"的遗世独立,而不是loser间的抱团取暖。当然我是个考不上top学校的失败者,只能在浅色床单上哭泣,所以我更多的把陪友人的时间变成提升自身的时间。
不过就我这种双非的失败者,还是非常幸运的遇到了一群沙雕网友成为了同行的小伙伴,一起复盘笔试题、互相模拟面试、一起分享校招信息、一起等offer,真的是非常非常棒的一群人。顺带ww软广一下,欢迎加入我们: 739720537。
还有就是比赛,以及技术分享会,也是很值得参加的。一起去完成一个项目,听听现在公司的解决方案,没准路就走宽了。
So as I pray——投递
1. 换上ycy祈福,真的有用。
2. 根据自己水平,选择合适的公司与部门。有些厂会有冷却期。
3. 没有消息一定要去舔。亲眼所见太菜被挂但还把offer舔来的,还不是个例。
最后的最后,祝大家
Unlimited Blade Works!