腾讯光子后端面经
楼主已拿到offer但是没去,主要是我不是做游戏的,被这个部门约面就去了。
一面(面试官人挺好,全程笑呵呵,问的比较随便,也比较少,没有做题,没有什么压力,半小时全程聊天)
技术题只问了一小点:
.动态链接库 放在哪个段(文件映射段)
既然动态链接库是多个进程共享的,那如果dll中有一个全局变量,是共享还是独占(独占,因为进程空间隔离,数据实际上在全局变量段)
.可执行文件的二进制代码是一次全加到内存吗(不是,虚拟内存管理的知识,只加一部分,用到的时候再加载并分配页表数据)
.讲一讲一个请求发到服务器到响应的整个过程(看对网络有多了解,发挥题)
.聊一聊protobuf
.对lua了解吗
二面(压力面,拷打烂了,一个半小时,没有做题)
.知道页表缓存吗(tlb)
.epoll的使用流程(几个关键函数epoll add,wait,非阻塞,循环拿)
.epoll为什么快(红黑树查询+链表返回)
.边缘触发,从代码角度回答怎么使用(关键点:循环读)
.循环读取完,返回结果,错误码要怎么处理(eagain,epipe)
.tcp链接关闭的过程为什么要四次,3次行不行,什么时候会是3次(服务端不需要在第二次和第三次挥手之间再发数据且打开了延迟ack机制),客户端为什么要等待2msl(处理服务端没有收到第四次ack时的重传问题,等待网络中所有有关的历史报文失效干净,这样重启时不会有幽灵)
.rpc技术了解吗,rpc究竟是解决了什么问题,http2有哪些优化,为什么要多路复用,和http1的长链接有什么区别?分帧是怎么分的?
.reactor模型具体是怎么样的结构,有哪几种,redis是其中哪一种结构?
.redis主从模式,相关命令知道哪些吗,如何配置?
.redis 持久化,rdb怎么实现(fork子进程,cow机制),如果rdb过程中父进程修改了一些数据怎么办?继续增量同步,讲一讲增量涉及到过程(循环数组+偏移指针)
.k8s deploy和statefulset区别(存储,调度顺序,网络分配)
.k8s怎么实现灰度更新,怎么切流量(建一个新deploy,service的selector选中新老版本的pod,通过deploy的副本数控制流量比例)
.有用过pod探针吗,启动探针的好处是什么(解决其他探针启动时间设置困难的情况)
.有知道service mesh技术吗(答的istio side car,)东西流量的路由是通过k8s的哪个关键组件搞定的?
.平时学习的主要方式
三面(总监面,有一点压力,一个小时,聊得比较宽,没做题)
.深挖项目
.redis分片集群,怎么知道数据在哪个节点上
如果某个节点走了,需要重新哈希吗
.场景题,设计1000万个题目随机抽题让用户作答,要求每次题目不重复。(核心点是用伪随机表的方法,每次答下一题直接查随机表,o1复杂度)
.如果答题有等级,答的越多越从高难度里抽题怎么做(数据分层)
.英雄联盟这种5v5游戏,服务器设计上你觉得哪些问题需要考虑,比较重要?(不知道,没做过游戏,就说了一下帧同步,状态同步)
.为什么从日本拉一个文件,要比从本地城市慢得多(直接原因是rtt长,发送方确认一个报文变慢。根本原因是tcp的机制导致的,大rtt导致tcp的拥塞控制和流量控制出现缓慢:拥塞控制的过程(八股),拥塞窗口是收到一个ack才增大,所以rtt大会让发送方拥塞窗口增长缓慢。流量控制也是这个原因,因为rtt大,收方的窗口信息更新不及时,回过头来也限制住了发送方的窗口大小。以上几点导致了带宽低,积压多,速度慢。
.开源项目中参加了哪些工作?有多少人?
.hook拦截进程函数,怎么找到某个感兴趣的地址(项目相关,先动态调试od跟断点分析,再ida静态分析,补符号表慢慢看)
.有没有看过架构方面的书(没
.看过哪些原理上的书
.期望城市
.有没有了解过游戏业务(没
.平时在实验室怎么做项目的,拿到一个课题怎么入手
.玩过哪些游戏
.黑神话打到第几关了
#秋招#