0%

海量日志数据,提取出某日访问百度次数最多的那个IP。

首先是这一天,并且是访问百度的日志中的IP取出来,逐个写入到一个大文件中。注意到IP是32位的,最多有个2^32个IP。同样可以采用映射的方法,比如模1000,把整个大文件映射为1000个小文件,再找出每个小文中出现频率最大的IP(可以采用hash_map进行频率统计,然后再找出频率最大的几个)及相应的频率。然后再在这1000个最大的IP中,找出那个频率最大的IP,即为所求。

阅读全文 »

结构体对齐

写在前面

    结构体对齐一直是一个老生常谈的问题,我面试过就被问过几次,但是每一次都复习准备好好的,但是一到面试时候,总能被面试官问倒(卑微~)其实主要的原因就是自己没有准确的深刻的理解结构体对齐这个知识点,没有对其进行一个总结。

为什么需要结构体对齐

    结构体需要对其的原因主要就是对CPU对内存访问效率优化的一个问题。假设是intel 32的CPU, 每个总线周期都是要从偶地址读取32位的内存数据。

假设我们的CPU和总线都是64位的,每次可以从内存中获取8个字节(Byte)64位(bit)的数据,这8个字节就是对齐的,假设就是07,815类似这样,你不能从中间310这样取值。如果需要取值310之间的数据,就需要取两次,分别是07,再取815。所以CPU的取值效率就下降了。

阅读全文 »

原子操作,即不可分割开的操作;该操作一定是在同一个cpu时间片中完成,这样即使线程被切换,多个线程也不会看到同一块内存中不完整的数据。

线程同步的主要方式–线程锁 线程同步最常用的方法是使用(Lock)。锁是一种非强制机制,每一个线程访问数据或资源之前,首先试图获取(Acquireuytreewq)锁,并在访问结束之后释放(release)。在锁已经被占用时获取锁,线程会等待,直到该锁被释放。

阅读全文 »

信号机制

信号是一种软中断,信号提供了一种处理异步事件的方法。通过kill -l命令我们可以很清楚的看待linux下对应的信号有64个。这些信号主要可以分为两大类,可靠信号不可靠信号

阅读全文 »