通常我们去面试肯定会有些不错的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 Redis的数据结构及使用场景
2 Redis持久化的几种方式
3 Redis的LRU具体实现
4 单线程的Redis为什么快
5 Redis的数据过期策略
6 如何解决Redis缓存雪崩问题
7 如何解决Redis缓存穿透问题
8 Redis并发竞争key如何解决
9 Redis的主从模式和哨兵模式和集群模式区别
10 Redis有序集合zset底层怎么实现的
11 跳表的查询过程是怎么样的,查询和插入的时间复杂度

网络协议基础

题号 题目
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是如何实现高吞吐率的