字节和腾讯暑期实习后台开发面经
1. 字节一面-60分钟
a. 算法题
i. 数字序列中某一位的数字,剑指offer 44
ii. 二维数组中的查找,剑指offer 04
iii. 链表奇数节点单调递增,偶数节点单调递减,要求全链表有序
b. 基础相关
i. 介绍golang的channel
ii. golang的map是不是线程安全的
iii. 互斥锁,读写锁,死锁介绍
iv. 乐观锁和悲观锁介绍
v. map和hash map的区别,哈希冲突怎么解决
vi. topK问题
c. 项目相关
2. 字节二面-60分钟
a. 算法题
i. 最长不含重复字符的子字符串,剑指offer 48
ii. 二维矩阵求左上到右下的和最低路径,每个元素访问一次
b. 基础相关
i. IO多路复用
ii. 进程、线程、协程的概念和介绍
iii. 像Java这种有GC的语言是否存在内存泄漏
iv. 多线程编程模型
v. Reactor/Proactor的区别
vi. 通常栈里的对象比堆里的对象快,为什么
vii. 如何自学的
c. 项目相关
3. 字节三面-40分钟
a. 算法题
i. 积雨水Leetcode 42
b. 基础相关
i. 对golang有什么了解
ii. 同步/异步,阻塞/非阻塞的介绍,优缺点
iii. 数据库索引介绍,B+树为什么快,Hash索引与B+树索引的对比
iv. 为什么计算机分CPU缓存,内存,交换区,磁盘这样的层级结构
c. 项目相关
i. 为什么参考etcd/raft的实现
ii. Raft选举流程,与Paxos的区别
iii. 分布式数据库如何实现故障容错,介绍一个数据节点挂了的后续处理
1. 腾讯一面-90分钟
a. 算法题
i. void reverse(LinkNode *root),翻转链表
ii. int findKthInBST(TreeNode *root, int k),寻找二叉搜索树第k小的值
iii. double sqrt(double value, double eps),求平方根
b. 智力题
64匹马和8个赛道,没有计时器,最多需要比赛几次能够获得前4快的马
c. 基础相关
i. topK问题
ii. C++ STL里容器的底层实现
iii. 代码改错(vector迭代器失效)
iv. 多线程同步机制有哪一些
v. 多线程里A线程持有锁,B线程调用fork()产生子进程,子进程里能否释放锁
vi. select, poll, epoll的区别,epoll ET/LT介绍
vii. OLAP, OLTP的区别
d. 项目相关
i. 共识算法
Raft和Paxos的区别
Raft选举流程,何时选举,如何保证数据可靠不丢
举例分析,5节点的集群,leader挂掉后到新leader诞生的全过程
ii. 如何设计一个支持多维度、数据立方的流数据聚合计算框架
2. 腾讯二面-50分钟
a. 算法题
int findPeak(const vector<int> &a),找峰值,{1, 2, 3}返回3,{1,4,7,6,5}返回7
b. 智力题
5L量筒和3L量筒,现在要4L水
c. 基础相关
i. 常见的排序算法,复杂度,解释快速排序的平均时间复杂度和最差时间复杂度,详细描述堆排序
ii. 红黑树的性质,与AVL树对比的优缺点
iii. topK问题
iv. C++ class和struct的区别
v. C++动态绑定机制
vi. 构造函数是否可以是虚函数,为什么
vii. C++ STL里容器的底层实现
viii. 输入URL到网页显示全过程
ix. TCP三次握手,详细描述第三次ACK丢了的情况
x. DNS报文用什么协议传递,为什么
xi. HTTP与HTTPS的区别
xii. epoll ET/LT介绍,如果ET读取数据到一半被中断(比如信号)怎么办
xiii. 设计一个计时器Timer以及Timer的管理类,只允许使用C++11 STL
要求支持插入Timer返回ID
根据ID可以找到Timer
可以根据ID删除Timer
Timer支持单次唤醒,周期唤醒,修改唤醒时间
3. 腾讯三面-70分钟
a. 算法题
void quickSort(vector<int> &a),快速排序,如何不递归实现
b. 基础相关
i. 如何判断单链表有环
ii. C++动态绑定机制
iii. C++派生类构造顺序,析构顺序
iv. 函数调用参数传递机制,如果是struct变量如何传递
v. 异常安全的类型
vi. 常见排序算法,复杂度,解释快速排序的平均时间复杂度和最差时间复杂度,解释pivot的选取对复杂度的影响,实现快速排序
vii. 有没有比快排更快的排序,解释一下桶排序的过程,适用场景
viii. map/unordered_map的底层实现,复杂度,适用场景
ix. TCP三次握手,TCP如何实现有序,seq/ack号超过最大值了怎么办,起始seq如何选择,为什么
x. HTTP的Get/Post有什么差别
xi. epoll ET/LT介绍
xii. 进程和线程的区别
xiii. 进程间通信方式,哪个效率最高,为什么
xiv. 线程间通信方式,同步机制,并发编程模型(Actor/CSP),死锁
xv. 数据库索引介绍,为什么有索引会变快
xvi. 数据库事务的作用,ACID介绍
c. 项目相关
i. Raft
Raft为什么能实现高可用,选举流程,如何保证数据一致性和可靠性,成员变更,优化
ii. 发布订阅
1) 整体架构介绍,为什么选用epoll
2) 介绍一个完整的订阅和反订阅流程
3) 如何实现流量控制,接收队列满了怎么办
4) 流数据持久化和高可用
a. 算法题
i. 数字序列中某一位的数字,剑指offer 44
ii. 二维数组中的查找,剑指offer 04
iii. 链表奇数节点单调递增,偶数节点单调递减,要求全链表有序
b. 基础相关
i. 介绍golang的channel
ii. golang的map是不是线程安全的
iii. 互斥锁,读写锁,死锁介绍
iv. 乐观锁和悲观锁介绍
v. map和hash map的区别,哈希冲突怎么解决
vi. topK问题
c. 项目相关
2. 字节二面-60分钟
a. 算法题
i. 最长不含重复字符的子字符串,剑指offer 48
ii. 二维矩阵求左上到右下的和最低路径,每个元素访问一次
b. 基础相关
i. IO多路复用
ii. 进程、线程、协程的概念和介绍
iii. 像Java这种有GC的语言是否存在内存泄漏
iv. 多线程编程模型
v. Reactor/Proactor的区别
vi. 通常栈里的对象比堆里的对象快,为什么
vii. 如何自学的
c. 项目相关
3. 字节三面-40分钟
a. 算法题
i. 积雨水Leetcode 42
b. 基础相关
i. 对golang有什么了解
ii. 同步/异步,阻塞/非阻塞的介绍,优缺点
iii. 数据库索引介绍,B+树为什么快,Hash索引与B+树索引的对比
iv. 为什么计算机分CPU缓存,内存,交换区,磁盘这样的层级结构
c. 项目相关
i. 为什么参考etcd/raft的实现
ii. Raft选举流程,与Paxos的区别
iii. 分布式数据库如何实现故障容错,介绍一个数据节点挂了的后续处理
1. 腾讯一面-90分钟
a. 算法题
i. void reverse(LinkNode *root),翻转链表
ii. int findKthInBST(TreeNode *root, int k),寻找二叉搜索树第k小的值
iii. double sqrt(double value, double eps),求平方根
b. 智力题
64匹马和8个赛道,没有计时器,最多需要比赛几次能够获得前4快的马
c. 基础相关
i. topK问题
ii. C++ STL里容器的底层实现
iii. 代码改错(vector迭代器失效)
iv. 多线程同步机制有哪一些
v. 多线程里A线程持有锁,B线程调用fork()产生子进程,子进程里能否释放锁
vi. select, poll, epoll的区别,epoll ET/LT介绍
vii. OLAP, OLTP的区别
d. 项目相关
i. 共识算法
Raft和Paxos的区别
Raft选举流程,何时选举,如何保证数据可靠不丢
举例分析,5节点的集群,leader挂掉后到新leader诞生的全过程
ii. 如何设计一个支持多维度、数据立方的流数据聚合计算框架
2. 腾讯二面-50分钟
a. 算法题
int findPeak(const vector<int> &a),找峰值,{1, 2, 3}返回3,{1,4,7,6,5}返回7
b. 智力题
5L量筒和3L量筒,现在要4L水
c. 基础相关
i. 常见的排序算法,复杂度,解释快速排序的平均时间复杂度和最差时间复杂度,详细描述堆排序
ii. 红黑树的性质,与AVL树对比的优缺点
iii. topK问题
iv. C++ class和struct的区别
v. C++动态绑定机制
vi. 构造函数是否可以是虚函数,为什么
vii. C++ STL里容器的底层实现
viii. 输入URL到网页显示全过程
ix. TCP三次握手,详细描述第三次ACK丢了的情况
x. DNS报文用什么协议传递,为什么
xi. HTTP与HTTPS的区别
xii. epoll ET/LT介绍,如果ET读取数据到一半被中断(比如信号)怎么办
xiii. 设计一个计时器Timer以及Timer的管理类,只允许使用C++11 STL
要求支持插入Timer返回ID
根据ID可以找到Timer
可以根据ID删除Timer
Timer支持单次唤醒,周期唤醒,修改唤醒时间
3. 腾讯三面-70分钟
a. 算法题
void quickSort(vector<int> &a),快速排序,如何不递归实现
b. 基础相关
i. 如何判断单链表有环
ii. C++动态绑定机制
iii. C++派生类构造顺序,析构顺序
iv. 函数调用参数传递机制,如果是struct变量如何传递
v. 异常安全的类型
vi. 常见排序算法,复杂度,解释快速排序的平均时间复杂度和最差时间复杂度,解释pivot的选取对复杂度的影响,实现快速排序
vii. 有没有比快排更快的排序,解释一下桶排序的过程,适用场景
viii. map/unordered_map的底层实现,复杂度,适用场景
ix. TCP三次握手,TCP如何实现有序,seq/ack号超过最大值了怎么办,起始seq如何选择,为什么
x. HTTP的Get/Post有什么差别
xi. epoll ET/LT介绍
xii. 进程和线程的区别
xiii. 进程间通信方式,哪个效率最高,为什么
xiv. 线程间通信方式,同步机制,并发编程模型(Actor/CSP),死锁
xv. 数据库索引介绍,为什么有索引会变快
xvi. 数据库事务的作用,ACID介绍
c. 项目相关
i. Raft
Raft为什么能实现高可用,选举流程,如何保证数据一致性和可靠性,成员变更,优化
ii. 发布订阅
1) 整体架构介绍,为什么选用epoll
2) 介绍一个完整的订阅和反订阅流程
3) 如何实现流量控制,接收队列满了怎么办
4) 流数据持久化和高可用
没有录音,每次面试后凭印象记录的,供参考
#实习##面经##字节跳动##腾讯#