遍历

【熊猫烧香】病毒分析

匿名 (未验证) 提交于 2019-12-03 00:36:02
多图!!! 病毒名称:熊猫烧香 文件: spo0lsv . vir 大小: 30001 bytes 修改时间: 2007 年 1 月 17 日, 12 : 18 : 40 MD5 : 512301 C535C88255C9A252FDF70B7A03 SHA1 : CA3A1070CFF311C0BA40AB60A8FE3266CFEFE870 CRC32 : E334747C 壳信息: FSG V2 . 0 编写语言: [ Borland Delphi v6 . 0 - v7 . 0 ] 病毒行为: 拷贝自身到 C:\Windows\System32\drivers 目录, 遍历磁盘,在每个文件夹生成 Desktop_.ini 文件; 删除 .gho 备份文件; 感染 exe/scr/pif/com/htm/html/asp/php/jsp/aspx 文件; 通过弱口令连接局域网其他计算机传播; 建立启动项,禁止显示隐藏文件; 每隔20分钟下载 http://www.ac86.cn/66/up.txt 文件,下载病毒; 删除磁盘共享; 遍历服务,关闭安全中心等; 遍历注册表,删除杀毒软件启动项; 打开 tom/163 等网站 连接 http://update.whboy.net/worm.txt 下载木马文件 Win7 x86 虚拟机 IDA OD Apimonitor

多线程与单线程

匿名 (未验证) 提交于 2019-12-03 00:34:01
单线程也就是程序执行时,所跑的程序路径(处理的东西)是连续顺序下来的,必须前面的处理好,后面的才会执行到。 多线程嘛,举个例子也就是说程序可以同时执行2个以上相同类似的操作,比如一些搜索代理或者群发email的多线程软件,由于 操作一次需要网络的返回信息 花的时间比较长 ,而对cpu来说却是空闲的,如果是一个一个顺序执行,那么搜索几千个IP就会花上好久好久。而如果用多线程就可以在等待期间加入其他的搜索,然后等待,这样可以提高效率。不过多线程和多进程公用一些资源时要考虑的问题好像也是一样的,,对于一些公共资源或者公共变量的访问和修改时要注意特别的,需要一些锁定什么的,还有顺序问题的考虑。 多线程编程的目的,就是 "最大限度地利用CPU资源",当某一线程的处理不需要占用CPU而只和I/O,OEMBIOS等资源打交道时,让需要占用CPU资源的其它线程有机会获得CPU资源。 也就是说当CPU资源已经被用得差不多了,再增加线程也无济于事么。 实例: 单线程,多线程的一个应用实例: 单线程的思路是遍历所有文件,当遍历到文件是 .java的时候,查找这个文件的内容,查找完毕之后,再遍历下一个文件 现在通过多线程调整这个思路: 遍历所有文件,当遍历到文件是.java的时候,创建一个线程去查找这个文件的内容,不必等待这个线程结束,继续遍历下一个文件 先看单线程: package Stream;

kotlin高级函数

匿名 (未验证) 提交于 2019-12-03 00:32:02
map val list : List < Int > = listof ( 1 , 3 , 4 , 9 ) 1. 使用传统的方式条件元素: var newList = ArrayList < Int > () list . forEach { newList . add ( it ) } //it为list元素 2. 使用 map 来进行元素操作返回一个新的 List val newList = list . map { it + 1 } //it为List里面的元素 3. map 可以用来数据转换 val newList1 = list . map ( it . toFloat ) val newList2 = list . map ( Int :: toFloat ) //函数引用的模式,默认一个it类的实例 flatMap 1 :打平 //遍历打印为 0,1,2,3 val flatMap : List < Int > = list . flatMap { it } //遍历打印为 0,1,2,3 2 : flatMap 数据转换成自定义(基本数据类型―― String ) val list : < IntRange > = listOf ( 1. . 19 , 100. . 199 , 4. . 39 ) val newlist = list . flatMap { it

二叉树的非递归遍历

匿名 (未验证) 提交于 2019-12-03 00:30:01
把栈中的每一个节点都当作是一棵完整的二叉树,每次pop出一个节点,访问,然后把右左两棵子树入栈。 把栈中的每一个节点当作是只有右子树的二叉树,这就需要每次入栈时处理好它的左子树,一路向左把所有的节点入栈,然后出栈,访问,然后把这个节点的右子树当作是二叉树按同样的方法处理(一路向左) 后序遍历的关键就在于如何判断一个节点是应该遍历它的两棵子树还是它自己, 后序遍历有这样的特点: 如果有右子树,那么它的右孩子一定正好在它之前 else 如果有左子树,那么它的左孩子一定正好在它之前 如果左右子树都没有那么说明它可以直接访问 所以我们在便利过程中设置一个变量保存刚刚遍历过的节点,然后根据上面的性质就可以判断是该访问栈顶元素还是它的两棵子树了。 文章来源: 二叉树的非递归遍历

树相关算法(一)

匿名 (未验证) 提交于 2019-12-03 00:30:01
前言:算法竞赛中常见的树问题 (二叉)树的遍历 树的重心 树的直径 最近公共祖先(LCA) 哈夫曼树 树链剖分 一、(二叉)树的遍历 这种遍历顺序和DFS入栈的顺序很像,这种二叉树遍历方式称为先序遍历。除了先序遍历外,还有另外两种遍历,中序遍历和后序遍历。 先序遍历:访问根节点,遍历左子树,遍历右子树; 中序遍历:遍历左子树,访问根节点,遍历右子树; 后序遍历:遍历左子树,遍历右子树,访问根节点。 对于上面的那棵树,给出三种遍历方式是: 先序遍历: A->B->D->F ->G->H->I->E->C; 中序遍历:F->D->H->G->I->B->E->A->C; 后序遍历:F->H->I->G->D->E->B->C->A。 说了这么多,二叉树的遍历有什么用呢?答案是,没太大用。一般情况下是用来当做题目中的信息。对于OIer来说这些是常识,初赛会考的。 二、树的重心 树的重心,也叫树的质心。对于一棵树来说,删去该树的重心后,所有的子树的大小不会超过原树大小的二分之一。树的重心还有一个性质,是相对于树上的其他点而言的,就是删去重心后形成的所有子树中最大的一棵节点数最少。换句话说,就是删去重心后生成的多棵子树是最平衡的。一棵树的重心至多有两个。 #include<cstdio> #include<vector> #include<cstring> #include

二叉树

匿名 (未验证) 提交于 2019-12-03 00:26:01
【基本概念】 二叉树( binary tree)是一种特殊的树型结构,它是度数为2的树,即二叉树的每个结点最多有两个子结点。 每个结点的子结点分别称为左孩子、右孩子,它的两棵子树分别称为左子树、右子树。 二叉树有5种基本形态: 【二叉树的性质】 1.在二叉树的第 i 层上最多有 2^(i-1) 个结点(i>=1) 满二叉树 ,其特点是每层上的结点数都是最大结点数。 对满二叉树的结点进行连续编号,约定编号从根结点起,自上而下,从左到右,由此引出完全二叉树的定义:深度为 k,有 n 个结点的二叉树当且仅当其每一个结点都与深度为 k 的满二叉树中编号从 1 到 n 的结点一一对应时,称为 完全二叉树 3.对任意一棵二叉树,如果其叶结点数为 n0,度为 2 的结点数为 n2,则一定满足:n0=n2+1 4.具有 n 个结点的完全二叉树的深度为 floor(log2n)+1 5.对于一棵具有 n 个结点的完全二叉树,对任一个结点(编号为i),有: 【二叉树的存储结构】 方法1:链式存储结构,即:单链表结构或双链表结构 typedef struct node; typedef node *tree; struct node{ char data;  tree lchild, rchild; }; tree bt; 或 typedef struct node; typedef node

数据结构实验之图论一:基于邻接矩阵的广度优先搜索遍历

匿名 (未验证) 提交于 2019-12-03 00:26:01
数据结构实验之图论一:基于邻接矩阵的广度优先搜索遍历 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 给定一个无向连通图,顶点编号从0到n-1,用广度优先搜索(BFS)遍历,输出从某个顶点出发的遍历序列。(同一个结点的同层邻接点,节点编号小的优先遍历) Input 输入第一行为整数n(0< n <100),表示数据的组数。 对于每组数据,第一行是三个整数k,m,t(0<k<100,0<m<(k-1)*k/2,0< t<k),表示有m条边,k个顶点,t为遍历的起始顶点。 下面的m行,每行是空格隔开的两个整数u,v,表示一条连接u,v顶点的无向边。 Output 输出有n行,对应n组输出,每行为用空格隔开的k个整数,对应一组数据,表示BFS的遍历结果。 Sample Input 1 6 7 0 0 3 0 4 1 4 1 5 2 3 2 4 3 5 Sample Output 0 3 4 2 5 1 #include <iostream> #include < bits / stdc ++. h > using namespace std ; int vis [ 105 ], graph [ 105 ][ 105 ]; int st [ 105 ], top ; void bfs ( int t , int

Gremlin基本使用

匿名 (未验证) 提交于 2019-12-03 00:26:01
Gremlin简介 Gremlin是 Apache TinkerPop Gremlin包括三个基本的操作: map-step 对数据流中的对象进行转换; filter-step 对数据流中的对象就行过滤; sideEffect-step 对数据流进行计算统计; 以下是Gremlin在一些场景中的具体应用: 1.查找Gremlin朋友的朋友 g. V ().has( "name" , "gremlin" ). out( "knows" ). out( "knows" ). values( "name" ) 2.查找那些由两个朋友共同创建的项目 g.V().match( as ( "a" ). out ( "knows" ). as ( "b" ), as ( "a" ). out ( "created" ). as ( "c" ), as ( "b" ). out ( "created" ). as ( "c" ), as ( "c" ). in ( "created" ).count(). is ( 2 )). select ( "c" ).by( "name" ) 3.给出Gremlin的所有上司,直至CEO g.V().has( "name" , "gremlin" ). repeat(in( "manages" )). until (has( "title" , "ceo"

JDK8:HashMap源码解析:7:TreeNode类的putTreeVal方法

匿名 (未验证) 提交于 2019-12-03 00:26:01
一、概述 我们都知道,目前HashMap是采用数组+链表+红黑树的方式来存储和组织数据的。 在put数据的时候,根据键的hash值寻址到具体数组位置,如果不存在hash碰撞,那么这个位置就只存储这么一个键值对。参见: put方法分析 如果两个key的hash值相同,那么对应数组位置上就需要用链表的方式将这两个数据组织起来,当同一个位置上链表中的元素达到8个的时候,就会再将这些元素构建成一个红黑树(参见: treeifyBin方法分析 ),同时把原来的单链表结构变成了双链表结构,也就是这些元素即维持着红黑树的结构又维持着双链表的结构。当第9个相同hash值的键值对put过来时,发现该位置已经是一个树节点了,那么就会调用putTreeVal方法,将这个新的值设置到指定的key上。 二、方法解析 /** * 当存在hash碰撞的时候,且元素数量大于8个时候,就会以红黑树的方式将这些元素组织起来 * map 当前节点所在的HashMap对象 * tab 当前HashMap对象的元素数组 * h 指定key的hash值 * k 指定key * v 指定key上要写入的值 * 返回:指定key所匹配到的节点对象,针对这个对象去修改V(返回空说明创建了一个新节点) */ final TreeNode<K,V> putTreeVal(HashMap<K,V> map, Node<K,V>[]

LinkedList 的实现原理浅析

匿名 (未验证) 提交于 2019-12-03 00:26:01
转载自 LinkedList内部结构 查看LinkedList的源码,发现其继承自AbstractSequentialList,实现了List,Deque,Cloneable以及Serializable接口,如: 也就意味着: 从上述代码可以看出,LinkedList中有size,first以及last全局变量,其作用分别是: 其中,Node是内部类,内容如下: 从上述代码可以看出, 一个节点除了包含元素内容之外,同时包含前一个节点和后一个节点的引用~ 各个节点通过指定前一个节点和后一个节点,最终形成了一个链表~ 代码示例: 输出结果: debug查看LinkedList的结构如下: 形成了一个链表 方法 add 的实现 源代码 add方法会调用linkLast方法,会在链表尾端添加节点~ linkLast方法步骤 获取原来的last节点,然后创建一个新的节点,其prev为原来的last节点,其next节点为null 将last只想新的节点 如果原来的last节点为null,其实就是还没有元素,那么新的节点同样也是first节点;如果不为null,则原来的last节点的next就是新的节点 因为有新元素加入,size加1,且修改次数加1(modCount++) 方法 addAll 的实现 源代码 方法addAll(int index, Collection<? extends E>