摘要: 1、在Linux系统中,编辑markdown可以用retext工具 2、使用python-markdown将markdown文件转换成html文件 3、使用python-pisa将html转换成pdf文件 4、通过在文件的开头加上meta标记解决markdown的内容是中文乱码 阅读全文
posted @ 2016-11-29 13:20 HectorHou 阅读(1868) 评论(0) 推荐(0) 编辑
摘要: 一、什么是内存模型,为什么要使用它 如果缺少同步,那么将会有许多因素使得线程无法立即甚至永远看到一个线程的操作结果 编译器把变量保存在本地寄存器而不是内存中 编译器中生成的指令顺序,可以与源代码中的顺序不同 处理器采用乱序或并行的方式来执行指令 保存在处理器本地缓存中的值,对于其他处理器是不可见 在 阅读全文
posted @ 2016-11-11 14:57 HectorHou 阅读(369) 评论(0) 推荐(0) 编辑
摘要: 非阻塞算法:使用底层的原子机器指令(例如比较并交换指令)代替锁来确保数据在并发访问中的一致性 应用于在操作系统和JVM中实现线程 / 进程调度机制、垃圾回收机制以及锁和其他并发数据结构 可伸缩性和活跃性上拥有巨大的优势,不存在死锁 原子变量:提供了与volatile类型变量相同的内存语义,并支持原子 阅读全文
posted @ 2016-11-10 22:09 HectorHou 阅读(545) 评论(0) 推荐(0) 编辑
摘要: 一、状态依赖性管理 对于单线程程序,某个条件为假,那么这个条件将永远无法成真 在并发程序中,基于状态的条件可能会由于其他线程的操作而改变 1 acquire lock on object state 2 while (precondition does not hold) 3 { 4 release 阅读全文
posted @ 2016-11-10 12:20 HectorHou 阅读(550) 评论(0) 推荐(0) 编辑
摘要: 一、Lock与ReentrantLock Lock接口中定义了一种无条件、可轮询的、定时的以及可中断的锁获取操作,所有加锁和解锁的方法都是显式的。 ReentrantLock实现了Lock接口,并提供了与synchronized相同的互斥性和内存可见性。ReentrantLock同样提供了可重入的加 阅读全文
posted @ 2016-11-10 10:53 HectorHou 阅读(1231) 评论(1) 推荐(0) 编辑
摘要: 访问者模式:为某个对象组合添加新功能,而又不改变组合的内部结构 Visitor抽象访问者角色,为该对象结构中具体元素角色声明一个访问操作接口 ConcreteVisitor具体访问者角色,实现Visitor声明的接口 Element定义一个接受访问操作(accept()),它以一个访问者(Visit 阅读全文
posted @ 2016-11-09 23:47 HectorHou 阅读(293) 评论(0) 推荐(0) 编辑
摘要: 原型模式:通过复制一个已经存在的实例来返回新的实例,而不是新建实例.被复制的实例就是我们所称的原型,这个原型是可定制的(clone) 特点: 向用户隐藏了创建新实例的复杂性 让用户可以产生未知类型的对象,即只需知道对象实现了哪些接口,而无需知道具体是哪种实现 在某些情况下,复制对象比创建对象更高效 阅读全文
posted @ 2016-11-08 23:21 HectorHou 阅读(311) 评论(0) 推荐(0) 编辑
摘要: 并发程序中潜在错误的发生并不具有确定性,而是随机的。 安全性测试:通常会采用测试不变性条件的形式,即判断某个类的行为是否与其规范保持一致 活跃性测试:进展测试和无进展测试两方面,这些都是很难量化的(性能:即吞吐量,响应性,可伸缩性测试) 一、正确性测试 重点:找出需要检查的不变性条件和后验条件 1、 阅读全文
posted @ 2016-11-08 12:25 HectorHou 阅读(4341) 评论(0) 推荐(0) 编辑
摘要: 备忘录模式:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。可以将该对象恢复到原先保存的状态 Java中可以使用序列化机制保存状态 发起人:记录当前时刻的内部状态,负责定义哪些属于备份范围的状态,负责创建和恢复备忘录数据。 备忘录:负责存储发起人对象的内部状态,在需要的时 阅读全文
posted @ 2016-11-07 23:06 HectorHou 阅读(312) 评论(0) 推荐(0) 编辑
摘要: 线程的最主要目的是提高程序的运行性能,但性能的提升会导致复杂性的提升,又会导致安全性和活跃性的风险 一、对性能的思考 提升性能意味着用更少的资源做更多地事情。要想通过并发来获得更好的性能,就要更有效地利用现有处理资源 线程使用的额外的性能开销:线程之间的协调(例如加锁、触发信号以及内存同步等),增加 阅读全文
posted @ 2016-11-07 22:03 HectorHou 阅读(1001) 评论(0) 推荐(0) 编辑