自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(111)
  • 问答 (1)
  • 收藏
  • 关注

Learn Haskell(四)

强大的类型系统是Haskell的一个非常大的优势。 Haskell所有表达式类型在编译期判断。这样的话,可以使得代码更加安全,比如说,拿一个整数和一个字符串进行除法运算是没办法进行的,那么在编译器就会直接报错,不会等到运行时程序崩溃才知道。Haskell与Java不一样,Haskell能够进行类型推断(Type Inference),也就是说,你不需要明确的说100是个数...

2012-08-12 22:11:38 123

Learn Haskell(三)

1.TupleTuple用来将几个元素打包成为一个值。Tuple用()包起来。看起来和List很像,但是Tuple和List有很重要的区别:(1)List元素数量是不固定的,但是Tuple的元素数量是固定的;(2)List必须存储同种类型的元素,但是Tuple可以存储不同类型元素。看几个Tuple的例子:Prelude> (1,2)(1,2)...

2012-08-10 08:54:38 158

Learn Haskell(二)

1.Ranges有时候我们有这样一种需求:我们需要一个List,它的元素从1到20。从1到20敲出每一个元素肯定是一种可以搞定的办法,但肯定不是好办法。这时候,我们可以使用Haskell的Ranges来处理这种需求。Ranges用来构建元素可以按照某种顺序枚举的List。像数字1,2,3,4就是可枚举的;字母a,b,c,d也是。我们看看两个Ranges的例子:上面说到的1-20,使用Ran...

2012-08-08 00:27:00 173

Learn Haskell(一)

这一系列博客是《Learn You a Haskell for Great Good》的读书笔记。一句话介绍:Haskell是一门纯粹的函数式编程语言。至于什么是函数式编程?尽管网上也有很多关于函数式语言与指令式语言之间的区别与联系,但是没有实际使用过函数式编程语言的情况下,我也搞不清楚。因此,先从学习一门函数式编程语言开始吧。1.安装Haskell要开始使用Hask...

2012-08-07 17:45:54 122

网络爬虫基本原理(二)

四、更新策略    互联网是实时变化的,具有很强的动态性。网页更新策略主要是决定何时更新之前已经下载过的页面。常见的更新策略又以下三种:    1.历史参考策略    顾名思义,根据页面以往的历史更新数据,预测该页面未来何时会发生变化。一般来说,是通过泊松过程进行建模进行预测。    2.用户体验策略    尽管搜索引擎针对于某个查询条件能够返回数量巨大的结果,但是用户往往...

2012-07-24 20:50:25 196

原创 网络爬虫基本原理(一)

    网络爬虫是捜索引擎抓取系统的重要组成部分。爬虫的主要目的是将互联网上的网页下载到本地形成一个或联网内容的镜像备份。这篇博客主要对爬虫以及抓取系统进行一个简单的概述。一、网络爬虫的基本结构及工作流程    一个通用的网络爬虫的框架如图所示:    网络爬虫的基本工作流程如下:    1.首先选取一部分精心挑选的种子URL;    2.将这些URL放入待抓取UR...

2012-07-20 13:18:52 274

原创 Java异常的栈轨迹(Stack Trace)

    捕获到异常时,往往需要进行一些处理。比较简单直接的方式就是打印异常栈轨迹Stack Trace。说起栈轨迹,可能很多人和我一样,第一反应就是printStackTrace()方法。其实除了这个方法,还有一些别的内容也是和栈轨迹有关的。     1.printStackTrace()    首先需要明确,这个方法并不是来自于Exception类。Exception类本身除了定义了...

2012-06-06 10:47:19 1017

Vim基本编辑和移动命令

1.上下左右移动光标:    h:左    l:右    k:上    j:下2.删除一行:dd3.删除一个字符:x4.删除一个换行符:J5.在光标下方新建一行,并且进入插入模式:o(小写字母o)6.在光标上方新建一行,并且进入插入模式:O(大写字母O)7.光标移动到下一单词的词首:w8.光标移动到前一单词的词首:b9.光标移动到下一单词的词尾:e10.光标...

2012-05-22 15:51:22 151

Virtual Box同时配置host-only和bridge

     好长时间没使用虚拟机了。之前一段时间一直是Windows7和Ubuntu10.10。但是这段时间做毕业设计,来回切换系统确实也不方便。加上前两天把笔记本内存升级为8G。总之一大堆各种原因吧。怎么样配置网络都忘了,翻了一下自己以前的日志又在网上差了些资料,整理一下记下来备忘。    1.host-only配置    安装软件的过程很简单,一直下一步就好。安装好了之后,系统网络管理部...

2012-05-14 13:48:55 140

《Pro Git》翻译——第一章、第二章

前言:翻译自《Pro Git》。正在学习Git,于是打算翻译这篇文档。一方面锻炼自己英文文档阅读能力,翻译成中文也可以方面别人。正所谓赠人玫瑰,手有余香。鉴于本人水平有限,当然是不可能达到信、达、雅的水准。不过在翻译过程中,我会尽量保证遵循原文,有些不好直译的部分我会根据理解意译,对于有些实在不知道用中文怎么去表述但是不影响所讲述内容的英文,我可能会直接忽略掉。此外,对于没有把握的专有名词,我...

2012-04-15 17:08:45 104

svn安装配置

1.安装Subversion,不断下一步即可。2.创建一个根目录,用来存储所有svn工厂信息。每个工厂Repository对应一个项目。我这里在e:\svndata。3.启动svn,使用如下的命令svnserve -d -r e:\svndata。其中-d选项指的是后台模式,但是非常遗憾的是,Windows并不支持后台模式。-r选项指的是服务的根目录。4.既然在Window...

2012-04-15 16:59:58 81

原创 PL/SQL Step By Step(三)

1.什么是存储过程        这篇博客主要介绍存储过程(Stored Procedure),简称过程。存储过程是Oracle PL/SQL中的一种程序单元。存储过程可以通过给一个PL/SQL语句块命名从而将这个语句块存储在数据库中,以便将来可以被反复的调用。    存储过程与一般的匿名PL/SQL块的一个主要区别是有无确定的名称。此外,对于匿名块来说,每次提到到数据库进行执行时...

2012-04-10 20:36:59 108

PL/SQL Step By Step(二)

    游标是PL/SQL非常重要的一部分,也是很多人为什么使用PL/SQL的原因。游标能够让开发者对数据库查询进行记录级别的控制。也就是说,可以对查询返回的数据一次一行进行步进,并且在两行之间停顿一段时间来进行一些特别的处理操作。    游标分为两种:隐式游标和显式游标。下面我们先介绍隐式游标,一会在介绍更加强大的显示游标。    1.隐式游标    隐式游标是不需要定义的,说...

2012-03-03 20:42:28 72

原创 【转】Ubuntu10.10 安装MySQL5.1:redeclaration of C++ built-in type ‘bool’

 安装mysql时 make 时  提示 redeclaration of C++ built-in type ‘bool’ 错误。是没有安装 gcc-c++ 导致的,解决如下。sudo apt-get install build-essential    如果还出现是因为gcc-c++是在configure之后安装的,此时只需重新configure mysql后再编译mak...

2012-03-02 14:00:10 192

PL/SQL Step By Step(一)

1.概述    PL/SQL(Procedural Language/Structured Query Language)是Oracle对标准数据库语言SQL的过程化扩充,它将数据库技术和过程化程序设计语言联系起来,是一种应用开发语言,可使用循环,分支处理数据,将SQL的数据操纵功能与过程化语言数据处理功能结合起来。 PL/SQL的使用,使SQL成为一种高级程序设计语言,支持高级语言的块操作,...

2012-03-01 22:44:15 94

《现代操作系统》读书笔记之——进程调度(二)

7.交互系统的调度算法时间片轮转调度算法(Round-Robin Scheduling)    时间片轮换调度算法是最古老、最简单、最公平并且使用最广泛的调度算法之一。每个进程被分配一段时间间隔,叫做时间片(quantum)。进程在这个时间间隔内允许运行,如果时间片用完了,那么CPU将会被抢占并且分给别的进程。如果在时间片结束之前,进程阻塞或者是结束了,那么CPU也会被分配给别...

2012-02-22 15:51:02 265

《现代操作系统》读书笔记之——进程调度(一)

    如果计算机支持多道程序设计,那么它会经常碰到多个进程或者线程在同一时刻竞争CPU。只要当两个进程同时进入就绪状态,这种情况就会发生。但是CPU只有一个,那么这时候就需要做一个选择:到底接下来该选择哪个进程运行。操作系统做这个选择的部分就叫做调度器(scheduler),而使用到的算法叫做调度算法(scheduling algorithm)。    很多对进程调度使用的东西对于线程调度同...

2012-02-17 20:48:52 175

JavaScript变量与作用域

1.JavaScript的变量类型   JavaScript的变量分为基本类型和引用类型.基本数据类型是直接存在栈空间的简单数据段,这种类型直接将值保存在内存的某个位置.引用数据类型存储的是指向实际存储于堆内存中的对象的地址.   JavaScript中的基本数据类型共有五种:Number,Null,Undefined,Boolean和String.需要注意的是,js中的String是基本...

2012-01-19 01:13:35 115

《现代操作系统》读书笔记之——进程间通信(索引)

    三篇博客之间又发了一些别的博客。因此做一个索引帖,也方便回过头来看。英文版这部分20几页,但是断断续续边看边记搞了三天。看一遍明白大意和这种近似于翻译的记录确实工作量差很多,但是对于理解与记忆的帮助也差很多。希望自己能坚持,加油!1.《现代操作系统》读书笔记之——进程间通信12.《现代操作系统》读书笔记之——进程间通信23.《现代操作系统》读书笔记之...

2012-01-17 18:25:31 101

《现代操作系统》读书笔记之——进程间通信3

    12.互斥量(mutex)    当信号量(Semaphore)的计数功能不再需要,信号量简化之后就成为一种新的变量互斥量(mutex)。互斥量在处理共享资源和代码之间的互斥访问方面非常有用。互斥量实现起来简单高效,这一点对于用户空间的线程库非常有用。    互斥是那种只有两种状态,但每次只能处在其中一种状态的变量。这两种状态分别是锁定和非锁定状态。因此,只需要一个比特就能表...

2012-01-17 00:44:49 90

Xshell无法通过ssh连接到FreeBSD

通过VMWare安装了一个FreeBSD虚拟机,想着说用XShell远程连接上去,但是总是出现下列错误:error: PAM: authentication error for root查了一下资料,默认情况下,FreeBSD上的sshd是不允许root通过ssh远程登录到服务器上。只需要在/etc/ssh/sshd_config文件中添加下列配置:PermitRootLogin ...

2012-01-15 22:38:06 143

《现代操作系统》读书笔记之——进程间通信2

    7.实现进程互斥的几种方案之——TSL指令    前面介绍了几种方案,都是通过软件的方式实现互斥,下面的这种方式需要借助硬件设计的帮助来实现互斥。这一点在多CPU电脑的设计中尤其普遍。这种方案需要引进一条指令:TSL RX,LOCK    这条指令的含义是,读取内存单元LOCK中的内容到寄存器RX中,并且为内存单元LOCK重新设置一个非0值。TSL指令的操作被设计...

2012-01-14 21:01:05 71

《现代操作系统》读书笔记之——进程间通信1

    很多时候,进程需要和其他的进程进行通信。比如shell中的管道命令:ps -ef | grep nginx,一个命令的输出,作为另一个进程的输入,这就是进程间通信(Interprocess Communication)。    进程间通信主要需要解决三个问题:    1.一个进程如何给另一个进程传递信息    2.如何确保进程之间不互相干扰、妨碍    3.当进程间出现依赖...

2012-01-14 12:27:34 162

Ubuntu11.10安装node.js:Could not autodetect OpenSSL support

Ubuntu11.10安装node.js,报错提示Could not autodetect OpenSSL support,但是检查了一下,发现,系统是已经安装了openssl这个包的。最后发现其实问题出在缺少libssl-dev包,于是: sudo apt-get install libssl-dev并且,查资料的过程中,发现很多类似的与ssl缺少包有关的问题似乎都和这个包...

2012-01-13 10:17:42 105

MongoDB入门6——查询(二)

 3.查询中null的处理         null的匹配非常有意思:null不仅仅会匹配到指定键的值确实等于null的文档,并且还会匹配到查询所制定键不存在的文档。例如,插入下面这三个文档:> db.users.insert({"name":"Tom","age":20,"job":"Sales"});> db.users.insert({"name&quo

2012-01-07 09:41:34 59

MongoDB入门5——查询(一)

1.find()查询        在之前的学习中没我们其实已经很多次的接触过find()查询。基本上来说,find查询是比较简单明了的。find()的第一个参数决定了需要查询的文档的特征,如果该参数为空,则查询结果会匹配一个集合中所有的文档。例如:db.coll.find({});db.coll.find();        如果要查询姓名为张三的人:db.c...

2012-01-07 09:40:18 95

等值首尾和问题

问题:假设有一个数组x[],有n个元素,并且每一个都大于零;称x[0]+x[1]+x[2]+...+x[i]为前置和,而x[j]+x[j+1]+...+x[n-1]为后置和。试编写一个程序,求出x[]中有多少组前置和后置和。思路:设置两个索引变脸indexHead和indexTail,一个从前往后扫描,一个从后往前扫描。并且使用两个变量记录当前的前置和和后置和,并通过比较他们的值来决定移动...

2011-12-24 00:03:15 130

C语言删除字符串中的指定字符,字符串连接

1.删除字符串中的指定字符/*将字符串s中出现的字符c删除*/void squeeze(char s[],int c){ int i,j; for (i = 0, j = 0; s[i] != '\0'; i++) { if (s[i] != c) { s[j++] = s[i]; } } s[j] = '\0'; //这一条语句千万...

2011-12-19 23:09:23 1081

Java并发包中的几种ExecutorService

  1.CachedThreadPool    CachedThreadPool首先会按照需要创建足够多的线程来执行任务(Task)。随着程序执行的过程,有的线程执行完了任务,可以被重新循环使用时,才不再创建新的线程来执行任务。我们采用《Thinking In Java》中的例子来分析。    首先,任务定义如下(实现了Runnable接口,并且复写了run方法): packa...

2011-12-18 13:28:50 64

C语言将字符串转换成对应的数字(十进制、十六进制)

        问题1:讲一个十进制数字的字符串表示转换成对应的整数。举例:将“1234”转换成整数1234./*将字符串s转换成相应的整数*/int atoi(char s[]){ int i; int n = 0; for (i = 0; s[i] >= '0' && s[i] <= '9'; ++i) { n = 10 * n...

2011-12-17 23:14:36 1374

重学数据结构008——AVL树

之前学习了二叉查找树的及相关操作。二叉查找树的大部分主要操作的复杂度都是O(logN)量级的。现在考虑这样一种情况:通过集合{3,2,4,1,0,-1,-2,-3,-4,-4}中的元素来构建二叉查找树,得到的树如图所示:    如果现在我们需要查找元素-4,那么时间复杂度还是是O(logN)吗?有个更加极端的例子,假设数据集是{6,5,3,1,0,-1,-2,-3,-4,-4}呢?再...

2011-12-16 19:58:47 51

两数组最小距离问题

        已知两个元素从小到大排列的数组x[]和y[],请写出一个程序算出两个数组元素彼此之间差的绝对值中最小的一个,这个叫做数组的距离。         这个问题不难,可以通过一个循环嵌套循环解决。但是既然说了两个数组元素都是从小到大排列,那么肯定有别的简单的办法。        如果x[i]>y[j],对于x[i]-y[j],所有排在y[j]之前的元素计算这个式子的值都...

2011-12-11 23:26:15 353

MongoDB入门4——更新文档和修改器2

 c)数组修改器    数组修改器,顾名思义,当然是操作数组的啦。一般来说多数组的操作有若干不同种类的,因此,MongoDB也准备了不同的数组修改器。我们会一一学习。$push修改器    $push修改器能够向指定的数组的末端插入一个新的元素。假设这个数组本身都不存在,那么先创建这个数组。现在假设我现在发表一篇博客,刚一发表,就有人发表评论了。这时候就需要往评论列表中...

2011-12-11 21:05:06 56

MongoDB入门3——更新文档和修改器1

    我们前面讲MongoDB的CRUD操作讲过:MongoDB的更新操作通过集合的update()函数实现。这个函数有两个参数:要更改的文档和更改后的样子。要更新文档有两种情况:更新文档和对文档某些部分更新。下面分别说说这两种情况:    1.更新整个文档    假设现在有下面的一个文档: {"name":"zhangsan","dad":"zhangyi","mom":"li.

2011-12-10 23:40:16 59

MongoDB入门2——MongoDB数据类型

     MongoDB的文档其实和JSON很类似,与JavaScript的对象概念也很像。但是MongoDB的数据类型更加丰富。下面我们一一介绍MongoDB的数据类型。数据类型描述举例null表示空值或者未定义的对象{“x”:null}布尔值真或者假:true或者false{“x”:true}32位整数32位整数。shell是不...

2011-12-10 17:55:33 70

MongoDB入门1——简介、安装及基本使用

        要说MongoDB就不能不先说NoSQL。关于NoSQL,推荐互联网上的两篇文章:        1.http://www.iteye.com/topic/524977 By 范凯。这篇文章详细介绍了NoSQL产生的背景,以及主流的NoSQL产品及其特点分析。        2.http://sebug.net/paper/databases/nosql/Nosql.h...

2011-12-02 01:36:02 101

C/C++中的位运算

    C/C++提供了六个位运算操作符,可以对整数进行位运算,下面分别来介绍这六种位运算符。    (1)按位与&    将两个操作数的每一个二进制位进行逻辑与运算。    例如:3&5    3:00000011    5:00000101  3&5:00000001    按位与操作有以下两个特别的用处:将某个操作数的若干位置0;取操作...

2011-11-30 23:39:36 141

类图及类图中的关系(二)

   (4)Composition:组合关系   组合关系同样也是关联关系中的一种,这种关系是比聚合关系更加强的关系。我们前面提到,聚合关系表现的是整体与部分之间的关系,组合关系是在聚合关系的基础上,表示不可分割的整体与部分之间的关系。也就是说表示整体的对象需要负责表示部分的对象的生命周期。   “代表整体的对象负责保持代表部分的对象的存活,在一些情况下负责将代表部分的对象湮灭掉。代表整体...

2011-11-29 22:01:44 100

类图及类图中的关系(一)

 1.类图和对象图      类图(Class Diagram)是显示出类、接口以及他们之间的静态结构与关系的图。其中最基本的单元是类或接口。    类图不但可以表示类(或者接口)之间的关系,也可以表示对象之间的关系。下面是一个典型的类图:    类图一般分为几个部分:类名、属性、方法。下面分别讲解。    (1)类名    上面的Car就是类名,如果类名是正体字,则说...

2011-11-27 12:13:24 341

原创 等值数目问题

问题描述:已知两个整型数组f[]和g[],它们的元素都已经从小到大排列,并且每个数组中的元素各是各不相同的。例如,f[]中可能是1,3,4,7,9而g[]中可能是3,5,7,8,10。请写一个程序算出这两个数组中有多少组元素是相等的。例如f[2]=g[1]=3,f[4]=g[3]=8,因此上面的例子有两组。思路:一般情况下,很容易想到下面的方法:1.固定f[i],检查g[]中的每个元素,看...

2011-11-27 00:44:59 170

空空如也

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

TA关注的人

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