手撕四道题
1、 奇偶链表 (Leetcode 328)
2、 二叉搜索树找到第K大的节点,不能转存 (中序遍历K次)
3、 接雨水 (Leetcode 42Hard)
4、 rand35()实现rand47() (经典题目了)
面试过程
1、 TCP建立三次握手的过程,为什么初始化序列号要随机取,从0开始会出现什么问题
2、 TCP为什么要有确认号
3、 进程与线程的区别,分配给进程的资源是什么
4、 协程,什么时候用到过,协程与线程的区别,协程什么时候释放CPU
5、 Linux命令 awk,strace,gdb调试相关
6、 虚拟地址和物理地址
二面
手撕四道题
这次手撕是现场面试,在草稿纸上手写
1、 两个链表相加
2、 数组循环移动K位
3、 最长无重复子序列
4、 K个一组反转链表
面试开始
大部分都是网络的问题
1、 TCP三次握手,画图
2、 从局域网访问一个URL的整个过程,NAT技术,DNS,ARP协议等
3、 如果有一个包1M,怎么分片
4、 把TCP的头部写出来看看
5、 TCP相关慢启动,拥塞避免,快重传,快恢复
6、 TCP怎么保证报文的顺序(序列号seq,ack)
7、 TCP中有一个包丢了怎么重发,接收端失序的包放在哪里
8、 IO多路复用怎么实现,服务端怎么处理,写一下整个过程(类似伪代码之类的吧)
9、 介绍一下数据库的两种引擎
10、 Mysql和Myisam使用select * 查询的过程的区别(MyIsam是非聚集索引)
11、 Mysql使用索引查询和不使用索引查询的查询流程,效率差多少(B+树)
三面(GM面)
手撕三道题
1、二叉搜索树
2、回形矩阵
3. 广告位概率问题
笔试给了1.5个小时做,然后做完就开始面试了(进阶都没做出来)
1、 介绍项目,项目中用到了压缩算法,压缩比?使用压缩之后CPU负载是否升高,怎么考虑压缩比和CPU之间的权衡,项目问的多。
2、 打算今后从事哪种类型的工作
三面聊天多一点
四面(GM面)
1、 浏览器输入URL之后的所有过程,客户端怎么处理,服务端怎么处理
2、 服务端怎么解析http请求
3、 服务端在处理http请求的时候会有什么问题,怎么解决
4、 服务端怎么同时处理多个请求
5、 为了进一步提高并发量,客户端可以怎么做,服务端可以怎么做
6、 为了保证通信之间的安全要怎么做(https)
7、 https的TLS握手过程
8、 https会不会出现中间人攻击
9、 如果目标服务器被代理服务器劫持会怎么样
10、 为了加速磁盘的存取速度,一般会使用缓存,缓存要使用什么数据结构才能保证效率最高(LRU)
11、 LRU怎么实现的,要用什么数据结构
12、 将一个文件从内存中写入磁盘,设计一种数据结构来加速这个过程(应该是LSM树)
13、 数据库的索引如何加速查询过程,为什么不用红黑树
14、 给微信朋友圈设计一个表的结构来存储,怎么查询某一条朋友圈
15、 面向过程和面向对象各自的优缺点
16、 你自己最常用的面向对象的哪个特性,面向对象编程有什么陷阱
17、 负载均衡的算法
18、 线程之间的同步方式,自旋锁和可重入锁的区别,什么时候使用
19、 你的能力体现在哪些方面