摘要:
在《同步异步和阻塞1》中,分别说明了3种同步异步和阻塞非阻塞的优缺点,从这个blog开始,我们用一个小项目来进一步深入的看看他们的优缺点。 1. 项目简介 code : sync_io 编译 : C++, VS2010 项目有2个IO,按下”Start”按钮后就会开始按照不同的IO处理方法调用IO, 阅读全文
摘要:
同步异步和阻塞是个有关联,但有有区别的东西。很多时候会从直觉上认为 : 同步 = 阻塞, 异步 = 非阻塞。 但实际上他们是完全描述的不同的东西: 同步异步是从request –> Receive Result这个过程的不同来讲的。 而阻塞是指在等待Request结果时,线程是否会挂起。 对于一个IO过程,可能是同步异步中的一种,同时也必然是阻塞或非阻塞。他们正交的结果共有4种: 1. 同步... 阅读全文
摘要:
1. 问题 一些程序经过脱壳后(如用OD的dump插件),一些导入表信息丢失了,导致拖入IDA后看不到API的信息(如右图所示,第一个红圈处实际是GetCurrentProcessId),给分析造成极大影响。 2. 分析 从OD来看,41F480处的值就是API GetCurrentProcessId的地址,也就是壳修改后的导入表的位置,该地址在.rsrc Section内,即程序的... 阅读全文
摘要:
1. 问题 我们知道,在计算机中是用补码来存放实际的正负数的,那么计算机为什么要用补码来存放数据,计算机课本中,那个补码 = 反码 + 1的公式又是怎么来的? 要了解这些问题的答案,我们先要了解一些基本的知识,最基本的同余公式这里就不讲了,看本帖之前需要去离散数学或数论中了解下基本的同余运算即可。 阅读全文
摘要:
1. 什么是归并排序? 更详细的解释可以百度,这里说说其主要思想: 归并排序是采用分治思想,将所有的数均匀的分成n个等分的组,然后依次取(x, x+1) 2个等分组,将他们合并排序,形成一个新的组,然后递归即可,最后会合并为一个组,这个组就是有序的。 示范一下: 要排序的11个数 : [8, 3, 阅读全文
摘要:
1. 奇偶校检原理 有n位二进制串S = x1x2…xn 在末尾添加一个奇偶校检位xn+1 1> 当有奇数个xi为1时,xn+1 = 1 2> 当有偶数个xi为1时,xn+1 = 0 则最后得到的S2 = x1x2…xnxn+1 ,且S2总是有偶数个xi为1 校检时,取 X ≡ x1 + x2 + 阅读全文
摘要:
1. 问题 问题同《简单散列函数算法》,这个例子并不是特别恰当,当在于简单,数字小,方便验证,方便理解,特别是计算概率的部分。 设有10个非负整数,用不多于20个的储存单元来存放,如何存放这10个数,使得搜索其中的某一个数时,在储存单元中查找的次数最少? 问题类似于,有10个带号码的球,放到编号为{ 阅读全文
摘要:
1. 问题 问题同《简单散列函数算法》 设有10个非负整数,用不多于20个的储存单元来存放,如何存放这10个数,使得搜索其中的某一个数时,在储存单元中查找的次数最少? 问题类似于,有10个带号码的球,放到编号为{0, 1, 2, …, 19}共20个盒子中,每个盒子最多放一个,问如何放,使能够用最少的次数打开盒子,知道任一个球所在的盒子编号? 2. 分析 《简单散列函数算法》中,已经分析得出,... 阅读全文
摘要:
1. 问题 设有10个非负整数,用不多于20个的储存单元来存放,如何存放这10个数,使得搜索其中的某一个数时,在储存单元中查找的次数最少? 问题类似于,有10个带号码的球,放到编号为{0, 1, 2, …, 19}共20个盒子中,每个盒子最多放一个,问如何放,使能够用最少的次数打开盒子,知道任一个球所在的盒子编号? 2. 分析 2.1 最简单的情况 设10个球的号码分别是 : {1, 2, 3... 阅读全文
摘要:
1. 费马因式分解 1> 对于任一个奇数n,n = ab = x2-y2 2> ∵ n = ab = (x+y)*(x-y) ∴ a = x + y, b = x-y x = (a+b)/2, y = (a-b)/2 (因为n为奇数,a, b必也为奇数,所以(a+b)和(a-b)必为偶数,故能被2整 阅读全文