总体来说主要是讲项目,一定要能自圆其说,而且对于所用的开源软件一定要说明使用这个的原因,表示至少自己做过一定的市场调研,即使原因说的不够充分,不够成熟其实影响也不大。
一面:
1 自我介绍,并介绍项目
2 项目中使用ZMQ 的原因,从以下几个方面讲:
1)从市面上常用的一些消息队列,消息库;(面阿里的时候有问为什么不用C++11 自带的消息库,表示真的不知道,现在还没看到相关的资料,可能是当时比较紧张,记错了面试官说的关键信息);
2)说明使用这个工具的优势,贴合自己的项目去讲
3 C++ 如何实现多态?
4 虚函数的实现原理?
5 四种强制转换方式?(由于讲到了dynamic_cast能够进行检测,面试官有问如何检测,并不知道);
还问了一些小问题,磕磕绊绊地答了,但是并不全面,也记不太清了
代码题:
1 给定一个字符串,判断其是否为回文串?
最开始用的递归,但是面试官提示递归会导致栈溢出,之后改为循环;
一紧张对于最后的输出结果没有进行正确的初始化导致所有的输出结果均为false;面试官也给了提醒,并进行了改正
建议:最好是多考虑几个测试用例,确保简单问题不出错,不然真的很慌
2 给定一个字符串,判断其中包含的最长回文串的长度:
只能想到一头一尾各一个指针,判断这两个指针中间的字符串是否为回文串(可以用到上一题的判断方法)
但是面试官提示时间复杂度过高,一直以为是O(n^2),后来面试官提示是O(n^3)
因为思考时间过长,最后没有写代码。
https://blog.csdn.net/qq_38906523/article/details/79810099(三种实现方法,讲的比较全)
二面:
1 同样是自我介绍,问到项目的时候面试官比较犀利,问为什么我一定要做消息通信这样的工作,为什么不能在同一台机器上进行,确实有点懵,但是没有被为难;还问了一些别的,但是第一个问题就有点懵,回答的都很含糊;
2 网络编程中select和epoll的区别(网上全都是epoll的有点,但是也要说一些select的优点,存在即合理)
3 Qt和MFC中消息调用的机制(这个感觉我和面试官不在一个频道,但是也根据印象大概说了一些)
编程:
剑指offer中顺时针打印字符串
关键点在于对于边界条件的处理方式,这道题之前做过,但是再次做,而且再不能调试的情况下确实还是比较困难的
一共改了三四次,面试官也是比较急的性子,一看写完了就会找bug,确实还是得稳一点的,我比较慌,所以最后的代码其实还是有问题的
面试官要求自己考虑所有的极端情况,并判断自己的代码是否能正确输出
我考虑的五个测试用例分别为:空,单行,单列,行列相等,行列不相等
至于判断能不能正确输出,当时脑子已经不转了,说的都是能
三面:
1 同样是自我介绍,怼项目;
2 平时看哪些书来进行课外学习;(C++ primer ; STL源码解析,汇编相关的,(脑子绝对是抽了,这些书完全都没看过,导致之后问的都和软件编译有关))
3 软件编译、链接过程 (预处理——编译——汇编——链接)
详细说一下编译过程:词法分析,语法分析,语义分析
4 .o,.so,.dll文件的区别
5 进程间通信方式
6 项目中遇到的问题(主要讲了内存泄漏相关的一些问题);