07 2022 档案
摘要:进程的同步 进程同步也是进程之间直接的制约关系,是为完成某种任务而建立的两个或多个进程,这些进程需要在某些位置上协调它们的工作次序而等待、传递信息所产生的制约关系。进程间的直接制约关系来源于它们之间的合作 比如进程A需要从缓冲区读取进程B产生的信息,当缓冲区为空时,进程B因为读取不到信息而被阻塞。而
阅读全文
摘要:调度算法 时间片轮转 常用于分时操作系统,更加注重“响应时间”,周转时间相比响应时间变得不那么重要了 时间片长短是不固定的。有的OS长,有的OS短,有的还会动态变化 实例分析如下 优先级调度 实例分析如下 多级反馈队列调度 实例分析如下
阅读全文
摘要:简介 低级调度(进程调度):根据某种算法,从就绪队列中选择某些进程分配处理机资源 进程调度的时机 需要进程调度与切换的情况 当前运行的进程主动放弃处理机 进程正常终止 运行过程中发生异常而终止 进程主动请求阻塞(如等待I/O) 当前运行的进程被动放弃处理机 分给进程的时间片用完 有更紧急的事需要处理
阅读全文
摘要:前言 在多道程序环境中,内存中存在多个进程,其数目通常是多于处理机数目的。不论是出于提高处理机利用率、优先执行某个进程、提高系统吞吐量还是作业周转时间,都需要能动态的将处理机分配给某个进程(就绪态)。因此,处理机调度成为OS中十分重要的一个功能 简介 处理机调度是指从就绪队列中按照一定的算法选择一个
阅读全文
摘要:简介 线程是一个基本的CPU执行单元,也是程序执行流的最小单位。引入线程之后,不仅是进程间可以并发,进程内的各线程间也可以并发,从而进一步提升了系统的并发度,使得一个进程内也可以并发处理各种任务(如QQ视频、文字聊天、传文件) 引入线程后,进程只作为除CPU之外的系统资源的分配单元(如打印机、内存地
阅读全文
摘要:斐波那契数列 斐波那契数列,又称黄金分割数列,因数学家莱昂纳多·斐波那契以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、…… 在数学上,斐波那契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n - 1)+F(n
阅读全文
摘要:简介 插值查找算法类似于二分查找,必须是有序列表,不同的是插值查找每次从自适应mid(即获取数组中间的索引)处开始查找 将二分查找(即折半查找)中的求 mid 索引(即获取数组中间的索引)的公式: mid = left + (right - left) / 2 改成 mid = left + (ta
阅读全文
摘要:简介 进程是程序一次执行过程 进程组成 进程由程序段、数据段、程序控制块(PCB)组成 PCB (Process Control Block)被称作进程控制块,也是操作系统对进程进行控制与管理的唯一方式。PCB存放了有关进程的相关信息 操作系统是通过PCB来管理进程,因此PCB中应该包含操作系统对其
阅读全文
摘要:前置思维导图 简介 操作系统(Operating System,OS)是指控制和管理整个计算机系统的硬件和软件资源,并合理地组织调度计算机的工作和资源的分配,以提供给用户和其他软件方便的接口和环境,它是计算机系统中最基本的系统软件 功能 操作系统作为系统资源的管理者(资源包括软件、硬件、文件等) 操
阅读全文
摘要:简介 二分查找又称折半查找、二分搜索、折半搜索等,是在分治算法基础上演变的查找算法 二分查找算法仅适用于有序序列,它只能用在升序序列或者降序序列中查找目标元素 二分查找局限性 依赖数组结构 二分查找需要利用下标随机访问元素,如果使用链表等其他数据结构则无法实现二分查找 针对有序的数据 二分查找需要的
阅读全文
摘要:简介 基数排序可以从低位(个位)开始,根据个位数排序一次,然后根据十位数排序,再根据百位数进行排序……最终完成整个数组的排序 对于十进制数而言,每一位只会是 0~9 这十个数字,通常使用桶排序(计数排序)来完成每一位数的排序 此种排序一般适用于为整数类型的情况。所有对于字符串和文字排序不适合 排序图
阅读全文
摘要:简介 归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并 排序图解 从图中可以看出,对原数组进行拆分成两个子数组,然后对每个子数组继续
阅读全文
摘要:简介 快速排序是对冒泡排序的一种改进。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列 排序图解 从图中可以看出,每进行一次快速排序都
阅读全文
摘要:简介 希尔排序是插入排序的一种,又称“缩小增量排序”,是插入排序算法的一种更高效的改进版本 排序图解 从图中可以看出每一趟排序中都分成 gap 组,每组都有 gap + 1 个元素,对每一组中的 arr[j] 和 arr[j - gap] 进行比较,如果 arr[j] < arr[j - gap]
阅读全文
摘要:排序图解 从图中可以看出,待排序的数组分为两个子数组,其中一个子数组认为是有序的,另一个数组认为是无序的。从无序的子数组取出前一个元素,在有序的子数组从后往前进行比较,找到待插入的位置 需要排序的趟次 = 数组长度 - 1 排序原理 把待排序的数组分为两组,已排序的和未排序的两个子数组 找到未排序的
阅读全文
摘要:排序图解 从图中可以看出,每一趟排序都把最小(或最大)的元素,放在前一个已排好序的最小(或最大)的元素的后面 需要排序的趟次 = 数组长度 - 1 排序原理 遍历元素找到一个最小(或最大)的元素,把它放在第一个位置,然后再从剩余元素中找到最小(或最大)的元素,把它放在第二位置,依次类推,最后完成排序
阅读全文
摘要:图解冒泡排序 从图中可知,每一次冒泡都将该次排序中最大的值放到最后适当的位置 需要冒泡的次数 = 数组的长度 - 1 排序原理 比较相邻的元素。如果前一个元素比后一个元素大,就交换这两个元素的位置 对每一对相邻元素做同样的步骤,从开始第一对元素到结尾的最后一对元素。最终最后位置的元素就是最大值 重复
阅读全文
摘要:内部排序 指需要将处理的所有数据都加载到内部存储器(内存)中进行排序 外部排序 由于数据量过大,无法直接全部加载到内存中,需要借助外部存储(文件等)进行排序
阅读全文
摘要:简介 Java 集合, 也叫作容器,主要是由两大接口派生而来 Collection 接口,主要用于存放单一元素 Map 接口,主要用于存放键值对 图中的绿色的虚线代表实现,绿色实线代表接口之间的继承,蓝色实线代表类之间的继承 Collection List 在Collection中,List集合是有
阅读全文
摘要:时间复杂度 要计算算法时间耗费情况,首先得度量算法的执行时间,那么如何度量呢? 事后分析估算方法 比较容易想到的方法就是把算法执行若干次,用计算机计时。这种统计方法主要是通过设计好的测试程序和测试数据,利用计算机计时器对不同的算法编制的程序的运行时间进行比较,从而确定算法效率的高低,但是这种方法有很
阅读全文
摘要:简介 定义:定义方法时,在方法内部调用方法本身,称之为递归 作用:它通常把一个大型复杂的问题,层层转换为一个与原问题相似的,规模较小的问题来求解。递归策略只需要少量的程序就可以描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量 递归规则: 执行一个方法时,就创建一个新的受保护的独立空间(栈
阅读全文
摘要:简介 顺序表是在计算机内存中以数组的形式保存的线性表,线性表的顺序存储是指用一组地址连续的存储单元,依次存储线性表中的各个元素、使得线性表中在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中,即通过数据元素物理存储的相邻关系来反映数据元素之间逻辑上的相邻关系 顺序表API设计 为该顺序表设计几个常
阅读全文
摘要:简介 单链表的反转,面试中的一个高频题目。当然也有很多变体,比如以k个结点为一组进行翻转链表的 需求 原链表中数据为:1->2->3->4 反转后链表中数据为:4->3->2->1 实现 反转链表是有2种方法(递归法,遍历法)实现的 节点类设计 public class Node{ /**存储元素*
阅读全文
摘要:简介 链表是一种物理存储单元上非连续、非顺序的存储结构,其物理结构不能表示数据元素的逻辑顺序,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列的结点(链表中的每一个元素称为结点)组成,结点可以在运行时动态生成 节点类设计 按照面向对象的思想,可以设计一个类,来描述结点这个事物,用一个
阅读全文
摘要:思维导图 简介 线性表是指 n个具有相同特性的数据元素的有限序列 前置概念 前驱元素 : 若A元素在B元素的前面,则称A为B的前驱元素 后继元素 :若B元素在A元素的后面,则称B为A的后继元素 特征 数据元素之间具有一种“一对一”的逻辑关系 第一个数据元素没有前驱元素,这个数据元素被称为头结点 最后
阅读全文
摘要:简介 队列是一种基于先进先出(FIFO)的数据结构,是一种只能在一端进行插入,在另一端进行删除操作的特殊线性表,它按照先进先出的原则存储数据,先进入的数据,在读取数据时先被读出来。例如下图中进队列的顺序为1,2,3,4,则出队列的顺序为1,2,3,4 队列是一个有序列表,可以用数组或是链表来实现 数
阅读全文
摘要:简介 稀疏数组即原数组的一个压缩数组,在原数组中存在大量无意义的值,占据了大量的存储空间,只有部分坐标下的值才有意义。例如如下11*11的数组中就只有三个有意义的数字 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0
阅读全文
摘要:前置知识 SQL注入:后端并未对前端传来的参数进行严格的校验,同时后端存在将前端传来的参数使用字符串或者直接将参数拼接到SQL语句中,导致后端的SQL语句被篡改并且能成功执行 四大SQL注入原理 恶意拼接查询--查询、插入、更新和删除数据,且使用分号来分隔不同的命令 原SQL语句 select *
阅读全文
摘要:又是只能回答概念不能提出具体的实例出来论证所讲的观点(具体实例后面再补充吧) 单一职责原则 单一职责原则是指一个类只负责一个职责,它使得类的职责更单一。这样每个类只需要负责自己的那部分,类的复杂度就会下降。如果职责划分的很清楚,那么代码的维护难度降低。如果将所有功能都放在一个类中,那么这个类就会变得
阅读全文
摘要:前置知识 final 在 Java 中是关键字之一,意为最终,表示对象或数据是最终形态的、不可改变的意思,它可以修饰 类、变量、方法。使用 final 修饰的 类、方法、变量具有如下特点 final 修饰的类不能被继承 final 修饰的方法不能被子类重写 final 修饰的成员变量或局部变量(即常
阅读全文
摘要:前置知识 JVM类加载机制主要有如下三种方式 全盘负责:指当一个类加载器负责加载某个Class时,该Class所依赖和引用其他Class也将由该类加载器负责加载,除非显示使用另一个类加载器来载入 双亲委派:指先让父类加载器试图加载该Class,只有在父类加载器无法加载该类时才尝试从自己的类路径中加载
阅读全文
摘要:前置知识 Java8 的 switch语句语法 switch(表达式) { case 值1: 语句块1; break; case 值2: 语句块2; break; … case 值n: 语句块n; break; default: 语句块n+1; } switch语句执行流程如下图 Java8 swi
阅读全文