Java的三大特性:封装、多态、继承
11.5总结
学习黑客技术的第一条铁律就是不要有终点思维,深刻理解成长才是永恒的主题。
学习黑客技术的第二条铁律就是不要抱有任何幻想、任何偷奸取巧,只要你决定这条路是自己去走,那么无论你如何寻找奇技淫巧,最终都不会让你少走半步。
学习黑客技术的第三条铁律就是时刻葆有对低效率的自己的耐心。
想要做任何事情之前,一定要想清楚三个问题,分别是你为什么要做,你愿意为此付出什么,你想要的结果是什么。而所谓的智慧,就是一个人通过这种方式不断的调整自己对于各种事情的预期,从而达到一种与外界的平衡。如果将这个思路映射到黑客学习这件事上,大体可以分为如下三个问题。
首先,要考虑清楚你为何要学这个。说白了就是你的动机是什么,如果你的动机是不可持续的,例如盗个QQ(甚至是挖个系统级0Day漏洞),那么我建议你将自己的动机修改为可持续的,例如你想保持一项什么记录(甚至是让其他人更加尊敬你),因为这类动机是在不断变换的,只有这类动机才能让你有一个更加长久的动力源泉,才能促使你坚持的更久,也就能取得更大的成就。
其次,要考虑明白你可以付出什么。你要清楚的是,任何事情都是有代价的,而且如果你此时的年龄越小,你那么你对“代价”的理解就越不深刻,这点一定要着重加以注意。
黑客技术是一件非常有魅力、非常有价值,同时也是非常酷的一件事,但是这么有魅力的事情,如果你想要完成它,要么需要极佳的运气,要么就是需要你付出非人的努力。
举例来说,最近我们经常看到媒体在报道时说国内某组织的某黑客在几秒内就攻破了IE浏览器,在几秒内就绕过了XX保护机制。但事实的真相是他们其实就是运行了一个自己准备好的代码而已,而媒体上说的这几秒钟的时间其实是代码的运行时间。据我说知,他们在参赛之前,整个团队为了这几秒钟的ShowTime,需要经历至少十余个甚至数十个不眠之夜,然后才能打造出可能仅有几百个字节的艺术品般的代码(也就是Exploit),最后才能拿去现场过五关斩六将。
如果在这个十三亿人口的国度里最牛逼的黑客都需要如此付出,那么作为目前默默无闻的你来说,想要学会这门技术应该需要多少个不眠之夜呢?
最后,要考虑你的学习方向是什么。信息安全领域的方向太多了,如果最粗旷的分,大致可以分为网络安全、软件安全、基础安全这三类。其中网络安全包括网络渗透、通讯安全、电信安全等,软件安全包括授权控制、漏洞挖掘、加密解密等,基础安全分为理论安全、密码学等。
11.4总结
Dijstra算法
迪杰斯特拉算法思想:按路径长度递增的方法产生从源点到各顶点的最短路径。
解释:有n个顶点,从源点v0出发到其他n-1个顶点有n-1条最短路径,这些路径的求解是按照长度递增的次序进行求解的。
第一条最短路径的求解:以v0为源点,从v0出发找最短的弧,此弧一定是按上面的方法找到的第一条路径。
次最短路径的求解:要么该路径只包含从源点到终点的一条弧,要么是经过第一条最短路径后到达终点的路径。
构造两个顶点集合M和U。M为所有顶点的集合,U存放当前已经求得最短路径的顶点,M-U为剩下的顶点集合。
设辅助向量final[0…n-1], final[i]为TRUE时表示从v0到vi的最短路径已经求出,为FALSE表示尚未求出;
设辅助向量P[0…n-1]和D[0…n-1];D[i]记录目前已知的从v0到vi的最短路径的长度;P[i]记录目前已知的从v0到vi的最短路径;
11.3总结
1.Net user 查看本机的用户列表
2.Net user“用户名” “密码” /add添加用户‘
3.Net loaclgroup administratgors XXX/add 将XXX用户添加的administrators的组中。
4.REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal””Server/v fDenyTSConnections/t REG_DWORD/d 00000000/f 修改注册表键值开启远程桌面3389端口。
11.2总结
完全图:图中任意两个顶点间都存在边。 包含 n 个顶点的完全图边的条数:e= n(n-1)/2
有向完全图:有向图中任意两个顶点间都存在弧。 包含n 个顶点的完全有向图有n(n-1) 条边。
连通:在无向图 G=(V, R) 中, 若从顶点 vi 到vj 存在路径,则称vi 和vj是连通的。
连通图:如果无向图G中任意两个顶点都是连通的,则称 G是连通图。
连通分量(极大连通子图): G’是G的连通子图,如果G’中加入任意一个顶点即失去连通性时,称G’为无向图G的极大连通子图。
生成树(极小连通子图): 包含连通图G的全部顶点,但只有足以保持图的连通性的n-1条边。
强连通图:在有向图 G=(V, R) 中, 如果每一对顶点vi和vj从vi到vj和从vj到vi都存在路径,则称G为强连通图。
强连通分量(极大强连通子图)。
生成森林:含有图中全部顶点,但只有足以构成若干棵不相交的有向树的弧。
有向树:恰有一个入度为0的顶点,其余顶点入度均为1的图。
11.13总结
n(n大于1)个结点的各棵树中,其深度最小的那棵树的深度是(1)。它共有(2)个叶子结点和(39)个非叶子结点,其中深度最大的那棵树的深度是(4) ,它共有(5)个叶子结点和(6)个非叶子结点。
解;(1)2 (2)n一1 (3)1 (4)n (5)1 (6)n一1
具有N个结点的二叉树,采用二叉链表存储,共有( )个空 链域
解;N+1个。
1个结点时有2个空,即左右儿子。之后每增加一个结点便使之前的一个空变成非空,但再新增2个空,即新增结点的左右儿子。
11.1总结
例题: 知度求叶节点
1.在一棵度为4的树T中,若有20个度为4的结点,10个度为3的结点,1个度为2的结点,10个度为1的结点,则树T的叶节点个数是(B)
A:41 B:82 C:113 D:122
设度为4的树中度为0,1,2,3,4结点个数分别为n0,n1,n2,n3,n4
根据树中结点度的关系可以推出:
n0 = 1 + n2 + 2 n3 + 3 n4 = 1 + 1 + 2 10 + 3 20 = 82
因此答案是B
2.一棵度为3的树有2个度为1的结点,3个度为2的结点,4个度为3的结点,则有多少个叶子结点?给出公式和计算方法,
三叉树结点的度数均不大于3,结点总数应等于i度结点数(记为ni)和:N=no+n1+n2+n3 (1)
二:i度结点有i个孩子,根结点不是任何结点的孩子,结点总数为:N=n1+2n2+3n3+1 (2)
1、2得到:no=n2+2n3+1=3+8+1=12
3.在一棵度为3的树中,若有2个度为3的结点,有1个度为2的结点,则有()个度为0的结点。
A.4
B.5
C.6
D.7
[解析] 在本题中要求的是叶子结点的个数。题目中没有告诉有多少个度为1的结点,事实上,这没有关系,因为任何度为1的结点最终都会连接到一个(且只一个)叶子结点。我们已经知道,有一个度为2的结点,不妨设该结点为根结点,且设该结点连接到2个度为3的结点,这2个度为3的结点共连接到6个子结点,这6个子结点的度数只可能为0或为1,如果为0则为叶子,如果为1,则根据上面的分析,其最终会连接到一个叶子结点。所以,该树共有6个度为0的结点。
4.在一颗度为 3 的树 T 中,若有 10 个度为 3 的结点,5 个度为 2 的结点,则树 T 的叶结点 有 个。
A) 15 B) 26 C) 25 D) 40
10(3-1)+5(2-1)+1=26
10.31总结
- 在作进栈运算时,应先判别栈是否满,在作退栈运算时应先判别栈是否空。当栈中元素为 n 个,作进栈运算时发生上溢,则说明该栈的大容量为n。 为了增加内存空间的利用率和减少溢出的可能性,由两个栈共享一片连续的内存空间时,应将两栈的深度分别设在这片内存空间的两端,这样,当 两个栈的栈顶在栈空间的某一位置相遇时,才产生上溢。
- 若已知一个栈的入栈序列是 1,2,3,…,n,其输出序列为 p1,p2,p3,…,pN,若 pN是 n,则 pi是不确定的。
- 若一个栈以向量 V[1..n]存储,初始栈顶指针 top 为 n+1,则下面 x 进栈的正确操作是 top:=top-1; V [top]:=x 。
- 若栈采用顺序存储方式存储,现两栈共享空间 V[1..m],top[i]代表第 i 个栈( i =1,2)栈顶,栈 1 的 底在 v[1],栈 2 的底在 V[m],则栈满的条件是 top[1]+1=top[2] 。
- 栈在递归调用 子程序调用 表达式求值中应用。
- 用链接方式存储的队列,在进行删除运算时头、尾指针可能都要修改。
注:本题主要考查队列的删除操作。在有头结点的链队列的出队操作中,一般只需修改队头指针,但当原队列中只有一个结点时,该结点既是队头也是队尾,故删去此结点时亦需修改队尾指针,使其指向头结点,且删去此结点后队列变空。 - 递归过程或函数调用时,处理参数及返回地址,要用一种称为栈的数据结构。
- 已知输入序列为 abcd 经过输出受限的双向队列后能得到的输出序列有( )。
A. dacb B. cadb C. dbca D. bdac E. 以上答案都不对
注意是出队受限的队列(单方向出队),入队可以两端入队,并且只限制进队的顺序,不限制是否全部进入才出队,
B:答案 cadb 过程: a进队列——b从入队口进队——c从出队口出队——a出队——d从出队口入队——d出队——b出队;
D: 答案bdac 过程: a进队列——b从出队口进队——b出队——c从入队口入队——d从出队口入队——d出队——a出队——c出队;
输出受限意为可以在两端输入只能在一端输出。假设右端为输出端:
A 要满足输出da,则先输入abc再从右端输入d,排列为cbad,右端输出为dabc,所以A错;
B 先输入abc使之排列为bac,再从右端输出ca,从右端输入d,再依次输出d和b,所以序列为cadb;
后面类推。
9.栈和队列都是限制存取点的线性结构。 - 设有一个 10 阶的对称矩阵 A,采用压缩存储方式,以行序为主存储,a11为第一元素,其存储地址为 1, 每个元素占一个地址空间,则 a85的地址为33.
注:对称压缩存储中元素位置:i*(i-1)/2+j-1+初始位置。
10.30总结
- 与数据的存储结构无关的术语是栈。
- 数据项是数据的最小单位。数据元素是数据的基本单位。
- 数据的逻辑结构说明数据元素之间的顺序关系,它依赖于计算机的存储结构
答:错.
说明:逻辑结构可用不同的存储结构实现,“它依赖于计算机的存储结构”完全说不通.
4:算法的运行时间涉及到加,减,乘,除,转移,存取等基本运算.要想准确的计算总运行时间是不可行的.
答:对.
说明:软硬件环境都是千差万别的.也没必要去准确计算.算法分析只是为了比较不同算法的优劣.
5:在顺序存储结构中,有时也存储数据结构中元素之间的关系.(这个我觉得静态链表在存储结构上是顺序存储可是其中不也存储了节点之间的关系的么?)
答:错.
说明:“顺序存储结构”必须体现元素之间的关系,不是“有时”.“链式存储结构”并不是“顺序存储结构”,后者称“顺序表”或“邻接表”有些书用“链表是顺序存取”说法,但并不是指“链表是顺序存储结构”.
6.一个数据结构在计算机中映像称为存储结构。
7.若某线性表最常用的操作是存取任一指定序号的元素和在最后进行插入和删除运算,则利用顺序表存储方式最节省时间。
8.某线性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素,则采用仅有尾指针的单循环链表存储方式最节省运算时间。
9.线性表L=(a1,a2,…,an)用数组表示,假定删除表中任一元素的概率相同,则删除一个元素平均需要移动元素的个数是(n-1)/2。插入是n/2。
10.从一个具有n个节点的单链表中查找其值等于x结点时,在查找成功的情况下,需平均比较(N+1)/2个结点。
11.判定一个循环队列QU(最多元素为m0)为空的条件 QU.rear= =QU.front。
12.判定一个循环队列QU(最多元素为m0)为满的条件 QU.front= =(QU.rear+1)%m0。
13.一个循环队列QU(最多元素为m0)队列满时,队列中有m0-1个元素。
14.表达式3 2^(4+22-63)-5求值过程中当扫描到6时,对象栈和算符栈为(3,2,8;(^-),其中^为乘幂。 注:输出的是经过计算后的值,按运算符的高低运算顺序来计算。
15.若用一个大小为6的数组来实现循环队列,且当前rear和front的值分别为0和3,当从队列中删除一个元素,再加入两个元素后,rear和front的值分别为多少? 2和4 注:删除一个元素对头指针front加一,对尾指针rear不变;插入两个元素,对头指针front不变,对尾指针rear加二。
16.从一个带头结点的栈顶指针为HS的链式栈中插入一个S所指的结点时,执行 S->next=HS->next; HS->next=S。
17.从一个带头结点的栈顶指针为HS的链式栈中删除一个结点时,并用x保存被删除结点的值,则执行 x= HS->next->data; HS->next= HS->next->next。
18.数组A中,每个元素的长度是3个字节,行下标k的范围从1到8,列下标j的范围从1到10,从首地址SA开始连续存放在存储器中,该数组按行存放时,元素A[8][5]的起始地址为(710+4)3=222
因为按照列逐个数到A[8][5]有7*10+4个元素,(且在第八行是从 A[8][8]到A[8][7],A[8][6],倒存放在存储器中) - 对称矩阵:
三角矩阵:矩阵元素的值与下标的关系: a(i,j) = a(j,i) 我们只需为每一对称元素分配一个储存单元,这样可以将 n*n 个 元素储存在一个 n(n+1)/2 的储存空间里。 假设用以为数组储存上三角或下三角元素。则一维数组的下标 k 与 n 阶对称阵的元素 a(i,j) 的下标对应关系为: 如果 i >= j 时,以下三角储存, k = i*(i+1)/2 + j 如果 i < j 时,以上三角储存, k = j*(j+1)/2 + i
例题:有一个10阶对称矩阵A,采用压缩存储方式存储,(按行为主序,并且A[0][0]=1),则A[8][5]的地址为42。分为上三角矩阵和下三角矩阵,其中在上三角矩阵中,下三角元素 全部为一个常数c,下三角矩阵中,上三角元素全部为一个常数c。 以上三角矩阵为例,上三角矩阵的压缩规则是只储存上三角元素, 不储存下三角元素,或只用一个储存单元储存下三角非零元素 用一维数组储存上三角矩阵,采取使用一个储存单元储存下三角元 素的方法,一维数组的长度为 n*(n+1)/2 + 1 一维数组的下标 k与 n 阶上三角矩阵的元素 a(i,j) 的下标对应关系为: 如果 i <= j, k = i*(2n-i+1)/2 + j -i 如果 i > j , k = n*(n+1)/2 下三角矩阵使用一维数组储存后相应的对应关系为: 如果 i >= j, k = i*(i+1)/2 + j 如果 i < j, k = n*(n+1)/2