- 以下就是复试必备的问题,都是本科期间学过的内容的总结,包括数据库,以及408(计算机组成原理,操作系统,数据机构,计算机网路),还有软件工程导论,java设计模式,搞定这些,至少专家问答部分就容易很多,本文章只负责提出问题,答案都自己总结吧
- 数据库
- 数据库的概念
- 数据管理技术的发展
- DBMS的功能
- 数据定义
- 数据操作
- 数据库运行管理
- 数据组织,存储与管理
- 数据库保护
- 数据库维护
- 数据模型的分类,数据模型的组成
- 数据结构
- 数据操作
- 完整性约束
- 三级模式两级映射
- 关系模式的表示方式
- 完整性约束
- sql概述
- 索引用什么实现
- where和having
- 视图的特点
- 视图的作用
- 数据库完整性和数据库安全性
- 数据库中的不安全因素 1
- 自主存取控制和强制存取控制
- 审计日志
- 数据库在完整性方面应该具有的功能
- 4个范式
- 数据库设计的六个阶段
- 数据字典:对数据库中数据的描述,是dbms中的一组系统表,不是数据本身,数据字典在需求分析阶段建立,是进 行详细的数据手机和数据分析得到的,并在数据库设计过程中不断修改,充实,完善,必须强调用户的参与
- ER集成时的冲突
- 重组织重构造
- 模式分解
- 函数依赖
- 无损连接
- 什么是事务
- 事务的四大特性
- 故障的分类
- 恢复的实现技术
- 转储
- 日志
- 系统故障和介质故障的恢复过程
- 检查点技术
- 数据库镜像
- 并发控制,不并发控制带来的后果
- 三级封锁协议 不可重复读最高级
- 死锁的检测和预防
- 可串行化和冲突可串行化
- 两段锁协议
- 意向锁
- 操作系统
- 操作系统的目标和功能(什么是操作系统)
- 操作系统的四大特征
- 并发
- 异步
- 共享
- 虚拟
- 操作系统的发展和分类
- 系统调用
- 大内核和微内核
- 操作系统运行机制
- 核心态和用户态
- 内核
- 时钟管理
- 中断机制
- 原语
- 中断和异常
- 中断的流程
- 死锁的必要条件
- 死锁预防,避免,检测和解除
- 进程
- 线程
- 进程和线程的区别
- 进程通信方式
- 三级调度
- 作业调度
- 内存调度
- 进程调度
- 进程调度算法
- 使用信号量实现进程同步和互斥
- 程序执行过程(将用户程序变为可在内存中执行的程序的步骤)
- 库函数(Library function)是将函数封装入库,供用户使用的一种方式。方法是把一些常用到的函数编完放到一个文件里,供不同的人进行调用。
- 链接方式
- 静态链接
- 动态装入时链接
- 动态运行时链接
- 装入方式
- 绝对装入
- 可重定位装入
- 动态时运行装入
- 覆盖和交换
- 连续分配方式
- 单一连续分配
- 固定分区分配
- 动态分区分配
- 首次适应算法
- 最佳适应算法
- 最坏适应算法
- 循环首次适应算法
- 非连续分配方式
- 分页
- 分段
- 段页式
- 虚拟内存管理
- 请求掉页
- 页面置换
- 基本分页和请求分页
- 页面置换算法
- 先进先出
- 最近最久未使用
- 时钟置换算法
- 最佳置换算法
- 逻辑地址翻译的过程
- 快表
- 磁盘调度算法
- 先来先服务
- 最短寻道时间有限
- scan
- look
- I/O控制方式
- 程序查询方式
- 中断方式
- 存储器直接控制方式
- 通道方式
- spooling技术
- 独占式设备–>逻辑上的共享式设备
- 输入输出井(外存)
- 输入输出缓冲区(输入输出设备的数据)
- 输入输出进程(外围控制机)
- 计算机网络
- 计算机网络的主要功能
- 硬件资源共享
- 软件资源共享
- 用户通信
- 分布式计算
- 主机间通信方式
- C/S 客户端服务器方式
- P2P 对等方式
- 电路交换,报文交换,分组交换
- 电路交换
- 建立连接需要时延
- 传输时延小
- 用户独占端到端的固定传输带宽
- 全双工,无冲突
- 网络利用率低
- 故障敏感
- 无数据存储能力
- 报文交换
- 存储转发
- 网络利用率高
- 适用于突发信息传输
- 实时性差
- 分组交换
- 报文再分组,进一步提高效率
- 可能导致乱序,需要有处理时延,以及每个分组需要叫上部分控制信息
- 分类
- 虚电路
- 数据报方式
- 电路交换
- 计算机网络性能指标
- 时延
- 发送时延
- 处理时延
- 传输时延
- 传播时延
- 带宽
- 时延
- 计算机网络提供的服务的三种分类
- 可靠不可靠
- 连接不连接
- 确认不确认
- ISO和TCP/IP
- 七层
- 四层
- 香农和奈氏准则
- 香农:极限码元传输速率
- 奈氏:考虑噪音的情况下的极限数据传输率
- 透明传输
- 就是传输过程中,对外界透明,我们只需要提供数据,而不用管理数据的具体传输方式
- 封装成帧的方式
- 字符计数法:设置一个数据依赖记录有多少个字符
- 零比特填充:五个1加一个1
- 字符填充:加转义字符
- 差错控制
- 检错编码
- 奇偶校验:只可以检查奇数个比特的错误
- CRC冗余:根据给定的多项式,计算出帧检验序列,然后加到数据末尾,接收到的数据去除生成式,如果没有余数,表明没有出错
- 纠错编码:海明码
- 检错编码
- 端到端和点到点
- 端到端:进程,高级
- 同步通信和异步通信
- 同步通信:时钟同步
- 异步通信:要加控制信息,发送方随时发,接收方随时接收
- 流量控制
- 就是限制发送反的速率
- 流量控制的方法
- 停止等待
- 后退n帧
- 按序接收
- 累计确认
- 选择重传
- 只重传超时的数据
- 逐一确认
- 可靠传输机制:确认和超时重传的方法
- 介质访问控制:
- aloha:不监听信道,想发就发
- csma:载波监听,多路访问
- 1坚持
- 非坚持
- p坚持
- csma/cd 局域网 检测道碰撞发生就停止发送数据 截断二进制指数退避算法
- csma/ca 无线网络 避免碰撞
- 数字数据编码为数字信号
- 归零
- 非归零
- 反向不归零
- 曼彻斯特
- 差分曼彻斯特
- 拓扑结构
- 星型:可靠性低,共享能力差,单点故障
- 总线型:故障敏感但是容易排查故障,方便扩充机器,以及方便定义接口规则
- 环型:线路和设备比较节省,但是通信速度慢,单点故障
- 树型:便于隔离故障
- IP网际互连协议,IP只为主机提供一种无连接、不可靠的、尽力而为的数据包传输服务
- 版本
- 首部长度
- 总长度
- 片偏移
- 标识
- 目的ip
- 源ip
- 生存时间
- ipv4和ipv6
- IPv4的地址位数为32位,IPv6采用128位
- ppp
- HDLC和ppp协议的区别
- ppp面向字节,不可靠,没有序号和确认机制,支持多种传输协议,可以实现身份验证
- HDLC面向比特流,可靠
- 中继器,集线器,网桥,交换机
- 路由器的功能
- 动态路由算法
- RIP
- OSPF
- 网络层转发分组的流程
- ICMP协议(网际控制报文协议)
- 差错报告报文的种类
- 终点不可达
- 源点抑制
- 时间超过
- 参数问题
- 改变路由
- 不发送差错报文的情况
- 组播和特殊地址
- 数据包分片
- 差错报文出错
- 差错报告报文的种类
- ip地址和mac地址
- 所以也就有了ARP地址解析协议
- DHCP(应用层协议,UDP,c/s)动态主机配置协议
- 发现
- 提供
- 请求
- 确认
- UDP
- TCP
- 三次握手协议
- 四次握手
- 慢开始+拥塞避免
- 快重传+快恢复
- 应用层:定义了运行在不同端系统上的应用程序进程如何相互传递报文。
- DNS域名系统:用于实现域名到IP地址映射的网络服务。
- 迭代查询(靠自己)
- 递归查询(靠别人)
- FTP文件传输协议:用于实现交互式文件传输功能。
- SMTP:简单邮件传输协议
- HTTP:超文本传输协议
- DNS域名系统:用于实现域名到IP地址映射的网络服务。
- 计算机网络的主要功能
- 计算机组成原理
- 计算机系统的组成
- 控制器,运算器,存储器,输入,输出
- 冯诺依曼机
- 使用了存储程序的概念
- 早期以运算器为核心.现代以存储器为核心
- 指令都已二进制存储,操作码和地址码同等地位
- 顺序执行
- 编译和解释
- 编译:运行前翻译,生成目标文件,速度快,源代码不变不用重新编译
- 解释:运行时一句一句翻译,不生成目标文件,速度慢,每次都要重新翻译
- 计算机工作的过程
- 机器语言,汇编语言,高级语言
- 指令执行过程
- 取指
- 分析
- 执行
- 多级存储系统
- 内存 cache
- 内存辅存
- RAM ROM
- DRAM SRAM
- DRAM的刷新方式
- 集中
- 异步
- 分散
- 那些技术可以提高cpu访存速度
- 多端口存储器
- 单体多字
- 多体并行
- 局部性原理
- 时间局部性
- 空间局部性
- cache
- 主存cache映射
- 直接映射
- 全相联
- 组相联
- 主存替换算法
- 随机
- 先进先出
- 近期最少使用
- 最不经常使用
- cache写策略
- 写命中
- 写回法:只写缓存
- 全写法:内存和缓存都写
- 写不命中
- 写分配法:搭配写会法,数据先调入cache
- 非写分配法:只写入内存,搭配全写法
- 写命中
- 多级cache
- 离cpu越近,越快,越小
- 给逻辑地址,转换为物理地址的过程
- 指令通常分成取指,译码, 访存,执行, 和写回五个阶段
- 流水线概述
- 流水线特点
- 影响流水线的因素
- 结构冲突:多条指令同一时刻争用同一资源形成冲突
- 暂停时间周期
- 准备个数据和指令寄存器
- 数据冲突:当后继指令需要用到前面指令的执行结果时发生的.
- 暂停时钟周期
- 数据通路
- 控制冲突
- 转移延迟:将转移指令与前面和转移指令无关的指令调换位置
- 结构冲突:多条指令同一时刻争用同一资源形成冲突
- 精简指令集(必须实现流水线)和复杂指令集
- 指令寻址
- 引入总线结构的好处
- 什么是总线宽度、总线带宽、总线复用、信号线数?
- cpu功能
- 指令控制
- 操作控制
- 时间控制
- 数据加工:对数据进行运算
- 中断处理
- CPU 响应中断应具备哪些条件?
- 处于开中断状态
- 外设有中断请求
- 当前指令执行完
- 中断响应优先级和中断处理优先级分别指什么?
- 程序中断和调用子程序有何区别?
- I/O控制方式
- 程序控制方式
- 不并行,效率低
- cpu作为数据的桥梁,干涉频率高
- 一次一个字
- 中断方式
- cpu作为数据的桥梁,干涉频率高
- 一次一个字
- 存储器直接控制
- 一次多个连续块
- 只在开始和结束的时候需要cpu干预
- 通道控制方式
- 通道相当于精简版cpu,可以实现离散数据的读取
- 程序控制方式
- 计算机系统的组成
- 数据结构
- 数的逻辑结构
- 线性表
- 树
- 图
- 数的物理结构
- 顺序存储
- 链式存储
- 索引存储
- hash
- 循环,迭代,递归
- 贪心算法,动态规划,分治法
- 顺序表和链表的比较
- 树的存储结构
- 双亲标识法
- 孩子标识法
- 孩子兄弟表示法
- 图的存储方法
- 邻接举证
- 邻接表
- BFS DFS
- 最小生成树
- 普里姆
- 克里斯卡尔
- 最短路径
- 迪杰斯特拉
- 佛洛依德
- AVL平衡二叉树
- 查找
- 直接查找
- 折半查找
- 分块查找:块间有序,块内无序
- b
- b+
- 内部排序
- 直接插入排序:分为有序和无序,每次从无序里面挑一个,然后倒着扫描有序,找出适合插入的位置,移动元素并插入
- 折半插入排序:等low>high的时候,移动元素并插入,减少了比较次数
- 希尔排序:从部分有序到整体有序
- 冒泡排序:简单
- 简单选择排序:每次选择一个最小的数据
- 快速排序:选择枢纽,需要栈的协助
- 归并排序:需要栈
- 堆排序:大根堆
- 基数排序:不基于比较的算法
- 数的逻辑结构
- 软件工程导论
- 软件的定义
- 软件危机
- 软件需求分析的任务是什么
- 瀑布模型
- 快速原型模型
- 增量模型
- 螺旋模型
- 喷泉模型
- 维护
- 测试
- 提高软件质量的措施
- 大数据相关知识
- Hadoop
- Hadoop是一种分析和处理大数据的软件平台,是一个由Apache基金会所开发的分布式系统基础架构,在大量计算机组成的集群当中实现了对于海量的数据进行的分布式计算。Hadoop是专为离线和大规模数据分析而设计的
- Hadoop的框架最核心的设计就是:HDFS和MapReduce
- HDFS为海量的数据提供了存储
- MapReduce为海量的数据提供了计算
- 缺点
- 它也有明显的缺点:不支持随机修改,查询效率低,对小文件支持不友好。
- MapReduce:MapReduce是一种计算模型,该模型可以将大型数据处理任务分解成很多单个的、可以在服务器集群中并行执行的任务,而这些任务的计算结果可以合并在一起来计算最终的结果。简而言之,Hadoop Mapreduce是一个易于编程,并且能在大型集群(上千节点),快速地并行得处理大量数据的软件框架,以可靠,容错的方式部署在商用机器上。
- map:map的本质是拆解(汽车–>一堆零件)
- reduce:本质是组合(把汽车的一堆零件,拼成了变形金刚)
- 过程:
- input:取数据,输入分片
- split:领取数据,Hadoop会将MapReduce的输入数据划分成等长的小数据块,称为“分片”,对于大多数作业来说,一个合理的分片大小趋于HDFS一个块的大小,默认是128MB。
- map:切分数据,Hadoop为每个分片构建一个map任务,并由该任务运行用户自定义的map函数从而处理分片中的每条记录。
- shuffle:归类
- reduce:组装
- finalize:交付
- 如何统计单词次数
- 首先,取到数据,数据是一行一行的,每一行是一个句子
- 然后领取数据,各领取一行Deer Bear River
- 然后map统计出句子中单词出现次数<Dear,1><Bear,1><River,1>
- shuffle,把不同的单词,聚集到同样的盒子里面
- reduce,把相同的数据放一起
- HBase:HBase是基于HDFS分布式文件系统去构建的。换句话说,HBase的数据其实也是存储在HDFS上的
- 两个问题
- HDFS和HBase有啥区别阿?
- HDFS是文件系统,HBase是数据库,数据库是有组织的方式存储的数据的集合,举个例子,相当于HDFS等于硬盘,HBase相当于mysql
- 扯了这么多,那我们为啥要用HBase呢?
- HBase在HDFS之上提供了高并发的随机写和支持实时查询,这是HDFS不具备的。存储数据的”结构“可以地非常灵活
- HDFS和HBase有啥区别阿?
- 首先说明,HBase是NoSql数据库,基于键值列存储的数据库,可能抽象,举个例子说明,再mysql中,我们有时候一列可能会有许多的null,但是尽管是null,但是他还是占用存储空间了,所以为了节省存储空间,我们使用面向列存储
- 在HBase里边,定位一行数据会有一个唯一的值,这个叫做行键(RowKey)。而在HBase的列不是我们在关系型数据库所想象中的列。HBase的列(Column)都得归属到列族(Column Family)中。在HBase中用列修饰符(Column Qualifier)来标识每个列。在HBase里边,先有列族,后有列。什么是列族?可以简单理解为:列的属性类别,比如
- UserInfo
- name :zhangsan
- age :18
- OrderInfo
- orderId:20192
- money :30
列是由列族+列表示符决定的,那么这个表,有两个列族,UserInfo和OrderInfo,在UserInfo下有两个列,分别是UserInfo:name和UserInfo:age,在OrderInfo下有两个列,分别是OrderInfo:orderId和OrderInfo:money。UserInfo:name的值为:三歪。UserInfo:age的值为24。OrderInfo:orderId的值为23333。OrderInfo:money的值为30。这些数据的主键(RowKey)为1
- UserInfo
- HBase表的每一行中,列的组成都是灵活的,行与行之间的列不需要相同。比如第一行(姓名,年龄),第二行(年龄,手机号),换句话说:一个列族下可以任意添加列,不受任何限制
- 时间戳:数据写到HBase的时候都会被记录一个时间戳,这个时间戳被我们当做一个版本。比如说,我们修改或者删除某一条的时候,本质上是往里边新增一条数据,记录的版本加一了而已。在读的时候按照时间戳读最新的记录。在外界「看起来」就是把这条记录改了。
- KeyType:我们上面只说了「修改」的情况,你们有没有想过,如果要删除一条数据怎么做?实际上也是增加一条记录,只不过我们在KeyType里边设置为“Delete”就可以了。
- HBase 的Key-Value,HBase本质上其实就是Key-Value的数据库,Key由RowKey(行键)+ColumnFamily(列族)+Column Qualifier(列修饰符)+TimeStamp(时间戳–版本)+KeyType(类型)组成,而Value就是实际上的值
- HBase架构:
- Client客户端,它提供了访问HBase的接口,并且维护了对应的cache来加速HBase的访问。
- Zookeeper存储HBase的元数据(meta表),无论是读还是写数据,都是去Zookeeper里边拿到meta元数据告诉给客户端去哪台机器读写数据
- HRegionServer它是处理客户端的读写请求,负责与HDFS底层交互,是真正干活的节点。
- 总结大致的流程就是:client请求到Zookeeper,然后Zookeeper返回HRegionServer地址给client,client得到Zookeeper返回的地址去请求HRegionServer,HRegionServer读写数据后返回给client。
- 前面也提到了,HBase可以存储海量的数据,HBase是分布式的。所以我们可以断定:HBase一张表的数据会分到多台机器上的。那HBase是怎么切割一张表的数据的呢?用的就是RowKey来切分,其实就是表的横向切割。
- 一个HRegionServer有多个HRegion,根据rowKey取切分到不同的HRegion上,HRegion是属于某个HRegionServer的,一个HRegion上,存储HBase表的一部分数据。
- HRegion下面有多个Store,那Store是什么呢?我们前面也说过,一个HBase表首先要定义列族,然后列是在列族之下的,列可以随意添加。一个列族的数据是存储在一起的,所以一个列族的数据是存储在一个Store里边的。
- 看到这里,其实我们可以认为HBase是基于列族存储的(毕竟物理存储,一个列族是存储到同一个Store里的)
- 两个问题
- Hive:Hive是基于hadoop的一个数据仓库工具,本身不存储数据,数据都在底层的hdfs里面,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能。本质是将SQL转换为MapReduce程序。
- 用途:用来做离线数据分析,比直接用MapReduce程序开发效率更高。
- spark:Spark是开源的类Hadoop MapReduce的通用并行框架, 专门用于大数据量下的迭代式计算.是为了跟 Hadoop 配合而开发出来的,不是为了取代 Hadoop, Spark 运算比 Hadoop 的 MapReduce 框架快的原因是因为 Hadoop 在一次 MapReduce 运算之后,会将数据的运算结果从内存写入到磁盘中,第二次 Mapredue 运算时在从磁盘中读取数据,所以其瓶颈在2次运算间的多余 IO 消耗. Spark 则是将数据一直缓存在内存中,直到计算得到最后的结果,再将结果写入到磁盘,所以多次运算的情况下, Spark 是比较快的. 其优化了迭代式工作负载
- MapReduce缺点:
- 表达能力有限,只有map和reduce两个函数
- 磁盘开销大
- 延迟高,必须所有map都完成后才可以进入reduce阶段
- spark优点:首先说明,spark计算模式本质上也是MapReduce,但是操作不再局限于map和reduce两个函数
- 操作类型多
- 表达能力强
- 内存计算,速度快
- 基于DAG(有向无环图)调度机制–>流水线化处理
- RDD:提供了抽象的数据结构,使得我们不用担心底层数据分布式的特性,而只需要把具体的应用逻辑去表达为一系列的转换处理,不管多么复杂的业务逻辑,都可以把他转换成一系列的RDD转换,不同的RDD转换之间就形成了依赖关系,也就是一个有向无环图,对其优化,我们可以实现数据的管道化处理,也就是流水线
- RDD 就是一个分布式对象的集合,本质上是一个只读的分区记录集合
- RDD 转换过程中,通过生成一个新的RDD来完成对一个数据修改的目的
- 操作类型:都是粗粒度的转换操作,一次只针对RDD全集进行修改
- 动作类型操作
- 转换类型操作
- MapReduce缺点:
- 大数据计算模式:
- 批处理(MapReduce,spark):拿海量的数据一次进行处理
- 流计算(storm,Flume):数据一边到达一边对其进行处理,时效性要求非常高
- 图计算(pregel):社交网络,就是一个图结构数据
- 查询分析计算(Dremel,Hive):汇总分析
- YARN:资源调度和管理框架,在hdfs和mapreduce之间,计算所需的底层的cpu和内存资源
- Pig:数据流处理,和hive组合使用,hive查询之间,必须把数据从1各个不同的源头抽取过来,抽取过程当中,需要进行数据的清洗,而这个工作就让pig做
- Mahout:是MapReduce之上的数据挖掘和机器学习的算法库
- Zookeeper:分布式协作服务,
- Flume:日志采集
- Hadoop
- 设计模式
- 单例模式
- 建造者模式
- 代理模式
- 模板方法
- 外观模式
- 策略模式
- 观察者模式
- 除此以外,要自己准备一些毕设问题和计算机前沿问题