字节跳动 后端基础架构 暑期实习123面+hr面(已OC)
背景
211本985硕,ICPC区域铜/邀请银(2017年),DevOps、架构和CV算法(偏部署)都可
语言Modern C++/Python/.Net Core/Golang
一面
- 自我介绍2分钟
- 什么是基础架构?说出你的理解
- Linux的进程地址空间是什么?有什么作用?为什么要有?
- 虚拟地址空间的作用和必要性?如果我的物理内存很大还需不需要虚拟地址空间?
- 描述你理解的中断
- 聊聊文件描述符
- 聊聊CAS
- 聊聊负载均衡,dns的这种方式有什么问题,业界一般怎么实现,nginx怎么实现,应用层和传输层分别怎么实现复杂均衡,有什么优化方式
- 聊聊docker容器原理和使用
- 聊聊k8s的架构,他怎么实现服务注册和发现,除了k8s这样还能怎么实现
- 聊聊Redis的作用,几种工作模式以及分别怎么处理读写,对于cluster如果我需要强一致性数据,但是分片挂了怎么办,从服务端客户端的层面怎么解决
- 聊聊对网络代理的认识和你简历中说的代理和SNI代理
算法题topic:
二叉树的最近公共祖先
- 1次询问On复杂度(一次dfs)
- 多次询问,询问O1时间复杂度 (tarjan算法)和最低空间复杂度
- 离线询问,询问要O1,最低空间复杂度 (tarjan算法)
- 在线询问,支持插入和删除节点,询问低于On 时间(倍增算法),空间最低
反问
二面
问的不多,给了20+分钟写了一个匪夷所思的东西
- 自我介绍+项目比赛介绍
- 异步编程的理解和举例,使用场景
- 项目里k8s 容器 服务注册 消息队列的作用
- 你当时为什么能意识到需要负载均衡服务注册和发现
- 锁的认识,讲讲一般与分布式场景下的锁
- 讲讲CI/CD,讲讲GitHub Action和Jenkins
没有算法题,编程题:
写一个支持高并发的Hashmap (C++),不能使用标准库hash和红黑树等的实现,只能用常用的vector和并发控制等
之前确实没了解过java的那个concurrent hashmap的写法,不过我自己脑补出了一个差不多的
字符串哈希函数、拉链法、拉链上二分修改和查找、对拉链的二分区域加shared_lock等等,还有些细节
后面看了看java的好像我加的粒度比它定义上细?我说的拉链就是它所谓的bucket
写完当即表示ok没问题,然后反问环节
三面
Leader面,是下午六点估计到饭点了挺急的,只面了半个多小时
选一个你觉得做的最好的项目说一说
针对项目询问
你了解比如k8s的服务发现注册机制吗,那你知道声明式API吗(我了解k8s怎么做,但是卧槽这是啥,不知道,但是回答了k8s大概怎么做的)
说说为什么要使用influxDB,如果使用MySQL和Postgresql有什么问题
如果给你一片内存让你实现最快的点查读取那么要怎么设计
InnoDB和B+树
如果有一个线程池,有n个线程,有m个长任务和m个短任务,如何设计可以减少线程互相饿死的情况,你了解OS内核怎么做任务调度吗
如果将消息队列作为缓存使用,作为缓存这个功能的高可用性怎么满足
Raft协议
反问
HR面
- 问手上几个offer,啥时候入职,平时对技术的习惯,性格
- 介绍薪资和转正问题