自我介绍
select、poll、epoll?
epoll的两种触发模式?
TCP三次握手过程,有什么状态,状态机如何变化?
TCP握手的目的有哪些?
什么是 TIME_WAIT 状态,为什么需要 TIME_WAIT 状态?时间是多久,为什么?
TCP 和 UDP 的区别?
TCP 拥塞控制?慢启动的时候窗口在什么情况下会增长?为什么会呈指数增长?
Linux 中一个进程的虚拟内存分布长什么样?内核空间+用户空间(6 种不同的内存段)。
为什么要用虚拟内存?
虚拟地址映射为物理地址的过程?
进程和线程的区别?哪些资源是线程共享的,哪些是线程独占的?
使用线程有哪些好处?
使用线程有哪些坏处?
进程有哪些同步的机制?
协程的实现原理?无栈协程和有栈协程?独立栈和共享栈?
什么是稳定排序?
聊项目,难点,怎么解决?
手撕:数组循环右移。将一个长度为 n 的数组,循环右移 k 位,要求时间复杂度为 O(n) 空间复杂度为 O(1) 。
思路:三次reverse,reverse 前 k 位,reverse 后 n - k 位,reverse 整个数组
小插曲: 一开始使用的是 库中的 reverse 函数,写完后面试官要求自己实现这个 reverse。由于当时时间不多了又加上紧张,写完后答案一直有错,也没找到错在哪。面试结束之后,没有马上退出会议,想把这个错找出来。结果过了两分钟,面试官又回来了,说是下一个面试的还没到,就回来看看我。然后在他眼下把代码改对了。也算是有惊无险吧。
自我介绍
进程有哪些状态?
进程的调度算法?
进程间的通信方式?
进程上下文切换做了哪些事?流程是怎么样的?
进程在哪些场景会进行上下文切换?
上下文切换为什么资源消耗会比较高?消耗在什么地方?
虚拟内存、栈、全局变量等用户空间的资源,还包括了内核堆栈、寄存器等内核空间的资源。
上面哪个资源的切换效率更低?
为什么虚拟内存的切换效率更低?
因为切换后 TLB 无法被命中
常见的排序算法?
堆排序原理?
归并排序原理?
LRU缓存?为什么要链表?为什么要用哈希表?为什么要用双向链表?既然哈希表中已经存了 key,为什么链表中还要存 key 和 val 呢,只存 val 不就行吗?
linux 命令,如何查看主机 CPU 核数?如何查看内存还剩多少?
如何查看哪个进程正在监听 80 端口?
netstat -n 是什么意思?-a 是什么意思?-p 是什么意思?
TCP 为什么要三次握手和四次挥手?
为什么 TCP 第二次握手的 SYN 和 ACK 要合并成一次?
SYN Flood 的原理?有哪些防范的方法?
上面三个问题问了十多分钟。看起来简单,但面试官会顺着你的思路一直往下问,问得特别深,差点给问崩了。
下面问了几个 C++ 的问题。字节不是用 go 吗?
智能指针有哪些?主要解决什么问题?
指针和引用的区别?为什么要引入引用?好处有哪些?
重写和重载的区别?
手撕:二叉树的最近公共祖先(最后只剩十分钟,要求十分钟之内写出来)。
自我介绍
聊项目
问了一会儿八股,具体问题忘了。
如果你设计一个视频网站,所有用户都可以上传自己的视频,也可以观看别人的视频。你作为后端要怎么设计?用户目录怎么设计?
这个问题聊了20分钟。因为没做过相关的东西,感觉答得一般。刚开始答了很多个方面,感觉面试官都不太满意。但是面试官会一直引导你回答。最后反问的时候面试官也说这个问题没有固定的答案,这个问题涉及的方面非常多,从接入到怎么去存储以及怎么去实现一些具体的逻辑功能,这些方面很难一下子就能想出一个很全面方案。问这个问题主要还是想看看我的一个思考的过程。
自我介绍
家在哪?
为什么选择这个专业?
有没有校外实习的经历?
研究生期间的成绩?
参加过什么计算机相关的比赛?在团队中担任什么角色?
为什么选择我们这个部门?
对我们的部门有没有什么了解?
大概说了一下,然后 HR 给我介绍了一下这个部门。
想去什么城市?
有没有考公的想法?
职业规划是怎么样的?
有没有在面其他的公司?BAT 都有投吗?
能不能提前来实习?
反问:后续流程是什么?
内部讨论后,过几天会给答复。如果没过就等其他的部门来捞,过了的话会先发意向书,十月份左右谈薪资。有可能还有加面的情况(忘记问这个加面是好还是不好了,网上有的说会刷人,有的说是看看你能不能拿更高的等级)。