自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(52)
  • 收藏
  • 关注

原创 Paxos算法学习笔记

学习了1个多月,现在回头看,觉得要理解paxos算法,需要阅读下面三篇论文:The part-time parliament [英文] [中文]Paxos Made Simple [英文] [翻译]Paxos Made Code [英文]前两篇更多的是理论,第三篇介绍了paxos的实现。阅读第三篇还是很有必要的,在看第三篇之前,我一直不理解一个paxos的instanc

2012-09-24 20:12:05 6371 1

转载 软件人员推荐书目

软件人员推荐书目(一) 大师篇一、 科学哲学和管理哲学【1】 "程序开发心理学"(The Psychology of Computer Programming : Silver Anniversary Edition) 【2】 "系统化思维导论"(An Introduction to Systems Thinking, Silver Anniversary Edition)

2012-03-06 08:24:04 1295 1

原创 记一次排查mbstowcs误用引发的bug

运行

2014-04-22 19:03:02 1224

原创 log4j未写日志排错

log4j.properties是否放在 src/main/resources目录下, mvn install之后会放到jar包中.http://stackoverflow.com/questions/5132389/if-using-maven-usually-you-put-log4j-properties-under-java-or-resources检查jar包中是否包

2013-11-24 11:24:38 2059

原创 ZooKeeper源码阅读(六):JUTE

JUTE是跨语言序列化/反序列化工具,类似Thrift用于产生java/c版本的消息类

2013-10-09 10:33:52 6794

原创 ZooKeeper源码阅读(五):Leader选举

ZooKeeper中的Leader选举也不是Paxos, 实现相关的类包括FastLeaderElection, LeaderElection.FastLeaderElection: Leader选举初始投票选自己,收到别人的投票之后判断是否更优,如果是则更新自己的投票,最终zxid最大的follower将收到多数派的投票,等待finalizeWait微秒后仍无更优投票,则转为LEADING状态.LeaderElection: 向所有VotingView中的Server建立socket,发送/接收v

2013-10-09 10:15:21 2619

原创 ZooKeeper源码阅读(四):选举后过程

Zookeeper选出Leader后,在对外提供服务之前,需要对Follower的状态进行同步。我想搞清这个过程,以及zookeeper解决之前提到的两个问题的细节:1) Never forget delivered messagesLeader在COMMIT投递到任何一台follower之前宕机,只有它自己commit了。新Leader必须保证这个事务也必须commit。2) Let go of messages that are skippedLeader产生某个proposal,但是在宕机之

2013-09-26 11:31:04 3613

原创 Storm源码阅读(三):Thrift

Thrift指南:http://diwakergupta.github.io/thrift-missing-guide/Defining Servicesservice Twitter {    // A method definition looks like C code. It has a return type, arguments,    voidping(),

2013-08-14 19:50:27 2822

原创 Storm源码阅读(二):客户端

ClojureClojure指南http://java.ociweb.com/mark/clojure/article.html Eclipse插件CounterclockwiseEclipse提供了专门的Clojure 语言开发插件CounterClockwise,在源代码编辑,代码调试,REPL 支持方面也有独到之处,适合于习惯于Eclipse的开发者使用。http://c

2013-08-14 15:37:34 4891

原创 Storm源码阅读(一):使用

Storm项目主页http://storm-project.net/,github主页https://github.com/nathanmarz/storm storm源码是clojure和java的混合体 安装JREClojure 运行在 JRE (JAVA Runtime Environment) 之上,因此,你需要先安装 JRE。 安装leinClojure项

2013-08-14 13:01:53 23918 4

原创 ZooKeeper源码阅读(三):服务器端

服务端入口:org.apache.zookeeper.server.QuorumPeerMain.main(调用ZooKeeperServerMain.main) 运行参数:配置文件如:QuorumPeerMain /opt/zookeeper/zookeeper-3.4.3/bin/../conf/zoo.cfg  读取配置文件       QuorumPeerC

2013-08-08 16:03:27 6214 1

原创 ZooKeeper源码阅读(二):客户端

源代码:http://svn.apache.org/repos/asf/zookeeper/trunk/ 导入eclipse:在包含build.xml目录下执行ant eclipse将产生.classpath文件 目录结构:src/recipes:提供了各种Zookeeper应用例子src/c:提供了c版客户端。zookeeper_st,zookeeper_

2013-07-23 12:43:22 5572

原创 ZooKeeper源码阅读(一):ZAB协议

A simple totally ordered broadcast protocol causal relationship指的是同一个发送者发送的两个消息,或者leader改变前发送的消息和改变后发送的消息。 怎么保证casual order?当重选Leader时,前一个Leader发送的消息先于当前Leader发送的消息。 Leader在开始broadcast之前

2013-07-14 18:49:26 20354 2

原创 Gaea源码阅读(五):C客户端

除了Java客户端外,Gaea还提供了C语言和.NET实现。基本都是相同的,只是序列化/反序列化用C语言重新实现了。遵循相同的格式,

2013-07-05 11:17:24 1244

原创 Github搭建静态博客

Jekyll是一个ruby工具,可以根据静态文本搭建网站。 Github Pages功能的后端引擎就是jekyll,因此只要你的项目包含了jekyll配置,就可以在Github上免费建立博客。 jekyll 通过ruby安装工具gem安装sudo apt-get install rubygems 可以添加源gem sources -a http://ruby.tao

2013-07-01 14:51:54 2790

原创 Gaea源码阅读(四):服务端通讯

在(三)中加载server时,将根据配置建立tcp/http/telnet服务。如demo中这三个服务中enable了tcp和telnet。 以tcp服务为例,实现类在gaea.server.tcp.implement中配置gaea.server.tcp.implementcom.bj58.spat.gaea.server.core.communication.tcp.Socke

2013-06-24 17:33:48 1641

原创 Gaea源码阅读(三):服务端启动流程

相对于客户端,服务器端工作就比较多了。服务器端需要load jar包,利用fliter实现方法级的权限控制 // load service config logger.info("load service config..."); ServiceConfig sc = loadServiceConfig(gaeaConfigDefaultPath, gaeaConfigP

2013-06-24 16:34:34 2096

原创 Gaea源码阅读(二):客户端流程

以GaeaClientTest为入口 GaeaInit.init("conf/gaea.config"); /** * 调用URL 格式:tcp://服务名//接口实现类 * 备注: * 服务名:需要与gaea.config中的服务名一一对应 * 接口实现类:具体调用接口的接口实现类 */ final String url = "tcp://d

2013-06-21 17:58:45 2062

原创 Gaea源码阅读(一):使用

Gaea:58同城开源的中间层服务框架 https://github.com/58code/Gaea中间件Gaea是支持跨平台具有高并发、高性能、高可靠性,并提供异步、多协议、事件驱动的中间层服务框架。相对于其它重量级的中间件,比如淘宝的dubbo,Gaea只做一件事,因此没有过多的项目依赖。在学校的时候学过CORBA,因此对中间件有所了解。在CORBA中,接口通过ID

2013-06-21 17:23:48 5182

原创 Argo源码阅读(六):ArgoDispatcher

回到最顶层的调用ArgoFilter.init(),Argo.init()初始化了ArgoDispatcher,ArgoFilter初始化完毕。 ArgoFilter.doFilter实现过滤功能 @Override public void doFilter(ServletRequest request, ServletResponse response, Filte

2013-05-27 18:53:45 2704

原创 Argo源码阅读(五):Convention

在ArgoDispatcherFactory.init()中创建了ArgoDispatcher实例,然后再执行ArgoDispatcher的init。以后所有都将交给ArgoDispatcher处理。 //File ArgoFilter.init() dispatcher = ArgoDispatcherFactory.create(ser

2013-05-27 16:27:06 2161

原创 Argo源码阅读(四):Servlet过滤器

Filter通常在一个web应用上的主要功能之前或之后执行一小段功能,比如判断用户是否有访问的权限。 Filter实现javax.servlet.Filter接口,由方法doFilter实现过滤功能。 Filter指南:http://www.avajava.com/tutorials/lessons/what-is-a-filter-and-how-do-i-use-it.ht

2013-05-27 13:35:14 3077

原创 Argo源码阅读(三):Google-guice依赖注入框架

在Argo中用到了Google-guice依赖注入框架:http://code.google.com/p/google-guice/Google-guice 依赖注入框架主要由@Inject注解、AbstractModule基类组成 RealBillingService类构造时依赖CreditCardProcessor和TransactionLog接口,添加@Inject注

2013-05-27 10:28:31 4305

原创 Argo源码阅读(二):Controller的使用

以附带的Hello world为例view/index.html 内容如下 Argo sample pageSamples 根据url获得参数的hello world 静态文件显示 区分queryString和form参数 文件上传展示当点击第一个链接的时候,跳转到hello/world路径,这是Argo做了什么处理?

2013-05-09 20:32:59 5311

原创 Argo源码阅读(一):Jetty

Argo:58同城开源的轻量级web框架 https://github.com/58code/Argo作为仅有Java语言背景,从没接触过web容器,Spring、Servlet,tomcat、jetty的门外汉,我心中最大的疑惑是Argo是如何工作的?附带的例子samples/hello-world,我找不到Main函数。从文档Readme中看到,运行就一条指令mav

2013-03-29 17:29:41 7479

原创 Nginx监控请求lua脚本

当应答状态码不是200时,通过udp向服务器发送报告。monitor.lua-- -- Config Nginx.conf:---- set $str $uri;-- content_by_lua_file;-- -- location /proxy {-- proxy_pass http://{your-server}$str;-- }------ Ex

2013-03-21 12:46:36 4364

原创 Java词法分析器jflex

以表达式识别为例,包括标识符、and、or,括号例如:condi1=5 and   condi6=6 and  (condi7=7 or (condi8=8 and condi9=9))//Expr.javapublic abstract class Expr{ abstract void print();}//andExpr.javapublic class andEx

2013-03-17 21:14:36 2336 2

原创 构造器内部调用动态绑定方法

在(基类的)构造器内部调用某个动态绑定的方法时,C++和Java有不同的表现。C++ 在构造函数中调用虚函数时,虚函数机制不起作用,调用的将是基类的方法。http://blog.csdn.net/m_vptr/article/details/7039954Java在构造器内调用动态绑定的方法时,调用的将是子类的方法,而子类这是其实还没有完全构造完成。Java编程

2013-03-14 00:09:38 1012

原创 源码安装nginx并配置Lua模块

今天需要在测试机布置nginx测试环境,测试机不能联网。所以只能用scp上传nginx源码安装。期间遇到不少问题1.下载nginx源码$wget 'http://sysoev.ru/nginx/nginx-1.2.6.tar.gz'2.下载lua-nginx-module源码$git clone https://github.com/chaoslawful/lua-

2013-03-06 09:50:20 7024

原创 Libevent学习笔记一:异步IO

http://www.wangafu.net/~nickm/libevent-book/01_intro.html文章以一个HTTP服务为例,介绍并比较了几种处理高并发的方法。1.阻塞+轮询/* This won't work. */char buf[1024];int i, n;while (i_still_want_to_read()) { for (i=0; i

2013-01-17 15:40:24 1816

原创 C++访问SQLite

1.安装SQLite sudo apt-get install sqlite32.安装SQLite开发包sudo apt-get install libsqlite3-dev 3.创建表$sqlite3 Acceptor_0.db SQLite version 3.7.9 2011-11-01 00:52:41Enter ".help" for instructions

2013-01-07 18:53:35 1463

原创 C++访问MySQL

1.安装mysql  sudo apt-get install mysql-server mysql-client安装过程中会提示设置用户名和密码2.启动mysql  sudo /etc/init.d/mysql restart3.安装C++开发库  sudo apt-get install libmysqlclient-dev4.登录mysql,并创建表m

2013-01-07 13:59:52 3637

原创 M101 Homework 2.2

本人写的第一个python程序:# M101 Week2 - CRUD Homework 2.2import pymongoimport sys# establish a connection to the databaseconnection = pymongo.Connection("mongodb://localhost", safe=True)db = connection.s

2012-11-08 23:10:17 1064

原创 C++模板Gotcha

用到模板时遇到的两个错误1) 一个是模板函数链接错误//xxx.htemplate class A{public: T& getT();private: T t;}//xxx.cpptemplate T& A::getT(){ return t;}链接时报std::string A::getT()未定义参照C++

2012-11-07 16:25:34 546

原创 与排序后位置距离<k的数组的排序

阿里巴巴笔试题:一个含有n个互不相同的整数的数组,任意一个数a[i]的现有位置i和它排序后的位置j的距离不超过k(即i-j的绝对值小于等于k),2=要求:算法复杂度为O(nlogn)记0分,为O(nk)记2分。满分20分解法1:只对中间2k个元素划分,然后递归。第一层2k步,第二层2^2*k步,一直到第log(n/2k)层,一共2*(1 + 2 + ... 2^(l

2012-10-10 16:23:56 2130

原创 The part-time parliament笔记

另一篇更详细的Paxos笔记:http://blog.csdn.net/m_vptr/article/details/8014220每个议员手中有一本律簿所有律簿上的法令都是一致的,也就是第x条法令的内容是一致的,当然可能有的律簿上还没有这条法令律簿背面记录重要的笔记,不重要的笔记记在小纸条中,小纸条很有可能丢失。笔记代表机器在内存中的一些状态。可能出现的问题:一拨

2012-08-30 18:33:33 3020

原创 TortoiseSVN学习笔记

以前也了解过SVN,今天把帮助文档看了一遍,就当是查缺补漏吧。Repository:repository保存了每一次变动:对文件的每一次改动,对目录的改动,比如增加、删除,重新整理文件和目录。 import:将工程文件导入到repos中, add:工程内添加了新文件后,在工程的目录下,使用add功能,将使这个文件显示加号图标,并没有提交到库。 revert:工程

2012-07-27 11:10:39 4384 1

原创 Log4j学习笔记

log4j使得日志管理更加方便,通过配置文件可以实现在运行时控制。 通过log4j,可以在程序中指定每一条日志的级别(error,warn, debug, info),从而可以根据需求,只输出某个级别和该级别以下的日志。可以控制日志的附加目的地(Appender),可以是多个,包括控制台、文件、远程套接字服务器,NT事件记录器和远程UNIX Syslog守护程序。可以定制输出的

2012-07-24 14:38:40 666

转载 Java类加载原理解析

1       基本信息摘要:每个java开发人员对java.lang.ClassNotFoundExcetpion这个异常肯定都不陌生,这背后就涉及到了java技术体系中的类加载。Java的类加载机制是java技术体系中比较核心的部分,虽然和大部分开发人员直接打交道不多,但是对其背后的机理有一定理解有助于排查程序中出现的类加载失败等技术问题,对理解java虚拟机的连接模型和jav

2012-07-23 12:27:05 505

原创 XMLEventReader读取数据不全

alert.scheduler.Scheduler alert.control.HostAliveTask#repeat#100; alert.control.WebpageRespTask#repeat#180; alert.control.AlarmNumTask#daily#16:45:00 发现读取出的数据只有前面两行解决的办法是设置javax.xml.

2012-07-20 18:02:39 2103

空空如也

空空如也

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

TA关注的人

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