SRE Daily Internship First Round

·interview-experiences
#shopee

虾皮-运维日常实习一面面经

问题

  • 面试官自我介绍,我再自我介绍

多方面立体拷打项目

  • 简单介绍一下你的 DDD 六边形和微服务架构的 IM 项目

  • 介绍一下你从 MVC 转型到 DDD 的构思

  • 你在做架构转型时遇到的最麻烦的一个点是什么,有没有遇到比较典型的一些困难

  • 微服务你分了哪几块呢?

  • 你在构建文件处理服务时有没有做一些优化呢?比方说对存储的一些交互

  • 你提到的这个缓存我比较好奇,比如用户上传一个文件,在数据库里有这样的一个文件的信息记录,文件被上传或被下载实际对应的请求是到后端的存储对吧,这个存储你用的是什么类型的?比如说你去申请云厂商,会让你选存储的类型,有没有关注选的是哪一种类型的存储呢?

  • 那你用的是什么协议呢,和文件上传下载相关的一些协议,或者你是用的哪个 sdk 去和文件系统做的交互?(答了 aws,面试官提示说是 s3)

  • 能讲一下音视频服务用到的协议的一些概念吗?就 WebRTC 这一块的概念,以及你在做这个项目里面会遇到一些什么问题

  • 你说有一个专门用作用户管理的微服务,就是用户信息和鉴权,那首先一点,你用的鉴权方式是什么呢?然后和前端那块是怎么交互的?

  • 你刚刚提到了用 jwt 的 token 去做整个系统的鉴权,一个是 auth token,一个是 refresh token,那你是如何去验证这个 token 的有效性的?第二个点是,如果前端发送的请求带的是一个有效的 refresh token,那你是怎样继续去后面的逻辑,让这个请求可以完整的去返回给前端呢?

  • 网关这一块你主要是涉及到哪一些开发?

  • 网关的逻辑是你自己写的吗,还是说延续了之前的

  • 对于 HTTP 请求,这个网关是怎样的逻辑去转发给后端不同的服务的?比方说用户验证,或者说刚刚提到的音视频请求,你是怎样分发给这些服务的,你微服务之间是怎样去做协调的?

  • 它的网络连接是怎么走的?比如现在有一个请求进来,到网关之后被认为请求是有效的,你会将相应的一个 message 发到消息队列中对吧,所有的微服务都在监听着这一个事件中心,或者说是 eventbus,比方说我是属于一个音频服务,我现在需要返回我的服务给前端,它后续的逻辑是怎么走的?完整的请求链是怎么实现的?

  • 你在这个后端游戏 server 项目中是在哪些场景下引入的 goroutine 和 channel ?

  • 那你是怎么保证请求的时序性的?

  • 你写的用 redis 来缓存热门游戏数据,这一块系统主要是做了什么,涉及了哪些逻辑?

又拷打了一些八股

  • 我看你很多项目都用到了 gRPC,可以说一下 gRPC 是一个什么样的协议吗?为什么会产生这样一个协议出来?

  • 那 gRPC 相对于 RESTful 那种的接口设计有什么优势吗?

  • 你刚刚提到了 RESTful 状态的问题,那你在用 gRPC 和其他的组件其他的服务做协调的时候,其中有可能会遇到有什么样的错误?或者你们在用 gRPC 来做组件的联调的时候会跟 RESTful 有什么不同吗,有没有相关的感受?

  • 其实我看你的简历是更偏向于开发一些,Linux 这块有了解吗?你在平时开发或者实习的时候有接触 Linux 系统吗?(面试官解释了一下 SRE 的工作面比较广)

  • 你在做一些系统排查时最常用到的指令是什么?

  • 那我问一下一些简单的系统层面的知识吧,可以简单说一下 docker 的网络模式会有哪一些吗?

  • 对于 Linux 系统,进程间的通信方式是什么?

  • redis 常用的数据结构有哪些?

  • ZSET 和 SET 的区别是什么?

  • 你刚刚有提到 goroutine,解释一下进程、线程和协程?为什么协程会出现,它的应用场景是什么?

  • 那为什么会引入到协程呢?它是为了解决什么样的问题呢?

  • 那你在哪一些场景下会更倾向于使用协程?除了所谓的 context 切换,因为这个问题在进程线程里都有,那你拿到一个任务,在什么场景下你会更愿意用协程来解决这个任务?(答了小任务,举例查表,面试官提醒说这个查表的过程其实就是一个 I/O 的过程)

  • Kafka 这块你是有一定的接触的是吗?(我回答时往日志监控告警上面稍微引了一下)

  • 有了解过线程安全吗?能不能讲一下你在写代码时遇到过的一些问题,或者你先简单解释一下什么是线程安全

最后是一道算法题,手撕 LRU

  • 实现 LRU 缓存管理,力扣原题:146. LRU 缓存(可能是因为我简历上有个分布式缓存小轮子项目,前面也没特别问,所以出这道题)

反思总结

这场是 9.5 面的,持续了一个小时,结束时面试官告诉我说结果应该下周内会出,但现在周三了深信服和虾皮还是一点动静都没有,感觉可能已经凉了啊啊啊

整体下来虽然强度挺大,但面试体验还是挺好的,我是第一次遇到面试官上来先开摄像头自我介绍名字和部门业务什么的,中间回答的时候也会给很多反馈,最后结束了还主动说感谢我的时间,虽然是套话但确实让人挺舒服的

但我感觉自己这场答得并不好啊啊啊,无论是面对项目的深挖还是八股的回答都不太熟练,而且挺多东西我是有被问懵的,虽然我上来就跟面试官说了自己是做后端的所以只问了后端的问题,但感觉跟面开发岗没有太大区别,是面试官介绍业务时才知道他们 SRE 是更像那种全栈的,有开发工作也有一些偏底层的东西,这是我第一次面运维岗,只稍微突击了一下 Linux 的基础,虽然指令也没答好

而且 LRU 没撕出来啊啊啊,我是 hot100 还没刷完就去面了,结果 hot100 里面刚好就有这题,感觉这种基础题写不出来还是挺扣分的,很大程度上决定了是否有二面(或许吧

所以因为感觉自己的准备还是不够充分,决定再突击一两周吧,面试也是应试嘛,算法没有天赋的话就只好靠后天的训练啦,我的天赋是在跟人打交道,就是一些综合一点或者泛泛的问题也能答上来,不至于卡住,所以重点还是放在提升技术硬实力上

btw,腾讯把我鸽🕊了,本来是 9.9 要面 IEG 的游戏安全的后台开发岗,刚好也再沉淀一下吧

虾皮给的真的挺多的,从面试问的问题、流程和时长也能感受到其实是大厂水平了,本来一开始我投的是后端,但一个 hr 说后端竞争太激烈问我要不要试试前端,另一个 hr 问我要不要试试运维,于是拿着半年前写的全栈简历投了前端然后发了笔试邀请,但现在前端的东西我几乎忘完了所以就拒了笔试,运维岗不知道为什么没有笔试就直接约一面了,正常流程 hr 说是两轮技术面一轮 hr 面(但虾皮也是同一时间只能投一个岗,所以是拒完才约面的)

能进外企的话就不进国内那些大厂了

继续加油~