├── .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 | [![All Contributors](https://img.shields.io/badge/all_contributors-1-orange.svg?style=flat-square)](#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 | ![QR](https://user-images.githubusercontent.com/7698088/57526048-ebb2e280-735e-11e9-98dc-4a2cb060d0df.png) 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 | 79 | 80 | 81 | 82 |

janetyu

🚧
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 --------------------------------------------------------------------------------