非科普通985硕进大厂的后端程序员的个人秋招总结

又到一年秋招季,据说今年就业形势不好,但我自己是没怎么感觉到。可能是由于准备的早吧,来分享下秋招经验,纯粹个人经验,不保证正确,仅供参考。

面经

投了10个左右,面了7个,拿了5个offer,面经如下:

  1. 云从 C++工程师
  2. 盛大 C++服务端
  3. 美团 后端
  4. 网易互娱 游戏研发
  5. 字节跳动 后端
  6. 携程 后端 凉经:
    就凉的很莫名其妙,一面就balabla介绍自己,介绍自己的项目,吹了下嵌入式TDD的各个要点,然后就面试官说,看你学习能力很强,我会推荐你入下一轮。然后就再也没消息了。
    感觉携程也不是很想招人,面试体验也不好,好几组在一个房间里一起面,特别吵,面之前在门外小道排队,和民工等发工资似的。外面看着SOHO很大气,内部真是一言难尽。
  7. 地平线 嵌入式 凉:
    二面凉的,也是不知道为什么,面的感觉没啥问题,面试官也说会推荐给下一轮,然后就没消息了。都是命吧。面经没记。

非科班如何进大厂

自我介绍下,上海普通985的硕士,非科班,就是那种看上去和编程毫无关系的专业。但研究生阶段实际上做的是嵌入式方面的工作,没有人带,纯粹自学。

总的来说,作为一个非科班的能够秋招找的这么顺利,按我自己看来应该主要是因为准备的早。一定要提早准备!

如果你还是大二,或者研究生刚刚入学,正好看到这篇文章,那是最理想了。这样你有充足的时间去准备。我自己是从大二大三那样就确定了以后要做程序员了,所以从那个时候就已经开始自学编程,开始积累博客。

作为一个非科班的,你要和科班的竞争进大厂,怎么竞争?

大厂看重什么

要知道大厂最看重什么 — 技术热情学习能力基础知识。反而小厂才更加强调技术水平,要求你一上来就能干活。大厂愿意花成本来培养人才,你要做的就是让大厂相信他能够把你培养成人才,相信你值得培养。不要以为你在简历上写一句:有技术热情。有任何用处。漂亮话谁都会说,关键不是你说了什么而是你做了什么。

怎么体现技术热情

那怎么证明你有技术热情,或说怎么证明你愿意钻研技术?举几个例子:

  1. 长期维护博客绝对算是一个很好的方式,而且一定要是长期维护,而不是临时创建应付人的,这是临时抱佛脚不了的,也是你和其他那些没有长远规划的面试者的一个很大的区分点,它直接就代表着你的技术积累,你对技术的钻研。当然你的博客一定要写的有水平,而不是到处复制黏贴。面试时面试官是完全有可能直接点进你的博客去看的,看到几篇文风良好、逻辑清晰、排版舒适的博文绝对是加分项,如果分享了代码,一定要注意代码质量。反之,要是各种复制黏贴,代码格式乱七八糟,请问你是故意让面试官知道你是什么垃圾么? 另一个好处就是它本身就是你对某方面钻研过的一个直接的证明。比如要是看到JD上要求能阅读英文技术文档。我就直接扔上去一句,博客上有10W字技术文档翻译,效果好过一句各种自夸的话百倍。
  2. 如果参与了高星的Github开源项目,或者自己有长期维护的开源项目,那自然也是十分棒的!这个也不是可以临时抱佛脚的,如果有精力的话去尝试一下吧。
  3. 参加各种编程相关竞赛,这个太重要的,如果你有ACM竞赛的获奖精力啥的,SP那还不随便拿。直接证明了你的算法基本功。但是非科班的机会比较少,自己看情况吧。起码数学建模参加一下,可能还可以作为面试时的谈资。
  4. 通学某大型开源库,这个一般要根据JD的要求,学JD里有提到的那些库,如果直接把研究结果反到博客上那自然是极好的,但是是真的要好好学,因为可能会被面试官往死了问哦。这本来也是面试准备里头要做的事之一。

怎么体现学习能力

学习能力怎么体现? 学历和你在学校的绩点不就是最好的证明么。 要是你高考能上清华北大,或者绩点很高,常年班级第一,谁会质疑你的学习能力和智商?顶多就是质疑你的态度,愿不愿意学编程而已。

已经看到这篇文章了,学历自然是很难改变了(当然本科的话也可以通过考研来提升学历)。要是来的及的话,一定要保证你的绩点尽可能高,各种拿奖学金。

注意:你都已经要当程序员了,那些学生会、各种社团的干事呀什么的人际交往方面的东西就别屁颠屁颠的各种参加了,这对于程序员来说是减分项,写简历上还不如不写,有这时间还不如多做几道算法题。要清楚你想要什么,多做对你的目标有用的事,别各种凑热闹看别人都在干什么就也着急忙慌的做什么。

当然,学习能力也可以通过扎实的基础知识来侧面体现,也算是学历和绩点都不行时的救命稻草吧。

怎么自学基础知识

非科班的肯定先天在基础知识上相比科班有所欠缺,但也不用把这想为劣势,因为一方面,其实完全可以通过自学达到科班的水平,另一方面,因为知道你非科班,面试官本身在校招时就会降低对你的期望,这样,其实只要你达到和另一个科班同等基础水平,那自然更倾向选你。为什么?因为你自学能达到和科班相近水平,那可不就证明你比科班的学习能力强的多么?

自学编程怎么自学?如果你是非科班的就别指望在课上学的那些编程了,那连玩具都写不出来。别看国内某某著名2X写的那个 C/C++的书,简直就是错误示范。要学就找那些外文经典著作一本本完完整整的学,不是崇洋媚外,外国当然也有2X书,但是能引进国内或者能够让国人知晓的自然都是那些真正好的,多学习大师写的代码自然能潜移默化的让你养成良好的代码习惯和抽象思维。

至于学习路线

不管你是做什么的,都强烈推荐读完以下几本:

《编码》
《网络是怎样连接的》、《程序是怎样跑起来的》、《计算机是怎样跑起来的》(三件套)

都是科普性质的,读起来非常顺畅,当小说读就好。快点的话两周能干完一本。读完就能对我们现代整个的计算机系统有一个全局的理解(其实也基本够面试的时候吹吹牛皮了)。

作为后端方向主要要关注:语言本身、算法与数据结构、计算机组成原理、操作系统、计算机网络、数据库原理、选学编译原理。

语言本身,后端基本就两个路线:C/C++以及Java
由于我之前做嵌入式的,自然的就使用C了,个人十分推崇C,因为它强迫程序员思考程序的本质,强迫各种造轮子,虽然可能不见得利于工程,但是却很利于个人水平的提高。
如果要学C的话,学通一本C圣经:《C Programming Language》就几乎搞定了所以语言方面的了,剩下的都是一些实践以及上层概念方面的东西了。
然后要学C++,学习一些面向对象的知识,更高级的那些概念,这些都是面试中很常考察的知识点。C++另人头大,内容太多了,只能花时间慢慢啃。有好几本经典书籍都可以看。比如《C++ Primer》。特别厚,学完一本要好久,个人只读了半本。而且学完语言本身,你还得去学学STL库的实现,面试常考。

如果你用Java的话,那后面所有的内容都要相应变化。JAVA有自己的一整套体系,JVM、Spring全家桶啥的,自己去了解。

除了语言本身外,最重要的就是数据结构与算法了,重要到什么程度?哪怕你其他基础知识啥都不会,如果你数据结构与算法学的好到一定程度,很多大厂照样要你。 程序 = 算法 + 数据结构
《数据结构与算法分析—c语言描述》这本学透就够了。剩下的一些小算法知识点在找工作前稍微刷刷题补一下就没问题了。

计算机组成原理其实就读上面的三件套就够了,进一步应该赶快学学《CSAPP》,优先级很高的,神书。

操作系统来说,有时间的话去读读《APUE》、《现代操作系统》。个人是学了RTOS,学了相关的书籍。麻雀虽小,该有的几乎都有,基本知道OS的知识点,算是取巧了。

计算机网络原理,读了《网络是怎么连接的》实际就已经够面试时候80%的知识点了,剩下的根据面经补充一下一些细节知识就行。但是要好好学的话应该再学学《TCP/IP 详解》《计算机网络 自顶向下方法》,毕竟我们不光是为了找工作而学习。还得考虑以后晋升不是?搞不好什么时候某个知识就突然用上了呢。

数据库原理。这个是我的弱项,我面试时是直接说自己没学,直接屏蔽掉数据库相关问题的,实际上对后端来说数据库是很重要的一个知识点。MySQL,Redis什么的都是现在实际很常用的数据库,需要去学习他们的原理、应用什么的。索引优化啥的可以考的很深。以及数据库相关架构啥的,读写分离、复杂均衡之类的东西可以通过看相关公众号文章补一补,我应该自己看了些公众号文章,所以面试的时候还能扯一扯这些。。。

编译原理。这个就完全是托我搞嵌入式的福了,由于在嵌入式开发中我整天在各种反汇编,设置链接器配置文件,设置编译器参数什么的,对这些学的比较透彻。编译链接这方面的知识比较底层,不一定会考,但是一定是加分项。知其然还要自其所以然。能够把整个过程讲清楚也能给面试官一个很好的印象。当然其实恶补一下,也没太多知识要记。

总的来说,以上都是要花很多时间去提前准备的,而把你和其他目标不明的应届生区分开来的关键其实就是这些无法临时抱佛脚的东西。后面这些东西都是可以速成的。

校招准备

关于实习

怎么说呢。大部分人都说一定要找实习。但是其实我是没有实习的,照样拿了这么多offer。

总结说来,如果你的科研项目和你的岗位毫无关系,根本扯不上,就没有编程的那种,那你无论如何一定要去实习,背着导师偷偷去也得去。千万别信导师那些鬼话,什么跟着他把项目好好搞好对工作有什么什么好处,什么帮你介绍好工作什么的,都是扯淡。导师为了自己的利益什么鬼话都说的出来。不然等你写简历时你会发现你根本没东西可写!

而我之所以没实习也过的去的原因是因为我在科研项目中就是负责编程的,SOA的IOT这样的,所以其实我还是能写一些东西的,面试的时候还是有得讲的。当然,由于我做的是嵌入式,而找工作找的都是后端,不是很匹配,所以感觉就是因为这个原因,各个厂都只能顶多给大白菜,没有给sp的。或许我要是找了个AT的实习的话就能拿SP了对吧。

简历编写

简历一定要好好准备,千万别自己xjb乱做,也别上网随便搜那种花里胡哨的模板,就简明扼要就行了。推荐就直接使用超级简历app 上的模板,照着提示往里头填就好。

写简历时关键就是用简单的语句突出自己的优点,和JD尽可能匹配,废话不要有,各种语气词不要有。这些要点你可以直接去知乎上搜索 应届生简历 相关问答来学。当时我写简历之前看了好久的知乎相关问答,然后再各种改,才终于改出了个还不错的简历的。简历十分关键,连简历都入不了HR的法眼那连面试机会都没有。

我写的时候就是把自己想想成HR,HR一天要看几百上千份简历,根本没时间一个个字细看,所以你要想象你就是那个已经看了几百份简历的HR,根本没有心情细看简历了。想问你能够在两三分钟能看完你自己简历的重点并且对你产生兴趣么?因为要是两三分钟没有吸引住你自己的话,那你这简历可能就要被永远扔进垃圾桶了呀!

笔/面试准备

经过前面N久的基础知识学习,实际上你已经具备了拿offer的基本条件,但是理论和实际是有差距了。为了能够成功拿到心仪的offer,应该要在笔/面试前做如下准备:

  1. 刷算法题:《数据结构与算法分析》学完并不能保证你遇到真正的算法题会做,这个是要刷一些题目找感觉的。另外,那本书上并没有包含所有算法技巧,比如快慢指针判断有环什么的技巧。但是只要你刷到了对应题型,遇到一次就基本记住了。刷题网站很多,可以在leetcode或者牛客网上刷算法题。面试和笔试时一般考的难度是easy到medium这样,偶尔会有hard的。能把所有题都刷过去自然好,不能的话也按分类,把主要的几种类型的题都刷一些。刷个两百道应该就可以上战场了。这也是为笔试做准备。不同公司如有笔试会用不同的考试系统,在在线笔试前最好多去熟悉下编程环境,输入输出什么的,避免不必要的丢分。
  2. 刷面经:虽然你学了一堆基础知识,但总是会有遗漏的。这种时候就得靠面经来查缺补漏以及临时抱佛脚了。特别是后端,我面了这么多家,虽然不同家的偏重不一样,但是几乎是逃不出面经中的那些知识点范围的,所以面向面经准备真的很重要。随便给贴一个我准备时看的面经:
    https://blog.csdn.net/shanghairuoxiao/article/details/72876248
    再次强调,这主要是在你有平时积累的基础上查缺补漏的,这么多知识点真别想靠短时间内全学会。
  3. 简短的个人介绍:绝对不能和简历内容冲突,但也不能背简历,多讲些简历上没写的,作为简历的补充。关键是要时刻体现出你为什么适合这份工作,别讲一堆个人兴趣爱好籍贯什么的没用的。这个知乎上也有问答,多去看看。

关于面试

不用太卑微,就和聊天一样,面试官和你是平等的,他就是你未来的同事。如果他让你感到恶心,那你也能大概知道这个公司是什么水平,不去就罢了。

自信点,不要紧张,你就是要在这些时间里尽可能的展现你自己。

有些问题没答上来也没什么,没人能够什么都懂,别影响后面的心态。

清楚一件事情:能把你叫来面试说明你的简历已经符合了这个岗位的要求了,只是叫你过来看看你是不是真的像简历上写的那么好而已。

我自己是因为音乐上的事经常各种表演,所以已经练的根本不紧张了,面试还都蛮顺利的,也不知道能建议些啥。

总结

总之,一定要有长久的个人规划,并为之不断努力。机会是留给有准备的人的(当然我也认识抱佛脚三天进了腾讯的产品经理,但你不会想去赌这个概率的)。

另:工作原因。后面这个博客会慢慢转向后端知识。嵌入式的知识大家且看且珍惜吧0.0

你可能感兴趣的:(随笔)