自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(125)
  • 资源 (3)
  • 收藏
  • 关注

翻译 试译Google Dapper:Dapper, a Large-Scale Distributed Systems Tracing Infrastructure

最近在研究分布式链路追踪系统,Google的DAPPER当然是必读的论文了。目前网上能搜到一些中文翻译版,然而读下来感觉翻译比较生硬;这里试着基于前人的成果重新翻译一遍这个论文,权当是个人的学习笔记,如果同时能给其他人带来好处那更好了。如您发现有翻译错误,恳请提交github PR: https://github.com/AlphaWang/alpha-dapper-translation...

2019-04-11 10:01:51 8259 1

原创 学习JDK源码:编程习惯和设计模式

JDK代码的可取之处。

2013-07-26 17:01:10 4270

原创 学习JDK源码:可进一步优化的代码

JDK代码的问题。

2013-07-26 16:59:39 4604 5

原创 How to Verify If Resilience4j Circuit Breaker Works

Resilience4j is a widely-used library which inspired by Hystrix, it helps with building fault tolerance distributed systems. We are using its circuit breakder module to prevent a cascade of failures w...

2019-12-25 15:50:15 554 1

原创 Redis 知识图谱

原文发表于AlphaWang独立博客:http://alphawang.com/最近梳理了下 Redis 知识图谱,画了个脑图,涵盖了 Redis 数据类型、持久化机制、主从、哨兵、集群、应用及运维;具体见下图:...

2019-05-01 23:16:05 1867 3

原创 Is the Improvement of String.substring() in Java7 Really Reasonable?

String#substring()在Java6和Java7中的实现是不一样的。这是因为Java6的实现可能导致内存问题,所以Java7中为了改善这个问题修改了实现方式。那么Java7中的实现就真的合理吗?首先让我们来猜测一下,Java是如何实现substring功能的。由于String是不可变的,可能我们会猜测实现机制如下图:user icon​然而,这个图并不完全正确,或者

2014-12-23 17:31:12 3111

原创 Utility Classes Are Evil

A utility class is a class filled with static methods. It is usually used to isolate a "useful" algorithm. However, in an object-oriented world, utility classes are considered a very bad practice.The use of utility classes to be an antipattern. More speci

2014-09-18 17:28:12 3585

原创 【Guava】Joiner、Splitter源码

Joiner作用:将多个对象拼接成一个字符串示例        Joiner joiner = Joiner.on(";").skipNulls();        return joiner.join(bpeApplication, pipeline, deviceName, field);源码  /**   * Returns a

2013-12-27 15:57:59 5124

原创 【Guava的用法】2. collection

创建List、MapBefore:MapString, MapLong, ListString>>> map=  new  HashMapString, MapLong,ListString>>>();   After:(JDK7将实现该功能)MapString, MapLong, ListString>>> map= Maps.newHas

2013-12-27 15:56:52 8575

原创 【Guava的用法】1. base

JoinerGuava中Joiner的用法: int [] numbers = {  1 ,  2 ,  3 ,  4 ,  5  };  String numbersAsString = Joiner.on( ";" ).join(Ints.asList(numbers));   另一种写法: String numbersAsStrin

2013-12-27 15:54:55 3545

原创 ClassLoader源码分析

层次结构和类图ClassLoader层次结构:   UML类图:  sun.misc.Launcher.ExtClassLoader sun.misc.Launcher.AppClassLoader 显式加载类在代码中显式加载某个类,有三种方法:this.getClass().getClassLoader().loadClass()

2013-12-06 10:22:00 13451 1

原创 Java集合类的UML类图

网上能搜到很多Java集合类的类图,但是感觉都不是非常明晰。于是自己绘制了一份。

2013-11-26 15:41:27 16064 5

原创 【设计模式】Builder模式

定义Separate the construction of a complex object from its representation so that the same construction process can create different representations.将复杂对象的创建过程与该对象的表示分离开来,以便让同一个创建过程可以创建出不同的表示。类图

2013-11-17 16:26:08 3433

原创 【OSGi】Service

服务服务就是:为别人完成的工作。目的:是让别人为你工作,而不是试图自己做一切事情。和方法调用的区别:服务是指提供者及其使用者之间的一个契约,使用者不关心服务的具体实现,甚至不关心是谁提供的,只要遵守约定的契约即可。面向服务的设计方式鼓励用即插即用的方式来进行软件开发,这意味着在开发、测试、部署、维护过程中有更大的灵活性。接口+依赖注入Java中一般是基于接口编程的,然而除非我们知道具体的接口实现类,否则我们无法创建一个接口实例。传统Java可以通过依赖注入(Dependency Inje

2013-11-17 09:56:02 13837 5

翻译 【Effective Java】Ch4_Class:Item15_使可变性最小化

不可变类是指其实例不可被修改的类。实例中的所有信息都是在创建实例时提供的,并且在对象生命周期内保持不变。JDK中有许多这种不可变类,例如String、基本类型包装类、BigInteger、BigDecimal。不可变类有许多优点:易于设计、易于实现、易于使用。它们更不容易出错,并且更安全。

2013-11-07 10:45:10 4432

原创 ThreadLocal的正确用法

ThreaLocal的JDK文档中说明:ThreadLocal instances are typically private static fields in classes that wish to associate state with a thread。如果我们希望通过某个类将状态(例如用户ID、事务ID)与线程关联起来,那么通常在这个类中定义private static类型的ThreadLocal 实例。

2013-11-06 12:36:50 54834 1

原创 HashMap实现原理分析

HashMap其实也是一个线性的数组实现的,所以可以理解为其存储数据的容器就是一个线性数组。这可能让我们很不解,一个线性的数组怎么实现按键值对来存取数据呢?这里HashMap有做一些处理。  首先HashMap里面实现一个静态内部类Entry,其重要的属性有 key , value, next,从属性key,value我们就能很明显的看出来Entry就是HashMap键值对实现的一个基础bean,我们上面说到HashMap的基础就是一个线性数组,这个数组就是Entry[],Map里面的内容都保存在Ent

2013-11-05 15:23:28 452686 153

翻译 【NIO】2. Selector

Selector允许单线程处理多个Channel,能够检测一到多个Channel,并能够知晓通道是否为诸如读写事件做好准备。这样,一个单独的线程可以管理多个channel,从而管理多个网络连接。如果你的应用打开了多个连接(通道),但每个连接的流量都很低,使用Selector就会很方便。例如,在一个聊天服务器中。

2013-11-05 15:18:08 4993

翻译 【NIO】1. Channel、Buffer

基本上,所有的 IO 在NIO 中都从一个Channel 开始。Channel 有点象流。数据可以从Channel读到Buffer中,也可以从Buffer 写到Channel中。Java NIO的通道类似流,但又有些不同: 既可以从通道中读取数据,又可以写数据到通道。但流的读写通常是单向的; 通道可以异步地读写; 通道中的数据总是要先读到一个Buffer,或者总是要从一个Buffer中写入。

2013-11-05 15:15:36 5394

原创 【OSGi】Require-Bundle与Import-Package

Require-Bundle的作用Require-Bundle的缺点1、不知道究竟导入了哪些包2、导出包的bundle重构后,会影响导入bundle3、导致导入大量无用的包为什么引入Require-Bundle?Require-Bundle的作用Another kind of constraint that can be placed on a bundle i

2013-10-27 20:12:48 12912

原创 ThreadLocal的误用可能会导致OutOfMemoryError

推荐Java Code Geeks上的两篇文章:When and how to use a ThreadLocalhttp://www.javacodegeeks.com/2013/10/when-and-how-to-use-a-threadlocal.html As our readers might already have guessed, I deal w

2013-10-27 12:13:50 7215 1

转载 Javascript 作用域和变量提升

http://justjavac.com/javascript/2013/06/12/declaration-in-javascript.html  下面的程序是什么结果? var foo = 1;  function bar() {      if (!foo) {          var foo = 10; 

2013-10-27 09:06:48 2902

原创 【OSGi】OSGi类加载流程

OSGi每个模块都有自己独立的classpath。如何实现这一点呢?是因为OSGi采取了不同的类加载机制: OSGi为每个bundle提供一个类加载器,该加载器能够看到bundle Jar文件内部的类和资源; 为了让bundle能互相协作,可以基于依赖关系,从一个bundle类加载器委托到另一个bundle类加载器。

2013-10-19 21:29:37 17684 1

原创 【OSGi】OSGi如何解决Java模块化的不足

为什么说Java缺少对高级模块化的支持?Java确实以面向对象的方式提供了某种程度的模块化,但它从未考虑支持粗粒度的模块化编程。

2013-10-07 12:46:50 10010 2

原创 Promise in AngularJS

What's promiseAngular’s event system provides a lot of power to our Angular apps. One of the most powerful features that it enables is automatic resolution of promises.Promises are a method of res

2013-10-07 12:43:50 8726

原创 基于Equinox构建OSGi项目

几种OSGi框架Several independently implemented OSGi frameworks exist today, including four that are available as open source software.Equinox  is the most widely deployed OSGi framework today owing t

2013-10-07 11:07:43 2666

原创 【OSGi】OSGi生命周期

OSGi生命周期层有两种不同的作用: 在应用程序外部,定义了对bundle生命周期的相关操作。OSGi生命周期层允许在执行时,从外部安装、启动、更新、停止、卸载不同的bundle,进而定制应用的配置。 在应用程序内部,定义了bundle访问其执行上下文的方式,为bundle提供了一种与OSGi框架交互的途径以及一些执行时的便利条件。

2013-10-07 10:17:47 9312 4

原创 Firefox启动太慢?用speedyfox!

我的Firefox一直启动很慢,今天发现一款工具:speedyfox,运行之后速度提升显著!下载:http://www.crystalidea.com/speedyfox它还能提升chrome、skype的启动速度,是一款很棒的工具!

2013-09-27 09:29:14 2060

原创 【OSGi】OSGi与Maven、Eclipse PlugIn的区别

Maven也具有模块化系统的特征;但是它只是一个编译时工具,而不是运行时框架。Maven并不是OSGi的竞争者,而是OSGi的一个补充。然而Maven并没有解决JAR文件的缺点: 同样使用全局的classpath; 同样不能做到包级别的信息隐藏;而且pom.xml的格式与OSGi格式并不兼容。所以,如果用Maven编译OSGi系统,通常需要定义两遍metadata: 在pom.xml中定义Maven的metadata 在MANIFEST.MF中定义OSGi的metada

2013-09-16 21:50:48 6779

原创 Mixed Content Blocking导致Firefox23 无法显示iframe

前些天遇到了一个神奇的问题:有个网页包含了iframe,之前一直运行良好,但是Firefox升级到最新的23.0版本后,发现iframe内的内容变成空的了!查看元素iframe里只有<html><body></body></html>。其他浏览器都没有问题。原因是Firefox23默认阻止读取混合活动内容!

2013-09-14 21:53:59 13162

原创 【OSGi】OSGi依赖解析

OSGi框架执行的最重要的任务之一就是自动化管理依赖,也就是bundle依赖解析。OSGi框架的优势之一就是支持并行的多版本。如果导入bundle可以找到多个对应的导出bundle,OSGi如何确定使用哪个导出bundle呢?

2013-08-25 17:00:42 4967

原创 【Java线程】volatile的适用场景

Volatile 变量具有 synchronized 的可见性特性,但是不具备原子性。这就是说线程能够自动发现 volatile 变量的最新值。Volatile 变量可用于提供线程安全,但是只能应用于非常有限的一组用例:多个变量之间或者某个变量的当前值与修改后值之间没有约束。因此,单独使用 volatile 还不足以实现计数器、互斥锁或任何具有与多个变量相关的不变式(Invariants)的类(例如 “start <=end”)。出于简易性或可伸缩性的考虑,您可能倾向于使用 volatile 变量而

2013-08-19 17:32:00 43012 26

原创 【OSGi】2. bundle与模块化

模块层是OSGi框架的最基础层次,是OSGi其他部分的基础。1、模块定义:一个从逻辑上封装实现类的集合,一个基于实现类子集的可选公共API,一个对外部代码依赖关系的集合。package是Java提供的一种内建的模块化方式,但它有一些限制:http://blog.csdn.net/vking_wang/article/details/9735395以上讨论的都是“

2013-08-18 18:31:57 8624

原创 【Java线程】锁机制:synchronized、Lock、Condition

Lock可以实现synchronized的相同功能,它能以更优雅的方式处理线程同步问题。与互斥锁定相比,读-写锁定允许对共享数据进行更高级别的并发访问。虽然一次只有一个线程(writer 线程)可以修改共享数据,但在许多情况下,任何数量的线程可以同时读取共享数据(reader 线程)Condition可以替代传统的线程间通信,用await()替换wait(),用signal()替换notify(),用signalAll()替换notifyAll()。Condition的强大之处在于它可以为多个线程间建

2013-08-14 17:15:55 103367 22

原创 【OSGi】OSGi框架的三个层次

网络上很多OSGi的文章上来就Activator实例,看得云里雾里。要想了解OSGi,首先要知道为什么要用OSGi?它有哪些好处?首先要明确:Java缺少对高级模块化的支持。OSGi服务平台是专门针对Java对模块化支持不足的情况,由OSGi联盟定义的一个行业标准,它引入了一个面向服务的编程模型,被称作“VM中的SOA”Java模块化的不足为什么说Java缺少对高级模块化的

2013-08-04 12:26:48 15498 2

原创 【Java线程】Java线程池ExecutorService

// 创建可以容纳3个线程的线程池 ExecutorService fixedThreadPool = Executors.newFixedThreadPool(3); // 线程池的大小会根据执行的任务数动态分配 ExecutorService cachedThreadPool = Executors.newCachedThreadPool(); // 创建单个线程的线程池,

2013-07-30 17:56:14 52045 6

翻译 【Effective Java】Ch4_Class:Item14_在public类中应该使用访问方法而不是public域

public类永远不要暴露其可变的字段。而public类暴露其不可变字段随然是有问题,但危害性要小一些。然而,package-private或者private的嵌套类暴露其字段则是可行的,无论该字段是可变还是非可变。

2013-07-26 16:52:05 1672

原创 【Java线程】Callable和Future

Callable和Future一个产生结果,一个拿到结果。Callable接口类似于Runnable,但是Runnable不会返回结果,而Callable可以返回结果,这个返回值可以被Future拿到,也就是说,Future可以拿到异步执行任务的返回值。

2013-07-25 16:54:48 13111 3

原创 【REST】REST和JAX-RS相关知识介绍

REpresentational State Transfer;代表性状态传输、具象状态传输REST定义了应该如何正确地使用Web标准,例如HTTP和URI。REST并非标准,而是一种开发 Web 应用的架构风格,可以将其理解为一种设计模式。Java API for RESTful Web Services旨在定义一个统一的规范,使得 Java 程序员可以使用一套固定的接口来开发 REST 应用,避免了依赖于第三方框架。是一个Java编程语言的应用程序接口,支持按照 表象化状态转变 (REST)架构风格

2013-07-24 13:31:54 23347 2

翻译 【Effective Java】Ch4_Class:Item13_最小化类及其成员的可访问性

要区别一个模块是否设计良好,最重要的因素是,对于其他模块而言该模块隐藏其内部数据和其他实现细节的程度。设计良好的模块应该隐藏所有实现细节,将API与其实现清晰地隔离开来。这样,模块之间通过他们的API进行通信,而不必知道其他模块的内部工作情况。这个概念被称为信息隐藏(information hiding)或封装(encapsulation),是软件涉及的基本原则之一。

2013-07-09 17:57:06 1415

commons-modeler-2.0.1.jar + commons-logging-1.1.2-bin.zip

用Apache的commons-modeler辅助开发JMX时,必须的jar包。

2013-03-21

Eclipse快捷键整理

Eclipse常用的快捷键

2008-04-04

Java代码规范

Java代码规范,编写格式良好的代码

2008-04-04

空空如也

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

TA关注的人

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