跳至主要內容

学习路线

小白debug大约 23 分钟

学习路线

【超全golang面试题合集+golang学习指南+golang知识图谱+成长路线】 一份涵盖大部分golang程序员所需要掌握的核心知识。

公众号公众号投稿投稿博客

脑图持续不断更新中,在线查看地址open in new window
后续文章和内容会不断更新到 github项目open in new window 中,欢迎关注。


大家好,我是小白。大家知道,我一直以来都是golang的忠实粉丝,在学习和参与面试的过程中遇到过很多golang的问题。

最近花了些时间整理了一下后端程序员成长路线和高频面试题,这是一份涵盖大部分后端程序员所需要掌握的核心知识

这些面试题从能力模型上对标字节资深后端开发,因为字节主要使用GO语言,因此语言方面的面试题,主要是面向go相关的题目。但除了语言这块,其他中间件和工程能力相关的面试题,对于所有后端开发都适用!!

面试题集PDF还会不断迭代更新,后续最新版本都会在我的个人公众号「小白debug」里第一时间发布!

在公众号里回复【面试】即可获得!!

如果大家看完电子书,觉得内容还不错,强烈希望大家能在微信公众号里搜索关注,并星标我的公众号,第一时间获取最新更新内容!

还有技术划水【交流群】,点击公众号右下角【联系我】或扫描以下二维码,备注“进群”,欢迎大家进群交流~。

如果大家对网络基础感兴趣的话,公众号里也有非常多相关的文章,也欢迎关注收看哈。图解网络相关的文章,已经重新整理成一份的电子书。在公众号内回复【网络】,就可以获得整理的PDF电子书。

同时我也为公众号粉丝准备了一些学习资料,关注公众号并回复【go】、【操作系统】、【网络】即可获得相应学习资料!
并且,学习资料也会不断更新,后续会根据读者需求整理更多相关资源,有需要的读者也可以在公众号内留言。



最后

目录(善用Ctrl+F)

  • 基础入门

  • 进阶

  • 图解网络基础

    • 漫画图解HTTP知识点+面试题
    • TCP粘包 数据包:我只是犯了每个数据包都会犯的错
    • 30张图带你搞懂!路由器,集线器,交换机,网桥,光猫有啥区别?
    • 既然IP层会分片,为什么TCP层也还要分段?
    • 断网了,还能ping通 127.0.0.1 吗?为什么?
    • 连接一个 IP 不存在的主机时,握手过程是怎样的?
    • 动图图解!代码执行send成功后,数据就发出去了吗?
    • 活久见!TCP两次挥手,你见过吗?那四次握手呢?
    • 动图图解!收到RST,就一定会断开TCP连接吗?
    • 动图图解!没有accept,能建立TCP连接吗?
    • 来了来了!小白图解网络电子书和博客都来啦!open in new window
    • 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 与 RPC 的区别是什么?RestFul 的优点在哪里?
    • 从输入 URL 到展现页面的全过程
    • 什么是 TCP 粘包和拆包?
    • HTTP 中 GET 和 POST 区别
    • 讲一下拥塞控制和流量控制
    • TCP 协议的延迟 ACK 和累计应答
    • TCP 挥手时出现大量 CLOSE_WAIT 或 TIME_WAIT 怎么解决?
    • ARP协议工作流程
    • tcp与udp的区别以及应用场景
    • HTTPS 的加密与认证过程
    • TCP 中 SYN 攻击是什么?如何防止?
    • HTTP 短链接与长链接的区别
    • TCP 的报文头部结构
    • http长连接与短连接的区别
    • TCP 滑动窗口以及重传机制
    • seq为1000,发送了1000个数据,下一个seq是多少?
    • chunked块了解?介绍下
    • BGP 协议和 OSPF 协议的区别
    • 简述在四层和七层网络协议中负载均衡的原理
    • http协议格式,几种方法,功能是什么
    • syn如果丢了,重传多少次
    • epoll可读情况有哪些
  • 操作系统

    • 创建线程有多少种方式?
    • 如何调试服务器内存占用过高的问题?
    • 简述操作系统如何进行内存管理
    • 简述创建进程的流程
    • 简述操作系统中 malloc 的实现原理
    • 简述僵尸进程和孤儿进程及其危害和处理
    • 两个线程交替打印一个共享变量
    • 进程通信中的管道实现原理是什么?
    • 简述同步与异步的区别,阻塞与非阻塞的区别
    • malloc 创建的对象在堆还是栈中?
    • 死锁产生的条件、死锁避免方法
    • 进程的三状态模型、五状态模型、七状态模型
    • 什么情况下,进程会进行切换?
    • Linux 系统态与用户态,什么时候会进入系统态?
    • Linux 下如何查看端口被哪个进程占用?
    • 共享内存是如何实现的?
    • 进程有多少种状态?
    • 线程间有哪些通信方式?
    • Linux 下如何排查 CPU 以及 内存占用过多?
    • 操作系统中,虚拟地址与物理地址之间如何映射?
    • CPU L1, L2缓存是什么
    • 信号量是如何实现的?
    • 什么时候会由用户态陷入内核态?
    • Linux 如何查看实时的滚动日志?
    • Linux 进程调度的算法
    • 简述分页与分段,分页与分段的区别
    • Linux 虚拟内存的页面置换算法
    • Linux 中虚拟内存和物理内存有什么区别?有什么优点?
    • traceroute 命令的原理
    • 操作系统是通过什么机制触发系统调用的?
    • Linux 零拷贝的原理
    • 系统调用的过程是怎样的?
    • Linux 的 IO模型有哪些
    • 简述自旋锁与互斥锁的使用场景
    • 多线程和多进程的区别是什么?
    • 简述几个常用的 Linux 命令以及他们的功能
    • 进程空间从高位到低位都有些什么?
    • 简述缓冲区溢出及其危害
    • mmap 的使用场景以及原理
    • BIO、NIO 有什么区别?怎么判断写文件时 Buffer 已经写满?
    • 线程有多少种状态,状态之间如何转换
    • 简述操作系统中的缺页中断
    • Linux 下如何查看 CPU 荷载,正在运行的进程,某个端口对应的进程?
    • 进程和线程之间有什么区别?
    • 进程间有哪些通信方式?
    • 为什么进程切换慢,线程切换快?
    • 线程从进程继承了哪些资源?线程独享哪些资源?
    • Linux 页大小是多少?
    • select, poll, epoll 的使用场景以及区别,epoll 中水平触发以及边缘触发有什么不同?
  • 数据库

    • 数据库三大范式是什么
    • mysql有关权限的表都有哪几个
    • MySQL的binlog有有几种录入格式?分别有什么区别?
    • mysql有哪些数据类型
    • MySQL存储引擎MyISAM与InnoDB区别
    • MyISAM索引与InnoDB索引的区别?
    • InnoDB引擎的4大特性
    • 存储引擎选择
    • 什么是索引?
    • 索引有哪些优缺点?
    • 索引使用场景(重点)
    • 索引有哪几种类型?
    • 索引的数据结构(b树,hash)
    • 索引的基本原理
    • 索引算法有哪些?
    • 索引设计的原则?
    • 创建索引的原则
    • 创建索引的三种方式,删除索引
    • 创建索引时需要注意什么?
    • 使用索引查询一定能提高查询的性能吗?为什么
    • 百万级别或以上的数据如何删除
    • 前缀索引
    • 什么是最左前缀原则?什么是最左匹配原则
    • B树和B+树的区别
    • 使用B树的好处
    • 使用B+树的好处
    • Hash索引和B+树所有有什么区别或者说优劣呢?
    • 数据库为什么使用B+树而不是B树
    • B+树在满足聚簇索引和覆盖索引的时候不需要回表查询数据,
    • 什么是聚簇索引?何时使用聚簇索引与非聚簇索引
    • 非聚簇索引一定会回表查询吗?
    • 联合索引是什么?为什么需要注意联合索引中的顺序?
    • 什么是数据库事务?
    • 事物的四大特性(ACID)介绍一下?
    • 什么是脏读?幻读?不可重复读?
    • 什么是事务的隔离级别?MySQL的默认隔离级别是什么?
    • 对MySQL的锁了解吗
    • 隔离级别与锁的关系
    • 按照锁的粒度分数据库锁有哪些?锁机制与InnoDB锁算法
    • 从锁的类别上分MySQL都有哪些锁呢?像上面那样子进行锁定岂不是有点阻碍并发效率了
    • MySQL中InnoDB引擎的行锁是怎么实现的?
    • InnoDB存储引擎的锁的算法有三种
    • 什么是死锁?怎么解决?
    • 数据库的乐观锁和悲观锁是什么?怎么实现的?
    • 为什么要使用视图?什么是视图?
    • 视图有哪些特点?
    • 视图的使用场景有哪些?
    • 视图的优点
    • 视图的缺点
    • 什么是游标?
    • 存储过程与函数
    • 什么是存储过程?有哪些优缺点?
    • 什么是触发器?触发器的使用场景有哪些?
    • MySQL中都有哪些触发器?
    • 常用SQL语句
    • SQL语句主要分为哪几类
    • 超键、候选键、主键、外键分别是什么?
    • SQL 约束有哪几种?
    • 六种关联查询
    • 什么是子查询
    • 子查询的三种情况
    • mysql中 in 和 exists 区别
    • varchar与char的区别
    • varchar(50)中50的涵义
    • int(20)中20的涵义
    • mysql为什么这么设计
    • mysql中int(10)和char(10)以及varchar(10)的区别
    • FLOAT和DOUBLE的区别是什么?
    • drop、delete与truncate的区别
    • UNION与UNION ALL的区别?
    • 如何定位及优化SQL语句的性能问题?创建的索引有没有被使用到?或者说怎么才可以知道这条语句运行很慢的原因?
    • SQL的生命周期?
    • 大表数据查询,怎么优化
    • 超大分页怎么处理?
    • mysql 分页怎么实现
    • 慢查询日志怎么看
    • 关心过业务系统里面的sql耗时吗?统计过慢查询吗?对慢查询都怎么优化过?
    • 为什么要尽量设定一个主键?
    • 主键使用自增ID还是UUID?
    • 字段为什么要求定义为not null?
    • 如果要存储用户的密码散列,应该使用什么字段进行存储?
    • 优化查询过程中的数据访问
    • 优化长难的查询语句
    • 优化特定类型的查询语句
    • 优化关联查询
    • 优化子查询
    • 优化LIMIT分页
    • 优化UNION查询
    • 优化WHERE子句
    • 数据库优化
    • 为什么要优化
    • 数据库结构优化
    • MySQL数据库cpu飙升到500%的话他怎么处理?
    • 大表怎么优化?某个表有近千万数据,CRUD比较慢,如何优化?分库分表了是怎么做的?分表分库了有什么问题?有用到中间件么?他们的原理知道么?
    • 垂直分表适用场景
    • 水平分表适用场景
    • 水平切分的缺点
    • MySQL的复制原理以及流程
    • 读写分离有哪些解决方案?
    • 备份计划,mysqldump以及xtranbackup的实现原理
    • 数据表损坏的修复方式有哪些?
  • 骚话连篇

开源书籍

书籍名推荐理由
Go palygroundopen in new window不用搭建本地 Go 环境,在线就编写 Go 的代码
Go实战开发open in new window作者是著名的 Go 开源项目 beego 的作者,他的最佳实践非常值得阅读
Go Web 编程open in new window跟前面一本书作者是同一位,讲的是web开发
Go语言标准库open in new window对标准库的介绍
Go入门指南open in new window比较适合新手,内容相对基础一些
Go语言圣经open in new window书如其名
Go语言中文网open in new window找对圈子,学的更快
菜鸟教程open in new window这个网站非常适合快速上手某门语言
Go语言高级编程open in new window内容适合进阶
go语言原本open in new window欧神出品,虽然号称进度只有9.9%/100%,但不妨碍它的优秀,值得一看
golang设计模式open in new window设计模式 Golang实现,《研磨设计模式》的golang实现
Go语言四十二章经open in new window可以对比查漏补缺



相关推荐