- 博客(55)
- 资源 (3)
- 收藏
- 关注
原创 JAVA学习总结
一、Java基础一基本集合相关 java.util.* List : ArrayList LinkedList(盏、队列) Vector Stack Set : HashSet TreeSet LinkedHashSet(LRU) Map :HashMap(hash冲突) TreeMap HashT
2017-01-10 21:26:17
782
转载 Java程序员的Scala的入门教程
本文是《A Scala Tutorial for Java programmers》英文的翻译,英文版地址A Scala Tutorial for Java programmers。是Michel Schinz和Philipp Haller编写,由Bearice成中文,dongfengyee(东风雨)整理.一、简介二、 第一个Scala例子三、Scala与Java交互四
2016-07-12 15:14:58
729
原创 SpringMVC静态资源处理
在SpringMVC中,如果将 DispatcherServlet 请求映射配置为 /,则 Spring MVC 将捕 获 WEB 容器的所有请求,包括静态资源的请求, SpringMVC 会将他 们当成一个普通请求处理,因找不到对应处理器将导致错误。 可以在 SpringMVC 的配置文件中配置 handler/> 的方式解决静态资源的问题: 将在
2016-07-03 14:51:32
1669
2
原创 Spring MVC 拦截器使用及实现
1、自定义拦截器 Spring MVC 也可以使用拦截器对请求进行拦截处理,用户 可以自定义拦截器来实现特定的功能,自定义的拦截器必须实现HandlerInterceptor接口。 1)、 HandlerInterceptor接口:public interface HandlerInterceptor {boolean preHandl
2016-07-03 14:45:39
5547
原创 Spring MVC请求处理流程及架构
在之前 Spring MVC DispatcherServlet的启动以及初始化 中介绍了DispatcherServlet的启动过程,通过这个过程中建立琪了与DispatcherServlet相关的ioc容器环境,并进行了必要的MVC模块初始化工作,为处理请求做好了准备。下面说明DispatcherServlet另一个重要的功能,就是处理web请求。1、Dispatcher
2016-07-02 17:53:34
6238
原创 Spring MVC DispatcherServlet的启动以及初始化
Spring MVC是一个MVC模式的实现,在使用Spring MVC 时,主要需要在web.xml配置文件中设置DispatcherServlet,这个Servlet是实现Spring mvc 的前端控制器,所有的Web请求都需要通过它来处理,进行匹配、转发、数据处理。DispatcherServlet是实现Spring MVC最核心的部分。 在使用SpringMVC 时我们通常
2016-07-02 17:48:19
12170
2
原创 Spring MVC 根应用上下文在Web容器中的启动及其销毁
Ioc容器启动过程就是建立上下文的过程。Spring MVC提供了两种启动上下文的方式,一种是通过ContextLoaderListener启动的上下文,称为根上下文,每个Web应用只有一个这种上下文,是与ServletContext相伴而生的。另一个是与Web MVC相关的上下文用来保存、管理控制器DispatcherServlet需要的MVC对象,作为根上下文的子上下文,这个上下文与Dispa
2016-07-02 17:36:18
3184
原创 Spring MVC Web应用上下文
Spring MVC是建立在Spring IoC容器的基础上,然而Spring IoC是一个独立的模块,因此并不能直接在Web环境中发挥作用。为了在Web环境中使用Ioc,就需要Spring提供一个适合于Web环境的相关容器(WebApplicationContext),以及基于此容器的IoC启动过程,将IoC导入,这个启动过程应该与Web容器启动过程相集成。下面着重介绍Web应用上下文。
2016-07-02 17:29:36
1286
转载 源码解读Spring IOC原理
一、 什么是Ioc/DI?二、 Spring IOC体系结构(1) BeanFactory(2) BeanDefinition三、 IoC容器的初始化1、 XmlBeanFactory(屌丝IOC)的整个流程2、 FileSystemXmlApplicationContext 的IOC容器流程1、高富帅IOC解剖2、 设置资源加载器和
2016-06-27 22:03:33
1034
原创 Spring AOP 实现
Aop是Aspect-Oriented Programming(面向方面编程或面向切面编程)的简称。在Spring平台功能中,AOP是一个核心模块,Spring将AOP框架与IoC容器紧密集成,从而为使用AOP提供最大便利。 AOP可以说是OOP(Object-Oriented Programing,面向对象编程)的补充和完善。OOP引入封装、继承和多态性等概念来建立一种对象层次结
2016-06-27 21:42:57
2627
原创 Spring AOP
Aop是Aspect-Oriented Programming(面向方面编程或面向切面编程)的简称。在Spring平台功能中,AOP是一个核心模块,Spring将AOP框架与IoC容器紧密集成,从而为使用AOP提供最大便利。1、Spring AOP相关术语 通知(Advice) 在AOP中,切面的工作成为通知,通知定义了切面是什么以及何时使用。
2016-06-27 21:05:29
484
原创 IntelliJ Idea 常用快捷键列表
1、编辑快捷键 Ctrl+E,可以显示最近编辑的文件列表 Shift+Click可以关闭文件 Ctrl+[或]可以跳到大括号的开头结尾 Ctrl+Shift+Backspace可以跳转到上次编辑的地方 Ctrl+F12,可以显示当前文件的结构 Ctrl+F7可以查询当前元素在当前文件中的引用,然后按F3可以选择 Ctrl+
2016-06-24 16:23:22
456
转载 eclipse最有用快捷键整理
eclipse最有用快捷键整理在网上搜eclipse快捷键,可以搜出一大堆,大多罗列了n多的快捷键,估计大部分人看了以后都会头大的,我也头大,不过我一一尝试了一遍,整理出了eclipse最常用最有用,写代码必须用到的一些快捷键,大约只有网上快捷键大全的一半,减少大家的记忆量。如果大家把这些快捷键都很好的运用,写代码的效率一定会有提高。当然你也可以通过菜单栏中Window–>Preferen
2016-06-24 16:11:00
498
原创 Spring中Bean的生命周期
1、Spring bean 生命周期相关接口 Spring bean生命周期过程中涉及的相关接口可分为如下几类: 1)、Bean自身的方法:这个包括了Bean本身调用的方法和通过配置文件中的init-method和destroy-method指定的方法 2)、Bean级生命周期接口方法:这个包括了BeanNameAware、BeanFactoryAware、A
2016-06-22 22:24:34
628
原创 Spring IOC容器实现
1、IOC容器与控制反转 Ioc容器是Spring实现控制反转的平台,通过使用Ioc容器,对象依赖关系的管理被反转了,转到IOC容器中了,对象之间的相互依赖关系由Ioc容器进行管理,并由Ioc容器完成对象的注入。 Spring Ioc提供了一个基本的JavaBean容器,通过Ioc模式管理依赖关系,并通过依赖注入和AOP切面增强了为JavaBean这样的POJO对象
2016-06-22 22:16:00
672
原创 Spring设计目标以及架构
1、Spring设计目标 Spring是一个开源框架。Spring是为了解决企业及应用开发的复杂性而创建的,使用Spring可以让简单的JavaBean实现只有EJB才能完成的事。但是Spring也不仅仅局限于服务器开发,任何Java应用都能在简单性、可测试性和松耦合等方面从Spring中获益。 Spring的设计理念和最终目标就是简化Java开发,而且是致力于全方位简化
2016-06-22 22:13:20
915
原创 JDK与设计模式:命令模式
1、命令模式 命令模式:将一个请求封装为一个对象,从而让我们可用不同的请求对客户进行参数化,用于“行为请求者”与“行为实现者”解耦,可实现二者之间的松耦合,以便适应变化。命令模式是一种对象行为型模式,其别名为动作(Action)模式或事务(Transaction)模式。 命令模式可以将请求发送者和接收者完全解耦,发送者与接收者之间没有直接引用关系,发送请求的对象
2016-06-20 09:26:58
3205
原创 JDK与设计模式:职责链模式
1、职责链模式 职责链可以是一条直线、一个环或者一个树形结构,最常见的职责链是直线型,即沿着一条单向的链来传递请求。链上的每一个对象都是请求处理者,职责链模式可以将请求的处理者组织成一条链,并让请求沿着链传递,由链上的处理者对请求进行相应的处理,客户端无须关心请求的处理细节以及请求的传递,只需将请求发送到链上即可,实现请求发送者和请求处理者解耦。 职责
2016-06-19 16:47:44
967
原创 JDK与设计模式:代理模式
1、代理模式 代理模式:给某一个对象提供一个代理或占位符,并由代理对象来控制对原对象的访问。 代理模式结构型设计模式之一,当无法直接访问某个对象或访问某个对象存在困难时可以通过一个代理对象来间接访问,为了保证客户端使用的透明性,所访问的真实对象与代理对象需要实现相同的接口。根据代理模式的使用目的不同,代理模式又可以分为多种类型,例如保护代理、远程代理、虚拟代理等,它们应用于不同的
2016-06-19 10:51:32
443
原创 JDK与设计模式:装饰模式
1、装饰模式 装饰模式可以在不改变一个对象本身功能的基础上给对象增加额外的新行为,是一种用于替代继承的技术,它通过一种无须定义子类的方式来给对象动态增加职责,使用对象之间的关联关系取代类之间的继承关系。在装饰模式中引入了装饰类,在装饰类中既可以调用待装饰的原有类的方法,还可以增加新的方法,以扩充原有类的功能。 装饰模式动态地给一个对象增加一些额外的职责,就增加对象功能
2016-06-18 15:46:38
1464
原创 JDK与设计模式:组合模式
1、组合模式 组合模式有时又叫部分-整体模式在处理类似树形结构的问题时比较方便,组合多个对象形成树形结构以表示具有“整体—部分”关系的层次结构。组合模式对单个对象(即叶子对象)和组合对象(即容器对象)的使用具有一致性,组合模式又可以称为“整体—部分”(Part-Whole)模式,它是一种对象结构型模式。 在组合模式中引入了抽象构件类Component,它是所有容器类和叶子类
2016-06-18 09:57:25
1804
原创 JDK与设计模式:适配器模式
1、适配器模式 适配器模式可以将一个类的接口和另一个类的接口匹配起来。适配器模式将一个接口转换为客户希望的另一个接口,使接口不兼容的哪些类可以一起工作,其别名是包装器。适配器模式既可以作为类结构模型,也可作为对象结构模型。 在适配器模式中,我们通过增加一个新的适配器类来解决接口不兼容的问题,使得原本没有任何关系的类可以协同工作。根据适配器类与适配者类的关系不同,适配
2016-06-18 09:54:59
2457
原创 JDK与设计模式:原型模式
1、原型模式 原型模式是指将一个对象作为原型,对其进行复制、克隆,产生一个和原对象类似的对象。原型模式是一种创建型模式。 原型模式的工作原理很简单:将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝自己来实现创建过程。原型模式是一种“另类”的创建型模式,创建克隆对象的工厂就是原型类自身,工厂方法由克隆方法来实现。组成: 1) Pr
2016-06-18 09:51:37
826
原创 JDK与设计模式:工厂模式
1、简单工厂方法模式 简单工厂模式又称静态工厂方法模式。从命名上就可以看出这个模式一定很简单。它存在的目的很简单:定义一个用于创建对象的接口。在简单工厂模式中,一个工厂类处于对产品类实例化调用的中心位置上,它决定那一个产品类应当被实例化。简单工厂方法模式是一种创建型模式。 组成: 1) 工厂类角色:这是本模式的核心,含有一定的业务逻辑和判断逻辑
2016-06-18 09:46:18
834
原创 设计模式概述
设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结,使用设计模式是为了可重用代码、让代码更容易被他人理解并且保证代码可靠性。 设计模式可分为创建型、结构型、行为型3种。其中,创建型主要用于描述如何创建对象,结构型主要用于描述如何实现类与对象的组合,行为型主要用于描述类或者对象咋样交互以及咋样分配职责。一、设计模式分类 创建型模式,共五种:
2016-06-14 20:03:40
347
原创 Java虚拟机(七)虚拟机字节码执行引擎
在不同的虚拟机实现里面,执行引擎在执行Java代码时可能会有解释执行(通过解释器执行)和编译执行(通过即时编译产生本地代码执行)两种选择,也可能两者兼备,甚至可以包含几个不同级别的编译器执行引擎。但是从外观上看,所有的Java虚拟机执行引擎都是一致的:输入为字节码文件,处理过程是字节码的解析过程,输出时是执行结果。 栈帧(stack frame)是用于支持虚拟机进行方法调用和
2016-06-14 09:41:52
441
原创 Java虚拟机(六):类加载器ClassLoader
“通过一个类的全限定名来获取描述此类的二进制流”这个动作放到虚拟机外部去实现,以便让应用程序决定如何去获取所需要的类。这个动作模块就是类加载器。而程序在启动的时候,并不会一次性加载程序所要用的所有class文件,而是根据程序的需要,通过Java的类加载机制(ClassLoader)来动态加载某个class文件到内存当中的,从而只有class文件被载入到了内存之后,才能被其它class所引用。所以C
2016-06-13 15:15:25
880
原创 Java虚拟机(五):虚拟机类加载
虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。不同于那些需要进行连接工作的语言,在Java语言里面,类型的加载、连接和初始化过程都是在程序运行期间完成的。(1)、类加载的时机 类从被加载到虚拟机内存中开始,到卸载为止,生命周期共包括:加载、验证、准备、解析、初始化、使用和卸载
2016-06-13 09:27:37
598
转载 Java虚拟机(四):Class文件结构及字节码指令
一、Class文件结构 Java class文件是对Java程序二进制文件格式的精确定义。每一个Java class文件都对一个Java类或者Java接口作出了全面描述。一个class文件中只能包含一个类或者接口。1、平台无关性 尽管class文件与Java语言结构相关,但它并不一定必须与Java语言相关。如下图,可以使用其他语言来编写程序,然后将其编译为class
2016-06-13 09:25:13
2653
原创 Java虚拟机(三):内存分配与回收策略
对象的分配,就是在堆上,主要是新生代Eden区上分配对象空间,如果启动了本地线程分配缓冲,将按照线程优先在TLAB上分配。少数情况下也可能分配在老年代中。1、对象优先在Eden区分配 大多数情况对象在新生代Eden区分配,当Eden区没有足够空间进行分配时,虚拟机将发起一次Minor GC。 VM参数:-verbose:gc -Xms20M -Xmx20M -Xmn10
2016-06-11 17:08:40
597
原创 Java虚拟机(二):垃圾收集器
程序计数器、虚拟机栈、本地方法栈3个区域随线程而生,随线程而灭,在这几个区域内就不需要过多考虑垃圾回收的问题,因为方法结束或者线程结束时,内存自然就跟随着回收了。 栈中的栈帧随着方法的进入和退出而有条不紊的执行这出栈和入栈操作。 因此虚拟机主要关注java堆和方法区的内存分配和回收。1、对象存活判定 1)引用计数算法 给对象添加一个引用计数器,每当由
2016-06-11 16:19:56
738
转载 深入学习java并发编程:内存模型(五)锁
锁的释放-获取建立的happens before 关系锁是java并发编程中最重要的同步机制。锁除了让临界区互斥执行外,还可以让释放锁的线程向获取同一个锁的线程发送消息。下面是锁释放-获取的示例代码:class MonitorExample { int a = 0; public synchronized void writer() { //1 a+
2016-06-10 20:08:29
1327
原创 Java虚拟机(一):Java内存区域与内存溢出异常
1、Java内存区域 由图可知,java运行时内存区域主要划分为6个区域,分别为程序计数器、Java虚拟机盏、本地方法盏、Java堆、方法区(内含运行时常量池)、和直接内存区(分配空间时直接在本地堆中分配)。(1)、程序计数器 线程隔离的数据区:每个线程一个独立的计数器,线程之间互不影响。 可以看成当前线程执行字节码的行号指示
2016-06-10 20:00:27
702
原创 java多线程HTTP服务器
基于java线程池、java Socket实现了一个简单的多线程Http服务器,可以实现GET资源获取功能、GET表单提交功能,POST 表单提交功能、单文件上传功能。源码可以再此下载:http://download.youkuaiyun.com/detail/luckydog1991/9545387注:1.要运行程序,需要指定服务器运行根目录,并将服务资源放入根目录
2016-06-09 20:52:04
1972
转载 深入学习java并发编程:内存模型(四)volatile
volatile的特性当我们声明共享变量为volatile后,对这个变量的读/写将会很特别。理解volatile特性的一个好方法是:把对volatile变量的单个读/写,看成是使用同一个锁对这些单个读/写操作做了同步。下面我们通过具体的示例来说明,请看下面的示例代码:class VolatileFeaturesExample { //使用volatile声明64位的long型变
2016-06-04 21:35:01
464
转载 深入学习java并发编程:内存模型(三)顺序一致性
数据竞争与顺序一致性保证当程序未正确同步时,就会存在数据竞争。java内存模型规范对数据竞争的定义如下:在一个线程中写一个变量,在另一个线程读同一个变量,而且写和读没有通过同步来排序。当代码中包含数据竞争时,程序的执行往往产生违反直觉的结果(前一章的示例正是如此)。如果一个多线程程序能正确同步,这个程序将是一个没有数据竞争的程序。JMM对正确同步的多线程程序的内存一
2016-06-02 22:32:01
853
原创 深入学习java并发编程:线程池ThreadPoolExecutor实现以及使用
Java中的线程池是应用场景最多的并发编程模型,很多需要异步或并发执行任务的程序都可以使用线程池。在程序中合理的利用线程池能够有如下好处: 1):降低资源消耗。通过重复利用已创建的线程降低线程创建以及销毁造成的消耗。 2):提高响应速度。当任务到达时,可以不需要等待线程的创建就能立即执行。 3):提高线程可管理性。线程是稀缺资源,如果无限制的创建,不仅消耗资源,还会降
2016-06-02 22:11:06
834
原创 深入学习java并发编程:CountDownLatch、CyclicBarrier
在java并发包中提供了一些非常有用的辅助类来帮助我们进行并发编程,这些类包括CountDownLatch、CyclicBarrier以及Semaphore。1、CountDownLatch1 ) 类图 2)CountDownLatch实现 CountDownLatch同步组件同ReetrantLock一样,也是基于抽象队列同步器,在内部聚合引用了自
2016-06-01 22:05:40
515
转载 深入学习java并发编程:内存模型(二)重排序
数据依赖性如果两个操作访问同一个变量,且这两个操作中有一个为写操作,此时这两个操作之间就存在数据依赖性。数据依赖分下列三种类型:名称代码示例说明写后读a = 1;b = a;写一个变量之后,再读这个位置。写后写a = 1;a = 2;写一个变量之后,再写这个变量。读后写a = b;b = 1;读一个变量之后
2016-06-01 19:47:19
444
转载 深入学习java并发编程:内存模型(一)基础
并发编程模型的分类在并发编程中,我们需要处理两个关键问题:线程之间如何通信及线程之间如何同步(这里的线程是指并发执行的活动实体)。通信是指线程之间以何种机制来交换信息。在命令式编程中,线程之间的通信机制有两种:共享内存和消息传递。在共享内存的并发模型里,线程之间共享程序的公共状态,线程之间通过写-读内存中的公共状态来隐式进行通信。在消息传递的并发模型里,线程之间没有公共状态,线程之间必
2016-06-01 19:09:21
428
java(简易)多线程HTTP服务器
2016-06-09
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人