一、自我介绍
二、了解C++的STL吗?
1.vector的底层是如何实现的?
(√)
2.vector初始默认申请多大的内存?
(不知道。)
3.map的底层是如何实现的?
(√)
4.红黑树是什么样的数据结构?
(√)
5.list的底层是如何实现的?
(答是双向链表,应该√)
6.为什么要用双向链表,单向不可以吗?
(没说出来原因TAT)
三、实习相关
1.先是问了实习项目相关的,因为是面试官没接触过的领域于是滔滔不绝,反正说错了他应该也听不出来。
2.那你对redis和mysql有了解吗?
(只是用过图形界面,没有系统学习过。)
3.你有涉及到多线程通信的问题吗?怎么保证线程安全的?
(支支吾吾只能说出来用了锁,怎么用的,不知道面试官想问哪方面的知识)
四、你了解TCP协议吗?
1.三次握手是什么样的原理?
(√)
2.为什么是3次,不能是2次和4次吗?
(不能是2次答上来了,不能是4次不知道为啥。)
3.断开连接的时候为什么必须4次而不是3次?
(√)
五、了解HTTP协议吗?说一下你对HTTP的理解。
没具体提问,只让我说理解,于是开始吟唱。讲了HTTP的报头、讲了HTTP1/1.1/2.0/3.0,QUIC、GET/POST。
面试官问我你是对HTTP研究很多吗?
我说就是学一点连这一点就学了这么多了。
问:为什么学http不学mysql和redis啊?
答:看面经问这个比较多;回学校的时间太短了,想先把简单的解决了。
六、手撕一个非递归的快排
以为自己十拿九稳,结果差点没想起来怎么写,写了12分钟。最后还有一些瑕疵,但是以为没法编译,所以面试官大概看了一下思路对就下一步了。但是回来复盘的时候发现一个大问题:面试官要求非递归,我写成递归的了。但是面试官也没说什么,估计他自己也忘了自己的要求了。
七、熟悉linux操作系统吗?常见命令熟吗?
1.怎么查看某个文件中有没有某个字符串?
(不知道)
2.查找某个文件夹中有没有某个文件?
(不知道*2)
3.如何查看某个端口有没有被占用?
(不知道*3)
4.了解过管道吗?管道如何实现的?
(不知道*4)
5.查找某个进程在哪个目录下面?
(不知道*5,linux命令全军覆没)
八、智力题
某一个二维平面上分散很多个点,判断这些点连在一起是不是一个凸多边形。
我说了两个办法,一个是遍历临近的五个点(3个角),查看它们的锐角在不在同一方向。第二个办法是遍历每个角,去掉他们让他们左右的点连起来,对比这个角是变大了还是变小了。
面试官评价这两个办法都不可行,首先如何相连如何遍历就无法简单的解决。
九、反问
1.部门是做什么的?
记得一些关键词:Hadoop、分布式、数据库……
追问:所以mysql和redis比较重要?
答:那倒不是因为这个,只要是后台mysql和redis都重要。如果针对我们部门的话大数据、分布式比较重要。
2.如果我想能胜任这个职位的话,应该往哪个方向学?
(1)linux的命令要熟,这是基本能力,至少要有独立写shell脚本的能力。
(2)MySql和redis还是很需要了解的。
十、总结
面试官人很好、很温柔、感觉很尊重人,五星好评。感觉整体问的全面而浅,并没有很深挖的问题(估计也是看出来了我没有几斤几两)。这是我一年以来第一次面试,也是第一次正常的面试(去年的那几次面试都因为啥也不会所以纯是浪费时间),可以说很大的缓解了我的面试焦虑吧,也暴露了很多问题。虽然感觉应该没有二面了,但是很高兴参加了这次面试。
#面经##腾讯##后台开发##C++##后端#