【超全golang面试题汇总+golang学习指南+golang知识图谱+入门成长路线】 一份涵盖大部分golang程序员所需掌握的核心知识。常用第三方库(MySQL、mq、es、Redis等)+机器学习库+算法库+游戏库+开源框架+自然语言处理nlp库+网络库+视频库+微服务框架+视频教程+音频音乐库+图形图片库+
# golangFamily
【超全golang面试题合集+golang学习指南+golang知识图谱+成长路线】 一份涵盖大部分golang程序员所需要掌握的核心知识。
[脑图持续不断更新中,在线查看地址](https://www.processon.com/view/link/5ff500aa1e08531de81e1288)
后续文章和内容会不断更新到 [github项目](https://github.com/xiaobaiTech/golangFamily) 中,欢迎关注。
大家好,我是小白。大家知道,我一直以来都是golang的忠实粉丝,在学习和参与面试的过程中遇到过很多golang的问题。
最近花了些时间整理了一下后端程序员成长路线和高频面试题,这是一份涵盖大部分后端程序员所需要掌握的**核心知识**。
这些面试题从**能力模型上对标字节资深后端开发**,因为字节主要使用GO语言,因此语言方面的面试题,主要是面向go相关的题目。但除了语言这块,其他中间件和工程能力相关的面试题,**对于所有后端开发都适用!!**
面试题集PDF还会**不断迭代更新**,后续最新版本都会在我的个人公众号「**小白debug**」里第一时间发布!
在公众号里回复【**面试**】即可获得!!
如果大家看完电子书,觉得内容还不错,强烈希望大家能在**微信公众号**里搜索关注,并**星标**我的公众号,第一时间获取最新更新内容!
还有**技术划水【交流群】**,点击公众号右下角【**联系我**】或**扫描以下二维码**,备注“**进群**”,欢迎大家进群交流~。
如果大家对网络基础感兴趣的话,公众号里也有非常多相关的文章,也欢迎关注收看哈。**图解网络相关**的文章,已经重新整理成一份的电子书。**在公众号内回复【网络】,就可以获得整理的PDF电子书。**
同时我也为公众号粉丝准备了一些学习资料,关注公众号并回复【**go**】、【**操作系统**】、【**网络**】即可获得相应学习资料!
并且,学习资料也会**不断更新**,后续会根据读者需求整理更多相关资源,有需要的读者也可以在公众号内留言。
### 最后
- 不满足于看八股文,可以尝试拿着岗位要求来进行ai押题。[押题宝](https://yatibao.debuger.top/)
- 基础不牢,缺乏实战项目,**想快速成为中大厂Go/Java工程师**?后端训练营了解一下。[后端训练营介绍文档](https://bds8bsueoz.feishu.cn/docx/Soo1dyKwJovEjcx95RbcixCqnmh)
- 欢迎大家访问我的**博客** [点这里 https://xiaobaidebug.top](https://xiaobaidebug.top/)。
- 欢迎大家访问我的**B站** [点这里](https://space.bilibili.com/302188068) 。
- 欢迎大家访问我新做的**工具站点** [图片翻译photo-translate](https://www.photo-translate.top) 。
- 在公众号内回复【**面试**】,可以获得整理的**golang面试PDF电子书**,适合快速备战面试查漏补缺。
- 在公众号内回复【**网络**】,可以获得整理的**图解PDF电子书**,适合巩固基础。
- 在公众号内回复【**视频**】,可以获得整理的有趣好玩的**视频教程**,适合小白上路。
# 目录(善用Ctrl+F)
- 基础入门
- 新手
- [Golang开发新手常犯的50个错误](https://blog.csdn.net/gezhonglei2007/article/details/52237582)
- 数据类型
- [连nil切片和空切片一不一样都不清楚?那BAT面试官只好让你回去等通知了。](https://mp.weixin.qq.com/s/cp0xed7fC9uU0te00J8GIQ)
- [golang面试题:字符串转成byte数组,会发生内存拷贝吗?](https://mp.weixin.qq.com/s/Iol3UnphVtBwGyLd-tHz9w)
- [golang面试题:翻转含有中文、数字、英文字母的字符串](https://mp.weixin.qq.com/s/ayfn4LUy3MHJy37hdRlo3Q)
- [golang面试题:拷贝大切片一定比小切片代价大吗?](https://mp.weixin.qq.com/s/VaM4yJXHYyDyRY0XHIyhpQ)
- map不初始化使用会怎么样
- map不初始化长度和初始化长度的区别
- map承载多大,大了怎么办
- map的iterator是否安全?能不能一边delete一边遍历?
- 字符串不能改,那转成数组能改吗,怎么改
- 怎么判断一个数组是否已经排序
- 普通map如何不用锁解决协程安全问题
- array和slice的区别
- [golang面试题:json包变量不加tag会怎么样?](https://mp.weixin.qq.com/s/vlE0KVOCt_a4nxP_1ar4Ow)
- [golang面试题:reflect(反射包)如何获取字段tag?为什么json包不能导出私有变量的tag?](https://mp.weixin.qq.com/s/IB_hAzxBbAIYdLV7ZIN-sw)
- 零切片、空切片、nil切片是什么
- slice深拷贝和浅拷贝
- map触发扩容的时机,满足什么条件时扩容?
- map扩容策略是什么
- 自定义类型切片转字节切片和字节切片转回自动以类型切片
- make和new什么区别
- slice ,map,chanel创建的时候的几个参数什么含义
- slice,len,cap,共享,扩容
- 线程安全的map怎么实现
- go slice 和 array 区别
- go struct能不能比较?
- map如何顺序读取?
- go中怎么实现set
- map 的扩容机制是什么?
- 使用值为 nil 的 sice、map 会发生什么?
- Golang 有没有 this 指针?
- Golang 语言中局部变量和全局变量的缺省值是什么
- Golang 中的引用类型包含哪些?
- 使用range 迭代 map 是有序的吗?
- slice 的扩容机制是什么?
- Golang 中指针运算有哪些?
- 类型的值可以修改吗?
- 解析 JSON 数据时,默认将数值当做哪种类型
- array 类型的值作为函数参数是引用传递还是值传递?
- 流程控制
- [昨天那个在for循环里append元素的同事,今天还在么?](https://mp.weixin.qq.com/s/DOkdl9B3op4US_qHBLUNNw)
- [golang面试官:for select时,如果通道已经关闭会怎么样?如果只有一个case呢?](https://mp.weixin.qq.com/s/TuuLYgvIkwREDLkALqTMXA)
- go defer(for defer)
- select可以用于什么?
- context包的用途?
- select 可以用于实现哪些功能?
- 在循杯内执行 defer 语句会发生什么?
- switch 中如何强制执行下一个 case 代码块?
- 如何从 panic 中恢复?
- 进阶
- 包管理
[学go mod就够了!](https://studygolang.com/articles/27293)
- 优化
- [golang面试题:怎么避免内存逃逸?](https://mp.weixin.qq.com/s/m4pqhfrEclG0vswedkCQ_Q)
- [golang面试题:简单聊聊内存逃逸?](https://mp.weixin.qq.com/s/eqWFbwDcrL3zquEcGLgBGQ)
- [给大家丢脸了,用了三年golang,我还是没答对这道内存泄漏题](https://mp.weixin.qq.com/s/9CZkq-Yc75VDwqjwriZYXA)
- 内存碎片化问题
- chan相关的goroutine泄露的问题
- string相关的goroutine泄露的问题
- [你一定会遇到的内存回收策略导致的疑似内存泄漏的问题](https://colobu.com/2019/08/28/go-memory-leak-i-dont-think-so/)
- sync.Pool的适用场景
- go1.13sync.Pool对比go1.12版本优化点
- 并发编程
- [golang面试题:对已经关闭的的chan进行读写,会怎么样?为什么?](https://mp.weixin.qq.com/s/6cgrWfNBLiU8bAwmJY7pGg)
- [golang面试题:对未初始化的的chan进行读写,会怎么样?为什么?](https://xiaobaidebug.top/2020/06/11/golang%E9%9D%A2%E8%AF%95%E9%A2%98/golang%E9%9D%A2%E8%AF%95%E9%A2%98%EF%BC%9A%E5%AF%B9%E6%9C%AA%E5%88%9D%E5%A7%8B%E5%8C%96%E7%9A%84%E7%9A%84chan%E8%BF%9B%E8%A1%8C%E8%AF%BB%E5%86%99%EF%BC%8C%E4%BC%9A%E6%80%8E%E4%B9%88%E6%A0%B7%EF%BC%9F%E4%B8%BA%E4%BB%80%E4%B9%88%EF%BC%9F/)
- sync.map 的优缺点和使用场景
- sync.Map的优化点
- 主协程如何等其余协程完再操作
- 有缓存的channel和没有缓存的channel区别是什么?
- 协程通信方式有哪些?
- channel底层实现
- 读写锁底层是怎么实现的?
- 请你说说golang的CSP思想
- channel 是怎么保证线程安全?
- 高级特性
- [golang面试题:能说说uintptr和unsafe.Pointer的区别吗?](https://mp.weixin.qq.com/s?__biz=MzkxNTU5MjE0MQ==&mid=2247492750&idx=1&sn=aafed552e01a3ebb61233f318bc9d6dc&source=41#wechat_redirect)
- [golang 面试题:reflect(反射包)如何获取字段 tag?为什么 json 包不能导出私有变量的 tag?](https://mp.weixin.qq.com/s?__biz=MzkxNTU5MjE0MQ==&mid=2247492754&idx=1&sn=9fb4360da097c81fe733ba48d3aca8a7&source=41#wechat_redirect)
- 协程和线程的差别
- 垃圾回收的过程是怎么样的?
- 什么是写屏障、混合写屏障,如何实现?
- 开源库里会有一些类似下面这种奇怪的用法:`var _ io.Writer = (*myWriter)(nil)`,是为什么?
- [GMP模型](https://zboya.github.io/post/go_scheduler/?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io)
- [动图图解,GMP里为什么要有P](https://mp.weixin.qq.com/s?__biz=MzkxNTU5MjE0MQ==&mid=2247492776&idx=1&sn=913a442965df4af86182f29fc6b8834d&source=41#wechat_redirect)
- 协程之间是怎么调度的
- gc的stw是怎么回事
- 利用golang特性,设计一个QPS为500的服务器
- 为什么gc会让程序变慢
- 开多个线程和开多个协程会有什么区别
- 两个interface{} 能不能比较
- 必须要手动对齐内存的情况
- [go栈扩容和栈缩容,连续栈的缺点](https://segmentfault.com/a/1190000019570427)
- golang怎么做代码优化
- [golang隐藏技能:怎么访问私有成员](https://www.jianshu.com/p/7b3638b47845)
- 协程可以自己主动让出 CPU 吗?
- 断言时会发生拷贝吗
- 接口是怎么实现的?
- 协程与进程,线程的区别是什么?协程有什么优势?
- 为什么小对象多了会造成 gc 压力?
- 一个协程能保证绑定在一个内核线程上吗?
- 闭包怎么实现的,闭包的主要应用场景
- 两次 GC 周期重叠会引发什么问题,GC 触发机制是什么样的?
- Goroutinue 什么时候会被挂起?
- Data Race 问题怎么检测?怎么解决?
- Golang 触发异常的场景有哪些?
- net/http包中client如何实现长连接?
- net/http怎么做连接池和长链接?
- [golang进阶面试题](https://golangguide.top/golang/%E9%9D%A2%E8%AF%95%E9%A2%98/2.Go%E8%BF%9B%E9%98%B6.html)
- 问题排查
- [trace](https://mp.weixin.qq.com/s?__biz=MzA4ODg0NDkzOA==&mid=2247487157&idx=1&sn=cbf1c87efe98433e07a2e58ee6e9899e&source=41#wechat_redirect)
- [pprof](https://mp.weixin.qq.com/s/d0olIiZgZNyZsO-OZDiEoA)
- 什么是 goroutine 泄漏?
- 当go服务部署到线上了,发现有内存泄露,该怎么处理
- 源码阅读
- [sync.map](https://qcrao.com/2020/05/06/dive-into-go-sync-map/)
- net/http
- [i/o timeout , 希望你不要踩到这个net/http包的坑](https://mp.weixin.qq.com/s/7Fl5MuCl-G6wIQQiAqLAKA)
- [mutex](https://mp.weixin.qq.com/s/MntwgIJ2ynOAdwnypWUjZw)
- [channel](https://draveness.me/golang/docs/part3-runtime/ch06-concurrency/golang-channel/?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io)
- [context](https://draveness.me/golang/docs/part3-runtime/ch06-concurrency/golang-context/)
- [select实现原理](https://mp.weixin.qq.com/s/9-eLJqYZrOpNLoiTGpBrKA)
- main函数背后的启动过程
- [内存管理](https://mp.weixin.qq.com/s?__biz=Mzg2MDU1Mjc3MQ==&mid=2247489860&idx=1&sn=2d3fa235f6768ad5a0c820b6241b9e99&source=41#wechat_redirect)
- [GC垃圾回收](https://segmentfault.com/a/1190000020086769)
- [timer](https://pengrl.com/p/62835/)
- 汇编
- [汇编入门](https://juejin.cn/post/6844903929713524744)
- [推荐书籍](#推荐书籍)
- [视频教程](#视频教程)
- 实践常用工具
- [mysql建表语句转golang struct](https://marketplace.visualstudio.com/items?itemName=wandecilenio-martins.ddl-2-go-struct)
- [json转golang struct](https://oktools.net/json2go)
- [toml转golang struct](https://xuri.me/toml-to-go/)
- [yaml转golang struct](https://yaml.to-go.online/)
- 图解网络基础
- [漫画图解HTTP知识点+面试题](https://golangguide.top/%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%9F%BA%E7%A1%80/%E7%BD%91%E7%BB%9C%E5%9F%BA%E7%A1%80/%E6%A0%B8%E5%BF%83%E7%9F%A5%E8%AF%86%E7%82%B9/%E7%A1%AC%E6%A0%B8%EF%BC%81%E6%BC%AB%E7%94%BB%E5%9B%BE%E8%A7%A3HTTP%E7%9F%A5%E8%AF%86%E7%82%B9_%E9%9D%A2%E8%AF%95%E9%A2%98.html)
- [TCP粘包 数据包:我只是犯了每个数据包都会犯的错](https://golangguide.top/%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%9F%BA%E7%A1%80/%E7%BD%91%E7%BB%9C%E5%9F%BA%E7%A1%80/%E6%A0%B8%E5%BF%83%E7%9F%A5%E8%AF%86%E7%82%B9/TCP%E7%B2%98%E5%8C%85%EF%BC%81%E6%95%B0%E6%8D%AE%E5%8C%85%EF%BC%9A%E6%88%91%E5%8F%AA%E6%98%AF%E7%8A%AF%E4%BA%86%E6%AF%8F%E4%B8%AA%E6%95%B0%E6%8D%AE%E5%8C%85%E9%83%BD%E4%BC%9A%E7%8A%AF%E7%9A%84%E9%94%99%EF%BC%8C%E7%A1%AC%E6%A0%B8%E5%9B%BE%E8%A7%A3.html)
- [30张图带你搞懂!路由器,集线器,交换机,网桥,光猫有啥区别?](https://golangguide.top/%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%9F%BA%E7%A1%80/%E7%BD%91%E7%BB%9C%E5%9F%BA%E7%A1%80/%E6%A0%B8%E5%BF%83%E7%9F%A5%E8%AF%86%E7%82%B9/%E7%A1%AC%E6%A0%B8%E5%9B%BE%E8%A7%A3%EF%BC%8130%E5%BC%A0%E5%9B%BE%E5%B8%A6%E4%BD%A0%E6%90%9E%E6%87%82%EF%BC%81%E8%B7%AF%E7%94%B1%E5%99%A8%EF%BC%8C%E9%9B%86%E7%BA%BF%E5%99%A8%EF%BC%8C%E4%BA%A4%E6%8D%A2%E6%9C%BA%EF%BC%8C%E7%BD%91%E6%A1%A5%EF%BC%8C%E5%85%89%E7%8C%AB%E6%9C%89%E5%95%A5%E5%8C%BA%E5%88%AB%EF%BC%9F.html)
- [既然IP层会分片,为什么TCP层也还要分段?](https://mp.weixin.qq.com/s/7kGFOOIV7-j-44U5RUcLRQ)
- [断网了,还能ping通 127.0.0.1 吗?为什么?](https://mp.weixin.qq.com/s?__biz=MzkxNTU5MjE0MQ==&mid=2247492808&idx=1&sn=491074589ccbd2e972a9ad216c39b46d&source=41#wechat_redirect)
- [连接一个 IP 不存在的主机时,握手过程是怎样的?](https://mp.weixin.qq.com/s?__biz=MzkxNTU5MjE0MQ==&mid=2247492837&idx=1&sn=d85cb3a7e86ab244247f52e282b93954&source=41#wechat_redirect)
- [动图图解!代码执行send成功后,数据就发出去了吗?](https://mp.weixin.qq.com/s?__biz=MzkxNTU5MjE0MQ==&mid=2247492863&idx=1&sn=67009c9e4387c0b789304af9e77cebec&source=41#wechat_redirect)
- [活久见!TCP两次挥手,你见过吗?那四次握手呢?](https://mp.weixin.qq.com/s?__biz=MzkxNTU5MjE0MQ==&mid=2247492883&idx=1&sn=cc526b3a34c30def4d655f05506c2826&source=41#wechat_redirect)
- [动图图解!收到RST,就一定会断开TCP连接吗?](https://mp.weixin.qq.com/s?__biz=MzkxNTU5MjE0MQ==&mid=2247492909&idx=1&sn=a0cdbe6e7497132f96c0d83716888cc5&source=41#wechat_redirect)
- [动图图解!没有accept,能建立TCP连接吗?]([https://mp.weixin.qq.com/s/n17NjGRab1u5eXkOCro1gg](https://mp.weixin.qq.com/s?__biz=MzkxNTU5MjE0MQ==&mid=2247492926&idx=1&sn=b6d254b5aa11ffaae093c919c1b1fab8&source=41#wechat_redirect))
- [来了来了!小白图解网络电子书和博客都来啦!](https://mp.weixin.qq.com/s?__biz=MzkxNTU5MjE0MQ==&mid=2247492941&idx=1&sn=47c95e0ec6bf3c679073a8fa6f1576fc&source=41#wechat_redirect)
- HTTP 是无状态的吗?需要保持状态的场景应该怎么做?
- 粘包如何解决
- RestFul 是什么?RestFul 请求的 URL 有什么特点?
- 一次url访问会经历哪些过程
- TCP 三次握手以及四次挥手的流程。为什么需要三次握手以及四次挥手?
- TCP的拥塞控制具体是怎么实现的?UDP有拥塞控制吗?
- 是否了解中间人劫持原理
- TCP 与 UDP 在网络协议中的哪一层,他们之间有什么区别?
- HTTP 与 HTTPS 有哪些区别?
- select和epoll区别
- TCP 如何实现数据有序性?
- TCP长连接和短连接有那么不同的使用场景?
- TIME_WAIT时长,为什么?
- 什么是零拷贝?
- HTTP 简述 HTTP 的 keepalive 的原理和使用场景
- Cookie 和 Session 的关系和区别是什么?
- DNS 查询服务器的基本流程是什么?DNS 劫持是什么?
- libevent结构,内部实现
- 简述对称与非对称加密的概念
- epoll中的ET和LT模式
- JWT 的原理和校验机制
- TCP 怎么保证可靠传输?
- 介绍下proactor和reactor
- Accept发生在三次握手哪个阶段
- RPC 的调用过程
- tcp的可靠性体现在哪里
- 如何解决 TCP 传输丢包问题?
- 什么是 ARP 协议?简述其使用场景
- http和https区别
- DDOS 攻击原理,如何防范它?
- 如何防止传输内容被篡改?
- 介绍下滑动窗口
- 三次握手四次握手详细过程,越详细越好
- 什么是中间人攻击?如何防止攻击?
- TCP 半连接发生场景
- reactor的组成
- udp包长度
- IP为什么要分片
- OSI 七层模型,TCP,IP 属于哪一层?
- 数据包乱序会处理?
- 什么是 SYN flood,如何防止这类攻击?
- WebSocket 是如何进行传输的
- 为什么需要序列化?有什么序列化的方式?
- 有chunked的时候contentlength是什么样子
- 如何设计一个可靠的udp
- TCP 中常见的拥塞控制算法有哪些?
- 如何设置非阻塞
- 什么是跨域,什么情况下会发生跨域请求?
- Udp的接收缓冲区和发送缓冲区和tcp的区别
- 什么时候需要TCP四次挥手?
- traceroute 有什么作用?
- HTTP 的方法有哪些?
- TIME_WAIT危害
- select什么情况返回0
- 半连接在哪个阶段
- TCP 的 keepalive 了解吗?说一说它和 HTTP 的 keepalive 的区别?
- 简述常见的 HTTP 状态码的含义(30从系统层面上,UDP 如何保证尽量可靠?
- 指针与引用的区别
- iPv4 和 iPv6 的区别
- 项目中说用到线程池,开多大,为什么运用线程池?
- 如何设计 API 接口使其实现幂等性?
- TCP 的 TIME_WAIT 和 CLOSE_WAIT
- HTTP 报文头部的组成结构
- RestFul 与