关于雷神科技的面试,其实之前脉脉上的 hr 有联系我,但是在招 IM 客户端开发负责人,由于工作年限有点短就不合适,但是在 boss 上投了后就直接约面试了,如下是面试的内容:
- 自我介绍。
- 在声网你主要是做 c++ linux 服务端的开发,那你有接触过 SDK 或者客户端开发吗。
- 堆和栈有什么区别。
- c++ 中基类中的析构函数为什么是虚析构。
- c++ 11 你知道哪些新特性,智能指针有哪几种以及它们之间有什么区别。
- c++ 中的野指针是如何产生的。
- 线程同步的方式有哪些,读写锁有用过哪几种。
- 进程间通信的方式有哪些。
- tcp 的粘包是如何产生的,在 client 和 server 端一般粘包会发生在哪一端(server 端),以及解决粘包的方案有哪些。
- 在声网的项目中,你们传输层协议用的是什么,以及用它的优势是什么呢。
- 如果客户端断网或失联了,你们服务端会作何处理(客户端和服务端是建立 tcp 长连接,由此客户端和服务器是不断有心跳即来回 ping-pong,当没有心跳后服务端感知到客户端失联会有 60s 的等待操作,若在 60s 后客户端仍然没有连接上来则服务端会退出即 1 个 worker 会结束它的生命周期)。
- 当程序异常退出了,你会如何定位问题,除了 linux 外,针对端侧即 windows、macos、ios 和 android 又如何定位问题呢。
其实面试的时间不到半小时就结束了,当问到第 2 个问题即我是做服务端开发时面试官犹豫了下,再才继续问接下来的问题,大概率是因为要招客户端的人,最后我问了下这个岗位是不是做 SDK 的,面试官说是的,底层使用 c++,在使用如 node.js、java 和 object-c 封装接口再提供给上层去做集成(所以才会问问题 12)。
一方面是招资深的 c++ 开发工程师,另一方面还要有 SDK 的开发经验,所以这次面试大概率是没过。