腾讯暑期C++后台开发实习面经

2022年秋招/春招/提前批/大厂面经整理(持续更新中~)

腾讯暑期C++后台开发实习面经

一面(3.31)

1.项目,问这个主要干了啥,不用说细节
个人答案:
2.Linux指令怎么查看占用内存情况,怎么查看占用端口情况
个人答案:

  • top

  • lsof

3.一个数组a[20][10]的首地址是100,问a[11][5]的地址是多少
个人答案:

  • (100+4*(11*10+5))

  • a[0][0] a[0][1] …a[0][9] a[1][0] a[1][1]…

4.数组和链表的内存存储和插入
个人答案:

  • 数组连续;链表不连续。

  • 数组插入需要移位,空间不够需要扩容;链表直接插入即可。

5.unordered_map和map的底层实现,以及使用场景如何选择
个人答案:

  • Unordered_map为哈希表;map为红黑树。

  • 如果键值需要有序则用map;其他用unordered_map

6.#include时“”和<>的区别
个人答案:

  • ""先在项目找,再去全盘找。

  • <>先在库文件找,再去项目找。

  • <>不能找的自己定义的;""可以找到。

参考答案:

  • #include<>:编译器直接从系统类库目录里查找头文件:
  • #include"":默认从项目当前目录查找头文件,所谓项目当前目录,就是项目工程文件(.vcxproj)所在的目录。如果在项目当前目录下查找失败,再从项目配置的头文件引用目录查找头文件,所谓项目配置的引用目录,就是我们在项目工程中设置的头文件引用目录。如果项目配置的头文件引用目录中仍然查找失败,再从系统类库目录里查找头文件

7.vector增加元素时,内存变化情况以及push_back使用的是指针、引用还是拷贝
个人答案:

  • 主要看size和capacity,如果capacity不够需要重新分配内存。(扩容大小忘了)

  • Push_back使用的是拷贝,类的话也是使用拷贝。

8.TCP/UDP的区别
个人答案:

  • TCP是可靠的;UDP是不可靠的。

  • TCP是基于连接的;UDP只管发送,不管对方收不收得到。

9.TCP可靠是怎么保证
个人答案:

  • 基于连接

  • 拥塞控制

10.进程间通信方法
个人答案:

  • 管道

  • 共享内存

  • 信号

  • 信号量

  • socket

11.socket相对于另外几个的优点
个人答案:

  • socket可以用在不同机器之间的进程间通信

12.计算机内存只有1M,有一个文件1G,怎么排序
个人答案:

  • 归并:先每一个1M文件进行排序,然后对这一1024个文件进行合并。

13.不用pow实现计算m的n次幂,时间复杂度
个人答案:

  • 快速幂

举例:4的7次方计算方法:
o7的二进制为0111
o则对应的乘法为4^4 * 4^2 * 4^1
时间复杂度O(log(n))

14.代码题:对一个正数组成的数组,用最少的元素构建一个子集,满足该子集之和大于剩余元素之和。输出子集的一种情况即可。
个人答案:

  • 直接从大到小排序,计算sum;注:排序面试官说用sort就行了。
  • 从前往后遍历将数组分成两部分,当前面部分比后面大时,输出前面数组。

15.代码题:实现两个函数模拟EXCEL的列,一个是由数字到字母,一个是由字母到数字。即28->AC;AC->28。
个人答案:

就很基础,注意A对应的数字是1而不是0即可。
1 string InttoName(int a);

1 int NametoInt(string s);

16.文本输入时撤销键应该用什么数据结构实现
个人答案:

  • 栈:先入后出

反问环节

这次表现怎么样?
o还不错
深圳实习有房补嘛?
o有的,去年记得好像是5000+2000房补
面试官一开始说的是属于哪个组?
o-
在xxx需要什么技术嘛?
o需要C++和linux
我还需要学习什么嘛?
o可以多熟悉linux的使用
下次面试会问些啥问题呀hhh?
o这个我不知道,下次面试官不知道是谁
o但是还有3面
3面包括hr面嘛?
o包括的
o2技术面+1hr面
感觉这次面试的内容太简单了
o这次面试没有问项目的内容
o之后的面试会更多偏向项目和技术
o最后一次技术面会是组里的boss来面
后天要笔试了,笔试结果对最终录用有影响吗?
o这个会参考的,但是不作为决定指标
o有些同学技术好,有些同学沟通能力强,但总归是喜欢聪明一点的同学。

二面

1. 哪里人

答:广东清远

2. 做个自我介绍吧
答:我叫xxx,广东清远人,本科和研究生就读于xxxx大学,本科是xx专业,大四保研到xx专业。求职意愿是C++后台开发。就这么多。

3. 有什么兴趣爱好
答:打打王者,看看国外名著。

4. 我看你这个简历上面有实习是吗
答:不是的,我放到项目那块了。只是一个合作的项目。

5. C++特性这块哪方面用的比较多,类、STL之类的
答:STL用的多,太好用了。

6. STL中你用哪个容器比较多
答:vector,容器适配器用的栈,队列,哈希表(unordered_map)。

7. vector内存分配怎么样的
答:vector里面有size和capacity,连续分配,如果size>capacity需要重新分配内存。

8. vector初始大小是多少呢
答:这个不太清楚,好像是按照2的幂次数进行向上取整。

9. 其他容器的内存情况呢
答:是我提到的那些嘛(是的)。栈和队列是双端队列的容器适配器,是非连续内存存储的。哈希表(unordered_map)底层是哈希表(有点奇怪)。

10. 析构函数和构造函数可以用虚函数嘛
答:
析构应该用:因为如果不虚函数化,基类指针指向派生类对象时,调用析构函数只调用了基类的析构函数。
构造函数不应该用:因为虚函数调用机制是根据虚函数指针来调用的,而虚函数指针是需要构造对象之后才有的,因此把构造函数虚函数化会无法成功进行类的实例化。

11. 虚表有多大
答:是指虚函数表吗(是的),虚函数表保存的是虚函数的指针,所以大小是虚函数个数*4个字节

12. 你平时用什么语言
答:C++、Python、Matlab

13. 另外两个语言各自的优点和缺点呢

答:
Python的优缺点都是一样的,库和包都很多,如果熟悉包和库就能很快很简洁地满足需求。
Matlab话缺点是脚本语言,没那么灵活。优点是处理矩阵运算特别快。
14. C++11有什么特性

答:
=delete|=default
dectype()
static_cast()
for(int num:vec_a)
15. TCP滑动窗口什么意思,怎么做流量控制

答:
滑动窗口为发送的请求队列,若最左边的请求收到ack,则窗口移动。
流量控制包括慢启动、快速重传、一些概念忘了。大概流程是这样……

16. 项目
答:是的。

17. 能说一下用的什么模式吗
答:模式是指并发模式还是I/O复用的模式(I/O复用的模式)。用的是epoll。

18. 那epoll是用什么形式使用的
答:线程池。

19. 我的意思是epoll的触发模式是什么
答:ET模式,边沿触发模式。

20. 为什么要用ET模式
答:要求请求被一次处理,不再进行通知。减少事件遍历个数。

21. 还有什么触发模式吗
答:LT模式。水平触发模式。

22. 两个触发模式的应用场景
答:
我觉得LT模式适合请求不能被忽略或者错过的场景,并发量高但是处理能力较低的场景。因为LT会重复通知请求事件。
ET的话适用于处理能力较强的场景。

23. 那请求量大但简单的场景适合用什么模式
答:ET模式。

24. 实现后的性能怎么样
答:没有测试,对压力测试不是很了解。主要是学习知识。

25. 你上面那个项目也是参考网上别人的项目吗
答:内存池吗(是的)。是的。

26. 大概讲下实现的原理
答:
三层缓存的结构
快是因为线程都有各自独立的Thread Cache,不用加锁。
第二层是管理Thread Cache内存分配和释放的Central Cache。
第三层是以Page为单位的Page Cache。
数据结构使用的是Free-list,细节很难说得清楚。。。

27. 那你从这两个项目里面学到了什么
答:
C++单例模式。
内存池。
另一个项目主要就是网络的相关知识,像I/O复用这些。

28. 你在Linux下开发过吗
答:最近换的macos,只会一些基本的操作。

29. 写过makefile吗
答:没有。(那你这两个那么大的项目怎么编译?)直接g++,其实这两个项目很小。

30. 怎么用指令修改文件大小
答:不了解

31. 你使用Linux时常用的指令
答:top、ls、cat、touch、cp、rm、mkdir、netstat

32. 用过什么数据库
答:MySQL

33. 会写SQL语句吗
答:本科学过,用得少不太记得了。

34. 怎么加速查询
答:最简单的方法:使用索引

35. 为什么使用索引快
答:索引能够缩小遍历的范围,和查字典一样,比如查林字,可以直接查L的拼音。

36. 索引快的原因是什么
答:不太清楚。我知道索引有哈希索引和B树索引。

37. 索引的存储格式是什么
答:我觉得应该是树。。。不清楚

38. 介绍一下项目
答:

39. 你英语怎么样,能用英语说一下上面这个项目吗
答:普通交流程度。直接介绍的话有点难,因为没有准备。但是如果是沟通的话可以的。

40. 算法题:char a[n]和char b[m],用最小时间复杂度和最小空间复杂度构建数组c,c的元素为a中与b不重复的元素。(就是c=a-b)用C语言写。
答:疯狂argue,忘了怎么写动态数组,而且这个输入输出没给定。我先讲下思路吧。因为是字符串,所以用128长度的int数组表示b中对应字符的出现情况。若出现,置为1,没出现置为0。遍历a数组,若对应位置为0,加入c,否则不加入。实现的时候最终还是用上了心爱的vector数组。被怼了句“用C++我还考你什么算法”

闲聊环节

1. 你非科班怎么学计算机的
答:本科有辅修操作系统、计网、数据库。课余时间看推荐的课程,b站等学习网站很多。

2. 你对从事游戏领域的工作有兴趣吗
答:挺感兴趣的。

3. 你玩什么游戏
答:以前玩的多。王者荣耀、和平精英。端游的话玩DNF。

总结语

希望大家能够时刻保持一颗积极向上的心,我始终相信一件事:机会永远是留给有准备的人

资料分享:下图中的资料是我和群里的小伙伴一起为正在准备秋招的朋友整理的,需要这份校招资料的点赞、转发、收藏之后添加君羊【832218493】 免费了领取!

在这里插入图片描述

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值