【已oc】Momenta C++日常实习 1/2面面经
纪念一下今年开局的两面,就oc的经历吧。
可能没啥参考价值。
总体流程
- 2022.6.22 投递简历(实习s)
- 2022.6.23 hr第一次电话,询问我的情况(能实习多久,啥时候到岗),没有约面
- 2022.6.24 hr约面,一面约到周一(2022.6.27)下午3点;
- 最后因为一年没面试,有点怂,觉得没准备好,就推了一天(事实上真不需要,真没想到面试这么简单啊)
- 2022.6.28 15:00 一面
- 2022.6.29 15:00 hr打电话约二面,我问能不能约到周五,hr问周四不行吗,周四是有啥事情(看起来是很着急要我的样子)?我说那就周四吧,二面约到周四(2022.6.30)下午2点半
- 当时以为一面这么轻松,是不是二面开始放大招,就有点害怕,结果还是我想多了
- 2022.6.30 14:30 二面
- 2022.7.1 18:30 oc
一面(60min)
面试官态度还是不错的,语气很和蔼,面试跟聊天一样,但是不露脸啊
自我介绍
项目/八股(20min)
- 介绍下项目
- 我问介绍哪一个,面试官说就webserver吧
- 有限状态机实现思路
- http在哪个模块实现的?有调库吗?(然后翻了我github代码,慌的一批,我以为只有腾讯面试官会这样干)
- 没有,是自己实现的
- 为什么要使用线程池/连接池
- 线程池怎么实现的,有用分配器吗(这是个啥)?
- 没有
- 请求队列,多个线程抢
- 数据库事务的四大特性?
- 老八股文了,背了一遍
- RPC的同步和异步调用的实现?
- 多线程模拟的异步调用
- 为什么使用protobuf?有什么好处?
- 线程间怎么通信?
- 互斥锁、条件变量、信号量
- C++中
lock_guard
和普通的mutex
的区别?lock_guard
类似智能指针,自动加锁解锁
- (看了代码之后问的)我看你一个显式加了锁,一个用了lock_guard。有什么特殊意图吗?
- 两个项目实现的时间点了,当时做webserver只学习了POSIX的pthread api,所以直接封装了类
- 当时还没有学习C++的多线程
- 一个用makefile,一个用cmake,也是一步一步学习的吗?
- 是的
- 什么时候开始学C++的?
- 大一开始,大四到研一深入学
算法题(20min)
平台是showmebug,核心代码模式
给了4个,关于dfs/bfs的,写了这两个:
- 找到到达目标点的所需的步数(bfs/层序遍历)
- 找到到达目标点的所需的序列(dfs/回溯)
差不多是说思路,写伪代码,没让跑,面试官看了差不多就行
聊天/反问(20min)
- 面试官介绍公司情况,部门工作等内容,还问了实习时长等内容
- 用了什么技术栈
- 怎么培养实习生
总结
问题较常规,只要项目是自己做的就能回答
今年的第一次练习,其实面完之后觉得稳过了,但是存在的问题是:
反问环节,感觉没表现出太强烈的意愿,这是要改的,无论是否感兴趣/想去
二面(30min)
面试官态度仍然不错,答不上来的问题也觉得没关系,但是也不露脸
不过想不到的是没有自我介绍,很爽啊
自我介绍(无)
直接对着简历问了,没让自我介绍,不自我介绍真的轻松很多
并且说已经看了我的github(再次慌的一批)
项目/八股(10min)
- 是计算机专业的啊,从什么时候开始学C++的?
- 又问了一遍
- 介绍RPC的概念,为什么要用RPC,RPC实现的关键点
- RPC常见八股文
- 关于为什么要用RPC,扯了一下软件架构的演进
- 居然说我说的很流畅
- 为什么要做RPC这样的项目?
- 公司都在用,想了解原理
- 实验室的研究方向?
- 为什么使用protobuf?有什么好处?
- 又问了一遍,感觉是个常问的问题了
- 看你提到了多线程。那问你一个问题。线程a加了互斥锁,读写了同一个变量;线程b不加锁,也访问同一个变量,会访问成功吗?
- 这个问题引人深思啊,从来没思考过这个问题,脱口而出就是不会访问成功
- 经提示后想到,可能不在同一段代码(临界区)中被访问,就说了可能会
- 得下来看看互斥锁的原理了,麻了
- 看你说熟悉常见数据结构和算法(这不是简历标配吗),平时刷过LeetCode吗?
- 害怕,还以为要问我hard题
- 我就说,平时有刷过,不过不同知识点掌握程度不同
- 不知道这个问题,应该回答刷过,还是没刷过好呢?总之有点尴尬
算法题(10min)
平台是showmebug,核心代码模式
二分查找(查找第一个小于等于x的数),套模板吧
后来让我描述思路,描述二分查找的使用场景
聊天/反问(10min)
- 一般会让刚来的实习生做什么工作
- 想去传统互联网公司,还是专注做自动驾驶
- 这个问题见仁见智,如果真的想去,或者以后真的想专注于做自动驾驶,回答后者比较好
总结
同样大部分都是常规问题,不过这次暴露了一些问题:
- 对于算法的思考度不够,知道模板怎么写,但是没完全讲透彻(比如说这个模板为什么要+1(向上取整是因为避免
left
和right
相邻时,无限循环了),我直接略过了)。即使是再平常不过的二分查找,也是这样。之后得复习一下常见算法的思路描述,复杂度分析 - 对于多线程的某些问题,思考不够细致,也就是说一旦项目被深挖,人就没了
- 后悔没在反问环节问刚刚那道多线程问题的答案
后记
没想到这面试这么轻松就过了,并且是今年的第一次面试(没准给我放水了,所以说没啥参考价值),之前一直觉得自己口齿不清,表达不畅,经常口吃。
其实这两次面试,总体来说,我觉得我的表达还算流畅,关键点几乎没有卡壳(可能也是因为面试官语气比较和蔼,不会给人带来紧张感?并且oc的时候也说对我的表现表示很满意)。而且面试跟聊天一样(没有坐牢的感觉),如果能进面,也不要求你有自动驾驶/高精度地图相关的经历。也很感谢第一次有公司对我的表达能力表示认可。
想了很久,真的很遗憾,最终还是没接offer,在其他公司0 offer的情况下没给自己留后路,原因如下:
- 因为其他公司还没面试,但是给我决定的时间太少了,入职时间节点卡的也有点紧了(感觉部门应该挺缺人哈哈,尝试拖延入职时间,等我面了其他公司,给我多点养鱼时间也失败了);
- 且对工作内容兴趣不大,我这个人的特点是做任何事情都必须有强烈的兴趣驱动才行,如果兴趣不大可能进去了也很痛苦,而且这还是第一次面,看看有没有更好/更适合我的机会吧。(我准备的方向偏web后端,但是岗位是关于高精度地图生成的,我会考虑入局自动驾驶,但是不确定今后是否all in自动驾驶;之前投的另一个岗更感兴趣些,也看到了这个岗,就是看jd兴趣不大就没投,看我C++技术栈,给我调到了这个)
- 如果以后真的想all in自动驾驶,其实这个机会还是很宝贵的