自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原生AJAX-XMLHttpRequest详解

创建XMLHttpReuqest由于在IE7之前,IE不支持XMLHttpRequest,所以如果想要兼容IE7之前的版本,就需要做一些额外的工作来创建XMLHttpRequest对象。可以使用下面的代码来创建:function createXHR(){ //如果支持XMLHttpRequest,之间创建该对象 if (typeof XMLHttp...

2014-09-10 21:16:00 236

泛型-通配符的使用

泛型是一种表示类型约束的手段,比如某一泛型类Generic<T>,它表示的意思是:虽然我不知道T是什么类型,但是在Generic<T>中,所有的T必须是相同的类型。通配符就是使用问号来表示未知的类型,比如List<?>。通配符确实相当复杂,为了理解通配符必须抓住两点:Java的泛型是使用擦除来实现的,运行时不知道确切的类型;泛型的主要目的是增强类型的安全性,尤其...

2014-09-07 18:43:00 236

泛型-擦除实现的Java泛型

Java中的泛型不是语言内在的机制,而是后来添加的特性,这样就带来一个问题:非泛型代码和泛型代码的兼容性。泛型是JDK1.5才添加到Java中的,那么之前的代码全部都是非泛型的,它们如何运行在JDK1.5及以后的VM上?为了实现这种兼容性,Java泛型被局限在一个很狭窄的地方,同时也让它变得难以理解,甚至可以说是Java语言中最难理解的语法。擦除为了实现与非泛型代码的兼容,Java语言的泛...

2014-09-07 10:16:00 223

泛型-Java泛型基础

面向对象相对于面向过程而言,是软件领域的一个重大进步。面向对象的多态特性,使得系统具有了较好的扩展性,通常我们使用父类来代替具体的类型,在实际运行时,却可以使用子类的对象。Java又更进了一步,提倡面向接口的编程,我们指定接口而不是具体的实现类。这样的约束有时候还是太强,我们希望编写更通用的代码,使代码能够用运行于“某种不具体的类型”,而不是具体的接口或类。泛型的概念假设我们要实现一个类,...

2014-09-05 22:01:00 165

Java并发-ReentrantReadWriteLock源码分析

ReentrantLock实现了标准的互斥重入锁,任一时刻只有一个线程能获得锁。考虑这样一个场景:大部分时间都是读操作,写操作很少发生;我们知道,读操作是不会修改共享数据的,如果实现互斥锁,那么即使都是读操作,也只有一个线程能获得锁,其他的读都得阻塞。这样显然不利于提供系统的并发量。在JDK1.5中,Doug Lea又给我们带来了读写锁ReentrantReadWriteLock,在读-写锁的实现...

2014-09-04 21:10:00 373

Java并发-ReentrantLock源码分析

在Java5.0之前,在协调对共享对象的访问时可以使用的机制只有synchronized和volatile。Java 5.0增加了一种新的机制:ReentrantLock。ReentrantLock没有使用任何内建机制,仅仅从语言层面上实现了与synchronized相同的语义,而且还提供了跟多的功能,这一切都要归功于Java并发大师Doug Lea。在Java 5.0中,Doug Lea写了一个...

2014-09-04 16:52:00 253

Servlet中的重定向

Servlet规范定义了一个接口用于请求转发,即RequestDispatcher,该接口有Servlet引擎提供实现,它从客户端接受请求并把该请求转发到容器的任何资源上(包括Servlet,JSP,,HTML等)。虽然它可以包装任何资源,但是Servlet规范建议尽量只用来包装Servlet。RequestDispatcher接口规定了两个方法:voidforward...

2014-09-01 12:06:00 262

Servlet基本结构的源码解析

如何写一个Servlet类?围绕这个问题,可以看一下Servlet的类结构。首先Servlet类也是一个Java类,只不过这个类比较特殊,它不能单独运行,必须要依托Servlet容器才能运行,Servlet类是一个组件,供Servlet引擎调用。既然是这样,那么Servlet类和Servlet引擎必然要遵循一套规范,以约束彼此的行为,遵循规范编写的Servlet类可以运行在任何符合规范的Servl...

2014-08-30 21:06:00 407 1

Java并发-AtomicInteger源码分析

CASCAS(Compare-And-Swap,比较并交换)操作是CPU中术语,它保证了操作的原子性。CAS指令需要三个操作数,分别是:V:内存位置(也就是本次操作变量的内存地址);A:旧的预期值;B: 操作完成后的新值。CAS指令执行时,当且仅当V符合旧预期值A时,处理器用新值B更新V的值,否则它就不执行更新,无论是否更新,都会返回V的旧值,整个CAS操作是一个原子操作。在J...

2014-08-28 17:24:00 126

JSON

JSON(JavaScript Object Nonation)是一种轻量级的数据交换格式。关于JSON,最重要的是理解它是一种数据格式,不是一种编程语言,JSON也不从属于JavaScript,很多编程语言都有针对JSON的解析器和序列化器。JSON有三种表示形式,分别是简单值,对象,数组。简单值最简单的JSON数据形式就是简单值,比如5,“Hello World”,布尔值和null也是...

2014-08-23 11:44:00 171

AOP中的实体

AOP(Aspect-Oriented Programming,面向切面编程)是对OOP的一个极大补充,但是AOP中各种概念实体却是有些复杂,尤其是对于刚接触AOP的人来说。但是为了使用AOP,为了理解AOP,这些实体又是迈步过去的坎,编程虐我千百遍,我待编程如初恋。我相信,用真心和努力终能感动它。AOP本身就没有一个统一的标准,不同的AOP实现都略有不同,再加上这些东西都是老外搞出来的,翻译到国...

2014-08-22 21:43:00 113

Java枚举类型

关键字enum可以将一组具名的值的有限集合创建为一种新的类型,就是枚举类型。枚举类型是Java 1.5新增的特性,这是一个非常有用的特性。Enum在这一小部分,我们将探讨枚举的最基本的用法。首先我们必须要明白一点:enum是一个常规类型,只不过它还有一些限制。定义枚举类型很简单,使用enum关键字把所有的值组织起来,就像下面一样:enum Season {SPRING,SUMMER,F...

2014-08-19 11:33:00 137

Java序列化

在一些情况下,如果对象能够在程序不运行的情况下仍能存在并保存其信息,这样在下次运行程序时,该对象将被重建,并且拥有的信息与程序在上次运行时它所拥有的信息相同,这将非常有用。“将一个对象编码成一个字节流”,称为对象序列化,相反的处理过程称为反序列化。一旦对象被序列化后,它的编码就可以从一台正在运行的虚拟机被传递到令一台虚拟机上,或者被存储到磁盘上,供以后反复使用。Java提供了内建的语言机制来实现序...

2014-08-15 16:28:00 95

Java与模式-动态代理模式

代理模式代理模式:为另一个对象提供一个替身或者占位符以控制对这个对象的访问。使用代理模式创建代理对象,让代理对象控制某个对象的访问,被代理的对象可以是远程的对象或需要安全控制的对象。我觉得,在C语言中,指针就是一个代理对象,真正存储数据的是内存中的另外一块区域。Java提供了API可以生成动态代理,所以把标准的代理模式称为静态代理模式。在静态代理模式中有三类角色,理解了这三类角色也就理...

2014-08-12 20:56:00 123

Java与模式-观察者模式

在没有互联网的时代里,报纸是人们获取信息的一个非常重要的途径,很多人会定一份或者几份报纸。报社会保存订阅者的信息,每当出了新报纸时,立即送到订阅者手里。订阅者在这种关系中处于被动的状态,它依赖于报社的行为,只有新报纸出版了,它才有可能阅读其中的内容。在互联网时代,报社可以把它的新闻放到网上,订阅者通过RSS订阅,每当有新的新闻就推送给订阅者。问题是:报社如何把新闻推送给所有的订阅者?进一步抽象描述...

2014-08-10 20:40:00 282

Java Annotation

Java 1.5新增的一项特性-注解。注解也称为元数据,为我们在代码中添加信息提供了一种形式化的方法,使我们可以在稍后某个时刻非常方便的使用这些数据。注解不直接对源代码产生作用,源码会直接忽略注解。注解的用处在于其他地方:注解可以帮助编译器发现错误,消除警告;在编译期或者部署时,可以通过注解生成代码或其他文件;注解还可以在运行时发挥作用。注解的最广泛的应用是减少配置文件的编写,Java主流的框架都...

2014-08-07 15:14:00 148

Java中的内部类

将一个类的定义放到另一个类的定义内部,这就是内部类。平凡内部类平凡内部类就是最普通的内部类,没有static修饰类名,就像这样的类public class Outer{ class Inner {}}普通内部类能访问其外部类的所有成员,拥有所有成员的访问权,而不需要任何特殊条件。这是如何做到的呢?弄白这一点很重要,普通内部类的很多特性都是由此而来。来看一段代码class...

2014-08-03 19:36:00 126

求二叉树中节点的最大距离

今天中午的时候有人问了我一个问题:求二叉树中节点的最大距离。这是《编程之美》上的一个问题。花了一中午的时间总算解决了这个问题,有一点是很明确的:如果把树看做是一个图的话,它必然是连通的,任一节点总有路径到其他任何节点,这个题目就是求这样最长的一条路径。距离最大的两个节点可能是一个在左子树,一个在右子树,也可能是在一个子树上。下面的图展示了这两种情况我试着把这个问题转化一下:树中的每一个...

2014-08-02 17:03:00 366

基数排序

基数排序使用例子来讲基数排序是最直观的。假设有10个0~999之间的十进值数,分别是64 8 216 512 27 729 0 1 343 125,对这几个数如何使用基数排序呢?基数排序顾名思义跟基数有关系,这里的数都是十进制的,所以基数Radix = 10。十进制数在某一位上最多有10个不同可能,比如说个位上的数,只能是0~9之间的某一个。假如这些数先按个位上的数的大小排序,那就可以设置10...

2014-08-02 11:09:00 117

Java与模式-中介者模式

一个系统或者模块的类和类之间的交互如下图所示:从图中可以看出,每一个类几乎都与另外所有的类有交互,如果类A发生了修改,那么类B,D,E,G,I等类也需要随着修改;反过来,如果其他几个类有变动,那么类A也需要修改。这个系统中,类与类之间耦合度太高,如果是一个真正的系统,那么会有比这多的多的类,如果类与类这间也是这样的交互关系,那就真是牵一发而动全身了,这个系统几乎就是无法维护,无法修改,无法...

2014-07-31 20:23:00 107

Java与模式-外观模式

在当下的中国医疗环境下,病人去医院看病,一般都需要自己去挂号,然后去门诊,医生诊断完成之后,去划价,然后取药。这个流程是医院强加给病人的,病人为了看病就只能屈从于医院的这种安排,病人必须掌握这种流程,必须去一一做这些事情,想当一个合格的病人或者病人家属还挺不容易的。如果把看病作为一个子系统,挂号,门诊,划价,取药就是这个子系统中的具体模块,我们给出一个示意性代码:/* 挂号的示意性代码 */cl...

2014-07-26 22:02:00 136

Java中的clone()方法

clone()方法的约定Cloneable接口的目的是作为对象的一个混合接口,表明这样的对象允许克隆(clone),但是这个接口却没有定义clone(),这是它的缺陷:无法约束子类实现clone()方法。Object定义了一个受保护的clone()方法。Cloneable虽然没有定义clone()方法,但是却影响了Object.clone()方法的行为:如果一个类实现了Cloneable,调用...

2014-07-26 19:01:00 304

简单排序算法的时间下界

插入排序插入排序是最简单的排序算法之一,对于N个元素的序列,需要进行N-1次的插入来完成排序。插入排序的算法:(1)对于位置P,0到P-1位置上的元素已经是有序的,P从1开始;(2)将P指向的元素放到[0,P]正确的位置,这样0到P位置上的元素也是有序的。插入排序确实很简单,不需要过多的介绍,直接用一个示例来演示其过程,待排序列:2 4 6 1 3 5 总共有6个元素,所以需要...

2014-07-22 11:38:00 352

快速排序算法

算法思想快速排序(quicksort)是在实践中最快的已知排序算法,快速排序算法是一种分治的递归算法,对数组S进行快速排序的步骤:(1)如果S中的元素个数是0或者1,则返回;(2)取S中任一元素v,称之为枢纽元(pivot);(3)将S - { v }分成一个不相交的集合,S1 = { x属于S - { v } | x <= v },S2 ={ x属于S - { v } | ...

2014-07-22 10:22:00 277

Java与模式-模板方法模式

引言激情火热的世界杯已经进行到了四分之一决赛,相信各位球迷都已熬夜熬的心肝脾肺肾俱虚。一场足球比赛包括以下几个部分:上半场比赛,中场休息,下半场,加时赛,点球大战。这五部分构成了一场完整的杯赛比赛,这是现行规则下的固定套路,不会因为其他因素而改变。将足球比赛转换成Java代码如下:public abstract class WorldCupMatch { /** * 比赛流程,不可更...

2014-07-03 20:50:00 140

Java的装箱与拆箱机制

Java有8种基本类型,每种基本类型又有对应的包装类型。在Java中,一切都以对象作为基础,但是基本类型并不是对象,如果想以对象的方式使用这8中基本类型,可以将它们转换为对应的包装类型。基本类型和包装类型的对应:int(4字节)Integerbyte(1字节)Byteshort(2字节)Shortlong(8...

2014-06-28 16:26:00 292

虚拟机类加载过程

Java从诞生时就以平台无关性作为卖点,Java程序步不直接运行在操作系统上的,而是在操作系统上又提供了一层虚拟机。虚拟机为Java程序员提供了一套规范,这套规范与操作系统无关,与操作系统相关的工作就交由Java虚拟机来完成。Sun公司当初在发布Java规范的时候,刻意拆分成《Java语言规范》和《Java虚拟机规范》,以实现让其他语言运行在Java虚拟机上。如今,有一大批运行在Java虚拟机上的...

2014-06-15 21:54:00 165

Java的方法调用机制

在Java中,方法调用是非常基本、非常频繁的行为,但是Java中方法是怎么调用的呢?我们先来看一下Java中的类方法和实例方法。类方法和实例方法根据Java语言规范(JLS 3th),静态方法的规定为:被声明为static的方法叫做类方法(class method),类方法的调用不需要任何该类的实例,在类方法中不能使用关键字this和super,也不能使用类型参数,否则会得到一个编译期...

2014-06-14 00:09:00 277

Java与模式-单例模式(一)

作为对象的创建模式,单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。与单例模式对应的,多例模式中的多例类可以有多个实例,多例类也必须自己创建、管理自己的实例,并向外界提供自己的实例。本文会着重探讨单例模式 ,并把多例模式也介绍一下。单例类看似简单,实则暗藏了很多坑,稍不注意就会出错。单例模式的特点单例模式的要点有三个:(1)单例类只能有一个实例,将构造方法设为...

2014-06-07 11:06:00 98

JDK自带工具-jstat详解

Jstat是JDK自带的一个轻量级小工具。全称“Java Virtual Machine statistics monitoring tool”,它位于java的bin目录下,主要利用JVM内建的指令对Java应用程序的资源和性能进行实时的命令行的监控,包括了对Heap size和垃圾回收状况的监控。可见,Jstat是轻量级的、专门针对JVM的工具,非常适用。jstat工具特别强大,有...

2014-05-23 21:38:00 91

一个表达式中对同一个变量多次赋值(i = i++)

问:int i = 0;i = ++i;i的值是多少?毫无疑问,i = 1;但是,i = ++i;这条语句对i进行了两次赋值:第一次,i自增,此时i=1;第二次,将++i的表达式的值(也就是1)赋给i。我们通过字节码来分析一下这段代码的执行过程://int i = 0;的字节码0:iconst_0 //将int型0推送至栈顶1:istore_1 //将栈顶值(0)存入局部变量表中...

2014-05-22 13:19:00 1195

Java定时器实现更替执行

Java定时器Timer其实是一个线程类,TimerTask则实现了Runnable接口,TimerTask的类是这样定义的:abstract class TimerTask extends Object implements Runnable,其中的run()方法并未实现。关于这两个类的语法细节,看API足够了解。我们都知道Timer可以以固定的频率来执行某一定时任务,比如每天凌晨2:00执...

2014-05-20 22:16:00 157

Java定时器实现更替执行

Java定时器Timer其实是一个线程类,TimerTask则实现了Runnable接口,TimerTask的类是这样定义的:abstract class TimerTask extends Object implements Runnable,其中的run()方法并未实现。关于这两个类的语法细节,看API足够了解。我们都知道Timer可以以固定的频率来执行某一定时任务,比如每天凌晨2:00执...

2014-05-20 22:16:00 88

Java与模式—适配器模式

Adapter Pattern:把一个类的接口变成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。适配器模式很像变压器(Adapter),变压器把一种电压转换成另一种电压。美国的生活电压是110V,中国的生活电是220V,如果把美国的电器放到中国使用,则必须要有一个能把220V的电压转成110V的变压器。同时,适配器模式的做法也很像货物的包装过程:被包装...

2014-05-15 17:14:00 79

Java初始化的例子分析

借用一个小例子来分析Java程序的初始化过程,其中涉及类的加载,初始化顺序class Insect { private int i = 9; protected int j; Insect() { System.out.println("i = " + i + ", j = " + j); j = 39; } private static int x1 = printIn...

2014-05-10 18:47:00 85

Java中final的用法

在Java中,final可以修饰类,方法,属性。一 final数据final关键字修饰变量,用来向编译期告知这块数据恒定不变:1.一个永不改变的编译期常量:在Java中这类常量必须是基本类型,编译期可以将该常量代入到可能用到它的表达式中,也就是说,可以在编译期执行计算; private final int valueOne = 1; public static final i...

2014-05-10 17:12:00 128

Java中final的用法

在Java中,final可以修饰类,方法,属性。一 final数据final关键字修饰变量,用来向编译期告知这块数据恒定不变:1.一个永不改变的编译期常量:在Java中这类常量必须是基本类型,编译期可以将该常量代入到可能用到它的表达式中,也就是说,可以在编译期执行计算; private final int valueOne = 1; public static final int...

2014-05-10 17:12:00 72

Java初始化的例子分析

借用一个小例子来分析Java程序的初始化过程,其中涉及类的加载,初始化顺序class Insect { private int i = 9; protected int j; Insect() { System.out.println("i = " + i + ", j = " + j); j = 39; } private static int x1...

2014-05-10 15:54:34 107

Ubuntu下安装MySQL5.6

     我想我们不应该在安装软件上面耽误太多时间,但是很多时候,我们去被安装挡在了门外,尤其是初次在Linux下。作为一个程序猿,最近决定转战linux,MySQL是必须要有的,讲一下我的安装过程。在Ubuntu下安装MySQL有一个非常简单的方法,直接使用命令:sudo apt-get install mysql-client mysql-server;     我用的是Ubu...

2014-05-03 19:17:07 186

原创 Spring模拟(仅供个人参考)

      通过一个小例子还模拟Spring的执行过程,由于还没有接触过Spring,所以仅仅是模拟,不敢说是原理,也仅仅是供自己理解。这是第一版,等接触过Spring之后,会对这篇文章进行修改,我还会回来的! 一 添加用户     假设有这样的一个需求,在系统中添加一个用户。首先我们需要创建一个用户类:public class User { private String name;...

2014-04-10 00:02:47 95

空空如也

空空如也

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

TA关注的人

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