<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[jackfirst86的专栏]]></title><description><![CDATA[缤纷夏日]]></description><link>https://blog.youkuaiyun.com/jackfirst86</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; jackfirst86]]></copyright><item><title><![CDATA[单例应用程序的实现]]></title><link>https://blog.youkuaiyun.com/jackfirst86/article/details/7036104</link><guid>https://blog.youkuaiyun.com/jackfirst86/article/details/7036104</guid><author>jackfirst86</author><pubDate>Fri, 02 Dec 2011 19:04:59 +0800</pubDate><description><![CDATA[一些程序需要单实例运行，这里简单介绍下单实例的实现及相关问题。
首先定义单实例指的是整个操作系统中只运行一个应用程序的实例。当用户运行应用程序时先检查系统是否已经启动该应用程序，若启动则将自动弹出应用程序窗体，否则启动应用程序。OK，这样单实例应用程序的基本功能就出来了。我们分别进行讨论。
一、如何检测系统中是否已经启动该应用程序？
1.使用线程互斥体Mutex
当两个或更多线程需要同时访]]></description><category></category></item><item><title><![CDATA[.net中比较两幅图片是否相同]]></title><link>https://blog.youkuaiyun.com/jackfirst86/article/details/6641345</link><guid>https://blog.youkuaiyun.com/jackfirst86/article/details/6641345</guid><author>jackfirst86</author><pubDate>Thu, 28 Jul 2011 16:03:18 +0800</pubDate><description><![CDATA[.net中的GDI+能非常方便的进行图象处理，但是并未直接提供进行图片比较的类或者方法，本文的目的是探讨如何进行图片比较。    首先要说明的是，进行比较的两幅图片必须具有相同的格式，并且最好是未经压缩的图片格式。否则，不能进行完全的相同性对比，只能做近似判断，比如各种颜色分量相]]></description><category></category></item><item><title><![CDATA[随机抽样一致性算法（RANSAC）]]></title><link>https://blog.youkuaiyun.com/jackfirst86/article/details/6641307</link><guid>https://blog.youkuaiyun.com/jackfirst86/article/details/6641307</guid><author>jackfirst86</author><pubDate>Thu, 28 Jul 2011 15:59:27 +0800</pubDate><description><![CDATA[作者：王先荣    本文翻译自维基百科，英文原文地址是：http://en.wikipedia.org/wiki/ransac，如果您英语不错，建议您直接查看原文。    RANSAC是“RANdom SAmple Consensus（随机抽样一致）”的缩写。它可以从一组包含“局]]></description><category></category></item><item><title><![CDATA[确保真正的线程安全——微软为什么不提供线程安全库]]></title><link>https://blog.youkuaiyun.com/jackfirst86/article/details/6640611</link><guid>https://blog.youkuaiyun.com/jackfirst86/article/details/6640611</guid><author>jackfirst86</author><pubDate>Thu, 28 Jul 2011 12:28:37 +0800</pubDate><description><![CDATA[线程安全在高并发情况下是一个非常严重的问题。以下代码在多线程访问时，会出现问题。我们以List.Add为例，来说明在多线程访问下的状况。以下代码是List.Add的实现。
public void Add(T item)
{
    if (this._size == this._items.Length) this.EnsureCapacity(this._size + 1);
    t]]></description><category></category></item><item><title><![CDATA[如何写健壮的代码]]></title><link>https://blog.youkuaiyun.com/jackfirst86/article/details/6640592</link><guid>https://blog.youkuaiyun.com/jackfirst86/article/details/6640592</guid><author>jackfirst86</author><pubDate>Thu, 28 Jul 2011 12:18:01 +0800</pubDate><description><![CDATA[不管是在面向过程时代，还是在面向对象时代，任何一个功能都是由若干函数协作来实现的。一个函数由输入、处理和输出组成。实现这个函数的代码段都假定了输入的参数已经满足了若干规则，在执行这个函数时，函数的代码会拿到输入的参数然后执行代理逻辑。下面我们就来看一个函数的代码。  1 priv]]></description><category></category></item><item><title><![CDATA[c#不可忍受之慢—谁是罪魁祸首]]></title><link>https://blog.youkuaiyun.com/jackfirst86/article/details/6640555</link><guid>https://blog.youkuaiyun.com/jackfirst86/article/details/6640555</guid><author>jackfirst86</author><pubDate>Thu, 28 Jul 2011 11:59:31 +0800</pubDate><description><![CDATA[前些日子，爆出N篇说c#/.net太慢的，要求删除c#/.net部分特性的文章。    撇开那些文章不说，c#/.net慢似乎是业界公认的铁则，不论大家如何证明c#/.net其实不比c++慢多少，但是应用程序级别的性能却依然这么慢。    那么c#/.net慢在哪里？    很不]]></description><category></category></item><item><title><![CDATA[C#常用开源项目]]></title><link>https://blog.youkuaiyun.com/jackfirst86/article/details/6640079</link><guid>https://blog.youkuaiyun.com/jackfirst86/article/details/6640079</guid><author>jackfirst86</author><pubDate>Thu, 28 Jul 2011 10:22:44 +0800</pubDate><description><![CDATA[net PDF 类库  PDFsharp       PDFsharp是一款可以让.NET框架支持的任何语言很容易的创建PDF文件的类库。ASP.NET FO PDF       FO PDF 是一款C#编写类似于ASP.NET服务器控件的控件。它接受DataTable 和一些其]]></description><category></category></item><item><title><![CDATA[你必须懂的.NET中Attribute]]></title><link>https://blog.youkuaiyun.com/jackfirst86/article/details/6640012</link><guid>https://blog.youkuaiyun.com/jackfirst86/article/details/6640012</guid><author>jackfirst86</author><pubDate>Thu, 28 Jul 2011 10:12:05 +0800</pubDate><description><![CDATA[作为一个.NET开发人员，懂Attribute的重要性，用.NET大师Jeffrey Richter的话就是“任何.NET Framework 开发人员都有必要对定制attribute有一个牢靠的掌握”，所以掌握Attitude，这是必须的！ 　　什么是Attribute（特性）]]></description><category></category></item><item><title><![CDATA[欧几里德算法及其扩展算法]]></title><link>https://blog.youkuaiyun.com/jackfirst86/article/details/6635016</link><guid>https://blog.youkuaiyun.com/jackfirst86/article/details/6635016</guid><author>jackfirst86</author><pubDate>Tue, 26 Jul 2011 15:38:58 +0800</pubDate><description><![CDATA[一、欧几里德算法1、欧几里德算法概述：　　欧几里德算法又称辗转相除法，用于计算两个整数a,b的最大公约数。其计算原理依赖于下面的定理： 　　gcd函数就是用来求(a,b)的最大公约数的。 　　gcd函数的基本性质： 　　gcd(a,b)=gcd(b,a)=gcd(-a,b)=gc]]></description><category></category></item><item><title><![CDATA[几种经典的Hash算法实现]]></title><link>https://blog.youkuaiyun.com/jackfirst86/article/details/6634788</link><guid>https://blog.youkuaiyun.com/jackfirst86/article/details/6634788</guid><author>jackfirst86</author><pubDate>Tue, 26 Jul 2011 14:37:21 +0800</pubDate><description><![CDATA[哈希算法将任意长度的二进制值映射为固定长度的较小二进制值，这个小的二进制值称为哈希值。哈希值是一段数据唯一且极其紧凑的数值表示形式。如果散列一段明文而且哪怕只更改该段落的一个字母，随后的哈希都将产生不同的值。要找到散列为同一个值的两个不同的输入，在计算上是不可能的，所以数据的哈希]]></description><category></category></item><item><title><![CDATA[AutoResetEvent和ManualResetEvent 线程同步]]></title><link>https://blog.youkuaiyun.com/jackfirst86/article/details/6577555</link><guid>https://blog.youkuaiyun.com/jackfirst86/article/details/6577555</guid><author>jackfirst86</author><pubDate>Thu, 30 Jun 2011 16:35:00 +0800</pubDate><description><![CDATA[在.Net多线程编程中,AutoResetEvent和ManualResetEvent这两个类经常用到, 他们的用法很类似，但也有区别。ManualResetEvent和AutoResetEvent都可以通知一个或多个正在等待的线程已发生事件,在线程间进行同步时使用，它们都继承自EventWaitHandle。Set方法将信号置为发送状态，Reset方法将信号置为不发送状态,WaitOne等待信号]]></description><category></category></item><item><title><![CDATA[C/C++中的函数调用约定]]></title><link>https://blog.youkuaiyun.com/jackfirst86/article/details/6568626</link><guid>https://blog.youkuaiyun.com/jackfirst86/article/details/6568626</guid><author>jackfirst86</author><pubDate>Sun, 26 Jun 2011 15:22:00 +0800</pubDate><description><![CDATA[    在C语言中，假设我们有这样的一个函数：     int function(int a,int b)     调用时只要用result = function(1,2)这样的方式就可以使用这个函数。但是，当高级语言被编译成计算机可以识别的机器码时，有一个问题就凸现出来：在CPU中，计算机没有办法知道一个函数调用需要多少个、什么样的参数，也没有硬件可以保存这些参数。也就是说，计算机不知道怎么给这]]></description><category></category></item><item><title><![CDATA[Conditional Random Fields(CRF)]]></title><link>https://blog.youkuaiyun.com/jackfirst86/article/details/6440147</link><guid>https://blog.youkuaiyun.com/jackfirst86/article/details/6440147</guid><author>jackfirst86</author><pubDate>Mon, 23 May 2011 16:39:00 +0800</pubDate><description><![CDATA[<br /><br />原文：http://www.inference.phy.cam.ac.uk/hmw26/crf/<br />写的不错，有空翻译过来。<br /><br />This page contains material on, or relating to, conditional randomfields. I 
shall continue to update this page as research onconditional random fields 
advances, s]]></description><category></category></item><item><title><![CDATA[Mongodb源码分析--Command体系架构]]></title><link>https://blog.youkuaiyun.com/jackfirst86/article/details/6431212</link><guid>https://blog.youkuaiyun.com/jackfirst86/article/details/6431212</guid><author>jackfirst86</author><pubDate>Thu, 19 May 2011 09:29:00 +0800</pubDate><description><![CDATA[<br />Command在Mongodb中是一类特殊操作，它提供了强大的管理及各项操作（比如建库，索引，删除集合等）。可以说通过Command可以完成几乎 所有想做的事情。同时Mongodb开发者在Command上又做了非常清晰体系架构和设计，便于管理和高效执行各种类型的Command。<br />     今天就专门用一篇篇幅来着重介绍一下其Command的体系架构，并用例子来介绍mongod是如何将Command引入其中的。<br />    <br />    为了对其中大部分command对一个大]]></description><category></category></item><item><title><![CDATA[Mongodb源码分析--内存文件映射(MMAP)]]></title><link>https://blog.youkuaiyun.com/jackfirst86/article/details/6431206</link><guid>https://blog.youkuaiyun.com/jackfirst86/article/details/6431206</guid><author>jackfirst86</author><pubDate>Thu, 19 May 2011 09:27:00 +0800</pubDate><description><![CDATA[<br />在Mongodb中，其使用了操作系统底层提供的内存映射机制，即MMAP。MMAP可以把磁盘文件的一部分或全部内容直接映射到内存，这样文件中的信息 位置就会在内存中有对应的地址空间，这时对文件的读写可以直接用指针来做，而不需要read/write函数了。同时操作系统会将数据刷新保存到磁盘上。 如下图：<br />       <br />     鉴于linux,window系统为mmap所提供的API大同小异(见下图)。这里仅以mongodb对window系统的mmap调用机制为例，来说 明一下]]></description><category></category></item><item><title><![CDATA[Mongodb源码分析--游标Cursor]]></title><link>https://blog.youkuaiyun.com/jackfirst86/article/details/6431151</link><guid>https://blog.youkuaiyun.com/jackfirst86/article/details/6431151</guid><author>jackfirst86</author><pubDate>Thu, 19 May 2011 09:00:00 +0800</pubDate><description><![CDATA[<br /><br /> 在Mongodb中，其提供了类似关系型数据中cursor对象来遍历数据集合，同时mongodb并要根据不同的场景生成不同的游标对象 （cursor）,比如顺序遍历游标（basicCursor）,反向游标（reverseCursor), B树索引游标（btreeCursor）等。    下面是其游标体系架构类图(位于cursor.cpp, cursor.h, clientcursor.cpp, clientcursor.h）：<br />    <br />    从该图中，可以看到]]></description><category></category></item><item><title><![CDATA[Mongodb源码分析--更新记录]]></title><link>https://blog.youkuaiyun.com/jackfirst86/article/details/6431114</link><guid>https://blog.youkuaiyun.com/jackfirst86/article/details/6431114</guid><author>jackfirst86</author><pubDate>Thu, 19 May 2011 08:28:00 +0800</pubDate><description><![CDATA[<br /> 在之前的一篇文章 中，介绍了assembleResponse函数(位于instance.cpp第224行)，它会根据op操作枚举类型来调用相应的crud操作，枚举类型定义如下：<br />  
view plaincopy to clipboardprint?enum  Operations {      opReply  =   1 ,      /*  reply. responseTo is set.  */      dbMsg  =   1000 ,     /*  generic]]></description><category></category></item><item><title><![CDATA[Mongodb源码分析--更新记录]]></title><link>https://blog.youkuaiyun.com/jackfirst86/article/details/6431113</link><guid>https://blog.youkuaiyun.com/jackfirst86/article/details/6431113</guid><author>jackfirst86</author><pubDate>Thu, 19 May 2011 08:27:00 +0800</pubDate><description><![CDATA[<br /> 在之前的一篇文章 中，介绍了assembleResponse函数(位于instance.cpp第224行)，它会根据op操作枚举类型来调用相应的crud操作，枚举类型定义如下：<br />  
view plaincopy to clipboardprint?enum  Operations {      opReply  =   1 ,      /*  reply. responseTo is set.  */      dbMsg  =   1000 ,     /*  generic]]></description><category></category></item><item><title><![CDATA[Mongodb源码分析--删除记录]]></title><link>https://blog.youkuaiyun.com/jackfirst86/article/details/6431111</link><guid>https://blog.youkuaiyun.com/jackfirst86/article/details/6431111</guid><author>jackfirst86</author><pubDate>Thu, 19 May 2011 08:26:00 +0800</pubDate><description><![CDATA[<br /><br />在之前的一篇文章 中，介绍了assembleResponse函数(位于instance.cpp第224行)，它会根据op操作枚举类型来调用相应的crud操作，枚举类型定义如下： 
view plaincopy to clipboardprint?enum Operations {          opReply = 1,     /* reply. responseTo is set. */          dbMsg = 1000,    /* generic msg com]]></description><category></category></item><item><title><![CDATA[Mongodb源码分析--消息(message)]]></title><link>https://blog.youkuaiyun.com/jackfirst86/article/details/6431109</link><guid>https://blog.youkuaiyun.com/jackfirst86/article/details/6431109</guid><author>jackfirst86</author><pubDate>Thu, 19 May 2011 08:25:00 +0800</pubDate><description><![CDATA[<br />在Mongodb中，客户端和服务端进行通信是基于mongodb wire protocol 。说白了，该协议是一个简单的基于socket，请求/响应方式的协议，客户端使用常规的TCP/IP套接字（socket）进行通信。<br /><br />      客户端与服务端使用约定的消息(格式)进行通信，其消息头结构与C语言中的struct类似。具体的代码（位于message.cpp）：<br />    <br />  
view plaincopy to clipboardprint?stru]]></description><category></category></item></channel></rss>