背景
今天收到了前端面试通知,面试官针对简历中408的过往,进行相关问题提问都是基础知识点,但回答的不是很好,重新回顾下漏洞,特此记录。
操作系统
多道批处理阶段——“多”和“批”指的是什么?
操作系统发展历程
1. 手动操作阶段
计算机工作需要人工干涉(程序的装入、运行、结果的输出),人机矛盾越来越大
2. 批处理阶段
为了解决CPU/IO设备上速度不匹配的矛盾
2.1 单道批处理阶段
作业处理:成批进行,内存保持一道作业
2.2 多道批处理阶段
作业:多个程序同时进入内存,并允许他们在内存CPU交替运行
当一道程序因I/O请求而暂停时,CPU便立即运行另一道程序
特点:宏观上并行,微观上串行
3. 分时操作系统
多个用户通过终端共享一台主机,用户键入命令,系统能及时处理再返回
4. 实时操作系统
接收到外部信号后,能在严格的时间内完成处理
进程——进程的基本概念、组成?
背景:多道程序并发,程序失去封闭性,并间断性、不可再现性
组成:程序段、相关数据段、PCB
PCB: 进程控制块,为了保证每个程序能够独立的运行,进程存在的唯一标志
PCB作用:描述进程的基本情况和运行状态
进程调度——进程是如何调度的?
概念
进程数量>处理机个数, 堆积的进程需要按照一定的算法调度
调度算法
- 先来先到
- 短作业优先
- 优先级调度
- 高响应比优先调度
- 时间片轮转调度
- 多级队列调度
之前:虽有多道处理机系统,但仅设置一个进程的就绪队列,调度算法单一,无法满足现实需求
之后:系统设置多个就绪队列,按照类型或者进程性质分配就绪队列,实行不同的调度算法 - 多级反馈队列调度( 时间片轮转 + 优先级调度)
思想:- 设置多个就绪队列,第一级队列最高,第二队列次之,接下来逐个降低
- 设置队列的进程运行时间片大小,优先级越高的队列时间片越小
- 进程时间片用完后放到其他队列
I/O——说说I/O操作的理解
概念
数据输入到计算机内存的过程即输入,反之输出到外部存储(比如数据库,文件,远程主机)的过程即输出。
数据传输过程类似于水流,因此称为 IO 流。
IO按照处理的数据类型可分为:
- 面向字节操作的I/O接口:inputStream,outputStream (最基本单位为单个字节)
- 面向字符操作的接口:Reader,Writer(最基本的单元是Unicode码元大小2字节)
为什么 I/O 流操作要分为字节流操作和字符流操作呢?
字节流:一切文件数据在存储时,都是以二进制数字的形式保存,都一个一个的字节,那么传输时一样如此。
所以,字节流可以传输任意文件数据。
字符流:字节流读取中文有可能截断导致乱码,所以,java就提供了转换流。字符流=字节流+编码表
字符流与字节流的区别
- 字节流适合做一切文件数据拷贝
- 字节流不适合读取中文内容输出
- 字符流适合做文本文件的操作(读、写)
数据结构
栈——相关概念以及应用
概念
运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。
应用
1、函数调用
在程序中,每个函数调用都需要将当前状态的信息(比如函数调用前的参数、局部变量和程序计数器等)保存
到栈中,等到函数调用结束后再从栈中弹出这些信息,恢复调用前的状态。这个过程被称作函数的压栈和弹栈
操作。
2、表达式求值
通常我们在计算机中对表达式求值时都采用栈来实现。比如中缀表达式转后缀表达式的操作就需要使用栈。
3、系统调用
在操作系统中,内核通常会将一个系统调用的参数、返回值和程序计数器等状态保存到进程的用户栈中,在系
统调用结束后再从栈中弹出这些信息,恢复调用前的状态。
4、缓存机制
缓存通常也使用栈的方式实现,被访问的数据最先进入栈顶,最后的则返回底部。例如:网页缓存
5、代码编辑器
用栈来判断括号是否成对,以及最近的括号匹配情况。若左括号,则入栈;
若右括号,则将栈顶元素弹出,若是对应的左括号,则继续遍历;否则匹配失败。
6、进制转换
利用栈可以实现很多不同类型的算法,其中包括进制转换。
栈和链表的联系
链栈?
是两种不同的数据结构,栈是“先入后出”的,相当于一箱书,先放进去的在最底下,最后放的在最上面,也是
最先取出的,最上面书所在的地方也称为栈顶;而链表是一种顺序的结构,就是数组,不同的是,链表是由一
系列顶点构成,每个顶点包含着自己的信息和与下一个顶点的链接(指针域),是可以随时添加删除的,随意
插入
稀疏矩阵——如何使用二维数组的存储形式找到对应位置的元素
概念
非零元素的个数相对于矩阵元素的个数来说非常少
存储策略
存储非零元素所在的行和列以及值=>三元组(可按数组或十字链表存储)
哈夫曼树——相关概念及特点
带权路径长度:路径的长度与该节点权值的乘积
哈夫曼树:带权路径最小的二叉树
哈夫曼编码:数据压缩编码——对频率高的字符赋以短编码,对频率低的字符赋以较长编码
特点:利用哈夫曼树可以设计总长度最短的二进制前缀编码,但构造出来的哈夫曼树不一定是唯一的。
其他两门——没问