自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

智障大师 的专栏

爱机器,爱学习。

  • 博客(117)
  • 资源 (3)
  • 收藏
  • 关注

原创 简述网络爬虫的系统实现

网络爬虫常常被人所忽略,特别是和搜索引擎的光环相比,它似乎有些暗淡无光。我很少看见有详细介绍爬虫实现的文章或者文档。然而,爬虫其实是非常重要的一个系统,特别是在今天这个数据为王的时代。如果你是一个刚刚开始的公司或者项目,没有任何原始的数据积累,那么通过爬虫去Internet上找到那些有价值的数据再进行数据的清洗和整理,是一个可以快速得到数据的重要手段。本文侧重于爬虫的系统设计和实现的部分细节,

2011-12-11 13:48:11 22555 7

原创 关于实现(大)系统的一些小体会

突然发现自己很久没有更新博客了。主要的原因还是这阵子特别懒,没有努力学习新的东西,光忙着每天的日常任务。佛曰:这样不好,不好...这些体会是基于一个这样的系统:它包含有十几个大小不一的模块,这些模块分布在不同的机器上,每个请求都需要这些模块的协作才能够完成。我不是太好意思称它为大系统或者分布式系统,因为它确实还差了那么点东西。但我也相信,任何一个真正的大系统/分布式系统也是从这么一个系

2011-11-13 21:56:26 11703 7

原创 RabbitMQ的安装,配置,监控

上一篇提到了用MongoDB的郁闷,这一篇博客则是尝试了另外一个新东西 - RabbitMQ 的结果。所不同的是,RabbitMQ给我的感觉很棒。强力推荐!安装RabbitMQ是基于Erlang的,所以首先必须配置Erlang环境。从Erlang的官网 htt

2011-09-27 22:27:08 119324 5

原创 MongoDB让人失望

最近由于项目需要,使用了MongoDB存储数据。坦率的说,挺让人失望的,当然,不排除对MongoDB不太熟悉的原因。但总的说来,感觉名不副实,想让大家喜欢并接受,MongoDB还有很长的路要走。简单说一下碰到的问题:1. 非常耗内存。貌似这点很多人都抱怨过。因为Mongo

2011-09-27 21:49:49 10569 3

原创 不简单的URL去重

发现我有好几篇blog的前缀都是用的“不简单”,它大概描述了这样一个状态:一个看起来很简单的任务在实践之后,发现其实很不容易。很多事情都是这样,如果不是亲自去做,如果不是仔细钻研,那就只能处于雾里看花的状态。这让我想到另一个故事,在我毕业的那年曾经被某公司的CTO面试,他和我

2011-09-03 23:00:51 20430 12

原创 诡异的java.lang.IllegalMonitorStateException

今天的一段代码抛出了java.lang.IllegalMonitorStateException,代码如下: private boolean wait = false; public boolean pleaseWait() { synchronized (thi

2011-08-22 20:39:33 82914 17

原创 基于Heritrix的增量抓取

虽然打着Heritrix的名头,但本文更多的还是谈谈增量抓取的基本思想,Heritrix只是正好被用来做为例子。如果你不是随便写个爬虫抓着玩,那么一定会碰到一个问题,就是增量抓取。不管是百度,google这样的广泛搜索引擎,还是现在很火的垂直搜索,增量抓取一定都是做爬

2011-08-21 15:10:03 10231

原创 Heritrix架构简述

本文的目的,其实是希望通过对heritrix架构的分析,了解如何实现一个网络爬虫。Heritrix的架构如图:Web Administrative Console: 就是一个基于web的控制台。Heritrix内嵌了Jetty就是为了做这事。CrawlOr

2011-08-21 13:15:54 7626

原创 Heritrix控制抓取速度

Heritrix通过三个参数来控制爬虫抓取的速度,位于每个Job的setting处,如图:delay-factor是一个因子,表示两次抓取之间的delay应该是上一次抓取的延迟 * delay-factor:举例来说,如果将delay-factor设置为4,前一次抓取

2011-08-21 12:13:05 7030

原创 超棒的Gson库 - 实现json的序列化和反序列化

之前一直用的是官网上的库:http://www.json.org/java/index.html 个人体验,这个库的毛病挺多的,比如在将JSONObject转换成String的过程中会产生大量的临时性的String对象(因为没用StringBuffer),更郁闷的一个问题是,它可

2011-07-27 18:57:47 15702 1

原创 爬虫工具Heritrix初体验

需要找一个工具去爬取某个网站,简单调研后剩下了两个候选:Heritrix和Nutch。最后听说Heritrix可定制的地方比较多,更加灵活。恰好这是我需要的。遂决定采用Heritrix,初步尝试后发现效果不错。具体的好处在于:配置简单,有良好的web界面,不需要写一行代码。安装我

2011-07-13 23:37:03 12445 1

原创 立此存照:图像处理技术将大放异彩

做个预测,放在这里,不知道若干年之后能否应验:5-10年内,图像处理技术将会走出实验室而大放异彩,并会基于此诞生很多新的应用。理由:1. 图片资源已经非常丰富,并且人们生产高质量图片的手段越来越多,因此存在潜在的消费图片的需求;2.技术已经比较成熟了,关键在于怎样切入;当信息不断

2011-07-13 17:04:45 5895 1

原创 自制的图片搜索

最近做了一个简单的CBIR系统(content-based image retrieval)。虽然比较粗糙,结果也只是有限的好,不过对于从来没有做过图像处理的我来说还是非常有成就感的。立此存照。另外,搜索用的图片集来自于MSRA的Xie Xing老师提供的公开数据集,表示感谢!

2011-07-09 21:37:48 5815 5

原创 Java读取中文的乱码问题

最近在解析一堆文件,有gbk的,有UTF-8的,处理过程中碰到了乱码问题,相信很多做过相关工作的人都有类似经历。和中文编码相关的有几个地方:1. 原始文件的编码(Input的编码)2. 希望输出的编码(Output的编码)3. Eclipse的默认字符集编码 (项目->右键Properties->Text file encoding)文件本质上是一个字节流:    file: Byte1 Byte

2011-06-30 10:56:00 12897

原创 使用Super Smack进行MySQL性能测试

原本打算用mysql自带的mysqlslap做压力测试,可惜这工具不给力,可控制的地方不多,尤其不能够产生随机的测试语句。遂改用super smack。貌似它风评还不错。安装1.从网上下载tar.gz的安装包。http://vegan.net/tony/supersmack/ 我下载到的最新版本是1.3。2.解压后运行./configure; make; make in

2011-06-12 17:25:00 17732 5

原创 笔记:MySQL Spatial Extensions

最好的Spatial Database(空间数据库)当然是Oracle家的,可惜没用过。最好的开源的Spatial Database一般公认是PostGIS,以前用过一阵子,安装特别麻烦,不过各种功能很齐全。前段时间尝试了一下MySQL的spatial extensions,下面记录了一些使用心得:1. MySQL Spatial Extensions(后面简称MySQL Spat

2011-06-06 22:27:00 24627 4

原创 不简单的手机定位

<br />做移动互联网就不太可能不碰手机端的开发。上周为了项目需要,俺也挽袖子抡胳膊开始写起了android程序,还好有java基础,倒也上手快,写了几个小程序,主要都是关于定位方面的。<br />网上也搜得到一些相关的文章和教程,但给出的例子效果不太好,而且感觉只有其表,却不明其理。因此写出此文,分享一些我的经验。虽然是以android为主,但是我想对其它平台的开发也应该有些帮助。<br />这篇文章侧重于制定一个合理的定位方案。<br /> <br />手机定位的方式<br />先科普一些基础

2011-05-29 18:36:00 72804 22

原创 网络编程之nagle算法和TCP_NODELAY

<br />之前写过一篇blog,描述了用mina的时候写socket发现的一个诡异现象,当时将多个小数据写操作合并成一个写操作,问题就没了。Chenshuo同学还建议我设置TCP_NODELAY,只是后来因为事情忙,也就没有再深究下去。<br /><br />现在大概明白,是由于nagle算法在捣乱。<br />TCP/IP协议中,无论发送多少数据,总是要在数据前面加上协议头,同时,对方接收到数据,也需要发送ACK表示确认。为了尽可能的利用网络带宽,TCP总是希望尽可能的发送足够大的数据。(一

2011-05-15 23:19:00 23144 16

原创 网络编程之KeepAlive vs. heart-beat

这周在上班的路上看了本书《Effective TCP/IP Programming》,以下是一些读书笔记。顺带推荐一下这本书,写的很棒,适用于像我这样经常要写一些有一定质量的网络编程,但又没时间啃那些讲解TCPIP协议大部头书的人。很多人都知道TCP并不会去主动检测连接的丢失,这意味着,如果双方不产生交互,那么如果网络断了或者有一方机器崩溃,另外一方将永远不知道连接已经不可用了。检测连接是否丢失的方法大致有两种:keepalive和heart-beat。Keepalive是很多的TCP实现提供的一种机制,它

2011-05-14 16:23:00 11027 4

原创 一些flash memory/SSD的基础知识

<br />很久没更新blog了。前一阵子经历了人生第一次跳槽,比想象中的艰难多了。毕竟是第一份工作,离开还是挺伤感的。新的工作刚刚开始,希望一切顺利。这篇blog是五一期间写的,今天正式贴出来。写技术blog是个好习惯,我要保持!<br /> <br />在前东家的时候,一直很想去尝试一下flash/SSD,可惜由于各种原因到今天也没有实现。SSD在今天越来越流行,业内的很多公司都开始尝试使用,甚至作为主要的存储媒介,从Research的角度讲,SSD更是一个重磅炸弹,因为它颠覆了原有hard disk的

2011-05-12 23:09:00 15098 2

原创 Hadoop源代码的边角料:HDFS的数据通信机制

这阵子花了点时间读了读HDFS的源代码。有所得。不过网上关于Hadoop源代码的解析已经挺多了,所以自称为“边角料”,也就是一些零散的心得和想法。简单而言,HDFS分为了三个部分:NameNode,处于master的地位,维护了数据在DataNode上的分布情况,并且,还要负责一些调度任务;DataNode,存储真实数据的地方;DFSClient,一个client端,通过它提供的接口访问NameNode和DataNode;三者之间的通信全部是基于TCP/Socket; 如图所示:图中,连

2011-03-27 16:29:00 8415 7

原创 Java Memory Model引发的血案

好吧,我标题党了。之前的blog简单的提及过java Memory Model,不过这次却真的碰到了由于JMM的特性导致的错误。背景是跑系统的压力测试的时候突然抛出了一个NullPointerException。这事挺奇怪的,因为已经跑了很长时间的压力测试,可这会才莫名的报了个错,于是找到对应的代码行,如下所示:Thread Athis.data = new Data();synchronized (this) { this.isDone = true; this

2011-03-16 22:23:00 10417 47

原创 JVM调优:选择合适的GC collector (三)

CMS Collector在很多地方,CMS Collector常被翻译成“并发”,而ParallelGC被称为“并行”,但中文里,这两词的区分度并不明显。事实上,所谓的Parallel是指,在执行GC的时候将会有多个GC线程共同工作,但是,在执行GC的过程中仍然是“stop-the-world”。CMS的区别在于,在执行GC的时候,GC线程是不需要暂停application的线程,而是和它们“并发”一起工作。所以,采用CMS的原因就在于它可以提供最低的pause time。回到CMS的示意图:

2011-03-12 23:28:00 20928 3

原创 JVM调优:选择合适的GC collector (二)

ParallelGC再来看看parallelGC的结果。截取其中一段放大如下:JVM参数如下:java -jar -Xms10g -Xmx15g -XX:+UseParallelGC -XX:ParallelGCThreads=8 -XX:NewSize=6g -XX:MaxNewSize=6g -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps  -Xloggc:./log/gc.log Slaver.jarXX:ParallelG

2011-03-12 21:57:00 12318 3

原创 JVM调优:选择合适的GC collector (一)

<br />正文之前,先介绍一人:Jon Masamitsu。此人背景不详,不过他在SUN做的就是JVM,所以他的blog我认为是每一个想对JVM调优的人都应该读一读的。本文的很多观点和一些图也是取自他的blog。<br />blog link:http://blogs.sun.com/jonthecollector/ <br /><br />在他的一篇blog【1】中,写到了GC调优的最重要的三个选项:<br />排在第三位的是young generation在整个JVM heap中所占的比重

2011-03-09 00:29:00 25294 9

原创 U盘安装UbuntuServer_adm64_10.04

没啥技术含量,可是也折腾得我抓狂。用U盘安装ubuntu,如果是desktop版本,简单。可是安装Ubuntu Server amd64 10.04版就出问题了(貌似这个问题在所有Ubuntu server的安装中都会出现...)。网上找了一堆解决办法,总算试着一个有效的。步骤:1. Windows下格式化好U盘,准备好相应的iso文件(我的是ubuntu-10.04.2-server-amd64.iso)。2. 使用Unetbootin将iso文件安装到U盘上。详细步骤可见http://u

2011-03-03 10:13:00 5447 1

原创 Bigtable不是column store(列存储) !

<br />题外话,今天无意中查看以前写的blog,发现好多blog的呈现只有一堆乱码,正文不见了。可是点击编辑正文又出现了... 我这算是给CSDN报bug了。<br /> <br />最近看了好些文章,将bigtable/hbase等归入column store(列存储)。甚至,将column store做为了NOSQL的一部分。这样的观点是不对的。<br /><br />首先需要解释一下什么是column store。举个简单例子(现摘自wiki,我是懒人...):<br /><br />这是da

2011-02-28 23:59:00 8872 5

原创 几则琐记

<br />(1)<br />前两天不记得在哪看了篇blog,大概的意思是说学AI的,或者做Data Mining的人,对数学要求会比较高,如果是做System的,就不需要太多的数学知识。俺深不以为然。<br />不过我倒是能理解这种说法,翻看AI领域的paper,大多都堆砌着不少数学公式和推理,如果是System方面的文章,可能通篇都找不到一行公式。另外一点易让人误会的是,做System的往往需要在工程上下很大的功夫,所以也不太容易体现出在数学上的造诣。但是这并不意味着做System的人就不需要懂

2011-02-24 00:09:00 1651

转载 第一财经周刊:诺基亚之死

<br />最近关于NOKIA的文章老多了,这是唯一看着还比较靠谱的。<br />只转帖,不评论。<br /> <br />Link: http://news.csdn.net/a/20110218/292103.html<br /> <br />诺基亚的董事会大概也没有想到,即使预计到了困难,即使想到了战略上的调整,即使决定换帅,但时间对于诺基亚来说还是过于严酷了一点。<br />大公司更换CEO至少需要一年的时间,这包括猎头公司的物色、董事会的甄选,以及这个准CEO自己考虑是否接受这个职位的时间。对于手

2011-02-18 12:06:00 2433

原创 异步机制(Asynchronous) -- (四)缺点兼谈系统测试

接上篇。这是这个系列的最后一篇了,是我在春节期间陆陆续续写的,所以可能不是很顺畅....之前列了很多异步机制的用法和好处,这里写写它的缺点。毫无疑问,异步机制很难用是众所周知的一个问题,原因在前面的几篇中也解释过了,因为你需要将同步机制中逻辑上顺序出现的代码切割成独立的几个小块,然后要非常小心的处理各个代码块之间的关系。不过这里想解释的是另外一个问题,就是异步机制的系统很容易陷入到Overload的境地。可以简单的想象一下,比如一个异步调用,当这个调用返回时只是表示请求被接收了,并不表示请求完成

2011-02-12 17:10:00 2681

转载 神之惩戒—-MMORPG的困局

<br />关于网游行业的一个批判。写得不错。赞。<br /> <br />原文Link: http://www.youxihun.com/bbs/viewthread.php?tid=17580<br /> <br />作者简介:原研究物理,因玩游戏导致丢掉专业后进入游戏业。从业十年,期间未有所<br />建树,曾就职几个知名公司,掺和过《大富翁6》《仙剑奇侠传3》《功夫世界》《由我<br />世界》等等一堆产品。喜欢写愤青文,如《给想进入游戏业信任的八个忠告》《成为游<br />戏制作者,你

2011-01-25 13:54:00 3363

原创 异步机制(Asynchronous) -- (三)和同步机制的本质区别

<br />矛盾很久,不确定是否该用“本质”这个词,觉着自己好像还没资格这么说。其实,这篇探讨的是换个角度看待同步和异步的差异。<br /> <br />为了分析同步和异步的区别,还是以前两篇中出现过的Client发送request和接收response的程序为例。如果是同步机制的程序,大致应该是这样的(只是一些伪代码):<br />Socket sock = connectServer(address);if(sock == null) { handleConnectError();}

2011-01-23 22:01:00 8023 4

原创 异步机制(Asynchronous) -- (二)异步消息机制兼谈Hadoop RPC

<br />上篇说了半天,却回避了一个重要的问题:为什么要用异步呢,它有什么样的好处?坦率的说,我对这点的认识不是太深刻(套句俗语,只可意会,不可言传)。还是举个例子吧:<br />比如Client向Server发送一个request,Server收到后需要100ms的处理时间,为了方便起见,我们忽略掉网络的延迟,并且,我们认为Server端的处理能力是无穷大的。在这个use case下,如果采用同步机制,即Client发送request -> 等待结果 -> 继续发送,那么,一个线程一秒钟之内只能够发

2011-01-22 23:29:00 12356 8

原创 异步机制(Asynchronous) -- (一)开篇兼谈Mina

之前写了篇blog专门探讨异步/同步IO,但那只涉及了网络的IO。这段时间看了很多System方面的论文,且也在设计一个System,再加上最近刚用Mina实现了一个异步消息交互的模块。因此,将这段时间的心得记录下来,可能有些杂,希望能够有人喜欢看。所谓同步,简单的说,A告诉B去做某件事情,然后就一直等待,直到B做完后返回给A,A才继续做其它的事情;所谓异步,相反的,A告诉B做某件事情,然后就去干其它的事情了,B做完后再通知A。无论是同步还是异步,其实都是指两个对象之间的交互。所以,判断什么是同

2011-01-22 23:16:00 19504 11

原创 写socket的“灵异事件”

最近写了个java的服务器程序(基于Mina)在linux上运行,测试性能的时候发现任何一个request发送出去总是会有40ms的延迟再接受到response。一开始以为是逻辑处理和算法的问题,优化了半天,发现延迟依然如故,即便最简单的request也还需要40ms的延迟。而且,相同的一段程序,在我的windows笔记本上运行,就不存在这个40ms的延迟。之所以文章题目取名“灵异”,是因为我现在也只是找到了一个解决方案,但仍然不清楚问题出在什么地方...为了解释得更清楚,我简化了服务器的代码,直接采用Mi

2011-01-07 12:30:00 8123 4

原创 Cache专用: SoftReference

<br />没有想到有一天真的会用到SoftReference,学的时候完全不知道这东西能干吗。<br />今天它确实派上用场了,没错,我也是用它来做cache。<br /> <br />SoftReference的语义就是当内存不够用的时候,GC会回收SoftReference所引用的对象。所以,在memory sensitive的程序中将某些大型数据设置成SoftReference再合适不过了。<br /><br /><br />创建一个SoftReference:<br />Object obj =

2010-12-14 22:25:00 8293 1

原创 高效的Java字符串 -- 一些实验和一点经验

<br />近期写了比较多的和Java有关的blog,原因在于最近正在对自己之前做的一个Java系统做性能调优。在这个过程中,我积累了一些经验,也学到了不少东西。本篇亦是如此。<br /><br />在我的系统中,有一个查询,它会在内存中的一个Index上做搜索,然后将查找到的所有数据项填入一个JSONObject中,最后调用这个JSONObject的toString函数转换成字符串,通过网络发送出去。<br />实验观察到,如果大量使用这个查询,JVM会频繁地调用Garbage Collection

2010-12-08 15:01:00 5096

原创 两个郁闷的异常: java.lang.StackOverflowError和java.net.SocketException: Broken pipe

<br />debug了几乎一天,就为了一个bug,折腾死我了。<br /><br />bug的缘由是因为写代码的时候不小心,将:<br />public boolean isEmpty() { return this.queue.isEmpty();}<br />写成了:<br />public boolean isEmpty() { return this.isEmpty();}<br />很明显,一个函数开始无限制地递归地调用自己了。<br />

2010-12-07 16:55:00 14078 3

原创 不简单的JAVA内部类

菜鸟学Java,现学现卖。所谓内部类,就是一个类的定义放在了另一个类定义的内部,如:public class OuterClass { private int outerData; // ..... public class InnerClass { private int innerData; // ...... }}内部类应该算得上是Java学习过程中的一个难点了。它之所以难,我觉着有两个方面:一是它的语法相比于Java其它

2010-12-02 00:10:00 4722 6

原创 JMM的“非完整”浅析

所谓JMM,即Java Memory Model。所谓“非完整”,即这篇blog只是很浅显的一些笔记,而且所呈现的知识结构体系也是零散和不完整的。原因在于个人的懒散。当我发现要完整的搞懂JMM需要通读大概几十页的英文paper时,我退缩了。这实在是个吃力不讨好的事情,而且我现在也没有这么多时间去完整的了解JMM。所以,以下的内容只是在浏览过wiki和一些书的相关章节后组织起来的。它能够带给你的可能只有一些感性和浅显的认识。如果想完整系统的了解JMM,这里给出了最权威的文献:The Java Me

2010-11-13 23:17:00 3231 1

hadoopdb的论文(英文版)

英文版的论文,很有价值。值得一看。2009年的paper,新鲜出炉。

2011-07-05

windows server 2008 中文版 x64 的种子

没办法。为了攒积分。 windows server 2008 中文版 x64 的种子。

2009-04-01

VMware workstation 6.0 万能注册机

注册机。 VMware Workstation 5.xx For Windows LUXRM-WP0DN-A256U-4M9Q3 DJXDR-NDT27-Y2NDU-4YTZK VMware Workstation 5.xx for Linux DA925-HP80U-Z8HDC-4WXXP 3KW2W-AYR2C-88M6F-4MDQ2 VMware Workstation 6.xx for Windows YJEKW-JMFF4-YA1DC-4WTQP 序列号VMware Workstation 6.xx for Linux LR5HT-16602-T814A-4MEN2 THWW8-HRZAH-A24FA-4YTN3 VMware Workstation 6.5 Beta for Linux (32-bit)

2009-04-01

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除