摘要:先附上论文链接 https://pdos.csail.mit.edu/6.824/papers/raft-extended.pdf 最近在自学MIT的6.824分布式课程,找到两个比较好的github:MIT课程《Distributed Systems 》学习和翻译 和 https://github 阅读全文
posted @ 2018-03-04 18:10 你好呵呵 阅读 (849) 评论 (0) 编辑
摘要:Given a binary tree, find the maximum path sum. For this problem, a path is defined as any sequence of nodes from some starting node to any node in th 阅读全文
posted @ 2016-08-28 00:12 你好呵呵 阅读 (133) 评论 (0) 编辑
摘要:当需要对一个大文件进行排序时,计算机内存可能不够一次性装入所有数据,解决办法是归并。归并的大概做法是将大文件分为若干段,依次读入内存进行排序,排序后再重新写入硬盘。这些排好序的片段成为顺串。然后对这些顺串进行逐躺归并,使归并段逐渐由小变大,最终使整个文件有序。要使用归并就得考虑两个问题,一个是如何生 阅读全文
posted @ 2016-08-22 21:03 你好呵呵 阅读 (2927) 评论 (0) 编辑
摘要:Cache coherence 本文主要讨论的是内存一致性问题(memory consistency),和缓存一致性(cache coherence)是不同的。在《计算机体系结构:量化方法研究》第五章中,memory consistency是由cache coherence引出的,所以我们就先来说说 阅读全文
posted @ 2016-07-14 17:07 你好呵呵 阅读 (2382) 评论 (0) 编辑
摘要:在做csapp的malloc实验,一开始是按照书上的隐式链表法,发现得分很低。这种方法确实很挫,需要遍历一遍以找到合适的空闲块。于是我想到《STL源码剖析》中stl的内存池,感觉应该可以用类似的方法做,因为malloc要做的事情实际就是为了防止内存碎片和减少系统调用,实际就是一个内存池。但是书上介绍 阅读全文
posted @ 2016-05-01 18:05 你好呵呵 阅读 (359) 评论 (0) 编辑
摘要:fork在面试中经常被问到,在这里复习一下。 frok创建子进程,父子进程共享.text段,子进程获得父进程数据段、堆和栈的副本,由于在fork之后经常跟随者exec,所以很多实现并不执行父进程数据段、堆和栈的完全复制,而是使用写时复制(Copy-On-Write,COW)技术。这些区域由父子进程共 阅读全文
posted @ 2016-03-30 20:13 你好呵呵 阅读 (437) 评论 (0) 编辑
摘要:管道 管道是unix ipc的最古老形式,是一种在内存中的特殊文件,只能在具有公共祖先的进程之间使用(即父子进程,兄弟进程)。 管道由pipe函数创建 fd[1]写,fd[0]读。 单个进程的管道几乎没有任何用处,通常,调用pipe的进程接着调用fork,这样就创建了父子进程间的管道。 输出结果: 阅读全文
posted @ 2016-03-21 22:46 你好呵呵 阅读 (997) 评论 (0) 编辑
摘要:std::move(t)负责将t的类型转换为右值引用,这种功能很有用,可以用在swap中,也可以用来解决完美转发。 std::move()的源码如下 先说一下实参为左值的情况。 按理来说左值是无法匹配右值形参的,但是c++为了move这个基础设施开了两个例外。 第一个例外是当形参为右值引用,实参为左 阅读全文
posted @ 2016-03-20 23:46 你好呵呵 阅读 (3118) 评论 (0) 编辑
摘要:经典题目,用两个栈实现队列 两个栈s[0]和s[1],一个用来入列,一个用来出列。 当s[1]为空时,执行pop()时就将s[0]的值push进s[1],再将s[1]的栈顶pop() 阅读全文
posted @ 2016-03-18 20:15 你好呵呵 阅读 (210) 评论 (0) 编辑
摘要:《数据结构》中表达式求值的经典算法是用两个栈,一个存数字,一个存运算符。依次读入表达式中的每个字符,若是数字则进数字栈,若是运算符则和运算符栈的栈顶运算符比较优先权作相应操作,直至整个表达式求值完毕。运算符的优先级表如下 + - * / ( ) # + > > < < < > > - > > < < 阅读全文
posted @ 2016-03-09 21:45 你好呵呵 阅读 (774) 评论 (0) 编辑