Media.net (Directi) SRE 角色面试经验 | (在校园)
Media.net 来到我们的校园担任站点可靠性工程师角色。选拔过程有 MCQ 轮、套接字编程轮和技术面试轮
成功的关键:需要深入了解计算机网络和操作系统。此外,套接字编程是必须的,而基本的 Linux 命令知识是一个加分项。
面对面技术面试前有两轮。第一个是由 40 个问题组成的 45 分钟在线 MCQ 测试。
在线 MCQ 测试:问题来自操作系统、计算机网络、算法、数据结构、DBMS、通用能力。 54 名学生入围了下一次编程测试。
离线编程测试:第二轮是 3-4 小时的离线套接字编程测试。他们(Directi 人)给出了一个问题,包括 3 个子问题和两个奖励问题。互联网连接被关闭,他们已经设置了自己的虚拟机服务器。提供了一个 URL,其中包含有关问题陈述和常见问题的所有信息。它还包含编程语言的手册,包括 C、C++、 Java、 Python (2/3)、Go 等。对于套接字编程,使用Python总是更好。但是,其他学生也使用 C、C++ 和Java 。随着目标的推进,我们必须编写一个服务器程序并在同一个程序中扩展代码库。
问题:开发一个允许多个群聊的聊天框服务器。每个用户都有自己唯一的用户 ID 和群组 ID,并且可以加入任何群聊。具有相同组 id 的多个用户将被放置在同一个组中。用户可以选择断开连接,然后加入任何其他组。
目标 1 。开发一个回显服务器-客户端程序。客户端向服务器发送一条消息,该消息被回显给同一个客户端。该消息显示在客户端中。 (与 Linux 中的“echo”命令功能相同)。只写服务器程序。无需编写客户端程序。使用“telnet”命令模拟客户端。
我在Python 3 中开发了服务器程序,因为我有从事套接字编程的经验。我已经开发了一个单独的群聊框作为我的副项目。这个项目的经验对我在考试中的表现帮助很大。我使用线程概念来接受连接请求并处理消息中继。一个线程用于接受来自客户端的随机连接请求。其他是为每个客户启动一个新线程。
目标 2 。为由多个客户端组成的多个组开发服务器程序。每个客户都将被询问组 ID,因此将被放置在该组中。如果组不存在,则使用该 ID 创建一个新组。客户端发送的任何消息都将中继到该组中的其他客户端。
目标 3 :跟踪聊天记录。如果有任何新客户端加入某个组,则该客户端应该会收到该组中所有以前的聊天消息。
奖金问题:
- 将消息存储在持久存储中。如果万一服务器关闭并重新启动,服务器应该恢复到以前的状态。
- 始终将消息存储不超过 15 分钟。新客户应该只收到最近 15 分钟内发生的聊天。
在测试期间,Directi 人员根据我们的方法和实施对我们进行了评估。他们还询问了有关如何扩展此聊天框以将其提升到生产级别的问题,例如数据库使用、用于备份的持久存储等。
我能够解决所有三个目标并部分解决了奖金问题。然而,解决了两个问题的学生也被列入了下一轮的候选名单。 7名学生被选中参加面试。服务器链接 - 我作为项目的一部分编写的客户端程序:https://bit.ly/2MFXBdz
F2F 面试:这是一次技术面试,持续了大约 45 分钟。这是我第一次面试,所以我真的很紧张。它从最喜欢的问题开始:“告诉我你自己”。然后根据我的简历询问了项目经验。然后转到网络和操作系统。我有与初创公司合作的经验,事实证明这对向他们解释我的兴趣很有帮助。
在问我的其他问题中,我记得的几个问题如下:
- 您在使用 Linux 系统方面的经验如何。
- 当您在网络浏览器中键入“google.com”时会发生什么。不得不解释DNS查找,IP路由,NAT表。
- 解释将 URL 转换为 IP 地址的整个 DNS 消息交换过程。
- 什么是子网划分?什么是网络 ID?为什么我们使用无类寻址?
- 为什么我们使用私有 IP 和公共 IP 的概念?
- 解释 TCP 和 UDP 并区分两者。为什么 UDP 不可靠而 TCP 可靠,我们在哪里可以使用 UDP?
- 什么是系统调用?
- 当进程在其文本中遇到函数时会发生什么?
- 解释一个过程的 4 个组成部分。 (堆栈、堆、文本、数据)
- 解释加载和链接
第一轮结束后,我被告知我被选中进入第二轮。他们告诉我要做好准备,因为这对我来说将是一场噩梦。但令人惊讶的是,第二轮并没有为我进行(不像我的其他同龄人也必须通过第二轮技术)。此外,没有人力资源回合。
整个过程非常顺利,Directi 的人真的很乐于助人,也很鼓舞人心。
最终3名学生获得了这份工作。
我就是其中之一! 🙂