下面的面经,只有点评:
后面的内容是我加上的,其余内容都是投稿的小伙伴原内容。
也欢迎今年实习、春招、秋招各个小伙伴积极投稿,帮助大家一起攻克面试,进入大厂。
一面
(一面30min)
C/C++
-
const、static 说一下区别和特点;
-
智能指针都用过哪些,聊一下;
-
C++ 内存管理有那几个区,分别说下特点;
-
聊一下对内存泄漏的看法,如何避免
-
inline 关键词了解不?和宏定义有什么区别
数据结构
-
二叉树的三种遍历方式(先序、中序、后序);
计算机网络
-
OSI七层协议和五层协议是哪几层?分别有哪些协议协议?
-
http 和 https区别?
-
三次握手、四次挥手;为什么要三次握手、四次挥手?
-
TCP是如何保持可靠性的?
Linux
-
聊聊几种 I/O模型。
对
epoll
了解不?聊聊epoll
/poll
/select
区别 -
文件权限怎么看
-
线程同步有几种方式
项目
除去实验室项目,我做了个多线程的web服务器,就是游双老师那本《Linux 高性能服务器编程》
-
你的项目是怎么解决高并发问题的?
-
遇到哪些问题,怎么解决的。
「点评:」 这个问题需要写好,基本在面试过程中都会针对你做的项目这么询问
-
问了我一些实验室项目,让我好好准备一下二面会继续问。
二面
二面难度高一点,个人感觉基础知识问的比较难,我觉得大家需要准备好面经八股文,一定不要抱有侥幸心理
C/C++
-
结构体内存对齐聊一下;
-
虚函数表的原理聊一下;
-
深拷贝与浅拷贝;
-
析构函数或者构造函数能定义为虚函数吗?(这个完全不知道,然后告诉了我答案)
-
堆快一点还是栈快一点?(这个之前字节也遇到过)
栈快一点。
因为操作系统会在底层对栈提供支持,会分配专门的寄存器存放栈的地址,栈的入栈出栈操作也十分简单,并且有专门的指令执行,所以栈的效率比较高也比较快。
而堆的操作是由C/C++函数库提供的,在分配堆内存的时候需要一定的算法寻找合适大小的内存。并且获取堆的内容需要「两次访问」,第一次访问指针,第二次根据指针保存的地址访问内存,因此堆比较慢
数据库
(我只会增删改查,问的我都不会)
-
知不知道 mysql、redis;
我说不是很懂,后面的就没问了。
「点评」:自己要是不懂数据库,就说不是很懂,面试官不会为难你的,他既然捞了你的简历,肯定是觉得你和他们团队有契合的地方。切记不要强行说自己了解。
计算机网络
-
路由器在哪一层?
-
TCP/UDP 聊一下区别和特点 (第二次问了)
-
ipv4、ipv6了解不?
linux没问
项目
-
你的项目为什么用多线程而不是多进程?
-
做过压力测试没有?
webbench
原理是什么?Webbench
实现的核心原理:父进程fork
若干个子进程,每个子进程在用户要求时间或默认的时间内对目标web循环发出实际访问请求,父子进程通过管道进行通信,子进程通过管道写端向父进程传递在若干次请求访问完毕后记录到的总信息,父进程通过管道读端读取子进程发来的相关信息,子进程在时间到后结束,父进程在所有子进程退出后统计并给用户显示最后的测试结果,然后退出。「点评」:做项目尽可能要去压力测试,服务器一般是使用
webbench
进行压力测试,代码也就几百行,建议看看。虽然项目大都是玩具,但是你做了压力测试会显得更加专业。 -
http是如何请求和响应报文的,GET/POST介绍一下;
-
简单说一下 ET/LT、proctor/reactor;
-
研究生实验室做了哪些项目?聊一下(问了很久,这个参考价值不高)