恭喜发现宝藏!微信搜索公众号【TechGuide】回复公司名,关注更多新鲜好文和互联网大厂的笔经面经。
作者@TechGuide【全网同名】
点赞再看,养成习惯,您动动手指对原创作者意义非凡🤝
-
redis的zset是怎么实现的?(哈希表+跳表),跳表的节点有什么内容?跳表的查询过程是什么样的?复杂度是多少?redis的跳表是双向的,这样设计是为什么?
-
redis怎么设置过期的?(答给每个数据添加一个属性,过期时间,到了过期时间就删除,猜的)。怎么检查?(周期检查,惰性检查)。
-
redis是单线程的,为什么这么设计呢?(基于内存,瓶颈不在cpu, 加锁反而会带来性能损失)。 单线程一定比多线程好吗?为什么新版本的redis还要变成多线程的?(答 读多写少的时候,加共享锁多线程性能更好), 那不考虑这种场景,读写差不多的情况下呢?
-
锁在内核中是怎么实现的呢?(瞎说了个锁总线)
-
多线程竞争一把锁,会不会出现一个线程永远抢不到锁的情况?这种问题该怎么解决?(答的是 等待久的优先级提升)
-
讲一下什么是非阻塞socket
-
阻塞,非阻塞,同步和异步之间是什么关系?(答了一大堆)
-
讲一下epoll,它在内核中是怎么实现的?(红黑树)
-
为什么是红黑树呢?(查询效率吧)
-
我们知道红黑树是一个有序的,那epoll树是依靠什么排序的呢?(不知道)
-
客户端多个线程发送请求,在读取响应结果时,怎么和每一个请求线程对应呢?(瞎说了个消息和tid绑定)
-
tcp和ip层的关系?(ip层只负责主机与主机之间的通信,tcp需要绑定端口实现进程间的通信。tcp是可靠传输的,ip只能尽力交付)
-
那就仅考虑主机与主机之间的通信?没有可靠保证,是不是就会有大量丢包呢?整个网络的可靠性全部由传输层来保证吗?(答,可靠这个概念不仅仅是包是都按序全部到达,每一层都有自己的差错控制机制)
-
怎么理解你说的差错控制这个概念呢?(主要是校验,保证接受到的包和发送的包的数据是一致的)
-
算法题
a. 给你一堆坐标,求这一堆数据中两两之间的曼哈顿距离之和,曼哈顿距离定义为 |x_i - x_j| + |y_i - y_j|, 要求时间复杂度小于n^2 (写出来了)
b. leecode 863 二叉树中所有距离为 K 的结点(没写出来)