校招过程中,除了面试前对于基础知识的积累掌握,在面试的长线战斗中,更重要的是去收集面经,从面经中获取到面试的岗位与公司的基本信息,整理与你背景相同的同学在面试中被考察的点,找寻它们之间的规律,当掌握了这个规律后,面试会变得轻松很多。
如今春招也已经进行到一半了,很多同学还不知道该如何准备,不如先看下这篇来自X同学的字节跳动-基础架构-后端开发岗的面经分享,找准自己的重点、难点,逐个击破。
1.自我介绍
2.OSI网络7层模型
OSI七层模型详解_小鹏_加油的博客-CSDN博客_osi七层模型
3.tcp和udp的区别
4.一个MTU最大是1500字节,那么最多包含多少的数据
ip头部字节大小为20~60,最多数据即1500-20=1480
5.tcp三次握手是否能够减少为两次
6.golang中常用的并发模型
这个地方复盘的时候发现面试官应该是想问channel和一些同步原语,但是答到csp和gmp上面去了,又因为gmp能讲的比较多,就没有主动说下去了。所以总体答的很浅,两三句就说完了。。。
7.进程、线程、协程、goroutine区别
(46条消息) 进程、线程、协程、goroutine区别_SlagSea-CSDN博客_goroutine是线程还是协程
8.linux中线程的状态
(46条消息) Linux进程状态解析 之 R、S、D、T、Z、X (主要有三个状态)_sdkdlwk的博客-CSDN博客_进程状态d
9.golang中有几种锁
mutex、rwmutex
这个地方也是只回答了两种锁,也可能本来问的比较干。。。这个地方应该主动提出自己了解这两种锁的一些底层实现,需要我讲一下嘛?
10.go中变量分配在什么地方
11.go的gc
12.mysql的ACID
(46条消息) 什么是事务,事务的四个特性是什么_kayla的博客-CSDN博客_事务的四个特性
13.分布式的cap理论
14.提问:cap中的c和acid中的c有区别吗
回答:个人认为有一定的区别。cap中的c,主要指在分布式事务中,保证数据的强一致性。acid的c,主要指mysql的状态一致性,数据库的约束。
面试官解答:acid的c其实就是指所有数据的一致性。
15.mysql的存储引擎了解的有哪些
主要回答到innodb和myisam就可
16.innodb和MyISAM的区别
(46条消息) MyISAM与InnoDB 的区别(9个不同点)_张花生的博客-CSDN博客_innodb和myisam的区别
17.innodb中主键索引和非主键索引都是聚簇索引吗
回答:主键索引是聚簇索引,非主键索引不是聚簇索引,因为非主键索引的叶子节点只会存主键和index,所以会有索引下推,索引覆盖,回表。
18.事务回滚的实现
(46条消息) mysql 事务 回滚 原理_mysql 事务的实现原理_weixin_39660931的博客-CSDN博客
19.mysql主从架构
回答了主从复制机制和主从架构的作用
20.提问mysql双主架构在不分表的情况下保证数据一致性
回答:pc两阶段提交
21.如何避免mysql双主架构出现会循环的数据更新
回答:使用一个标志位,来标记请求的来源,如果是来自用户则执行后广播至其他主节点,如果来自其他主节点则执行。
面试官对于回答没有做任何评价
eg.用户在节点A插入,节点A插入后通知节点B插入,节点B插入后又反过来通知节点A来插入...
22.项目最大的难点
23.算法:给定一个数n,如23121;给定一组数字A如{2,4,9},求由A中元素组成的、小于n的最大数。如小于23121的最大数为22999。(时间关系没有让写测试用例)
思路一:暴力回溯
思路二:贪心 n和答案res的长度一定相同,因为要求小于n的最大数,那么从最高位开始比较,从A中选择<=n的最大数(贪心),例如23121(最高位2)<···>{2,4,9}(2)。我们从A中选取的数字和当前比较的数字相同,那么递归迭代至次高位重复上述过程,在这个过程中会出现两种边界情况。如果,我们从A中选取的数字小于当前比较的数字,那么之后的数字直接选取A中最大的数字就能得到答案。如果我们找不出比相比较数字小的,那么说明我们需要在上一次的选择时选择小一点的数字,之后选择A中最大数字补充即可。
面试中由于时间原因选择回溯,最后复盘时,发现思路二贪心实现比较困难,但是可以通过该思路和回溯结合实现剪枝优化
反问:部门主要从事什么样的工作,主要业务。
面试结束,当即告知一面通过,能否直接二面。回复有急事,能不能过1-2小时,面试官说可以,结果被鸽了。。。第二天中午收到面试通过邮件,选择二面时间。
总结:一面主要以基础为主,也会问到相关编程语言底层实现,进阶知识。算法不难。
1.自我介绍
2.讲一下项目
curd项目,很简单
3.自己在项目实现了哪些
全部,前端后端
4.项目体量有多大
不是很懂怎么衡量项目体量,于是说了实体类有多少个,有多少张表
5.项目数据库有哪些表
6.说到了外键,提问:外键的约束的作用
没有准备到,乱答用于连接两张表。
7.你觉得项目的难点在哪里
答curd项目,很简单。面试官没有多问。
8.golang的gmp模型
9.gmp中m和p的数量关系
10.go的gc
11.了解docker镜像
答:image相关
12.了解docker网络吗
答:不了解,但是了解docker资源隔离,于是回答资源隔离
(46条消息) 聊一聊Docker所使用到的Linux底层技术(Namespace,Cgroup与存储驱动和容器引擎)_小凯的博客-CSDN博客
13.了解k8s吗
答:听说过,不了解
14.tcp状态机的切换
即三次握手和四次分手过程中,客户端和服务端的过程状态。
重点在于四次分手时,time_wait和close_wait
15.tcp滑动窗口,拥塞控制
(46条消息) TCP滑动窗口和拥塞控制机制详解_genzld的博客-CSDN博客_tcp窗口滑动以及拥塞控制
16.Linux内核了解吗
17.内存分页、分段
(46条消息) 分段和分页机制_续航fff的博客-CSDN博客_分段和分页
18.os内存伙伴算法
没答上,不知道。。。面试官说太过底层了吗?
(46条消息) 伙伴算法_csdn_kou的博客-CSDN博客_伙伴算法
算法:给定一个二叉树,请计算节点值之和最大的路径的节点值之和是多少。这个路径的开始节点和结束节点可以是二叉树中的任意节点
思路:使用递归,从结束节点开始向上返回节点值,其余节点返回零值。左右子节点有非零返回值,则说明子节点处于路径中,返回子节点值+自己的节点值。到开始节点时,将值保存在全局变量res中。
总结:和一面差不多。
1.自我介绍
2.介绍项目
3.用户态和内核态的区别
4.为什么要区分用户态和内核态
答:资源隔离和通过系统调用接口提供硬件资源
5.golang中使用goroutine使用系统调用会阻塞线程吗
6.如果golang中所有goroutine调用一个系统,会导致没有线程可用吗
答:gmp中m不会耗尽,但是os的线程会耗尽
7.追问gmp中m是什么
M代表OS内核线程,是操作系统层面调度和执行的实体。M仅负责执行,M不停地被唤醒或创建,然后执行。M启动时进入的是运行时的管理代码,由这段代码获取G和Р资源,然后执行调度。另外,Go语言运行时会单独创建一个监控线程,负责对程序的内存、调度等信息进行监控和控制。--《Go语言核心编程》
8.mysql事务隔离级别
9.不可重复读是什么
10.故障测试了解吗
不知道
11.ut了解吗
不知道
12.了解docker的XXX(忘了)
答:只了解资源隔离,就没问了
13.go闭包的一道题
func calc(base int) (func(int) int, func(int) int) {
add := func(i int) int { base += i
return base }
sub := func(i int) int { base -= i
return base }
return add, sub
}
func main() {
f1,f2 := calc(10)
fmt.println(f1(1),f2(2))
fmt.println(f1(3),f2(4))
fmt.println(f1(5),f2(6))
fmt.println(f1(7),f2(8))
}
请说明上述程序的输出是什么?
11 9
12 8
13 7
14 6
14.两个list求相同元素
题目描述:
1、有两个有限队列,求两个队列的相同元素
2、对自己的代码进行测试用例编写
3、通过自己的用例,优化自己的代码
4、说出自己代码的时间复杂度
5、如果是两个无限队列,怎么办
思路:哈希表
反问:部门主要业务?
答:大方向存储相关
总结:三面leader面,问了一些场景题,比较考验理解,八股文很少。
最后HR面,聊了下岗位福利待遇,最后顺利拿下啦。
你还在忙于春招,苦于论文吗?解决就业难、进大厂难的CSDN超级实习生计划2022年春季内推正在进行中!大厂、名企实习直通车,年薪最高可达30万,名额有限,先到先得!点击下方链接,填表预约测评,获取内推名单!