Alpha's 学习笔记

私信 关注
AlphaWang
码龄13年
  • 1,297,870
    被访问量
  • 79
    原创文章
  • 6,919
    作者排名
  • 730
    粉丝数量
  • 于 2007-11-02 加入CSDN
获得成就
  • 获得265次点赞
  • 内容获得269次评论
  • 获得778次收藏
荣誉勋章
兴趣领域
  • #后端
    #架构#Spring#Java#Redis#Spring Boot
TA的专栏
  • 【Java SE】
    33篇
  • 【Effective Java】
    17篇
  • 【Database】
    3篇
  • 【Design Patterns】
    19篇
  • 【OSGi】
    10篇
  • 【JBoss】
    7篇
  • 【SSH】
    7篇
  • 【WEB】
    6篇
  • 【Build】
    4篇
  • 【Other】
  • 分布式
    2篇
  • 最近
  • 文章
  • 资源
  • 问答
  • 课程
  • 帖子
  • 收藏
  • 关注/订阅

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...
原创
279阅读
1评论
0点赞
发布博客于 2 年前

Redis 知识图谱

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

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

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

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

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

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
原创
3446阅读
0评论
0点赞
发布博客于 7 年前

【Guava】Joiner、Splitter源码

Joiner作用:将多个对象拼接成一个字符串示例        Joiner joiner = Joiner.on(";").skipNulls();        return joiner.join(bpeApplication, pipeline, deviceName, field);源码  /**   * Returns a
原创
5017阅读
0评论
0点赞
发布博客于 8 年前

【Guava的用法】2. collection

创建List、MapBefore:MapString, MapLong, ListString>>> map=  new  HashMapString, MapLong,ListString>>>();   After:(JDK7将实现该功能)MapString, MapLong, ListString>>> map= Maps.newHas
原创
8359阅读
0评论
1点赞
发布博客于 8 年前

【Guava的用法】1. base

JoinerGuava中Joiner的用法: int [] numbers = {  1 ,  2 ,  3 ,  4 ,  5  };  String numbersAsString = Joiner.on( ";" ).join(Ints.asList(numbers));   另一种写法: String numbersAsStrin
原创
3447阅读
0评论
0点赞
发布博客于 8 年前

ClassLoader源码分析

层次结构和类图ClassLoader层次结构:   UML类图:  sun.misc.Launcher.ExtClassLoader sun.misc.Launcher.AppClassLoader 显式加载类在代码中显式加载某个类,有三种方法:this.getClass().getClassLoader().loadClass()
原创
12927阅读
1评论
5点赞
发布博客于 8 年前

Java集合类的UML类图

网上能搜到很多Java集合类的类图,但是感觉都不是非常明晰。于是自己绘制了一份。
原创
15226阅读
5评论
9点赞
发布博客于 8 年前

【设计模式】Builder模式

定义Separate the construction of a complex object from its representation so that the same construction process can create different representations.将复杂对象的创建过程与该对象的表示分离开来,以便让同一个创建过程可以创建出不同的表示。类图
原创
3274阅读
0评论
1点赞
发布博客于 8 年前

【OSGi】Service

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

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

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

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 实例。
原创
53045阅读
1评论
9点赞
发布博客于 8 年前

HashMap实现原理分析

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

【NIO】2. Selector

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

【NIO】1. Channel、Buffer

基本上,所有的 IO 在NIO 中都从一个Channel 开始。Channel 有点象流。数据可以从Channel读到Buffer中,也可以从Buffer 写到Channel中。Java NIO的通道类似流,但又有些不同: 既可以从通道中读取数据,又可以写数据到通道。但流的读写通常是单向的; 通道可以异步地读写; 通道中的数据总是要先读到一个Buffer,或者总是要从一个Buffer中写入。
翻译
5289阅读
0评论
0点赞
发布博客于 8 年前

【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
原创
12320阅读
0评论
1点赞
发布博客于 8 年前

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
原创
6629阅读
1评论
0点赞
发布博客于 8 年前

Javascript 作用域和变量提升

http://justjavac.com/javascript/2013/06/12/declaration-in-javascript.html  下面的程序是什么结果? var foo = 1;  function bar() {      if (!foo) {          var foo = 10; 
转载
2832阅读
0评论
0点赞
发布博客于 8 年前

【OSGi】OSGi类加载流程

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

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

为什么说Java缺少对高级模块化的支持?Java确实以面向对象的方式提供了某种程度的模块化,但它从未考虑支持粗粒度的模块化编程。
原创
9843阅读
2评论
4点赞
发布博客于 8 年前

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
原创
8625阅读
0评论
3点赞
发布博客于 8 年前

基于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
原创
2605阅读
0评论
0点赞
发布博客于 8 年前

【OSGi】OSGi生命周期

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

Firefox启动太慢?用speedyfox!

我的Firefox一直启动很慢,今天发现一款工具:speedyfox,运行之后速度提升显著!下载:http://www.crystalidea.com/speedyfox它还能提升chrome、skype的启动速度,是一款很棒的工具!
原创
1964阅读
0评论
0点赞
发布博客于 8 年前

【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
原创
6536阅读
0评论
1点赞
发布博客于 8 年前

Mixed Content Blocking导致Firefox23 无法显示iframe

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

【OSGi】OSGi依赖解析

OSGi框架执行的最重要的任务之一就是自动化管理依赖,也就是bundle依赖解析。OSGi框架的优势之一就是支持并行的多版本。如果导入bundle可以找到多个对应的导出bundle,OSGi如何确定使用哪个导出bundle呢?
原创
4718阅读
0评论
1点赞
发布博客于 8 年前

【Java线程】volatile的适用场景

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

【OSGi】2. bundle与模块化

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

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

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

【OSGi】OSGi框架的三个层次

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

【Java线程】Java线程池ExecutorService

// 创建可以容纳3个线程的线程池 ExecutorService fixedThreadPool = Executors.newFixedThreadPool(3); // 线程池的大小会根据执行的任务数动态分配 ExecutorService cachedThreadPool = Executors.newCachedThreadPool(); // 创建单个线程的线程池,
原创
51619阅读
6评论
15点赞
发布博客于 8 年前

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

JDK代码的可取之处。
原创
4134阅读
0评论
3点赞
发布博客于 8 年前

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

JDK代码的问题。
原创
4501阅读
5评论
1点赞
发布博客于 8 年前

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

public类永远不要暴露其可变的字段。而public类暴露其不可变字段随然是有问题,但危害性要小一些。然而,package-private或者private的嵌套类暴露其字段则是可行的,无论该字段是可变还是非可变。
翻译
1609阅读
0评论
0点赞
发布博客于 8 年前

【Java线程】Callable和Future

Callable和Future一个产生结果,一个拿到结果。Callable接口类似于Runnable,但是Runnable不会返回结果,而Callable可以返回结果,这个返回值可以被Future拿到,也就是说,Future可以拿到异步执行任务的返回值。
原创
12753阅读
3评论
4点赞
发布博客于 8 年前

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

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

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

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

【JUnit】EasyMock用法总结

使用EasyMock的总体步骤1、生成Mock接口IService mockService = EasyMock.createMock("name", IService.class);如果要mock对象,而不是接口,应该使用class extension:org.easymock.classextension.EasyMock如果要mock多个接口,最好使用Mo
原创
21463阅读
0评论
1点赞
发布博客于 8 年前

【JUnit】CreateProcess error=87, The parameter is incorrect错误解决:classpath太长导致程序无法启动

今天在eclipse中运行一个unittest的时候,运行失败,报错:Exception occurred executing command line. Cannot run program... CreateProcess error=87, The parameter is incorrect谷歌说是因为classpath太长的缘故,WINDOW官网上讲:the max com
原创
6924阅读
1评论
1点赞
发布博客于 8 年前

【Hibernate】Hibernate如何映射枚举类型

问题:Java BO类Gender是枚举类型,想在数据库中存成字符串格式,如何编写hbm.xml?public enum Gender{ UNKNOWN("Unknown"), MALE("Male"), FEMALE("Female"); private String key; private Gender(final String key) {
原创
10062阅读
1评论
0点赞
发布博客于 8 年前

【JBoss】JNDI与JBossNS

JNDI的作用JNDI是 Java 命名与目录接口(Java Naming and Directory Interface)。随着分布式应用的发展,远程访问对象访问成为常用的方法。虽然说通过Socket等编程手段仍然可实现远程通信,但按照模式的理论来说,仍是有其局限性的。RMI技术,RMI-IIOP技术的产生,使远程对象的查找成为了技术焦点。JNDI技术就应运而生。JNDI技术产生
原创
1161阅读
0评论
0点赞
发布博客于 8 年前

【Oracle】PL/SQL 非预定义异常、自定义异常处理、RAISE_APPLICATION_ERROR

抛出异常Oracle有三种类型的异常错误:1. 预定义(Predefined)异常ORACLE预定义的异常情况大约有24个。对这种异常情况的处理,无需在程序中定义,由ORACLE自动将其引发。2. 非预定义(Predefined)异常即其他标准的ORACLE错误。对这种异常情况的处理,需要用户在程序中定义,然后由ORACLE自动将其引发。3. 用户定义(User_def
原创
18128阅读
0评论
1点赞
发布博客于 8 年前

【Oracle】Oracle预定义的几种系统异常及其产生原因

命名的系统异常 产生原因 ACCESS_INTO_NULL 未定义对象 CASE_NOT_FOUND CASE 中若未包含相应的 WHEN ,并且没有设置 ELSE 时 COLLECTION_IS_NULL 集合元素未初始化 CURSER_ALREADY_OPEN
原创
1823阅读
0评论
0点赞
发布博客于 8 年前

【Oracle】PL/SQL 显式游标、隐式游标、动态游标

在PL/SQL块中执行SELECT、INSERT、DELETE和UPDATE语句时,ORACLE会在内存中为其分配上下文区(Context Area),即缓冲区。游标是指向该区的一个指针,或是命名一个工作区(Work Area),或是一种结构化数据类型。在每个用户会话中,可以同时打开多个游标,其数量由数据库初始化参数文件中的OPEN_CURSORS参数定义。对于不同的SQL语句,游标的使用
原创
14959阅读
1评论
2点赞
发布博客于 8 年前

【设计模式】12. 代理模式

定义 Proxy pattern provide a surrogate or  placeholder for another object to control access to it.代理模式为其他对象提供一个(替身)或(占位符)以控制对这个对象的访问。所谓控制访问,例如:远程代理控制访问远程对象虚拟代理控制访问创建开销大的对象保护代理基于权限控制对资源的访
原创
2450阅读
1评论
1点赞
发布博客于 8 年前

【Java线程】SwingWorker的用法

Swing应用程序员常见的错误是误用Swing事件调度线程(Event DispatchThread,EDT)。他们要么从非UI线程访问UI组件;要么不考虑事件执行顺序;要么不使用独立任务线程而在EDT线程上执行耗时任务,结果使编写的应用程序变得响应迟钝、速度很慢。耗时计算和输入/输出(IO)密集型任务不应放在SwingEDT上运行。发现这种问题的代码并不容易,但Java SE6提供了java
原创
37363阅读
5评论
21点赞
发布博客于 8 年前

【Java线程】Swing事件分发线程EDT与SwingUtilities.invokeLater

在Swing程序中,经常能看到如下这种代码:SwingUtilities.invokeLater(new Runnable(){ @Override public void run() { textField1.setText("element changed!"); textField1.setForeGround(Color.RED
原创
11876阅读
2评论
12点赞
发布博客于 8 年前

【Hibernate】Hibernate常见方法的对比

一、三种状态对于hibernate,它的对象有三种状态,transient、persistent、detachedpersistent对象(持久化状态):同Hibernate的session有关联的对象是persistent对象,通过get和load等得到的对象都是persistent)。对这种对象进行的所有修改都会按照事先设定的刷新策略,反映到数据库之中,也即,可以在
原创
1348阅读
0评论
0点赞
发布博客于 8 年前

【Hibernate】Hibernate中save、persist和saveOrUpdate有何不同?

http://javarevisited.blogspot.tw/2012/09/difference-hibernate-save-vs-persist-and-saveOrUpdate.html    所有这三个方法,也就是save()、saveOrUpdate()和persist()都是用于将对象保存到数据库中的方法,但其中有些细微的差别。例如,save()只能INSERT记录,
原创
14131阅读
0评论
1点赞
发布博客于 8 年前

【Hibernate】Hibernate中的get和load有何不同?

http://javarevisited.blogspot.tw/2012/07/hibernate-get-and-load-difference-interview-question.html最大的差别:检索策略不同get:如果Session缓存中没有相关对象,get会立即访问数据库;返回一个被完全初始化的对象;可能涉及多次数据库调用。——session.get()
原创
1499阅读
0评论
0点赞
发布博客于 8 年前

【Effective Java】Ch3_Methods:Item12_考虑实现Comparable接口

与本章讨论的其他方法不同,compareTo方法并不是在Object类中声明的。相反,它是Comparable接口中的唯一方法。它与Object的equals方法有点类似,但它不仅仅是简单地进行相等性比较,还能执行顺序比较,同时它还是个泛型。类实现Comparable接口后,就表明其实例拥有自然顺序。若要对实现了Comparable接口的对象数组进行排序,只需要执行:Arrays.sort
翻译
1464阅读
0评论
1点赞
发布博客于 8 年前

【JBoss】5. 保护Web应用程序

配置Web安全web.xml如下例,注意注释部分:   dispatcher Only allows users with the role WebAdmin  to access the Archive Web Administration pages
原创
1254阅读
0评论
0点赞
发布博客于 8 年前

【设计模式】11. 状态模式

引子考虑模拟一个电梯类,实现其open()行为时,需要首先判断电梯当前处于什么状态,如果是stop状态,可以开门;如果是running状态,则不允许开门。——因为电梯可能有多个状态,导致其行为方法中出现了很多条件判断逻辑定义Allow an object to alter its behavior when its internal state changes. The
原创
1282阅读
0评论
1点赞
发布博客于 8 年前

【Effective Java】Ch3_Methods:Item11_谨慎重写clone()

Cloneable接口的目的是作为对象的一个mixin接口,表明对象允许克隆;但这个目的没有达到。其主要缺点是,Cloneable缺少一个clone()方法,而Object.clone()是受保护的。通常,实现接口是为了表明类可以为它的客户做些什么;而Cloneable却是改变了超类中受保护方法的行为。Object.clone()定义的约定:/**创建并返
原创
1328阅读
0评论
1点赞
发布博客于 8 年前

【JBoss】4. 配置JBoss Web服务器

JBoss Web服务器建立在Apache Tomcat 6.0的基础上,结合了Tomcat的多功能性和Apache HTTP服务器的速度。配置URL路径针对客户端传来的一个URL(协议 :// 域名 : 端口号 / 上下文路径 / 资源),JBoss Web服务器如何确定调用哪个应用程序?1、server.xml配置连接器:协议、端口号配置文件:\
原创
5885阅读
1评论
0点赞
发布博客于 8 年前

【Effective Java】Ch3_Methods:Item10_始终重写toString()

虽然java.lang.Object类提供了toString方法的一个实现,但是其返回的字符串通常不是类的用户所期望看到的。它包含类的名称,接着是一个@符号,然后是哈希码的无符号十六进制表示,例如“PhoneNumber@163b91”。toString的通用约定指出返回的字符串必须“简洁而信息丰富,并易于阅读”。尽管可能有人说“PhoneNumber@163b91”算得上是简洁和易于阅读,但是与
翻译
1113阅读
0评论
0点赞
发布博客于 8 年前

【设计模式】10. 组合模式

引子考虑这么一个场景:需要某种树形结构来容纳菜单、子菜单、菜单项;并能在每个菜单的每个项之间游走;定义Composite Pattern (又叫 部分-整体模式,Part-Whole),composite objects into tree structures to represent part-whole hierarchies. Composite lets
原创
1195阅读
0评论
0点赞
发布博客于 8 年前

【Effective Java】Ch3_Methods:Item9_重写equals时总要重写hashCode()

一个常见的bug原因是没有覆盖hashCode方法。在每个覆盖了equals的类中,都必须覆盖hashCode。如果不这样,则会导致违反Object.hashCode()的通用约定,导致在与所有基于哈希码的集合无法一起正常工作,包括HashMap、HashSet、Hashtable。        如下是Object规范中的通用约定:在程序的一次执行中只要equals方法所用到的信息没
翻译
1183阅读
0评论
1点赞
发布博客于 8 年前

【设计模式】9. 迭代器模式

引子例如Waitress类要遍历打印两种菜单,一种是基于ArrayList,一种是基于数组;则Waitress需要对他们分别用两个不同的逻辑来遍历。定义Provide a way to access the elements of an aggregate object sequentially without exposing its underlying represe
原创
1137阅读
0评论
2点赞
发布博客于 8 年前

【JBoss】3. JBoss SX安全框架

JBoss SXJBoss使用JBoss SX框架来确保应用程序安全。它建立在Java身份验证和授权服务的顶层(JAAS,Java Authentication and Authorization Service)。当JBoss接收到请求时,目标应用程序不需要知道基本安全数据库的位置或访问方式;请求被传递到名为“安全域”的JBoss SX组件中,这是一种用来保护所有对组件的
原创
1489阅读
0评论
1点赞
发布博客于 8 年前

【AngularJS】 1. Angular JS的五大特性

AngularJS是由Google创建的一种JS框架,使用它可以扩展应用程序中的HTML词汇,从而在web应用程序中使用HTML声明动态内容。AngularJS可以让你扩展HTML的语法,以便清晰、简洁地表示应用程序中的组件,并允许将标准的HTML作为你的模板语言,AngularJS可以通过双向数据绑定自动从拥有JavaScript对 象(模型)的UI(视图)中同步数据。特性一
原创
9140阅读
0评论
0点赞
发布博客于 8 年前

【设计模式】8. 策略模式

定义Define a family of algorithms, encapsulate each one, and make them interchangeable.定义一组算法,将每个算法封装起来,并且使他们之间可以互换。类图Strategy:抽象策略角色策略、算法家族的抽象,通常为接口。定义每个算法必须具有的方法和属性。public interf
原创
1160阅读
0评论
1点赞
发布博客于 8 年前

【JBoss】2. 应用程序部署

在JBoss中部署应用程序JBoss使用的是一种插件部署体系结构,独立的部署器负责部署不同类型的应用程序,使得部署体系结构模块化。应用程序打包需要部署的应用程序,既可以是存档文件,也可以是已解压的目录。如果是存档文件,则会在server/xx/tmp/deploy下解压此存档文件。部署器部署应用程序的替换机制是使用jboss.system:s
原创
2132阅读
0评论
0点赞
发布博客于 8 年前

【JBoss】1. 微容器、JMX

JBoss微容器JBoss之前的版本是围绕JMX内核构建,应用服务器提供的服务 都被写成JMX内核的MBean。优点:是关系松散的体系结构,增删服务很容易JBoss4.0.3之后,开始向微容器体系结构转变,应用服务器提供的服务使用简单的POJO优点:不需要支持JMX,所以相对轻量级——但是,目前并非所有服务都已移植到微容器中,JMX内核仍然是定义和创建微容器的一个主
原创
2797阅读
1评论
0点赞
发布博客于 8 年前

【Hibernate】Hibernate的检索方式:OID、HQL、QBC

检索方式1)导航对象图检索方式customer.getOrders().iterator();2)OID检索方式session.get()、load();3)HQL检索方式// 创建Query对象Query q = session.createQuery("from Customer as c where c.name=:name");// 动态绑定
原创
1684阅读
0评论
0点赞
发布博客于 8 年前

【设计模式】7. 模板方法模式 -封装算法

引子例如有两个处理逻辑:泡茶、冲咖啡;他们的基本流程(算法)是相同的:煮开水、冲泡、倒进杯子、加入调料。只不过具体到个别步骤可能有差异。如果分成两个类来实现,就会存在重复代码。——可以将公共的部分(算法)提到父类中;由各个子类实现每个具体步骤。定义Define the skeleton of an algorithm in an operation, def
原创
1350阅读
0评论
0点赞
发布博客于 8 年前

【Hibernate】Hibernate的检索策略:lazy、fetch

检索策略1、类级别和关联级别 可选的检索策略默认值受影响的检索方法类级别立即检索延迟检索延迟Session.load()——Session.get()/Query.list()都会立即检索关联级别立即检索延迟检索迫切左外连接检索延迟Session.load()/get()Query(注意
原创
1480阅读
0评论
2点赞
发布博客于 8 年前

【设计模式】6. 命令模式

定义Encapsulate a request as an object, thereby letting you parameterize clients with different requests, queue or log requests, and support undoable operations.将请求封装成对象,以便使用不同的请求、队列、或日志将客户端参数化,同时提供
原创
1129阅读
0评论
0点赞
发布博客于 8 年前

【Maven】Maven部署Web项目报错webxml attribute is required

webxml attribute is required问题mvn install一个web项目时,报错如下:[ERROR] Failed to execute goal org.apache.maven.plugins:maven-war-plugin:2.1.1:war (default-war) on project com.alpha.webapp: Error asse
原创
30008阅读
0评论
0点赞
发布博客于 8 年前

【Eclipse RCP】1. 一个简单的RCP程序示例

创建第一个RCP项目New - Plugin Project设置其ID、版本号、名称取消选择Generate an activator将Rich Client Application区域设为Yes选择Hello RCP模板生成的项目结构如下:运行自动创建的代码会生成一个空界面,运行结果如图:代码
原创
3544阅读
1评论
1点赞
发布博客于 8 年前

【设计模式】5. 单例模式(以及多线程、无序写入、volatile对单例的影响)

单例模式http://www.ibm.com/developerworks/cn/java/j-dcl.html定义:        Ensure a class has only one instance, and provide a global point of access to it.        确保某个类只有一个实例,并提供一个全局访问点。类图:
原创
4411阅读
2评论
5点赞
发布博客于 8 年前

【JMX】8. JBoss中的JMX实现

前面都是用JDK自带的JMX实现来写的MBean,JMX的实现不独SUN一家,JBOSS也有自己的JMX实现。如果你使用JBOSS来做WEB服务器,那么基于JBOSS的实现来写MBean,是一个不错的选择。基于JBoss的MBean和基于SUN的MBean有什么不同吗?有一些不同之外,但绝大部份都一样。  HelloWorld实例1、准备工作  JBOSS实现了
转载
2296阅读
1评论
0点赞
发布博客于 8 年前

【JMX】7. 连接MBean:Java代码

前面用Html、jconsole等方法连接上了MBeanServer,并能够通过这些界面来操纵MBean。但有时我们需要不借助这些客户端,而是在自己的程序来操纵这些MBean,这就要求我们知道如何在代码里连接MBean。客户端代码如下:public class Client { public static void main(String[] args) throws
转载
2682阅读
0评论
0点赞
发布博客于 8 年前

【JMX】6. 连接MBean:JConsole

前面所有看效果都是通过Html网页来看的。JDK5.0自带了一个jmx客户端,叫jconsole,位于c:\jdk\bin\jconsole.exe。我们来用用这个客户端来连接Mbean Server。 1)vm参数方式 1、还是用第一篇的那个HelloAgent,修改HelloAgent,将第一句:MBeanServer server = MBeanServerFactory
转载
2324阅读
0评论
0点赞
发布博客于 8 年前

【JMX】5. 模型MBean

复习一共有四种MBean:标准MBeans(Standard MBeans)设计和实现是最简单的,这类MBean使用自己的方法名作为管理接口;——在前一篇中的Hello、HelloMBean就是一个标准MBeans(Standard MBeans)动态MBeans(Dynamic MBeans)必须实现一个指定的接口,由于动态MBeans在运行期间暴露它们的管理接口,因此更为灵活; 开
转载
1313阅读
0评论
0点赞
发布博客于 8 年前

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

用Apache的commons-modeler辅助开发JMX时,必须的jar包。
zip
发布资源于 8 年前

【JMX】4. 用Apache的commons-modeler辅助开发JMX

前面各章中,每一个MBean都要有一个接口,比如前面的Hello要有一个HelloMBean接口。要多维护一个接口,的确是件麻烦的事。        Apache的commons-modeler利用JMX中的动态MBean原理很好的解决了这一问题,commons-modeler使用得我们可以只写Hello,而不用写HelloMBean这个接口。不过这是有代价的,它要求我们写一个mbean的xm
转载
1244阅读
0评论
0点赞
发布博客于 8 年前

【JMX】3. 动态MBean

复习一共有四种MBean:标准MBeans(Standard MBeans)设计和实现是最简单的,这类MBean使用自己的方法名作为管理接口;——在前一篇中的Hello、HelloMBean就是一个标准MBeans(Standard MBeans)动态MBeans(Dynamic MBeans)必须实现一个指定的接口,由于动态MBeans在运行期间暴露它们的管理接口,因此更为灵活;
转载
1886阅读
0评论
0点赞
发布博客于 8 年前

【JMX】2. JMX通知模型:Notification

复习JMX构架中的各层及相关的组件工具层(Instrumentation Level)    (a) MBeans(标准的,动态的,开放的和模型MBeans)    (b) 通知模型:Notification、NotificationListener等类    (c) MBean元数据类:Attribute、Opreator等类 代理层(Agent Level)
转载
2898阅读
0评论
1点赞
发布博客于 8 年前

【JMX】1. 什么是JMX、JDK中的JMX实现

http://damies.iteye.com/blog/51788什么是JMXJMX        即 Java Management Extensions   Java管理扩展,是一个为应用程序植入管理功能的框架MBean   即 managed beans                         被管理的Beans举一个应用实例:在一个系统中常常会有一些配
转载
3879阅读
0评论
0点赞
发布博客于 8 年前

【Effective Java】Ch3_Methods:Item8_重写equals方法时遵循通用约定

虽然Object类是一个具体类,但它主要还是用于扩展。因为其所有nonfinal方法(equals、hashCode、toString、clone以及finalize)都是为重写设计的,所以这些方法都有显式的通用约定。任何重写这些方法的类都有责任遵循这些通用约定;若未做到这一点,则其他依赖于这些约定的类就不能与之一起正常运作。        本章讲述何时如何覆盖Object中的nonfinal
翻译
1370阅读
0评论
2点赞
发布博客于 8 年前

【设计模式】4. 工厂方法模式、抽象工厂模式

简单工厂简单工厂不是一个设计模式,而是一种编程习惯。使用场景:当客户端需要实例化一个类,但究竟实例化哪个类,要在运行时由一些条件来决定。找出变化的方面(实例化哪个类),把他们从不变的部分分离出来,交由“简单工厂”完成。 public class PizzaStore{ SimplePizzaFactory factory; Public PizzaS
原创
1345阅读
0评论
0点赞
发布博客于 8 年前

【Maven】Maven Plugin示例:自己动手编写Maven插件

需求:在Maven编译项目的时候,统计代码量,即项目中的文件数目、代码行数,包括java文件和配置文件两种;其中配置文件(sql、xml、properties)代码行数/4 处理。创建项目:首先确保已安装m2eclipse插件:http://eclipse.org/m2e/eclipse - new - Maven Project,选择archetype = maven-a
原创
34012阅读
4评论
6点赞
发布博客于 8 年前

java.net.BindException: Address already in use: JVM_Bind 0.0.0.0:80

Q:Tomcat启动时日志报错java.net.BindException: Address already in use: JVM_Bind 0.0.0.0:80用netstat -ano查看端口占用情况: Proto Local Address Foreign Address State PID TCP 0.
原创
4417阅读
0评论
0点赞
发布博客于 8 年前

【Effective Java】Ch2_创建销毁对象:Item7_避免使用finalize方法

Finalizer通常是不可预测的、危险的、不必要的。使用finalizer会导致不稳定的行为、低下的性能、以及可移植问题。Finalizer也有其可用之处,本文稍后会做介绍,但是作为一个首要法则,你必须避免使用finalizer。        C++程序员需要注意Java中的finalizer并不类似C++中的析构方法destructor。C++的析构方法是回收一个对象相关的资源的常用途径
翻译
2111阅读
0评论
0点赞
发布博客于 8 年前

【Java线程】Java内存模型总结

学习资料:http://www.infoq.com/cn/articles/java-memory-model-1Java的并发采用的是共享内存模型(而非消息传递模型),线程之间共享程序的公共状态,线程之间通过写-读内存中的公共状态来隐式进行通信。同步是显式进行的。程序员必须显式指定某个方法或某段代码需要在线程之间互斥执行。Java内存模型的抽象Java线程之间
原创
24634阅读
11评论
29点赞
发布博客于 8 年前

【设计模式】3. 装饰者模式

定义:        Attach additional responsibilities to an object dynamically keeping the same interface. Decorators provide a flexible alternative to subclassing for extending functionality.        动态地将
原创
2500阅读
0评论
0点赞
发布博客于 8 年前

【设计模式】2. 观察者模式

定义:        Define a one-to-many dependency between objects so that when one object changes state, all its dependents are notified and updated automatically.        定义了对象之间的一对多依赖(一个主题,多个观察者),这样
原创
1324阅读
0评论
1点赞
发布博客于 8 年前

【Effective Java】Ch2_创建销毁对象:Item6_消除无用的对象引用

当你从手工管理内存的语言(如C、C++)转到自动垃圾回收的语言后,编程工作会变得更加轻松,因为对象用完后会被自动回收。当你第一次经历自动垃圾回收的时候,会觉得不可思议。这容易给人一个印象:你无需考虑内存管理。其实不然。        【例】考虑下面这个简单的stack实现:// Can you spot the memory leak?public class Stack{ pr
翻译
1464阅读
0评论
1点赞
发布博客于 8 年前

【设计模式】1. 适配器模式、外观模式

适配器模式(Adapter Pattern)定义:        Convert the interface of a class into another interface clients expect. Adapter lets classes work together that couldn't otherwise because of incompatible
原创
1774阅读
0评论
1点赞
发布博客于 8 年前

【Effective Java】Ch2_创建销毁对象:Item5_避免创建不必要的对象

通常最好重用单个对象,而不是在每次需要时都创建一个功能完全一样的新对象。重用不仅更快而且更流行。如果对象是不可变的(Immutable,Item15),那它总是能被重用的。        看下面这个极端的反例:String s = new String("stringette"); // DON'T DO THIS!        这条语句每次执行的时候都会创建一个新的String
翻译
1265阅读
0评论
1点赞
发布博客于 8 年前

【Effective Java】Ch2_创建销毁对象:Item4_通过私有构造函数来强化不可实例化的能力

偶尔情况下,你会编写只包含静态方法和静态域的类。这种类的名声不太好,因为有些人滥用他们来避免面向对象编程,不过这种类确实有他们的用处。我们可以照java.lang.Math或java.util.Arrays的样子,用这种类将基本类型或数组上相关的方法组织起来;public class Arrays { public static void fill(long[] a, lo
翻译
909阅读
0评论
1点赞
发布博客于 8 年前

Effective Java:Ch2_创建销毁对象:Item4_通过私有构造函数来强化不可实例化的能力...

偶尔情况下,你会编写只包含静态方法和静态域的类。这种类的名声不太好,因为有些人滥用他们来避免面向对象编程,不过这种类确实有他们的用处。我们可以照java.lang.Math或java.util.Arrays的样子,用这种类将基本类型或数组上相关的方法组织起来;public class Arrays { public static void fill(long[] a, long...
原创
73阅读
0评论
0点赞
发布博客于 8 年前

【Effective Java】Ch2_创建销毁对象:Item3_通过私有构造函数或枚举类型来强化Singleton属性

所谓Singleton,是指仅能被实例化一次的类。Singleton通常代表本质上唯一的系统组件,例如窗口管理器或文件系统。让一个类成为Singleton就无法为Singleton替换模拟实现,除非它实现一个作为其类型的接口,所以会让其客户端难于测试。        JDK1.5之前,有两种方法可以实现Singleton,二者均基于让构造函数私有化,并导出一个公共静态成员来提供对唯一实例的访问
翻译
1516阅读
0评论
2点赞
发布博客于 8 年前

Effective Java:Ch2_创建销毁对象:Item3_通过私有构造函数或枚举类型来强化Singleton属性...

所谓Singleton,是指仅能被实例化一次的类。Singleton通常代表本质上唯一的系统组件,例如窗口管理器或文件系统。让一个类成为Singleton就无法为Singleton替换模拟实现,除非它实现一个作为其类型的接口,所以会让其客户端难于测试。 JDK1.5之前,有两种方法可以实现Singleton,二者均基于让构造函数私有化,并导出一个公共静态成员来提供对唯一实例的访问。在方法一中...
原创
79阅读
0评论
0点赞
发布博客于 8 年前

【Effective Java】Ch2_创建销毁对象:Item2_当构造函数参数过多时考虑使用builder

静态工厂和构造函数都有一个限制:可选参数数量很大时,他们都不能很好地扩展。考虑一下这个例子:用一个类来表示袋装食品上的营养成分标签,这些标签有几个必选字段:每份的含量、每罐的份数、每份的卡路里;还有超过20个可选字段:总脂肪含量、饱和脂肪含量、转化脂肪含量、胆固醇含量、钠含量等等。大多数产品只有少数几个可选字段是非零值。        你将为这种类编写怎样的构造函数或者静态工厂呢?程序
翻译
2194阅读
1评论
1点赞
发布博客于 8 年前

Effective Java:Ch2_创建销毁对象:Item2_当构造函数参数过多时考虑使用builder

静态工厂和构造函数都有一个限制:可选参数数量很大时,他们都不能很好地扩展。考虑一下这个例子:用一个类来表示袋装食品上的营养成分标签,这些标签有几个必选字段:每份的含量、每罐的份数、每份的卡路里;还有超过20个可选字段:总脂肪含量、饱和脂肪含量、转化脂肪含量、胆固醇含量、钠含量等等。大多数产品只有少数几个可选字段是非零值。 你将为这种类编写怎样的构造函数或者静态工厂呢?程序员习惯上会使用t...
原创
94阅读
0评论
0点赞
发布博客于 8 年前