深圳面试,来了之后给了一张试卷,时间半小时。包括一道算法题及扩展以及一页基础题。看题型,应该是多种岗位共享的试题,适合后台开发、驱动开发等岗位,Linux知识居多,也包括一些操作系统,计算机网络和编程语言相关的知识。难度因人而异,有些仅仅知道,有些知识了解背后原理、实现。

题型如下,不分先后:

算法题,要求给出最优解,计算时间复杂度和空间复杂度:

1.   3个有序数组排列

2.   K个有序数组排列,(此题解法是堆排序)

基础题:

1. 操作系统上电启动到运行init进程执行前做了什么?

   (1)开机BIOS自检,加载硬盘。
   (2)读取MBR,进行MBR引导。
   (3)grub引导菜单(Boot Loader)。
   (4)加载内核kernel。
     (5)启动init进程,依据inittab文件设定运行级别)

 

2. 系统中断机制以及运用

这个简单说下软中断、硬中断、寄存器保存、替换等等。例子包括常见的系统调用socket、read。

 

3. 进程、线程、协程区别以及常见进程IPC方式及其实现原理

进程:操作系统分配资源的基本单位。

线程:操作系统调度的基本单位。

协程:有应用层自己负责调度器实现。优点:调度开销小。

常见IPC:共享内存、套接字、信号量、管道、消息队列。

 

4. c++ 11智能指针内存管理方式和Golang的GC

这个说了引用计数,然后聊到内存分配的两级配置器。GC不了解。

 

5. c++11 智能指针的循环引用怎么解决。

两种方式。1,调用reset主动释放。2. 使用弱引用weak_ptr

 

6. docker和虚拟机区别?

轻量级。docker提供虚拟容器,虚拟机提供整个操作系统。

 

7. TCP的可靠机制?

停止等待、滑动窗口、拥塞控制。接着谈谈拥塞控制四个算法。

 

8. 网页上访问HTTP发生了什么?

DNS、创建网络连接、ARP、三次握手;HTTP协议封装等等顺着顺序说就行了。

 

9. 描述竞态以及死锁并举例

指多个任务单元同时访问同一个资源,就会出现并发,竞态的现象。

 

10. c/c++ 未定义行为是什么样子?举例

此题没搞懂,未定义的行为怎么去定义,不应该是随机的吗?

 

11. 讲讲bootloader和image

知道不多,没有说。

 

12. 讲讲Linux分区和挂载

岗位不同,没说。

 

13. 谈谈Linux文件系统

知道不多,没说。

 

14. 翻译一段英文文章,看了下,内容涉及多线程这一块。

pass。

15. 动态规划的三个必要条件。

  • 最优子结构性质。如果问题的最优解所包含的子问题的解也是最优的,我们就称该问题具有最优子结构性质(即满足最优化原理)。最优子结构性质为动态规划算法解决问题提供了重要线索。
  • 无后效性。即子问题的解一旦确定,就不再改变,不受在这之后、包含它的更大的问题的求解决策影响。
  • 子问题重叠性质。子问题重叠性质是指在用递归算法自顶向下对问题进行求解时,每次产生的子问题并不总是新问题,有些子问题会被重复计算多次。动态规划算法正是利用了这种子问题的重叠性质,对每一个子问题只计算一次,然后将其计算结果保存在一个表格中,当再次需要计算已经计算过的子问题时,只是在表格中简单地查看一下结果,从而获得较高的效率。

 

整体上偏向底层技术,难度中等,有深度,不要求全会,但是会的部分能够搞懂原理最好。

算法题给了个双指针算法,扩展题没想到堆排序。

基础题回答了大部分,涉及驱动部分知识没有讲,也不会。之前准备的redis、mongodb、kafka倒是一点没问,整个面试给人感觉良好,有所得,没有浪费时间。


=============================================================================================

Linux应用程序、内核、驱动、后台开发交流讨论群(745510310),感兴趣的同学可以加群讨论、交流、资料查找等,前进的道路上,你不是一个人奥^_^。