真题分享!腾讯、阿里、滴滴后台面试题汇总,附上答案!

腾讯面试


万字长文,详细记录了第二次腾讯后台开发社招面试流程,虽然面试流程因人而异,但就我个人感受而言,腾讯的面试从考察内容方面来讲,还是有一定的共通性,这一点,可以从网上众多的面经可以看出。

腾讯的面试的流程持续一个多月,如下:

20190919周四 第一轮电话面试,技术面;
20191008周二 第三轮和第四轮现场笔试+面试,技术面(原定9月31号,国庆推迟一周);
20191021周一 第六轮HR面;
20191023周三 offer call;

腾讯第一面


晚八点半,电话面,开始项目介绍,技术难点、实现细节。大概说了20分钟左右,我讲的内容面试官似乎没有理解,可能是项目架构比较复杂,口述不是特别形象,又聊了10分钟,貌似双方谁也没说服谁。开始聊计算机网络、操作系统。内容包括TCP拥塞控制算法、TCP和UDP区别、进程和线程区别等等。都是常规的题目。这一块已经很好的复习过。没问题。时间过去50分钟,面试官总结说我网络协议这一块不错,原理和项目实战比较强,会有下一面。

腾讯第二面


距离上一面隔了六天。电话面,大概20分钟左右。内容如下,不分先后:

Q1. 构造函数可以是虚函数吗?

A:不可以。原因有两点:

构造对象的时候,必须知道对象的实际类型。而虚函数行为是在运行期间确定实际类型的,在构造对象的时,对象还没有构造成功,编译器无法知道对象的实际类型是该类本身还是其派生类。

虚函数的运行依赖于虚函数指针,而虚函数指针在构造函数中进程初始化,让它指向正确的虚函数表,而在对象构造期间,虚函数指针还未构造完成。

Q2. 网络字节序是大端序还是小端序?

A:大端序。

Q3. Linux中如何创建进程以及创建进程后如何区分子进程?

A:使用fork()调用创建子进程,fork()调用返回两个值,大于0的表示父进程,等于0的表示子进程。

Q4. fork创建的子进程继承了父进程哪些内容

A:子进程继承了父进程的地址空间,打开的文件描述符等。

Q5. fork创建的子进程继承了父进程打开的文件描述符,如何让这种继承不发生

A:可以在打开文件的时候,设置FD_CLOSEXEC标志位,如果文件描述符中这个标志位置位,那么调用exec时会自动关闭对应的文件。

Q6. c++虚函数原理

A:虚函数是依赖于虚函数指针实现,每个拥有虚函数的类都有一个虚表,类的对象存在一个虚函数指针,指向实际类型的虚表。虚函数运行的时候,会根据虚函数指针找到正确的虚表,从而执行正确的虚函数。

Q7. c++多态的实现

A:多态分为两种,一种是运行时的多态,一种是编译时的多态。前者称为动态绑定,后者称为静态绑定。动态绑定时由虚函数来实现,静态绑定是由函数重载来实现。

Q8. c++ vector和list的区别?

A:vector是动态数组,会动态进行分配内存,进行扩容操作。list是双向链表。

Q9. 访问vector的迭代器的时候可以删减元素吗?list呢

A:任何对vector的修改都将导致vector的迭代器失效。list因为是双向链表,所以不会失效。

Q10. c++ vector的底层实现原理

A:vector底层是基于动态数组实现。

Q11. c++ map的底层实现

A:map的底层实现是基于红黑树的。

Q12. 红黑树的特点以及常见的二叉平衡树

A:红黑树性能比较高,插入删除时间复杂度保持在logn。和AVL相比,要求不是那么严格,它只要求到叶节点的最长路径不超过最短路径的两倍。相比之下,AVL要求左右子树相差高度不超过一,简单的插入或者删除都会导致树的不平衡需要旋转操作。

(我只说这么多,后来的同学建议说下红黑树的五个特点)

Q13. c++空类的sizeof大小

A:c++空类的大小为1,如果含有虚函数的话,大小为指针的大小。32位系统指针大小是4。c++要求即使是空类,对象也要有存储空间。含有虚函数的空类则是因为对象由虚函数指针。

Q14. 快速排序的时间复杂度

A:快速排序平均时间复杂度位nlogn,最差O(n^2)

Q15. nLogn是排序最好的时间复杂度吗?

A:不是,还有O(n)的算法,比如说基数排序。

Q16. 基数排序的原理以及应用

A:基数排序根据一个数的高低位进行排序。应用不知道,缺点是对负数的处理不太好。

Q17. 介绍负载均衡的应用

A:不知道。

Q18. http协议有用过吗?

A:这个没用过。

Q19. protobuf协议

A:我们公司之前使用的是json协议,没有用过protobuf协议。

Q20. 数据库

A:没用过。

Q21. redis

A:这个是自己学习使用的,生产环境没用过(这里说了下,我用它干嘛的,使用python的flask web框架基于redis的list结构开发一个网络聊天程序)

Q22. 解释线程安全和可重入函数

A:这个是关于多线程访问的吗?可重入函数这个名词听过,但是忘记干啥了,面试官说pass.

(一个可重入函数被称为可重入的,表明该函数被重入之后,不会产生任何不良后果,一个函数被重入,表示这个函数没有执行完

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值