The Notion of the Diagnosability
文献内容翻译:可诊断性概念
authors: Meera Sampath, Raja Sengupta, StCphane Lafortune, Member, IEEE, Kasim Sinnamohideen, Member, IEEE, and Demosthenis Teneketzis, Member, IEEE
原文: Diagnosability of discrete-event systems
文献内容翻译:可诊断性概念
authors: Meera Sampath, Raja Sengupta, StCphane Lafortune, Member, IEEE, Kasim Sinnamohideen, Member, IEEE, and Demosthenis Teneketzis, Member, IEEE
原文: Diagnosability of discrete-event systems
在实际开发场景中,我们需要导入数据库中的数据可能包含重复的行(row)。当然如果在建表时,对数据表中相应的字段进行限制的话,则有可能不会出现这样的问题。
接下来,我们谈一谈,如果数据库中已有重复的数据行,我们该如何把它们找出来,并将这些数据行删除。
最近在看 『Refacting to Patterns』,结合之前看的 Test Driven-Practical TDD and Acceptance TDD for Java Developers 提到的测试驱动开发(TDD)。虽然早些时候,我已经有对一些设计模式有一定了解,但只有对创建型的设计模型有所应用,比如Singleton、Builder、Factory、AbstractFactory。而其他的行为型和结构型的设计模型,只有在阅读一些源代码的时候偶尔才有看到,如 Java 集合框架中使用的 Iterator 模式,然而自己却很少使用。
为了更好地执行 TDD 过程中的重构,以及看懂优秀项目的源代码,我觉得我有必要开始重新更深入地学习设计模式。
单例模式,即 Gof (Gangs of Four)设计模式中创建型(Creational)设计模式之一。用于限制类的实例化,它只允许当前 JVM 执行上下文中只能拥有限制类的一个实例。从定义来看,似乎它的实现应该比较简单,但是在实际实现时,它有许多需要注意的点。在 Java 中,光它实现方式现已有许多种。因此,本文将介绍单例模式的实现方法,简单分析每一种方法的优缺点,最后,再说明应用单例模式时可能遇到的问题以及相应解决办法。
集合(Collection),顾名思义,是一组对象。当需要处理任何的一组对象的时候,我们不可避免地要与集合打交道。集合也存在于几乎所有编程语言中,因此 Java 也不例外,为了开发人员能够更高效地处理集合数据,Java 提供了一个集合框架 (Collections framework),它由一系列接口以及实现类组成,提供了不同类型的集合:List, Set, Map, Queue, Deque 等。
这些随时可用的集合类可以帮助解决许多非常常见的问题,帮助处理一组同构和异构对象。其中集合涉及的常见操作有添加(add),删除(delete),排序(sorting),搜索(searching)以及一些操作集合的较复杂的算法。Java 的集合框架为这些操作提供了透明化的支持。
不同与归并排序mergeSort
,快排序不需要使用额外的数组来辅助进行排序,但是这并不意味着快排序就属于原地排序 (in-place)。
快排序递归时需要使用栈空间,当执行递归函数调用时,需要将当前执行函数的状态压入线程栈中,递归调用完成后再一层层返回。快排序不属于原地排序,那么有没有方法进行优化呢?
在 Java 中通过 new
关键字等其他方式在堆(heap)上创建对象是一个比较耗费资源的操作。 Java 在封装类(Wrapper classes)上使用内部缓存来使封装类的某些常用值使用更高效。
与 String
类一样,Java 中的封装类都是不可变的(immutable)。Java 中的封装类与 String 类一样同样提供了类似的缓存池机制。这其实也是一个普遍的操作,对于较昂贵的资源创建操作,使用缓存来处理在其他地方也非常常见,如数据库连接池、线程池等。
主要简单的了解JVM的内存区(Memory Area)以及GC(Garbage Collection)垃圾回收机制。
了解Java中类的结构(class file struture, 这里指.class
文件的结构)、类的加载机制、类的加载过程、类加载器的应用。
了解JDK, JRE, JVM之间的区别,JVM是如何工作的?什么是类加载器(class loaders), 解释器(interpreter)和及时编译器(JIT compilers)
gpg is the OpenPGP part of the GNU Privacy Guard (GnuPG). It is a tool to provide digital encryption and signing services using the OpenPGP standard.
gpg features: complete key management and all the bells and whistles you would expect from a full OpenPGP implementation.
GnuPG
(GPG) 是 基于OpenPGP
(由 RFC4880 定义,也被称为PGP
)的一个完整的和免费的实现.我们可以使用GPG
来对我们的数据和通信进行加密(encrypt)和签名(sign), 它具有通用的密钥管理系统,以及各种公钥目录的访问模块. 我们可以很容易地使用GPG
提供的命令行工具(当前它还提供不同平台下的图形界面工具frontends,以及库文件libraries)与其他的应用进行结合.同时还对S/MIME
和SSH(Security Shell)
提供支持.