- 博客(42)
- 资源 (1)
- 收藏
- 关注
原创 derbydb的page结构
page是数据库在disk层面的最小存储单元。记录被组织在page中,数据库对磁盘的读取,也是以page为单位。因此,研究page的结构是研究数据库实现的基础。我们可以看一下derbydb的page结构。 Derby的page由StoredPage封装。该类维护了page的字节数组(rawDataIn/rawDataOut),并提供了基于DataInput/DataOu...
2013-07-04 12:42:16 199
原创 BloomFilter的原理与应用
原理 Bloom filter是一种hash算法,可以认为该算法的目的是高效地判断某个元素是否在一个特定集合中。 该算法涉及到三种数据类型: -- 数据集合S -- 一个数组,该数组的元素类型是bit,记为A -- k个hash函数,每个Hash函数记为Hk 初始情况下,bit数组所有元素为0。 插入一个元素时,将每个h...
2013-06-21 14:27:02 196
原创 pyzmq.ZMQStream中的bug
问题的现象 之前写了一个SharedSocketStream的组件,该组件的目的是用同一个socket负责处理消息发送,防止过多的socket打开和关闭。SharedSocketStream内部会持有一个zmqstream.ZMQStream实例,所有的消息都由ZMQStream发送。 测试发现,当有大量的消息发送时,会出现消息突然发送不出去的现象。对于该问题,排查了...
2013-01-22 15:35:25 510
原创 使用POI向excel中插入图片
最近的一次工作中,需要向excel中插入图片。我们的要求是图片填满固定的区域,虽然图片有可能会拉伸或变形,但是,这么做在目前看来也是工作最好的了。下面是插入图片的代码: File image = null; byte[] bytes = IOUtils.toByteArray(new FileInputStream(imag...
2013-01-15 08:40:36 792
原创 批量转换excel文件为pdf的VBA脚本
Function RDB_Create_PDF(Myvar As Object, FixedFilePathName As String, _ OverwriteIfFileExist As Boolean, OpenPDFAfterPublish As Boolean) As String Dim FileFormatstr As String...
2013-01-15 02:32:11 2198
原创 关于异常的总结
什么是异常========================= 个人认为异常是语言发明者提供给开发者的一种表达工具。开发者在设计接口时,可以使用异常与外界(接口的调用方)进行交流。 为什么是异常========================= 在早期,语言没有提供异常机制时,方法内部的“异常”情况通常会用特殊返回值的方式来告知方法的调...
2012-11-16 17:35:11 155
原创 关于Redis的Python客户端的连接池问题
在一次分享中提到了Redis的长短链接的问题,引发了对redis-py的连接池机制的讨论。 通过源码发现,每创建一个Redis实例都会构造出一个ConnectionPool,每一次访问redis都会从这个连接池得到一个连接,访问完成之后,会把该连接放回连接池,下面是发送命令访问redis的execute_command方法实现: 352 #### COM...
2012-11-13 10:12:59 285
原创 使用tds和pymssql连接SQLServer
项目中需要在linux环境中使用python连接sqlserver.一开始会报错: pymssql.OperationalError: DB-Lib error message 20017, severity 9:Unexpected EOF from the serverNet-Lib error during Operation now in progress...
2012-10-19 16:04:37 766
原创 如何编写高性能的服务器程序
在《High Performence Server Architecture》(http://pl.atyp.us/content/tech/servers.html)中,作者提出了自己的观点关于如何编写高性能的服务器程序。作者感兴趣的地方不在于使用多线程之类的并行技术,作者认为处理请求的基础设施决定了程序的性能。作者也坦言,他提出的观点和方法并不是提高服务器性能的唯一途径。作者...
2012-09-27 17:44:01 149
原创 Google的python编程规范
完整的规范文档在这里:http://google-styleguide.googlecode.com/svn/trunk/pyguide.html。这里总结那些个人认为比较重要或者对避免采坑注意事项。Imports仅仅使用import导入包和模块。import x,导入包和模块from x import y,导入包下面的模块,这里x为包,y为没有前...
2012-09-26 13:49:18 227
原创 使用Python进行多进程编程
Python在2.6引入了多进程的机制,并提供了丰富的组件及api以方便编写并发应用。multiprocessing包的组件Process, Queue, Pipe, Lock等组件提供了与多线程类似的功能。使用这些组件,可以方便地编写多进程并发程序。ProcessProcess等同于java.lang.Thread。start方法用以启动某个进程。一个简单的示例:...
2012-09-24 14:19:51 205
原创 Pthread - POSIX线程编程
线程的动机是充分利用多核,方便地实现并行编程。然而,早期的硬件厂商纷纷实现自己的一套线程标准,这样,程序员无法开发可移植的软件。为了结束这个局面,对UNIX系统,IEEE制定了一个C语言线程编程接口标准(IEEE POSIX 1003.1c)。参考这个标准的实现就被称作POSIX threads 或者 Pthreads. 什么是线程? 在理解线程之前,可以考察一个...
2012-09-17 17:55:49 130
原创 Voldemort的FailureDetector设计
Voldemort的client维护了与各个节点通信的链接。节点的状态是不断变化的,随时都有可能某个或某些节点访问不同或是崩溃的情况,而这些情况的出现都会对客户端的get, put, delete操作产生影响。所以,节点状态的监控,并及时地通知相关组件是客户端的一个重要组成部分。FailureDetector接口是这个组件的核心。 主要类及其关系: 完整的文档在...
2012-09-13 09:27:09 195
原创 LSM-tree 一种高效的索引数据结构
论文 The Log-Structure Merge-Tree(LSM-tree)(http://www.google.com.my/url?sa=t&rct=j&q=&esrc=s&source=web&cd=4&cad=rja&ved=0CDoQFjAD&url=http%3A%2F%2Fciteseerx.is...
2012-09-12 13:26:28 688
原创 深入分析Voldemort的PerformParallelRequests
PerformParallelRequests是PipelineRoutedStore中用来执行get操作的action。该action并行向各个节点发送get请求。底层的通信采用非阻塞的nio方式,但是PerformParallelRequests对外界是一种阻塞模式,CountDownLatch被用来实现这种阻塞。 PerformParallelRequests在构造方法中...
2012-09-06 11:54:48 116
原创 Java中几种使用NIO的模式
NIO的通用模型是使用一个Selector管理所有的SocketChannel,包括ServerSocketChannel。但是,诸多开源工程中,使用模式会有些不同,下面描述了几种开源软件在某些组件中如何使用Selector的。 1. 多个Selector管理客户端的读写 Voldemort使用NIO有些不同。ServerSocketChannel是阻塞模式,但是,与客...
2012-09-06 09:49:58 559
原创 Voldemort的RoutedStore
RoutedStore是Voldemort客户端的一个重要组件,他的职责是将数据操作路由到不同的节点上。RoutedStore内部维护了与节点通信的客户端列表,这些客户端是Store的实现类,可以是SocketStore或HttpStore。对于每一个节点,RoutedStore会建立请求,发送数据,等待响应,验证响应结果是否正确,执行一些记录的动作,除此之外,RoutedStore还...
2012-09-05 15:05:06 116
原创 探究ThreadLocal
ThreadLocal是JDK提供的一个工具类,利用ThreadLocal,应用可以将某个值绑定到当前处理的线程上,在线程的后续处理过程中,该值可以很方便地被获取并修改。这样可以在一定程度上避免该值在方法调用中的传递。可以利用ThreadLocal保存线程执行的上下文。webwork的ActionContext就利用了ThreadLocal来保存当前Action执行的一些环境变量,所以,可...
2012-09-05 13:30:01 114
原创 Voldemort在StoreClient方面的设计
StoreClient是一个接口,定义了get, put, delete等操作。Voldemort使用了工厂方法来得到具体的StoreClient,StoreClientFactory是定义了工厂方法的接口。HttpStoreClientFactory, SocketStoreClientFactory, CachingStoreClientFactory, MockStoreClie...
2012-09-05 11:37:23 119
原创 处理异常的智慧
1. 忽略异常,往上抛 一般在打开Socket时出现的异常应该往上抛,不应该吃掉异常,致使上层的调用者无法感知这些异常。我们在Hadoop的RPC的Server初始化中可以看到这一点。如果在打开Socket的时候抛出异常,该异常一直往上抛,从而到达最顶端,即Namenode的初始化,从而导致Namenode初始化失败。因为RPC中Server的Socket是一个必不可少的组件,...
2012-09-04 14:23:04 164
原创 jetty的NIO如何处理IO
jetty的NIO如何处理IO Listener实例化一个(或多个)Selector。Listener不断accept新的socket。每接受一个socket,生成对应的SelectableEndPoint(该SelectableEndPoint继承了ChannelEndPoint,内部维护了与客户端通信的SocketChannel。实现了Runnable接口。),调用该endpoi...
2012-09-04 13:50:38 148
原创 haddop RPC如何处理IO
Hadoop的RPC如何处理IO Hadoop在RPC的Server端使用了NIO的方式来处理客户端的请求。 Server端没有线程池,Listener类会打开一个线程,该类拥有一个Selector,该Selector负责接收链接,处理链接的输入流。一旦一个客户端链接被接受,Listener会构造一个Connection对象。该Connection对象作为客户端Sock...
2012-09-04 11:46:24 69
原创 HRegion.doMiniBatchUpdate方法解析
-- doMiniBatchPut(BatchOperationInProgress) 实例化一个WALEdit 如果CoprocessorHost不为空,对每一个Put操作调用CoprocessorHost的prePut方法,如果该方法返回true,设置这次Put操作的返回状态为 SUCCESS。(为什么要这样做?CoprocessorHost是干什么用...
2012-02-17 11:57:09 84
原创 B+-树的Java实现
import java.util.HashMap;import java.util.Map;/** * The simple implementation of B+-Tree, reference http://en.wikipedia.org/wiki/B%2B_tree * * @author bo.fangbo * * @param <...
2012-01-31 17:07:53 306
原创 Erlang的一些练习代码(数组排序相关)
-module(my_array).-export([sum/1, print/1, average/1, reverse/1, indexOf/2, sub/3, max/1, bubble_sort/1, quick_sort/1, insert_sort/1]).sum([H|T]) -> H + sum(T);sum([]) -> 0.print([H|...
2012-01-18 10:43:24 102
原创 使用fok-join实现的快速排序
JDK7提供了fork-join框架,用该框架写了一个快速排序的实现。 public class QuickSort<T extends Comparable> extends RecursiveAction{ private T[] array; /** * start from 0 */ private int start;...
2011-10-11 16:48:58 204
原创 一种利用Annotation进行实例变量合法性验证的机制
引言 很多应用都需要对传入的数据进行验证,web应用对这种需要更为强烈。提高验证代码的内聚性和高可重用性是一个比较重要的话题。本文提出了一种利用Annotation机制对Java对象的属性进行合法性验证的新方法。 设计目标 如果有大量的属性需要对其合法性进行验证,不可能进行硬编码,同时,业务代码也不应该感知这种验证的存在。但是需要有一个接口供业务代码设置验证的逻辑...
2011-06-17 14:43:48 203
原创 一种快速部署工程的eclipse插件
摘要 由于webservice必须要部署到运行飞天的linux环境上,这个给开发带来了诸多不便,即使修改很少的一部分都要重新编译发布整个工程,并且每次上传文件还要打开一个ssh的上传文件的窗口,这些操作耗费了大量的宝贵时间。基于这种情况,开发了一个可以一键发布部署工程的eclipse插件,该插件能将一些繁琐的工作自动化,使用起来也非常方便,本文介绍了该插件的主要设计框架...
2011-06-17 14:30:51 88
原创 hadoop安装要点
1.在所有机器上建立相同目录:比如/home/bofang/hadoop,然后把hadoop的包解压到该目录下,最终的目录结构为:/home/bofang/hadoop/hadoop-0.20.2/bin,设/home/bofang/hadoop/hadoop-0.20.2为HADOOP_HOME 2.修改所有机器上的HADOOP_HOME/conf/hadoop-env.sh,指定JAV...
2011-06-17 09:29:38 198
原创 修改hadoop各DataNode的namespaceID脚本
getNamespaceId(){ cat /tmp/hadoop-root/dfs/name/current/VERSION | while read line do start=$(expr substr "$line" 1 5) if [ "$start" == "names" ...
2011-06-17 09:27:53 244
一个很有趣的Java Memory Puzzle
这篇文章描述一段很有趣的内存溢出现象。下面的代码会抛出OutOfMemoryError:public class JavaMemoryPuzzle { private final int dataSize = (int)(Runtime.getRuntime().maxMemory() * 0.6); public void foo(){ { ...
2011-06-16 16:17:19 136
原创 Thread类为什么有contextClassLoader
Java的类委派加载机制是一个漂亮的方案,但是并不完美。如果单纯利用这种机制,那么web应用就无法满足。 jetty的ContextHandler.hadle方法设置当前线程的contextClassLoader // Set the classloader if (_classLoader!=null) ...
2011-06-15 18:46:07 184
原创 ZJU ACM 1002
题目在这里:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1002 import java.util.ArrayList;import java.util.List;import java.util.Scanner;public class Main { pr...
2011-04-17 21:27:45 95
原创 100万个数中找最小的10个(利用快排思想,速度可观)
主要利用了快排的思想,划分解空间。 package net.bobo;import java.util.ArrayList;import java.util.Arrays;import java.util.Collections;import java.util.List;public class MinTenNumbers { //1...
2011-04-02 22:32:20 1097
原创 jetty6中ThreadPool实现的代码解析
QueuedThreadPool承载了jetty6提交任务至线程工作的使命,在没有用concurrent包的情况下,作者实现了漂亮的线程池。 QueuedThreadPool内部维护了一个FIFO的job队列,该队列基于数组实现。 QueuedThreadPool的核心接口是dispatch(Runnable),正如字面所表达的那样,该方法将派发一个job到一个线程来执行。下面是对...
2011-04-02 15:56:04 132
原创 AVLTree的实现
package net.bobo;import java.util.ArrayList;import java.util.Arrays;import java.util.Collections;import java.util.Date;import java.util.List;public class AVLTree<T extends Compara...
2011-03-25 10:35:11 98
原创 非递归中序遍历二叉树
一次面试被问到了如果按顺序打印一棵二叉排序树的所有节点,当时很快写出了递归的实现,当被要求用非递归实现时,最终没有在规定的时间完成。之后又仔细思考了一下,写出了这个程序。 /** * 不利用递归中序遍历 */ private void printTreeByAscWithoutRecursive(){ if(this.root == null) return;...
2011-03-15 13:34:58 73
原创 一个计算路径条数的算法
题目如下: 有一个横3,竖4的格子,格子的左上顶点坐标为(0,0),右下顶点坐标为(3,2),在不弯路的情况下,求从(0,0)到(3,2)的路径条数。 一个算法如下: 令一个顶点用V表示,S(V)记为到该顶点的路径条数,那么S(V)=S(V1)+S(V2)+S(V3)+S(V4),其中V1,V2,V3,V4为V的相邻顶点。即:计算到达一个顶点的路径条数,可以分别计算到达该顶...
2010-08-04 14:47:52 1959
原创 二叉查找树的实现
定义头文件: #ifndef MYTREE_H_INCLUDED#define MYTREE_H_INCLUDEDstruct TreeNode;typedef struct TreeNode *Tree;struct TreeNode{ int value;//值 Tree left;//左子树 Tree right;//右子树...
2010-08-03 10:45:36 80
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人