2020.12.26修改
应大佬们的要求,如有需要简历修改,面试辅导等1v1求职辅导的同学,可以在下面留言或者私信我,我基本每天都会逛逛牛客,我看到必定回复,尽我所能帮助你~~
——————————————————
终于~~在参加了一百多场的面试后,我的秋招,结束了
回想一下这一年的经历,感触颇多,很感谢牛客网这个平台,让我能有机会接触很多优秀的学长学姐,和(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.runoob.com/cplusplus/cpp-tutorial.html
只强调一点,个人觉得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
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,想清楚自己真正想要的,比找到工作更加重要
最后的最后,以我最喜欢的一句话结尾:但行好事,莫问前程
全部评论
(15) 回帖