架构深渊

慢慢走进程序的深渊……关注领域驱动设计、测试驱动开发、设计模式、企业应用架构模式……积累技术细节,以设计架构为宗。
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

2009年1月2日

摘要: Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->* - - - - - - - - - - - - - - - - - - - - - - - - * Stream 和 byte[] 之间的转换 * - - - - - - - - - - - - ... 阅读全文

posted @ 2009-01-02 15:09 chen eric 阅读(302) 评论(0) 推荐(0)

摘要: 本文适合初学编程的程序员阅读,它对比了几种编程语言在解决同一问题的时候的运效率。并通过具体的例子进行了量化分析。主要目的是帮助初学者认识各种编程语言的特质,并且能够理性的选择适合的编程语言来进行工作。 事发 我无聊的翻着散落案头的书籍,这些都是五花八门的关于编程和系统管理的著作。干了这么多年程序员,大大小小的软件和项目也做了无数。每每有新入行的朋友问我这个所谓的"老前辈":哪种语言最... 阅读全文

posted @ 2009-01-02 13:16 chen eric 阅读(3277) 评论(4) 推荐(2)

摘要: 乱弹ASM/C/C++/Java/C#效率 效率主要有执行效率和开发效率两个方面。 这几种语言的... 阅读全文

posted @ 2009-01-02 13:09 chen eric 阅读(2291) 评论(2) 推荐(0)

摘要: Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> 2007-05-05 12:34 在c#多线程里面要用到ManualResetEvent ,从msdn上找到这个示例,可以对此有一个感性认识。 示例阐释了如何使用等待句柄来发... 阅读全文

posted @ 2009-01-02 12:47 chen eric 阅读(318) 评论(0) 推荐(0)

摘要: 这是一篇简单介绍了使用c#来进行文件的合并和分割,我在我的项目中,需要使用到这个模块的功能,所以自己实践之后,发于此,以作备份: 首先,我们先来做文件分割的部分,我们新建了个winform项目,项目设计如下: 这里有如下控件: 一个OpenFileDialog组件,用于选择要分割的大文件。 一个ProgressBar组件,用以显示文件分割的进度。 一个ComboBox组件,用以选... 阅读全文

posted @ 2009-01-02 12:07 chen eric 阅读(478) 评论(0) 推荐(0)

摘要: Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->摘要: 本文给出了一种方便实用的解决大文件的读取、存储等处理的方法,并结合相关程序代码对具体的实现过程进行了介绍。 引言 文件操作是应用程序最为基本的功能之一,Win32 API和MFC均提供... 阅读全文

posted @ 2009-01-02 12:05 chen eric 阅读(364) 评论(0) 推荐(0)

摘要: 问题为:yield return关键字怎么使用? 答案: 在迭代器块中用于向枚举数对象提供值或发出迭代结束信号。它的形式为下列之一: 复制代码 yield return ; yield break; 备注 计算表达式并以枚举数对象值的形式返回;expression 必须可以隐式转换为迭代器的 yield 类型。 yield 语句只能出现在 iterator 块中,该块可用作方法、运... 阅读全文

posted @ 2009-01-02 11:08 chen eric 阅读(368) 评论(0) 推荐(0)

摘要: Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->委托推理 C#编译器从匿名方法指派推理哪个委托类型将要实例化的能力是一个非常重要的功能。实际上,它还提供了另一个叫做委托推理的C# 2.0功能。委托推理允许直接给委托变量指派方法名,而不需要先使用... 阅读全文

posted @ 2009-01-02 01:59 chen eric 阅读(231) 评论(0) 推荐(0)

摘要: Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->匿名方法的实现 编译器为匿名方法生成的代码很大程度上依赖于匿名方法使用的参数或变量的类型。例如,匿名方法使用其包含方法的局部变量(也叫做外层变量)还是使用类成员变量和方法参数。无论是哪一种情况,编... 阅读全文

posted @ 2009-01-02 01:57 chen eric 阅读(204) 评论(0) 推荐(0)

摘要: Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->局部类型 C# 1.1中要求将类的全部代码放在一个文件中。而在C# 2.0允许将类或结构的定义和实现分开放在多个文件中。通过使用新的partial关键字来标注分割,可以将类的一部分放在一个文件中,而将... 阅读全文

posted @ 2009-01-02 01:56 chen eric 阅读(264) 评论(0) 推荐(0)

摘要: Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->迭代器实现 编译器通过生成的嵌套类来维护迭代状态。当在foreach循环中(或在直接的迭代代码中)首次调用迭代器时,编译器为GetEnumerator函数产生的编译生成(Compiler-Genera... 阅读全文

posted @ 2009-01-02 01:54 chen eric 阅读(243) 评论(0) 推荐(0)

摘要: Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->第二个问题迭代器的实现也是难以解决的问题。虽然对于简单的应用实例中(如图3所示),实现是相当简单的,但是对于高级的数据结构,实现将非常复杂,例如二叉树,它需要递归遍历,并需在递归时维持迭代状态。另外,... 阅读全文

posted @ 2009-01-02 01:53 chen eric 阅读(251) 评论(0) 推荐(0)

摘要: Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> 热衷于C#语言的人会喜欢上Visual C# 2005。Visual Studio 2005为Visual C# 2005带来了大量令人兴奋的新功能,例如泛型、迭代器、局部类和匿名方法等。虽然泛型是人... 阅读全文

posted @ 2009-01-02 01:52 chen eric 阅读(248) 评论(0) 推荐(0)

摘要: IEnumerable和IEnumerator有什么区别?这是一个很让人困惑的问题(在很多forum里都看到有人在问这个问题)。研究了半天,得到以下几点认识: 1、一个Collection要支持foreach方式的遍历,必须实现IEnumerable接口(亦即,必须以某种方式返回IEnumerator object)。 2、IEnumerator object具体实现了iterat... 阅读全文

posted @ 2009-01-02 00:57 chen eric 阅读(374) 评论(0) 推荐(0)

摘要: 第五章 5.4 PageRank算法改进 Improvement for PageRank Algorithm PR算法的复杂度规模是log(n),n是网页的数量。网页权值在算法执行过程中是一个振荡收敛的过程,这其中有两个主要矛盾:1.节点的数量巨大,内存成为瓶颈之一。2.巨大的2维矩阵每次计算消耗时间巨大,时间效率上也是瓶颈;其中大部分网页的权值比较低,而且都是浮点数计算。 改进思路一:迭... 阅读全文

posted @ 2009-01-02 00:28 chen eric 阅读(542) 评论(0) 推荐(0)

摘要: 第五章 5.3 影响排名的其他因素 Other Factors 域名中以gov,edu,org结尾的网站应该具有较高的网页权值。Gov是政府网站后缀,edu是教育机构,org指非盈利的组织。 搜索引擎的基本设计思路是若干个结果去覆盖相应用户需求,其中可能有大量不相关的内容存在,如果使得比较优质的结果保留下来,并且能使得后面使用的用户能方便地搜索到?点击率成了重要的判断数据。因此,上一节中提到... 阅读全文

posted @ 2009-01-02 00:28 chen eric 阅读(246) 评论(0) 推荐(0)

摘要: 第五章 5.2 得分规则 An Simple Scoring Rule 出现关键词频度初始得分表 同一位置频度 1 2-3 4-7 8 ... 阅读全文

posted @ 2009-01-02 00:27 chen eric 阅读(459) 评论(0) 推荐(0)

摘要: 第五章 5.1 网页等级算法全面阐释 Analysis of PageRank Algorithm 互联网发展早期的搜索引擎,对web页面的排序,是根据搜索的词组(短语)在页面中的出现次数,并用页面长度和html标签的重要性提示等进行权重修订。链接流行度技术通过其它文档链接到当前页面链入数量来决定当前页的重要性,这样可以有效地抵制被人为加工的页面欺骗搜索引擎的手法。PageRank计算页面的... 阅读全文

posted @ 2009-01-02 00:26 chen eric 阅读(436) 评论(0) 推荐(1)

摘要: 第五章 排序规则 Ranking Rules 用户输入查询关键词的时候需要对结果集作排序,如何排序这些网页使得最佳的结果呈现在前二十条结果中呢?主要因素有网页等级,关键词位置、关键词出现频率,用户点击日志等。 阅读全文

posted @ 2009-01-02 00:26 chen eric 阅读(265) 评论(0) 推荐(0)

摘要: 第四章 4.3 分词原理 Chinese Word Parsing Algorithm 对索引网页信息的预处理包括网页分析和倒排文件索引两个部分,中文自动分次是网页分析的前提。文档由被称作特征项的索引词组成,网页分析是将一个文档表示 为特征项的过程。在提取特征项时,中文又面临了与英文处理不同的问题。中文信息和英文信息有一个明显的差别:英语单词之间用空格分隔;而在中文文本中,词 与词之间没有天... 阅读全文

posted @ 2009-01-02 00:25 chen eric 阅读(627) 评论(0) 推荐(0)

摘要: 第四章 4.2 倒排索引基本原理 Principle of Inverted Index Trie是效率最高的索引形式,下图表示由文本到的前缀树的创建过程。 插入操作的时间复杂度O(l),其中l = max(length of word); 查询的操作的时间复杂度O(l); 删除操作的复杂度为O(n),其中n = length of dictionary Trie有消耗了大量内存且难以分... 阅读全文

posted @ 2009-01-02 00:24 chen eric 阅读(883) 评论(0) 推荐(0)

摘要: 第四章 4.1 准备工作 Prepare for Indexing 网页的内容经过爬虫爬取之后,按照不同的类型进行分析,成为相对“清洁”的文本之后就可以开始建立全文索引了。分析的过程包括大小写转换,过滤标点符号、没有意义的虚词和网页的格式代码。可以把分析看成是一个过滤的过程。 阅读全文

posted @ 2009-01-02 00:23 chen eric 阅读(193) 评论(0) 推荐(0)

摘要: 第四章 索引 Full Text Indexing 在学习搜索引擎技术之前最好有一定的知识储备,Modern Information Retrieval 是本经典IR的教材,本文默认读者已经具有相应的基础。 数据需要分不同的类型进行相应处理,一般的网页内容文本大致可以分为四部分: Keyword: 不做分析,逐字/词建索引并存储.例如URL,文件系统路径,日期,人名,社会保险帐号,电话号码等。... 阅读全文

posted @ 2009-01-02 00:22 chen eric 阅读(487) 评论(0) 推荐(0)

摘要: 第三章 3.4 缓存 Search Engine Caching 缓存优化的核心思想是从避免无谓和重复的CPU计算、I/O调度来提高查询器的吞吐量。传统的缓存有两级:一是对结果集的缓存,纪录了查询的关键词和返回结果。如果相同的关键词被再次访问将得到快速地响应,同时过滤导致重复查询的计算量,提高系统的吞吐量。另外一个是对倒排索引的缓存,索引通常只保留最近、频繁被访问的索引段在内存中。这样的两级体... 阅读全文

posted @ 2009-01-02 00:22 chen eric 阅读(398) 评论(0) 推荐(0)

摘要: 第三章 3.3 排队系统的优化 Application of Queueing Theory 排队系统的优化在集群计算中有着举足轻重的地位。此类优化问题分为两类:系统的最优设计和最优控制,前者称为静态最优问题,目的在于是系统达到最大效益,或者说在一定指标下是系统最为经济;后者为动态最优问题,是指对一给定的系统,如何运营可使给定的目标函数达到最优。 只对静态优化分析,对动态优化超出了目前以有的固... 阅读全文

posted @ 2009-01-02 00:21 chen eric 阅读(622) 评论(0) 推荐(0)

摘要: 第三章 3.2 文件共享入门简介 Introduction of File Sharing System 1) Remote sync (rsync) 是一种简单的文件共享实现方式。集群中的每个节点都至少有一份数据复本,复本间使用rsync进行同步。因为节点需要的数据就在本地,所以这种方法具有很高的可用性,不会出现单点失效现象。适合的场景:数据量很小,而且更新不频繁,可以采用这种方式。索引文件... 阅读全文

posted @ 2009-01-02 00:21 chen eric 阅读(248) 评论(0) 推荐(0)

摘要: 第三章 3.1 I/O调度方式 Choose I/O Schedule Completely Fair Queuing 机制和其字面的意思一致,完全公平的调度形式。每个进程产生的I/O请求都会被分配一个序号,进程之间的I/O请求队列独立,每次执行相同序号的请求。算法的实现,cfq会先考虑进程的优先级(0-20),从高的优先进程选择执行序号比较优先的I/O请求。Analysis and Simu... 阅读全文

posted @ 2009-01-02 00:20 chen eric 阅读(520) 评论(0) 推荐(0)

摘要: 第三章 并行分布式文件系统 Parallel Distributed File System 搜索的引擎的存储规模至少都是TB级别,如何有效地管理和组织这些资源呢?并且在极短的时间内得出结果?MapReduce: Simplified Data Processing on Large Clusters 给出了很好的分析。 分布式文件系统的实施必须实现两种临界资源的接口,一个是文件名到命名空间... 阅读全文

posted @ 2009-01-02 00:20 chen eric 阅读(347) 评论(0) 推荐(0)

摘要: 第二章 2.1 书籍推荐 Spidering Hacks 标题其实一本经典的爬虫学习书,历史地、全面地介绍了spider。 阅读全文

posted @ 2009-01-02 00:19 chen eric 阅读(401) 评论(0) 推荐(0)

摘要: 第二章 2.2 宏观看爬虫 Key Points of Spider Web上的信息具有异质性和动态性,由于受时间和存储、带宽的限制,不可能把所有的网页都搜集起来,一个好的搜集策略是有限搜集重要的网页。对于网页的重要程度的评定,要依据搜集信息所针对的不同应用而定,从而信息的搜集可以采取不同的策略。而目前这个问题尚无定论,一般按照如下几种指标来共同确定网页的重要性: 1)网页的入度大,也就是被引... 阅读全文

posted @ 2009-01-02 00:19 chen eric 阅读(270) 评论(0) 推荐(0)

摘要: 第一章 1.2 声明 Declaration 本文的主旨是提供学习的基本导向,并对一些重要的技术细节进行剖析,舍去很多拖沓的描述,力图给读者深度和广度全面的理解web搜索的基本机制。 /**********本文并不申明为权威工程应用指南************/ 阅读全文

posted @ 2009-01-02 00:18 chen eric 阅读(239) 评论(0) 推荐(0)

摘要: 第二章 爬虫 Spider 简单地说,爬虫负责按照url列表爬取网页的内容,实际中需要针对不同的协议设计爬虫程序并优化。写一个优秀的爬虫不是件容易的事情,仅列举部分设计必须考虑到的问题。 1.严格按照robots.txt 来爬取内容,优先按照sitemap来抓取。 2.控制抓取的深度,量力而行。这个和人吃饭一次吃多少的道理是一样的。 3.网络上动态网页数量巨大,而爬虫一般是多线程的,如果爬虫对... 阅读全文

posted @ 2009-01-02 00:18 chen eric 阅读(568) 评论(0) 推荐(0)

摘要: 第一章 1.1 兴趣的开始 Game Is Now Beginning Web上数十亿张网页,认真地在网络上乱逛发现最大的需求是:哪里有好东西?我们能用它们来做什么?每个人对他们自己认为的有效信息有不同的看法,且大多数人当他们一旦找到好东西的时候,总是有一些创造性的电子。在某些web的角落,鼓励用有趣的方式来重新组织和运用这些资讯,而这些不平凡的资讯组合不容怀疑地向前流动,他们相信信息时代的到... 阅读全文

posted @ 2009-01-02 00:17 chen eric 阅读(338) 评论(0) 推荐(0)

摘要: 第一章 概述 Summarization of Search Engine Architecture 搜索引擎的架构是编写一个搜索引擎所需要考虑的第一个问题,The Anatomy of a Large-Scale Hypertextual Web Search Engine 一文对此问题做了全面的阐述。最大的功能模块可以分为:爬虫、存储、索引和web服务。爬虫负责不间断地爬取目标网站的内容... 阅读全文

posted @ 2009-01-02 00:16 chen eric 阅读(374) 评论(0) 推荐(0)

摘要: 一直想找到一个好的同义词解决方案,在百度和google查找,大家对于这个问题都只是寥寥数语,不愿讲清,我在javaeye搜此类信息也求不到,后来发了个提问贴也只有浏览数而无回复,不知道这是什么原因,无奈之下我只有自己研究。 因为没有其它的解决方案可以借鉴,以下纯为我个人的见解。 我认为所谓近义词、关联词检索不外乎以下三种形式: 1.类似google suggest,用户... 阅读全文

posted @ 2009-01-02 00:07 chen eric 阅读(1648) 评论(1) 推荐(0)

摘要: Lucene是一个高性能的java全文检索工具包,它使用的是倒排文件索引结构。该结构及相应的生成算法如下: 0)设有两篇文章1和2 文章1的内容为:Tom lives in Guangzhou,I live in Guangzhou too. 文章2的内容为:He once lived in Shanghai. 1)由于lucene是基于关键词索引和查询的,首先我们要取... 阅读全文

posted @ 2009-01-02 00:06 chen eric 阅读(231) 评论(0) 推荐(0)