摘要:
生产者消费者问题生产者和消费者共享一个有限的缓冲区。生产者反复的产生项目并把它们加入到槽中去。而消费者消费项目,从槽中移除项目。这里生成者和消费者可以有任意多个,可以假想成一个个线程。每一个线程是一个生产者或者消费者。可以使用一个数据结构来存放槽数据和信号量。生产者 生产的过程中先等待可以使用的空槽... 阅读全文
摘要:
并发是指逻辑控制流在时间上的重叠,其出现在计算机系统很多不同层面上,例如内核级并发和应用级并发。应用级并发1. 访问慢速I/O设备2. 空间释放延迟3. 服务器多个网络客户端4. 多核机器并行计算现 代操作系统提供了三种基本构造并发程序的方法:1. 进程 进程有自己的虚拟地址空间,由内核调度和维护,... 阅读全文
摘要:
链接就是把代码和数据组合成一个单一的文件。三种情况下进行链接,编译时,加载时,运行时。为什么要使用链接器?分离编译,分解成更小的更易于管理的模块。修改某个模块时,只需要重新编译该文件,并重新编译其他文件,而不需要重新编译所有的文件。静态链接: 将可重定位文件组合成一个完整的可执行目标文件。 链接过... 阅读全文
摘要:
初面中几个问题:1)对于C++,Java,python, Javascript 几种语言,说一下你使用它们的不同感受?2) 上述几种语言的可移植性?3)C++多线程编程?终面 是经理面试的,感觉他问题的出发点比较高,让我发现自己很多不足的地方1)你认为软件工程师必备的素质?2)你觉得优秀的系统需要做... 阅读全文
摘要:
最近做到一道题目,大概的意思就是求一个多叉树中两个节点的最近公共祖先,输入是用邻接矩阵表示的。要想理解tarjan算法并实现它,需要先理解一下内容:1) 深度优先搜索;tarjan算法核心思想:当某节点刚刚搜索完毕时,看与其相关的结点v是否已经被访问,如果v已经被访问过了,则它们的最近公共祖先就是v... 阅读全文
摘要:
这里代码写的比较随意,直接使用数组下标作为索引,而结点就是用0到n-1来表示。类似于递归调用的思想(感觉就是把递归调用里面的调用栈用简单的栈数组来替代一下)。这里对于栈顶的元素,如果它为白色,则全局时间变量加一,且把它邻接链表里的白色节点全部入栈;而如果栈顶元素已经是灰色,就把它变成黑色,时间全局变... 阅读全文
摘要:
这里利用直接寻址法去重,遍历链表,如果对应数组位置值为0,则修正为1,如果对应数组为1,则删除该节点。(数组初始化为0)链表的一些操作都简单的实现了一下。#include #include #include struct Node{ int key; Node *next;};struc... 阅读全文
摘要:
散列表在实际应用中比较多,也是各种面试中出现频率比较高的内容(一般都是考你如何应用)。散列表是实现字典操作的一种有效数据结构,其最突出的是查找性能,在一些合理的假设下,散列表中查找的平均时间为O(1)。下面介绍几种常见的散列表。直接寻址表(适用于关键字的全域U比较小的情况)直接寻址表就是一个数组,其... 阅读全文
摘要:
前面几种遍历方法比较简单,说明一下最后一种1. 如果路径上前一个节点是父节点,则往左孩子方向走2. 如果路径上前一个节点是左孩子,则往右孩子方向走3. 如果路径上前一个节点是右孩子,则往父节点方向走处理下孩子缺失的情况1. 如果只有一个右孩子且从父节点过来,往右孩子方向走 (有右无左)2. 如果从左... 阅读全文
摘要:
对每个属性使用一个数组表示,多数组可以表示一组同构的对象。指针放在额外的数组中,用下标来表示。这次实现代码基于10.3-5, 主要为了实现compacitify 操作,即把链表的所有元素在存储器中保持紧凑,本题是都放到前n个位置(n个元素)。思想是从网上看来的,移动元素的过程中保持链表中元素的相互指... 阅读全文