讨论/求职面试/腾讯 | C++ | 一二三面面经已 oc | 2021|/
腾讯 | C++ | 一二三面面经已 oc | 2021|

力扣是我很喜欢的平台,代码的输入输出是真的非常喜欢。写下这篇面经,希望能帮到您。

个人情况,双非普本,大三在读。从大二上开始刷题,没怎么看过算法书籍,看过许多优秀的有关算法的博客。大致看过的C++书籍有C++primer、effective C++三部、深度探索C++模型,陈硕老师的Linux多线程服务端编程,游双老师的那本书、C++并发编程、深度理解C++11新特性解析与应用。网络的有TCP/IP卷一的tcp、计算机网络自顶向下的tcp那部分、图解tcp、unp前七章。操作系统:鸟哥的私房菜,apue、操作系统的哲学。数据库:mysql必知必会、sql必知必会。

项目有一个简单的聊天室、muduo网络库、个人网站。还有一个rpc框架,但是后来寻思别写这么高大上的东西,不然被怼就无了,尽管写出来了但是没有放到简历上。

最近打算看看侯捷老师的视频和stl源码剖析、redis和mysql的知识、深入理解计算机系统和程序员的自我修养。(后面这两本书是我在面天美我的二面面试官推荐给我的)

3.3我被捞起来了。是天美工作室,一二面都还可以,和二面面试官还吹了会,本来半个小时面试,聊了1个多小时。二面面试官问我你数据库会啥?我说我会增删改查,面试官成功被我逗笑了就没在问数据库知识。还问我你那么喜欢C++,你写C++哪里写的最爽?我和二面面试官就是这么愉快的探讨问题。我没怎么背过八股文,所以一二面很多知识点都写在别人的面经里我也没注意到,也是刚开始面试,没啥面试经验,但我的面试官竟然放我过了。到了三面就露陷了,就没了,挂完我半小时之后被腾讯云捞了。

正文开始了

一面

自我介绍一下吧

你项目这个聊天室广播消息为什么用tcp,有考虑别的吗?我说udp不怎么写,就知道udp可以用作广播消息

tcp和udp有什么区别呢?我答得是tcp有三次握手、四次挥手、可靠,tcp是字节流的、udp是数据包,字节流是为了防止ip分片。udp尽管不可靠,可以设计服务端和客户端把他变成可靠的

那你说说看你对于重载、多态的理解,我答的有静态多态和动态多态、override这个关键字、子类继承虚函数不要修改默认参数、子类继承父类no-virtual函数会被屏蔽,需要使用using来操作一下、重载编译器内部是如何做的、虚函数指针和虚函数表

我看你这个muduo用了LRU和二叉堆作为定时器,那你可以讲讲吗?我答得是我这是跟libevent的定时器一样,有两种策略,LRU适用于定时时间相同的,二叉堆适用时间不同的,又讲了下LRU内部的实现机制,自己也写了个二叉堆最后还是用的优先级队列

那你能介绍一下muduo库中是线程是如何通信的?进程中要怎么通信?muduo网络库源码懂啦就ok。我们现在还在学操作系统我不太懂进程通信,但我有了解,进程我一般就用套接字,也了解过管道、消息队列、共享内存,但是如果是分布式的系统,不在一台主机都是用的套接字,所以我基本用的都是套接字。

那你聊天室用的是select,muduo用的epoll,他俩有什么区别吗?select他只有1024,可以修改,不过没有必要因为poll就是他的升级版,他轮询的复杂度是O(N),epoll是红黑树,他的时间复杂度是O(1)。我看过其他博客有介绍在少量且都活跃的连接时候,select可能比epoll更好,但是我没做过实验。

那你在实习期间都干嘛了呀?改bug,这个bug不难,上来读源码就比较难,我就会有打断点的方式来看程序如何执行的。你们公司用的什么编译器,我说vs10。那你在linux用过调试吗?用过用过,我用过gdb,比如调试正在运行的程序,先用ps -ef获取pid,然后使用gdb attach pid。调试多线程,我会先list看看在哪行源码,或者在那个cpp文件,break可以 xxx.cpp:30,在某个文件上第30行打个断点,然后run跑起来,info thread左上角的星号是正在执行的线程,可以用thread id来切换线程,还可以用set scheduler-locking来设置只让一根线程执行。

那你在我们游戏部门那边是怎么挂的?emmmm我旅途奔波有点疲劳。。。。(因为我一开始还以为是天美工作室面试官挂错人了给我打的电话。预约面试的时候我开口问问是不是天美的人,告知不是。)

还有什么想问我的?

二面

介绍下你的项目Pine网络库(高仿低配版的muduo库)

tcp三次握手,第二次丢失了,客户端做什么,服务端做什么?

虚函数表里都有什么?

介绍一下stl中的容器及他们的数据结构

写个单例模式(线程安全的)吧

三面

三面面试官应该是不知道muduo网络库的,简单的问了问

构造函数和析构函数能不能调用虚函数,不能的话是为啥?调用了会发生什么?

线程调度。我说我了解进程的调度,说完了之后,面试官说你说说线程的啊。好吧我真不会这题,我现在大三下学期才学操作系统。面试官:这样啊,那你们大三下才学操作系统有点晚啊。就没问了。

出了道多线程的题目。大概就是给你多核CPU,如何跑很大一组数。
写完之后,面试官说你这个主线程阻塞子线程了啊,这么写不对啊。我说没有啦,这也是muduo网络库的做法,利用一个tmp进行swap操作,然后就解锁了。子线程去处理tmp数组元素,主线程也会得到锁就自由自在的跑啦。(这一段可以去看看陈硕老师的Linux多线程服务端编程,真的是打开多线程世界的大门)

你还有什么要问我的吗?
我觉的腾讯面试官都老棒了。就愉快结束了三面。

3.13完成了三轮面试,14号进入hr面试。后续流程一直到4.9终于接到了oc。时间久远有点面试题已经忘记了。我应该是比较幸运的了,有幸能被鹅厂捞了起来,深知自己在许多地方不足,会继续努力,希望每个人都可以实现自己的梦想,我的梦想就是成为一名合格的LinuxC++程序员。守得云开见月明(我高中时期很喜欢的一句话),再插题外话介绍下我的高中生活。我的高中有点菜,有多菜呢?二本加一本上线率可能不到50%吧,985和211几乎就没有,能上一本学生差不多就前十把。我们家这边还有一个高中一本上线率95%可想而知我的学校有多凄凉了吧。不过尽管我的高中这么菜,我依然很感激我的高中和我的高中班主任,能让我考上了个大学。初中不好好学习自然去我的高中了,高一高二也不咋学习,基本就上课听听奖周末和晚上打打游戏度过的。马上升高三的那个暑假励志好好学习英语,那会英语真的有认真学,但还是看小说看到凌晨三点,一直持续到11月份。我化学是我所有课里最好的了,基本上70+(大佬们别笑话我,我数学可能还考不过化学呢),就我这么菜的成绩还能排到年组前20。班主任是个男老师,教化学的。他上课40%时间是告诉我们一个人为人处世的道理,每天灌输的是你们要对你们的行为负责,而不会逼迫我们做什么,选择权和决定权在我们手里,和我所接触的老师一点也不一样(像我的初中班主任,每天灌输着你不学习你就是废物的思想,我承认我的初中是这边最好的初中,从升学率上来说是最好的班级了。全班60个人,30个人上了那个最好的高中,20多个人上了介于最好的那个高中和我的高中之间的一个高中。但不可否认的是对你人格上的打压,比如我初三下课看一本小说,当着全班面的把我书撕了,还一直强调这么做是为了你好等等太多这样的事情了,我那时时常在想人活着究竟是为了什么?除了学习就不能有其他活动了嘛?人难道就要这样度过一辈子吗?活着的意义究竟在哪里呢?)幸好我遇见了我的高中班主任,从高一就一直教育我们为人处世的道理,让我明白了活着不仅仅可以读书,还可以做很多事情,人不是为了读书而活,人需要获取知识,但不是不学习的人就是废物。世间有太多美好的东西了,不应该只局限于学习这狭隘的一级里。终于在高三的11月份,在一点一点的感悟之下真心决定好好学习,考个大学。梦想是考个一本大学,没考到一本专业但真考上了一本大学哈哈哈哈。高三上学期总分380+,高考最后分数449,内蒙的分数线比较低,而且每个地方报考机制不一样,我是9结尾是一个分数段的段头,只要哪个学校的那个专业有名额我就可以去哪个,名额都可以看得见,来到了我皇家理工。老师对一个人的成长帮助真是太大了,时至今日我依然很感激我的高中班主任,没有他我可能会浑浑噩噩过完这一生吧。

45

没有算法题?

展开全部 40 讨论