大家好,我是小林哥。
经常会有读者跟小林发私信,说我的图解系统和图解网络在面试中帮到他们,而且不少都是拿到了一线的大厂。
于是,我就在想,能不能邀请这些优秀的读者来分享他面试心得和学习经验。
因为小林读者里肯定还有很多是在校生,我相信这些过来人的经验会帮助到你们,也让大家能提前知道如何准备,少走一些弯路,磨平校招的信息差,不至于到大四才知道校招这些事情。
说干就干,然后就有了这个「读者牛逼系列」,真心希望这里的每一位牛逼读者的经历,能够影响到你,给你带来启发和价值。
今天来跟大家分享的是一位我影响很深刻的读者,这位读者称呼为小李,他是小林的老读者了,从去年就一直关注我,时常问我一些学习方向和选择的事情。
小李是双非本科 + 非科班,通过自己的学习,校招时共投递了上百家公司,中途相当坎坷,被打击过,也失落过,但是他并没有因此一蹶不振,而是继续坚持自学下去,他相信努力是有用,最终他从最开始月薪 5k offer 成功换成年总包 35w+ 的 offer。
这简直绝了,妥妥就是一个普通人逆袭的例子,还竟然是小林的读者,实在是我的荣幸。
他的经历写的很长,我认认真真看完了,感触很深,看的出是个很认真的小伙子,大家可以耐心把这篇文章看完,相信你会收获很多。
PS:以下内容来自小李读者的表述。
伴随着拿到一份满意的offer,令人折磨的校招终于告一阶段了…
我的校招经历应该是非常坎坷的一段经历,但是应该能够给其他还在迷茫的小伙伴一点帮助,所以在小林哥的鼓励下我决定将我的校招经历和我的学习路程以及经验还有一点这段时间的感悟分享给大家,如果能对大家起到一点微小的帮助是最好的事情。
先说一下我自己的校招经历吧。
我自己是一名双非非科班的学生,高考的时候报「软件工程」这个专业但是滑档了,分到了一个自己不喜欢的专业,又没有提前做职业规划,导致到了大学之后浑浑噩噩了三年。
一直混到了大三下学期,因为疫情的原因在家里上网课,在六月份左右的一天,我突然觉得我不可能这样一直混到毕业吧?那我以后能干什么呢?
认真思考了几天,觉得不能这样子下去了,但是又不喜欢本专业,因为我一直对计算机比较感兴趣,所以最后想着干脆去当程序员吧。
说干就干,我从七月份开始买了一本《大话数据结构》和一本谢希仁的《计算机网络》还有一本《C++ primer》就开始看起来了,当时也没有做任何规划,也是一时兴起,所以就三天打鱼两天晒网的开始学起来了(真的很建议大家在不论做什么事情之间做一个详细的规划,这非常非常重要!)。
然后一晃眼就到了九月份,开学我到了学校还要先补考两门课程(混子的悲哀…大学千万不要挂科!),然后补考完就到了九月中旬了,我匆匆制作了份简历,然后就开始投简历,基本上都是石沉大海,只有一份面试机会,而这个面试也是让我真正改变的契机。
我还记得这个面试是来自「深信服」的,甚至到现在我都记得当时那个面试官的长相,整场面试三十分钟,我说的最多的三个词是「不了解」、「不清楚」、「不太懂」…基本上是一问三不知。
甚至最后面试官想捞我一手,问我们专业还学什么课程,我说模电、数电,面试官说:额…好吧…你有什么想问我的吗?
我都结结巴巴说不出话来。面试的过程中我真的超级超级羞愧,刚开始面了五分钟我就想结束面试了,真的是什么都不会,真的说不出来的丢人,我同学说我当时整个人的脸都涨红了。
当天晚上我躺在床上羞愧又难过,都睡不着觉,我不断地问自己:「你这么菜哪来的脸投简历?」
下定决定开始停止投简历,好好充实自己。
正赶上当当做活动,我一口气买了一千多元的书,从C++、数据结构与算法、计算机网络、操作系统还有 Linux 相关的全部买了个齐全。
从此开始了每天疯狂学习的道路,每天基本上睁眼学到闭眼,梦里都是知识,我觉得我自己在计算机这方面还是有一点悟性的吧,再加上一点韧性,所以我学起来很快。
我尤其喜欢 C++ 相关的知识,当时觉得学累了就看看 C++ 相关的书籍充一充电。
就这样充实的生活学了一个月左右,正好十月中旬学校有线下校招,我就去试了试水,面试比较简单,很快就下了offer,我还记得好像是 base 长沙月薪 5k+,其他的待遇就忘记了。
我当时的心态就是觉得啊?不是吧?我就值这个价吗?
还难过了一段时间,然后想都没想就直接拒了,觉得还是自己太菜了,然后继续投入到学习当中了。
到了 11 月初学校又有线下校招,我又过去试了一下。最后拿到了 base 上海月薪 10k+,我还记得岗位是叫「 MMI 助理开发工程师」,我当时都不知道这个是干什么的,待遇觉得还挺好的,因为我们专业以前的毕业生都是能拿到 6—8k 都算是不错的了。但是最后犹豫了一下,还是拒绝了,觉得这应该不是我的极限。
一直保持学习到 12 月初,突然某手机大厂联系我面试,说实话都我不知道什么时候投的简历了,应该是秋招补招把我捞上来了。
当时我整体学的差不多了,蛮久没面试了,所以我就试了试,几轮面试下来我基本上侃侃而谈,不会的东西很少,所以很快 offer 就下来了,base 北京月薪 15k+,犹豫了蛮久的,最后考虑到秋招末期了而且有大厂的名头,最后就接了 offer 了。
当时心里想着拿一个保底,然后还想着再好好学一学,春招再冲一冲。
结果放假回家两个月基本没怎么学习,因为过年家里事挺多的,也没有一个好的环境,自己的内心也比较浮躁。
到了三月初又补考了一门课程,然后发现自己根本学不进去了,最后就决定去公司提前实习了。
到了公司以后,感觉大厂确实是大厂,各方面真的很不错,但是呆了一段时间之后发现部门的业务和主要技术和我期待的有偏差。
所以一边实习一边学习,最后在四月初离职回到学习继续开始春招,最后成功拿到了一份 base 北京总包 35+ 的 offer。
我自己挺满意的,而且因为我学习的时间太短了,前前后后可能有效学习就大半年左右,最后能拿到这样的 offer 我也感到非常庆幸,最重要的是技术方向也是我比较喜欢的方向。
这里提一下违约的事,我之前签的那个大厂没有索取违约金,然后违约流程走了大概半个月左右,最后拿到了新的三方。
据我了解好像一般比较大的企业都不会索取违约金,一些小企业可能要先交违约金再解约三方。
这里并不是鼓励大家去违约,只是说在有更好的选择或者明显感觉到现在的岗位不适合自己的情况下,不要惧怕去违约,有些同学可能害怕违约了企业会拉黑自己,实际上这种可能性很低,而且并没有实质的影响。
hr 经历的违约事件数不胜数,并不会对你做特殊处理。就业是一个双向选择的过程,为了自己以后的职业发展,还需要做更慎重的考虑。
因为匆匆学习,更多的只是学习了理论知识,而且算法与项目经验还有实习经历都阻隔了我进大厂的可能,基本上我笔试都做的很艰难,大部分大厂笔试都挂掉了,就算勉强进了面试,也倒在了手撕算法的环节上。
导致我现在拿到 offer 后还是在不断的刷题,因为算法基础太差了,但是它又是那么重要。
我的经历更像是一个普通人的经历吧,不像其他大佬大厂offer拿到手软,我前前后后的面试公司可能就十来家,最后成功拿到手的 offer 也就四个。
功利一点来看,从 5k+ 到 10k+ 再到 15k+ 最后到 20k+,慢慢打怪成长一样。有时候后悔自己觉悟的太晚,准备的太慢,导致错过了更好的自己。
但是转念一想,改变,就是好事。
我自己一开始没有什么规划方向,走着走着就往 C++/QT 客户端那边走了,因为学了点 QT,但是后来又觉得后端可能发展方向好一点,所以在辞去实习之后重新投的简历也全部投的后端方向的。
所以我的学习规划基本上是 C++ 服务端方向的,希望可以给各位同学一些帮助。
我自己是有较扎实的 C 知识,所以学 C++ 并不是那么困难,而且我比较喜欢 C++ 这门语言,喜欢它的严谨和多样性,所以我看的 C++ 书籍可能比较多。
从《C++ Primer》到《Effective C++》系列再到《C++沉思录》这些前前后后可能看了十几本左右,越往后看越体会到 C++ 的复杂性,越看越感觉难…
校招的话 C++ 一般不会问的很难,甚至如果面试官是搞 PHP 或者 Java 的可能都不问你语言相关。
所以我不建议你直接啃《C++ Primer》,把它当作一本词典来用会更好,新人上来一直看这么厚一本书很容易直接被劝退。
我推荐你从《C++ 新经典》 -->《Essential C++》 --> 《C++新经典 对象模型》这样的顺序学习,基本上校招应付面试是绰绰有余了。
如果想要在面试中在 C++ 相关做到侃侃而谈的话可以看看 Effective 系列的书籍,以及啃一啃《深入理解 C++ 对象模型》这本书,我过年的时候把它放在家里了,是我最后悔的事。因为到现在为止,我看这本书都蛮吃力的,需要慢慢的看,细细的看,而且很多地方都不理解。
如果有时间的话也可以把 python 当第二语言,用惯了 C++ 再学 python,是一种不一样的体验,真的挺有意思的。
其实语言并不是那么重要,基础知识更重要,建议把更多的时间放在基础知识上,尤其是想要冲大厂的同学。
数据结构与算法这方面的话是非常非常非常重要的,想要冲大厂的同学们如果这方面不过关可能连笔试都过不去,更别谈面试的手撕算法了。
我自己的话因为准备比较匆忙,所以只是把匆匆《剑指offer》刷了一遍半,然后 leetcode 刷了 100 道左右 easy 题,看了一遍《labuladong算法小抄》(从小林哥这中的嘿嘿),面试和笔试一般太难的题我就宕机了。
我后面复盘了一下,我因为时间紧,所以刷题很匆忙,像赶任务一样,刷完了就完了,也没有做总结和回顾。
实际上一道题可以牵扯到一类题的做法,都是有框架和套路的,有很多大佬都总结过。
刷题的话还是需要不断地总结和回顾,才能达到有效刷题,像我都是无效刷题。
根据我做的笔试题来看的话,基本上我建议你把《剑指offer》刷两遍,然后 leetcode 热题 100 道刷一遍,最后跟着《labuladong算法小抄》总结一遍框架,基本上这一块就妥了。
但是尽量还是一直要保持刷题,因为以后工作了跳槽也对算法有要求,多多益善吧。
以上是建立在有数据结构的基础上,如果对数据结构不了解的话可以先看一下《大话数据结构》或者极客时间上有一门关于数据结构的课程。
算法这方面的话一定不要一直闷头刷题,要学会总结题型和方法。
做的多了你拿到一道题的时候脑海里就有了基本的框架,该用什么数据结构去做,该用什么方法去做,心里都有一个数了,是数量引起质变的一个过程。
我个人就比较惭愧了,这方面基础不是很扎实,导致现在也在一直补。
从我寥寥无几的大厂面试经验来看,在面试的时候面试官会引导你去做题,是有一个相当舒适的做题环境的,所以不用畏惧算法如猛虎,做的多了对付校招还是绰绰有余。
操作系统我自己是从《深入理解计算机系统》先看,发现有些地方难以理解,而且不少章节用纯汇编来演示,看不太懂,又去看了《现代操作系统》和《操作系统导论》,阅读顺序几乎是从难到易,一路踩雷…
我建议初学者先看一下《操作系统导论》,这本书讲的比较浅而且易懂,然后再看《现代操作系统》,看的差不多了,最后看《深入理解计算机系统》。
《深入理解计算机系统》的话,可以跳着看,有几章节是用纯汇编演示的,懂汇编的同学可以看一看,不懂的同学粗略看一看也没关系。
到这基本校招问的知识你已经具备了,如果想要实践的话,github上也有一些和操作系统相关的项目可以看一看。
计算机网络我自己是先看了谢希仁的《计算机网络》,发现讲的太杂了,并不是很深入,又看了《TCP/IP详解:卷1》,又发现讲的太深入了,根本看不懂,最后又看了《计算机网络自顶向下方法》和《Http图解》,面试的时候就够用了。
我建议你直接看《计算机网络自顶向下方法》就好了,然后直接看小林哥总结的计算机网络相关的知识就可以了,应付面试时绰绰有余了。
这个我自己是通过《大话设计模式》入门,然后看网上别人博客总结的一些知识,最后在某客时间上买了一门设计模式相关的课程学习了一下(某客时间该打广告费了,笑~)。
总体来说学的并不是很深入,因为设计模式这个东西学起来很简单,但是实际项目中应用起来太难了,而且根据我面试中的经验,一般蛮少有面试官会问,就算问也就问一问简单的单例模式、工厂模式这些,问的不是很深入。
所以我建议你通过《大话设计模式》入个门,然后对设计原则和常用的设计模式有个印象,最后可以在网上看看别人的经验。
校招的话很难在这一块问的比较深入,虽然它很重要,但是没有商业项目和工作经验的前提下,应届生很难真正熟悉这些,最多做到入个门,这样就已经足够了。
数据库相关的话我是学习了 MySQL 和 Redis 两个比较常用的数据库。
MySQL 我是先读《高性能 MySQL 》然后又学了极客时间上的《 MySQL45 讲》最后最近再看《 MySQL 是怎样运行的》,又是一路暴雷…
所以我建议你先看《MySQL是怎样运行的》,然后在极客时间上看《MySQL实战45讲》,最后稍微看一看《高性能MySQL》(挑章节看,这本书讲的太深,理解起来比较困难)。
最好在学完这些之后自己动手去部署一个 MySQL,然后挑一些小项目做一做。
我在面试的时候和面试官聊 MySQL 聊的比较深,他给我出了蛮多 MySQL 相关场景题,我答的不尽人意,面试官说我基础可以,但是实际上手比较差,建议我私下可以部署一个 MySQL 试一试,这些问题会有更好的理解。
所以我把这个建议也给你,希望可以理论实际双管齐下,不要像我一样做个偏科生(哭)…
Redis 的话我是先看了一遍《Redis设计与实现》,然后在某客学了《Redis 核心技术与实战》,在看实战经验的过程中,感觉有一些吃力,于是又返回去看了一遍《Redis设计与实现》。
Redis 算是我比较匆忙的学习了,因为在决定走后端这条道路之后补学的,学习的比较匆忙,所以我也只能给一点粗浅的建议,建议先看《Redis设计与实现》,有了基础知识之后可以选择看一下其他 Redis 的书籍或视频加深基础,然后去某客时间学习一下《Redis设计与实现》。
我面试的话,Redis 方面基本没有什么太大的问题,一般问的都可以说道一二。
Linux 的话我建议你先看《鸟哥的 Linux 私房菜》,对 Linux 整体有了一些了解之后,可以再看一看《Linux 系统编程》。
因为走的是后端方向,所以看一下《Linux高性能服务器编程》,强推这门书,都是干货,然后跟着书上做一个服务器相关的项目,会有助于加深理解。
如果想学Linux内核的话,先看《Linux设计与实现》,这本书看起来难度尚可,后面有能力的话可以研究下《深入理解Linux内核》(我自己是放弃了…真的看的很困难)。
而且我面试的时候虽然简历上写了,但是面试的时候并没有被问到 Linux 内核相关的问题,所以这个一般应该是加分项,有能力的可以搞一下。
Linux 系统的话纯看书可能事半功倍,最好在 Linux 环境下做两个小项目,这样子对整体学习可能更有用处。
我一开始也不会写简历,杂七杂八写了一堆,重要的地方反而都没有写。
记得有一次,我以为计网、操作系统、数据结构与算法这些都是必须项、是默认就会的,所以就没有在简历上写,导致面试的时候面试官到最后说:「你这个简历我不知道该问些什么」。
他们是做 os 的,我当时还疑惑为什么不问我操作系统相关的,很久以后才感受到面试官是严谨的根据你简历上的内容对你进行提问,有时候可能他们部门主用的技术你简历上没有写,才会主动的问你一两句,其他的技术你不写就默认代表你不会。
所以关于简历,首先要将自己掌握的技术写全,注意精通、熟悉、掌握、了解这些的区别,有可能决定了面试官问你的深度。
更重要的一点是,自己不会的东西或者只听说过的技术不要为了简历好看写在上面凑数,可能你其他的点答的挺好的,但是问到了这个你写上去凑数的东西,你一问三不知,会降低评价分数,甚至直接决定是否录用。
因为实际面试的时间就算一场一个小时也是很短的,很难全面的去考察你简历中的所有技术,只能根据部门的需求着重考察一些。
而问了一个你简历上写的技术,你全然不知,这种情况下,完全可以怀疑你的简历上写的技术是否全部属实,但是面试时间又很短,没办法去一一验证,最后只能是你吞下这份苦果。
然后对于互联网而言,没实习和有实习是 0 和 1 的区别。
就拿我自己来说,虽然之前在手机大厂短暂实习了一个多月,写在简历上之后,明显能感觉到在春招的时候机会多了很多。
所以大家还是尽量早做准备,不仅是实习转正提前结束校招或者丰富简历、学到更多东西,更重要的是提前去适应这种互联网工作环境,看一看自己到底适不适合在这种环境下工作。
不然等真正正式入职了之后,不适应互联网环境,然后想要考公考编,失去了应届生身份,则悔之晚矣。
在有扎实的基础前提下,在面试的时候要学会引导面试官的面试方向。
假如你对 http 协议研究的比较通透,在问到和网络协议相关的问题时,可以试着把问题导向 http 方面的知识。
比如你在回答完上一个问题时,发现这个问题和 http 中的某些知识点吻合,可以在说完之后顺嘴提一句这个和 http 中 xxx 有点像,然后面试官可能就顺着问你 http 中的知识了。
因为面试官其实在面试的时候,除了部门硬性要求掌握的技术,并没有一个具体的侧重点,所以在这种情况下,大概率就顺着你所说的问下去了。
就像学校后门明明那么多吃的,但是你中午不知道该吃什么,你的小伙伴顺嘴提一句去吃麻辣烫吧,你在没有明确意向的方向下可能就跟着他去吃了(除非你特别讨厌吃麻辣烫,笑)。
还有在面试的时候,不要怯场,就把这场面试当作知识交流一样,和面试官去探讨一些知识的细节。
每一场面试对于我们而言,也是一种学习经历,因为在学习的时候是系统的学习,并没有侧重于某个点,而在面试的时候,可能面试官会撂下大部分的知识,非要和你深究一个方面的知识,直到问到你不会为止。面试完之后,就可以做复盘,加深自己的知识深度,慢慢补全自己的知识框架。
还有,面试的时候问到你不会了直接就说不太了解就行了,不要硬撑,你会与不会在面试官眼里都是能一眼看穿的事。
在面试几场之后,你会感觉到自己慢慢的进入了一种状态,懂得怎么去面试了,然后保持面试复盘,补全自己的知识盲区,成功拿到满意的offer只是时间问题。
我面试的时候,极大多数的面试官都非常和蔼,而且知识面都很广,有些问题你不会他们都愿意给你解答并且提出一些学习的建议,所以越到后面我越来越享受面试的过程,享受那种知识交流的氛围(当然,遇到完全不会的问题还是戴上了痛苦面具)。
最后的一点是,在校招过程中,一场接一场的面试,你根本无法静下心来学习新的知识,只能在已有的知识框架下修修补补,深化一些知识点。
所以建议小伙伴们,还是早做准备!早做准备!早做准备!
上一张我在这个过程中不断补全自己知识点的图吧,只要知识框架搭起来之后,学习是件很轻松的事情。
我觉得我自己算是学习速度比较快的人吧,学习效率也还可以,所以把我自己的学习方法分享给大家。
我在学习一门新技术的时候,会选择一本难度适宜的书,根据目录在自己脑海中把知识框架搭起来,然后看书慢慢去填补具体的知识,就像一颗多叉树一样,系统化的学习。
在看完一遍书之后,会有意的去看一些比较重要的知识,深化这些知识,同时我也关注了许多公众号,在框架搭起来并完善之后碎片化的学习。
最后再看一看网上别人对这门技术一些知识的理解,再对照自己的理解,补充优化。
最好的是做一些小的项目,去应用这些知识,毕竟实践出真知(然而我因为时间太短,这一步没有进行555)。
同时面试的过程也是一个查漏补缺的过程。
思维导图是一个好东西,给大家推荐一下,有助于系统化的搭建知识体系,上一张我在春招的时候补全Redis知识的图吧。
因为学习 Redis 的时间比较短,而且并没有过实际上手,所以用知识导图把这些知识分门别类的存储,然后记忆到脑子里,在面试的过程中,学习并且不断补充,加深自己的知识深度。
其实看视频也是一种不错的学习方式,但是我个人更习惯看书构建知识框架,所以仁者见仁智者见智啦。
给大家分享一些我在校招中的感悟吧,我眼中的【校招 = 技术 + 心态 + 运气 + 勇气】。
技术是毋庸置疑最重要的一点,没有技术的基础,一切都是空谈。
同时心态也非常重要,在经历长时间的笔试、面试的折磨时,还要一日一日的等待面试结果,那段时间每一个电话都以为是 offer call,每一个提示音都以为是邮箱信息…最后可能大部分都没有结果…
从一开始的满怀信心到后来的迷茫踌躇再到最后的怀疑自我,这些我都经历过,在最崩溃的时候真的不想再找工作了,随缘吧。庆幸的是我坚持下来了,并且最后有一个好的结果。
运气是比较玄学的一个东西,从投简历的时间到面试的部门到各个公司不同的需求,都有可能决定你能否拿到一个满意的offer。
从我个人而言,秋招和春招加起来可能投了有一百多家公司,最后面试的可能只有十几家左右,拿到了 4 个offer。
这个是我辞去实习后回到学校春招投的公司,最后笔试的有三家,全挂,直接面试的有两个,最后拿了一个offer。
因为我算法基础比较差,拿 offer 的那家没有笔试,直接面试,我在面试中发挥的比较好,而且算法题也都会,所以最后成功拿到了 offer。
最后同时也需要有做决定的勇气,我在提前实习之后,感觉到我可能不适合这份工作,但是公司又是大厂,而且适时又在春招中后期了,当时也犹豫了蛮久的,最后觉得还是决定不将就,回到学校重新找工作,最后对我而言也是一个比较满意的结果了,而且公司也没有要违约金,感谢公司~
比较重要的一点还有就是持续保持学习,并且永远相信自己,不要放弃。
不止校招,而是进了互联网这一行,我们基本上只能保持学习,不然犹如逆水行舟,不行则退,大家应该也知道这一点。
放一张自己还放在学校的一部分书吧,其他的都在春节搬回家去了。
也可以看到这部分书中算法书的比重就很高,所以算法真的非常非常非常重要,学好算法是进大厂的第一步,希望大家可以早点做准备,不要像我一样临时抱佛脚。
洋洋洒洒写了这么多,不止是希望我自己的经历可以对各位小伙伴起到一些帮助,也是对自己的深度复盘,在这个过程中发现了自己蛮多的不足,希望可以慢慢成为一个技术全面的人。
复盘之后就该进行新的学习啦,努力让自己享受这个学习的过程吧,毕竟进了咱们这一行,持续学习是非常重要的一件事。
希望大家都可以早作准备,日后拿到一份满意的 offer ~
感谢你能耐心看到这儿,希望我的经历能对你起到一些帮助。