第一次找实习参加面试,简单记录一下吧。。9.17投简历,9.18简历通过,9.24通知面试,9.27一面,一面后紧接着二面,2h后三面,1h后HR面
一面:
自我介绍
C++:
const * int *p是什么
C++对象的内存布局、alignment(是什么、为什么)
C++11新特性了不了解,lambda表达式(知道是干什么的,语法背不过没法默写)
算法题:
1. 大整数加法
2. 根据二叉树的前序和后序序列能恢复出多少棵树
3. 跳台阶,不能连续跳2步(只写了个搜索,dp不会。。之前面经明明见过的,侥幸心理不可取啊orz)
二面:
自我介绍。。然后开始大杂烩
操统:
进程与线程的关系
进程的内存布局,哪些是线程共享的
多线程访问堆段会出现什么问题,如何解决这些问题(信号量、锁),有没有自己实际应用过(用过读者写者模型,没追问)
多线程会不会导致程序崩溃,程序会因为什么崩溃,子线程崩了的话进程会不会崩?(如果捕获了异常或信号就不会崩)
虚拟内存的作用,地址空间的概念,指针能不能访问0x0,如何在进程中直接操作物理地址(这个真不会)
内核态、用户态相关,扯了几句异常控制流
LRU怎么实现(hash+链表),详细解释步骤、时间复杂度,
暂时就想起来了这些。。
网络:
C/S模型,socket的建立过程(bind/listen那一套,顺便说了accept和connect是在tcp握手的什么时间返回)
tcp握手过程(说说序列号什么的就行了,没追问)
网络分哪些层(说的是tcp/ip五层,OSI可能也行?没追问)
tcp和udp有啥区别,udp的特点是什么,udp有哪些应用(说了视频流、dns、http 3.0,没追问)
http的get和post请求的区别(就说了一个是body传数据一个是url传参数,没追问)
状态码200、404、500(都是最常见的)
暂时想不起来更多了。。
C++:
面向对象的特性(继承封装多态),详细解释多态(编译时、运行时)
喜闻乐见的虚函数、虚表、虚指针,虚表是对象级别还是类级别,虚指针什么时候创建(建议去看《深度探索C++对象模型》,看完之后虚函数应该就挡不住你了)
share_ptr是干什么的(这个知道),count具体什么时候加什么时候减、底层实现(不会)
数据结构:
扯到C++肯定就要扯STL,vector/list/map底层实现,vector扩容(*2扩容,别的我也不知道还能说啥了,没追问)
扯到map肯定就要扯红黑树,红黑树基本概念(特性说一下就行了)
好像没了?。。
算法题:
最后才来了道算法题:一个二维数组,找出其中的最长路径,每次只能向值比自己小的方向走,且每次只能向下或者向右走
口述搜索、写了dp转移方程,然后实现dp(没跑数据,写出来就行)
三面:
开局面试官说前两面反馈比较好,所以这一面聊一些深入的东西。。然后就问了不少我没听说过的东西,记也记不下来了orz,在这写些我答上来的吧。。总体要求是知道多少说多少,有多少说多少
C++:
详细介绍const
inline,虚函数能不能inline
多态的完整分类(4种),详细介绍虚函数、虚指针系列(再次安利《深度探索C++对象模型》,里面有很多C++ Primer接触不到的东西)
struct/class/union(再次安利《深度探索C++对象模型》,里面从编译器创造者的角度讲过struct和class的事情)
好像还有不少但是想不起来了。。问了些工程实现相关的没听说过就打住了
网络:
http报文发送的全过程,尽可能详细(答的乱七八糟的不过拼拼补补好像也差不多,建议自己多理一理从何说起,链路层/物理层不用说)
http 3xx系列的状态码
详细解释滑动窗口(流量控制、拥塞控制、糊涂窗口、nagle、clark说了一通)
http 2.0/3.0,这个网络上都总结的比较全面了,我也没说得特别全,反正就过了。。
如何实现断点续传
好像就没了?上面那些展开了说其实也挺耗时间。。
操统:
进程线程区别联系。。老问题。。可以结合一点实际例子来说?
文件I/O的过程,尽可能详细;进程内部和进程之间如何处理同一个文件(不熟悉,然后就跳过了)
估计看我不会I/O而进程之前问过了好像就没问更多的了
算法题:
之前聊的挺开心的,于是让面试官出个简单点的算法题,他还真同意了2333
k路归并,优先队列就行了。。然后他提了句还可以胜者树败者树,表示这个我知道但是一般好像是外存中用的比较麻烦学的时候也没讲实现也不会写
然后优先队列怎么实现,堆,实现堆有哪些要注意的(我也不知道有什么好注意的。。就说了几句实现细节)
临结束前聊人生。。要不要读研,什么时候来实习,你是哪人之类的
HR面20min也结束了。。等通知了🤔
全部评论
(5) 回帖