万字攻略,社招腾讯天美C++后台面经,面试题整理(上)

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
简介: 万字攻略,社招腾讯天美C++后台面经,面试题整理

腾讯天美面经

  1. 自我介绍
  2. placement new?我:啥玩意没听过
  3. 虚函数会吧
  4. 内联函数
  5. 虚函数可以是内联的吗
  6. mysql acid
  7. mysql mvcc 隔离级别实现原理什么一套都讲了
  8. protobuff的优缺点?缺点不会
  9. C++11的智能指针
  10. B+ B树 红黑树区别
  11. 同步异步
  12. 阻塞非阻塞
  13. 可以同步非阻塞吗?我答得是可以
  14. epoll和select区别
  15. epoll是同步的还是异步的?
  16. 协程?
  17. 对称协程和非对称协程?不会
  18. udp和tcp区别?讲完区别,又从wireshark讲起tcp,然后如何网络优化分析
  19. redis的跳表
  20. redis几种基本数据结构?
  21. 怎么用的zookeeper?底层原理是什么?不会底层
  22. LRU怎么实现的?
  23. 协程为什么叫用户态线程?
  24. 动态规划和贪心区别?答的一般
  25. 动态规划可以得到全局最优解吗?可以
  26. 动态规划时间复杂度?看题,可能O(n)可能O(n^2)
  27. 只有一个数字出现奇数剩下都是出现偶次数,如何快速得到值?异或
  28. 长度最小的子数组(lc209题,我用的滑动窗口)面试官非说我错了,是有点边界问题改完他还说我是错的,不能这么写,讲了几次还觉得我是错的,最后面试官亲自改测试例子也证明了代码没有问题。
  29. 反问 休闲类游戏组,帮别人面试的
  30. 一致性算法?不会
  31. 分布式了解吗?不太了解

面完我还觉得应该是可以过的吧,结果面完就秒挂了,看到流程已结束的那几个字我第一反应就是这就离谱,该不会是离谱回家了吧,该不会就是传说中的KPI面试吧,冷静思考,没人那么闲会浪费自己的1个小时。

转过头复盘一下,面试官觉我很多东西没啥深度比如zookeeper只会用不懂里面原理,protobuf没有理解细节等等,很多东西没有深入的理解。

反思了2022这一年,从接今年3月接到腾讯实习以后就开始摆烂了,7月份实习,边实习边准备秋招,8月底拿了个不错公司(一个中厂大佬们瞧不上,但我自己喜欢就行)就又开始摆烂了。

转语言是不可能转语言的,誓与C++共存亡,功夫不负有心人,目前上岸了,直接上图:

640.jpg

还不熟悉的朋友,这里可以先领取一份Linux c/c++开发新手学习资料包(入坑不亏):

640.png


接下给大家分享我的上岸经历,这里给大家推荐零声教育全网独家的【Linux C/C++开发】课程体系,通过原理技术+源码分析+案例分析+项目实战,全面解析Linux C/C++,8个上线项目,2W+行手写代码,全面解析:

1、精进基石专栏

(一)数据结构与算法

  • 随处可见的红黑树
  • 红黑树的应用场景进程调度cfs,内存管理
  • 红黑树的数学证明与推导
  • 手撕红黑树的左旋与右旋
  • 红黑树添加的实现与添加三种情况的证明
  • 红黑树删除的实现与删除四种情况的证明
  • 红黑树的线程安全的做法
  • 分析红黑树工程实用的特点
  • 磁盘存储链式的B树与B+树
  • 磁盘结构分析与数据存储原理
  • 多叉树的运用以及B树的定义证明
  • B树插入的两种分裂
  • B树删除的前后借位与节点合并
  • 手撕B树的插入,删除,遍历,查找
  • B+树的定义与实现
  • B+树叶子节点的前后指针
  • B+树的应用场景与实用特点
  • B+树的线程安全做法
  • 海量数据去重的abhloriter bitap
  • hash的原理与hash函数的实现
  • hash的应用场景
  • 分布式hash的实现原理
  • 海量数据去重布隆过滤器
  • 布隆过滤的数学推导与证明

(二)设计模式

  • 创建型设计模式
  • 单例模式
  • 策略模式
  • 观察者模式
  • 工厂方法模式与抽象工厂模式
  • 原型模式
  • 结构型设计模式
  • 适配器模式
  • 代理模式
  • 责任链模式
  • 状态模式
  • 桥接模式
  • 组合模式

(三)c++新特性

  • stI容器,智能指针,正则表达式
  • unordered_ _map
  • stl容器
  • hash的用法与原理
  • shared_ ptr,unique_ ptr
  • basic_ regex,sub_ match
  • 函数对象模板function, bind
  • 新特性的线程,协程,原子操作,lamda表达式
  • atomic的用法与原理
  • thread_ local 与condition_ var iable
  • 异常处理exception_ _ptr
  • 错误处理error _ category
  • coroutine的用法与原理

(四)Linux工程管理

  • Makefi le/ cmake/conf igure
  • Makefile的规则与make的工作原理
  • 单文件编译与多文件编译
  • Makefile的参数传递
  • 多目录文件夹递归编译与嵌套执行make
  • Makefile的通配符,伪目标,文件搜索
  • Makefile的操作函数与特殊语法
  • configure生成makefile的原则
  • cmake的写法
  • 分布式版本控制git
  • git的工作流程
  • 创建操作与基本操作
  • 分支管理,查看提交历史
  • git服务器搭建
  • Linux系统运行时参数命令
  • 进程间通信设施状态ipcs
  • Linux系统运行时长upt ime
  • CPU平均负载和磁盘活动iostat
  • 监控,收集和汇报系统活动sar
  • 监控多处理器使用情况mpstat
  • 监控进程的内存使用情况pmap
  • 系统管理员调优和基准测量工具nmon
  • 密切关注Linux系统glances
  • 查看系统调用strace
  • ftp服务器基本信息ftptop
  • 电量消耗和电源管理powertop
  • 监控mysq| 的线程和性能mytop
  • 系统运行参数分析htop/top/atop
  • Linux网络统计监控工具netstat
  • 显示和修改网络接口控制器ethtool
  • 网络数据包分析利刃tcpdump
  • 远程登陆服务的标准协议teInet
  • 获取实时网络统计信息iptraf
  • 显示主机上网络接口带宽使用情况iftop

2、高性能网络设计专栏

(一)网络编程异步网络库zvnet

  • 网络io与io多路复用select/poll/epoll
  • socket与文件描述符的关联
  • 多路复用select/poll
  • 代码实现LT/ET的区别
  • 事件驱动reactor的原理与实现
  • reactor针对业务实现的优点
  • poll封装send_ cb/recv_ _cb/ accept_ _cb
  • reactor多核实现
  • 跨平台(select/epoll/kqueue)的封装reactor
  • redis,memcached, nginx网 络组件
  • http服务器的实现
  • reactor sendbuffer与recvbuffer封装http协议
  • http协议格式
  • 有限状 态机fsm解析http
  • 其他协议websocket, tcp文件传输

(二)网络原理

  • 服务器百万并发实现(实操)
  • 同步处理与异步处理的数据差异
  • 网络io线程池异步处理
  • ulimit的fd的百万级别支持
  • sysctI. conf的rmem与wmem的调优
  • conntrack的原理分析
  • Posix API与网络协议栈
  • connect,listen, accept与三次握 手
  • listen参数backlog
  • syn泛洪的解决方案
  • close与四次挥手
  • 11个状态迁移
  • 大量close_ wait与time wait的原因与解决方案
  • tcp keepalive与 应用层心跳包
  • 拥塞控制与滑动窗口
  • UDP的可靠传输协议QUIC
  • udp的优缺点
  • udp高并发的设计方案
  • qq早期为什么选择udp作为通信协议
  • udp可靠传输原理
  • quic协议的设计原理
  • quic的开源方案quiche
  • kcp的设计方案与算法原理
  • 协程调度器实现与性能测试
  • 调度器的定义分析
  • 超时集合,就绪队列,io等待集合的实现
  • 协程调度的执行流程
  • 协程接口实现,异步流程实现
  • hook钩子的实现
  • 协程实现mysql请求
  • 协程多核方案分析
  • 协程性能测试

(三)自研框架:基于dpdk的用户态协议栈的实现(已开源)

  • 用户态协议栈设计实现
  • 用户态协议栈的存在场景与实现原理
  • netmap开源框架
  • eth协议,ip协议, udp协议实现
  • arp协议实现
  • icmp协议实现
  • 应用层posix api的具体实现
  • socket/bind/listen的实现
  • accept实现
  • recv/send的实现
  • 滑动窗口/慢启动讲解
  • 重传定时器,坚持定时器,time_ wait定时器,keepalive定时器
  • 手把手设计实现epoll
  • epoll数据结构封装与线程安全实现
  • 协议栈fd就绪回调实现
  • epoll接口实现
  • LT/ET的实现
  • 高性能异步io机制io_ _uring
  • 与epo1l媲美的io_ uring
  • io_ _uring系统调用io_ _uring_ setup, io_ _ur ing_ register, io_ _ur ing_ enter
  • liburng的io_ uring的关系
  • io_ uring与epoll性能对比
  • io_ _uring的共享内存机制
  • io_ uring的使用场景
  • io_ ur ing的accept, connect, recv, send实现机制
  • io_ uring网络读写
  • io_ uring磁盘读写
  • proactor的实现

3、基础组件设计专栏

(一)池式组件

  • 手写线程池与性能分析(项目)
  • 线程池的异步处理使用场景
  • 线程池的组成任务队列执行队列
  • 任务回调与条件等待
  • 线程池的动态防缩
  • 扩展: nginx线程池实现对比分析
  • 内存池的实现与场景分析(项目)
  • 内存池的应用场景与性能分析
  • 内存小块分配与管理
  • 内存大块分配与管理
  • 手写内存池,结构体封装与API实现
  • 避免内存泄漏的两种万能方法
  • 定位内存泄漏的3种工具
  • 扩展:nginx内存池实现
  • mysq|连接池的实现(项目)
  • 连接池性能的影响的2个因素,top连接和mysq|认证
  • 连接请求归还策略
  • 连接超时未归还策略
  • 链接断开重连策略
  • 连接数量最优策略

(二)高性能组件

  • 原子操作CAS与锁实现(项目)
  • 互斥锁的使用场景与原理
  • 自旋锁的性能分析
  • 原子操作的汇编实现
  • 无锁消息队列实现(项目)
  • 有锁无锁队列性能
  • 内存屏障Barrier
  • 数组无锁队列设计实现
  • 链表无锁队列设计实现
  • 网络缓冲区设计
  • RingBuffer设计
  • 定长消息包
  • ChainBuffer 设计
  • 双缓冲区设计
  • 定时器方案红黑树,时间轮,最小堆(项目)
  • 定时器的使用场景
  • 定时器的红黑树存储
  • 时间轮的实现
  • 最小堆的实现
  • 分布式定时器的实现
  • 手写死锁检测组件(项目)
  • 死锁的现象以及原理
  • pthread_ _mutex_ lock/pthread_ _mutex_ _unlock dIsym的实现
  • 有向图的构建
  • 有向图dfs判断环的存在
  • 三个原语操作 lock before, lock_ after, unlock_ after
  • 死锁检测线程的实现
  • 手写内存泄漏检测组件(项目)
  • 内存泄漏现象
  • 第三方内存泄漏与代码内存泄漏
  • malloc与free的dIsym实现
  • 内存检测策略
  • 应用场景测试
  • 手把手实现分布式锁(项目)
  • 多线程资源竞争互斥锁
  • 自旋锁
  • 加锁的异常情况
  • 非公平锁的实现
  • 公平锁的实现

(三)开源组件

  • 异步日志方案spdlog (项目)
  • 日志库性能瓶颈分析
  • 异步日志库设计与实现
  • 批量写入与双缓存冲机制
  • 奔溃后的日志找回
  • 应用层协议设计ProtoBuf(项目)
  • IM, 云平台,nginx, http, redis协议设计
  • 如何保证消息完整性
  • 手撕protobuf IM通信 协议
  • protobuf序列化与反序列化
  • protobuf编码原理

4、中间件开发专栏

(一)Redis

  • Redis相关命令详解及其原理
  • string,set, zset, Iist,hash
  • 分布式锁的实现
  • Lua脚本解决ACID原子性
  • Redis事务的ACID性质分析
  • Redis协议与异步方式
  • Redis协议解析
  • 特殊协议操作订阅发布
  • 手撕异步redis协议
  • 存储原理与数据模型
  • string的三种编码方 式int, raw, embstr
  • 双向链表的list实现
  • 字典的实现,hash函数
  • 解决键冲突与rehash
  • 跳表的实现 与数据论证
  • 整数集合实现
  • 压缩列表原理证明
  • 主从同步与对象模型
  • 对象的类型与编码
  • 广字符串对象
  • 列表对象
  • 哈希对象
  • 集合对象
  • 有序集合
  • 类型检测与命令多态
  • 内存回收
  • 对象共享
  • 对象空转时长
  • redis的3种集群方式主从复制,sentinel, cluster
  • 4种持久化方案

(二)MySQL

  • SQL语句,索引,视图,存储过程,触发器
  • MySQL体系结构,SQL执行流程.
  • SQL CURD与高 级查询
  • 视图,触发器,存储过程
  • MySQL权限管理
  • MySQL索引原理以及SQL优化
  • 索引,约束以及之间的区别
  • B+树,聚集索引和辅助索引
  • 最左匹配原则以及覆盖索引
  • 索引失效以及索引优化原则
  • EXPLAIN执行计划以及优化选择过程分析
  • MySQL事务原理分析
  • 事务的ACID特性
  • MySQL并发问题脏读,不可重复读,幻读
  • 事务隔离级别
  • 锁的类型,锁算法实现以及锁操作对象
  • S锁X锁|S锁IX锁
  • 记录锁,间隙锁,next-key lock
  • 插入意向锁,自增锁
  • MVCC原理剖析
  • MySQL缓存策略
  • 读写分离,连接池的场景以及其局限a
  • 缓存策略问题分析
  • 缓存策略强一致性解决方案
  • 缓存策略最终一致性解决方案
  • 2种mysql緩存同步方案从数据库与触发器+udf
  • 缓存同步开源方案go-mysql-transfer
  • 缓存同步开源方案canal原理分析
  • 3种缓存故障,缓存击穿,缓存穿透,缓存雪崩

(三)Kafka

  • Kafka使 用场景与设计原理
  • 发布订阅模式
  • 点对点消息传递
  • Kafka Brokers原 理
  • Topi cs和Partition
  • Kafka存 储机制
  • Partition存储分布
  • Partition文件存储机制
  • Segment文件存储结构
  • offset查找message
  • 高效文件存储设计
  • 微服务之间通信基石gRPC
  • gRPC的 内部组件关联
  • CI ientS ide与ServerSide, Channel, Ser ivce, Stub的概念
  • 异步gRPC的实现
  • 回调方式的异步调用
  • Server 与CI ient对RPC的实现
  • 基于http2的gRPC通信协议
  • 基于http协 议构造
  • ABNF语法
  • 请求协议Request-Headers
  • gRPC上下文传递

(四)Nginx

  • Nginx反 向代理与系统参数配置conf原理
  • Nginx静态文件的配置
  • Nginx动态接口代理配置
  • Nginx对Mqtt协议转发
  • Nginx对Rtmp推拉流
  • Openresty对Redis缓存数据代理
  • shmem的三种实现方式
  • 原子操作
  • nginx channel
  • 信号
  • 信号量
  • Nginx过滤 器模块实现
  • Nginx Filter模块运行原理
  • 过滤链表的顺序
  • 模块开发数据结构 ngx_ str_ _t,ngx_ list_ t,ngx_ buf_ t,ngx_ chain_ t
  • error日志的用法
  • ngx_ comond_ t的讲解
  • ngx_ http_ _module_ _t的执行流程
  • 文件锁,互斥锁
  • slab共享内存
  • 如何解决 "惊群”问题
  • 如何实现负载均衡
  • Nginx Handler模块实现
  • Nginx Handler模块运行原理:
  • ngx_ module_ t/ngx_ http_ module_ t的讲解
  • ngx_ http_ top_ body_ filter/ngx_ http_ _top_ header_ filter的 原理
  • ngx_ rbtree_ t的使用方法
  • ngx_ rbtree自定义添加方法
  • Nginx的核心数据结构ngx_ cycle_ t,ngx_ event. _moule_ t
  • http请求的11个处理阶段
  • http包体处理
  • http响应发送
  • Nginx Upstream机制的设计与实现
  • 模块性能测试
相关文章
|
1月前
|
存储 Java 程序员
Java基础的灵魂——Object类方法详解(社招面试不踩坑)
本文介绍了Java中`Object`类的几个重要方法,包括`toString`、`equals`、`hashCode`、`finalize`、`clone`、`getClass`、`notify`和`wait`。这些方法是面试中的常考点,掌握它们有助于理解Java对象的行为和实现多线程编程。作者通过具体示例和应用场景,详细解析了每个方法的作用和重写技巧,帮助读者更好地应对面试和技术开发。
114 4
|
6月前
|
存储 算法 编译器
C++面试题其一
C++文件编译与执行的四个阶段 预处理:处理#include、#define等预处理指令。 编译:将源码翻译为目标代码。 汇编:将目标代码转换为机器指令。 链接:将目标文件和库文件合并生成可执行文件。 STL中的vector的实现,是怎么扩容的? vector通过动态数组实现,当容量不足时,分配更大的内存(通常是原来的两倍),复制旧数据到新内存,并释放旧内存。
86 2
|
6月前
|
存储 程序员 编译器
C++面试题其二
extern "C" 用于告诉编译器按照C语言的链接方式处理代码,通常用于C++代码与C代码混合编程,以防止因名字修饰(name mangling)引起的链接错误。例如: extern "C" { void c_function(); } 通过这些问题的深入理解和解答,能够更好地掌握C++编程的核心概念和实际应用,为面试做好充分的准备。
81 1
|
6月前
|
存储 网络协议 编译器
【干货总结】Linux C/C++面试知识点
Linux C/C++基础与进阶知识点,不仅用于面试,平时开发也用得上!
621 17
|
7月前
|
存储 算法 C语言
从C语言到C++_39(C++笔试面试题)next_permutation刷力扣
从C语言到C++_39(C++笔试面试题)next_permutation刷力扣
68 5
|
7月前
|
存储 编译器 C语言
从C语言到C++_23(多态)抽象类+虚函数表VTBL+多态的面试题(下)
从C语言到C++_23(多态)抽象类+虚函数表VTBL+多态的面试题
67 1
|
7月前
|
存储 编译器 Linux
从C语言到C++_23(多态)抽象类+虚函数表VTBL+多态的面试题(中)
从C语言到C++_23(多态)抽象类+虚函数表VTBL+多态的面试题
70 1
|
6月前
|
安全 算法 C++
C++面试题其三
继续上篇博客的解答,我们将进一步探讨C++中的一些关键概念和常见面试问题。
59 0
|
24天前
|
存储 编译器 C语言
【c++丨STL】string类的使用
本文介绍了C++中`string`类的基本概念及其主要接口。`string`类在C++标准库中扮演着重要角色,它提供了比C语言中字符串处理函数更丰富、安全和便捷的功能。文章详细讲解了`string`类的构造函数、赋值运算符、容量管理接口、元素访问及遍历方法、字符串修改操作、字符串运算接口、常量成员和非成员函数等内容。通过实例演示了如何使用这些接口进行字符串的创建、修改、查找和比较等操作,帮助读者更好地理解和掌握`string`类的应用。
38 2
|
1月前
|
存储 编译器 C++
【c++】类和对象(下)(取地址运算符重载、深究构造函数、类型转换、static修饰成员、友元、内部类、匿名对象)
本文介绍了C++中类和对象的高级特性,包括取地址运算符重载、构造函数的初始化列表、类型转换、static修饰成员、友元、内部类及匿名对象等内容。文章详细解释了每个概念的使用方法和注意事项,帮助读者深入了解C++面向对象编程的核心机制。
83 5
下一篇
DataWorks