1、基本型和基本型封装型进行“==”运算符的比较,基本型封装型将会自动拆箱变为基本型后再进行比较,因此Integer(0)会自动拆箱为int类型再进行比较,显然返回true;
2、两个Integer类型进行“==”比较,如果其值在-128至127,那么返回true,否则返回false, 这跟Integer.valueOf()的缓冲对象有关,这里不进行赘述。
3、两个基本型的封装型进行equals()比较,首先equals()会比较类型,如果类型相同,则继续比较值,如果值也相同,返回true
4、基本型封装类型调用equals(),但是参数是基本类型,这时候,先会进行自动装箱,基本型转换为其封装类型,再进行3中的比较。
int a=257;
Integer b=257;
Integer c=257;
Integer b2=57;
Integer c2=57;
System.out.println(a==b);
//System.out.println(a.equals(b)); 编译出错,基本型不能调用equals()
System.out.println(b.equals(257.0));
System.out.println(b==c);
System.out.println(b2==c2);
因此上面的代码的结果因此为 true, false, false, true
常用熟知端口: FTP 21 SSH 22 TELNET 23 SMTP 25 TFTP 69 HTTP 80 SNMP 161 HTTPS 443
1000以内与105互质的偶数有多少个?
105=3*5*7,设[x]表示不大于x的最大整数,
1--1000之间有500个偶数,[500/3]=166,[500/5]=100,[500/7]=71,
[500/15]=33,[500/21]=23,[500/35]=14,[500/105]=4,
由容斥原理,1--1000之间与105互质的偶数有
500-(166+100+71)+(33+23+14)-4
=500-337+70-4=229个.
产生式模型(Generative Model)与判别式模型(Discrimitive Model)是分类器常遇到的概念,它们的区别在于:
对于输入x,类别标签y:
产生式模型估计它们的联合概率分布P(x,y)
判别式模型估计条件概率分布P(y|x)
常见的判别模型有线性回归(Linear Regression),逻辑回归(Logistic Regression),支持向量机(SVM), 传统神经网络(Traditional Neural Networks),线性判别分析(Linear Discriminative Analysis),条件随机场(Conditional Random Field);常见的生成模型有朴素贝叶斯(Naive Bayes), 隐马尔科夫模型(HMM),贝叶斯网络(Bayesian Networks)和隐含狄利克雷分布(Latent Dirichlet Allocation)。
伪逆法:径向基(RBF)神经网络的训练算法,径向基解决的就是线性不可分的情况。
感知器算法:线性分类模型。
H-K算法:在最小均方误差准则下求得权矢量,二次准则解决非线性问题。
HK算法思想很朴实,就是在最小均方误差准则下求得权矢量.
他相对于感知器算法的优点在于,他适用于线性可分和非线性可分得情况,对于线性可分的情况,给出最优权矢量,对于非线性可分得情况,能够判别出来,以退出迭代过程。
势函数法:势函数非线性。
在贝叶斯决策中,对于先验概率p(y),分为已知和未知两种情况。
1. p(y)已知,直接使用贝叶斯公式求后验概率即可;
2. p(y)未知,可以使用聂曼-皮尔逊决策(N-P决策)来计算决策面。
而最大最小损失规则主要就是使用解决最小损失规则时先验概率未知或难以计算的问题的。
k-means 聚类。
Logit回归本质上是一种根据样本对权值进行极大似然估计的方法,而后验概率正比于先验概率和似然函数的乘积。logit仅仅是最大化似然函数
Logit回归的输出就是样本属于正类别的几率,可以计算出概率
SVM的目标是找到使得训练数据尽可能分开且分类间隔最大的超平面
SVM可以通过正则化系数控制模型的复杂度,避免过拟合
机器学习中发生过拟合的主要原因有:
(1)使用过于复杂的模型;
(2)数据噪声较大;
(3)训练数据少。
由此对应的降低过拟合的方法有:
(1)简化模型假设,或者使用惩罚项限制模型复杂度;
(2)进行数据清洗,减少噪声;
(3)收集更多训练数据。
IPv6的地址包括单播地址、多播地址和任播地址三种类型。
ID3算法(IterativeDichotomiser3迭代二叉树3代)是一个由RossQuinlan发明的用于决策树的算法。可以归纳为以下几点:
使用所有没有使用的属性并计算与之相关的样本熵值
选取其中熵值最小的属性
生成包含该属性的节点
D3算法对数据的要求:
1)所有属性必须为离散量;
2)所有的训练例的所有属性必须有一个明确的值;
3)相同的因素必须得到相同的结论且训练例必须唯一。
对于分类器,主要的评价指标有precision,recall,F-score,以及ROC曲线等。precision=TP/(TP+FP),recall=TP/(TP+FN)
在二分类问题中,我们主要关注的是测试集的正样本能否正确分类。当样本不均衡时,比如样本中负样本数量远远多于正样本,此时如果负样本能够全部正确分类,而正样本只能部分正确分类,那么(TP+TN)可以得到很高的值,也就是Accuracy是个较大的值,但是正样本并没有取得良好的分类效果。因此A选项是不合理的。在样本不均衡时,可以采用BCD选项方法来评价。F-value:2*recall*precision/(recall+precision) G-mean:sqrt(precision*recall)AUC:ROC曲线下面积
维特比算法(Viterbi algorithm)是一种动态规划算法。
- 首先,CRF,HMM(隐马模型),MEMM(最大熵隐马模型)都常用来做序列标注的建模,像分词、词性标注,以及命名实体标注。
- 隐马模型一个最大的缺点就是由于其输出独立性假设,导致其不能考虑上下文的特征,限制了特征的选择。
- 最大熵隐马模型则解决了隐马的问题,可以任意选择特征,但由于其在每一节点都要进行归一化,所以只能找到局部的最优值,同时也带来了标记偏见的问题,即凡是训练语料中未出现的情况全都忽略掉。
- 条件随机场则很好的解决了这一问题,他并不在每一个节点进行归一化,而是所有特征进行全局归一化,因此可以求得全局的最优值。
-
HMM模型是对转移概率和表现概率直接建模,统计共现概率。而MEMM模型是对转移概率和表现概率建立联合概率,统计时统计的是条件概率。CRF是在给定需要标记的观察序列的条件下,计算整个标记序列的联合概率分布,而不是在给定当前状态条件下,定义下一个状态的状态分布。MEMM容易陷入局部最优,是因为MEMM只在局部做归一化。CRF模型中,统计了全局概率,在做归一化时,考虑了数据在全局的分布,而不是仅仅在局部归一化,这样就解决了MEMM中的标记偏置的问题。 CRF没有HMM那样严格的独立性假设条件,因而可以容纳任意的上下文信息,特征设计灵活。CRF需要训练的参数更多,与MEMM和HMM相比,它存在训练代价大、复杂度高的缺点。
-
中文分词的基本方法可以分为基于语法规则的方法、基于词典的方法和基于统计的方法。 基于语法规则的分词法基本思想是在分词的同时进行句法、语义分析, 利用句法信息和语义信息来进行词性标注, 以解决分词歧义现象。因为现有的语法知识、句法规则十分笼统、复杂, 基于语法和规则的分词法所能达到的精确度远远还不能令人满意, 目前这种分词系统应用较少。 在基于词典的方法中,可以进一步分为最大匹配法,最大概率法,最短路径法等。最大匹配法指的是按照一定顺序选取字符串中的若干个字当做一个词,去词典中查找。根据扫描方式可细分为:正向最大匹配,反向最大匹配,双向最大匹配,最小切分。最大概率法指的是一个待切分的汉字串可能包含多种分词结果,将其中概率最大的那个作为该字串的分词结果。最短路径法指的是在词图上选择一条词数最少的路径。 基于统计的分词法的基本原理是根据字符串在语料库中出现的统计频率来决定其是否构成词。词是字的组合,相邻的字同时出现的次数越多, 就越有可能构成一个词。因此字与字相邻共现的频率或概率能够较好的反映它们成为词的可信度。常用的方法有HMM(隐马尔科夫模型),MAXENT(最大熵模型),MEMM(最大熵隐马尔科夫模型),CRF(条件随机场)。
- 前向、后向算法解决的是一个评估问题,即给定一个模型,求某特定观测序列的概率,用于评估该序列最匹配的模型。
- Baum-Welch算法解决的是一个模型训练问题,即参数估计,是一种无监督的训练方法,主要通过EM迭代实现;
- 维特比算法解决的是给定 一个模型和某个特定的输出序列,求最可能产生这个输出的状态序列。如通过海藻变化(输出序列)来观测天气(状态序列),是预测问题,通信中的解码问题。
-
特征提取算法分为特征选择和特征抽取两大类,其中特征选择算法有互信息,文档频率,信息增益,开方检验,卡方检验等。
主成分分析不是文本分类特征选择算法。
-
K-L变换与PCA变换是不同的概念,PCA的变换矩阵是协方差矩阵,K-L变换的变换矩阵可以有很多种(二阶矩阵、协方差矩阵、总类内离散度矩阵等等)。当K-L变换矩阵为协方差矩阵时,等同于PCA。
-
SVM核函数包括线性核函数、多项式核函数、径向基核函数、高斯核函数、幂指数核函数、拉普拉斯核函数、ANOVA核函数、二次有理核函数、多元二次核函数、逆多元二次核函数以及Sigmoid核函数
-
时间序列中常用预测技术 一个时间序列是一组对于某一变量连续时间点或连续时段上的观测值。
1. 移动平均法 (MA)
1.1. 简单移动平均法
设有一时间序列y1,y2,..., 则按数据点的顺序逐点推移求出N个数的平均数,即可得到一次移动平均数.
1.2 趋势移动平均法
当时间序列没有明显的趋势变动时,使用一次移动平均就能够准确地反映实际情况,直接用第t周期的一次移动平均数就可预测第1t+周期之值。
时间序列出现线性变动趋势时,用一次移动平均数来预测就会出现滞后偏差。修正的方法是在一次移动平均的基础上再做二次移动平均,利用移动平均滞后偏差的规律找出曲线的发展方向和发展趋势,然后才建立直线趋势的预测模型。故称为趋势移动平均法。
2. 自回归模型(AR)
AR模型是一种线性预测,即已知N个数据,可由模型推出第N点前面或后面的数据(设推出P点).
本质类似于插值,其目的都是为了增加有效数据,只是AR模型是由N点递推,而插值是由两点(或少数几点)去推导多点,所以AR模型要比插值方法效果更好。
3. 自回归滑动平均模型(ARMA)
其建模思想可概括为:逐渐增加模型的阶数,拟合较高阶模型,直到再增加模型的阶数而剩余残差方差不再显著减小为止。
4. GARCH模型
回归模型。除去和普通回归模型相同的之处,GARCH对误差的方差进行了进一步的建模。特别适用于波动性的分析和预测。
5. 指数平滑法
移动平均法的预测值实质上是以前观测值的加权和,且对不同时期的数据给予相同的加权。这往往不符合实际情况。
指数平滑法则对移动平均法进行了改进和发展,其应用较为广泛。
基本思想都是:预测值是以前观测值的加权和,且对不同的数据给予不同的权,新数据给较大的权,旧数据给较小的权。
根据平滑次数不同,指数平滑法分为:一次指数平滑法、二次指数平滑法和三次指数平滑法等。
-
机器学习分类问题中的不均衡问题(正负样本相差10倍以上)。
-
解决这类问题主要分重采样、欠采样、调整权值
1. 重采样。
A可视作重采样的变形。改变数据分布消除不平衡,可能导致过拟合。
2. 欠采样。
C的方案 提高少数类的分类性能,可能丢失多数类的重要信息。
如果1:10算是均匀的话,可以将多数类分割成为1000份。然后将每一份跟少数类的样本组合进行训练得到分类器。而后将这1000个分类器用assemble的方法组合位一个分类器。A选项可以看作此方式,因而相对比较合理。
另:如果目标是 预测的分布 跟训练的分布一致,那就加大对分布不一致的惩罚系数。
3. 权值调整。
-
将负样本每个权重设置为10,正样本权重为1,参与训练过程
-
线性分类器有三大类:感知器准则函数、SVM、Fisher准则,而贝叶斯分类器不是线性分类器。 感知准则函数 :准则函数以使错分类样本到分界面距离之和最小为原则。其优点是通过错分类样本提供的信息对分类器函数进行修正,这种准则是人工神经元网络多层感知器的基础。 支持向量机 :基本思想是在两类线性可分条件下,所设计的分类器界面使两类之间的间隔为最大,它的基本出发点是使期望泛化风险尽可能小。(使用核函数可解决非线性问题) Fisher 准则 :更广泛的称呼是线性判别分析(LDA),将所有样本投影到一条远点出发的直线,使得同类样本距离尽可能小,不同类样本距离尽可能大,具体为最大化“广义瑞利商”。 根据两类样本一般类内密集,类间分离的特点,寻找线性分类器最佳的法线向量方向,使两类样本在该方向上的投影满足类内尽可能密集,类间尽可能分开。这种度量通过类内离散矩阵 Sw 和类间离散矩阵 Sb 实现。
-
二分类:每个分类器只能把样本分为两类。监狱里的样本分别为狱警、小偷、送餐员、其他。二分类肯 定行不通。瓦普尼克95年提出来基础的支持向量机就是个二分类的分类器,这个分类器学习过 程就是解一个基于正负二分类推导而来的一个最优规划问题(对偶问题),要解决多分类问题 就要用决策树把二分类的分类器级联,VC维的概念就是说的这事的复杂度。 层次聚类: 创建一个层次等级以分解给定的数据集。监狱里的对象分别是狱警、小偷、送餐员、或者其 他,他们等级应该是平等的,所以不行。此方法分为自上而下(分解)和自下而上(合并)两种操作方式。 K-中心点聚类:挑选实际对象来代表簇,每个簇使用一个代表对象。它是围绕中心点划分的一种规则,所以这里并不合适。 回归分析:处理变量之间具有相关性的一种统计方法,这里的狱警、小偷、送餐员、其他之间并没有什 么直接关系。 结构分析: 结构分析法是在统计分组的基础上,计算各组成部分所占比重,进而分析某一总体现象的内部结构特征、总体的性质、总体内部结构依时间推移而表现出的变化规律性的统计方法。结构分析法的基本表现形式,就是计算结构指标。这里也行不通。 多分类问题: 针对不同的属性训练几个不同的弱分类器,然后将它们集成为一个强分类器。这里狱警、 小偷、送餐员 以及他某某,分别根据他们的特点设定依据,然后进行区分识别。
-
sort 是按ASCII码排序
-n 依照数值的大小排序。
-r 以相反的顺序来排序。
uniq -c 是去重并显示个数
head -n 3 为取前3行
-
Linux进程的五个段
-
1)代码段:代码段是用来存放可执行文件的操作指令,也就是说是它是可执行程序在内存中的镜像。代码段需要防止在运行时被非法修改,所以只准许读取操作,而不允许写入(修改)操作——它是不可写的。代码段(code segment/text segment)通常是指用来存放程序执行代码的一块内存区域。这部分区域的大小在程序运行前就已经确定,并且内存区域通常属于只读, 某些架构也允许代码段为可写,即允许修改程序。在代码段中,也有可能包含一些只读的常数变量,例如字符串常量等。
2)数据段:数据段用来存放可执行文件中已初始化全局变量,换句话说就是存放程序静态分配的变量和全局变量。
3)BSS段:BSS段包含了程序中未初始化的全局变量,在内存中 bss段全部置零。BSS段(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域。BSS是英文Block Started by Symbol的简称。BSS段属于静态内存分配。
4)堆(heap):堆是用于存放进程运行中被动态分配的内存段,它的大小并不固定,可动态扩张或缩减。当进程调用malloc等函数分配内存时,新分配的内存就被动态添加到堆上(堆被扩张);当利用free等函数释放内存时,被释放的内存从堆中被剔除(堆被缩减)
它的物理内存空间是由程序申请的,并由程序负责释放。
5)栈:栈又称堆栈,栈是用户存放程序临时创建的局部变量,也就是说我们函数括弧“{}”中定义的变量(但不包括static声明的变量,static意味着在数据段中存放变量)。除此以外,在函数被调用时,其参数也会被压入发起调用的进程栈中,并且待到调用结束后,函数的返回值也会被存放回栈中。由于栈的先进先出特点,所以栈特别方便用来保存/恢复调用现场。从这个意义上讲,我们可以把堆栈看成一个寄存、交换临时数据的内存区。
-
-
选堆快希不稳(是不稳定的排序),
选堆归基不变(运行时间不发生变化,与初始状态无关)
-
将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路 归并 。
-
-
堆的定义如下:具有n个元素的序列(k1,k2,...,kn),当且仅当满足
-
-
时称之为堆。由堆的定义可以看出,堆顶元素(即第一个元素)必为最小项(小顶堆)。
若以一维数组存储一个堆,则堆对应一棵完全二叉树,且所有非叶结点的值均不大于(或不小于)其子女的值,根结点(堆顶元素)的值是最小(或最大)的。如:(a)大顶堆序列:(96, 83,27,38,11,09)
(b) 小顶堆序列:(12,36,24,85,47,30,53,91)
-
基本分段存储管理中,若没有引入快表,则每次从主存取指令或取操作数,要( 2)访问主存。第一次访问段名,第二次访问段内地址
-
whereis 可查询二进制文件(-b)、帮助文档(-m)、源程序(-s),无选项时,返回所有结果,-u(除上述三种的其它文件)
which 查看可执行文件的位置
whatis 查询命令有什么功能
apropos 搜索指定关键字的命令
-
tar解压缩命令
语法:tar [主选项+辅选项] 文件或者目录
使用该命令时,主选项是必须要有的,它告诉tar要做什么事情,辅选项是辅助使用的,可以选用。
主选项:
c 创建的档案文件。如果用户想备份一个目录或是一些文件,就要选择这个选项。相当于打包。
x 从档案文件中释放文件。相当于拆包。
t 列出档案文件的内容,查看已经备份了哪些文件。
特别注意,在参数的下达中, c/x/t 仅能存在一个!不可同时存在!因为不可能同时压缩与解压缩。
辅助选项:
-z :是否同时具有 gzip 的属性?亦即是否需要用 gzip 压缩或解压? 一般格式为xx.tar.gz或xx. tgz
-j :是否同时具有 bzip2 的属性?亦即是否需要用 bzip2 压缩或解压?一般格式为xx.tar.bz2
-v :压缩的过程中显示文件!这个常用
-f :使用档名,请留意,在 f 之后要立即接档名喔!不要再加其他参数!
-p :使用原文件的原来属性(属性不会依据使用者而变) -
状态码分为5类,如下:
- 1××(“继续努力”) => 表示接收到请求并且继续处理
- 2××(“开心”) => 表示动作被成功接收、理解和接受
- 3××(“又要跑一趟”) => 为了完成指定的动作,必须接受进一步处理
- 4××(“自己的问题自己解决”) => 客户端发生错误,请求中包含错误语法,请求不能被正确执行
- 5××(“服务不到位”) => 服务端出现错误,服务器不能正确地执行请求。
-
常见的状态码:
- 200 => 表明该请求被成功地完成,所请求的资源发送回了客户端
- 301 => 永久转移
- 304 => 服务端文件未做修改,客户端利用本地的缓存文件即可
- 403 => 禁止访问
- 404 => 请求的资源不存在(eg: 输错了网址、资源被删除)
- 503 => 服务器暂时无法提供服务。
CDMA,TDMA,FDMA分别是码分多路复用、时分多路复用、频分多路复用。
这3种都属于集中控制方式解决发送信息的次序问题,不会发生冲突。
只有随机访问介质访问控制会发生冲突,比如:ALOHA、CSMA、CSMA/CD协议和CSMA/CA协议。
磁盘访问时间
a. 寻道时间:磁头移动到指定磁道需要的时间。最大的影响因子
b. 延迟时间:磁头定位到某一磁道的扇区所需要的时间
c. 传输时间:从磁盘独处或者写入经历的时间
d. 启动时间。
间接三元式表示法的优点为采用间接码表,便于优化处理,并不能节省空间,反而会增大空间
文件存储空间的管理方式,(成组链接法 )需要使用空闲盘块号栈
IP地址映射到MAC地址使用ARP协议
MAC地址映射到IP地址使用RARP协议
syslogd是系统日志服务的进程;
init是所有进程的发起者和控制者,是终极父进程;
sshd是ssh服务的进程;
僵尸进程:一个子进程在其父进程还没有调用wait()或waitpid()的情况下退出。这个子进程就是僵尸进程。
孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。
红黑树的复杂度O(logn)
①B树和B+树用于组织文件的动态索引结构。
②B树和B+树都是平衡的多分支树。
③B树只适用于随机检索,不适用于顺序检索, 而B+树适用于顺序检索和随机检索
邻接链表的定义:对于图G=(V,E),V代表vertex顶点,E代表edge边。邻接链表由一个包含|V|条链表的数组所构成,每个顶点有一条链表。因此顶点有多少个,链表就有多少条。
n 0 =n 2 +1
其中,n 2 是二叉树度为2的结点数, n 0 是二叉树度为零的结点。
在证明之前先了解如下概念:1)度:结点拥有的子树数称为结点的度。度为0的结点称为叶结点或终端结点。
2)分支线总数:从分支线进入结点的角度计算分支线总数,对于二叉树除了根结点意外每个结点都有一个分支线,因此分支线总数为n-1,其中n为结点的总数。
若用n 1表示度为1的结点数,那么二叉树结点总数n=n 0+n 1+n 2(此式比较好理解,二叉树只有度为0,1,2的结点)
而分支线总数为n-1=n 1 +2* n 2
两式可推出 n 0 + n 1 + n 2-1=n 1 +2* n 2,即n 2 =n 0 -1。
给定权值{1,6,7,8,8,10}构建哈夫曼树,带权路径长度为(101)
rsync是中小型企业常用的同步工具是基于内容的同步,其他的也都可以,但是存在一些问题,
rsync结合inotify可以达到实时同步,最重要的是rsync是同步差异的内容,而不是同步差异的文件开销比其他的小,并且是基于ssh协议的,sshd服务都是服务器必备的,不需要额外装其他服务
wget 基于http/ftp协议的.ftp 需要其他服务 scp基于ssh协议 ,这些都是基于文件内容做同步开销大
由于硬链接是有着相同 inode 号仅文件名不同的文件,因此硬链接存在以下几点特性:
- 文件有相同的 inode 及 data block;
- 只能对已存在的文件进行创建;
- 不能交叉文件系统进行硬链接的创建;
- 不能对目录进行创建,只可对文件创建;
- 删除一个硬链接文件并不影响其他有相同 inode 号的文件。
软链接与硬链接不同,若文件用户数据块中存放的内容是另一文件的路径名的指向,则该文件就是软连接。软链接就是一个普通文件,只是数据块内容有点特殊。软链接有着自己的 inode 号以及用户数据块。因此软链接的创建与使用没有类似硬链接的诸多限制:
- 软链接有自己的文件属性及权限等;
- 可对不存在的文件或目录创建软链接;
- 软链接可交叉文件系统;
- 软链接可对文件或目录创建;
- 创建软链接时,链接计数 i_nlink 不会增加;
- 删除软链接并不影响被指向的文件,但若被指向的原文件被删除,则相关软连接被称为死链接(即 dangling link,若被指向路径文件被重新创建,死链接可恢复为正常的软链接)。
根元素为最小值的二叉堆:
插入节点时间复杂度为O(log n)
删除节点时间复杂度为O(log n)
查询最小元素的复杂度是o(1)
合并两个堆的复杂度是o(lgn)
那些命令可以用来查看Linux主机的默认路由() :直接route命令就可以显示默认路由,netstat命令需要加一个参数-route
如果权值最小的n-1条边构成了环的话,就不能构成最小生成树
平衡二叉树的左右子树高度之差的绝对值不超过1.
选择排序包括直接选择排序和堆排序,都是不稳定的算法
一、最大传输单元(MTU)和路径MTU
以太网和IEEE 802.3对数据帧的长度都有限制,其最大值分别是1500和1492字节,将这个限制称作最大传输单元(MTU,Maximum Transmission Unit)。如果IP层有一个数据报要传,而且数据的长度比链路层的MTU还大,那么IP层就要进行分片(Fragmentation),把数据报分成若干片,这样每一片都小于MTU。当网络上的两台主机互相进行通信时,两台主机之间要经过多个网络,每个网络的链路层可能有不同的MTU,其中两台通信主机路径中的最小MTU被称作路径MTU。
二、以太网帧格式
以太网帧格式包含以太网首部(14个字节),数据包(46-1500个字节),和CRC校验(4个字节)。
三、ICMP
(1)、ICMP协议用于传递差错信息、时间、回显、网络信息等控制数据
(2)、ICMP报文数据格式
四、ARP和RARP
(1)、ARP地址解析原理
(2)、ARP地址解析步骤
(3)、RARP逆向地址解析原理
五、数据在网络中传输过程
下面是Ping程序在网络中数据的传输过程:
步骤a:应用程序ping会判断发送的是主机名还是IP地址,如果是主机名就调用函数gethostbyname()解析主机机B,将主机名转换成一个32位的IP地址。这个过程叫做DNS域名解析。
步骤b:ping程序向目的IP地址发送一个ICMP的ECHO包
步骤c:将目标主机的IP地址转换为48位硬件地址,在局域网内发送ARP请求广播,查找主机B的硬件地址。
步骤d:主机B的ARP协议层接收到主机A的ARP请求后,将本机的硬件地址填充到应答包,发送ARP应答到主机A。
步骤e:发送ICMP数据包到主机B
步骤f:主机B接收到主机A的ICMP包,发送响应包。
步骤g:主机A接收到主机B的ICMP包响应包。
决策树
常见的决策树算法有ID3、C4.5、CART
属性选择大的原则是希望根据当前属性划分后,各子节点包含的样本子集的纯度有所提升。
ID3使用信息增益准则来选择划分属性。
“信息熵”(information entropy)是度量样本集合纯度最常用的一个指标。使用某个属性划分后的信息增益越大,表示使用该属性划分后的样本纯度提升越大
C4.5算法使用增益率指标来选择最优划分属性。
信息增益对可取值较多的属性有所偏好,因此C4.5算法转而使用增益率选择最优属性。
增益率对取值较少的属性有偏好,因此C4.5不是直接使用增益率作为属性选择的依据,而是采用启发式的方法:先从候选划分属性中找到信息增益高出平均水平的属性,再从中选择增益率最高的属性。
CART决策树使用基尼指数来选择划分属性。
CART适用于分类和回归两种任务。
直观理解,基尼值就是任选两个样本,其类别不一致的概率。因此,数据集纯度越大,基尼值越小。
在候选属性集合A中,选取划分后基尼值最小的属性最为最优划分属性
剪枝(pruning)是为了防止决策树过拟合的重要手段。
剪枝分为“预剪枝”和“后剪枝”两种。
预剪枝是在决策树的构建过程中就进行剪枝。
预剪枝是在在每一个节点的划分之前都进行评估,若该节点的划分不能带来泛化性能的提升,则不进行划分且将当前节点标记为叶节点。
后剪枝是先完整的构建决策树,然后自底向上的对每个非叶节点进行评估,若将该非叶节点标记为叶节点可以带来泛化性能的提升,则将该节点标记为叶节点。
对于取值为连续值的属性,不能像取值为离散值的属性一样遍历其所有可取值,此时应该对连续属性进行离散化处理,最简单的是使用二分法,这也是C4.5算法使用的连续值处理策略。
为了提高计算机的效率,通常计算机中采用多总线结构,除了连接各个部件的外部总线外,在( CPU和内存)之间设置了专用的高速存储总线。
DMA(Direct Memory Access),即直接存储器存取,是一种快速传送数据的机制。数据传递可以从适配卡到内存,从内存到适配卡或从一段内存到另一段内存。DMA方式可以高外设与主存的交换效率。目前使用的DMA方式实际上有如下三种:1、周期窃取方式 2、直接存取方式 3、数据块传送方式。
Hash表的“查找成功的ASL”和“查找不成功的ASL”
ASL指的是 平均查找时间
关键字序列:(7、8、30、11、18、9、14)
散列函数:
H(Key) = (key x 3) MOD 7
装载因子:
0.7
处理冲突:线性探测再散列法
查找成功的ASL计算方法:
因为现在的数据是7个,填充因子是0.7。所以数组大小=7/0.7=10,即写出来的散列表大小为10,下标从0~9。
第一个元素7,带入散列函数,计算得0。
第二个元素8,带入散列函数,计算得3。
第三个元素30,带入散列函数,计算得6。
第四个元素11,带入散列函数,计算得5。
第五个元素18,带入散列函数,计算得5;此时和11冲突,使用线性探测法,得7。
第六个元素9,带入散列函数,计算得6;此时和30冲突,使用线性探测法,得8。
第七个元素14,带入散列函数,计算得0;此时和7冲突,使用线性探测法,得1。
所以散列表:
地址 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
---|---|---|---|---|---|---|---|---|---|---|
key | 7 | 14 | 8 | 11 | 30 | 18 | 9 |
所以查找成功的计算:
如果查找7,则需要查找1次。
如果查找8,则需要查找1次。
如果查找30,则需要查找1次。
如果查找11,则需要查找1次。
如果查找18,则需要查找3次:第一次查找地址5,第二次查找地址6,第三次查找地址7,查找成功。
如果查找9,则需要查找3次:第一次查找地址6,第二次查找地址7,第三次查找地址8,查找成功。
如果查找地址14,则需要查找2次:第一次查找地址0,第二次查找地址1,查找成功。
所以,ASL=(1+2+1+1+1+3+3)/ 7=12/ 7
一、链地址法在等概率下查找成功和查找不成功的平均查找长度:
将关键字序列{1 13 12 34 38 33 27 22} 散列存储到散列表中。散列函数为:H(key)=key mod 11,处理冲突采用链地址法,求在等概率下查找成功和查找不成功的平均查找长度
1mod11=1,所以数据1是属于地址1
12mod11=1,所以数据12也是属于地址1(这个数据是数据1指针的另一个新数据)
34mod11=1,所以数据34是属于地址1(这个数据是数据12指针的另一个新数据)
38mod11=5,所以数据38是属于地址5
33mod11=0,所以数据33是属于地址0
27mod11=5,所以数据27是属于地址5,(这个数据是数据38指针的另一个新数据)
22mod11=0,所以数据22是属于地址0,(这个数据是数据33指针的另一个新数据)
链地址法处理冲突构造所得的哈希表如下:
查找成功时: ASL=(3×1+2×3+1×4)/8=13/8, 其中红色标记为查找次数。也就是说,需查找1次找到的有4个,其它以此类推…
查找不成功时:ASL=(3+4+2+1+1+3+1+1+1+1+1)/11=19/11;或者 ASL=(7×1+1×2+2×3+1×4 )/11=19/11,其中红色标记为查找次数。以第一个3为例,其对应于0地址位,确定查找不成功需比较3次,其它以此类推…
预防死锁中,下列哪个不是摒弃请求和保持条件的优点()
这种方法的优点是简单,易于实现,且很安全;但缺点也极其明显:资源严重浪费,一个进程一次获得共所需的全部资源,严重地恶化了系统,长期被其它进程占用,致使进程迟迟不能运行。
链接:https://www.nowcoder.com/questionTerminal/4b18d5e76a3a438c9e62c3db7e825061
来源:牛客网
1.摒弃“请求和保持”条件
为了摒弃这一条件,系统要求所有进程都一次性地申请其所需的全部资源,若系统拥有足够的资源分配给进程时,便把进程所需资源分配给它,这样,该进程在整个运行期间,便不会再提出资源请求,从而摒弃了请求条件,但只要有一种资源的要求不能满足,则已有的其他资源也全部不分配给该进程,让进程等待。由于在等待期间的进程不占有任何资源,因此摒弃了保持条件,从而可以避免发生死锁。这种方法的优点是简单,易于实现,且很安全;但缺点也极其明显:资源严重浪费,一个进程一次获得共所需的全部资源,严重地恶化了系统,长期被其它进程占用,致使进程迟迟不能运行。
2.摒弃“不剥夺”条件
该策略规定,一个已保持了某些资源的进程,若新的资源要求不能立即得到满足,它必须释放已保持的所有资源,以后需要时再重新申请。这意味着,进程已占有资源在运行过程中可被剥夺,从而摒弃了“不剥夺条件”。这种策略实现起来比较复杂,且要付出很大代价。因为一个资源在使用一段时间后被释放,可能会造成前阶段工作的失效。此外,该策略还可能由于反复地申请和释放资源,使进程的执行无限推迟。这不仅延长了进程的周转时间,也增加了系统开销。
3.摒弃“环路等待”条件
该策略规定,系统将所有的资源按类型进行线性排队,并赋予不同的序号。例如,令输入机的序号为1,打印机的序号为2,穿孔机为3,磁带机为4,磁盘为5。所有进程对资源请求,必须严格按资源序号递增的顺序提出,如果申请的资源号小于已占用的资源序号,则它必须释放出序号小于申请序号的已占用资源。可以证明系统在任何情况下,不可能进入循环等待状态(用反证法),因而摒弃了“环路等待”条件。在采用这种策略时,由于总有一个进程占据了较高序号的资源,它继续请求的资源必然是空闲的,因此进程可以一直向前推进。该策略较之前两种策略,在资源利用率、系统吞吐量上都有显蓍提高,但也存在不述严重问题:(1)为系统中各种资源类型分配的序号,必须相对稳定,这就限制了新设备类型的增加;(2)尽管在为资源分配序号时,已考虑到大多数作业实际使用这些资源的顺序,但也经常会发生作业使用资源的顺序与系统规定顺序不同的情况,造成资源的浪费。 死锁的预防很重要,虽然上面提到的预防措施都有自身的缺点和局限性,但是也都有各自的优点,我们不仅要从理论上了解这些预防措施,也要在实际应用中灵活的运用,要根据死锁产生的原因选择适当的方法解决这些死锁问题,避免造成更大的麻烦和损失。
归一化:
归一化是一种简化计算的方式,即将有量纲的表达式,经过变换,化为无量纲的表达式,成为标量。 在多种计算中都经常用到这种方法。
线性函数转换:
y=(x-MinValue)/(MaxValue-MinValue)
说明:x、y分别为转换前、后的值,MaxValue、MinValue分别为样本的最大值和最小值。
对数函数转换:
y=log10(x)
说明:以10为底的对数函数转换。
反正切函数转换:
y=atan(x)*2/PI
z-score标准化:
标准分数(standard score)也叫z分数(z-score),是一个分数与平均数的差再除以标准差的过程。
用公式表示为:z=(x-μ)/σ。其中x为某一具体分数,μ为平均数,σ为标准差。
Z值的量代表着原始分数和母体平均值之间的距离,是以标准差为单位计算。在原始分数低于平均值时Z则为负数,反之则为正数。
HDFS(Hadoop Distributed File System )有两个核心namenode(一个主节点),datanode(多个从节点),
datanode主要是存储数据的,
namenode一是管理文件系统文件的元数据信息(包括文件名称、大小、位置、属性、创建时间、修改时间等等),二是维护文件到块的对应关系和块到节点的对应关系,三是维护用户对文件的操作信息(文件的增删改查)
一、特征选择和降维
1、相同点和不同点
特征选择和降维有着些许的相似点,这两者达到的效果是一样的,就是试图去减少特征数据集中的属性(或者称为特征)的数目;但是两者所采用的方式方法却不同:降维的方法主要是通过属性间的关系,如组合不同的属性得新的属性,这样就改变了原来的特征空间;而特征选择的方法是从原始特征数据集中选择出子集,是一种包含的关系,没有更改原始的特征空间。
2、降维的主要方法
- Principal Component Analysis(主成分分析),详细见“简单易学的机器学习算法——主成分分析(PCA)”
- Singular Value Decomposition(奇异值分解),详细见“简单易学的机器学习算法——SVD奇异值分解”
- Sammon's Mapping(Sammon映射)
二、特征选择的目标
引用自吴军《数学之美》上的一句话:一个正确的数学模型应当在形式上是简单的。构造机器学习的模型的目的是希望能够从原始的特征数据集中学习出问题的结构与问题的本质,当然此时的挑选出的特征就应该能够对问题有更好的解释,所以特征选择的目标大致如下:
- 提高预测的准确性
- 构造更快,消耗更低的预测模型
- 能够对模型有更好的理解和解释
三、特征选择的方法
主要有三种方法:
1、Filter方法
其主要思想是:对每一维的特征“打分”,即给每一维的特征赋予权重,这样的权重就代表着该维特征的重要性,然后依据权重排序。
主要的方法有:
- Chi-squared test(卡方检验)
- information gain(信息增益),详细可见“简单易学的机器学习算法——决策树之ID3算法”
- correlation coefficient scores(相关系数)
2、Wrapper方法
其主要思想是:将子集的选择看作是一个搜索寻优问题,生成不同的组合,对组合进行评价,再与其他的组合进行比较。这样就将子集的选择看作是一个是一个优化问题,这里有很多的优化算法可以解决,尤其是一些启发式的优化算法,如GA,PSO,DE,ABC等,详见“优化算法——人工蜂群算法(ABC)”,“优化算法——粒子群算法(PSO)”。
主要方法有:recursive feature elimination algorithm(递归特征消除算法)
3、Embedded方法
其主要思想是:在模型既定的情况下学习出对提高模型准确性最好的属性。这句话并不是很好理解,其实是讲在确定模型的过程中,挑选出那些对模型的训练有重要意义的属性。
主要方法:正则化,可以见“简单易学的机器学习算法——岭回归(Ridge Regression)”,岭回归就是在基本线性回归的过程中加入了正则项。
在顺序表中,只要知道基地址和结点大小,就可在相同时间内求出任一结点的存储地址。
auto根据数据类型分配内存,
register
在使用到时分配CPU寄存器地址
二叉查找树可以是任意高度,甚至退化为链表
八叉树和B+树不是二叉树
红黑树是平衡二叉树
完全二叉树左右子树的高度最多差1,也是平衡二叉树
算法的效率与问题的规模和数据的存储结构都有关。
算法的时间复杂度,是指执行算法所需要的计算工作量。
由于数据元素在计算机存储空间中的位置关系可能与逻辑关系不同,因此数据的逻辑结构和存储结构不是一一对应的。
算法的时间复杂度和空间复杂度没有直接的联系,
有关hash冲突时候的解决方法
通常有两类方法处理冲突:开放定址(Open Addressing)法和拉链(Chaining)法。
在用拉链法构造的散列表中,删除结点的操作易于实现
拉链法的缺点是:指针需要额外的空间,故当结点规模较小时,开放定址法较为节省空间。拉链法的节点空间动态申请更适合无法确定表长的情况
链栈由于采用了链表的方式作为存储方式,入栈时,使用malloc申请空间后,用指针相连接,所以节点个数没有限制,但是出栈时,如果栈中的元素个数为0,则不能继续出栈,所以需要判断当前栈是否为空
java:子类的构造方法总是先调用父类的构造方法,如果子类的构造方法没有明显地指明使用父类的哪个构造方法,子类就调用父类不带参数的构造方法。
而父类没有无参的构造函数,所以子类需要在自己的构造函数中显示的调用父类的构造函数。
n个结点的二叉树的形态:C(2*n,n)/n+1
-moz代表firefox浏览器私有属性
-ms代表IE浏览器私有属性
-webkit代表chrome、safari私有属性 IE使用的是Trident内核,Firefox 使用的是Gecko内核。目前使用IE内核的浏览器还有搜狗,遨游,360等等。
邻接矩阵存储带权图时,若Vi-Vj存在路径,则在矩阵中的(i,j)位置写入权值即可。
- kill 无参数表示向进程输入关闭的指令
- ^C 关闭当前(前台)进程
- ^Z 暂停当前(前台)进程
- shutdown 关机
- halt 就是调用shutdown -h
无符号号整数和有符号整数相加,有符号整数转化为无符号整数
gets能够接受空格、制表符Tab和回车等。
gets和sacnf函数,在字符串接受结束后自动加'\0'
若一棵二叉树具有10个度为2的结点,5个度为1的结点,则度为0的结点个数是:所有点的入度和出度的和相等, 下面等式左边为出度, 右边为入度(根节点入度为0, 其他节点入度为1)
10 * 2 + 5 * 1 = 10 + 5 + x -1 x=11
实参可以是常量、变量或表达式,但是形参只能是变量
Ajax技术核心就是XMLHttpRequest对象。
Ajax技术的工作原理:可以分成3步
1.创建Ajax对象:var xhr = new XMLHttpRequest();
2.xhr 发送请求:xhr.open('get','test.html','true');
xhr.send();
3.xhr获取响应:
xhr.onreadystatechange = function(){
if(xhr.readystate == 4){//请求的状态码
/*
0:请求还没有建立(open执行前)
1:请求建立了还没发送(执行了open)
2:请求正式发送(执行了send)
3:请求已受理,有部分数据可以用,但还没有处理完成
4:请求完全处理完成
*/
alert(xhr.responseText);//返回的数据
}
}
可以看到,send()前是open()
非常量引用的初始值必须为左值。一个区分左值与右值的便捷方法是:看能不能对表达式取地址,如果能,则为左值,否则为右值。左值和右值都是针对表达式而言的,左值是指表达式结束后依然存在的持久对象,右值是指表达式结束时就不再存在的临时对象。
基于哈希的索引和基于树的索引
hash索引仅满足“=”、“IN”和“<=>”查询,不能使用范围查询
hash索引无法被用来进行数据的排序操作
对于组合索引,Hash 索引在计算 Hash 值的时候是组合索引键合并后再一起计算 Hash 值,而不是单独计算 Hash 值,所以通过组合索引的前面一个或几个索引键进行查询的时候,Hash 索引也无法被利用
Hash 索引遇到大量Hash值相等的情况后性能并不一定就会比B-Tree索引高
归并排序中,归并的趟数是O(logn)
包含抽象方法的类称为抽象类,但并不意味着抽象类中只能有抽象方法,它和普通类一样,同样可以拥有成员变量和普通的成员方法。注意,抽象类和普通类的主要有三点区别:
1)抽象方法必须为public或者protected(因为如果为private,则不能被子类继承,子类便无法实现该方法),缺省情况下默认为public。
2)抽象类不能用来创建对象;
3)如果一个类继承于一个抽象类,则子类必须实现父类的抽象方法。如果子类没有实现父类的抽象方法,则必须将子类也定义为为abstract类。
在其他方面,抽象类和普通的类并没有区别。
数组名代表数组首地址,是一个常量,但是数组名类型不是指针,例如int s[10],s的类型应该是int [10],不是指针类型!
二叉树高度最高的情况是每一个层只有一个结点,此时高度为N,
最小的情况是完全二叉树,高度是[log2N]+1,以2为底的对数取整后+1,
所以高度是[log2N]+1 到 N。
概率模型(树形模型)不需要归一化,因为它们不关心变量的值,而是关心变量的分布和变量之间的条件概率,如决策树、RF。而像Adaboost、SVM、LR、Knn、KMeans之类的最优化问题就需要归一化。
归一化:把每个特征向量(特别是奇异样本数据)的值都缩放到相同数值范围。
通常在机器学习的二分类领域中,对模型的结果评估是必不可少的,本文主要总结了各个评估指标,对每个指标的定义,作用进行阐述。废话到此,直接上干货。
TP:True Positive
FP:False Positive
TN:True Negtive
FN:False Negtive
以上四个定义是基础,Positive表示对样本作出的是正的判断,T表示判断正确,F表示判断错误(Negtive类似)。
比如TP表示样本为正,我们模型也判断为正,FP则表示模型判断为正,但是判断错误,样本为负。
Accaracy,Precision,Recall,F1
有了以上四个定义后,就可以直接进入正题了
Accuracy = (TP+TN)/(TP+FP+TN+FN)
准确率,表示在所有样本中分对(即正样本被分为正,负样本被分为负)的样本数占总样本数的比例
Precision = TP / (TP+ FP)
精确率,表示模型预测为正样本的样本中真正为正的比例
Recall = TP /(TP + FN)
召回率,表示模型准确预测为正样本的数量占所有正样本数量的比例
F1 = 2*P*R /(P+ R)
F1,是一个综合指标,是Precision和Recall的调和平均数,因为在一般情况下,Precision和Recall是两个互补关系的指标,鱼和熊掌不可兼得,顾通过F测度来综合进行评估。F1越大,分类器效果越好。
Accuracy和Precision区别
Accaracy和Precision作用相差不大,都是值越大,分类器效果越好,但是有前提,前提就是样本是均衡的。
如果样本严重失衡了,Accuracy不再适用,只能使用Precision,
顾在样本失衡的情况下,Accuracy不再适用,通常使用Precision,同时该场景下ROC,AUC可以登上用场。
ROC,AUC
ROC,AUC优点:当数据中的正负样本分布发生变化时,ROC能够保持不变,尤其在样本不均衡的应用场景中。
首先看两个定义
TPR = TP / (TP+FN)真正率,指在所有正样本中,被准确识别为正样本的比例,公式与召回率一样
FPR = FP / (TN + FP)假正率,指在所有负样本中,被错误识别为正样本的比例。又叫误报率,错误接收率。
ROC制作
以TPR为y轴,FPR为x轴,通过不断改变threshold的值,获取到一系列点(FPR,TPR),将这些点用平滑曲线连接起来即得到ROC曲线,Threshold定义为正负样本分类面的阈值,通常的二分类模型中取0.5,在绘制ROC曲线过程中,通常取测试集上各样本的概率预测分值,即predict_prob,将所有样本的概率预测分值从高到低排序,并将这些分值依次作为threshold,然后计算对应的点(FPR,TPR),比如最大的样本预测分值为0.9时,当threshold取0.9时,所有样本分值大于等于0.9的才预测为正样本,小于0.9的预测为负样本。最后加上两个threshold值1和0,分别可对应到(0,0),(1,1)两个点,将这些点连接起来即得到ROC曲线,点越多,曲线越平滑,而ROC曲线下的面积即为AUC。
ROC特点
(1)一个好的分类器应该ROC曲线应该尽量位于左上位置,当ROC为(0,0)和(1,1)两个点的直线时,分类器效果跟随机猜测效果一样;
(2)ROC曲线下方的面积作为AUC,可以用AUC作为衡量分类器好坏的标准,理想的分类器AUC为1,当AUC为0.5时,效果跟随机猜测效果一致;
(3)ROC能很好的解决正负样本分布发生变化的情况,在正负样本分布发生变化的情况下,ROC能够保持不变。
如果两个线程在同一个进程,可以new一个空间,然后PostThreadMessage到另外的线程,在接受线程中使用完该空间后,释放.
什么是对称加密技术?
对称加密采用了对称密码编码技术,它的特点是文件加密和解密使用相同的密钥加密
也就是密钥也可以用作解密密钥,这种方法在密码学中叫做对称加密算法,对称加密算法使用起来简单快捷,密钥较短,且破译困难,除了数据加密标准(DES),另一个对称密钥加密系统是国际数据加密算法(IDEA),它比DES的加密性好,而且对计算机功能要求也没有那么高
对称加密算法在电子商务交易过程中存在几个问题:
1、要求提供一条安全的渠道使通讯双方在首次通讯时协商一个共同的密钥。直接的面对面协商可能是不现实而且难于实施的,所以双方可能需要借助于邮件和电话等其它相对不够安全的手段来进行协商;
2、密钥的数目难于管理。因为对于每一个合作者都需要使用不同的密钥,很难适应开放社会中大量的信息交流;
3、对称加密算法一般不能提供信息完整性的鉴别。它无法验证发送者和接受者的身份;
4、对称密钥的管理和分发工作是一件具有潜在危险的和烦琐的过程。对称加密是基于共同保守秘密来实现的,采用对称加密技术的贸易双方必须保证采用的是相同的密钥,保证彼此密钥的交换是安全可靠的,同时还要设定防止密钥泄密和更改密钥的程序。
假设两个用户需要使用对称加密方法加密然后交换数据,则用户最少需要2个密钥并交换使用,如果企业内用户有n个,则整个企业共需要n×(n-1) 个密钥,密钥的生成和分发将成为企业信息部门的恶梦。
常见的对称加密算法有DES、3DES、Blowfish、IDEA、RC4、RC5、RC6和AES
什么是非对称加密技术
与对称加密算法不同,非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)。
公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。
非对称加密算法实现机密信息交换的基本过程是:甲方生成一对密钥并将其中的一把作为公用密钥向其它方公开;得到该公用密钥的乙方使用该密钥对机密信息进行加密后再发送给甲方;甲方再用自己保存的另一把专用密钥对加密后的信息进行解密。甲方只能用其专用密钥解密由其公用密钥加密后的任何信息。
非对称加密的典型应用是数字签名。
常见的非对称加密算法有:RSA、ECC(移动设备用)、Diffie-Hellman、El Gamal、DSA(数字签名用)
Hash算法(摘要算法)
Hash算法特别的地方在于它是一种单向算法,用户可以通过hash算法对目标信息生成一段特定长度的唯一hash值,却不能通过这个hash值重新获得目标信息。因此Hash算法常用在不可还原的密码存储、信息完整性校验等。
常见的Hash算法有MD2、MD4、MD5、HAVAL、SHA
死锁(Deadlock)的形成
打个比方,假设有P1和P2两个进程,都需要A和B两个资源,现在P1持有A等待B资源,而P2持有B等待A资源,两个都等待另一个资源而不肯释放资源,就这样无限等待中,这就形成死锁,这也是死锁的一种情况。给死锁下个定义,如果一组进程中每一个进程都在等待仅由该组进程中的其他进程才能引发的事件,那么该组进程是死锁的。
竞争不可抢占资源引起死锁
也就是我们说的第一种情况,而这都在等待对方占有的不可抢占的资源。
竞争可消耗资源引起死锁
有p1,p2,p3三个进程,p1向p2发送消息并接受p3发送的消息,p2向p3发送消息并接受p2的消息,p3向p1发送消息并接受p2的消息,如果设置是先接到消息后发送消息,则所有的消息都不能发送,这就造成死锁。
小结TCP与UDP的区别:
1.基于连接与无连接;
2.对系统资源的要求(TCP较多,UDP少);
3.UDP程序结构较简单;
4.流模式与数据报模式 ;
5.TCP保证数据正确性,UDP可能丢包,TCP保证数据顺序,UDP不保证。
TCP与UDP区别总结 1. TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接; 2. TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,也不保证可靠交付; 3. TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的; 4. UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等); 5.每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信; 6. TCP首部开销20字节;UDP的首部开销小,只有8个字节; 7. TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道。
UDP适用于不需要TCP可靠机制的情形,比如,当高层协议或应用程序提供错误和流控制功能的时候,UDP是传输层协议,服务于很多知名应用层协议,包括网络文件系统(NFS)、简单网络管理协议(SNMP)、域名系统(DNS)以及简单文件传输系统(TFTP)。比如,日常生活中,常见使用UDP协议的应用如下:QQ语音、QQ视频、TFTP……。 TCP是一种面向连接的、可靠的、基于字节流的运输层通信协议,通常由IETF的RFC793说明。在简化的计算机网络OSI模型中,它完成运输层所指定的功能。一些要求比较高的服务一般使用这个协议,如FTP、Telnet、SMTP、HTTP、POP3等。
1、首先是定义
进程:是执行中一段程序,即一旦程序被载入到内存中并准备执行,它就是一个进程。进程是表示资源分配的的基本概念,又是调度运行的基本单位,是系统中的并发执行的单位。
线程:单个进程中执行中每个任务就是一个线程。线程是进程中执行运算的最小单位。
2、一个线程只能属于一个进程,但是一个进程可以拥有多个线程。多线程处理就是允许一个进程中在同一时刻执行多个任务。
3、线程是一种轻量级的进程,与进程相比,线程给操作系统带来侧创建、维护、和管理的负担要轻,意味着线程的代价或开销比较小。
4、线程没有地址空间,线程包含在进程的地址空间中。线程上下文只包含一个堆栈、一个寄存器、一个优先权,线程文本包含在他的进程 的文本片段中,进程拥有的所有资源都属于线程。所有的线程共享进程的内存和资源。 同一进程中的多个线程共享代码段(代码和常量),数据段(全局变量和静态变量),扩展段(堆存储)。但是每个线程拥有自己的栈段, 寄存器的内容,栈段又叫运行时段,用来存放所有局部变量和临时变量。
5、父和子进程使用进程间通信机制,同一进程的线程通过读取和写入数据到进程变量来通信。
6、进程内的任何线程都被看做是同位体,且处于相同的级别。不管是哪个线程创建了哪一个线程,进程内的任何线程都可以销毁、挂起、恢复和更改其它线程的优先权。线程也要对进程施加控制,进程中任何线程都可以通过销毁主线程来销毁进程,销毁主线程将导致该进程的销毁,对主线程的修改可能影响所有的线程。
7、子进程不对任何其他子进程施加控制,进程的线程可以对同一进程的其它线程施加控制。子进程不能对父进程施加控制,进程中所有线程都可以对主线程施加控制。
相同点:
进程和线程都有ID/寄存器组、状态和优先权、信息块,创建后都可更改自己的属性,都可与父进程共享资源、都不鞥直接访问其他无关进程或线程的资源。
人眼对色度的敏感程度要低于对亮度的敏感程度。
YUV,分为三个分量,“Y”表示明亮度(Luminance或Luma),也就是灰度值;而“U”和“V” 表示的则是色度(Chrominance或Chroma),作用是描述影像色彩及饱和度,用于指定像素的颜色。与我们熟知的RGB类似,YUV也是一种颜色编码方法,主要用于电视系统以及模拟视频领域,它将亮度信息(Y)与色彩信息(UV)分离,没有UV信息一样可以显示完整的图像,只不过是黑白的,这样的设计很好地解决了彩色电视机与黑白电视的兼容问题。并且,YUV不像RGB那样要求三个独立的视频信号同时传输,所以用YUV方式传送占用极少的频宽。
YUV码流有多种不同的格式,要分析YUV码流,就必须搞清楚你面对的到底是哪一种格式,并且必须搞清楚这种格式的YUV采样和分布情况。
YUV格式有两大类:planar和packed。
对于planar的YUV格式,先连续存储所有像素点的Y,紧接着存储所有像素点的U,随后是所有像素点的V。
对于packed的YUV格式,每个像素点的Y,U,V是连续交叉存储的。
对于32位和64位机器,只有long和指针类型的长度不一样,其它类型所占字节数都是一样的
中值滤波器(Median filtering) 如其名所隐含的,它将一个像素的值用该像素邻域中强度值的中间值来取代(计算中间值的过程中,也会将该像素的原始值包含),中值滤波器在处理盐和胡椒噪声上能提供绝佳的噪声降低效能。
1.图像增强与图像去噪
绝大部分噪音都是图像的高频分量,通过低通滤波器来滤除高频噪声; 边缘也是图像的高频分量,可以通过添加高频分量来增强原始图像的边缘;
2.图像分割之边缘检测
提取图像高频分量
3.图像特征提取:
形状特征:傅里叶描述子
纹理特征:直接通过傅里叶系数来计算纹理特征
其他特征:将提取的特征值进行傅里叶变换来使特征具有平移、伸缩、旋转不变性
4.图像压缩
可以直接通过傅里叶系数来压缩数据;常用的离散余弦变换是傅立叶变换的实变换;
傅立叶变换
傅里叶变换是将时域信号分解为不同频率的正弦信号或余弦函数叠加之和。连续情况下要求原始信号在一个周期内满足绝对可积条件。离散情况下,傅里叶变换一定存在(//对于图像数据,一定可以进行FT)。冈萨雷斯版<图像处理>里面的解释非常形象:一个恰当的比喻是将傅里叶变换比作一个玻璃棱镜。棱镜是可以将光分解为不同颜色的物理仪器,每个成分的颜色由波长(或频率)来决定。傅里叶变换可以看作是数学上的棱镜,将函数基于频率分解为不同的成分(//用基波及各次谐波信号的叠加来近似原始信号)。当我们考虑光时,讨论它的光谱或频率谱。同样,傅立叶变换使我们能通过频率成分来分析一个函数。
傅立叶变换有很多优良的性质。比如线性,对称性(可以用在计算信号的傅里叶变换里面);
时移性:函数在时域中的时移,对应于其在频率域中附加产生的相移,而幅度频谱则保持不变;
频移性:函数在时域中乘以e^jwt,可以使整个频谱搬移w。这个也叫调制定理,通讯里面信号的频分复用需要用到这个特性(将不同的信号调制到不同的频段上同时传输);(//章毓晋:线性移不变性,空间移不变性)
卷积定理:时域卷积等于频域乘积;时域乘积等于频域卷积(附加一个系数)。(图像处理里面这个是个重点)
信号在频率域的表现
在频域中,频率越大说明原始信号变化速度越快;频率越小说明原始信号越平缓。当频率为0时,表示直流信号,没有变化。因此,频率的大小反应了信号的变化快慢。高频分量解释信号的突变部分,而低频分量决定信号的整体形象。(//所以一般也是以低频去调制高频,高频的细节不用变化,但由于低频信号的加入,让高频信号整体走向和低频一样)
在图像处理中,频率反应了图像在空域灰度变化剧烈程度,也就是图像灰度的变化速度,也就是图像的梯度大小(//比如在图像边缘,具有高频率,因为边缘处一般灰度变化剧烈——也正是因为此,才产生了“边缘”)。对图像而言,图像的边缘部分是突变部分,变化较快,因此反应在频域上是高频分量;图像的噪声大部分情况下是高频部分;图像平缓变化部分则为低频分量。也就是说,傅立叶变换提供另外一个角度来观察图像,可以将图像从灰度分布转化到频率分布上来观察图像的特征(//直接观察图像(从空域)当然更直观些,频域分析(抽象些,但)能看出某些在空域看不出的特征——各有利弊)。书面一点说就是,傅里叶变换提供了一条从空域到频率自由转换的途径。对图像处理而言,以下概念非常的重要:
图像高频分量:图像突变部分;在某些情况下指图像边缘信息,某些情况下指噪声,更多是两者的混合(//所以边缘提取,或者说边缘检测时,噪声会产生影响);
低频分量:图像变化平缓的部分,也就是图像轮廓信息(//图像的整体形貌,多为区域部分)
高通滤波器:让图像使低频分量抑制,高频分量通过
低通滤波器:与高通相反,让图像使高频分量抑制,低频分量通过
带通滤波器:使图像在某一部分的频率信息通过,其他过低或过高都抑制
还有个带阻滤波器,是带通的反。
模板运算与卷积定理
在时域内做模板运算(//准确的说是:在空间域对图像做模板运算),实际上就是对图像进行卷积。模板运算是图像处理一个很重要的处理过程,很多图像处理过程,比如增强/去噪(这两个分不清楚),边缘检测中普遍用到。根据卷积定理,时域卷积等价于频域乘积。因此,在时域内对图像做模板运算就等效于在频域内对图像做滤波处理(时域/空域卷积运算和相关运算区别就在于:模板旋转了180度。再次谨记:时域卷积等于频域相乘)。
比如说一个均值模板,其频域响应为一个低通滤波器;在时域内对图像作均值滤波就等效于在频域内对图像用均值模板的频域响应对图像的频域响应作一个低通滤波。(//时域的“均值”对应频域的“截止频率”)
图像去噪
图像去噪就是压制图像的噪音部分。因此,如果噪音是高频分量,从频域的角度来看,就是需要用一个低通滤波器对图像进行处理。通过低通滤波器可以抑制图像的高频分量。但是这种情况下常常会造成边缘信息的抑制。常见的去噪模板有均值模板,高斯模板等。这两种滤波器都是在局部区域抑制图像的高频分量,模糊图像边缘的同时也抑制了噪声。还有一种非线性滤波-中值滤波器(//如MATLAB中的colfilt(I,[5 5],'sliding',@mean);——此函数的执行过程:对图像I调用im2col函数按‘sliding’的方式将5x5的块转换为列,然后对每个列使用mean函数求均值,得到一个行向量,然后调用col2im将行向量(按一定的方式)还原为图像数据(im2col的逆过程),即得到了中值滤波后的图像。此过程的本质是:模板运算!
)。中值滤波器对脉冲型噪声有很好的去掉效果。因为脉冲点都是突变的点,排序以后输出中值,那么那些最大点和最小点就可以去掉了。中值滤波对高斯噪音效果较差(//高斯噪声满足高斯分布,和分布有关?)。
椒盐噪声:对于椒盐采用中值滤波可以很好的去除。用均值也可以取得一定的效果,但是会引起边缘的模糊。
高斯白噪声:白噪音在整个频域的都有分布,好像比较困难。(//白噪声是指功率谱密度在整个频域内均匀分布的噪声。 所有频率具有相同能量的随机噪声称为白噪声。从我们耳朵的频率响应听起来它是非常明亮的“咝”声)
冈萨雷斯版图像处理P185:算术均值滤波器和几何均值滤波器(尤其是后者)更适合于处理高斯或者均匀的随机噪声。谐波均值滤波器更适合于处理脉冲噪声。
腐蚀: 是一种消除边界点,使边界向内部收缩的过程。可以用来消除小且无意义的物体。
膨胀: 是将与物体接触的所有背景点合并到该物体中,使边界向外部扩张的过程。可以用来填补物体中的空洞。
开运算: 先腐蚀后膨胀的过程开运算。用来消除小物体、在纤细点处分离物体、平滑较大物 体的边界的同时并不明显改变其面积。开运算通常是在需要去除小颗粒噪声,以及断开目标物之间粘连时使用。其主要作用与腐蚀相似,与腐蚀操作相比,具有可以基本保持目标原有大小不变的优点。
闭运算: 先膨胀后腐蚀的过程称为闭运算。用来填充物体内细小空洞、连接邻近物体、平滑 其边界的同时并不明显改变其面积。
哈夫曼树:给定n个权值作为n的叶子结点,构造一棵二叉树,若带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman tree)。哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。
一个哈夫曼树有19个节点,其叶子节点有十个叶子节点。
具体计算公式如下:(n+1)/2