摘要:
### 宽字符阅读了 [UTF-8 Everywhere][1] 一文,推荐在程序中对于字符串都使用 UTF-8 编码。Unix-like 系统默认是支持 UTF-8 编码的Unicode字符串,标准库函数也默认支持 UTF-8 字符串,如 `fopen` 等。但在 Windows 系统,由于历史原... 阅读全文
摘要:
> 注:本文转译自 Stackoverflow 上 [Adding a Method to an Existing Object](http://stackoverflow.com/questions/972/adding-a-method-to-an-existing-objec) 的最佳回答。在... 阅读全文
摘要:
不同性质的图中,所采取的策略有所不同,自然存在各样的求最短路径的算法。* 无向无权图:BFS* 有向正权图:Dijkstra* 有向无负环图:Bellman-Ford(单点),Floyd-Warshall(任意两点)* 有向无环图(dags): 基于动态规划的算法。## 广度优先搜索(BFS)对于无... 阅读全文
摘要:
起因最近在用C#实现一个安全通信软件,基本思想是发送方在发送数据时先对数据进行加密再发送,同样接收方从网络上收到数据后先对数据进行解密再把解密后的数据递交到上层应用。 实现方式是通过封装TCPCLient类的一些方法,向外提供封装好的安全SOCKET,自动完成数据的加解密。上层应用只需调用安全SOCKET进行原始数据的发送与接收并不用关心底层数据的加解密,使用方式与使用系统原始的SOCKET一样。 public int Send(byte[] data) { try { int len = 0; byte[] ... 阅读全文
摘要:
概述主要设计思想是通过一个共享队列,多个输入端能同时非阻塞式的向队列中增加记录信息,输出端能自动及时的把队列中的记录信息输出到控制台或是保存到文件及数据库中。多个输入端互相隔离,采用多线程实现,但考虑到缓存日志信息的是一个共享队列,自然涉及到线程间的同步问题。本文的实现模式是采用操作系统中很经典的生产者/消费者模式。线程间的同步是通过事件信号,同时对共享队列的修改进行加锁保护,避免多个线程同时修改队列。日志记录类实现整个实现除了主要的日志记录类,还要定义同步事件类封装用于线程间同步的事件对象,定义日志信息类用于生成日志信息能存于共享队列中。1. 同步事件类 SyncEvents该类的定义与使用 阅读全文
摘要:
从编译,链接到运行,程序员应该了解自己所写的代码最终是怎么成为程序,又怎样在计算机上运行起来的。另不得不对作者能在硕士期间就能写出此书感到佩服。精读此书需要花些功夫,当然肯定能从中收获很多。我对此书也只是泛读,主要是想了解编译,链接及程序在内存中运行整个实现原理。本篇笔记主要记录自己在读此书过程中一些概念上有误解或不清晰的地方。编译和链接IDE一般将编译和链接的过程一步完成,通常将这种编译和链接合并到一起的过程称为构建(Build)预编译(Prepressing)处理源代码中以”#“开头的预编译指令删除”#define“ 展开所有宏定义处理条件预编译指令,比如“#if”“#ifdef”等处理“ 阅读全文
摘要:
1. 基于身份认证协议简介一般基于公钥密码体质的签名认证方案,像RSA都需要用户交换私钥或公钥,一般的认证过程如图1所示:B要验证消息m是否是A发送的,首先要获得A的公钥A先计算m的摘要,再用自己的私钥对摘要进行加密生成对m的个人签名。A将m和签名一起发送给B。B验证A的签名,先用A的公钥进行解密,得到A对m计算所得的摘要。B计算m的摘要与解密出的摘要进行比对,相同则可以确定m是A发送的。 图1 基于RSA算法签名认证过程Shamir基于身份签名方案不需要通信双方用户间交换密钥,无需保存密钥簿、无须使用第三方服务就可进行安全通信和相互验证签名。虽然该方案任然是一种类公钥密码方案,但它不是去直接 阅读全文
摘要:
1. 分组密码分组密码是将明文消息编码表示后数字序列划分成长为n的分组,各组分别在密钥的作用下进行变换输出等长的数字序列,即密文。一次加密一个数据组,加解密所使用的是同一密钥,故其通常也称为对称加密。分组长n各种不同的对称加密算法取值不同(DES和TripleDES为64位,AES默认为128位,也可以为192位和256位),在对明文消息进行分组时如果最后个分组小于n,则要进行数据填充,使分组长达到n才能进行后续的加密处理。.net平台提供的加密类都很好的处理了上述问题,所以在用C#语言进行实际编码能很简便的完成加解密操作。Rijndael算法作为AES的一种,已经取代TripleDES(三重 阅读全文
摘要:
Javascript虽然称不上一种严格意义上的面向对象语言,例如没有像PHP,C++那样提供class关键字。但在Javascript中所有的东西都是一个对象,除了一些内置的原语(如null和undefined),这样的特性使其能很方便的进行面向对象的开发,同样也使其面向对象的实现方式具有多样性。对象的创建1. 简单的对象创建使用Object,创建Object的实例,然后向其中添加内容。Object是Javascript中所有对象的基类。var newObject = new Object(); //创建实例newObject.firstName = "frank"; // 阅读全文
摘要:
Neo4j简介Neo4j是一个高性能的,NOSQL图形数据库,它将结构化数据存储在网络上而不是表中。Neo4j也可以被看作是一个高性能的图引擎,该引擎具有成熟数据库的所有特性。程序员工作在一个面向对象的、灵活的网络结构下而不是严格、静态的表中——但是他们可以享受到具备完全的事务特性、企业级的数据库的所有好处。Neo4j因其嵌入式、高性能、轻量级等优势,越来越受到关注。图形数据结构在一个图中包含两种基本的数据类型:Nodes(节点) 和 Relationships(关系)。Nodes 和 Relationships 包含key/value形式的属性。Nodes通过Relationships所定义 阅读全文