通常我们去面试肯定会有些不错的Golang的面试题目的,所以总结下,让其他Golang开发者也可以查看到,同时也用来检测自己的能力和提醒自己的不足之处,欢迎大家补充和提交新的面试题目.
Golang面试问题汇总, 这里主要分为 Golang, Mysql, Redis, Network Protocol(网络协议), Linux,以及 Algorithm 和 Structrues.
Golang基础
题号 | 题目 |
---|---|
1 | Golang中除了加Mutex锁以外还有哪些方式安全读写共享变量 |
2 | 无缓冲Chan的发送和接收是否同步 |
3 | Golang并发机制以及它所使用的CSP并发模型 |
4 | Golang中常用的并发模型 |
5 | Go中对nil的Slice和空Slice的处理是一致的吗 |
6 | 协程和线程和进程的区别 |
7 | Golang的内存模型中为什么小对象多了会造成GC压力 |
8 | Go中数据竞争问题怎么解决 |
9 | 什么是channel,为什么它可以做到线程安全 |
10 | Golang垃圾回收算法 |
11 | GC的触发条件 |
12 | Go的GPM如何调度 |
13 | 并发编程概念是什么 |
14 | Go语言的栈空间管理是怎么样的 |
15 | Goroutine和Channel的作用分别是什么 |
16 | 怎么查看Goroutine的数量 |
17 | Go中的锁有哪些 |
18 | 怎么限制Goroutine的数量 |
19 | Channel是同步的还是异步的 |
20 | Goroutine和线程的区别 |
21 | Go的Struct能不能比较 |
22 | Go的defer原理是什么 |
23 | Go的select可以用于什么 |
24 | Go的Context包的用途是什么 |
25 | Go主协程如何等其余协程完再操作 |
26 | Go的Slice如何扩容 |
27 | Go中的map如何实现顺序读取 |
28 | Go中CAS是怎么回事 |
29 | Go中的逃逸分析是什么 |
30 | Go值接收者和指针接收者的区别 |
31 | Go的对象在内存中是怎样分配的 |
32 | 栈的内存是怎么分配的 |
33 | 堆内存管理怎么分配的 |
34 | Go中的defer函数使用下面的两种情况下结果是什么 |
35 | 在Go函数中为什么会发生内存泄露 |
36 | Go中new和make的区别 |
37 | G0的作用 |
38 | Go中的锁如何实现 |
39 | Go中的channel的实现 |
40 | Go中的map的实现 |
41 | Go中的http包的实现原理 |
42 | Goroutine发生了泄漏如何检测 |
43 | Go函数返回局部变量的指针是否安全 |
44 | Go中两个Nil可能不相等吗 |
45 | Goroutine和KernelThread之间是什么关系 |
46 | 为何GPM调度要有P |
47 | 如何在goroutine执行一半就退出协程 |
Mysql基础
题号 | 题目 |
---|---|
1 | Mysql索引用的是什么算法 |
2 | Mysql事务的基本要素 |
3 | Mysql的存储引擎 |
4 | Mysql事务隔离级别 |
5 | Mysql高可用方案有哪些 |
6 | Mysql中utf8和utf8mb4区别 |
7 | Mysql中乐观锁和悲观锁区别 |
8 | Mysql索引主要是哪些 |
9 | Mysql联合索引最左匹配原则 |
10 | 聚簇索引和非聚簇索引区别 |
11 | 如何查询一个字段是否命中了索引 |
12 | Mysql中查询数据什么情况下不会命中索引 |
13 | Mysql中的MVCC是什么 |
14 | Mvcc和Redolog和Undolog以及Binlog有什么不同 |
15 | Mysql读写分离以及主从同步 |
16 | InnoDB的关键特性 |
17 | Mysql如何保证一致性和持久性 |
18 | 为什么选择B+树作为索引结构 |
19 | InnoDB的行锁模式 |
20 | 哈希(hash)比树(tree)更快,索引结构为什么要设计成树型%E6%AF%94%E6%A0%91(tree)%E6%9B%B4%E5%BF%AB%EF%BC%8C%E7%B4%A2%E5%BC%95%E7%BB%93%E6%9E%84%E4%B8%BA%E4%BB%80%E4%B9%88%E8%A6%81%E8%AE%BE%E8%AE%A1%E6%88%90%E6%A0%91%E5%9E%8B) |
21 | 为什么索引的key长度不能太长 |
22 | Mysql的数据如何恢复到任意时间点 |
23 | Mysql为什么加了索引可以加快查询 |
24 | Explain命令有什么用 |
Redis基础
网络协议基础
题号 | 题目 |
---|---|
1 | TCP和UDP有什么区别 |
2 | TCP中三次握手和四次挥手 |
3 | TCP的LISTEN状态是什么 |
4 | 常见的HTTP状态码有哪些 |
5 | 301和302有什么区别 |
6 | 504和500有什么区别 |
7 | HTTPS和HTTP有什么区别 |
8 | Quic有什么优点相比Http2 |
9 | Grpc的优缺点 |
10 | Get和Post区别 |
11 | Unicode和ASCII以及Utf8的区别 |
12 | Cookie与Session异同 |
13 | Client如何实现长连接 |
14 | Http1和Http2和Grpc之间的区别是什么 |
15 | Tcp中的拆包和粘包是怎么回事 |
16 | TFO的原理是什么 |
17 | TIME_WAIT的作用 |
18 | 网络的性能指标有哪些 |
Linux基础
题号 | 题目 |
---|---|
1 | 异步和非阻塞的区别 |
2 | 虚拟内存作用是什么 |
3 | Linux查看端口占用和cpu负载 |
4 | Linux如何发送信号给一个进程 |
5 | 如何避免死锁 |
6 | 孤儿进程和僵尸进程区别 |
7 | 滑动窗口的概念以及应用 |
8 | Epoll和Select的区别 |
9 | 进程之间为什么要进行通信呢 |
10 | 输入PingIP后敲回车,发包前会发生什么 |
11 | 进程和进程间的通信方式区别和不同 |
12 | 如何查看二进制可执行文件引用的动态链接库 |
Algorithm和Structrues
题号 | 题目 |
---|---|
1 | 哪些排序算法是稳定的 |
2 | 给定一个二叉树,判断其是否是一个有效的二叉搜索树 |
3 | 排序算法 |
4 | 如何通过递归反转单链表 |
5 | 链表和数组相比有什么优缺点 |
6 | 通常一般会用到哪些数据结构 |
云原生
题号 | 题目 |
---|---|
1 | prometheus架构中有哪些组件以及各个组件有什么用 |
其他基础
题号 | 题目 |
---|---|
1 | 中间件原理 |
2 | Hash冲突有什么解决办法 |
3 | 微服务架构是什么样子的 |
4 | 分布式锁实现 |
5 | 负载均衡原理是什么 |
6 | 互斥锁和读写锁和死锁问题是怎么解决 |
7 | Etcd中的Raft一致性算法原理 |
8 | Git的merge跟rebase的区别 |
9 | 如何对一个20GB的文件进行排序 |
10 | LVS原理是什么 |
11 | 为什么需要消息队列 |
12 | 高并发系统的设计与实现 |
13 | Kafka的文件存储机制 |
14 | Kafka如何保证可靠性 |
15 | Kafka是如何实现高吞吐率的 |