面试复盘 | 美团 正式批 面试(凉经)
9 月 30 日收到了美团的感谢信,本以为挺稳得竟然挂掉了......整个儿流程也是挺墨迹的,8 月 底面完 HR 面还让我等发意向书呢,谁曾想就进了池子。我投递的上海的后端开发岗位,没有指定特定的意向群。
虽然挂掉了,还是记录下来面试中的要点和大家一下交流讨论吧~
一面(60mins)
自我介绍
- 个人基本情况;
项目介绍
-
介绍一下项目的整体情况;采用的架构;有什么特点;
-
epoll 和 select 的区别?epoll 的使用流程?
区别从结构、功能、效率和可移植性方面进行了回答,使用流程主要是结合项目来回答一个客户端的连接请求→请求网页→得到响应这个过程中 epoll 是怎么操作的,具体问到了代码层面的 epoll 函数的使用。
-
同步 IO 与异步 IO 的区别?
-
网络线程和工作线程如何传递消息?
分别通过信号量(条件变量)和管道进行通信。面试官顺便问了进程的其他的通信方式有哪些。
-
共享内存、缓冲区(消息队列)、信号量在项目中都应用在哪些地方?怎么实现的?
操作系统 & C++
string* v1, v2;
-
v1、v2 分别是什么类型?
v1 是 string 类型的指针,v2 是 string 类型变量;
class A; A getA() { return A(); } void func(A a) { a.xxx(); } int main() { func(getA()); return 0; }
-
在上面代码中,classA 的构造函数被执行了几次?
这个问题当时比较纠结,好像回答了2次,面试官让我实现一下并测试一下结果,测出来的结果是 1 次,面试官问我怎么得到三次的结论的?回答是 getA 函数会创建一个临时对象调用一次,返回给 main 里面作为 func 的参数会创建临时对象调用一次。面试官又问为什么你测试结果为 1 次 呢?我回答的是在 func 传递参数是调用了拷贝构造函数,没有把它算进去....这个回答面试官也没有说对不对,有点迷惑,有明白的朋友欢迎指教。
-
C++ 的内存模型是怎么样的?
C++ 将内存分为了栈区、堆区、全局/静态区、常量区和代码区。分别介绍了各个分区的功能。
-
操作系统是如何管理内存的?
回答了虚拟内存的原理,面试官追问在 C++ 中动态地申请内存会经过哪些过程,涉及到哪些系统调用?
答:
从操作系统层面上看,malloc 是通过两个系统调用来实现的:brk和mmap
- brk是将进程数据段 (.data) 的最高地址指针向高处移动,这一步可以扩大进程在运行时的堆大小;
- mmap是在进程的虚拟地址空间中寻找一块空闲的虚拟内存,这一步可以获得一块可以操作的堆内存。
通常,分配的内存小于 128k 时,使用brk调用来申请内存,大于 128k 时就使用mmap来申请内存;进程先通过这两个系统调用获得相应的虚拟地址,但还没有映射到物理内存,当访问这些虚拟地址的时候,通过缺页中断,让内核分配相应的物理内存,这样内存分配才算完成。
数据结构
-
数组、链表、哈希表、树分别介绍一下原理、优缺点和使用场景;
-
单向链表与双向链表的区别?分别有哪些应用?
这里回答时结合 STL 进行的回答,面试官又问 STL deque 的底层实现....
-
哈希表如何解决冲突?
拉链法、开链法,再哈希法等;
手撕代码
LeetCode 复原 IP 地址
二面(75mins)
自我介绍
项目介绍
-
研究生阶段做过什么项目没有?介绍一下?
用了 20 mins 对研究课题进行了详细的介绍,期间面试官也提了结果相关的问题;不过都回答的不错,毕竟天天搞这个哈哈哈😁
-
研究生主要在做算法,为什么工作在找开发岗位?
从兴趣和个人喜欢的工作类型方面阐述了自己的想法和考虑。
-
C++ 项目相关问题提问:
-
同步 IO 、异步 IO、阻塞 IO 和非阻塞 IO 的区别是什么?
-
多个线程之间如何同步?
-
共享内存是怎么实现的?
-
epoll 相关函数调用参数的含义?
这个一面就问过了,还好面完一面又回顾了一下....
-
你的服务器中关于建立连接过程都涉及了哪些系统调用?
可以参考下图:
-
eopll_wait 函数中的 timeout 参数是什么作用?
-
调用 epoll_wait 时,如果客服端请求关闭连接,服务端会返回什么事件?
-
服务端如何区分客户端是请求关闭连接还是普通请求?
-
操作系统
- 操作系统是怎么管理内存的?
- 虚拟内存是什么?怎么建立与物理内存之间的映射的?
- 你使用过哪些内存相关的系统调用?
计算机网络
-
TCP 半连接队列了解吗?
服务器第一次收到客户端的 SYN 之后,就会处于 SYN_RCVD 状态,此时双方还没有完全建立连接,服务器会把此种状态下请求连接放在一个队列里,把这种队列称之为半连接队列。
-
HTTP/1.0、HTTP/1.1 和 HTTP2 有哪些区别?
这里贴一下整理的相关的知识点:
HR 面(40mins)
- 自我介绍
- 你觉得自己的优势是什么?
- 你对美团的印象是什么?
- 现在手里有哪些 Offer ?如果美团面试通过了话,你会怎么选择?
- 你平时是怎么学习的?
- 你对未来的职业规划是什么?
总结
面试的难度感觉还可以,问的大多数都是项目中相关的问题,而且一面和二面有好多问题重复了,感觉二面的面试官没有看一面记录。面完 HR 面本以为等着收一项就行了,没想到进池子了😭看来还是没排序排过别人,技不如人,还得好好学习。
#面试复盘##美团##面经##后端开发#