深圳面试,来了之后给了一张试卷,时间半小时。包括一道算法题及扩展以及一页基础题。看题型,应该是多种岗位共享的试题,适合后台开发、驱动开发等岗位,Linux知识居多,也包括一些操作系统,计算机网络和编程语言相关的知识。难度因人而异,有些仅仅知道,有些知识了解背后原理、实现。
题型如下,不分先后:
算法题,要求给出最优解,计算时间复杂度和空间复杂度:
3个有序数组排列
K个有序数组排列,(此题解法是堆排序)
基础题:
操作系统上电启动到运行init进程执行前做了什么?
(1)开机BIOS自检,加载硬盘。
(2)读取MBR,进行MBR引导。
(3)grub引导菜单(Boot Loader)。
(4)加载内核kernel。
(5)启动init进程,依据inittab文件设定运行级别)
- 系统中断机制以及运用
这个简单说下软中断、硬中断、寄存器保存、替换等等。例子包括常见的系统调用socket、read。
- 进程、线程、协程区别以及常见进程IPC方式及其实现原理
进程:操作系统分配资源的基本单位。
线程:操作系统调度的基本单位。
协程:有应用层自己负责调度器实现。优点:调度开销小。
常见IPC:共享内存、套接字、信号量、管道、消息队列。
- c++ 11智能指针内存管理方式和Golang的GC
这个说了引用计数,然后聊到内存分配的两级配置器。GC不了解。
- c++11 智能指针的循环引用怎么解决。
两种方式。1,调用reset主动释放。2. 使用弱引用weak_ptr
- docker和虚拟机区别?
轻量级。docker提供虚拟容器,虚拟机提供整个操作系统。
- TCP的可靠机制?
停止等待、滑动窗口、拥塞控制。接着谈谈拥塞控制四个算法。
- 网页上访问HTTP发生了什么?
DNS、创建网络连接、ARP、三次握手;HTTP协议封装等等顺着顺序说就行了。
- 描述竞态以及死锁并举例
指多个任务单元同时访问同一个资源,就会出现并发,竞态的现象。
- c/c++ 未定义行为是什么样子?举例
此题没搞懂,未定义的行为怎么去定义,不应该是随机的吗?
- 讲讲bootloader和image
知道不多,没有说。
- 讲讲Linux分区和挂载
岗位不同,没说。
- 谈谈Linux文件系统
知道不多,没说。
- 翻译一段英文文章,看了下,内容涉及多线程这一块。
pass。
- 动态规划的三个必要条件。
最优子结构性质。如果问题的最优解所包含的子问题的解也是最优的,我们就称该问题具有最优子结构性质(即满足最优化原理)。最优子结构性质为动态规划算法解决问题提供了重要线索。
无后效性。即子问题的解一旦确定,就不再改变,不受在这之后、包含它的更大的问题的求解决策影响。
子问题重叠性质。子问题重叠性质是指在用递归算法自顶向下对问题进行求解时,每次产生的子问题并不总是新问题,有些子问题会被重复计算多次。动态规划算法正是利用了这种子问题的重叠性质,对每一个子问题只计算一次,然后将其计算结果保存在一个表格中,当再次需要计算已经计算过的子问题时,只是在表格中简单地查看一下结果,从而获得较高的效率。
整体上偏向底层技术,难度中等,有深度,不要求全会,但是会的部分能够搞懂原理最好。
算法题给了个双指针算法,扩展题没想到堆排序。
基础题回答了大部分,涉及驱动部分知识没有讲,也不会。之前准备的redis、mongodb、kafka倒是一点没问,整个面试给人感觉良好,有所得,没有浪费时间。