#Timeline
- 5.30 Submit
- 6.10 Coding Test
- 6.17 Technical Interview 1
- 6.21 Technical Interview 2
- 6.26 Technical Interview 3
#Comprehensive Evaluation
有阅读理解题,有图像规律题,有编程题
- 字符串中最长回文数,给的参数是char*不是string
- 优化选择排序(每次选最大的和最小的放到两边,而不是只选一个)
#Technical Interview 1
全程八分钟。无反问。
#Question
- 自我介绍一下自己(面试官不介绍自己)
- 简单介绍一下项目
- 有做项目的优化吗
- 主要的开发语言是什么(我寻思我不是说了吗,你在记什么玩意)
- 还会哪些开发语言
- 浏览器输入域名的涉及的网络协议
- 进程间通信的方式
- 如果让你设计一个双十一服务器,前后端你怎么设计
我说前端会用缓存,LocalStorage里,不用反复向服务器请求 后端采用分布式技术,防止单一服务器请求直接打爆 - select和epoll的区别
答了不太熟悉linux底层的网络模型,直接就说面试就到这里?
#Technical Interview 2
照着简历提问,上个人面得太久,还没看我的简历,一点一点读我的简历。45min。
#Question
#计算机网络
- TCP/IP五层模型
- MAC、IP、TCP、UDP、HTTP在哪一层
- 讲讲三次握手和四次挥手
- CPU收到中断取包,怎么把数据从内核缓冲区放到内存中的(有一个单元,很底层)
不会,他说没事,二面主要就是问到你不会为止
#操作系统
- 函数调用过程,涉及到哪些寄存器的保存
参数从右到左入栈,然后用的intel就要保存栈帧到stack中,然后用ebp去访问参数之类的,到最后ret的时候会把栈顶作为返回地址设置到程序计数器eip中 - 金丝雀算法(很巧妙说是)
- 缺页中断是怎么回事
- 为什么要虚拟地址
- 有没有做过什么优化(举例子for循环按行遍历和按列遍历,涉及到cache line)
- 那能不能在流水线层次进行优化
这里我说循环展开,他说也算可以,后面有提到一个吊的东西,但是我忘了 - 存10亿个数能不能在内存中存 可以,bitmap,操作系统项目的内存管理就用的bitmap管理页
- 能不能排序
我说归并,分治它。
他说bitmap直接可以,有方法,解释的很好但我忘了。
#C++
- 讲讲C++动态内存管理
C用malloc和free
C++用new和delete,数组就加个[]
但是这种方式不安全,就出现了智能指针 - C频繁malloc会怎么样
出现内存碎片 - 当内存碎片多起来的时候,怎么办
不会 - 智能指针RAII
用栈对象的生命周期去管理比如堆内存,锁等系统资源。更安全 - 进程间的通信方式
通信方式+例子
#分布式系统
- 分布式系统一致性模型
我说这种感觉就像是很熟悉但是想不起来,他说没关系跟嵌入式关系不大,我看你写了就问问
#项目
- 介绍一下项目
- 怎么实现的全双工
- 粘包问题,我觉得不算什么大问题,就不问了
- 怎么判断的大端小端
int a=1用一个char指针去指他,对char指针解引用,看看是不是1 - 内核载入是怎么做的
堆砌mbr、bootloader,不大懂了 - 自旋锁怎么实现的
用cpu提供的xchg原子交换指令,不断交换key和锁的变量 - 信号量怎么实现的
基于先前实现的信号量,因为有信号数,阻塞队列,需要互斥访问,需要自旋锁支持 - 共享内存怎么做的
内核空间预留页表,映射到用户进程页表3G-4G - 这个共享内存可不可变
不可变,预留好的页表
#Technical Interview 3
没什么好说的,不想跟这种杀软工作。
#Question
- 数组名与指针的区别
- 手写一个回调函数