飞污熊博客

静下心来做一件事

字符串也是一种数据类型,但是,字符串比较特殊的是还有一个编码问题。

Unicode把所有语言都统一到一套编码里,这样就不会再有乱码问题了。Unicode标准也在不断发展, 但最常用的是用两个字节表示一个字符(如果要用到非常偏僻的字符,就需要4个字节)。现代操作系统和大多数编程语言都直接支持Unicode。

现在,捋一捋ASCII编码和Unicode编码的区别:ASCII编码是1个字节,而Unicode编码通常是2个字节。

但是,如果你写的文本基本上全部是英文的话,用Unicode编码比ASCII编码需要多一倍的存储空间,在存储和传输上就十分不划算。

阅读全文 »

函数式编程就是一种抽象程度很高的编程范式,纯粹的函数式编程语言编写的函数没有变量(或者说不能给变量重新赋值), 因此,任意一个函数,只要输入是确定的,输出就是确定的,这种纯函数我们称之为没有副作用。而允许使用变量的程序设计语言, 由于函数内部的变量状态不确定,同样的输入,可能得到不同的输出,因此,这种函数是有副作用的。

函数式编程(请注意多了一个”式”字)——Functional Programming,虽然也可以归结到面向过程的程序设计,但其思想更接近数学计算。 它的一个特点就是,允许把函数本身作为参数传入另一个函数,还允许返回一个函数!

Python对函数式编程提供部分支持。由于Python允许使用变量,因此,Python不是纯函数式编程语言。

阅读全文 »

纯归并排序的复杂度为O(nlgn),而纯插入排序的时间复杂度为O(n^2)。数据量很大的时候采用归并排序。

但是在n较小的时候插入排序可能运行的会更快点。因此在归并排序中当子问题变得足够小时, 采用插入排序来使得递归的叶子变粗可以加快排序速度。那么这个足够小到底怎么去衡量呢? 请看下面:

这么几个我不证明了,比较简单:

  • 插入排序最坏情况下可以在O(nk)时间内排序每个长度为k的n/k个子列表
  • 在最坏情况下可在O(nlg(n/k))的时间内合并这些子表
  • 修订后的算法的最坏情况运行时间复杂度是O(nk + nlg(n/k))

那么,O(nk+nlg(n/k))=O(nlgn).只能最大是k=O(lgn).等式左边中第一项是高阶项。 k如果大于lgn,则比归并排序复杂度大了。 左边可以写成nk+nlgn-nlgk,k等于lgn时,就是2nlgn-nlglgn.忽略恒定系数,则与归并排序是一样的。 最后结论: k < lg(n)的时候,使用插入排序。

阅读全文 »

我们不仅要知其然,而且要知其所以然,所以先给大家准备一些理论知识课,这样对以后的应用将会事半功倍。

1、什么是LVS?

请阅读作者章文嵩博士自己的研究报告,共计4部分,看完后对集群和LVS就有了初步的了解,不懂时可以翻翻。

阅读全文 »

Buffer由数据和可以高效访问以及操纵这些数据的四个索引组成,这四个索引是:mark、position、limit、capacity。 下表是用于设置和复位索引以及查询它们的方法:

方法 说明
capacity() 返回缓存区容量
clear() 清空缓存区,position=0,limit=capacity,此方法可覆写缓存区
flip() limit=position,position=0,用于准备从缓存区读取已经写入的数据
limit() 返回limit的值
limit(int lim) 设置limit的值
mark() 将mark设置为position
position() 返回position的值
position(int pos) 设置position的值
remaining() 返回(limit - position)
hasRemaining() 若有介于position和limit之间的元素,返回true
reset() 将position设置为mark
rewind() 将position设置为0,也就是缓存区的开始位置

在缓存区中插入和提取数据的方法会更新这些索引,用于反映所发生的变化。

阅读全文 »

最近学习内部类的时候,对Java实现回调函数机制有了进一步了解,自己整理点比较,希望大家可以相互讨论。 所谓回调,就是允许客户类通过内部类引用来调用其外部类的方法,这是一种非常灵活的功能。

由于java暂时还不能显示支持闭包(Closure),不过听说新版可以支持了,不过我还没用过。现在暂时用的是非静态内部类实现回调功能。

阅读全文 »

海盗,大家听说过吧。这是一帮亡命之徒,在海上抢人钱财,夺人性命,干的是刀头上舔血的营生。在我们的印象中,他们一般都瞎一只眼, 用条黑布或者讲究点的 用个黑皮眼罩把坏眼遮上。他们还有在地下埋宝的好习惯,而且总要画上一张藏宝图,以方便后人掘取。 不过大家是否知道,他们是世界上最民主的团体。参加海盗 的都是桀骜不驯的汉子,是不愿听人命令的,船上平时一切事都由投票解决。 船长的唯一特权,是有自己的一套餐具——可是在他不用时,其他海盗是可以借来用 的。船上的唯一惩罚,就是被丢到海里去喂鱼。

现在船上有若干个海盗,要分抢来的若干枚金币。自然,这样的问题他们是由投票来解决的。 投票的规则如下:先由最凶猛的海盗来提出分配方案,然后大家一 人一票表决,如果有50%或以上的海盗同意这个方案, 那么就以此方案分配,如果少于50%的海盗同意,那么这个提出方案的海盗就将被丢到海里去喂鱼, 然后由剩下的海盗中最凶猛的那个海盗提出方案,依此类推。

阅读全文 »

操作系统:CentOS 6.5 64位

在linux环境安装Hadoop之前,我们需要使用到ssh,所以要先安装ssh,并且创建一个hadoop用户

备注: 下面所有的命令中,以#开头的表示是root用户,以$开头的是普通用户

安装SSH,先切换到root用户,执行下列步骤

1
2
3
4
5
rpm -qa |grep ssh  #检查是否装了SSH包
yum install openssh-server #安装ssh
chkconfig --list sshd #检查SSHD是否设置为开机启动
chkconfig --level 2345 sshd on #如果没设置启动就设置下.
service sshd restart #重新启动
阅读全文 »

YAML是一个可读性高,用来表达资料序列的格式。YAML参考了其他多种语言,包括:XML、C语言、Python、Perl以及电子邮件格式RFC2822。 目前已经有数种编程语言或脚本语言支援(或者说解析)这种语言。

最新版本为1.2,官方说明地址: http://www.yaml.org/spec/1.2/spec.html

使用方式:作为配置文件,数据交换格式,序列化对象存储,测试数据文件,

阅读全文 »