飞书客户端一面,体验很不错,比起昨天晚上的腾讯wxg面试体验要好不知道多少倍。面试官人很和善,不懂的知识也会和你解释。下面总结下面经
cpp面经
cpp八股的拷问持续了将近40分钟,面试官问了非常非常多的问题,几乎把我现阶段掌握的cpp知识全部都问了一遍,压力还是不小的。下面是面经(笔者写该面经的时候已经过去一天,有些问题已经记不清了)
- 什么是全局变量?
- 什么是静态变量?(区分全局静态和局部静态的区别)/ 必然会扯到内存。
- 全局变量的声明顺序对程序有影响吗?
- cpp内存模型?介绍内存的几个分段?
- cpp申请内存的方式?
- new和new[]的区别?delete和delete[]的区别?
- 如果用new[]申请内存,用delete释放会发生什么?
- 如果上面那个问题的对象是基础类型呢?
- 如何解决内存泄漏的问题? / 这里引出了RAII惯用法、智能指针
- 介绍几种智能指针?
- shared_ptr内部有几个计数器?为什么?
- 虚函数
- vptr和虚表分别存放在内存的什么位置?
- 为什么析构函数需要定义为虚函数?
- 如果在构造函数中调用虚函数会发生什么?/ 这个当时没太答出来,哭哭
- 如果是多继承,子类的虚函数指针有几个
- 讲一下使用过的cpp现代特性? / 这里引出对现代特性的考察
- 介绍一下auto的推导规则? / 寄又是一个底层问题,没答上来
- 讲一下lambda表达式是如何实现的?
- 讲一下lambda表达式和bind的区别?
- 讲一下lambda值捕获的方式通常有哪些?
- cpp多线程同步使用什么?
- 讲一下互斥锁和自旋锁的区别?
- cpp标准库里有自旋锁吗?
- cpp如何在进程间同步?知道有什么库可以使用吗?
到这里差不多cpp的内容考察就结束了。涵盖的内容非常广泛,几乎把我准备的所有cpp知识都问过一遍了,除了stl和模板(根本不太会)涉及的比较少。
这轮恐怖的cpp拷打让我意识到,使用cpp特性的时候,要学会去关注他的底层实现源码,这样可能才是面试官乐于看见的。
然后就开始拷打八股,因为我简历上大部分涉及计网,面试官也就开始拷打计网的知识。
- 讲一下tcp和udp的区别?
- 讲一下tcp三次握手的过程? / 这里引出了socket族调用方法
- 讲一下如何使用linux系统调用去完成tcp通信?
- tcp连接一定需要bind吗?可以不bind然后连接吗? / wc这个问题有点意思
计网由于每个问题我都逼了很久,所以他看时间不太够就没接着问了,然后就开始问项目了。
他这里主要问了我ncx项目的一些问题?
- 讲一下reactor模式?
- 讲一下为什么你的项目内是采用主从reactor?
- 为什么是一主多从?
- 多从reactor不是会违背多路复用的初衷吗?那为什么还要设计多个从属reactor?
- 多线程中创建的线程如果不管他会怎么样? / 这个问题贼致命,因为这是面试官看我的项目代码发现的bug
- 如果你采用非阻塞的socket,很容易会出现消息发送不连续的问题,你是怎么解决这个问题的? / 没错,这也是一个我项目没解决的bug
到这里拷打基本就结束了,耗费一共70分钟,然后就开始刷题了。算法题非常简单,两个有序数组合并,但是我因为时间太短(写了6、7分钟),有个边缘条件没判断好,但面试官也没多说什么。
这次面试可以说是酣畅淋漓!已约二面。求职日记持续更新中~