java
勇敢的土豆
只为成功找方法,不为失败找借口!
展开
-
Java虚拟机解析篇之---内存模型
首先来看一下Java中的内存模型图:第一、程序计数器(PC)程序计数器(Program Counter Register)是一块较小的内存空间,它可以看做当前线程所执行的字节码的行号指示器,字节码解释器工作时就是通过改变这个计数器的值来取下一条需要执行的字节码指令,分支、跳转、循环、异常处理、线程恢复等基础功能都需要这个计数器来完成注:程序计数器是线程私有的,每条线程都会有转载 2016-04-19 16:17:35 · 266 阅读 · 0 评论 -
装饰模式与代理模式的区别
学习AOP时,教材上面都说使用的是动态代理,可是在印象中代理模式一直都是控制访问什么的,怎么又动态增加行为了,动态增加行为不是装饰器模式吗?于是 找了很多资料,想弄清楚这两者之间到底有什么区别。结果发现这一篇英文文章讲的很清晰,就翻译一下,供参考。 首先,让我们先看一下下面的这两个UML类图,他们分别描述了装饰器模式和代理模式的基本实现。转载 2016-04-19 14:55:44 · 223 阅读 · 0 评论 -
代理模式
这段时间一直忙于期末考试,好久没来博客园了,现在好了,终于考完了,也该过上正常的日子了。开学就是大四的学生了,时间过的可是真快啊,转眼间大学四年已经接近尾声了。回想大学这三年,成绩还可以吧(年级前10%),参加过各种竞赛(acm,数学建模等等),学生会也呆过(打了一年的酱油),好哥们也有那么五六个(希望以后能在一个城市发展,大学期间的宝贵财富啊),另外所谓的大学生创新实践项目也搞了一个(就算开阔一转载 2016-04-19 14:44:04 · 218 阅读 · 0 评论 -
AOP--代理模式,拦截器的简易实现及原理
上文中提到代理分为静态代理和动态代理,采用代理是为了通过不修改源代码的情况下给程序动态统一添加功能,利用代理技术可以将业务逻辑中一些非业务逻辑的代码分离出来,把他们独立到业务逻辑类外,比如日志记录,性能统计,安全控制,事务处理,异常处理等。这样做,不仅降低了业务逻辑和非业务逻辑的耦合性,提高程序的可重用性,同时提高了开发的效率。下面以添加日志记录为例,分析静态代理的使用。创建一个用户管理类Us转载 2016-04-19 14:33:51 · 374 阅读 · 0 评论 -
AOP--Filter使用,过滤器和拦截器的区别
AOP(Aspect-Oriented Programming,面向切面编程)是一种编程思想,并不是一种具体的实现,谈到实现一般有Filter和代理模式两种常见的使用方式,spring中的AOP也是封装代理模式完成的,可以说是OOP(Object-Oriented Programing,面向对象编程)的补充和完善。OOP利用封装、继承和多态把一切事物打造成对象结构,但是对于所有对象中都存在的一转载 2016-04-19 14:32:47 · 6495 阅读 · 1 评论 -
Java回调机制解析
模块之间总是存在这一定的接口,从调用方式上看,可以分为三类:同步调用、回调和异步调用。同步调用是一种阻塞式调用,也是我们在写程序中经常使用的;回调是一种双向的调用模式,也就是说,被调用的接口被调用时也会调用对方的接口,这句话可能有点绕,等文章后面举例说明;异步调用是一种类似消息或事件的机制,解决了同步阻塞的问题,举例来讲:A通知B后,他们各走各的路,互不影响,不用像同步调用那样,A通知B后,非得等转载 2016-04-19 14:31:25 · 263 阅读 · 0 评论 -
ThreaLocal内存泄露的问题
在最近一个项目中,在项目发布之后,发现系统中有内存泄漏问题。表象是堆内存随着系统的运行时间缓慢增长,一直没有办法通过gc来回收,最终于导致堆内存耗尽,内存溢出。开始是怀疑ThreadLocal的问题,因为在项目中,大量使用了线程的ThreadLocal保存线程上下文信息,在正常情况下,在线程开始的时候设置线程变量,在线程结束的时候,需要清除线程上下文信息,如果线程变量没有清除,会导致线程中保存的对转载 2016-04-29 00:46:18 · 438 阅读 · 0 评论 -
Java内存模型-jsr133规范介绍
最近在看《深入理解Java虚拟机:JVM高级特性与最佳实践》讲到了线程相关的细节知识,里面讲述了关于java内存模型,也就是jsr 133定义的规范。系统的看了jsr 133规范的前面几个章节的内容,觉得受益匪浅。废话不说,简要的介绍一下java内存规范。什么是内存规范在jsr-133中是这么定义的A memory model describes, given a转载 2016-04-29 00:45:53 · 362 阅读 · 0 评论 -
Java虚拟机解析篇之---垃圾回收器
上一篇说了虚拟机的内存模型,在说到堆内存的时候我们提到了,堆内存是Java内存中区域最大的一部分,而且垃圾回收器主要就是回收这部分的内容。那么这篇就来介绍一下垃圾回收器的原理以及回收的算法。Java中的垃圾回收器(GC)是Java中比较有特色的一点,不需要我们手动的去管理一个对象,不想C++中的构造函数和析构函数一样,需要程序猿自己去手动的管理,很容易造成内存泄露的问题。当然如果学过OC语转载 2016-04-19 16:18:27 · 251 阅读 · 0 评论 -
数据结构和算法设计专题之---八大内部排序
摘要:前几天,看到一篇前辈的博文“程序员必知的8大排序”,不禁的手痒起来,重新翻开严蔚敏老师的《数据结构》复习了一遍,然后一一的用Java去实现,其中有不足之处,还望各位道友指正出来。 先来看看8种排序之间的关系: 第一:直接插入排序1. 基本思想:在要排序的一组数中,假设前面(n-1) [n>=2] 个数已经是排好顺序的,现在要把第转载 2016-04-19 16:19:27 · 440 阅读 · 0 评论 -
Java四种线程池的使用
Java通过Executors提供四种线程池,分别为:newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。newScheduledThreadPool 创建一个定长线程池,支持定时及周期转载 2016-08-01 10:33:16 · 263 阅读 · 0 评论 -
Java读取properties文件
一、java读取properties文件总结 在java项目中,操作properties文件是经常要做的,因为很多的配置信息都会写在properties文件中,这里主要是总结使用getResourceAsStream方法和InputStream流去读取properties文件,使用getResourceAsStream方法去读取properties文件时需要特别注意properties文件路径转载 2016-04-24 16:33:47 · 284 阅读 · 0 评论 -
序列化和反序列化
一、序列化和反序列化的概念 把对象转换为字节序列的过程称为对象的序列化。 把字节序列恢复为对象的过程称为对象的反序列化。 对象的序列化主要有两种用途: 1) 把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中; 2) 在网络上传送对象的字节序列。 在很多应用中,需要对某些对象进行序列化,让它们离开内存空间,入住物理硬盘,以便长期保存。比如最常见的是转载 2016-04-24 16:30:17 · 184 阅读 · 0 评论 -
MAVEN 多源代码目录配置
src/main/java src/test/javasrc/main/resourcessrc/test/resourcesorg.codehaus.mojobuild-helper-maven-plugin1.7add-sourcegenerate-sourcesadd-source转载 2016-04-24 13:26:18 · 397 阅读 · 0 评论 -
maven pom.xml详解
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/maven-v4_0_0.xsd"转载 2016-04-21 01:05:28 · 279 阅读 · 0 评论 -
关于maven自定义路径打包方法
下面的图是web模块的部分截图 我想打包的是 test环境 就用definedpackage里面的test目录替换 release环境的 同理用release目录替换使用maven-assembly-plugin插件1 打开web模块的pom.xml增加内容shumi-webtask maven-assembly-plug转载 2016-04-21 00:41:36 · 4132 阅读 · 0 评论 -
ice maven
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache原创 2016-04-21 00:08:06 · 3195 阅读 · 0 评论 -
MAVEN 多源代码目录配置
欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗 Ctrl + B 斜体 Ctrl + I 引用 Ctrl转载 2016-04-20 23:48:52 · 473 阅读 · 0 评论 -
数据结构和算法设计专题之---二分查找(Java版)
1、前提:二分查找的前提是需要查找的数组必须是已排序的,我们这里的实现默认为升序2、原理:将数组分为三部分,依次是中值(所谓的中值就是数组中间位置的那个值)前,中值,中值后;将要查找的值和数组的中值进行比较,若小于中值则在中值前面找,若大于中值则在中值后面找,等于中值时直接返回。然后依次是一个递归过程,将前半部分或者后半部分继续分解为三部分。可能描述得不是很清楚,若是不理解可以去网上找。从转载 2016-04-19 16:20:43 · 329 阅读 · 0 评论 -
java垃圾回收总结(2)
上一篇 介绍了jvm虚拟机运行时内存结构以及如何标识需要回收的对象,这一节主要讲解垃圾回收的基本算法。基本上 jvm内存回收有三种 基本算法标记-清除标记清除的算法最简单,主要是标记出来需要回收的对象,然后然后把这些对象在内存的信息清除。如何标记需要回收的对象,在上一篇文章里面已经有说明。 标记-清除-压缩这个算法是在标记-清除的算法转载 2016-04-29 00:43:14 · 361 阅读 · 0 评论 -
java 垃圾回收总结(1)
以前看过很多次关于垃圾回收相关的文章,都只是看过就忘记了,没有好好的整理一下,发现写文章可以强化自己的记忆。 java与C,c++有很大的不同就是java语言开发者不需要关注内存信息,不会显式的直接操作内存,而是通过jvm虚拟机来实现。java虚拟机运行的时候内存分配图如下图: jvm虚拟机栈:一个是线程独有的,每次启动一个线程,就创建一个jvm虚拟转载 2016-04-29 00:42:18 · 261 阅读 · 0 评论 -
深入源码分析TreeSet和TreeMap
类似于前面介绍的HashMap和HashSet之间的关系,HashSet底层依赖于HashMap实现,而TreeSet底层则采用一个NavigableMap来保存TreeSet集合的元素。但实际上,由于NavigableMap只是一个接口,因底层依然是使用TreeMap来包含Set集合中的所有元素。我们观察TreeSet的部分源码:package java.util; public c转载 2016-04-29 00:40:17 · 358 阅读 · 0 评论 -
JAVA8新特性
所有新特性改进可参考这里:http://www.iteye.com/news/28870-java-8-release 本次改进中最大的是Lambda表达式的改进;其次,新加入的Nashorn引擎使得Java程序可同JavaScript代码互操作;此外,新的日期时间API、GC、并发等方面也有不少改进。 JAVA8 的新特性和改进总览 http://www.转载 2016-03-24 11:30:12 · 383 阅读 · 0 评论 -
直接执行服务器端命令的方法
public class SecureShellHelper {private String username;private String password;private String host;private Session session;public synchronized void execCommand(String cmd) throws Exception { cre转载 2016-03-21 17:21:55 · 574 阅读 · 0 评论 -
java代理(AOP) InvocationHandler
AOP是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的隔离效果。使用反射生成JDK动态代理,可以实现面向切面的功能,即AOP,下面通过案例来展示反射在AOP中使用的作用:package com.xiaomo.reflex; import java.lang.reflect.In转载 2016-02-23 14:05:54 · 367 阅读 · 0 评论 -
EJB
1. 我们不禁要问,什么是"服务集群"?什么是"企业级开发"? 既然说了EJB 是为了"服务集群"和"企业级开发",那么,总得说说什么是所谓的"服务集群"和"企业级开发"吧!这个问题其实挺关键的,因为J2EE 中并没有说明白,也没有具体的指标或者事例告诉广大程序员什么时候用EJB 什么时候不用。于是大家都产生一些联想,认为EJB"分布式运算"指得是"负载均衡"提高系统的运行效率转载 2016-03-31 10:18:50 · 236 阅读 · 0 评论 -
freemarker教程
copy自http://demojava.iteye.com/blog/800204 FreeMarker的模板文件并不比HTML页面复杂多少,FreeMarker模板文件主要由如下4个部分组成: 1,文本:直接输出的部分 2,注释:格式部分,不会输出 3,插值:即${...}或#{...}格式的部分,将使用数据模型中的部分替代输出 4,FTL指令:Free转载 2016-03-18 10:31:48 · 1027 阅读 · 0 评论 -
配置Log4j
Log4J的配置文件(Configuration File)就是用来设置记录器的级别、存放器和布局的,它可接key=value格式的设置或xml格式的设置信息。通过配置,可以创建出Log4J的运行环境。1. 配置文件Log4J配置文件的基本格式如下:#配置根Loggerlog4j.rootLogger = [ level ] , appenderName1 , appenderName2 , …#转载 2016-03-30 15:10:12 · 188 阅读 · 0 评论 -
Java四种线程池的使用
ava通过Executors提供四种线程池,分别为:newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。newScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务执行。n转载 2016-03-17 16:47:23 · 178 阅读 · 0 评论 -
eclipse启动找不到javaw.exe
-vmC:\Java\jdk1.7.0_71\bin\javaw.exe-startupplugins/org.eclipse.equinox.launcher_1.3.100.v20150511-1540.jar--launcher.libraryplugins/org.eclipse.equinox.launcher.win32.win3原创 2016-01-03 16:16:49 · 3785 阅读 · 0 评论 -
SpringFramework下载和编译
(1)使用git工具从github上下载spring framework的源码,地址为:https://github.com/spring-projects/spring-framework下载命令:git clone https://github.com/spring-projects/spring-framework.git如果没有安装git,请自行安装。转载 2016-03-24 14:58:17 · 1079 阅读 · 0 评论 -
集合、泛型、IO流、多线程、Junit 、内省 、Properties、 路径问题
集合泛型IO流多线程JunitAssert注解内省Properties路径问题集合---|Collection: 单列集合 ---|List: 有存储顺序, 可重复 ---|ArrayList: 数组实现, 查找快, 增删慢 由于是数组实现, 在增和删的时候会牵扯到数组转载 2016-04-25 13:04:45 · 450 阅读 · 0 评论 -
JDK集合分析Set和Map的关系(自己实现Set到Map的扩展)
Set代表的是一种集合元素无序,集合元素不可重复的集合,Map则代表一种由多个Key-Value对组成的集合,Map集合类似于传统的关联数组。表面上看,Map和Set毫无关联,但其实Map和Set之间有莫大的关联,可以说,Map是Set的扩展。Set集合的继承体系Map集合的继承体系仔细观察上述两个集合的继承体系,发现Map和Set接口,实现类的类名几乎完全转载 2016-04-29 00:39:32 · 338 阅读 · 0 评论 -
HashMap和HashSet(深入HashMap源码分析HashMap元素的存储)
前面我们通过继承一个HaseSet把一个Set集合扩展为一个Map。其实我们扩展的Map本质上是一个HashMap。 HashMap和HashSet之间也有很多相似之处,HashSet采用Hash算法来决定集合元素的存储位置,这样可以保证快速的存,取集合元素。对于HashMap而已,系统仅将value作为key的附属物而已,系统采用Hash算法来决定key的存储位置,这样可以保证快速的存,取集转载 2016-04-29 00:39:09 · 253 阅读 · 0 评论 -
深入分析HaspMap源码
1.分析HaspMap的构造器前面分析HashMap的put(K key,V value)源码的时候发现,其中有两个特殊的变量:size:该变量保存了该HashMap中所包含的key-value对的数量。threshold:该变量包含了HashMap能容纳的key-value对的极限,它的值等于HashMap的容量乘以负载因子(load factor)。在HashM转载 2016-04-29 00:38:57 · 261 阅读 · 0 评论 -
深入源码分析HashSet
前面我们花了一定的篇幅学习了HashMap的一些底层原理,以及简单了解了HashSet和HashMap两种集合的渊源,现在我们从HashSet源码入手,来学习HashSet更细节的地方。对于HashSet而言,它是基于HashMap实现的。HashSet底层采用HashMap来保存元素,因此HashSet底层其实比较简单。package java.util;public class转载 2016-04-29 00:38:26 · 619 阅读 · 0 评论 -
DOM解析
DOM解析非官方,不在jdk中。使用步骤: 1)导入dom4j的核心包。 dom4j-1.6.1.jar 2)编写Dom4j读取xml文件代码示例:public static void main(String[] args) { try { //1.创建一个xml解析器对象 SAXReader re转载 2016-04-29 00:38:08 · 566 阅读 · 0 评论 -
java中volatile关键字的含义
在java线程并发处理中,有一个关键字volatile的使用目前存在很大的混淆,以为使用这个关键字,在进行多线程并发处理的时候就可以万事大吉。Java语言是支持多线程的,为了解决线程并发的问题,在语言内部引入了 同步块 和 volatile 关键字机制。 synchronized 同步块大家都比较熟悉,通过 synchronized 关键字来实现,所有加上synch转载 2016-04-29 00:37:02 · 237 阅读 · 0 评论 -
IceGrid负载均衡部署(转)
【IceGrid负载均衡部署步骤】1、环境主机1:IP=192.168.0.239,上面部署注册表服务器registry和节点node1,registry和node1运行在同一进程中;主机2:IP=192.168.0.25,上面部署节点node2;其中每个节点中包含一个服务程序,服务程序均在节点启动时启动。2、主机1配置(1)服务程序部署XML:app_rep.xml,转载 2016-04-26 01:42:54 · 472 阅读 · 0 评论 -
json-lib
dependency> groupId>net.sf.json-libgroupId> artifactId>json-libartifactId> version>2.4version> classifier>jdk15classifier>dependency>jdk15加上这一行,不然下载失败原创 2016-04-12 21:11:07 · 202 阅读 · 0 评论