面试复盘 | 美团 正式批 面试(凉经)

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 面本以为等着收一项就行了,没想到进池子了😭看来还是没排序排过别人,技不如人,还得好好学习。

#面试复盘##美团##面经##后端开发#
全部评论
构造函数那题好像是RVO优化?
2 回复
分享
发布于 2021-11-02 13:52

相关推荐

3 18 评论
分享
牛客网
牛客企业服务