腾讯 后台开发 一面

概述:4月29号面试,腾讯会议,八股、项目、智力题、手撕各个方面都有问到,面试体验很好

面试流程:

1.面试官自我介绍

2.自我介绍

3.new和malloc区别(性质/原理/大小/失败)

4.面向对象三大特性

5.虚函数表放在哪(常量区)

6.基类和子类的构造和析构顺序(构造先基类后子类,析构相反)

7.讲一下map的实现?具体细节?(红黑树,细节不知道,可能是想让讲key/value?)

8.move的实现和原理(答的比较含糊,将一个对象的资源转移到另一个对象上,原理应该是修改对象的指针)

9.如果不是指针呢?比如move的是结构体对象,有指针也有int?(提了下移动拷贝,继续问怎么赋值,沉默)

10.是栈赋值还是堆赋值(堆)

现在的理解:move本质上是将一个左值参数强制转换为右值引用,告诉编译器参数类型的变换,从而允许在移动语义中使用,还没有进行实际的数据移动和拷贝,move后就是调用移动构造或者移动赋值函数,针对结构体内部堆内存的指针进行拷贝,相当于动态分配的资源被转移,而其他的非指针变量还是普通拷贝

11.进程空间布局(代码区-常量区-全局区-静态区-堆区-文件映射区-栈区)

12.区是怎么理解的(内存段,存储代码或者数据)

13.页表是管理什么的(虚拟内存和物理内存映射关系)

14.进程线程协程的区别(从资源和切换上答)

15.linux下进程和线程的调度有区别吗(没有区别,都用task_struct表示,看成一个任务进行调度)

16.栈和堆有什么区别(系统/用户,空间大小,访问效率)

17.栈为什么比堆的效率高(说了系统支持,提供指令,堆需要两次内存访问,这里面试官不满意)

18.栈内存和堆内存都要找到内存地址,怎么对比速度(还是答指令,然后面试官开始提示)

19.CPU多级缓存设置的目的是什么(考虑局部性原理,将经常使用的内存保存在CPU缓存中使用)

20.那栈和堆,是不是和CPU多级缓存是类似的(还是没答上,应该就是栈是连续的,缓存命中率高)

21.并发和并行有什么区别(多个任务切换执行/多个任务同时执行)

22.阻塞IO和非阻塞IO区别(等待缓冲时是阻塞还是返回错误)

23.动态链接和静态链接的区别(运行时链接库/编译时复制库)

24.epoll的实现(将需要监听的fd保存在内核中的一个红黑树中,监听到事件时返回对应的fd)

25.epoll与select的区别(内核红黑树、异步回调、只返回有事件fd)

26.边缘触发和水平触发(事件发生后只通知一次/只要有数据没读写完就再次通知)

27.怎么判断事件有没有读写完(读写时会给定数据的真实长度,返回值是真正读写成功的数据长度)

28.没读写完会产生什么错误码(EAGAIN)

29.TCP四次挥手

30.客户端timewait过多怎么办(端口复用、强制关闭,还有个设置timewait的数量没答出来)

31.一个数据包从网卡到应用层的收包过程(讲了下各层的数据包)

32.对这个过程中的reuseport有了解吗(没有,后面查了是内核会在多个套接字之间分发传入的连接请求,每个套接字都可以独立地处理连接,可以充分利用多核系统的性能优势,提高并发性能)

33.这个过程中软中断是那一部分(答在应用层以下的过程都是软中断,不满意)

34.应用层到内核缓冲区读数据会有软中断吗(不确定,先说有又说没有,最后让我回去了解软中断)

现在的理解(可能不正确):网卡接收到数据包时触发硬中断,通知内核有数据包到达,内核接收到硬中断通知后触发软中断,通过网络中断处理程序从内存中找到数据包,根据数据包的协议类型进行逐层解析和处理,最后把数据放在socket的缓冲区中,然后内核唤醒用户程序,用户需要读取数据时主动发起系统调用,不属于软中断

35.内核在什么情况会发送RST(答建立了错误的连接;实际上是连接异常时,包括这种情况)

36.怎么判断是错误的连接(序列号和确认号)

37.HTTPS完整的握手流程(答了RSA的握手)

38.具体有哪几种算法(当时没记算法名字,RSA和ECDHE)

39.HTTP Session复用(当时没记,Session id和Session tickle)

40.HTTP长连接(发送一次请求和响应后不断开)

41.QUIC了解过吗(讲了下解决TCP队头阻塞、连接块,端口迁移)

42.为什么QUIC连接更快(忘记具体的,只说连接次数少)

43.还了解QUIC的其他的知识吗(无)

44.智力题:100个硬币中有1个硬币与其他质量不同,给一个天平称多少次可以判断异常硬币的轻重(2次)

45.挑一个印象深刻的项目讲一下(讲了实验室的项目,不是C++相关的)

46.回到另一个C++项目,配置模块注册配置变更回调函数是什么流程(main函数之前定义配置项作为全局变量,初始化时调用构造函数时注册回调函数,当之后对配置项进行修改时调用这些回调函数进行通知)

47.多线程下回调函数如何通知配置变更(使用单例模式,只有一个配置管理类,多个线程共享所有配置项)

48.一个线程修改配置,另一个线程使用配置怎么处理(互斥锁)

49.有性能测试吗,有对比其他服务器比如Nginx吗(ab测试,没对比)

50.服务器接收和响应的数据流是怎么样的,从accept开始(accept是单独一个协程,有新连接就建一个新协程)

51.为什么用协程(切换开销小,配合非阻塞实现异步)

52.定时器用什么实现(set)

53.支持主线程调度任务减少开销是什么意思(调度器线程执行完调度任务后也用来执行任务)

54.手撕:hot100中的合并区间

55.反问

总结:面试官非常好,花了很长时间和我面试,各个方面都有问到,会给一定的提示。整体感觉面的还行,回答的都很简洁,有少量问题没有了解,然后对于部分问题的深度知识不够,项目方面还需要对比

#软件开发2024笔面经##我的实习求职记录#
全部评论
佬面的哪个部门
点赞
送花
回复
分享
发布于 05-14 21:28 浙江
move那,底层我记得就是做了个static_cast成右值,不知道答这个对不对🙇
点赞
送花
回复
分享
发布于 05-15 18:31 北京
秋招专场
校招火热招聘中
官网直投
佬二面问了啥
点赞
送花
回复
分享
发布于 05-15 19:00 广东

相关推荐

自我介绍两道算法题一道是求数组中所有相加为目标数的组合,要求不重复且需要排序(一开始以为是哈希,写到一半发现是dfs,没写完讲了思路)一道是很简单的模运算调换前后字符串位置问了一堆Go八股make和new的区别讲一下Map(是否并发安全,底层实现,使用事项)线程、协程、进程的区别高并发场景用多线程、多协程还是多进程tcp四次挥手如果你的服务器有很多请求,然后出现大量timewait怎么办(不会)你部署的redis是单机还是集群(单机)如何防止缓存击穿和缓存穿透如果前端出现大量请求,并且都是请求不同数据,都没有命中redis,有什么方法解决mysql相关什么是幻读innodb和myisam的区别(不会)一条mysql语句是如何执行的mysql优化(只说了一个禁用排序)讲一下索引如何保证你的mysql不会宕机如何保证你的服务高可用反问为什么突然捞我(之前看你简历被别的部门锁了但是一直没面,现在面你说明你的简历筛选靠前)go的在公司担任的角色(现在底层用c++,偏业务用go)面评(画饼说我的简历能找到大厂offer,但是写在简历上面的都是默认你实现了,所以不会问,应该更重视实际场景,哪怕是没有实现高可用或者高并发,也要有解决方案)总结问了一个半小时,基本就是全程压力拷打,中间感觉有点神志不清,有些能说一两个答案,但是面试官希望听到更多的答案,有些干脆就不会
点赞 评论 收藏
转发
25 80 评论
分享
牛客网
牛客企业服务