学习博客
一个、Linux多线程编程技术高效开发
参考博文:http://www.ibm.com/developerworks/cn/linux/l-cn-mthreadps/
几个环境:
1、递归锁
2、自己主动复位条件变量
3、pthread_cond_wait运行前加锁,运行时会解锁。成功后会加锁。运行之后解锁
4、pthread_join堵塞当前线程,知道指定线程结束
二、trie树
參考博文:http://blog.csdn.net/hguisu/article/details/8131559
trie的优势:
假设给1w单词,找出一个单词是否在这1w之中
利用hash和trie都能够轻松做到
可是假设问一个前缀是否在这1w单词中出现
显然利用字符树会更好
三、红黑树
參考博文:http://blog.csdn.net/ts173383201/article/details/7866387
红黑树的实际处理:
在实际处理过程中,往往将最底层的孩子结点和根结点的父亲都指向同一个 NIL 结点,以便于处理红黑树代码中的边界条件
5条性质:
性质1. 结点是红色或黑色。
性质2. 根是黑色。
性质3 每一个叶结点是黑色的。
性质4 每一个红色结点的两个子结点都是黑色。
(从每一个叶子到根的全部路径上不能有两个连续的红色结点)
性质5. 从任一结点到其每一个叶子的全部路径都包括同样数目的黑色结点。
须要旋转的3种情况:
Case1 : z的叔叔y是红色的
Case2:z的叔叔y是黑色。并且z是右孩子
Case3:z的叔叔y是黑色,并且z是左孩子
四、考量hash的两个指标:单调性和平衡性
參考博文:http://blog.csdn.net/sparkliang/article/details/5279393
考量hash的一个指标:单调性:
单调性是指假设已经有一些内容通过哈希分派到了对应的缓冲中。又有新的缓冲增加到系统中。哈希的结果应可以保证原有已分配的内容可以被映射到新的缓冲中去,而不会被映射到旧的缓冲集合中的其它缓冲区。
一致性hash:
将hash表想象成环形
将对象和cache都映射到hash中
对象沿着环形hash的顺时针进行移动。遇到一个cache就将对象存储到cache中
考量hash的还有一个指标:平衡性:
平衡性是指哈希的结果可以尽可能分布到全部的缓冲中去,这样可以使得全部的缓冲空间都得到利用。
虚拟节点:
“虚拟节点”( virtual node )是实际节点在 hash 空间的复制品( replica )。一实际个节点相应了若干个“虚拟节点”,这个相应个数也成为“复制个数”。“虚拟节点”在 hash 空间中以 hash 值排列。
cache A1, cache A2 代表了 cache A ; cache C1, cache C2 代表了 cache C
objec1->cache A2 。 objec2->cache A1 ; objec3->cache C1 。 objec4->cache C2 ;
五、可运行程序的内存分布
參考博文:http://blog.csdn.net/hmsuccess/article/details/2808109
首先是堆栈区(stack),堆栈是由编译器自己主动分配释放 。存放函数的參数值,局部变量的值等。其操作方式类似于数据结构中的栈。
栈的申请是由系统自己主动分配,如在函数内部申请一个局部变量 int h,同一时候判别所申请空间是否小于栈的剩余空间。如若小于的话,在堆栈中为其开辟空间,为程序提供内存。否则将报异常提示栈溢出。
其次是堆(heap),堆一般由程序猿分配释放, 若程序猿不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。堆的申请是由程序猿自己来操作的,在C中使用malloc函数,而C++中使用new运算符,可是堆的申请过程比較复杂:当系统收到程序的申请时。会遍历记录空暇内存地址的链表。以求寻找第一个空间大于所申请空间的堆结点,然后将该结点从空暇结点链表中删除,并将该结点的空间分配给程序,此处应该注意的是有些情况下。新申请的内存块的首地址记录本次分配的内存块大小,这样在delete尤其是delete[]时就能正确的释放内存空间。
接着是全局数据区(静态区) (static),全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的还有一块区域。
另外文字常量区。常量字符串就是放在这里,程序结束后有系统释放。
最后是程序代码区。放着函数体的二进制代码。
六、远堆与近堆
參考博文:http://hi.baidu.com/yangyangye2008/item/673bfa5bec973c16db163539
对于16位的cpu
若申请空间大于64K,那么将让段地址偏移,则会改变原来的堆地址,称为远堆
假设小于64K,仅仅须要在偏移地址中分配,则为近堆
如今cpu32位
基本不分近堆远堆
七、13年华为面试笔试题
參考博文:http://blog.csdn.net/ts173383201/article/details/7920048
个人评价:标题简单的基础。只有网络覆盖广泛议题,不太可能
版权声明:本文博客原创文章,博客,未经同意,不得转载。