自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

pwlazy的专栏

与时俱进,开拓创新

  • 博客(218)
  • 资源 (6)
  • 收藏
  • 关注

原创 浅谈MMSEG分词算法

最近看了下MMSEG分词算法,觉得这个算法简单高效,而且还非常准确 作者声称这个规则达到了99.69%的准确率并且93.21%的歧义能被这个规则消除。核心思想是抽取3个可能的词(存在多个组合),然后根据4个消歧义规则确定到底选择那个组合 1. 组合长度最大 2. 组合中平均词语长度最大 3. 词语长度的变化率最小 4. 计算组合中所有单字词词频的自然对数,然后将得到的值相加,取总

2013-12-25 20:38:03 13778

原创 hive查询hbase

背景hbase查询的确是不太方便,除了指定rowkey,或者通过指定startkey stopkey进行scan之外,没有更有效的查询方式 如果想通过列值过滤,只能全表扫描了 如果要搞什么group by或者order by(除非你的rowkey做了相应设计) 更是没法弄 在传统的mysql/oracle得心应手的查询在hbase上就是束手束脚当然可以通过写hadoop j

2013-12-24 14:49:54 12516 3

原创 谈谈html转义字符

偶尔会在数据中看到诸如' 这样的字符,特征如下以&#开头,中间是一串数字,以;结尾以&开头,中间一串字符,以;结尾比如最常见的 或者等价的 浏览器遇到这些转义符,会转移回来,但如果通过代码识别? org.apache.commons.lang.StringEscapeUtils.unescapeHtml提供了很好的说明遇到上面的第一种情况

2013-12-12 01:07:13 10565

原创 zookeeper session tracker机制分析

说到zookeeper session管理 ,免不了要问什么是session?session id/session是如何产生的?session 信息如何存储?本文以session tracker线程【详见SessionTrackerImpl】的运行机制作为主线,并尝试解答一些相关问题1)session基础在介绍session tracker线程之前先回答几个问题1.1) 什么是session?zo

2012-11-07 14:00:40 10539 2

原创 zookeeper存储之实现分析

zookeeper 存储基本都是在SyncRequestProcessor 单个线程完成的1) 初始化1.1)DataTree初始化public DataTree() { /* Rather than fight it, let root have an alias */ nodes.put("", root); nodes.put(rootZ

2012-11-01 15:44:47 15317 3

原创 zookeeper 存储之文件格式分析

zookeeper主要存放了两类文件,一个是snapshot和log,前者是内存数的快照,后者类似mysql的binlog,将所有与修改数据相关的操作记录在log中,两类文件的目录可在配置文件中指定下面通过几个典型的场景来分析两种文件的存储格式snapshot文件格式​详见ZooKeeperServer.takeSnapshot,列举1个简单的场景说明问题场景 刚刚装了zookeepe

2012-10-17 11:41:06 17106

原创 zookeeper client分析

1)几个重要概念 ZooKeeper:客户端入口Watcher:客户端注册的callbackZooKeeper.SendThread: IO线程ZooKeeper.EventThread: 事件处理线程,处理各类消息callbackClientCnxnSocketNIO:继承自ClientCnxnSocket,专门处理IO2)zookeeper初始化应用提供watch实例实例化zookeeper实

2012-09-20 15:56:57 12493 2

原创 class文件分析

本文通过分析一个简单java类文件的字节码,希望借此能快速了解java类文件格式为了分析字节码,必须有一个整体的格式如下:以上面的表作为分析的基础,开始行动!一段简单的java代码123456789package org.kaka.clazz;

2012-09-07 11:08:29 8788 1

原创 记一次jvm crash

昨天下午4:30,系统发生了有史以来最刺激的崩溃,一开始是2台挂了(线上共5台),这个基本上很少见,一般情况下都是偶尔一台挂掉。赶紧手动重启,搞笑的是重启起来的机器里马也挂了,结果就出现了一种尴尬的局面,我们不停的重启,机器不断地报警,不断地挂,整个过程持续了20多分钟。其实上个礼拜系统就挂过两次,第1次挂了无任何信息没有出现常见的hs*.log这样的jvm crash日志,cpu、内存、流量等指

2012-07-10 18:37:08 9244 2

原创 HRegionServer 启动分析

HRegionServer的初始化到底做了哪些事情,以线程的维度应该能比较清晰的说明,也便于以后更进一步深入的分析。如果能弄清楚每个线程的职责分工,基本上HRegionServer的原理就明白了HRegionServer的初始化1.1)实例化一个典型的栈快照Thread [main] (Suspended)  WritableRpcEngine$Server(HBaseServer).(Strin

2012-05-21 23:35:06 9869

原创 btrace是个好东东

今天同事遇到一个问题,测试环境和线上环境数据不一致,由于我们的线上预发布环境只开发了80端口,所以无法debug,之前我们的做法就是在代码添加log,然后覆盖预发环境的相关jar,这个使用起来比较麻烦早就听说btrace很方便,今天特意尝试了一下,我们的需求就是捕捉线上某个方法的输入参数的值及返回值step0) 安装btracewget http://kenai.com/projects/btra

2012-04-16 16:58:19 8959 2

原创 HTablePool的实现分析

1)基本概念HTablePool​3种类型​PoolType.Reusable(默认)一个实例池,多线程复用,内部是每个table一个ConcurrentLinkedQueue装多个实例PoolType.ThreadLocal,很奇怪的实现,每个线程只能有一个实例,感觉在多线程的场景没有意义PoolType.RoundRobin​(没有被使用,就算设置了该类型也没用,见HTablePool的构造函

2012-04-13 00:36:57 10476 2

原创 谈谈java selector的机制

1)常用数据结构EPollSelectorImpl维护了3个键setkeys【已经注册的键的集合】selectedKeys【已选择的键的集合】cancelledKeys【已取消的键的集合】EPollArrayWrapper【真正的对linux epoll的封装】包含了3个重要的native方法epollCreate、epollCtl、epollWait分别对应库函数epoll_create、epo

2012-04-12 13:40:38 18229 1

原创 varnish缓存清除的问题和陷阱

今天遇到一个问题,一个静态页面xx.com/path_x1/a.html部署在xx.com静态集群【browse----->静态集群varnish------>静态集群apache】另外一个应用又通过apache代理访问xx.com,配置如下 RewriteRule ^/$ http://xx.com/path_x1/a.html [L,P]访问的url是 yy.com 【browse----->

2012-04-01 13:18:13 10479 1

原创 谈谈HTable的实现

背景HTable作为HBase的CRUD的客户端底层是怎么实现的,虽然HBase-The-Definitive-Guide 这本书的作者推荐在生产环境使用HTablePool但了解HTable还是很有必要的下面以一个简单的例子来说明 protected static String TEST_TABLE_NAME = "testtable"; protected static String ROW

2012-03-31 20:54:04 11986 1

原创 jetty 透明代理的实现

背景一提到proxy,大家首先想到就是squid、varnish、apache、lighttpd之类,接下来我们看看jetty8中的ProxyServlet是如何实现这个功能的ProxyServlet主要用到了continuation和http client两个技术点,如果了解了我的前几篇博文jetty io:http://blog.csdn.net/pwlazy/article/details/

2012-03-25 17:22:43 13159

原创 jetty http client 实现分析

背景谈到http client,可能大多数想到就是apache的那个http client 或者jdk自带的urlconnection,也许有人会考虑使用netty无论如何,jetty的高性能实现总归是让人感到好奇,接下来我们一探究竟样例我们结合样例代码具体分析初始化httpClient = new HttpClient();httpClient.setConnectorType(HttpCli

2012-03-24 02:02:23 15189 2

原创 理解java中的mmap

jdk中的MappedByteBuffer非常类似linux中的mmap将文件映射到虚拟内存,这样可以利用操作系统自带的虚拟内存实现来提高io效率, 很多文档中提到这一点,具体大家可以自行测试。MappedByteBuffer有3种映射模式:MapMode.READ_ONLY:只读映射MapMode.READ_WRITE​:读写映射MapMode.PRIVATE​:copy on write映射,

2012-03-19 18:35:23 10074

原创 谈谈jetty response模型

1)jetty 响应的概念模型​SelectChannelEndPoint: 底层的socket的封装,代表每次请求对应的网络连接(偏网路底层)AsyncHttpConnection:代表每次连接(偏上层一点),管理相关的request,response,HttpParser,HttpGenerator实例HttpParser:请求解析HttpGenerator:负责最终的response生成Re

2012-03-16 16:11:26 9522

原创 jetty continuation基本原理及实现

背景在io密集型的web 应用,如何能更好地提升后台性能,jetty continuation是一个选择现在特别流行的说法就是事件驱动,看看node.js以及redis, jetty continuation也不例外一个例子package org.kaka.web;import java.io.IOException;import java.io.PrintWriter;import j

2012-02-27 20:32:19 19024 1

原创 jetty线程池的实现

线程池的基本概念_threadsStarted:启动的线程数_threadsIdle:空闲的线程数_lastShrink:记录上次线程结束时间,用于销毁空闲线程_threads:使用ConcurrentLinkedQueue来存放线程_joinLock:等待线程池结束的锁【不常用】_jobs:默认使用BlockingArrayQueue来存放任务队列,当_maxQueued>0的时候会使用Arra

2011-12-30 22:47:33 8957

原创 谈谈jetty8 的io模型

几个重要的概念Connector: jetty网络接口的封装,用于监听网络连接SelectorManager:底层selector封装,管理网络事件,主要是向底层selector注册感兴趣的网络事件,并从selector中轮询出准备好的事件EndPoint:socket的封装,用于底层网络的读写,一旦网络读写准备好,会调用相应的connection的handle方法Connection:请求的抽象

2011-12-29 18:59:16 4507 1

原创 redis中的hash实现

典型的数据结构hashtable的一个封装typedef struct dict {    dictType *type; //函数集合    void *privdata;     dictht ht[2];  //真正的hashtable,有两个的原因是在扩容以及rehash的时候使用    int rehashidx; //是否处于rehash状态,-1是不属于    int iterato

2011-12-14 16:30:07 3796

原创 深入浅出redis事件框架

1) 事件驱动的常用数据结构//eventLooptypedef struct aeEventLoop {    int maxfd;    long long timeEventNextId;    aeFileEvent events[AE_SETSIZE]; //注册的文件事件,注册事件数组默认10240长度,以fd为索引    aeFiredEvent fired[AE_SETSIZE];

2011-12-07 14:25:12 5690 2

原创 关于jvm 中vmthread的问题

最近一个同事性能测试,20个并发,压了3分钟,tps急剧下降,jvm开始不响应通过排查发现,此时old区已满,并且cpu 100%完全被vmthread占用如果此时停止施压,那么过几分钟,jvm会回复。也就是说垃圾回收停滞了。通过MAT查看heap dump发现,有20多万的hibernate session 产生了超过1G的hashmap无法回收也就是在并发的情况,如果短时间产生大量的对象,会导

2011-08-17 20:45:35 8844

原创 dom4j的乱码问题

1)背景长期运行的爬虫程序(抓取xml)突然出了问题。xml的乱码导致无法验证通过2)乱码是怎么产生的发现不同的网站返回的xml编码不一致,有的是gb2312,有的utf-8。爬虫程序将urlConnection.getInputStream() 的字节流传递给了SAXReader来构造Document可惜SAXReader还不够强悍,由于只是获取了字节流,但不知道编码方式,于是SAXReader采用了系统默认的编码方式对对待字节流,问题就出在这里。3) 未指定编码,SAXReader如何处理字节流org.

2011-01-20 21:22:00 3834

原创 谈谈服务器的编码问题

参考tomcat-5.5.201)核心的流程涉及到的几个类1.1)org.apache.catalina.connector.Request(这个就是我们在servlet中看到的HttpServletRequest的tomcat实现,有一个非常常见的属性ParameterMap parameterMap)1.2)org.apache.coyote.Request(原始的tomcat请求数据结构)1.3)org.apache.tomcat.util.http.Parameters(我们通过ht

2010-11-25 00:47:00 3805 2

原创 谈谈opennlp maxent

背景:最大熵模型可用于文本分类 简介maxme是个非常不错的最大熵java实现主要的功能还是分为两部分特征提取和GIS迭代算法1)特征提取采取了简单将分词作为特征,目前只支持单个字段,但如过要实现多字段特征也是很简单的事情。2)GIS迭代算法没什么好说的,大量的数学推导,从数学上保证了解的唯一性和迭代收敛 流程1)整个训练流程就是读取每行文本---》分词成特征----》迭代计算----》最后生成每个特征对于输出分类的权重2)整个分类过程就是读取样本(一行)---》分词成特征-----》根据每

2010-09-08 20:48:00 4025 3

原创 说说ReentrantReadWriteLock

<br />1) 背景<br />    jni的使用场景,多线程读,单线程写,写的时候会更新java对象,当老的java对象无须再使用的时候必须释放jni所占用本地方法区的内存,这个区域的内存不在java heap范畴,因此也无法被垃圾回收掉,需要显式的释放。<br /><br />但问题在于什么释放?<br /><br />有人会说使用finalize,但finalize过于依赖jvm的回收的时机,这使得什么时候能真正释放显得不太好预测。<br /><br />或者使用synchroni

2010-06-01 18:45:00 9368 4

原创 长短信实现系列之电信SMGP3.0

按照以前的老套路见(长短信系列之联通sgip1.2和长短信系列之移动cmpp2.0) 1)第一阶段首先上来就是下面的条件设置MsgFormat为8就(UCS2)在MsgContent前加入7个字节的TP_udhi头(和此前开发的移动、联通一样)在整个消息末尾即(Reserve)之后加入可选参数 TP_udhi 即 0x00 0x02 0x00

2010-03-11 21:27:00 8904 6

原创 长短信实现系列之联通SGIP1.2

由于有了上次开发移动长短信的经验(见长短信实现系列之CMPP2.0),这次轻车熟路和移动的长短信思路完全一致设置TP_udhi为1在MsgContetnt前加入TP_udhi 7个字节的协议头MessageCoding设为8 即UCS2编码其余没了,花了半天时间开发调试,上线后一次成功可能联通的长短信在其他条件下也能成功,但我懒得去试了还是那句话最好

2010-03-10 20:06:00 9468 6

原创 长短信实现系列之移动CMPP2.0

1)背景目前我们的短信发送基本上就是超过140字节(甚至更少)就切分(移动普通短信超过140个字节甚至都发送不了,联通倒是可以),然后分几条发给客户,而且也不能保证顺序,用户体验不好,运营这边抱怨说精简再精简还是超过了字数,于是长短信的支持就成为必须的事情了。2)原理2.1)长短信的协议和普通短信的协议稍有不同2.1.1) TP_udhi

2010-03-05 15:44:00 32779 9

原创 tokyo tyrant 安装日志

tokyo tyrant是一个可持久化的缓存服务器,类似memcachedb,tokyo tyrant本身是个缓存服务器,但需要tokyo cabinet作为存储引擎,就像memcachedb中的memcache需要berkeley db一样1)安装存储引擎tokyo cabinetwget http://1978th.net/tokyocabinet/tokyocabinet-1

2010-02-20 20:51:00 7510 1

原创 java instrument 初探

java在1.5引入java.lang.instrument,你可以由此实现一个java agent,通过此agent来修改类的字节码即改变一个类。本文中,会通过java instrument 实现一个简单的profiler。当然instrument并不限于profiler,instrument可以做很多事情,它类似一种更低级,更松耦合的AOP,可以从底层来改变一个类的行为,你可以由此产生无限

2009-12-31 00:23:00 9977 1

原创 深入浅出 classloader

java中所有的类都是通过classloader加载的,classloader可以为java程序提供很好的动态特性,深入了解非常有必要。 1)classloader的分类 从上图看到classloader默认有3类,BootstrapLoaderExtClassLoaderAppClassLoader同时你也可以定制自己的classloa

2009-12-25 01:03:00 5204 14

原创 HashSet/HashMap在并发下的奇怪行为

最近服务器 一直不太正常,经常cpu占到200%,load到2,随时都有可能报警  通过 top -H -p xx看到 PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND 27987 admin     25   0 1559m 542m  13m R 100.2 27.0  15995:57 jav

2009-12-14 19:47:00 2842 1

原创 jprofiler监控远程服务器的安装配置

1) 客户端安装客户端 xp,jprofiler 5.1.4可采用两种方式安装1.1)需要dll和注册码配合,仅适于windowshttp://luanma.javaeye.com/blog/1838271.2)仅需注册码,适合windows和linuxhttp://serendipityspaces.spaces.live.com/blog/cns!7161664

2009-12-05 15:33:00 8022 2

原创 squid的缓存决定因素和刷新策略

1) 是否缓存squid本质是缓存url,对于一个url能否缓存,取决与两个因素,一个是配置,一个response头,缺一不可1.1) 配置比如有可能存在下面的配置就对url中带cgi-bin或者?的不缓存acl QUERY urlpath_regex cgi-bin /?cache deny QUERYsquid3.0默认没有上面的

2009-12-04 00:24:00 6203

原创 ubuntu 下的squid安装日志

ubuntu 9.0.4 1) 安装 wget http://www.squid-cache.org/Versions/v3/3.0/squid-3.0.STABLE20.tar.gztar xzvf squid-3.0.STABLE20.tar.gzcd squid-3.0.STABLE20/./configure --prefix=/path/to/squid

2009-12-01 22:10:00 4554

原创 ubuntu9.0.4 安装中文输入法ibus

1)install sudo apt-get install ibus ibus-table ibus-pinyin无法成功,因为 ibus-pinyin没有源,于是--> 2)2)在 /etc/apt/sources.list 加入源 :deb http://ppa.launchpad.net/ibus-dev/ppa/ubuntu jaunty main并导

2009-11-01 12:02:00 1401 1

Cassandra+The+Definitive+Guide.pdf

nosql 的典型代表 Cassandra 很实用的技术手册

2011-03-16

linux系统编程 很详细的系统描述

linux系统编程 很详细的系统描述( io、进程、内存)

2011-03-16

Professional.Java.JDK.6.Edition.Jan.2007

Professional.Java.JDK.6.Edition.Jan.2007

2009-12-18

jboss in action

jboss in action 2009最新版

2009-12-18

javaalmanac.chm

javaalmanac:java代码参考手册

2008-10-17

A Guide to Testing the Rails.pdf

A Guide to Testing the Rails

2007-05-25

空空如也

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

TA关注的人

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