基本情况
我本科和硕士都在清华计算机系,研究生期间研究方向是AI相关,由于对研究方向失去兴趣决定转开发。暑假在某跳动实习,秋招主要投了基础架构方向。
下面是面试时印象比较深刻的问题,做了大致的分类和整理,有不对的地方也欢迎大家指出讨论,希望能给大家带来收获。
数据结构与算法
1.链表分组翻转(注:leetcode)
2. 矩阵的最大子矩阵和(注:leetcode,子矩阵占据的行的情况有n(n-1)/2种,遍历之后用前缀和)
3. 求一个数的平方根(注:leetcode,石头多次强调,可参考《从一道面试题谈谈一线大厂码农应该具备的基本能力》 )
4. 实现nth_element(注:类似于快排,可参考 《STL 源码剖析》)
语言与程序
1.C++的 lambda 表达式是怎么实现的?有什么缺陷和坑?(注:函数对象,悬挂指针和引用)
2.介绍一种GC的方法。(注:例如 Go的三色标记,常见的还有 Java 的)
3.怎样设计一个内存池和内存分配器。malloc 如何申请大内存和小内存。(注:使用大的内存块,根据申请的内存的大小分桶,brk,mmap,之前石头在面试 MS 的时候也遇到过这个题目)
4.介绍程序运行时的内存布局。动态链接库是怎么加载的?动态链接库中的函数是怎样调用的?各种类型的变量是放在什么地方的?(注:.code, .data, .bss、 堆、动态链接库、栈,动态链接器,plt表,got表)
计算机网络
1.TCP的总体过程,time_wait的时间以及为什么。(注:三次握手、四次挥手、状态机、2MSL)
2.简述TCP/IP的每层有哪些协议。(注:TCP/UDP/IP/ICMP/ARP)
3.全连接队列/半连接队列是什么?如何控制他们的大小。(注:通过内核参数和backlog)
4.介绍一下IO多路复用。(注:select/poll/epoll, 红黑树, 数据传输量)
操作系统/体系结构
1.简述物理内存管理(buddy system, slab),以及页表的实现方式。(注:四级页表)
2.CFS基本过程, 包括如何处理新线程和唤醒的线程. 调度的触发时机是什么?(注:时间记账,返回用户态或线程阻塞)
3.文件从打开到读写的过程是什么样的?(注:名字解析, inode, fs, mount point, 文件描述符, buffer/cache)
4.简述信号处理的基本过程。信号处理函数是如何被调用的,调用后如何返回内核。(注:sigmask, 返回用户态时, sigreturn)
小结
最后,再次强调,机会总是留给有准备的人,就看你能不能把握住了。上面的题目,你能了解多少?不清楚的地方,正好抓住机会学习了解一下
验证码登录>
验证码登录>
自动登录 | 忘记密码?
密码登录>
自动登录