1. C语言与C++区别
2. C++三大特性,举例描述一下
3--X.构造拷贝构造移动构造析构虚函数智能指针巴拉巴拉,操作系统,linux,等等
小结:这面问的都是基础,面试官比较好说话,问到数据库我说不会,然后就过了,其它的没啥好记录的,基础知识这里强烈推荐一个大佬的总结:
https://www.nowcoder.com/discuss/55353?type=2&order=0&pos=11&page=7
二面
1. 介绍自己
2. 项目
3. 为什么保持长连接
4. awk知道吗
5. gdb的使用
6. 如何实现高并发的
7. 为什么锁会影响性能
8. 单例模式怎么实现
9. 观察者模式怎么实现
10. 进程通信方式,哪种最快
11. 线程同步方式,互斥量怎么使用
12. 手撕三道题目,AC两道,还一道完全不会
小结:这一面对项目问的比较细,问到了很多细节,并且敏锐的发现了项目的薄弱点,还问了我有没有什么解决薄弱点的思路。这一关,需要同学们对项目有足够了解,并最好要对薄弱点有一两个解决方案的思路。
关于手撕编程题,这个真的要练。面试官让我20分钟写一题,写完描述思路并且运行,按他说的来输入。输入的时候贼紧张,因为没时间调试,代码健壮性只能尽量一次性想好。万幸第一二题AC了。最后一道编程题完全不会做,他主动告诉了我一些思路,但是说完就问我有没有什么问题要问他了。。我以为凉了,但是面试官还是放我进三面了。
手撕代码的能力一定要好好锻炼!!切记!
关于项目,我总结了大概这几个项目常问:
你在项目中做了什么?
你觉得难点在哪里?
为什么这里要这样设计?
有没有考虑xxx意外情况,怎么避免和解决的?
要是yyy会怎么样?
项目迭代是怎么做的?
对薄弱点你有没有想过如何解决?
而且在后台项目中往往会问数据库,本人不会,就不说那个了。
腾讯三面
1. 介绍自己
2. 介绍项目,项目中你做了什么
3. 高并发怎么实现
4. 为什么对一个连接的操作是串行的,这样不会降低效率吗(这里重复质疑了)
5. 什么时候用虚析构函数
6. 父类声明了虚析构函数,子类还要声明吗
7. C++11有哪些优势
8. 几种智能指针介绍下
9. 两个程序分别new了pa, pb,它们的地址可能一样吗
10. 它们地址一样的话会指向同一片内存吗
11. 进程通信方式
12. 哪种最快
13. 为什么共享内存最快(我回答:因为在使用共享内存的时候不需要调用系统调用,不会陷入内核态,没有用户态和内核态之间的切换)
14. 为什么共享内存的访问不会陷入内核态(我回答:因为这是直接对内存访问,只有在创建以及映射共享内存的时候,才会陷入内核态)
15. 为什么创建共享内存会陷入内核态(我回答:因为会调用mmp系统调用进行内存的映射,这里需要在内核态完成)
16. 系统调用一定会陷入内核态吗(我回答:不一定,mutex的实现就是结合了用户态和内核态,然后还煞有其事的好好解释了一番如何通过用户态和内核态结合来实现的。这里其实答错了,因为那不是系统调用)
17. 它是哪个系统调用(这里我答不上来了,就回答了是linux下的mutex相关的调用)
18. 计时任务你怎么做的
19. 程序崩了怎么办
20. 断电了怎么办
21. crontab说一下
小结:全程20分钟结束。对方语速很快,二倍速,态度冷漠,一来就对我项目的高并发性能提出重复质疑,还好我自己写的东西我很熟,就理直气壮回答了。中间有两个问题回答错了,当时估计没了,就在我发了10分钟呆,万念俱灰查看状态的时候,发现居然过了。
所以我认为这是一轮压力面,如果项目的亮点是自己强行加上去的,很容易在这种压力下被问倒。所以,给自己项目强行加亮点的(包括描述的亮点其实根本没用到或者是把别人的东西说成是自己做的)同学,最好多花时间准备,寻思怎么抗住这关。
并且,面试官会根据你回答得内容一直往深了问,比如11到17,所以在回答问题的时候要养成一个习惯,尽量给自己留后路,也就是尽量防止他问深了把你问倒。可以自己在面试前多往深了准备一些知识点,然后在回答问题的时候尽量往那些方向靠,这样会更有机会让他问到你准备的题目,于是你就能表现出你对这方面知识了解的深度了。这里做得好往往能让面试官觉得你很nice。比如这个共享内存,我就准备了mmp系统调用的原理,mmp的应用等等知识点,只是他没问,问到我没准备到的一个坑”系统调用一定会陷入内核态吗“了... ... 但还是引到了mutex实现那里去了,虽然回答错了,但是还是勉强表现了一些知识深度吧=。=
HR面
1. 介绍自己
2. 介绍项目
3. 高并发怎么实现
4. 项目中最大的困难是什么
5. 介绍另一个项目
6. 你觉得在项目中最大的收获是什么
7. (基于我回答的“分析问题和解决问题的能力得到了很大提升”的提问)举例说明你的这些能力体现在哪些地方
8. 导师同意你实习吗
9. 暑假有没有别的安排
小结:hr面,要尽量表达逻辑清晰些,态度“真诚”些,问到8、9这种问题的时候只有一种答案就是导师同意实习,暑期没有别的安排,否则就完蛋了。要知道什么话该说什么话不该说。觉得自己容易紧张或者表述不清的同学,这一环节最好多准备准备,省得最后关头翻车,本人美团就是这么在hr面挂的。泪的教训,切记!
总结:基础知识要打牢,容易问到的深一些的知识比如malloc底层实现,stl内存分配,epoll原理这些,都要掌握,然后再掌握一些深一些的冷门点的但也可能会考的问题,包括mmp调用,线程/进程创建原理,read过程,linux内核里面有什么,物理地址与虚拟地址转换的详细实现步骤等等。这些不是盲目地去瞎准备,可以通过看面经去准备。最重要的是,要刷编程题,要刷编程题,要刷编程题。老话说得好,Talk is cheap, show me the code. 编程题做得差,问答题说出花来都没有用。另外,数据库当然会就更好,但如果你不会,也可以直接放弃,跟面试官说,我不会,您问我些别的吧。因为一门知识从0到1是需要时间的,而我们很缺时间。
全部评论
(8) 回帖