摘要: 始于一个很简单的问题:生成{0,1,2,3,...,n-1}的n!种排列,即全排列问题。下面介绍几种全排列的实现,以及探讨一下其解题思路。基于枚举/递归的方法思路: 基于枚举的方法,也可以说是基于递归的方法,此方法的思路是先将全排列问题的约束进行放松,形成一个较容易解决的新问题,解新问题,再对... 阅读全文
posted @ 2014-12-05 23:05 Mr.Open 阅读(1908) 评论(0) 推荐(0) 编辑
摘要: ——转自:{http://langyu.iteye.com/blog/992916} Shuffle过程是MapReduce的核心,也被称为奇迹发生的地方。要想理解MapReduce, Shuffle是必须要了解的。我看过很多相关的资料,但每次看完都云里雾里的绕着,很难理清大致的逻辑,反而越搅越混... 阅读全文
posted @ 2014-12-01 22:42 Mr.Open 阅读(222) 评论(0) 推荐(0) 编辑
摘要: ——转自:{老码农的专栏} 前两篇Paxos算法的讨论,让我们对paxos算法的理论形成过程有了大概的了解,但距离其成为一个可执行的算法程序还有很长的路要走,原因是很多的细节和错误未被考虑。Google Chubby的作者说,paxos算法实现起来远没有看起来简单,原因是paxos的容错仅限于se... 阅读全文
posted @ 2014-11-28 18:39 Mr.Open 阅读(299) 评论(0) 推荐(0) 编辑
摘要: ——转自:{老码农的专栏}1.编号处理 根据P2c,proposer在提案前会先咨询acceptor查看其批准的最大的编号和value,再决定提交哪个value。之前我们一直强调更高编号的proposal,而没有说明低编号的proposal该怎么处理。|--------低编号(LN)-------... 阅读全文
posted @ 2014-11-28 18:29 Mr.Open 阅读(265) 评论(0) 推荐(0) 编辑
摘要: ——转自:{老码农的专栏} Paxos算法的难理解与算法的知名度一样令人敬仰,从我个人的经历而言,难理解的原因并不是该算法高深到大家智商不够,而在于Lamport在表达该算法时过于晦涩且缺乏一个完整的应用场景。如果大师能换种思路表达该算法,大家可能会更容易接受:首先提出算法适用的场景,给出一个... 阅读全文
posted @ 2014-11-28 18:14 Mr.Open 阅读(260) 评论(0) 推荐(0) 编辑
摘要: 3 分布式系统3.5 容错故障检测:心跳协议;当机器发生故障时,需要将上面的服务迁移到其他服务器上,为了保证强一致性,需要确保故障机器不再提供服务;主要问题:正常机器和故障机器之间需要对“故障机器是否应该被认为发生故障而停止服务”达成一致。异步网络中多态机器无法达成一致。租约:带有超时时间的一种授权... 阅读全文
posted @ 2014-11-19 09:21 Mr.Open 阅读(525) 评论(0) 推荐(0) 编辑
摘要: 在学习Java集合的时候遇到了Float.isNaN(float)函数,点进去一看就不理解了,函数实现如下:public static boolean isNaN(float v) { return (v != v); } float的v怎么会不等于自身呢?以下是关于这个函... 阅读全文
posted @ 2014-11-18 16:33 Mr.Open 阅读(16210) 评论(1) 推荐(4) 编辑
摘要: ***{转自:缓存设计的一些思考}*** 互联网架构中缓存无处不在,某厂牛人曾经说过:”缓存就像清凉油,哪里不舒服,抹一下就好了”。高品质的存储容量小,价格高;低品质存储容量大,价格低,缓存的目的就在于”扩充”高品质存储的容量。本文探讨缓存相关的一些问题。LRU替换算法 缓存的技术点包括内存管理... 阅读全文
posted @ 2014-11-15 23:07 Mr.Open 阅读(421) 评论(0) 推荐(0) 编辑
摘要: Libevent设计的精化之一在于把Timer事件、Signal事件和IO事件统一集成在一个Reactor中,以统一的方式去处理这三种不同的事件,更确切的说是把Timer事件和Signal事件融合到了IO多路复用机制中。 Timer事件的融合相对清晰简单,其套用了Reactor和Proacto... 阅读全文
posted @ 2014-11-15 21:06 Mr.Open 阅读(5036) 评论(0) 推荐(1) 编辑
摘要: Trie树的原理 Trie树也称字典树,因为其效率很高,所以在在字符串查找、前缀匹配等中应用很广泛,其高效率是以空间为代价的。 利用串构建一个字典树,这个字典树保存了串的公共前缀信息,因此可以降低查询操作的复杂度。下面以英文单词构建的字典树为例,这棵Trie树中每个结点包括26个孩子结点,因为总... 阅读全文
posted @ 2014-11-12 20:06 Mr.Open 阅读(3738) 评论(1) 推荐(0) 编辑
摘要: 首次接触一致性哈希是在学习memcached的时候,为了解决分布式服务器的负载均衡或者说选路的问题,一致性哈希算法不仅能够使memcached服务器被选中的概率(数据分布)更加均匀,而且使得服务器的增加和减少对整个分布式存储的影响也较小,也就是说不会引起大范围的数据迁移。 关于一致性哈希算法的... 阅读全文
posted @ 2014-11-07 21:00 Mr.Open 阅读(817) 评论(0) 推荐(0) 编辑
摘要: 代理模式: 代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。通过代理模式,可以延迟创建对象,限制访问某个对象,也就是说,提供一组方法给普通用户,特别方法给管理员用户。UML图:简单结构示意图... 阅读全文
posted @ 2014-11-06 16:55 Mr.Open 阅读(503) 评论(0) 推荐(0) 编辑
摘要: 由于Java中读取配置文件的代码比较固定,所以可以将读取配置文件的那部分功能单独作为一个类,以后可以复用。为了能够达到复用的目的,不能由配置文件中每一个属性生成一个函数去读取,我们需要一种通用的方法读取属性,即由用户给出属性名字(作为方法参数)来获取对应属性的Value值。下面是示例代码: 1 ... 阅读全文
posted @ 2014-11-06 11:36 Mr.Open 阅读(4341) 评论(0) 推荐(0) 编辑
摘要: 在用Java实际开发的时候我们经常要用到单例模式,一般来说,单例类的实例只能通过静态工厂方法来创建,我们也许会这样写:public final class Singleton { private static Singleton singObj = new Singleton(); ... 阅读全文
posted @ 2014-11-04 20:14 Mr.Open 阅读(1654) 评论(0) 推荐(1) 编辑
摘要: 1.AVL 树本质上还是一棵二叉搜索树,它的特点是:本身首先是一棵二叉搜索树。带有平衡条件: 每个结点的左右子树的高度之差的绝对值(平衡因子) 最多为 1。2. 数据结构定义AVL树节点类:1 template 2 class AVLTreeNode {3 public:4 T key;5 ... 阅读全文
posted @ 2014-11-03 19:34 Mr.Open 阅读(642) 评论(0) 推荐(0) 编辑
摘要: 反射库提供了一个非常丰富且精心设计的工具集,以便编写能够动态操纵java代码的程序库。这项功能被大量地应用于JavaBeans中。反射机制提供了在运行状态中获得和调用修改任何一个类的属性和方法的能力。 Java反射机制主要提供了以下功能: 在运行时判断任意一个对象所属的类;在运行时构造任意一个... 阅读全文
posted @ 2014-11-01 16:56 Mr.Open 阅读(256) 评论(0) 推荐(0) 编辑
摘要: 问题描述:1. 项目分为两个部分,一个后台的数据采集程序,接收来自各个传感器发送过来的数据,解码后以特定的格式存储在数据库对应的表中,另一个是web部分,用户可以通过web查看这些数据的情况(历史数据和实时数据);2. 在存储检测数据的表MonitorData中,以设备ID(区分不同的物理设备)、类... 阅读全文
posted @ 2014-10-31 22:24 Mr.Open 阅读(441) 评论(0) 推荐(0) 编辑
摘要: Date、Calendar、Timestamp的区别、相互转换与使用1 Java.util.Date包含年、月、日、时、分、秒信息。1 // String转换为Date 2 String dateStr="2013-8-13 23:23:23"; 3 String pattern="yyyy-M... 阅读全文
posted @ 2014-10-13 21:03 Mr.Open 阅读(5263) 评论(0) 推荐(0) 编辑
摘要: 在Linux环境下开发经常会碰到很多错误(设置errno),其中EAGAIN是其中比较常见的一个错误(比如用在非阻塞操作中)。 从字面上来看,是提示再试一次。这个错误经常出现在当应用程序进行一些非阻塞(non-blocking)操作(对文件或socket)的时候。例如,以 O_NONBLOCK... 阅读全文
posted @ 2014-08-11 20:43 Mr.Open 阅读(24319) 评论(0) 推荐(1) 编辑
摘要: 添加运行时共享库目录运行使用共享库的程序需要加载共享库(不同于G++ 编译时指定的链接库),添加共享库的步骤:修改文件 /etc/ld.so.conf 添加共享库目录运行 ldconfig 同步更新一下如:$ gedit /etc/ld.so.conf #添加 /root/dreamlove... 阅读全文
posted @ 2014-06-07 15:20 Mr.Open 阅读(942) 评论(0) 推荐(0) 编辑
摘要: 第二章 基本线程编程1.(P25)如果多个线程等待同一个线程终止,则所有等待线程将一直等到目标线程终止。然后,一个等待线程成功返回,其余的等待线程将失败并返回ESRCH错误。2.(P26)将新线程的pbe参数作为栈参数进行传递。这个线程参数之所以能够作为栈参数传递,是因为主线程会等待辅助线程终止。不... 阅读全文
posted @ 2014-06-06 21:04 Mr.Open 阅读(1580) 评论(0) 推荐(0) 编辑
摘要: 第一章 线程安全的对象生命期管理第二章 线程同步精要第三章 多线程服务器的适用场合与常用编程模型第四章 C++多线程系统编程精要1.(P84)11个常用的最基本Pthreads函数:2个:线程的创建和等待结束(join)。封装为muduo::Thread4个:mutex的创建、销毁、加锁、解锁。封装... 阅读全文
posted @ 2014-06-01 17:25 Mr.Open 阅读(828) 评论(0) 推荐(0) 编辑
摘要: 第2章 变量和基本类型1.(P56)如果使用class关键字来定义类,那么定义在第一个访问标号前的任何成员都隐式指定为private;如果使用struct关键字,那么这些成员都是public。第7章 函数1.数组有两个特殊的性质,影响我们定义和使用作用在数组上的函数:一是不能复制数组(4.1.1节)... 阅读全文
posted @ 2014-05-13 15:21 Mr.Open 阅读(294) 评论(0) 推荐(0) 编辑
摘要: Sniffer(嗅探器)是一种基于被动侦听原理的网络分析方式。将网络接口设置在监听模式,便可以将网上传输的源源不断的信息截获。对于网络监听的基本原理我们不在赘述,我们也不开启网卡的混杂模式,因为现在的网络基本都使用了交换机,因此混杂模式也似乎变得无用武之地了。 Sniffer实现的底层支持有多种,如libpcap、套接字方式,libpcap是unix/linux平台下的网络数据包捕获函数包,对应windows下的是winpcap,大多数网络监控软件都以它为基础,比如大名鼎鼎的wireshark。libpcap目前支持源自Berkeley内核中的BPF、Solaris 2.X 和HP-UX... 阅读全文
posted @ 2014-04-07 14:01 Mr.Open 阅读(2595) 评论(0) 推荐(0) 编辑
摘要: 该程序实质是一个简单的socket编程,在受害方上运行攻击代码(后门进程),通过socket打开一个预设端口,并监听,等待攻击方的链接。一旦攻击方通过网络链接工具试图链接该socket,那么后门进程立刻fork一个子进程来处理链接请求。处理请求的行为即用exec函数打开一个shell来代替本子进程,并将本进程的标准输入、输出、出错文件描述符重定向到该套接字上,这样就实现了攻击方远程得到了受害方的一个shell。int main(int argc, char **argv){ int i, listenfd, connfd; /*listenfd为主进程监听的套接字,c... 阅读全文
posted @ 2014-03-29 17:14 Mr.Open 阅读(5946) 评论(1) 推荐(0) 编辑