C++开发的求职之路:坚持就是胜利
简单说明一下情况,本硕软件工程专业(听上去优势很明显),但并没有进入竞争BAT的行列(羡慕进入BAT的大佬),算是中规中矩的二梯队吧。找工作前一直忙于论文,从7月中旬开始准备校招,应聘C++后台开发,8月开始参加笔试,前后投了三十几家公司(笔试跪了一大半),经过煎熬的两个月,有幸在9月底拿到满意的offer(知足常乐),算是结束秋招。
7月,搞定论文,开始找工作。捡基础,谭老师的《C++程序设计》过了一遍,接着过了一遍《effective C++》(受益匪浅的一本书),《剑指offer》刷了一遍(强烈推荐),《数据结构》复习了一遍(估计没有人不看),侯老师译的《STL源码分析》刚看完内存管理就到了月底,回趟家放松一下下月再战。
8月,1号第一场线上考试。2个小时的笔试完虐,5道编程0AC(太渣了),对于在家的我打击挺大的,第二天根据答案刷了一遍题目(牛客牛人真多)。认识到找工作并非易事,没在家待几天就回学校了。最早的考试应该是9号,趁着没考试的这几天把《STL源码分析》看完,二刷《剑指Offer》(感觉刷多少遍都不为过),还复习了《操作系统》、《计算机网络》、《UNIX网络编程》(没看完,尽量多看)。从9号开始就进入了边考试、边刷题、边面试的“求职时间”。最开始的面试是16号的华为优招。
一面:
聊了聊研究生期间研究方向(可能是挺感兴趣);
做过的项目;
写一个ip的正则表达式(自己挖的坑,说项目中用过正则库,然而没有写出来)。
二面:
聊了聊项目;
对华为有什么看法(好好好)。
17号的360面试(学长内推),两轮技术面,一轮hr面,一天结束全部流程(没笔试的感觉cool)。
一面:
智能指针的作用;
Linux中du,df两个命令的区别;
纯虚函数作用和实现方式;
单链表倒序输出;
快排的思想;
树高度的求法;
最小生成树算法;
动态规划,求最长公共子序列;
文件权限的修改;
先递增后递减的数组中找最值;
一面感觉被面试官虐了,发现自己要复习的东西还有太多,自己其实挺想进360的,所以面完有点懊恼(正好下雨天,和面试跪挺配吆)。以为自己没戏了,没想到过了一会收到了360的通知,说等待下午二面,当是感觉像是中了彩票。
二面:
STL的数据结构的内部实现;
链表的操作,查找链表中倒数第K个值;
排序的数组中找绝对值最小数;
两个栈实现一个队列;
二面感觉表现不错,顺理成章的到了三面(hr面,第一次见hr小姐姐,激动),三面结束。严格意义上360是我经历的第一个专业对口企业的面试,体验挺不错的。
接下来是链家网,内推批次,可以报销车费,去了趟帝都。面试那天同样是个下雨天。签到后手写5个编程题,大部分上是《剑指Offer》上的(当是没整理,记不住了,其中一道题是一个记录ip访问次数的log文件中,如何查找出现次数最多的前十个ip),都写出来了,等待一面。一面面试官全程笑脸相迎,当是没有紧张。问了问笔试题目的难度,问了一下ip出现次数那道题的思路,问了问自己做过的项目(简历上写了三个,挨个问了),让我等通知。体验还不错,从面试大厅出来,扫二维码看进度发现一面跪了(给自己找了N个理由,不招C++岗,项目中用C++少,项目不偏重业务层面…..),赶了当天的火车回学校(下雨天,和面试跪挺配吆)。
在接下来应该是小米了,之前让同学内推,说不影响秋招就让他推了(感觉内推会影响秋招的,毕竟秋招都没给面试机会)。
tcp三次握手;
socket服务端建立过程;
linux查看系统的常用命令;
linux检测内存使用情况;
红黑树插入、红黑树的用途(红黑树没怎么看,旋转那一块没答上来);
两道编程:二叉树镜像、集合的所有子集;
小米的体验还ok。
月底收到了美团的一面(同学内推)。面试前两天实验室一个同学借到了美团的电话面试,问了好多java和mysql的东西。由于之前一直没复习数据库,恶补了两天的数据库内容,果然……。
项目
操作系统相关:
进程线程区别;
进程间通信、线程间通信机制;
进程调度算法;
Linux相关命令:top、free、sed、grep、cut、netstat、ps……;
OSI七层模型和五层模型区别;
各层的协议;
TCP、UDP区别;
TCP三次握手、四次挥手;
Redis原理和使用场景;
Mysql的实现机制(B+树);
海量数据的查询操作;
事务的ACID特性,事务的隔离性(四种:读取未提交内容、读取提交内容、可重复读、可串行化)
常见的几种数据结构;
Hashmap的实现;
Hashmap的原理,解决冲突的方式;
常见的排序算法;
快排;
二分查找的两种实现方式(递归、非递归);
C、C++的区别以及C++的优势;
感觉美团也偏重业务层面,所以比较看重数据库和java功底。奈何语言不对口(也可能因为其他原因)。
8月收割offer的梦想破灭了,内推结束,9月秋招开始。最先开始的是中兴,不知为何,全程没有考察过专业掌握情况,项目也是简单的了解了一下。一面、二面、终面洽谈。然后是百度的面试,果然是大公司(BAT就面过这一家),考察的基础全面。
STL中的各种数据结构的底层实现;
Linux的内存管理;
超大文件中数据查找;
手撕代码;
项目;
智力题;
第二天百度二面
项目,一个项目中简单用到了遗传算法,结果被面试官大佬抓住狂怼(已在简历中删除);
两道手撕代码(《剑指Offer》原题)
网络协议,7层网络协议栈和5层网络协议栈的区别;
智力题;
面完就知道结果了,bug free的能力还是非常重要的。
再接下来是中科院软件所、中国银联,都是简单聊了聊项目,等通知。再就是CVTE和深信服。
CVTE一面
C++11的新特性有哪些,智能指针;
STL的掌握程度;
线程间通信;
多线程同步;
TCP的状态转换;
项目;
二面
TCP/UDP的理解;
业务场景,一个兼具多人聊天、文件传输和视频直播功能的软件设计。
深信服
一面
代码能力考查;
Linux内存管理;
IO复用技术;
进程间通信、线程间通信;
研究课题的认识;
守护进程的创建;
二面
研究课题的认识;
对交换机arp协议的理解;
C基础的考查;
Linux基础命令的考查;
还有几个面试因为面试地点或是时间冲突的原因,选择了放弃。收获了4个offer,选择了自己最感兴趣的一个结束了秋招。个人感觉,找工作一半实力、一半运气,而且每个企业的业务点都不一样,我们需要有针对性的复习(如果特别想进的话),还有就是可以多拿几个小公司练练手,混点经验(虽然不太厚道)。有实习经历的话是加分项,项目经验也是加分项。有实力的话走内推(hc有限,先到先得,竞争的人相对少一些),否则的话建议走校招,感觉校招和内推没有太大的区别,而且内推如果表现不好,可能会影响校招,校招竞争相对小一些。还有就是简历一定要认真准备,做一份好简历是一门学问。
最后祝福暂时没找到工作的小伙伴们早日收割到满意的offer。