编译原理/数据结构##
堆栈
栈区(stack):由编译器自动分配释放,存放函数的参数值、局部变量值等。
堆区(heap):一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收
动态存储和静态存储的区
静态存储:
- 在编译时对数据对象分配固定的存储位置,运行时始终不变,即一旦存储空间的某个位置分配给了某个数据名,则在目标程序的整个运行过程中,此位置就属于该数据名。
- 由静态存储分配产生的数据区称为静态数据区
- 静态存储分配不允许递归过程或递归调用
- 静态存储分配的特点:简单、易于实现
动态存储:
- 指在运行阶段动态的为源程序中的数据对象分配存储位置
- 允许递归过程
- 允许用户自由申请和释放空间
- 两种动态存储方式:栈(stack)、堆(heap)
程序运行三个阶段
1. 编译:生成目标模块或目标文件(.c文件)
2. 链接:链接库函数装入模块(.o文件)
静态链接:程序运行前就进行链接
装入时动态链接:边装入边链接
运行时动态链接:开始执行时,才进行库函数的链接
3. 装入:将模块装入内存。(.exe文件)
绝对装入:装入程序按照装入模块中的地址,将程序和数据装入内存
静态重定位:装入程序时就通过重定位确定其装入地址
动态重定位:运行时,利用重定位寄存器重新计算指令地址
胖树
胖树是一种带宽不收敛的拓扑结构,他是无阻塞网络的基础。一般的树形结构,树每一层的枝是同等大小的,因此,网络的最大带宽取决于最顶层,也就是核心层的带宽,这是树的性能瓶颈。但在胖树中,各层的带宽总和是保持不变的。所以他能保证网络的无拥塞。
编译的过程
第一阶段词法分析:输入源程序,对构成源程序的字符串进行扫描和分解,识别出一个个的单词
第二阶段语法分析:在词法分析的基础上,根据语言的语法规则,把单词符号串分解成各类语法单位,如短语、句子、程序段等,通过语法分析,确定整个输入串是否构成语法上正确的程序。语法分析所依据的是语言的语法规则,语法规则通常用上下文无关文法描述。
第三阶段词义分析与中间代码产生:对语法分析所识别出的各类语法范畴分析其含义,并进行初步翻译产生中间代码,这一阶段利用的是语言的语义规则,使用属性文法描述语义规则。
第四阶段优化:优化任务在于对前段产生的中间代码进行加工变换,以期待在最后阶段能产生出更为高效的目标代码
第五阶段目标代码生成:把中间代码变成特定机器上的低级语言代码,这阶段实现了最后的翻译
计算机网络##
五层协议
- 应用层:为特定应用程序提供数据传输服务,例如HTTP、DNS等协议。数据单位为报文。
- 传输层:为进程提供通用数据传输服务。由于应用层协议很多,定义通用的传输层协议就可以支持不断增多的应用层协议。运输层包括两种协议:传输控制协议TCP,提供面向连接、可靠的数据传输服务,数据单位为报文段;用户数据报协议UDP,提供无连接、尽最大努力的数据传输服务,数据单位为用户数据报。TCP主要提供完整性服务,UDP主要提供及时性服务。(流量控制、差错控制、服务质量、数据传输管理、端到端)
- 网络层:为主机提供数据传输服务。而传输层协议是为主机中的进程提供数据传输服务。网络层把传输层传递下来的报文段或者用户数据报封装成分组。(流量控制、拥塞控制、差错控制、网际互联)
- 数据链路层:网络层针对的还是主机之间的数据传输服务,而主机之间可以有很多链路,链路层协议就是为同一链路的主机提供数据传输服务。数据链路层把网络层传下来的分组封装成帧。
(封装成帧、差错控制、流量控制、传输管理) - 物理层:考虑的是怎样在传输媒体上传输数据比特流,而不是指具体的传输媒体。物理层的作用是尽可能屏蔽传输媒体和通信手段的差异,使数据链路层感觉不到这些差异。
TCP为什么三次握手
为了实现可靠数据传输,TCP协议的通信双方,都必须维护一个序列号,以标识发送出去的数据包中,哪些是已经被对方收到的,三次握手的过程即是通信双方相互告知序列号起始值,并确认对方已经收到了序列号起始值的必经步骤
如果只是两次握手,至多只有连接方的起始序列号能被确认,另一方选择的序列号则得不到确认。
C/C++##
printf参数的格式和长度
%d 十进制有符号整数
%f 浮点数
%s 字符串
%c 单个字符
%p 指针的值
%3d表示输出3位整型数,不够3位右对齐
%9.2f表示输出宽为9的浮点数,其中小数位为2,整数位为6,小数点占一位,不够9位右对齐
%8s表示输出8个字符的字符串,不够8个字符右对齐
%04d表示在输出一个小于4位的数值时,将在前面补0使其总宽度为4位
%6.9s表示显示一个长度不小于6且不大于9的字符串,若大于9,则第九个字符以后的内容被删除。
C++的三种继承方式
公有继承、私有继承、保护继承
- 公有继承:
①基类中的public仍为public
②基类中的protected仍为protected
③基类中的private仍为private - 私有继承:
①基类中的public,protected变为private
②基类中的private仍为private - 保护继承:
①基类中public变为protected
②基类中的protected仍为protected
③基类中private仍为private
C语言和C++语言区别和联系
1. C是面向过程的语言,而C++是面向对象的语言
2. C和C++在动态分配内存方面存在差异,C使用malloc/free函数,而C++使用除此之外还有new/delete关键字
3. C语言中没有class,只有struct;C++中两者都有。class的默认访问修饰符是private,而struct是public
4. C++支持函数重载,而C不支持函数重载,这是由于两者的名字修饰不同
5. C++有引用,而C没有引用
内存分配方式
在C++中内存分为5个区,分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。
- 堆:堆是操作系统中的术语,是操作系统所维护的一块特殊内存,用于程序的内存动态分配,C语言使用malloc从堆上分配内存,使用free释放已分配的对应内存。
- 栈:在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。
- 自由存储区:自由存储区是C++基于new操作符的一个抽象概念,凡是通过new操作符进行内存申请,该内存即为自由存储区。
- 全局/静态存储区:这块内存是在程序编译的时候就已经分配好的,在程序整个运行期间都存在。例如全局变量,静态变量。
- 常量存储区:这是一块比较特殊的存储区,他们里面存放的是常量(const),不允许修改。
虚函数与纯虚函数的特点?
虚函数必须是基类的非静态成员函数,其访问权限可以是protected或public;纯虚函数是虚函数的一个子集,含有纯虚函数的类就是抽象类,它不能生成对象。
类与结构体有什么区别?
(1)结构体存储在栈中,类的实例化可以存储在栈中,也可以存储在堆中;
(2)结构体的执行效率比类要高;
(3)结构体没有析构函数,类有析构函数;
(4)结构体不可以继承,类可以继承。
对CRT的理解
C-runtime-library,是C语言在操作系统上的低级库,C程序运行时需要这些库中的函数,包括一些main函数的调用、exit函数的响应等,包含了C程序运行的最基本和最常用的函数。
C语言内联汇编的格式:
采用asm关键字,汇编语言用引号引起来,以\n\t代表一条汇编语句的结尾。
栈溢出的原因:
死循环或者是递归太深
存储类型
extern 外部变量声明,是指这是一个已在别的地方定义过的对象,这里只是对变量的一次重复引用,不会产生新的变量。
static 静态数据,数据存放在全局数据区,但作用域只是本文件/函数中,所以你可以在两个不同的文件/函数内部申明同名的static变量,但是它们是两个不同的全局变量。 如果是定义在函数内,那么该对象具有无链接,函数外不能对其访问。如果是定义在函数外,那么该对象具有内部链接,其它程序文件不能对其访问。
auto 普通局部栈变量,是自动存储,这种对象会自动创建和销毁 ,建议这个变量要放在堆栈上面,调用函数时分配内存,函数结束时释放内存。一般隐藏auto默认为自动存储类别。我们程序都变量大多是自动变量。
register 寄存器变量,请求编译器将这个变量保存在CPU的寄存器中,从而加快程序的运行。
auto在C语言与C++中的区别
C语言中auto是一种存储类型定义
C++中的auto是一种一个类型说明符,表明让编译器自己根据变量的初始值或者表达式中 参与运算的数据类型来推断变量的类型
函数名: exit()
所在头文件:stdlib.h
功 能: 关闭所有文件,终止正在执行的进程
exit(1)表示异常退出.这个1是返回给操作系统的
exit(x)(x不为0)都表示异常退出
exit(0)表示正常退出
操作系统##
操作系统的定义
操作系统是指控制和管理整个计算机系统的硬件和软件资源,并合理的组织和调度计算机的工作和资源的分配,以提供给用户和其他软件方便的接口和环境。
冯诺依曼结构的主要思想
存储程序。
冯诺依曼将主机分为五个部分:输入、输出、控制器、运输器、存储器。存储程序就是把程序存储在存储器中,无论是输入进来的程序、用来输出的程序、控制器读取的指令、运输算器读取的数据,都存在存储器。
线程池的优点
1. 线程是稀缺资源,使用线程池可以减少创建和销毁线程的次数,每个工作线程都可以重复使用。
2. 可以根据系统的承受能力,调整线程池中工作线程的数量,防止因为消耗过多内存导致服务器崩溃。
进程通信的方式:共享内存、消息队列、管道、信号、信号量、套接字。
管道通信的特点
1.管道通信是单向的,有固定的读端和写端。
2.数据被进程从管道读出后,在管道中该数据就不存在了
3.当进程去读取空管道的时候,进程会阻塞
4.当管道往满管道写数据时,进程会阻塞
文件中记录的组织形式有哪几种
有堆文件形式、哈希文件形式、索引文件形式、动态哈希文件形式等
在堆文件中,记录按照插入顺序存储,并按顺序检索。这是文件组织中最基本,最通用的形式
在哈希文件中,使用每条记录的某些属性计算一个散列函数,散列函数的结果确定了记录应放到文件的哪个块中
索引文件则在堆文件的基础上使用了B+树索引
动态哈希文件可以动态调整哈希函数的映射空间
区分RAM、ROM、PROM、EPROM、EEPROM
1、RAM指的是“随机存取存储器”,即Random Access Memory。它可以随时读写,而且速度很快,缺点是断电后信息丢失。
2、ROM指的是“只读存储器”,即Read-Only Memory,不能进行修改。
3、PROM指的是“可编程只读存储器”既Programmable Read-Only Memory。这样的产品只允许写入一次。
4、EPROM指的是“可擦写可编程只读存储器”,即Erasable Programmable Read-Only Memory。 它的特点是具有可擦除功能,擦除后即可进行再编程,但是缺点是擦除需要使用紫外线照射一定的时间。
5、EEPROM指的是“电可擦除可编程只读存储器”,即Electrically Erasable Programmable Read-Only Memory。它的最大优点是可直接用电信号擦除,也可用电信号写入。
传感器网络##
Ad-hoc network(自组网):无线网络用户通过无中心,自组织的方式形成自组网,特点是无需基站和上层网络支持,用户自身具备网络地址指派、路由选择以及域名解析的功能。无线传感网是典型的实例,他是无线领域的对等网(peer-to-peer network),每个节点既是数据的生产者也是数据的转发者
时延:发送时延、等待时延、传输时延、处理时延。
路由协议
Flooding路由协议(洪泛路由),内爆和重叠现象的解释
原理
- 源节点A需要将数据包p发送至汇聚节点D
- 节点A首先将p的副本广播,则其邻居节点B接收到p副本
- 节点B直接将p副本通过广播的形式转发给E、F、C
- 以此类推,直到p到大汇聚节点D或到达TTL
内爆(Implosion)
节点向邻居节点转发数据包,不管其是否收到过相同的,即所谓信息内爆是指网络中的节点收到一个数据的多个副本的现象。
重叠(Overlap)
感知节点感知区域有重叠,导致数据冗余,即由于无线传感器网络节点密集部署,因此在同一局部区域中,若干个节点对区域内同一个事件做出的反应相同,所感知的信息在数据性质上相似,数值上相同,那么这些节点的邻居节点所接收到的数据副本也具有较大的相关性。
GRID路由协议
三个阶段:栅格划分、路由建立、路由维护
将网络分为正方形的小栅格,栅格内的所有节点都共享这个栅格编号,栅格内的簇头节点负责栅格中分组转发。栅格簇头节点的选择原则是按照停留在栅格内时间最长的节点作为簇头节点,只有在该节点离开该栅格时才会进行新一轮的簇头选择(与LEACH不同,LEACH周期性选择,每个节点是等概率的成为簇头;与GAF也不同,GAF只是生成单元格,不限正方形)。
在功率控制、拓扑管理、或者选取网络中哪些节点处于活动状态时,需要考虑满足以下两个因素:
连通:网络活动节点集合中任意两个节点都能够互相通信,使得传感节点采集的数据能够被发回基站。
覆盖:活动节点集合的传感区域能够覆盖整个监测目标。
Gossiping路由协议:也叫闲聊路由,是基于洪泛协议的改进,当节点接收到数据之后,按照一定概率随机地将数据包转发给邻居节点中不同于发送节点的某一个节点,这个节点以相同的方式向其邻居节点进行数据转发直到数据到达汇聚节点。
SPIN协议基本思想
考虑到由于临近节点所感知的数据具有相似性,通过节点间协商的方式减少网络中数据的传输数据量。节点只广播其它节点所没有的数据以减少冗余数据,从而有效减少能量消耗。
主要步骤:A结点会广播自己收到的信息,B如果发现自己没有,向A请求新数据,如果有就不发送请求。
贪心算法
1. 爬山算法
爬山算法是一种简单的贪心搜索算法,该算法每次从当前解的临近解空间中选择一个最优解作为当前解,直到达到一个局部最优解。 爬山算法实现很简单,其主要缺点是会陷入局部最优解,而不一定能搜索到全局最优解。假设C点为当前解,爬山算法搜索到A点这个局部最优解就会停止搜索,因为在A点无论向那个方向小幅度移动都不能得到更优的解。
2. 模拟退火
模拟退火其实也是一种贪心算法,但是它的搜索过程引入了随机因素。在迭代更新可行解时,以一定的概率来接受一个比当前解要差的解,因此有可能会跳出这个局部的最优解,达到全局的最优解。
3. 蚁群算法是一种用来寻找优化路径的概率型算法。模拟蚂蚁寻找食物的过程,通过概率与正反馈,使优良路径信息保存下来,进而计算出最佳的到达路经,是一种学习强化算法。
与距离有关的定位方法
三边测量法、三角测量法、极大似然测量
- 基于TOA的定位:通过计算声波的传播时间来测量节点间距离,再采用三边测量和极大似然计算位置
- 基于TDOA的定位:两个节点用不同传播速度的声波传给接收节点,接收节点通过时间差和速率大小计算两点的距 离,再结合其他接收节点的数据计算位置。
- 基于AOA的定位:通过天线阵列感知节点信号的到达方向。计算接收节点到发射节点的相对方位和角度,通过三角测量法计算位置。
与距离无关的定位算法
质心算法、DV-Hop算法
质心算法:不断根据邻居节点的位置计算质心作为未知节点的位置,直到接收一定时间或分组数量达到一定的门限。
时间同步
原因:节点间的晶体震荡有偏差、温度和电磁都有干扰,而分布式都协同工作需要节点间的时间同步
NTP协议(internet):客户端发送时间请求,服务端回应包含时间信息的应答消息
RBS协议(传感器网络):通过接收节点的时间对比消除时间差距。每个接收节点都会在接收到信标分组时,交换它们的接收时间,进而得到两者得差值,其中一个节点就可根据这个差值更改本地时间,一般情况下,会采用统计技术,计算一段时间差值得线性回归斜率作为时间差异。
TPSN协议(传感器网络):生成层次网络,然后由根节点开始逐步进行广播时间同步,最终实验所有节点得时间同步。
拓扑控制:
- 功率控制
(1)基于节点度的算法:
LMN和LMA。度表示一跳的邻居节点数目。先确定一个度的范围、然后在发送是,如果自己的度大于这个范围的最大值,减少发射效率,反之,自己的度小于这个范围的最小值,增大发送效率。
(2)基于邻近图的算法
RNG、DRNG、DLSS。节点以最大功率发射生成拓扑图为G,按一定的规则,求出邻近图G’,以G’的最远通信节点来确定最终发射功率。 - 层次型拓扑结构控制
(1)LEACH算法
周期性的进行簇头的选择,节点传到簇头进行数据融合在向上传输。这样簇头的损耗,会加大,所以要采用等概率周期性选择簇头
(2)GAF算法
将监测区域分化为虚拟单元格,每个单元格产生一个簇头,通过簇头向上传输数据,单元格内的节点采用直接通信。
数据库##
数据库锁有几种
- 共享锁:多个事务可封锁一个共享页,任何事物都不能修改该页,通常是该页被读取完毕,共享锁立即被释放。
- 排它锁:仅允许一个事务封锁此页,其他任何事务必须等到排它锁被释放才能对该页进行访问,排它锁一直到事务结束才能释放。
- 更新/意向锁:用来预定要对此页施加锁,它允许其他事务读,但不允许再施加更新锁或排它锁,当被读取的页将要被更新时,则升级为排它锁,更新锁一直到事务结束时才能被释放。
数据库的事务
事务指逻辑上的一组操作,组成这组操作的各个单元,要么全成功,要么全不成功
事务的特性(ACID):
A,atomicity:原子性,事务必须是原子工作单元,对于数据的执行要不是全部执行,要不都不执行。如果只执行一个子集,可能会破坏事务的总体目标。
C,consistency:一致性。事务将数据库从一种一致状态变为下一种一致状态
I,isolation:隔离性。由并发事务所作的修改必须与任何其它并发事务所作的修改隔离。事务查看数据时数据所处的状态,要么是另一并发事务修改它之前的状态,要么是另一事务修改它之后的状态,事务不会查看中间状态的数据。换句话说,一个事务的影响在该事务提交前对其他事务都不可见。
D,durability,持久性:事务完成之后,它对于系统的影响是永久性的。该修改即使出现致命的系统故障也将一直保持。
异常情况(并发一致性问题)
1. 丢失数据:
(1).两个事务都对一个数据进行修改,一个先修改,另一个随后修改,第二个修改覆盖了第一个的修改。
(2).两个事务更新相同的数据源,如果第一个事务被提交,第二个却被撤销,那么连同第一个事务做的更新也被撤销。
2. 读脏数据:
T1对一个数据做了修改,T2读取这一个数据。若T1执行 ROLLBACK 操作,则 T2读取的结果和第一次的结果不一样。当一个事务读取另一个事务尚未提交的修改时,产生脏读。
3. 不可重复读(非重复读):
T1读取一个数据,T2对该数据做了修改。如果 T1再次读取这个数据,此时读取的结果和第一次读取的结果不同。一个事务对同一行数据重复读取两次,但是却得到了不同的结果。同一查询在同一事务中多次进行,由于其他提交事务所做的修改或删除,每次返回不同的结果集。
4. 幻影读:
T1读取某个范围的数据,T2在这个范围内插入新的数据,T1再次读取这个范围的数据,此时读取的结果和第一次读取的结果不同。事务在操作过程中进行两次查询,第二次查询的结果包含了第一次查询中未出现的数据(这里并不要求两次查询的SQL语句相同)。这是因为在两次查询过程中有另外一个事务插入数据造成的。
解决方案:在并发环境下,事务的隔离性很难保证,因此会出现很多并发一致性问题。产生并发不一致性问题的主要原因是破坏了事务的隔离性。解决方法是通过并发控制来保证隔离性,并发控制可以通过封锁来实现。
索引
概念:是针对数据库中一列或多列的值进行排序的数据结构,能加快数据库访问特定的数据信息
索引的类型:
- 唯一索引:在创建唯一索引时要不能给具有相同的索引值。
- 主键索引:在我们给一个字段设置主键的时候,它就会自动创建主键索引,用来确保每一个值都是唯一的。
- 聚集索引:我们在表中添加数据的顺序,与我们创建的索引键值相同,而且一个表中只能有一个聚集索引。
- 普通索引:它的结构主要以B+树和哈希索引为主,主要是对数据表中的数据进行精确查找。
- 全文索引:它的作用是搜索数据表中的字段是不是包含我们搜索的关键字,就像搜索引擎中的模糊查询。
数据库完整性(Database Integrity)
是指数据库中数据在逻辑上的一致性、正确性、有效性 和相容性,由各种各样的完整性约束来保证,数据库完整性约束可以通过DBMS或应用程序来实现。包括实体完整性、用户定义完整性、参照完整性。
数据抽象:只向外界提供关键信息,并隐藏其后台的实现细节
数据抽象的三个层次从低到高分别是物理层、逻辑层与视图层;
物理层是最低层次的抽象,描述数据实际上是怎样存储的。物理层详细描述复杂的底层数据结构
逻辑层是比物理层层次稍高的抽象,描述数据库中存储什么数据及这些数据间存在什么关系
视图层是最高层次的抽象,只描述整个数据库的某个部分,用于与用户的交互
数据库设计可分为哪几个阶段?
数据库设计可分为需求分析、概念结构设计、逻辑结构设计、物理结构设计、数据库实施、数据库运行与维护这几个阶段
SQL语句按照功能可分为哪几个部分?
SQL语句按功能可分为数据定义语言DDL、查询语言QL、数据操纵语言DML、数据控制语言 DCL
数据定义语言用于定义,删除或更改数据模式。查询语言用于检索数据。数据操纵语言用于 插入、删除或更新数据。数据控制语言用于控制用户对数据的访问权限
嵌入式系统##
嵌入式系统的概念
以应用为中心,以计算机为基础,软硬件可裁剪的一种适应应用系统功能、能耗、成本等要求的专用计算机。
发展过程:电子管计算机——微处理器问世——单片机——嵌入式系统
除了冯诺依曼结构还有哈佛结构,哈佛结构的核心是将程序和数据放在不同的存储空间中。
RISC的设计思想
1. 指令集只提供简单操作
2. 指令流水线并发执行
3. 采用大量的通用寄存器
4. load-store结构,用独立的load和store完成数据在寄存器和外存之间的传输。
ARM是典型的RISC体系。
函数调用的步骤
1. 参数入栈:将参数从右向左依次压入系统栈中。
2. 返回地址入栈:将当前代码区调用指令的下一条指令地址压入栈中,供函数返回时继续执行。
3. 代码区跳转:处理器从当前代码区跳转到被调用函数的入口处。
4. 栈帧调整:具体包括:
保存当前栈帧状态值,已备后面恢复本栈帧时使用(EBP入栈)。
将当前栈帧切换到新栈帧(将ESP值装入EBP,更新栈帧底部)。
给新栈帧分配空间(把ESP减去所需空间的大小,抬高栈顶)。
ARM的模式
用户模式,不能访问受保护的资源。
系统模式:运行特权系统任务
快中断模式(FIQ):高速数据传输和通道处理
一般中断(IRQ):一般中断
特权模式supervisor:进行系统的初始话化或操作系统的功能。
Abort模式:存储器保护异常处理
Undefined模式:未定义异常处理
中断异常
外部中断:CPU外部原因引起,可屏蔽
软件中断:自陷,请求调用系统任务时
异常:CPU内部运算出错。
异常响应步骤
1. 保存当前状态寄存器里的内容。
2. 保存当前指令地址、也就是返回的地址
3. 对状态寄存器里的控制位进行设置,切换状态到核心态
4. 将程序计数器指向中断处理指令的代码
优先级最高的异常复位异常
嵌入式的体系结构
应用层、中间层、操作系统层和硬件驱动层。
中间件层是可以方便系统的移植
操作系统层主负责系统任务的调度,还包括嵌入式的内核、网络系统、文件系统、电源管理等。
嵌入式软件运行过程
上电复位——系统引导——系统初始化——应用初始化——多任务阶段(进行正常任务调度)
系统引导:读取外存软件加载到RAM上
系统初始化:配置相应的系统软件部分如接口、数据空间等
应用初始化:创建信号量、消息队列等
嵌入式操作系统的体系结构
宏内核、层次结构、客户/服务器结构(微内核)
- 宏内核:两种工作模式:系统模式、用户模式 主要例子:安卓
- 层次结构:对系统进行层次管理机制,第n环不能修改第n-1环的数据,保证操作系统的安全性吧。主要例子:OSI层次结构
- 客户/服务器模型(微内核):把系统的绝大部分的功能作为服务器的任务和进程,内核只负责任务调度和通讯等基础功能。
信息安全及密码学##
密码
替换密码:
凯撒密码:简单得将字母表加数字替换
维吉尼亚密码:属于多表替换密码,将明文与密钥相加模26得密文,能较大程度得抵御字母频率攻击
Playfire密码:基于矩阵的替换密码,同行取右边、同列取下边、否则取对角
换位密码:列换位、矩阵换位、倒置法
一次一密:
序列密码:A5、RC4
分组密码:IDEA、RC5/RC6 主要方式:置换、混淆、扩散等方式
公钥密码:RSA密码、背包密码、Elgamal密码
分组密码
特性:置换、混淆、扩散。
置换:一一映射
混淆:减少字母间的相关性
扩散:隐蔽明文特性
公钥密码及其原理
RSA:因数分解
背包:多项式除法
ELGamal:离散对数
门限密码的优点
- 可以增加新的成员而不影响原来的密钥;
- 也可以通过选用另一个多项式废除一个成员的权限。
- 还能进行分级制度,分布不同级别的权限。
密码分析攻击:
唯密文攻击、已知明文攻击、选择明文攻击、选择密文攻击、软磨硬泡攻击(威胁勒索,严刑拷打)
先考虑字母出现的频率,再考虑字母链接频率,然后考虑字母反复使用的特征,最后考虑一些常用语如dear
数字签名
数字签名的要求:可验证、防抵赖、防伪造、防篡改、防假冒。
一般由签名算法和验证算法的组成,是公钥密码体制的一种应用,一般签名算法由自己保存不公开,验证算法是公开的。但相比于消息加密,消息签名对安全性要求会更高,因为它要保存长时间,而且验证速度也要快,作为实时的消息回应。
物联网技术##
物联网层次结构:感知识别层、网络构建层、管理服务层、综合应用层
- 感知识别层(核心技术):联系物理世界与信息世界的纽带,既包括RFID、无线传感器等 信息自动生成设备,也包括各种智能电子产品用来人工生成信息。
- 网络构建层(把感知识别层的数据接入物联网)
- 管理服务层(将数据进行有效组织):存储是信息处理的第一步,如何有效的组织和查询数 据是核心问题。
物联网技术
RFID利用射频识别和空间耦合实现无接触信息传递和身份识别功能。主要由标签、阅读器、天线组成,其中数据载体是标签
无线传感器由电路、敏感单元和转换元件组成,具有低功耗和微型化的特点,微处理器是计算核心
传感器网络:具有低成本、低功耗、可扩展和鲁棒性的特点。
无线通信协议:蓝牙、zigbee、NB-IOT、wifi。
无线接入技术的基本组成元素:无线网络用户、无线连接、基站
NB-IOT是一种新兴技术,构建于蜂窝网络,具有覆盖广、连接多、速率快、成本低、功耗低、架构优等特点
RFID标签类型:
- 被动式标签(又称无源标签)
内部的集成电路通过接收由阅读器发出的电磁波进行驱动,从而向阅读器发送数据。
优点:体积小,重量轻,寿命长
缺点:识别距离受限制 - 主动式标签(又称有源标签,具有两种工作模式)
两种模式:
主动模式:标签主动向四周进行周期性传播
唤醒模式:标签一开始处于低耗电量的休眠状态,阅读器识别时需先广播一个唤醒指令,只有当标签接收到唤醒命令时才会开始广播自己的编码。
优点:通信距离要更远。
缺点:体积比被动式要大、价格昂贵。 - 半主动式标签(有电源提供)
兼有被动式和主动式的优点,内部携带电池,能够为标签内部计算提供电源。
能够携带传感器,用于检测环境参数,标签和阅读器通信是不需要电池提供能量的,而是像被动式一样通过阅读器发射的电磁波获取通信能量。
其他知识##
双聚类算法
算法简介:在数据矩阵A中寻找一个满足条件矩阵B1的子矩阵A1,而B1是条件矩阵B的一个子矩阵。
图像的数据本质:
像素
大数据与人工智能的关系
大数据和人工智能虽然关注点并不相同,但是却有密切的联系,一方面人工智能需要大量的数据作为“思考”和“决策”的基础,另一方面大数据也需要人工智能技术进行数据价值化操作。
大数据和云计算之间的关系
类似容器和水的关系,云计算就像一个容器,而大数据则正是存放在这个容器中的水,大数据要依靠云计算技术来进行存储和计算。
ip的linux命令:ip config、ip adress、ip route
Linux目录文件及功能
/root 超级用户的目录
/net 存放着和网络相关的一些文件
/lib 系统库文件
Flask的理解
Flask是基于python的一个轻量级Web开发架构,具有轻巧、简洁的特点,但相对应的,他的缺点就是它只有少量库函数,它依靠各种其他第三方库扩展其功能。但对于一些轻便、用户量不大的网站,Flask架构有着极佳的性能。Flask本质是Socket服务端,其用于接收http请求并对请求进行预处理,然后触发Flask框架,开发人员基于Flask框架提供的功能对请求进行相应的处理,并返回给用户。