├── .all-contributorsrc
├── .gitignore
├── Go
└── GC.md
├── LICENSE
├── MySQL
└── 索引.md
├── README.md
├── interview.adoc
├── redis
└── redis.md
├── 操作系统
└── 操作系统.md
├── 数据结构和算法
├── 二分法及其变种.md
└── 十大排序算法.md
├── 消息队列
└── kafka.md
├── 系统设计
└── 红包系统设计.md
├── 网络
└── TCP.md
├── 面试中
└── 面试中.md
└── 面试后
└── 面试选择.md
/.all-contributorsrc:
--------------------------------------------------------------------------------
1 | {
2 | "files": [
3 | "README.md"
4 | ],
5 | "imageSize": 100,
6 | "commit": false,
7 | "contributors": [
8 | {
9 | "login": "Janetyu",
10 | "name": "janetyu",
11 | "avatar_url": "https://avatars0.githubusercontent.com/u/21353642?v=4",
12 | "profile": "https://janetyu.github.io/",
13 | "contributions": [
14 | "maintenance"
15 | ]
16 | }
17 | ],
18 | "contributorsPerLine": 7,
19 | "projectName": "Interview",
20 | "projectOwner": "qcrao",
21 | "repoType": "github",
22 | "repoHost": "https://github.com",
23 | "skipCi": true
24 | }
25 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Binaries for programs and plugins
2 | *.exe
3 | *.exe~
4 | *.dll
5 | *.so
6 | *.dylib
7 |
8 | # Test binary, built with `go test -c`
9 | *.test
10 |
11 | # Output of the go coverage tool, specifically when used with LiteIDE
12 | *.out
13 |
14 | # Dependency directories (remove the comment below to include it)
15 | # vendor/
16 |
--------------------------------------------------------------------------------
/Go/GC.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/qcrao/Interview/052656a54f75a33898bb5fd1bdb40c3795e7f21e/Go/GC.md
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2020 qcrao
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/MySQL/索引.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/qcrao/Interview/052656a54f75a33898bb5fd1bdb40c3795e7f21e/MySQL/索引.md
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Interview
2 |
3 |
4 |
5 | [](#contributors-)
6 |
7 |
8 |
9 | 这是一份后端面试前必须看的内容列表,面前必看!
10 |
11 | 一方面,很多同学面试前不知道该如何准备,该看哪些内容。另一方面,不知道面试过程中会问哪些问题,该如何准确、有条理地回答。
12 |
13 | 本项目希望解决这个问题,当然是集合大家的力量一起完善。
14 |
15 | **面向面试学习也是一种比较高效的学习!**
16 |
17 | # 资料收集
18 |
19 | 持续收集好文,但未精读,未总结到本项目来:https://mubu.com/doc/2S6WGWVZGwV
20 |
21 | 你可以直接编辑这个 `幕布` 文件,但请记住:不要贪多,记录到这里的必须是你想在面试前再认真看的文章。
22 |
23 | 当你将幕布中的某篇文章拆解成了一个个问题,并且整理到了本项目的 `.md` 文件后,就可以从`幕布` 文件里删除了,但不用慌,这篇文章的链接并未删除,因为它被引用在了相关的问题下面了。
24 |
25 | > 为了避免给出的链接失效,我们会先收藏网页到云笔记,再给出云笔记中的分享链接。一次完整的面试,包括面试前的充分准备、面试中的随时总结、面试后的 offer 选择。本文着重于面试前的准备,从技术和非技术两方面展开。面试中、面试后则会给出一些 tips。
26 |
27 | # 如何参与
28 |
29 | 直接编辑各个分类下的 `.md` 文件
30 |
31 | # 内容是如何分类的
32 |
33 | 这是一个真正能帮助你准备面试的项目,所以分类以实用为主,不追求完备与严谨。例如我们并不需要先来一个“编程语言”分类,再在其下来一个“Go”分类,我们直接把 Go 放到一级目录。
34 |
35 | 这是因为我们在准备面试的时候,经常是按模块来准备的。例如,今天我要看看 Go 语言模块、今天我要看看 MySQL 相关的东西……
36 |
37 | 在一级目录下,就是一个个的 `.md` 文件了,这才是最终我们在准备面试的时候,以“一个单元”来完整地学习的内容。例如在“数据结构与算法”这个一级目录下,有一个“二分法及其变种”的 `.md` 文件,学习完这个文件,二分法相关的内容我就完全掌握了。
38 |
39 | 不追求一次分类就完全正确,在过程中不断小幅重构、不断修正,保证实用性。
40 |
41 | 在每个 `.md` 文件里,问题以一级标题出现,每个问题的回答模板是这样的:
42 |
43 | ```bash
44 | ## 要点
45 | ## 详解
46 | ## 参考文献
47 | ```
48 |
49 | - 要点:面试前一天复习的时候,我只用“背”这个就行了。
50 | - 详解:有“跑路”想法的时候,要开始准备面试了,仔细研究这个。
51 | - 参考文献:这个问题的回答参考了哪些文章(以 md 文字链的形式给出)、书籍(给出豆瓣链接)。
52 |
53 | > 最重要的一点:不追求分类的完备和严谨,一切以实用为主。过程中,小幅重构。
54 |
55 | # 一些小的 Tips:
56 |
57 | 1. 英文、数字和中文之间用空格隔开。如使用 smtp 协议。
58 | 2. 建议使用 `typora` 编辑,设置成`图片复制到 ./${filename}.assets 文件夹` 模式。
59 |
60 | # 学习交流
61 |
62 | 你可以加我的微信一起交流:raoquancheng1991。
63 |
64 | 也可以关注公众号,和更多的人一起学习:
65 |
66 | 
67 |
68 | # Contributors ✨
69 |
70 | Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 | This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!
91 |
--------------------------------------------------------------------------------
/interview.adoc:
--------------------------------------------------------------------------------
1 | = 面试前必看
2 | qcrao
3 | v0.1, 2020-01-27
4 | :toc: left
5 | :homepage: http://qcrao.com
6 |
7 |
8 | === Go 语言
9 | * Go 为什么这么快?
10 | * 聊聊 GPM?
11 |
12 | === 网络
13 | * 三次握手、四次挥手
14 | * 四层和七层网络模型及各层的作用
15 | . 七层网络模型:物理层,数据链路层,网络层,传输层,会话层,表示层,应用层
16 | . 四层网络模型:网络接口层(物理层+链路层),网络层,传输层,应用层(会话层+表示层+应用层)
17 | . 还有一个五层网络模型,即物理层,数据链路层,网络层,传输层,应用层
18 |
19 | [%header,cols=3*]
20 | |===
21 | |名称
22 | |作用
23 | |具体例子
24 |
25 | |物理层
26 | |传输 0 和 1 的电路信号
27 | |通过网线、光缆等传输 0/1 电路信号
28 |
29 | |数据链路层
30 | |将数据封装成帧,管理数据传输链路
31 | |通过以太网,打包一个个数据包(对应一组组电路信号),包含标头(指定本机的 mac 地址和目标 mac 地址)和数据,在子网内比较 mac 地址确定目标计算机
32 |
33 | |网络层
34 | |划分子网、ip 寻址、路由跳转
35 | |在一个子网内,是通过数据链路层的交换机和目标 mac 地址就可以通信;而不同的子网,则需要通过 ip 地址和路由器来实现跨子网通信
36 |
37 | |传输层
38 | |建立、管理端到端的连接
39 | |不同的应用占用不同的端口进行通信,通过 tcp/udp 协议在数据包中加入端口号,实现端口到端口的连接
40 |
41 | |应用层(将会话,表示,应用三层合成一层)
42 | |一系列为应用程序提供服务的协议
43 | |针对不同的应用,定义不同的协议,如邮件的 smtp,网页的 http
44 |
45 | |===
46 |
47 |
48 | === 操作系统
49 | * 零拷贝是什么原理?
50 | * fork 的流程?
51 | * select/poll/epoll 的区别?
52 |
53 | === 数据库
54 |
55 | === mq(答案:https://www.yuque.com/wuguoguoya/iq0d3v/anfu0e)
56 | * kafka
57 | . 项目中为何选择Kafka
58 | . 消息队列的优缺点
59 | . Kafka如何保证数据时序性
60 | . kafka如何保证数据不丢
61 | . 如何解决消息队列的延时以及过期失效问题?消息队列满了以后该怎么处理?有几百万消息持续积压几小时,说说怎么解决?
62 | . 如何设计一个消息队列(模仿kafka的实现,说出大致意思即可)
63 |
64 |
65 | ==== redis/codis
66 |
67 | ==== mysql
68 | * 事务的隔离级别有哪几种?
69 | * mvcc
70 | * B+树于B树的区别
71 | * 覆盖索引
72 | * 索引下沉
73 | * 事务两阶段提交 redolog 和binlog bufferpool 顺序
74 | * MYSQL的两种存储引擎区别(事务、锁级别等等),各自的适用场景
75 | * 聚集索引和非聚集索引
76 | * 索引的优缺点,什么时候使用索引,什么时候不能使用索引
77 | * 索引下沉
78 | * 事务两阶段提交 redolog 和binlog bufferpool 顺序
79 |
80 | === 中间件
81 |
82 | ==== etcd
83 | ==== nginx
84 | ==== lvs
85 |
86 | === 系统设计
87 |
88 | * 微信群红包的设计
89 | * 秒杀系统的设计
90 | * 抖音播放量、点赞量的设计
91 | * 朋友圈关注、粉丝的设计
92 | * 断点续传功能设计
93 |
94 | == 非技术
95 |
96 | === 一次准备,随时吹牛
97 | * 你有什么优点,缺点?
98 | * 项目里最成功的地方/失败的地方?
99 | * 印象最深的一次 debug
100 | * 这两年(上一家公司)有什么收获、成长?经验、教训?
101 | * 你有什么问题需要问我的?
102 |
103 | 一面:当初来这里是怎么考虑的
104 |
105 | 二面:如果过来,会给我安排做什么方向;对这块的规划,有什么难点和挑战
106 |
107 | 三面:小组怎么分工,对前景的理解
108 |
109 | HR:晋升体制、福利待遇、技术成长
110 |
111 | === 关于博客
112 |
113 | 面试前要过一遍内容,并且要自我回答如下几个问题:
114 |
115 | . 为什么写博客?
116 | . 对实际工作有什么帮助,例子?
117 | . 读 Go 源码有什么收获,体会?
118 | 杨文-《Go 夜读分享》:https://docs.google.com/presentation/d/1-OPi5xZRm-RSnpDrT-6SdGF6srccqejkhYJrxwf278Q/edit#slide=id.p
119 |
120 | 寻找开源软件的优点,不要盯着缺点,link:{https://mubu.com/document_image/f483a8db-3539-467c-acfd-eb0de11f3289-2793993.jpg}[caoz的梦呓]。比如曹大说的可以学到无锁化编程的技巧。
121 |
--------------------------------------------------------------------------------
/redis/redis.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/qcrao/Interview/052656a54f75a33898bb5fd1bdb40c3795e7f21e/redis/redis.md
--------------------------------------------------------------------------------
/操作系统/操作系统.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/qcrao/Interview/052656a54f75a33898bb5fd1bdb40c3795e7f21e/操作系统/操作系统.md
--------------------------------------------------------------------------------
/数据结构和算法/二分法及其变种.md:
--------------------------------------------------------------------------------
1 | # 如何找出最后一个与给定 key 相等的元素?
2 |
3 | ## 要点
4 |
5 | - 根据返回元素的位置(第一个还是最后一个),决定返回 left 索引还是 right 索引;
6 |
7 | - 在中间缩小判断范围的过程中,则根据要求排除不符合的元素,缩小 left 或 right 的范围。
8 |
9 |
10 | ## 详解
11 |
12 | ```c++
13 | int searchLastEqual(int *arr, int n, int key)
14 | {
15 | int left = 0, right = n-1;
16 | while(left<=right) {
17 | int mid = (left+right)/2;
18 | if(arr[mid] > key) right = mid - 1;
19 | else if(arr[mid] <= key) left = mid + 1;
20 | }
21 | if( right >= 0 && arr[right] == key) return right;
22 | return -1;
23 | }
24 | ```
25 |
26 | 要求最后一个相等,故返回 right 索引;
27 |
28 | 中间进行判断的时候,将 key 与中间元素相比,如果中间元素大,则要移动 right 索引;
29 |
30 | 最后,再判断 right 索引处的元素是否真的与 key 相等。
31 |
32 | ## 参考文献
33 |
34 | [二分法的变种](https://www.evernote.com/shard/s659/sh/a750d92f-1427-4cc1-ad0d-adff53e6f745/672c57d36f4b86ca157e23d659f71352)
--------------------------------------------------------------------------------
/数据结构和算法/十大排序算法.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/qcrao/Interview/052656a54f75a33898bb5fd1bdb40c3795e7f21e/数据结构和算法/十大排序算法.md
--------------------------------------------------------------------------------
/消息队列/kafka.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/qcrao/Interview/052656a54f75a33898bb5fd1bdb40c3795e7f21e/消息队列/kafka.md
--------------------------------------------------------------------------------
/系统设计/红包系统设计.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/qcrao/Interview/052656a54f75a33898bb5fd1bdb40c3795e7f21e/系统设计/红包系统设计.md
--------------------------------------------------------------------------------
/网络/TCP.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/qcrao/Interview/052656a54f75a33898bb5fd1bdb40c3795e7f21e/网络/TCP.md
--------------------------------------------------------------------------------
/面试中/面试中.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/qcrao/Interview/052656a54f75a33898bb5fd1bdb40c3795e7f21e/面试中/面试中.md
--------------------------------------------------------------------------------
/面试后/面试选择.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/qcrao/Interview/052656a54f75a33898bb5fd1bdb40c3795e7f21e/面试后/面试选择.md
--------------------------------------------------------------------------------