From a32610d5033c59e97d99738165087f91bef1e136 Mon Sep 17 00:00:00 2001 From: yinkanglong_lab Date: Tue, 6 Apr 2021 00:36:54 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9F=BA=E7=A1=80=E7=9F=A5=E8=AF=86=E5=A4=8D?= =?UTF-8?q?=E4=B9=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 工作日志/2021年2月27日-三月份计划.md | 43 +++--- 工作日志/2021年4月1日-今日计划.md | 2 +- 工作日志/2021年4月6日-今日计划.md | 8 ++ 操作系统/2.4 进程通信.md | 4 +- 操作系统/3 处理机管理.md | 10 +- 操作系统/4.3 分页存储管理.md | 169 +++++++++-------------- 操作系统/image/2021-04-06-00-17-39.png | Bin 0 -> 10772 bytes 操作系统/image/2021-04-06-00-21-08.png | Bin 0 -> 25693 bytes 操作系统/image/2021-04-06-00-22-23.png | Bin 0 -> 21264 bytes 操作系统/附录3 五种IO模型.md | 20 +-- 操作系统/附录8 同步异步与阻塞非阻塞.md | 10 +- 操作系统/面试问题整理.md | 119 ++++++++++++++++ 数据库/y面试问题整理.md | 22 +++ 数据结构/6.3 平衡二叉树.md | 13 +- 数据结构/6.4 红黑树.md | 7 +- 数据结构/6.5 B树.md | 2 + 数据结构/6.6 B+树.md | 12 ++ 计算机网络/1 自顶向下的计算机网络概述.md | 8 +- 计算机网络/2.1 应用层-协议原理.md | 2 +- 计算机网络/2.6 应用层-P2P.md | 2 +- 计算机网络/4.1 网络层-基本原理.md | 4 +- 计算机网络/面试问题整理.md | 28 ++++ 22 files changed, 315 insertions(+), 170 deletions(-) create mode 100644 工作日志/2021年4月6日-今日计划.md create mode 100644 操作系统/image/2021-04-06-00-17-39.png create mode 100644 操作系统/image/2021-04-06-00-21-08.png create mode 100644 操作系统/image/2021-04-06-00-22-23.png create mode 100644 操作系统/面试问题整理.md create mode 100644 数据库/y面试问题整理.md create mode 100644 计算机网络/面试问题整理.md diff --git a/工作日志/2021年2月27日-三月份计划.md b/工作日志/2021年2月27日-三月份计划.md index 5ab36ab7..d0288ab1 100644 --- a/工作日志/2021年2月27日-三月份计划.md +++ b/工作日志/2021年2月27日-三月份计划.md @@ -20,28 +20,39 @@ - Java(两周) - [ ] 语法 - [ ] 标准库(网络编程、多,周) - - 数据结构 + - 数据结构(一周) - [ ] 《大话数据结构》 - [ ] 《数据结构与算法分析》 - [ ] 《算法图解》 - - 算法 + - 算法(一周) - [x] 学习、复习枚举法 - - [ ] 学习、复习分治法(把相关思想下的问题和算法补充完整) - - [ ] 学习、复习动态规划 - - [ ] 学习、复习贪心 - - [ ] 学习、复习回溯剪枝 - - [ ] 学习、复习分支限界 + - [x] 学习、复习分治法(把相关思想下的问题和算法补充完整) + - [x] 学习、复习动态规划 + - [x] 学习、复习贪心 + - [x] 学习、复习回溯剪枝 + - [x] 学习、复习分支限界 - 知识复习——基础(一周) - - [ ] 计算机网络 - - [ ] 数据库 - - [ ] 操作系统 - - [ ] 进程管理 - - [ ] 处理机管理 - - [ ] 设备管理 - - [ ] 文件管理 - - [ ] 系统调用 + - [x] 计算机网络 + - [x] 应用层 + - [x] 传输层 + - [x] 网络层 + - [x] 链路层 + - [x] 物理层 + - [x] 数据库 + - [x] mysql + - [ ] redis + - [x] 并行处理 + - [x] 基础知识 + - [x] 操作系统 + - [x] 进程管理 + - [x] 处理机管理 + - [x] 设备管理 + - [x] 文件管理 + - [x] 系统调用 +- 编程实战 - [ ] 网络编程(socket网络编程) - [ ] 并行编程(多线程并发编程) + - [ ] 系统编程(linux操作系统编程) - 刷题 - 力扣(学习、题库、讨论。侧重于刷算法类型的题目和相关讨论) @@ -79,4 +90,4 @@ * 第二周时间完成了数据结构的复习。用两天时间复习了基础的数据结构。然后开始刷题。上周二、周三。一边刷题。一边总结了数据结构相关的代码。一边对算法基础、递归迭代、深度广度搜索进行了总结。对具体的算法的总结还么有开始。 * 第三周继续刷算法题。并对算法进行深入的总结。现在那些较难的算法(动态规划和图算法)还没有完成总结。还包括一些特殊的数据结构,例如单调栈的特性的总结。 * 第四周,与第三周的事情交叉进行,主要画一天时间,复习了Python的相关内容。熟悉了Python、numpy、matplotlib。然后用剩下的时间学习了sklearn机器学习和pytorch深度学习。准备了寒假和开学后做的东西,进行组会。感觉剩下的东西有点多。想想这几天做的事情也没有那么多。还需要完成第三周交叉没有完成的算法的总结。 -* \ No newline at end of file +* 第五周,主要对基础知识进行总结,包括算法的基础知识和理论知识。截止到4.5号。总共五周的时间。复习的内容包括计算机操作系统、数据库、计算机网络。包括算法的枚举法、分治法、动态规划、贪心、回溯法、分支限界、图算法。手写了Dijkstra、floyd、prim、kruscal等算法,bellmanford等一系列的算法等以后再学习。基础理论知识包括数据库、计算机网络和操作系统 \ No newline at end of file diff --git a/工作日志/2021年4月1日-今日计划.md b/工作日志/2021年4月1日-今日计划.md index a77280a8..7ed3ffc0 100644 --- a/工作日志/2021年4月1日-今日计划.md +++ b/工作日志/2021年4月1日-今日计划.md @@ -3,5 +3,5 @@ > 每日计划包括三方面的内容:数据结构与算法、基础知识与项目经历、联邦学习与恶意软件 - [x] 数据结构预算法——回溯剪枝和分支限界整理完成 -- [ ] 基础知识与项目经历——计算机网络整理完成 +- [x] 基础知识与项目经历——计算机网络整理完成 - [ ] 联邦学习与恶意软件——TensorFlow federated学习开始part1 diff --git a/工作日志/2021年4月6日-今日计划.md b/工作日志/2021年4月6日-今日计划.md new file mode 100644 index 00000000..8d136ad9 --- /dev/null +++ b/工作日志/2021年4月6日-今日计划.md @@ -0,0 +1,8 @@ +## 安排 +> 最后一天用来补之前的任务。绝对不可能再拖下去了。明天就要开始全新的计划。 +- [ ] 五种IO模型和epoll机制 +- [ ] 同步异步、阻塞非阻塞:定义及实现 + + +## 收获 + diff --git a/操作系统/2.4 进程通信.md b/操作系统/2.4 进程通信.md index 2900432f..51ad7412 100644 --- a/操作系统/2.4 进程通信.md +++ b/操作系统/2.4 进程通信.md @@ -150,10 +150,8 @@ int mkfifoat(int fd, const char *path, mode_t mode); ![](image/2021-03-30-08-59-57.png) -### 6.2 消息队列 - -### 6.3 Socket套接字 +## 7 网络通信机制——Socket套接字 * 与其它通信机制不同的是,它可用于不同机器间的进程通信。 \ No newline at end of file diff --git a/操作系统/3 处理机管理.md b/操作系统/3 处理机管理.md index 06e0eced..6db3e1b8 100644 --- a/操作系统/3 处理机管理.md +++ b/操作系统/3 处理机管理.md @@ -59,7 +59,7 @@ 4. 吞吐量:单位时间处理的进程数尽可能多 5. 公平性:确保每个用户每个进程获得合理的CPU份额或其他资源份额 -## 3.1 调度算法 +## 3.1 作业调度算法 ### 先来先服务调度算法FCFS @@ -181,10 +181,10 @@ ![](image/2021-03-30-16-16-44.png) -- **互斥条件**:每个资源要么已经分配给了一个进程,要么就是可用的。 -- **占有等待条件**:已经得到了某个资源的进程可以再请求新的资源。 -- **不可抢占条件**:已经分配给一个进程的资源不能强制性地被抢占,它只能被占有它的进程显式地释放。 -- **环路等待条件**:有两个或者两个以上的进程组成一条环路,该环路中的每个进程都在等待下一个进程所占有的资源。 +- **互斥资源**:每个资源要么已经分配给了一个进程,要么就是可用的。 +- **占有等待**:已经得到了某个资源的进程可以再请求新的资源。 +- **不可抢占**:已经分配给一个进程的资源不能强制性地被抢占,它只能被占有它的进程显式地释放。 +- **循环等待**:有两个或者两个以上的进程组成一条环路,该环路中的每个进程都在等待下一个进程所占有的资源。 ### 处理方法 diff --git a/操作系统/4.3 分页存储管理.md b/操作系统/4.3 分页存储管理.md index bf22d33c..cdcdecc4 100644 --- a/操作系统/4.3 分页存储管理.md +++ b/操作系统/4.3 分页存储管理.md @@ -55,47 +55,84 @@ ## 4 页面置换算法 ### 概述 -1. 当主存空间已满而又需要装入新页时,页式虚拟存储管理必须按照一定的算法把已在主存的一些页调出去 -2. 选择淘汰页的工作称为页面调度 -3. 选择淘汰页的算法称为页面调度算法 +1. 在程序运行过程中,如果要访问的页面不在内存中,就发生缺页中断从而将该页调入内存中。此时如果内存已无空闲空间,系统必须从内存中调出一个页面到磁盘对换区中来腾出空间。 +2. 页面置换算法和缓存淘汰策略类似,可以将内存看成磁盘的缓存。在缓存系统中,缓存的大小有限,当有新的缓存到达时,需要淘汰一部分已经存在的缓存,这样才有空间存放新的缓存数据。 +3. 页面置换算法的主要目标是使页面置换频率最低(也可以说缺页率最低)。 4. 页面调度算法设计不当,会出现(刚被淘汰的页面立即又要调入,并如此反复)这种现象称为抖动或颠簸。 -### 先进先出FIFO页面调度算法 + +### 4.1 最优替换算法OPT, Optimal replacement algorithm + +1. 所选择的被换出的页面将是最长时间内不再被访问,通常可以保证获得最低的缺页率。 +2. 是一种理论上的算法,因为无法知道一个页面多长时间不再被访问。 +3. 举例:一个系统为某进程分配了三个物理块,并有如下页面引用序列: + +```html +7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1 +``` + +4. 开始运行时,先将 7, 0, 1 三个页面装入内存。当进程要访问页面 2 时,产生缺页中断,会将页面 7 换出,因为页面 7 再次被访问的时间最长。 + + +### 4.2 先进先出FIFO First In First Out + 1. 总是淘汰最先调入主存的那一页,或者说主存驻留时间最长的那一页(常驻的除外) -2. 模拟的是程序执行的顺序性,有一定合理性 +2. 选择换出的页面是最先进入的页面。该算法会将那些经常被访问的页面换出,导致缺页率升高。 +3. 模拟的是程序执行的顺序性,有一定合理性 +### 4.3 第二次机会算法 -### 最近最少用LRU页面调度算法 -1. 淘汰最近一段时间较久未被访问的那一页,即那些刚被使用过的页面,可能马上还要被使用到 - 1. OPT页面调度算法: - 1. 当要调入新页面时,首先淘汰以后不再访问的页,然后选择距现在最长时间后再访问的页 - 2. 该算法由Belady提出,称为Belady算法,又称最佳算法(OPT,Optimal page replacement) - 3. OPT只可模拟,不可实现 -2. 模拟了程序执行的局部属性,既考虑了循环性又兼顾了顺序性 -3. 严格实现的代价大(需要维持特殊队列) -4. 模拟实现: - 1. 每页建一个引用标志,供硬件使用 - 2. 设置一个时间间隔中断:中断时页引用标志置0 - 3. 地址转换时,页引用标志置1 - 4. 淘汰页面时,从页引用标志为0z的页中间随机选择 - 5. 时间间隔多长是个难点 +FIFO 算法可能会把经常使用的页面置换出去,为了避免这一问题,对该算法做一个简单的修改: -### 最不常用LFU页面调度算法 +当页面被访问 (读或写) 时设置该页面的 R 位为 1。需要替换的时候,检查最老页面的 R 位。如果 R 位是 0,那么这个页面既老又没有被使用,可以立刻置换掉;如果是 1,就将 R 位清 0,并把该页面放到链表的尾端,修改它的装入时间使它就像刚装入的一样,然后继续从链表的头部开始搜索。 +![](image/2021-04-06-00-21-08.png) + +### 4.4 最近最少用LRU,Least Recently Used + +1. 为了实现 LRU,需要在内存中维护一个所有页面的链表。当一个页面被访问时,将这个页面移到链表表头。这样就能保证链表表尾的页面是最近最久未访问的。 +2. 因为每次访问都需要更新链表,因此这种方式实现的 LRU 代价很高。 + +``` +4,7,0,7,1,0,1,2,1,2,6 +``` +![](image/2021-04-06-00-17-39.png) + + + + +### 4.5 最不常用LFU 1. 淘汰最近一段时间内访问次数较少的页面,对OPT的模拟性比LRU更好 2. 基于时间间隔中断,并给每一页设置一个计数器 3. 时间间隔中断发生后,所有计数器清0 4. 每访问页1次就给计数器加1 5. 选择计数值最小的页面淘汰 -### 时钟CLOCK页面调度算法 -1. 采用循环队列机制构造页面队列,形成了一个类似于钟表面的环形表 -2. 队列指针则相当于钟表面上的表针,指向可能要淘汰的页面 -3. 使用页引用标志位 -4. 工作流程: + +### 4.6 最近未使用NRU, Not Recently Used + +每个页面都有两个状态位:R 与 M,当页面被访问时设置页面的 R=1,当页面被修改时设置 M=1。其中 R 位会定时被清零。可以将页面分成以下四类: + +- R=0,M=0 +- R=0,M=1 +- R=1,M=0 +- R=1,M=1 + +当发生缺页中断时,NRU 算法随机地从类编号最小的非空类中挑选一个页面将它换出。 + +NRU 优先换出已经被修改的脏页面(R=0,M=1),而不是被频繁使用的干净页面(R=1,M=0)。 + +### 4.7 时钟CLOCK + +1. 第二次机会算法需要在链表中移动页面,降低了效率。时钟算法使用环形链表将页面连接起来,再使用一个指针指向最老的页面。 +2. 采用循环队列机制构造页面队列,形成了一个类似于钟表面的环形表 +3. 队列指针则相当于钟表面上的表针,指向可能要淘汰的页面 +4. 使用页引用标志位 +5. 工作流程: 1. 页面调入主存时,其引用标志位置1 2. 访问主存页面时,其引用标志位置1 3. 淘汰页面时,从指针当前指向的页面开始扫描循环队列 1. 把所遇到的引用标志位是1的页面的引用标志位清0,并跳过 2. 把所遇到的引用标志位是0的页面淘汰,指针推进一步 +![](image/2021-04-06-00-22-23.png) ## 5 反置页表 ### 提出: @@ -118,84 +155,4 @@ ### 基于反置页表的地址转换过程 1. MMU通过哈希表把进程标识和虚页号转换成一个哈希值,指向IPT的一个表目 2. MMU遍历哈希链找到所需进程的虚页号,该项的索引就是页架号,通过拼接位移便可生成物理地址 -3. 若遍历整个反置页表中未能找到匹配页表项,说明该页不在内存,产生缺页中断,请求操作系统调入 - - - -## 页面置换算法 - -在程序运行过程中,如果要访问的页面不在内存中,就发生缺页中断从而将该页调入内存中。此时如果内存已无空闲空间,系统必须从内存中调出一个页面到磁盘对换区中来腾出空间。 - -页面置换算法和缓存淘汰策略类似,可以将内存看成磁盘的缓存。在缓存系统中,缓存的大小有限,当有新的缓存到达时,需要淘汰一部分已经存在的缓存,这样才有空间存放新的缓存数据。 - -页面置换算法的主要目标是使页面置换频率最低(也可以说缺页率最低)。 - -### 1. 最佳 - -> OPT, Optimal replacement algorithm - -所选择的被换出的页面将是最长时间内不再被访问,通常可以保证获得最低的缺页率。 - -是一种理论上的算法,因为无法知道一个页面多长时间不再被访问。 - -举例:一个系统为某进程分配了三个物理块,并有如下页面引用序列: - -```html -7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1 -``` - -开始运行时,先将 7, 0, 1 三个页面装入内存。当进程要访问页面 2 时,产生缺页中断,会将页面 7 换出,因为页面 7 再次被访问的时间最长。 - -### 2. 最近最久未使用 - -> LRU, Least Recently Used - -虽然无法知道将来要使用的页面情况,但是可以知道过去使用页面的情况。LRU 将最近最久未使用的页面换出。 - -为了实现 LRU,需要在内存中维护一个所有页面的链表。当一个页面被访问时,将这个页面移到链表表头。这样就能保证链表表尾的页面是最近最久未访问的。 - -因为每次访问都需要更新链表,因此这种方式实现的 LRU 代价很高。 - -```html -4,7,0,7,1,0,1,2,1,2,6 -``` - -

-### 3. 最近未使用 - -> NRU, Not Recently Used - -每个页面都有两个状态位:R 与 M,当页面被访问时设置页面的 R=1,当页面被修改时设置 M=1。其中 R 位会定时被清零。可以将页面分成以下四类: - -- R=0,M=0 -- R=0,M=1 -- R=1,M=0 -- R=1,M=1 - -当发生缺页中断时,NRU 算法随机地从类编号最小的非空类中挑选一个页面将它换出。 - -NRU 优先换出已经被修改的脏页面(R=0,M=1),而不是被频繁使用的干净页面(R=1,M=0)。 - -### 4. 先进先出 - -> FIFO, First In First Out - -选择换出的页面是最先进入的页面。 - -该算法会将那些经常被访问的页面换出,导致缺页率升高。 - -### 5. 第二次机会算法 - -FIFO 算法可能会把经常使用的页面置换出去,为了避免这一问题,对该算法做一个简单的修改: - -当页面被访问 (读或写) 时设置该页面的 R 位为 1。需要替换的时候,检查最老页面的 R 位。如果 R 位是 0,那么这个页面既老又没有被使用,可以立刻置换掉;如果是 1,就将 R 位清 0,并把该页面放到链表的尾端,修改它的装入时间使它就像刚装入的一样,然后继续从链表的头部开始搜索。 - -

- -### 6. 时钟 - -> Clock - -第二次机会算法需要在链表中移动页面,降低了效率。时钟算法使用环形链表将页面连接起来,再使用一个指针指向最老的页面。 - -

\ No newline at end of file +3. 若遍历整个反置页表中未能找到匹配页表项,说明该页不在内存,产生缺页中断,请求操作系统调入 \ No newline at end of file diff --git a/操作系统/image/2021-04-06-00-17-39.png b/操作系统/image/2021-04-06-00-17-39.png new file mode 100644 index 0000000000000000000000000000000000000000..00984e5c4163f06f5e1489be77a5ed6109f0aafd GIT binary patch literal 10772 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 literal 0 HcmV?d00001 diff --git a/操作系统/image/2021-04-06-00-21-08.png b/操作系统/image/2021-04-06-00-21-08.png new file mode 100644 index 0000000000000000000000000000000000000000..e45246ea2f466b6d06a8ff9602d0a80f1dddf2b8 GIT binary patch literal 25693 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 AApigX literal 0 HcmV?d00001 diff --git a/操作系统/image/2021-04-06-00-22-23.png b/操作系统/image/2021-04-06-00-22-23.png new file mode 100644 index 0000000000000000000000000000000000000000..0188e60197f0e353b3ba67bf405a5f28117809a2 GIT binary patch literal 21264 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 TxtsO~00000NkvXXu0mjf8vYUJ literal 0 HcmV?d00001 diff --git a/操作系统/附录3 五种IO模型.md b/操作系统/附录3 五种IO模型.md index 49ccd3a8..d1414536 100644 --- a/操作系统/附录3 五种IO模型.md +++ b/操作系统/附录3 五种IO模型.md @@ -1,22 +1,4 @@ -# Socket - -- [Socket](#socket) - - [1 I/O 模型](#1-io-模型) - - [阻塞式 I/O](#阻塞式-io) - - [非阻塞式 I/O](#非阻塞式-io) - - [I/O 复用](#io-复用) - - [信号驱动 I/O](#信号驱动-io) - - [异步 I/O](#异步-io) - - [五大 I/O 模型比较](#五大-io-模型比较) - - [2 I/O 复用](#2-io-复用) - - [select](#select) - - [poll](#poll) - - [比较](#比较) - - [epoll](#epoll) - - [工作模式](#工作模式) - - [应用场景](#应用场景) - - +# 五种IO模型 ## 1 I/O 模型 diff --git a/操作系统/附录8 同步异步与阻塞非阻塞.md b/操作系统/附录8 同步异步与阻塞非阻塞.md index 69e60db6..8ea9c04c 100644 --- a/操作系统/附录8 同步异步与阻塞非阻塞.md +++ b/操作系统/附录8 同步异步与阻塞非阻塞.md @@ -1,15 +1,19 @@ +# 同步异步、阻塞和非阻塞 +> 参考文献 +> * [https://www.zhihu.com/question/19732473/answer/14413599](https://www.zhihu.com/question/19732473/answer/14413599) +> * [https://www.cnblogs.com/shiysin/articles/10689761.html](https://www.cnblogs.com/shiysin/articles/10689761.html) ## 1 同步异步 -* 同步与异步同步和异步关注的是消息通信机制 (synchronous communication/ asynchronous communication)是**两个进程之间的关系**。 -* 所谓同步,就是在发出一个调用时,在没有得到结果之前,该调用就不返回。但是一旦调用返回,就得到返回值了。 +* 同步与异步关注的是消息通信机制。是**两个进程之间的关系**。 +* 同步,就是在发出一个调用时,在没有得到结果之前,该调用就不返回。但是一旦调用返回,就得到返回值了。 * 异步则是相反,调用在发出之后,这个调用就直接返回了,所以没有返回结果。换句话说,当一个异步过程调用发出后,调用者不会立刻得到结果。而是在调用发出后,被调用者通过状态、通知来通知调用者,或通过回调函数处理这个调用。 ## 2 阻塞与非阻塞 -* 阻塞和非阻塞关注的是程序在等待调用结果(消息,返回值)时的状态。是**一个进程的本身的状态**。 +* 阻塞和非阻塞关注的是程序在等待调用结果时的状态。是**一个进程的本身的状态**。 * 阻塞调用是指调用结果返回之前,当前线程会被挂起。调用线程只有在得到结果之后才会返回。 * 非阻塞调用指在不能立刻得到结果之前,该调用不会阻塞当前线程。 diff --git a/操作系统/面试问题整理.md b/操作系统/面试问题整理.md new file mode 100644 index 00000000..e6771c75 --- /dev/null +++ b/操作系统/面试问题整理.md @@ -0,0 +1,119 @@ +## 1 进程的三态模型、五态模型、七态模型 + +1. 创建 +2. 就绪 +3. 执行 +4. 阻塞 +5. 终止 +6. 静止就绪 +7. 静止阻塞 + +## 2 进程同步的原则与操作 +1. 同步的原因两种制约关系 +2. 同步的四大原则 +3. 同步的实现方式 + + +## 3 进程通信的方式 +* 基础进程通信机制 + * 条件变量、信号量、管程 +* 共享内存通信机制 + * 通过信号量控制共享内存。 +* 消息传递通信机制 + * IPC消息队列 +* 管道文件通信机制(文件进程通信机制) + * PIPE管道 + * FIFO命名管道 +* 网络进程通信机制 + * socket + +## 4 同步异步、阻塞非阻塞:定义及实现 + +1. 同步通信 +2. 异步通信 +3. 阻塞通信 +4. 非阻塞通信 + +## 5 进程与线程的关系 + +1. 进程:资源分配的基本单位 +2. 线程:系统调用的基本单位 + +## 6 处理机调度算法 +1. 作业调度算法 + 1. FIFS + 2. SJB + 3. 优先权调度 + 4. 时间片轮转 + 5. 分级调度 + 6. 彩票调度 +2. 进程调度算法 + 1. FIFS + 2. SJB + 3. SRTN + 4. 优先权调度 + 5. 时间片轮转 + 6. 分级调度 +3. 实时调度 + 1. 最低松弛优先 + 2. 最早截止优先 + +## 7 死锁的原因和解决 +1. 原因 + 1. 互斥资源 + 2. 占有等待 + 3. 循环等待 + 4. 不可抢占 +2. 方法 + 1. 预防 + 2. 避免 + 3. 检测 + 4. 破坏 + +## 8 多级存储结构 +1. 寄存器 +2. 高速缓存 +3. 内存 +4. 磁盘缓存 +5. 磁盘 +6. 可移动存储介质 + +## 9 程序的装入链接 + +1. 绝对装入 +2. 静态重定位装入 +3. 动态重定位装入 +4. 静态链接 +5. 动态链接 + +## 10 连续分配分区算法 +1. 首次适应算法 +2. 循环首次适应算法 +3. 最佳适应算法 +4. 最坏适应算法 +5. 快速适应算法 +## 11 页面分配置换算法 + +1. OPT +2. FIFO +3. LRU +4. LFU +5. NRU +6. clock + +## 12 分页分段地址变换结构 +1. 页表 +2. 段表 +3. 段页表 + +## 13 IO方式 +1. 轮训 +2. 中断 +3. DMA + +## 14 中断的定义和作用 +1. 外中断 +2. 内中断 + +## 15 五种IO模型和epoll机制 + diff --git a/数据库/y面试问题整理.md b/数据库/y面试问题整理.md new file mode 100644 index 00000000..e2681962 --- /dev/null +++ b/数据库/y面试问题整理.md @@ -0,0 +1,22 @@ +## 1 mysql 命令与操作 + +## 2 数据库索引的形式 + +1. B+树索引 +2. 前缀索引Tire索引字典树索引? + +## 3 数据库的完整性 +1. 实体完整性 +2. 参照完整性 +3. 自定义完整性 +## 4 数据库规范化 +1. 1NF +2. 2NF +3. 3NF +4. 4NF + +## 5 并发控制 + +1. 事务(ACID automatic consistency isolation durability) +2. 并发一致性的问题。脏读、不可重复读、丢失修改 +3. 兵法一致性的方案。读写锁:互斥锁、共享锁。三级封锁协议。 \ No newline at end of file diff --git a/数据结构/6.3 平衡二叉树.md b/数据结构/6.3 平衡二叉树.md index 13a18560..668cc57f 100644 --- a/数据结构/6.3 平衡二叉树.md +++ b/数据结构/6.3 平衡二叉树.md @@ -6,16 +6,15 @@ ## 1 简介 ### 概念 - -* 所有结点的平衡因子的绝对值都不超过1,即平衡因子只能是1,0,-1三个值。 +1. 满足二叉搜索树的定义 +2. 所有结点的平衡因子的绝对值都不超过1,即平衡因子只能是1,0,-1三个值。 + * 如果任何节点的平衡因子为1,则意味着左子树比右子树高一级。 + * 如果任何节点的平衡因子为0,则意味着左子树和右子树包含相等的高度。 + * 如果任何节点的平衡因子是-1,则意味着左子树比右子树低一级。 ``` 平衡系数=左子树的高度 - 右子树的高度 ``` -* 如果任何节点的平衡因子为1,则意味着左子树比右子树高一级。 -* 如果任何节点的平衡因子为0,则意味着左子树和右子树包含相等的高度。 -* 如果任何节点的平衡因子是-1,则意味着左子树比右子树低一级。 - ![](image/2021-03-12-22-53-43.png) @@ -42,6 +41,8 @@ * 遍历(同上) * 插入 * 删除 +* 左旋 +* 右旋 ### 插入 diff --git a/数据结构/6.4 红黑树.md b/数据结构/6.4 红黑树.md index 280459d8..d2cfc83f 100644 --- a/数据结构/6.4 红黑树.md +++ b/数据结构/6.4 红黑树.md @@ -6,9 +6,9 @@ ## 1 简介 ### 定义 -1. 每个节点或者是黑色,或者是红色。 -2. 根节点是黑色。 -3. 每个叶子节点(NIL)是黑色。(这里叶子节点,是指为空NULL的叶子节点!) +1. 满足二叉搜索树的定义。 +2. 每个节点或者是黑色,或者是红色。 +3. 根节点是黑色。每个叶子节点(NIL)是黑色。(这里叶子节点,是指为空NULL的叶子节点!) 4. 如果一个节点是红色的,则它的子节点必须是黑色的。 5. 从一个节点到该节点的子孙节点的所有路径上包含相同数目的黑节点。 @@ -25,6 +25,7 @@ * 遍历(同上) * 插入 * 删除 +* 旋转和着色 ### 插入 diff --git a/数据结构/6.5 B树.md b/数据结构/6.5 B树.md index d3cd1168..a9a4ece1 100644 --- a/数据结构/6.5 B树.md +++ b/数据结构/6.5 B树.md @@ -36,6 +36,8 @@ * 遍历和搜索 * 插入 * 删除 +* 分裂 +* 合并 ### 创建 diff --git a/数据结构/6.6 B+树.md b/数据结构/6.6 B+树.md index e926e48e..21473237 100644 --- a/数据结构/6.6 B+树.md +++ b/数据结构/6.6 B+树.md @@ -23,6 +23,18 @@ ## 2 操作 + + +### 基础操作 + +* 创建 +* 遍历和搜索 +* 插入 +* 删除 +* 分裂 +* 合并 + + ### 搜索 ### 插入 * 第1步 :将新节点作为叶节点插入。 diff --git a/计算机网络/1 自顶向下的计算机网络概述.md b/计算机网络/1 自顶向下的计算机网络概述.md index b25cf9bf..698cfe85 100644 --- a/计算机网络/1 自顶向下的计算机网络概述.md +++ b/计算机网络/1 自顶向下的计算机网络概述.md @@ -12,21 +12,21 @@ ### 传输层(transport layer) -* 传输层负责不同主机的进程间的传输,主机到主机(host-to-host)的传输交由网络层。传输层也称为端到端送 +* 负责不同主机的进程间的传输。从源主机的进程到目的主机的进程。实现端到端通信。 * 数据单位:报文段Segment ### 网络层(network layer) -* 从源地址(source)到目的地地址(destination)的过程,达到从源主机传输数据到目标主机的目的,是点到掉通信(point to point) +* 负责从源地址(source)到目的地地址(destination)的传输,从源主机传输数据到目标主机。实现点到点通信(point to point) * 数据单位:数据报datagram ### 数据链路层(data-link layer) -* 封装网络层数据包。只完成一个节点到另一个节点的传送(单跳)(hop-by-hop, node-to-node) +* 封装数据报。负责一条连路上,一个节点到另一个节点的传输。单跳(hop-by-hop, node-to-node) * 数据单位:帧Frame ### 物理层(physical layer) -* 通过线路传送比特(bit)流,只完成一个节点到另一个节点的传送(单跳) +* 通过线路传送比特(bit)流,只完成一个节点到另一个节点的传输(单跳) * 数据单位:比特流bit ### 协议栈示意图 diff --git a/计算机网络/2.1 应用层-协议原理.md b/计算机网络/2.1 应用层-协议原理.md index 2e8983c2..796153d7 100644 --- a/计算机网络/2.1 应用层-协议原理.md +++ b/计算机网络/2.1 应用层-协议原理.md @@ -15,7 +15,7 @@ C/S结构和B/S结构。 ## 2 进程通信 -进行通讯实际是进程,不是程序。不同端系统的进程间交换报文相互通信。发送进程生成并向网络发送报文;接收进程接收这些报文并可能通过将保温发送回去进行响应。 +进行通讯实际是进程,不是程序。不同端系统的进程间交换报文相互通信。发送进程生成并向网络发送报文;接收进程接收这些报文并可能通过将报文发送回去进行响应。 ### 客户与服务器进程 diff --git a/计算机网络/2.6 应用层-P2P.md b/计算机网络/2.6 应用层-P2P.md index 9a479bbc..62bd2b92 100644 --- a/计算机网络/2.6 应用层-P2P.md +++ b/计算机网络/2.6 应用层-P2P.md @@ -25,7 +25,7 @@ ### BitTorrent其他机制和变种 片、流水线、随机优先选择、残局模型、反怠慢等机制 -变种:P2P直播流式应用,如PPLive和PPstream****PPstream +变种:P2P直播流式应用,如PPLive和PPstream ## 3 分布式散列表(DHT) diff --git a/计算机网络/4.1 网络层-基本原理.md b/计算机网络/4.1 网络层-基本原理.md index 15c7f32f..d7ead25d 100644 --- a/计算机网络/4.1 网络层-基本原理.md +++ b/计算机网络/4.1 网络层-基本原理.md @@ -147,7 +147,7 @@ ip telnet source-interface Loopback0 ip rcmd source-interface Loopback0 ``` -3.在安全方面的应用 +3. 在安全方面的应用 在TACACS+中的应用。配置TACACS+,使从该路由器始发的报文使用的源地址是loopback地址。配置命令如下: ``` @@ -157,7 +157,7 @@ tacacs-server host 215.17.1.1 可以通过过滤来保护TACACS+服务器--只允许从LOOPBACK地址访问TACACS+端口,从而使读/写日志变得简单,TACACS+日志纪录中只有loopback口的地址,而没有出接口的地址。 -4.在RADIUS用户验证中的应用 +4. 在RADIUS用户验证中的应用 配置RADIUS, 使从该路由器始发的报文使用的源地址是loopback地址。配置命令如下: ``` diff --git a/计算机网络/面试问题整理.md b/计算机网络/面试问题整理.md new file mode 100644 index 00000000..dea131b5 --- /dev/null +++ b/计算机网络/面试问题整理.md @@ -0,0 +1,28 @@ +## 1. 对网络模型的理解 +> 五层网络模型、七层网络模型。各层的主要作用。各层的数据结构。各层运行的协议。 + + +## 2. TCP可靠数据传输的实现机制 +> 停止等待、回退N步、选择重传。 +1. 校验和 +2. 序号机制 +3. 确认机制和重传机制 +4. 超时重传机制。 +5. 滑动窗口和流水线技术 +6. 累计确认机制 +7. 选择重传机制 +8. 快速重传机制 +## 3. TCP的三次握手四次挥手 +> 报文段类型SYN、FIN。状态迁移。序号变化。 + + +## 4. TCP的流量控制和拥塞控制 +1. 慢启动 +2. 拥塞避免 +3. 快重传 +4. 快回复 + +## 5 路由算法 +1. 链路状态路由算法 +2. 距离向量路由算法 +3. 层次路由算法OSPF、BGP \ No newline at end of file