自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(109)
  • 资源 (1)
  • 问答 (1)
  • 收藏
  • 关注

读 《大话重构》有感

        重构!又是这个词!        记得上学的时候,老师强力推荐了一本叫做《重构》的书,我用了一个月读完了,对于这本书中介绍的各个“招式”有了感性的认识。几年的工作下来,有幸参与了几个大的项目,越发的认识到代码多到一定量级之后,写起来就越发的吃力,这时再次拾起这本书细细品味每个招式的使用场景以及使用技巧,突然有种茅塞顿开的感觉。        《大话重构》我仔细的阅读了试读...

2014-08-01 10:04:24 185

原创 NIO随写

摘自:killme2008的pdfIO划分为两个阶段:1 等待数据就绪2 从内核缓冲区copy到进程缓冲区(从socket通过socketChannel复制到ByteBuffer) non-direct ByteBuffer: HeapByteBuffer,创建开销小direct ByteBuffer:通过操作系统native代码,创建开销大 基于block的传输...

2014-06-24 17:20:50 122

原创 连续子数组的最大和

题目:输入一个整形数组,数组里有正数也有负数。数组中的一个或连续多个整数组成一个子数组,求所有子数组的和的最大值。要求时间复杂度为O(n)。例如输入的数组{1, -2, 3, 10, -4, 7, 2, -5},和最大的子数组为{3, 10, -4, 7, 2},因此输出为该子数组的和18。如果不考虑时间复杂度,可以枚举出数组的所有子数组并求出它们的和。长度为n的数组,共有n(n+1)...

2014-04-19 22:28:02 122

原创 Java多线程同步如何从JVM的角度体会

我们在使用Java多线程同步的时候需要了解很多的知识,其中Java多线程同步机制实际上是靠锁的概念来控制的。这个问题就需要我们引起注意,那么在Java程序当中,锁是如何体现的呢?  让我们从JVM的角度来看看锁这个概念:   在Java程序运行时环境中,JVM需要对两类线程共享的数据进行协调:   1)保存在堆中的实例变量   2)保存在方法区中的类变量  ...

2014-03-18 20:20:42 118

原创 异步消息机制兼谈Hadoop RPC .

上篇说了半天,却回避了一个重要的问题:为什么要用异步呢,它有什么样的好处?坦率的说,我对这点的认识不是太深刻(套句俗语,只可意会,不可言传)。还是举个例子吧:比如Client向Server发送一个request,Server收到后需要100ms的处理时间,为了方便起见,我们忽略掉网络的延迟,并且,我们认为Server端的处理能力是无穷大的。在这个use case下,如果采用同步机制,即Clien...

2014-03-16 10:55:49 97

原创 MongoDB让人失望

最近由于项目需要,使用了MongoDB存储数据。坦率的说,挺让人失望的,当然,不排除对MongoDB不太熟悉的原因。但总的说来,感觉名不副实,想让大家喜欢并接受,MongoDB还有很长的路要走。简单说一下碰到的问题:1. 非常耗内存。貌似这点很多人都抱怨过。因为MongoDB采用的是内存映射文件的方式存数据,所以特别吃内存,更郁闷的是,没有办法控制。如果MongoDB运行在一台专门的机器...

2014-03-16 10:55:10 222

原创 从Java视角理解CPU上下文切换(Context Switch)

从Java视角理解系统结构连载, 关注我的微博(链接)了解最新动态在高性能编程时,经常接触到多线程. 起初我们的理解是, 多个线程并行地执行总比单个线程要快, 就像多个人一起干活总比一个人干要快. 然而实际情况是, 多线程之间需要竞争IO设备, 或者竞争锁资源,导致往往执行速度还不如单个线程. 在这里有一个经常提及的概念就是: 上下文切换(Context Switch). 上下文切换的...

2014-03-16 10:52:14 197 1

原创 桥模式

Bridge桥接模式是一种结构型模式,它主要应对的是:由于类型的固有罗辑,使得类型具有两个或两个以上的纬度变化。也就是要求抽象不应依赖于实现细节,实现细节应依赖于抽象。       《设计模式》中说到将抽象部分与实现部分分离,使他们可以独立的变化。       举个例子更清楚些,好像我们平时玩的游戏中有PS版的,但是不是大家都有PS。这时我们等一段时间,一般会出PC版的或其他版本。由...

2014-03-16 10:52:02 102

原创 从Java视角理解CPU缓存(CPU Cache)

从Java视角理解系统结构连载, 关注我的微博(链接)了解最新动态众所周知, CPU是计算机的大脑, 它负责执行程序的指令; 内存负责存数据, 包括程序自身数据. 同样大家都知道, 内存比CPU慢很多. 其实在30年前, CPU的频率和内存总线的频率在同一个级别, 访问内存只比访问CPU寄存器慢一点儿. 由于内存的发展都到技术及成本的限制, 现在获取内存中的一条数据大概需要200多个CPU周期(C...

2014-03-14 10:11:43 114

原创 从Java视角理解伪共享(False Sharing)

从Java视角理解系统结构连载, 关注我的微博(链接)了解最新动态从我的前一篇博文中, 我们知道了CPU缓存及缓存行的概念, 同时用一个例子说明了编写单线程Java代码时应该注意的问题. 下面我们讨论更为复杂, 而且更符合现实情况的多核编程时将会碰到的问题. 这些问题更容易犯, 连j.u.c包作者Doug Lea大师的JDK代码里也存在这些问题.MESI协议及RFO请求 从前一篇我们知道,...

2014-03-14 10:11:32 110

原创 jetty_connector

1.Connector的继承体系jetty的connector继承体系如下图:我们可以看到,首先AbstractConnector实现了lifecycle的接口和connector接口,事实上,connector的生命周期应该和容器是差不多的,会一直存在。然后看到AbstractConnector持有了到server,ThreadPool等的引用,基本上,持有了Server的引用,...

2014-03-14 10:11:17 388

原创 读取Properties文件的六种方法

1。使用java.util.Properties类的load()方法示例: InputStream in = lnew BufferedInputStream(new FileInputStream(name));       Properties p = new Properties();       p.load(in);2。使用java.util.ResourceBundle类的get...

2014-03-14 10:11:07 78

原创 各类JDBC数据库连接方式

1、链接Sqlserver2000 驱动类 com.microsoft.jdbc.sqlserver.SQLServerDriver 连接字符串 jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=pubs (pubs为数据库名,localhost为主机地址,若数据库在远程则为IP地址)  2、链接mysql 驱动类 com.my...

2014-03-14 10:10:55 163

原创 浅谈JAVA ThreadPoolExecutor

基础 在我看来,java比C++的一个大好处就是提供了对多线程的支持(C++只有多线程的库,语言本身不包含线程的概念)。而其中我最爱用的就是ThreadPoolExecutor这个类,它实现了一个非常棒的thread pool。thread pool一般被用来解决两个问题:当处理大量的同步task的时候,它能够避免thread不断创建销毁的开销;而另外一个也许更重要的含义是,它其实表示了一个...

2014-03-12 09:37:32 97

原创 jetty_handler

1.handler类图和时序先上一个handler的继承体系结构图从上图可以看到,jetty通过一级一级的继承,不断的扩展handler的功能,从最简单的处理到复杂的web容器,下面一一分析之:然后再看一个简单的请求的handler调用过程:12345678910111213141516171819...

2014-03-12 09:36:09 242

原创 jetty_start.jar

1.概述本文主要分析下jetty的start.jar中的jar包加载顺序和一些简单逻辑,由于没有下到start.jar包的源码,用反编译的方式搞的,代码可能有些地方不一定准确。2.分析1.main方法main方法非常简单,基本就这一句:1Main main = new Main().parseCommandLine(args);2. p...

2014-03-12 09:35:54 153

原创 jetty_dm

1.概述1. jetty的deploymentManager作用是帮助创建ContextHandler并加入到jetty的合适位置,以方便提供静态和动态的服务。比如,把某个位置的war包部署到jetty。2. deploymentManager一个主要功能是连接app Provider和applifecycle。3. 有两种典型的appProvider,一种是webappProvider...

2014-03-12 09:35:41 102

原创 java io

Java 的 I/O 类库的基本架构I/O 问题是任何编程语言都无法回避的问题,可以说 I/O 问题是整个人机交互的核心问题,因为 I/O 是机器获取和交换信息的主要渠道。在当今这个数据大爆炸时代,I/O 问题尤其突出,很容易成为一个性能瓶颈。正因如此,所以 Java 在 I/O 上也一直在做持续的优化,如从 1.4 开始引入了 NIO,提升了 I/O 的性能。关于 NIO 我们将在后面详细...

2014-03-12 09:35:25 75

原创 http 请求流程

 我们来看当我们在浏览器输入http://www.mycompany.com:8080/mydir/index.html,幕后所发生的一切。首先http是一个应用层的协议,在这个层的协议,只是一种通讯规范,也就是因为双方要进行通讯,大家要事先约定一个规范。1.连接 当我们输入这样一个请求时,首先要建立一个socket连接,因为socket是通过ip和端口建立的,所以之前还有一个DNS...

2014-03-11 11:15:02 120

原创 Merkle Tree

  A Merkle tree is a hash tree where leaves are hashes of the values of individual keys. Parent nodes higher in the tree are hashes of their respective children. The principal advantage of Merk...

2014-03-11 11:14:45 146

原创 布隆过滤器

布隆过滤器 (Bloom Filter)是由Burton Howard Bloom于1970年提出,它是一种space efficient的概率型数据结构,用于判断一个元素是否在集合中。在垃圾邮件过滤的黑白名单方法、爬虫(Crawler)的网址判重模块中等等经常被用到。哈希表也能用于判断元素是否在集合中,但是布隆过滤器只需要哈希表的1/8或1/4的空间复杂度就能完成同样的问题。布隆过滤器可以插入...

2014-03-11 11:14:33 107

原创 Google Collections Library

Multimap是guava中一个有用的工具类,下面我来介绍一下。 由来: 你是不是经常需要一个这样的数据结构:Java代码  Map<String,List<MyClass>> myClassListMap test2                                 = new HashMap<String,List&...

2014-03-11 11:14:19 107

原创 BiMaps

BiMap BiMap是一个有用的集合类型,很简单,它就是一个双向的映射。 反向转换一个Map 一个普通的map是一个key/value的集合,你可以使用key来查询 value,例如,我来创建一个字段:Java代码  Map<String,String> britishToAmerican =      Maps.newHashMap();   ...

2014-03-11 11:14:09 85

原创 Google Guava Splitter 对比 Apache StringUtils

Guava Splitter vs StringUtils 最近写了关于apache commons的StringUtils提供的常用功能介绍,见链接(http://vipcowrie.iteye.com/blog/1513017),但是我们知道google的guava也提供了一些字符串处理的常见功能,所以,我在本文将对两者的字符串分割函数做一次比较详细的对比(结果比较surprise)。 区别...

2014-03-10 11:07:22 198

原创 ANTLR实现的SQL解析器 - OQL

OQL使用ANTLR写了个SQL解析器,这样ORM的基本功能就比较完整了。几天的时间比较仓促,所以对于最终目标,还只能算是个雏形。总体状况使用SQL解析器的主要优点:1. 基于解析之后的语法树提供用户操作接口,灵活性非常好,因为达到了对SQL每一部分的完整控制。2. 对数据库的适应性。   首先可以采用标准SQL,以及部分封装好的特性(例如分页)、函数(例如主要数据库都支持的函数,但语法有一定差...

2014-03-10 11:07:10 1981

原创 OQL中的Name Resolver, Mapping Resolver

OQL中的两个概念对象case 1: 把属性替换为列名,对象替换为表名<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /...

2014-03-10 11:06:57 81

原创 avro和thrift对比

 Apache Avro 与 Thrift 比较Avro和Thrift都是跨语言,基于二进制的高性能的通讯中间件. 它们都提供了数据序列化的功能和RPC服务. 总体功能上类似,但是哲学不一样. Thrift出自Facebook用于后台各个服务间的通讯,Thrift的设计强调统一的编程接口的多语言通讯框架. Avro出自Hadoop之父Doug Cutting, 在Thrift已经相...

2014-03-10 11:06:45 248

原创 mysql+drbd+heartbeat实现高可用性

本文原址:http://bbs.yahunet.com/thread-1661-1-1.html转载请注明!1,什么是DRBDDRBD(Distributed Replicated Block Device),DRBD 号称是 "网络 RAID",开源软件,由 LINBIT 公司开发。2,DRBD的主要功能DRBD 实际上是一种块设备的实现,主要被用于Linux平台下的高可用(HA)方案之中。...

2014-03-10 11:06:35 78

原创 Heartbeat2+DRBD

Prerequisites- Setup Minimal CentOS 5- be sure that both nodes can resolve correctly names (either through dns or /etc/hosts)- yum update (as usual … )- yum install heartbeat drbd kmod-drbd (avail...

2014-03-09 14:14:58 78

原创 Heartbeat+DRBD+mysql高可用方案

1.1方案简介本方案采用Heartbeat双机热备软件来保证数据库的高稳定性和连续性,数据的一致性由DRBD这个工具来保证。默认情况下只有一台mysql在工作,当主mysql服务器出现问题后,系统将自动切换到备机上继续提供服务,当主数据库修复完毕,又将服务切回继续由主mysql提供服务。1.2方案优缺点优点:安全性高、稳定性高、可用性高,出现故障自动切换,缺点:只有一台服务器提供...

2014-03-09 14:14:47 133

原创 Lvs+Keepalived+Mysql单点写入主主同步高可用方案

1.1方案简介Lvs+keepalived作为目前比较流行的高可用解决方案,lvs提供负载均衡,keepalived作为故障转移,提高系统的可用性。但是一般的mysql高可用为了实现mysql数据的一致性,一般都是采用单点写入,本方案采用keepalived中的sorry_server来实现写入数据库为单点的需求。本方案实现的功能是当网络有问题、mysql有问题、服务器宕机、keepaliv...

2014-03-09 14:14:35 68

原创 Lvs+Keepalived+Mysql单点写入读负载均衡主主同步高可用方案

1.1方案简介Lvs+keepalived作为目前比较流行的高可用解决方案,lvs提供负载均衡,keepalived作为故障转移,提高系统的可用性。但是一般的mysql高可用为了实现mysql数据的一致性,一般都是采用单点写入,本方案采用keepalived中的sorry_server来实现写入数据库为单点的需求,读负载均衡通过lvs实现,读能自由的实现负载均衡和故障切换。本方案实现的功能...

2014-03-09 14:14:23 74

原创 MMM高可用mysql方案

1.1方案简介MMM即Master-Master Replication Manager for MySQL(mysql主主复制管理器)关于mysql主主复制配置的监控、故障转移和管理的一套可伸缩的脚本套件(在任何时候只有一个节点可以被写入),这个套件也能对居于标准的主从配置的任意数量的从服务器进行读负载均衡,所以你可以用它来在一组居于复制的服务器启动虚拟ip,除此之外,它还有实现数据备份、...

2014-03-09 14:14:13 100

原创 设计模式之不变模式(Immutable Pattern)分析

主要介绍编写不变类的主意事项:归纳一下设计不变类的 5 条规则: 1. 不提供任何修改对象的方法。2. 保证没有任何一个方法会被覆盖。3. 所有的域都是 final 的。 4. 所有的域都是 private 的。 5. 如果不变类内部包括可变的子对象,保证它绝对不会被其他代码获取引用。 实例:/** * @author Peter Wei * */publi...

2014-03-06 10:55:02 118

原创 数据库Sharding的基本思想和切分策略

关于Mysql Sharding的基本思想和切分策略 一、基本思想      Sharding的基本思想就要把一个数据库切分成多个部分放到不同的数据库(server)上,从而缓解单一数据库的性能问题。不太严格的讲,对于海量数据的数据库,如果是因为表多而数据多,这时候适合使用垂直切分,即把关系紧密(比如同一模块)的表切分出来放在一个server上。如果表并不多,但每张表的数据非常多,这...

2014-03-06 10:54:46 66

原创 数据库分库分表(sharding)系列(一) 拆分实施策略和示例演示

切分演示1  第一部分:实施策略  图1.数据库分库分表(sharding)实施策略图解(点击查看大图)1.准备阶段对数据库进行分库分表(Sharding化)前,需要开发人员充分了解系统业务逻辑和数据库schema.一个好的建议是绘制一张数据库ER图或领域模型图,以这类图为基础划分shard,直观易行,可以确保开发人员始终保持清醒思路。对于是选择数据库ER图还是领...

2014-03-06 10:54:33 67

原创 数据库分库分表(sharding)系列(二) 全局主键生成策略

实例2  第一部分:一些常见的主键生成策略 一旦数据库被切分到多个物理结点上,我们将不能再依赖数据库自身的主键生成机制。一方面,某个分区数据库自生成的ID无法保证在全局上是唯一的;另一方面,应用程序在插入数据之前需要先获得ID,以便进行SQL路由。目前几种可行的主键生成策略有:1. UUID:使用UUID作主键是最简单的方案,但是缺点也是非常明显的。由于UUID非常的长,除占...

2014-03-06 10:54:23 78

原创 数据库分库分表(sharding)系列(三) 关于使用框架还是自主开发以及sharding实现层面的考量...

 一、sharding逻辑的实现层面 从一个系统的程序架构层面来看,sharding逻辑可以在DAO层、JDBC API层、介于DAO与JDBC之间的Spring数据访问封装层(各种spring的template)以及介于应用服务器与数据库之间的sharding代理服务器四个层面上实现。 图1. Sharding实现层面与相关框架/产品在DAO层实现...

2014-03-06 10:54:14 82

原创 数据库分库分表(sharding)系列(四) 多数据源的事务处理

分布式事务这是最为人们所熟知的多数据源事务处理机制。本文并不打算对分布式事务做过多介绍,读者可参考此文:关于分布式事务、两阶段提交、一阶段提交、Best Efforts 1PC模式和事务补偿机制的研究 。在这里只想对分布式事务的利弊作一下分析。优势:1. 基于两阶段提交,最大限度地保证了跨数据库操作的“原子性”,是分布式系统下最严格的事务实现方式。2. 实现简单,工作量小。由于多数应用服务器...

2014-03-05 15:42:24 71

原创 数据库分库分表(sharding)系列(五) 一种支持自由规划无须数据迁移和修改路由代码的Sharding扩容方案...

 版权声明:本文由本人撰写并发表于2012年9月份的《程序员》杂志,原文题目《一种支持自由规划的Sharding扩容方案——主打无须数据迁移和修改路由代码》,此处作为本系列的第五篇文章进行转载, 本文版权归《程序员》杂志所有,未经许可不得转载! 作为一种数据存储层面上的水平伸缩解决方案,数据库Sharding技术由来已久,很多海量数据系统在其发展演进的历程中都曾经历过分库分表的Sha...

2014-03-05 15:42:15 97

hive和hbase整合

hive 和 hbase 整合经验。希望对您有所帮助。谢谢。

2013-06-27

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

TA关注的人

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