0x00 iintroduce

 收集整理互联网上相关面试题

0x01 字节电商

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
字节跳动电商一面

时间:70min

1. 介绍项目
2. ``select(), poll(), epoll()`` 的区别定义
3. Linux QPS怎么统计?
4. CSRF攻击原理、防范
5. 四次挥手、time_wait的意义
6. 进程和线程、Goroutine概念
7. Golang map的扩容
8. gRPC原理、几种模式?
9. MySQL聚簇索引和非聚簇索引
10. MySQL为何要用自增主键
11. 什么是B+树
12. 事务隔离机制、可重复读实现
13. 手撕LRU

0x02 校招

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
1、GMP调度模型
2、slice扩容原理
3、go函数传值或传引用
4、slice和array对比
5、GC 三色标记法 混合写屏障
6、源代码编译原理, 词法分析,语法分析,类型检查AST转换,SSA中间代码生成,机器代码生成 ,Golang编译过程概述
7、channel原理
8、nil切片和空切片区别
9、各种数据结构是否可以对比
10、defer原理
11、gin路由算法

1、mysql索引采用的数据结构, B+Tree,和BST,AVL,BTree,RBTree对比, 优化
2、mysql引擎, InnoDB和MyISAM,区别特点,如何选择,锁的类型,是否支持事务
4、mysql事务概念,隔离级别,并发问题, 四大特性,四种隔离级别,不同数据库默认的隔离级别,每种级别下存在的并发问题
5、索引最左匹配规则,联合查询是否能命中索引,最左匹配,遇范围查询停止匹配

1、tcp和udp区别

面向连接或非连接,安全性,速度,连接机制,多对多传输等

2、网络层和传输层区别

数据链路层:点-点

网络层:主机-主机

传输层:端口-端口

3、tcp头内容(20byte)

TCP协议详解(一):TCP头部结构[3]

4、tcp拥塞控制(几种解决方案)

慢开始,拥塞控制,快重传,快恢复

5、三次握手和四次挥手

采用这种机制的原因,优点,具体过程,标志位(SYN,ACK,FIN)

四次挥手具体作用,优点,如何解决意外情况

6、http和https

浏览器访问https的具体流程,主要是传输证书,https双方对称与非对称加密过程

7、TIME_WAIT作用

2MSL,具体原因和作用

8、Client长连接

keep-alive或heart-beat等解决措施

9、tcp粘包和拆包

粘包出现原因,如何精准拆包

10、Cookie和Session

浏览器的Cookie限制,Session的实现措施


1、内存管理

linux内存管理剖析[4]

2、线程调度

linux的进程线程及调度[5]

3、进程、线程、协程

内核态,用户态,上下文切换,栈空间管理

4、io多路复用

四种常见io模型,Reactor设计模式,epoll,select原理

5、死锁

死锁产生的四个条件,以及死锁的预防和恢复

五、算法

1、合并两个有序链表(合并k个的思路)

双指针遍历,合并k个即k个指针遍历,可在末尾设置MAX占位,以抽象空链表

2、数组中有2n+1个元素,其中n个元素出现两次,1个元素出现一次,以O(n),O(1)的时间空间复杂度找出出现一次的元素

不考虑时空,可使用map[element]count的方式,O(n)时间和O(1)空间,采用遍历异或的方式

3、找到数组中第k大的值

快排结束后剪枝,保留一半进行递归,或使用堆排,根据k的不同选择性构建大顶或小顶堆

4、给定一棵二叉树,求任意两个节点的最近公共祖先(包含节点本身)

头递归,取公共节点,简化可以分离为先求出根节点到任意节点的路径,再将两条路径求公共前缀。

5、给定一棵二叉树,认为两节点间距离为1,求二叉树内最长的节点间路径

路径最长的两个节点,必然为两个叶子结点。某个节点和子孙节点的距离即为深度差。递归存储叶子结点之间距离差,遍历求max,可dp简化。

6、反转循环链表,头部不动

设置cur,pre指针,整个链表指针全部反转即可

7、快排,堆排(思路)

堆排过程,构建时的整堆操作,时间复杂度

8、hash冲突

开发地址,链表,公共溢出,再hash

和B+Tree的共同思路,Java HashTable的简要原理(jdk8之后数组+链表+红黑树)

9、排序算法稳定性和时空复杂度

主要考察快排堆排,以及各种排序算法的稳定性,最坏时间复杂度,空间占用度,