能拿到这个offer,运气占了不少比例,感谢一路上帮助过我的朋友和同学。面试的战线拉得比较长,在此简单记录一下。
面试部门:蚂蚁金服——人工智能
面试岗位:C/C++研发工程师
共计5轮面试,其中前面4轮技术面,最后一面为HR面
一面:2017-04-05,40分钟电面
1.自我介绍,项目相关
2.项目里面说到有开发过驱动,那么比如读写一个文件,在用户态调用系统的接口函数,如read和write函数,直至操作到磁盘上,是怎样的一个流程
3.驱动里面有没有用到过内存分配,使用哪些函数(这题应该是问,用户态调用malloc这类函数,操作系统内部是怎么分配内存的)
4.伙伴系统相关
5.操作系统是如何对内存进行管理
6.说说内存碎片
7.STL里的map如何实现
8.谈谈红黑树
9.谈谈冒泡和归并算法
10.谈谈对快速排序算法的实现,你是如何理解这个算法
总结:面试官比较nice,聊起来比较放松。问题偏向于底层,跟系统关系很大,对于操作系统这块的学习和理解还需要加强!而且问题也比较深入,会根据你的回答,进行更进一步的追问、拓展。C++基础问的不多(这可能是因为面试官侧重于Java),数据结构与算法中比较经典的还是容易作为考点,一定要深入理解,最好还能形成一定的自己的想法。
二面:2017-04-10 25分钟电面+20分钟在线编程
1.说说在硕士期间主要做了哪些事情,实验室主要研究方向;谈谈做过的项目(主要是自己负责的部分)
2.操作系统核心主要分为哪几个部分?
3.操作系统的内核主要承担怎样的工作?
4.你们的项目(状态监测系统),如果一个进程或者脚本运行出错,有没有什么措施避免系统出错?
5.操作系统内核中,常常以模块的形式进行加载和卸载(比如驱动),这样做有什么好处?
6.操作系统如何确定安全的卸载了模块?
这题刚开始不理解,扯了半天(模块加载之后就是在系统里面,使用时先open、再read/write、不用时close即可;要想卸载驱动,直接卸载即可);面试官提醒:引用计数。反应过来理解错题意了,借用OS的文件系统是如何管理打开的文件进行回答(系统的文件打开表,保存引用计数,多个进程或线程同时使用文件或设备时,引用计数相应的增加,当最后一个进程关闭文件时,OS才真正的把引用计数清0,关闭文件)。
7.你们的项目中,前端以及服务器使用了什么技术?
由于本人没有负责这一块,回答说不太了解。
在线编程部分:
1).二叉树的DFS和BFS遍历
2).给定一个有序数组A[],以及待查值target,查找数组A[]中是否存在target。存在,返回其下标;不存在,返回应该插入的下标(保持数组仍然有序);分析所写算法的复杂度。
三面:2017-04-17 20分钟电面
1.自我介绍
2.C++中,你觉得哪些关键字比较有意思
一时不知道怎么回答,说了C++中增加的bool关键字。然后面试官追问为什么C++中增加了这个关键字。
3.宏定义#define与const常量有什么区别
4.在GDB等调试过程中,宏和常量有什么区别
5.static关键字有什么作用
6.三个连续的整数,比如a,a+1,a+2,相乘之后能否整除6,即a*(a+1)*(a+2)能否整除6
7.计算机硬件中,32bit与64bit的机器有什么区别
8.在32bit系统中,整形变量所能表示的最大值是多少
9.如何计算出一个整数的二进制表示中,有多少个bit的值等于1
四面:2017-04-18 25分钟电面+20分钟在线编程
1.首先还是自我介绍
2.详细介绍了项目,以及在项目中做了哪些工作
3.Linux下,如何创建一个进程
回答在程序中,可以调用fork()创建子进程。
4.承上,fork()函数的返回值是怎样
父进程返回子进程的pid,子进程返回0。
5.承上,假如父进程返回0,子进程返回自己的pid能行吗?当前系统为什么不这样设计,而是父返回子pid,子返回0?
回答了父进程返回子进程的pid,主要原因在于父进程往往需要知道子进程的运行状态以及结果。比如父进程可以调用wait(),捕捉子进程的返回信息,因此需要知道子进程的pid。
6.linux下,程序的内存布局是分段的,大概是如何分布?
32位系统,进程独立拥有4G虚拟内存空间,1G用于内核,余下3G按照栈、MAP、堆、BSS、DATA、TEXT分布;64位系统,拥有256G空间,内核128G,用户128G,布局类似。
7.看你简历里面写了解典型网络模型,简单说说有哪些
8.TCP的四次握手关闭链接过程
9.TIME_WAIT状态的作用与意义
10.简单说说TCP客户端/服务器开发时,用到的系统调用函数
11.select()系统调用有什么作用
12.STL下sort()的内部实现,stable_sort()内部实现,nth_element()内部实现,lower_bound()内部实现。
在线编程部分:
1).给定一个字符串,比如" abc cba ",要求去掉首尾的前导0,即把字符串处理成"abc cba",返回处理后的字符串。
HR面:2017-04-27 20分钟电面
在此首先给出一个建议:不要轻视HR面试。很多同学(自己也是),特别是技术岗位的,往往会认为HR面试没有什么好准备的,就聊天嘛。其实不是的,一些比较常见,比较经典的问题,如果有提前准备、组织语言的话,总归好过临时回答时的磕磕绊绊。还有就是一定要针对面试的公司,提前做一番全面的了解,这会是个加分项。其他的在此就不再赘述了。