最近有位研二师弟把他的春招过程和实习感悟整理成文章投稿给我了,我感觉还是挺有意义的,整理出来跟大家分享一波!
分享主题:C++岗位的春招的总结以及第⼀次实习的感悟,分享⼀些踩坑的点
个人背景
本人就读于一所计算机无评级的双非学校,目前研二,本硕都是计算机。
春招结果
春招终于结束了,结果还算可以,拿到了字节跳动财经部⻔的后端开发(Go)和腾讯 IEG 的后端开发(C++)。
春招过程
回顾⾯试的过程真的是⼀波三折。
⾸先 2 ⽉末的我已经⼊职了百度了,三⽉初开始的时候,本来的想法是先实习,后⾯再找⼴东的岗位。
可是之前的简历没有更新,3.5 腾讯TEG就把我捞了。
只能硬着头⽪去⾯,结果就是挂了不少次鹅厂,面评估计写的稀巴烂很难看。
不过好在鹅厂的鞭尸机制够完整,最后还是如愿上岸 IEG 了。
在面试和实习的过程中呢,其实我还是有一些感悟,也算是自己踩了一些坑来给大家分享下。
其实为了这次春招,我在 20 年12月份就开始找日常实习了,也是希望可以通过这一份日常实习为春招暑期实习增添履历和筹码。
我本人是广东人,希望工作能在广东。但是年前的时候,广东的大厂除了字节基本上没有实习生招聘,那时候对自己去字节没什么信心,现在想想其实那时候就该冲了字节财经的,面试强度还没百度大。
于是只能往北京投简历,幸运的是被百度的一个架构部门收了。
个人觉得做架构的开发,对于一个菜鸟来说入手的学习时间成本太高了。
如果是作为一份你有长期实习打算的实习,或者是自己有留用意向的实习,我觉得是非常不错的选择,可以学习到不错的技术。
但是如果是想要作为一份短期的实习,则没有什么太大的帮助,因为架构的东西在短期很难有产出。
对于拿到字节和鹅厂的offer,我觉得这份实习经历充其量就是让面试官知道:这人有百度实习的经历,应该不会很差。
如果想要找一份短期实习,我感觉还是在面试的时候问清楚业务,最好是那种大前端的业务,一个项目的周期在两三周就可以完成的那种实习,这种实习短期内能让你上手更多东西。
其次,对于鹅厂,一旦招聘开了就勇敢的去投,真的。越早HC越多。并且,鹅厂的鞭尸机制足够完善,早挂早捞,多次机会上岸的几率更大。
这里阿秀简单科普一下:
HC(Head Count),俗称人头数,这里指的是招聘名额。也就是某个职位需要多少个人做,那么这个数字就是这个职位的HC,中文称为"编制"或"职数“。
鞭尸机制:大家要知道互联网大厂的部门是有很多的,比如腾讯就有WXG、PCG、TEG、IEG不同部门,在你未能通过其中一个部门的情况下,其余部门是有可能再对你发起面试的。比如我面试 WXG 挂了,但是 IEG 看到我简历了,IEG 又邀请我去面试。
至于为什么叫鞭尸呢?这是因为互联网大厂面试都比较难,一个部门把你挂了,相当于找个坑把你埋了,结果其余部门又邀请你去面试,然后接着挂你,这就相当于再把你从土里挖出来鞭尸...故有鞭尸之称。有一说一,鹅厂是挺能鞭尸的
还有呢,就是C++开发的面试,STL 真的很重要。
看前面的面经,基本上一个部门的技术栈语言是C++的时候,STL 是必问的,真的是必问!这个部分还是要好好学啃下来。
Web服务器作为一个项目在今年已经烂大街了,但是如果没有更好的项目,这个Web服务器还是要好好啃下来,毕竟这个项目坑点太多了。
以上就是我的个人春招总结和实习感悟了。
顺便来分享下我的面经吧
3.8 TEG的语音架构,一面挂
全程刨项⽬,刨那个已经好久没碰的抄的Web服务器,很多细枝末节都忘⼲净了。
问了一些很极端情况下Web服务器会发生什么情况(这些都是测试的时候没碰到过的)。
就⾯了30分钟,结束的时候还被⾯试官阴阳怪⽓了⼀波:这些问题你不懂?本科⽣都懂的东⻄,怎么敢的啊。
秒挂了以后,第⼆天teg的另⼀个部⻔⼜把我捞上来了。这次周末好好准备了下
3.15 TEG,部门没细问,好像跟 CDG 的金融有合作的,一面挂
面试真题:
- 如何将一个进程挂在到后台,脱离终端运行(不会)
- 讲一下进程的通信方式
- 你知道共享内存,那你知道mmap的匿名映射是什么吗(不会)
- 讲一下进程和线程的区别
- 说说网络吧,讲讲http和https
- 讲讲TCP和UDP的区别
- 讲讲TCP三次握手和四次挥手
- Linux学过吧,说说你会的命令(讲了top、free、netstat),他反问,free显示出来的cache,如何将其释放?(不会)
- 算法:LeetCode206: 反转链表
这次没有秒挂,我以为有希望了。
结果给我晾了⼀周后,还是给挂了。
很快啊,真的很快啊,很快我就站起来了。
挂了后不到24⼩时,IEG 的魔⽅⼯作室就捞了我。
3.29 IEG 魔方工作室,一面
面经:
- 说一下STL吧,你讲讲内存配置器
- vector和list的底层是什么,说一下他们的使用场景
- 那map和unordered_map呢
- 说一下迭代器失效的场景
- 进程和线程的区别
- 操作系统的内存管理
- 说说网络编程吧,讲讲建立TCP的API,越详细越好
- 算法:LeetCode78: 子集,有序矩阵中第K小的元素(撕不出最优解,写了个快排)
本来以为算法没撕出来最优解挂了,可第二天发现进入复试了。可能是前面基础部分回答的好,加上自己对基础有一些拓展,所以过了。
4.6 IEG 魔方工作室,二面(挂)
两道算法
- 第一道是原创题,将相邻的连续数字合并。比如:[1,2,3,5,6,7,8,10]打印成1-3,5-8,10
- 第二道是LeetCode43:字符串相乘,一开始使用了一个vector<int>去处理相乘结果,结果面试官不肯让我用,要求我用一个string去处理。撕不出来
果不其然第二天魔方工作室就挂了,挂了不到半小时IEG的研发效能部就捞了我。哈哈,这就是活生生的鞭尸啊!
4.10 IEG研发效能部,一面
面经:
- 讲讲虚函数的实现机制
- 构造函数可以设置为virtual吗?析构函数可以吗?
- 讲讲指针和引用,野指针
- epoll和select的区别,以及epoll的使用方法
- 讲讲vector的扩容
- 讲讲map和unordered_map
- 讲讲操作系统的内存管理,堆和栈的区别
- 一个进程能有几个堆、几个栈?(靠猜,一个进程可以有多个线程,线程拥有自己的栈空间,所以我回答一个堆多个栈)
- 栈由操作系统回收,那你知道操作系统具体怎么回收的吗?(不懂,后面才知道其实就是推动栈帧的指针就可以达到回收目的,八股文背傻了不会用)
- 二叉树有几种遍历?你说说这些遍历在实际中的应用(我就说了下中序遍历可以在类似于搜索树的结构中得到一个有序序列,他提示下红黑树的插入,我就说了前序遍历的变种可以用于红黑树插入,后序遍历我实在是想不出,他也说那就下一题)
- cpu 的寻址(不会,计组都多少年没碰了)
- 聊项目,被问傻了,只能靠猜:listen的时候突然fork,然后一个连接的到来会唤醒两个进程吗?(我瞎猜的)
- 算法:LeetCode146: LRUcache
面试结束后,面试官直接和我说过了,然后他顺便问了下同事下午能不能面2面。结果同事下午有事,推到了4.12。
4.12 IEG研发效能部,二面
面经:
聊聊在百度做的东西
讲讲虚函数的实现
构造函数可以设置为virtual吗?析构函数可以吗?
说说stl中有几种map(很好奇面试官没有看之前的面试记录吗,前三个问题和一面一样)
volatile关键字是什么意思?它一般用在哪
说一下TCP的三次握手和四次挥手
为什么一定要三次握手,两次可以吗
第三次握手的报文没按时到达,会发生什么情况
四次挥手客户端为什么要等到2MSL才进入CLOSED状态
口述算法:100万个user_key,user_score键值对,找到user_score最大的1万个(我讲了个topk快排,发现面试官好像听不太懂,不明白他是懂装不懂还是怎么了,最后干脆共享屏幕写代码给他看)
面试完,晚上11点流程进入HR面。
4.13 HR面,4.19offer
鹅厂对于我来说是最想去的。但是由于之前挂了几次,没啥信心了。所以在鹅厂offer前我还投递了字节跳动的财经部门。
不得不说,字节跳动的财经部门效率很高,一个下午走完三面。(PS.字节也没传言中的地狱难度,可能是看部门,有些部门难度还是挺easy的)
4.11 字节跳动财经部门 一面
- 讲讲stl中的vector
- 讲讲map和unordered_map
- 线程安全的map可以怎么实现
- 说说指针和引用的区别
- const关键字、static关键字
- 多态的实现
- MySql的索引
- left join和right join
- 算法:LeetCode135: 分发糖果
二面
- 什么是死锁?死锁的四个条件?如何避免死锁?
- 进程和线程的区别?
- MySql的索引
- 乐观锁和悲观锁
- redis中的aof和rdb持久化
- 讲讲https和http,并说说https的工作流程
- 算法:LeetCode139: 单词拆分
三面:
- 聊项目,不得不说这个面试官水平很高,我每说出一个点他都能就这个点提出问题,并说出我做的不好的地方,然后问我可以怎么改进。真心服气!有本事的面试官还是不少的。
- 算法:LeetCode25: K个翻转链表
全部评论
(2) 回帖