热门话题白皮书HR资料
21届秋招,100多场面试,10+sp offer,奉上非科班大佬的成功秘笈
2024.02.02


终于~~在参加了一百多场的面试后,我的秋招,结束了


回想一下这一年的经历,感触颇多,很感谢牛客网这个平台,让我能有机会接触很多优秀的学长学姐,和(hao)他们取经(yangmao),在此我也记录一下整个秋招经历,希望能对同学们有所帮助


先简单介绍一下个人背景


学校背景:本科就读于东北某985自动化专业,硕士保研本校控制专业(妥妥非科班小菜)


相关经历:无实习经历,少量项目经历,无竞赛(听着是不是很尴尬~~)


方向:C++开发(20届算法岗诸神黄昏,咱也不敢进啊)


offer情况:美团java后端,京东C++开发,百度C++开发,好未来服务器开发,网易游戏研发,tp-link软件开发,祖龙娱乐游戏研发,vivo嵌入式开发,科大讯飞算法等等(剩下的有点忘了,但都是小厂),其中sp和ssp占一半左右(为啥没有bat呢,继续往下看我的心酸历程)


小小总结一下:同学们!!看出来了吧,要啥啥没有也没关系!!校招面试官最关注基础和算法!!因此,着重学什么不需要我多说了吧!!!


接下来说一下我的整个秋招历程吧


1.方向选择


(科班大神们可以跳过这部分,直接看2即可,这部分我想和非科班同学们分享一下我的心路历程,可能会对自己未来的选择有所帮助)


2019年10月,研一的我开始了第一次思考,我以后想做什么工作?控制专业好像去研究所比较好,但感觉没前(钱)途,而且听计算机学院的同学们说搞计算机挣得多,要不就试试学计算机吧,妈亲啊,计算机怎么这么多方向,emmmm选哪个呢?


据说算法一年比一年难,好像没一篇顶刊都不好意思面试,算法,算了。前端、运维、测试,周围也没有认识的同学搞这个,不敢轻易尝试啊。


后端呢,不少同学在做,给的好像也挺多,而且好像没那么难,就这个吧。那么,Java,C++,python,PHP,Go,咋这么多语言,哎,我之前学过C语言,C++和C不就差了两个+么,就这个了。


于是,我开始了C++的学习,但是吧,当时的我还沉迷大吉大利,也没花多少时间在C++上面,等到了寒假,也就会了基本语法和vector。


2020年2月底,我爸妈看不下去了,于是在打游戏的我被爹妈一顿爆锤,同时也锤醒了我,我是该好好考虑一下自己的未来了,毕竟我的技术不支持当主播~~


于是我开始了第二次思考,我是继续做实验室控制相关的方向呢,还是把四年来所学全都丢掉,一头扎进后端开发呢?


好像很难选择,但好在两个方向都需要C++的知识,先慢慢学C++吧,然后小小的接触一下数据结构,再研究研究实验室的东西(这种两手准备,给我接下来的实习面试埋雷了)


2.实习面试


2020年4月-5月,各个公司的实习生招聘开始了,当时的我已经学完了数据结构,一些常见的排序算法也能手撕,感觉老子天下第一(但我甚至没有刷题,也不知道计算机网络和操作系统,真是滑天下之大稽,因此,最可怕的不是你不会什么,而是你不知道你不会什么)


带着这种自信,我参加了校招的第一场面试——阿里实习生面试,呵呵呵呵呵,我到现在都记得面试官的表情(你是来搞笑的??)这场面试结束后,我一整天都在怀疑人生,我在想我是不是不适合走这条路。


这时候,我的一个学长,也就是我秋招的引路人,将光明照进黑暗(怎么有点gay里gay气),他很细致的告诉我需要学习哪些内容,应该刷哪些题,应该怎么和面试官交流,在这个学长的帮助下,我慢慢的走上了正轨。


但我在“出轨”的阶段仍然参加了腾讯和字节跳动的实习生面试,不出意外的挂了,而且面评应该很难看,这也是校招时我被这三个公司挂掉的重要原因,因此,想获得面试经验,用你不想去的公司练手,千万不要没准备好就投大厂!!


3.学习内容


(这部分开始是重点了,也该换个风格了,咳咳,严肃点)


3.0 项目


这个就只能看大家自己了,如果之前有做过项目就花时间好好分析一下项目里面的难点和重点,保证熟悉每一个细节,别让面试官问住,如果没有项目就在网上找一下开源的项目自己实现一下,切记要注意细节,尽可能别因为项目减分。


3.1 基础语法


这个网上都有教程,比如我觉得不错的牛客上的教程:

https://www.nowcoder.com/tutorial/10003/7bdcb36b1ff74114b026c46b7ac64ac1


只强调一点,个人觉得C++类比较繁琐,如果时间不是很够,你只需要能回答相应的问题即可,不用太纠结把一个类的代码写好,面试除了设计模式,一般不会让你手撕一个类出来


3.2 计算机网络和操作系统


这两个部分个人感觉以理解和记忆居多,面试时会着重考察概念,比如TCP和UDP的区别,三次握手四次挥手,TCP如何保证可靠传输,进程线程区别,线程状态转化等等,具体的面试问题我会放在面经中与大家分享


如果想深入学习推荐东北大学的计算机网络这门课


https://www.icourse163.org/course/NEU-1205908819


和北京科技大学的操作系统这门课


https://www.icourse163.org/course/NJTU-1003245001


3.3 Linux系统


在实际的C++开发中,常常会采用Linux系统,因此这部分也是面试中经常问到的知识,个人建议自己在电脑上安装一个虚拟机,没事尝试着使用Linux系统,不要只局限于背一些命令和具体的用法,很多命令用多了自然而然就记住了,如果觉得装虚拟机很费劲,或者不知道该如何练手,推荐实验楼的课程


http://demo.erdangjiade.com/modals/8/856/demo/courses/show.html


最近牛客也新出了一个linux相关的课程,前几章讲基础知识点,最后一章带着完成一个项目,从目录以及试看来看,内容还是蛮不错的,也非常适合面试求职


课程链接:

https://www.nowcoder.com/courses/cover/live/504


试听链接:

https://www.nowcoder.com/study/live/504/0/1


3.4 数据库


数据库这块主要是常见的增删改查语句,引擎、索引、事务。隔离级别等概念,我学的是MySQL数据库,一直跟着黑马的视频学习,感觉帮助挺大的:


http://yun.itheima.com/course/557.html


 好,接下来,就是面试的重中之重:


3.5 数据结构与算法


先说一下为什么数据结构与算法如此重要呢,因为据我一百多场的面试经验,如果基础知识掌握的很好,但算法题完全不会,那基本凉了;如果基础答的吭哧瘪肚,但算法神挡杀神,那基本过了~~


当基础语法和常用的STL掌握以后,开始做牛客网上的剑指offer+LeetCode,注意:如果时间不够,剑指offer必刷,面试中手撕代码环节经常出现剑指offer的原题,接下来说一下刷题的心得


刷题有两种方法,兔子法:想一会儿想不出来就看答案,龟法:一道题想很久,我个人比较喜欢兔子法,毕竟所有的思路归根结底大部分是按照套路,是在模仿别人,而且兔子法能节省大量的时间,可以刷更多的题;


最开始刷题从简单题开始刷,别上来就刷中难题,会劝退,刷题要分类,比如今天刷回溯,回溯刷个四五道,把套路搞清楚,然后再刷别的,同时由于你不知道这道题你需要多长时间才能做熟,因此要准备大块的时间刷题,别刷一半就干别的,那样反倒浪费时间。


LeetCode上面有很多版块,比如top100题之类的,这些可以作为重点去刷,而且对于面试常见的题型最好自己总结下来,包括一些套路,然后翻来覆去刷,这样更有助于熟悉题型和举一反三,万一面试时碰到没见过的题,也可以短时间内有个思路,记住,编程时,思路远远大于实现。


如果感觉刷题找不到头绪的,可以试一下牛客网上左神的算法课,非科班的同学适合先看入门级别的课,之后再看提升的,我是到了4月份才知道左神的课,感觉浪费了一个多月的时间,而且还有个专门找工作用的中级课,适合秋招春招前冲刺一下,具体链接如下:


算法入门课(优惠码:AgcuIs3),适合没有数据结构和算法基础的同学:

https://www.nowcoder.com/courses/cover/live/509?coupon=AgcuIs3


基础提升课(优惠码:AinSN21),适合对数据结构和算法有一定了解,想提升代码能力的同学:

https://www.nowcoder.com/courses/cover/live/500?coupon=AinSN21


算法中级课(优惠码:Am1vJla),适合准备校招的同学,里面涵盖了面试中的常考题型:

https://www.nowcoder.com/courses/cover/live/503?coupon=Am1vJla


算法高级课(优惠码:A86SGZG),适合对数据结构和算法比较熟悉,想深入探究其中奥妙的同学:

https://www.nowcoder.com/courses/cover/live/482?coupon=A86SGZG


顺便提一下,常见的排序算法不仅要做到能手撕,还要知道时空复杂度以及是否是稳定排序,不了解的可以百度一下。


4.秋招面经


牛客网上有很多大佬分享了面经,我就不再重复发了,因为面试的问题都大同小异,我在这里汇总一下基础部分常考的知识点(我遇到过五次以上的),欢迎大家补充,个人感觉如果这些问题都能举一反三,那基础部分应该问题不大,同时还请大家在百度问题的答案时能不局限于问题本身,多思考,多查找。


常考知识点汇总:


C++基础

C和C++的区别

指针和引用的区别

C++四种类型转换

C++从源文件到可执行文件的过程

const和static的区别

i++和++i的区别

函数重载的实现机制

C++中各种数据类型的sizeof

C和C++中结构体的区别

C++中结构体和类的区别

C++中封装、继承、多态

虚函数和纯虚函数的区别

重载和重写的区别

为什么析构函数是虚函数

构造函数的调用顺序

为什么构造函数不能是虚函数

三种继承方式下的访问权限

虚函数的实现

C++内存区域

堆和栈的区别

new和malloc的区别

C++内存泄漏

C++智能指针的用法

缓存的作用和用法

C++虚拟内存

vector和list的区别

push_back的时间复杂度及推导

set底层实现

map底层实现

unordered_map底层实现

迭代器什么时候失效

常见的设计模式(手撕)

计算机网络

TCP和UDP的区别

TCP三次握手四次挥手过程及相关问题

OSI七层模型和TCP/IP五层模型

TCP如何实现可靠传输

如何实现UDP可靠传输

TCP和UDP的使用场景

什么是TCP心跳

http和HTTPS的区别

http状态码及其含义

GET和POST的区别

cookie和session的区别

协议的幂等性质

操作系统

进程线程区别

进程间通信方式

死锁的四个基本条件

内核态与用户态

临界资源和临界区

线程上下文切换

常见调度算法

什么是协程

银行家算法

哲学家就餐问题

读者写者

生产者消费者

Linux的文件系统

数据库

索引为什么用B+tree

B+tree和B-tree有什么区别

索引为什么不用红黑树

什么是联合索引

MyISAM和InnoDB区别

数据库三大范式

数据库事务

数据库隔离级别

什么是脏读、幻读、不可重复读


发散问题:


自我介绍,建议大家半分钟说完,尽量说简历里面没有写到的,同时也是自己出彩的部分


如何看待加班,按照自己真实想法说就行,但目前互联网公司大部分是995的工作制,应该还是可以接受的


有什么要问我的吗(反问):不知道问啥的话问一下公司的培养体系,别问薪资和加班(大概率凉),别问面试官对自己的评价(一般保密,而且你自己面的啥样你自己不知道么哈哈哈)


写在最后


经历了这么多场面试,我也从一个编程的手,微微颤抖的小白,蜕变成面试官上句没问完我就知道他下局=句要问啥的老鸟,也是希望能把自己的心得体会和大家分享,还有几点想磨叽磨叽


1.校招,实力永远不是决定性因素,我见过本科国奖,项目满天飞的大佬10月份还是海投,也见过绩点70,啥都不会的菜鸡去了bat。面试和运气有很大的关系,一次两次的失利不要紧,一丁点都不要紧,毕竟最后即使你所有公司的面试都通过了,你也可能把他们都签了,你还得从里面挑一个offer,但这并不代表你可以不努力,不提高实力,毕竟有了实力,才有了面试的底气和谈薪的资本


2.只要坚持下去,不放弃,每个人到最后都会找到理想的工作,但不要和别人比,永远有比你厉害的,也永远有比你弱的,和自己比就好,同时没有最好的offer,只有最适合自己的offer,想清楚自己真正想要的,比找到工作更加重要


最后,以我最喜欢的一句话结尾:但行好事,莫问前程



点击阅读原文,与大佬交流

▼▼▼

▼▼▼