Shopee虾皮SRE工程师二面面经

tech2026-02-03  2

2号收到的二面通知,4号笔试,虾皮的安排还是挺舒服的。全程一个小时左右,基本上都是照着简历上的问,中间会穿插一些网络、操作系统等基础学科的相关知识。不知道为什么录音没录到我自己的,大概记录一下我回答的重点的内容和不会的知识点。


1. 自我介绍

2. 介绍项目,主要问用了哪些高可用技术,这些高可用技术都是什么原理

这个项目是个网站架构的搭建,前端通过两台主从Nginx做负载均衡,通过Keepalived实现高可用;后端通过NFS共享多台RS的站点目录,使得所有请求得到的响应都一致,数据库部分使用了一主两从同时使用MHA实现高可用方案

这里的高可用技术主要有两个:

Keepalived:这个软件通过VRRP(虚拟路由冗余协议),VRRP通过竞选机制确定主备,主的优先级高于备,工作时主会优先获得所有资源,备节点处于等待状态;在Keepalived服务对之间,只有作为主的服务器会一直发送VRRP广播包,告诉备它还活着,此时备不会抢占主,当主不可用时,即监听不到著发送的广播包时,就会启动相关服务接管资源MHA:MHA是针对MySQL的高可用,MHA Manager通过在各个实例服务器上安装的MHA node,通过SSH协议实时监控各台实例的情况,当监控到主库不可用时,会从从库中选择一台晋升为主库同时将原主库踢出集群中,其他从库重置主从状态监听新主库

3. Keepalived如何判断主服务器工作不正常了,需要转移vip;若服务都是正常的,中间的网络出了问题,这时候会出现什么情况(脑裂)

当备服务器在一段时间内收不到主服务器发来的广播包时,就会判定主服务器宕机,通过预先写好的竞选机制将一台备服务器晋升为主服务器,同时将业务入口的vip转移到这台主服务器上

若是服务本身是正常的,备服务器因网络原因而接收不到主服务器发来的广播包而生成了vip,此时会导致同个局域网内出现两个ip相同的主机,会干扰路由判断

4. 有没有什么办法能避免脑裂;Keepalived软件本身如何抑制脑裂

一开始说的都是一些补救措施、预防措施:保证物理链路的正常使用、不轻易修改防火墙策略、在failover时及时通知技术人员抢救等

面试官补充说是要想办法避免:在进行failover前使用脚本真正去访问服务本身而不是单通过广播包来判断主服务器的状态

5. Nginx负载均衡算法;在普通网站的场景下你更倾向于用哪种

RRWRRIP_HASH一致性哈希LC(忘记讲了)

6. 在网站架构负载较大的情况下,LB使用主备搭建,主服务器单点繁忙,备服务器空转,如何处理

这是刚好有在工作的同学跟我聊了他们的架构,学习到了一些,真是太幸运了

通过ECMP技术(等价路由),路由在选择的时候可以在同时使用多条等价链路,简单的说,就是在LB前在路由层再做一次负载均衡,使得每一台LB都能分配到流量,而不是在服务器正常运行时当一个备胎什么都不干

7. 后端MySQL的高可用有什么不足之处;还了解其他MySQL的高可用方案吗

MHA作为MySQL的高可用方案之一,它的高可用性并不完整,需要管理员参与:

本身没有支持vip,应用只能通过主库ip连接集群如果主库整体宕掉,SSH无法连接,很有可能丢失部分事务没有故障提醒功能,管理员不能及时得到反馈一次性的高可用,在进行一次failover后需要重新配置

Mycat作为分布式方案的中间件也可以做高可用,具体是在同一datahost内的主从节点在主库宕机后从库会自动晋升,当原主库恢复时又会自动重新作为从库加入集群中

8. Mycat作为分库分表中间件有什么弊端;如何解决

跨表连接性能问题:全局表、ER表

9. 项目的用途,自己是否有对这些方案做过验证

项目都是在学习的时候搭建的,对高可用方案都进行了手动宕机测试,对并发量和访问量这些就没进行过压测了

10. 进程和线程;多线程并发执行的时候需要关注哪些点;Linux里有哪些类型的锁

进程是资源分配的最小单位线程是CPU调度的最小单位线程同步问题

11. Linux如何查看进程;如何找出僵尸进程并把它kill掉;pid在哪一列

用ps或top查看进程,用grep筛选出僵尸进程,用awk找出指定列

12. Linux文件权限有几类

读、写、执行

13. 查找当前目录下创建时间大于7天,文件大小大于1G的文件

find . -ctime +7 -size +1G

14. 计组学过吗,字节序是什么,大端小端

计组学的极差,前一秒说学过后一秒什么都不会,丢人

理解字节序 大端字节序和小端字节序

15. OSI七层模型

16. OSPF;链路发生变化的时候OSPF是如何收敛的

17. VLAN学过吗,VLAN有什么作用

VLAN原理详解

18. TCP的三次握手和四次挥手

19. TIME_WAIT出现原因、如何处理

TIME_WAIT这个状态码只会出现在断开连接的主动方上,一般出现过多的场景是高并发短链接,主要回答了将短链接改成长连接让客户端作为连接断开的主动方

20. HTTP协议状态码

21. HTTPS协议相比HTTP多了哪些步骤

多了SSL握手

22. 数据库三范式

23. Redis集群架构如何实现

24. 讲一下几种主流的排序算法

回答了选择、插入、归并和快排

25. 这几种排序算法效率最高的是哪种,为什么快排在乱序的情况下效率最高

顺序情况下插入排序效率最高,时间复杂度为 O ( n ) O(n) O(n)

乱序情况下快排和归并效率比较高,时间复杂度是 O ( n l o g n ) O(nlogn) O(nlogn)

我自己认为是快排在做折半的时候会把两端都划分成相对”有序“的部分,而归并排序需要一直遍历到底,自底向上的排序,耗费更多的内存

快排和归并排序的复杂度相同,为什么都用快排而不用归排?

26. 举个例子证明自己的抗压能力

27. 你对SRE的理解

28. SRE比较幸苦,可能需要值夜班,7×24h stand by响应,为什么没有去选择研发岗位而选择SRE岗位

29. 大学期间写过最长的项目大概有多少行,是一个什么样的项目,自己写的部分大概有多少行


反问环节

1. 你们在公众号写SRE一半的时间在开发,你们觉得SRE和devops之间有什么区别

运维开发会更接近于开发岗位,通常需要开发出一套完整的如CMDB系统来使用;SRE一般处理的都是业务上的,根据我们具体的需求来开发实现各种方案

2. 公司内部培训制度


总结

一面能过其实我也是没想到的,总感觉表现的挺糟糕的也没有发挥出我擅长的知识,很感谢虾皮对我的认可。这次面试中规中矩,基本上覆盖完了校内课程比较重要学科的几个点,主要考察各个方面的基础,我在回答的时候也会尽可能的把除了问题本身将相关的知识也联系起来一并回答,一是个人认为有些知识是相辅相成的,一起回答会更能表现自己的掌握程度;二是真的怕回答的不够多没有可能继续深挖到我不会的点那就不好了哈哈哈哈。计组和OS在课内学习的并不好,以前上课的时候总觉得这东西好像没啥用啊,现在是悔不当初啊!从事这一行还是要把这些基础学科都认认真真的学好

最新回复(0)