![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
文章平均质量分 57
glory-of-me
这个作者很懒,什么都没留下…
展开
-
Springmvc接收数组参数
1.“cmtIds[]” []2.注意@RequestParam,粗心弄成了mybatis的注解@Param原创 2017-04-28 21:53:01 · 1031 阅读 · 0 评论 -
new一个Object对象占用多少内存?
ava的自动内存管理机制省却了很多编码工作,大大地提高了Java的生产力,而且JVM的性能也越来越好,特别是G1的出现,改善了垃圾回收中stop the world的状况。 也许很多人都没有考虑过这个问题,new一个Object对象到底占用多少内存呢( Object obj = new Object() )? 这里很明确的是obj是一个指向对象的引用,引用的长度转载 2016-03-14 10:25:31 · 1982 阅读 · 0 评论 -
Java 8: 从永久代(PermGen)到元空间(Metaspace)
正如大家所知,JDK 8 Early Access版已经提供下载。这使开发者可以体验Java8的新特性。其中之一,是Oracle从JDK7发布以来就一直宣称的要完全移除永久代空间。例如,字符串内部池,已经在JDK7中从永久代中移除。JDK8的发布将宣告它的终结。这篇文章将会分享到目前为止对 PermGen 继任者:Metaspace的了解。我们将通过运行一个存在类元数据对象“泄漏”的程序,来对转载 2016-03-13 19:00:38 · 570 阅读 · 0 评论 -
Spring AOP 实现原理与 CGLIB 应用
写的很不错!简介: AOP(Aspect Orient Programming),也就是面向方面编程,作为面向对象编程的一种补充,专门用于处理系统中分布于各个模块(不同方法)中的交叉关注点的问题,在 Java EE 应用中,常常通过 AOP 来处理一些具有横切性质的系统级服务,如事务管理、安全检查、缓存、对象池管理等。AOP 实现的关键就在于 AOP 框架自动创建的 AOP 代理,AOP转载 2016-03-13 14:10:32 · 399 阅读 · 0 评论 -
深入理解JVM内幕:从基本结构到Java 7新特性
每个Java开发者都知道Java字节码是执行在JRE((Java Runtime Environment Java运行时环境)上的。JRE中最重要的部分是Java虚拟机(JVM),JVM负责分析和执行Java字节码。Java开发人员并不需要去关心JVM是如何运行的。在没有深入理解JVM的情况下,许多开发者已经开发出了非常多的优秀的应用以及Java类库。不过,如果你了解JVM的话,你会更加了解Jav转载 2016-03-11 17:54:56 · 467 阅读 · 0 评论 -
jdk动态代理解析
jdk动态代理通过jdk提供的Proxy类和InvocationHandler接口实现动态代理,但是jdk动态代理需要被代理的对象一定要实现了接口,更具体来说,实现的接口中的方法就是你想要代理的方法,在被代理类中不是实现接口中的方法的方法是不会被代理的。下面来看一下InvocationHandler接口的源码:public interface InvocationHandler {原创 2016-03-10 12:47:54 · 594 阅读 · 0 评论 -
HashMap HashTable ConcurrentHashMap key和value是否可以null的问题 源码分析
我们都知道结论是:HashMap可以允许插入null key和null valueHashTable和ConcurrentHashMap都不可以插入null key和null value具体原因可以看下面的源码:首先是HashMap的put源码: public V put(K key, V value) { if (table == EMPTY_TABLE)原创 2016-03-08 21:46:38 · 5942 阅读 · 0 评论 -
transient关键字的作用
transient作用:当对象被序列化时(写入字节序列到目标文件),transient阻止实例中那些用此关键字声明的变量持久化;当对象被反序列化时(从源文件读取字节序列进行重构),这样的实例变量值不会被持久化和恢复。具体例子就不写了,transient关键字可以解决在实际开发过程中一个类的有些属性需要序列化,而其他属性不需要被序列化的问题,比如说一些我们不愿意持久化和恢复的属性,敏感信原创 2016-03-08 14:00:17 · 532 阅读 · 0 评论 -
String的hashCode方法实现
/** * Returns a hash code for this string. The hash code for a * String object is computed as * * s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1] * * using int arithmetic,原创 2016-03-14 11:02:57 · 665 阅读 · 0 评论 -
有return的情况下try catch finally的执行顺序
结论:1、不管有木有出现异常,finally块中代码都会执行;2、当try和catch中有return时,finally仍然会执行;3、finally是在return后面的表达式运算后执行的(此时并没有返回运算后的值,而是先把要返回的值保存起来,管finally中的代码怎么样,返回的值都不会改变,任然是之前保存的值),所以函数返回值是在finally执行前确定的;4、finally转载 2016-03-14 11:14:30 · 331 阅读 · 0 评论 -
句子分割 保留标点符号
/** * 根据标点符号进行句子拆分,并且保留句子结尾符号 * */ public String[] splitSentence(String cmt){ /*正则表达式:句子结束符*/ String regEx=",|\\.|\\?|!|:|;|~|,|:|。|!|;|?| "; Pattern p =Pattern.compile(regEx);原创 2017-02-22 02:04:04 · 5871 阅读 · 1 评论 -
ConcurrentHashMap原理分析
概述还记得大学快毕业的时候要准备找工作了,然后就看各种面试相关的书籍,还记得很多面试书中都说到:HashMap是非线程安全的,HashTable是线程安全的。那个时候没怎么写Java代码,所以根本就没有听说过ConcurrentHashMap,只知道面试的时候就记住这句话就行了…至于为什么是线程安全的,内部怎么实现的,通通不了解。今天我们将深入剖析一个比Hash转载 2016-03-02 09:10:29 · 462 阅读 · 0 评论 -
Java优先队列(PriorityQueue)
今天看到哈夫曼编码在构造哈夫曼二叉树时用优先队列,想到了java实现的优先级队列PriorityQueue。---------------------------------------------------------------------------------------------------------------------------------------转载 2016-06-22 22:13:41 · 732 阅读 · 0 评论 -
String.valueOf Long.valueOf Integer.valueOf 源码分析 缓存
String.valueOf(Object obj)/** * Returns the string representation of the Object argument. * * @param obj an Object. * @return if the argument is null, then a string equal to * "转载 2016-06-21 15:34:51 · 1897 阅读 · 0 评论 -
Maven的安装及配置
Maven是一个项目管理的Java 工具,在JavaEE中,我们可以使用Maven方便地管理团队合作的项目,现在我们在学习JavaEE框架,使用Maven可以管理类库,有效方便地供团队中的其他人员使用。现在让我们开始配置Maven吧。、1.首先,先到官网去下载maven。这里是官网的地址:http://maven.apache.org/download.cgi 请选择最新的版本下载,这里转载 2016-02-29 21:17:02 · 343 阅读 · 0 评论 -
slf4j的优势与使用原理
转自:http://qifuguang.me/概述slf4j的全称是Simple Loging Facade For Java,即它仅仅是一个为Java程序提供日志输出的统一接口,并不是一个具体的日志实现方案,就比如JDBC一样,只是一种规则而已。所以单独的slf4j是不能工作的,必须搭配其他具体的日志实现方案,比如apache的org.apache.log4j.Logge转载 2016-02-29 20:42:33 · 1100 阅读 · 0 评论 -
FastJson--阿里巴巴公司开源的速度最快的Json和对象转换工具
这是关于FastJson的一个使用Demo,在Java环境下验证的class User{ private int id; private String name; public int getId() { return id; } public void setId(int id) {转载 2016-02-29 20:24:08 · 568 阅读 · 0 评论 -
java工程师 一道面向对象面试题
在ImportNew微信公众号上看到的一道携程java工程师的一道面向对象面试题:public class Base{ private String baseName="base"; public Base(){ callName(); } public void callName(){ System.out.println(base原创 2016-02-29 20:17:51 · 412 阅读 · 0 评论 -
HashMap中插入null key的过程分析
在HashMap中添加key==null的Entry时会调用putForNullKey方法下面是HashMap的put方法: public V put(K key, V value) { if (table == EMPTY_TABLE) { inflateTable(threshold); } if (key ==原创 2016-03-08 12:31:47 · 12907 阅读 · 4 评论 -
java中CAS算法保证原子性 无锁编程
悲观锁和乐观锁悲观锁会导致其它所有需要锁的线程挂起,等待持有锁的线程释放锁。乐观锁每次不加锁而是假设没有冲突而去完成某项操作,如果因为冲突失败就重试,直到成功为止。synchronized的缺点:在JDK1.5之前java语言是使用sychronized关键字实现同步,多线程并发。但是这样会有锁机制(对线程造成影响的,下面介绍的CAS其实也是有锁的,是硬件实现的锁),造原创 2016-03-07 23:23:31 · 3077 阅读 · 0 评论 -
java内存模型详解
这篇文章写的很棒,正好承接我上一篇 探究多线程正确单例模式的总结 1. 概述 多任务和高并发是衡量一台计算机处理器的能力重要指标之一。一般衡量一个服务器性能的高低好坏,使用每秒事务处理数(Transactions Per Second,TPS)这个指标比较能说明问题,它代表着一秒内服务器平均能响应的请求数,而TPS值与程序的并发能力有着非常密切的关系。在讨论Java内存转载 2016-03-06 21:35:18 · 443 阅读 · 0 评论 -
Java四种线程池
Java通过Executors提供四种线程池,分别为:newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。newScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务执行。转载 2016-03-03 21:32:57 · 229 阅读 · 0 评论 -
Java7中使用try-with-resource语法 实现两种复制文件方法
在一个工具类中实现两种文件复制方法:package example.gloryzyf;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.nio.ByteBuffer;import java.nio.channels原创 2016-03-03 19:01:16 · 1108 阅读 · 0 评论 -
java7中try-with-resource语法
Java 7中的Try-with-resources原文链接 作者:Jakob Jenkov 译者:fangqiang08(fangqiang08@gmail.com)Try-with-resources是java7中一个新的异常处理机制,它能够很容易地关闭在try-catch语句块中使用的资源。利用Try-Catch-Finally管理资源(旧的代码风格)在jav转载 2016-03-03 17:59:40 · 1882 阅读 · 0 评论 -
java io 流 设计模式
三 装饰模式的应用 学过装饰模式后,大家会发现,它在Java语言中最著名的应用莫过于Java I/O标准为库的设计了。这一节将以处理Byte流为例,看看装饰模式是怎样得到应用的。 为什么不用继承而用装饰模式 我们知道Java I/O库需要很多性能的各种组合,如果说这些性能的组合是通过继承方式来实现的话,那么每一种组合都需要一个类,这样就会出现大量重复性问题的出现,从而使类数转载 2016-03-15 21:38:41 · 397 阅读 · 0 评论 -
JVM 学习总结
JVM的物理结构:JVM由堆、栈、方法区、本地方发栈组成,JVM的内存组成结构:1)堆所有通过new创建的对象的内存都在堆中分配,其大小可以通过-Xmx和-Xms来控制。堆被划分为新生代和旧生代,新生代又被进一步划分为Eden和Survivor区,最后Survivor由From Space和To Space组成,结构图如下所示:新生代:新建的原创 2016-03-02 11:30:09 · 291 阅读 · 0 评论 -
HashMap和HashTable的区别
我们先看2个类的定义[java] view plain copypublic class Hashtable extends Dictionary implements Map, Cloneable, java.io.Serializable [java] view plain转载 2016-03-02 09:16:03 · 301 阅读 · 0 评论 -
hibernate和ibatis对比
Hibernate是当前最流行的O/R mapping框架,iBATIS是另外一种优秀的O/R mapping框架。Hibernate对数据库结构提供了较为完整的封装,Hibernate的O/R Mapping实现了POJO和数据库表之间的映射,以及SQL的自动生成和执行。程序员往往只需定义好了POJO到数据库表的映射关系,即可通过Hibernate提供的方法完成持久层操作。Hiberna原创 2016-03-01 14:47:33 · 326 阅读 · 0 评论 -
为什么要重写了equals方法后一定要重写hashcode方法
重写了equals方法一定要重写hashcode方法,原因在于用到hash来提高效率的集合类在插入对象时先比较对象的hashcode是否相同,若相同再比较equals是否相同,若hashcode不同j就不再比较equals。哈希表这个数据结构想必大多数人都不陌生,而且在很多地方都会利用到hash表来提高查找效率。在Java的Object类中有一个方法:原创 2016-03-01 18:58:07 · 1782 阅读 · 0 评论 -
ThreadLocal详解
ava.lang.ThreadLocal的具体实现那么到底ThreadLocal类是如何实现这种“为每个线程提供不同的变量拷贝”的呢?先来看一下ThreadLocal的set()方法的源码是如何实现的:[java] view plain copy print?/** * Sets the current thread'原创 2016-03-05 00:31:57 · 292 阅读 · 0 评论 -
spring mvc 中controller是非线程安全的
springmvc的controller是singleton的(非线程安全的),struts2中的action是每次请求都实例一个action对象,是不用考虑action的线程安全问题的。和Struts一样,Spring的Controller默认是Singleton的,这意味着每个request过来,系统都会用原有的instance去处理,这样导致了两个结果:一是我们不用每次创建Controlle转载 2016-03-05 19:02:56 · 2681 阅读 · 0 评论 -
探究java多线程中正确的单例模式 volatile关键字
关键点是volite关键字的作用单例模式的实现:1.饿汉模式public class Singleton { private static Singleton instance=new Singleton(); private Singleton(){ } public static Singleton getInstance(){ return insta原创 2016-03-06 21:24:33 · 8364 阅读 · 11 评论 -
java 内部类总结
这里我总结一下非静态内部类和静态内部类,主要问题是外部类和内部类之间的访问权限。1.内部类定义方法类型限制的问题:非静态内部类不可以定义静态的代码块和静态的成员属性和成员方法(但是可以定义final静态常量,java在编译期就确定所有常量,放到常量池中,和普通变量不一样)静态内部类中只能定义可以定义静态成员变量和静态成员方法和非静态的成员属性和方法原创 2016-03-06 16:18:06 · 414 阅读 · 0 评论 -
java 类加载后不一定会对类进行初始化
下面是会对类进行初始化的情况:当创建某个类的新实例时(如通过new或者反射,克隆,反序列化等)当调用某个类的静态方法时当使用某个类或接口的静态字段时当调用Java API中的某些反射方法时,比如类Class中的方法,或者java.lang.reflect中的类的方法时当初始化某个子类时当虚拟机启动某个被标明为启动类的类(即包含main方法的那个类) Java编译器会收集所原创 2016-03-06 15:32:11 · 1907 阅读 · 1 评论 -
类从加载到对象实例化的过程顺序
JVM加载类过程:1.加载:类字节码文件从硬盘读入到内存中类加载器(BootStrapClassLoader,ExtensionClassLoader,SystemClassLoader)加载字节码文件 在方法区存放生成类对应的Class对象---------2.连接这个过程又包括了:验证、准备、解析验证:对class等进行验证的过程;准备阶段:为静态变原创 2016-03-06 15:06:58 · 2737 阅读 · 0 评论 -
Clallable和Runnable的区别
不同之处:1.Callable可以返回一个类型V,而Runnable不可以2.Callable能够抛出checked exception,而Runnable不可以。3.Runnable是自从java1.1就有了,而Callable是1.5之后才加上去的4.Callable和Runnable都可以应用于executors。而Thread类只支持Runnable.下面是具体的接原创 2016-03-06 14:45:59 · 794 阅读 · 0 评论 -
SSM框架(Spring+SpringMVC+MyBatis)详细整合
1、基本概念1.1、Spring Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的J转载 2016-03-05 19:49:45 · 404 阅读 · 0 评论 -
Spring MVC入门使用
MVC模式(Model-View-Controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model),视图(View)和控制器(Controller).通过分层使开发的软件结构更清晰,从而达到开发效率的提高,可维护性和扩展性得到提高.Spring提供的MVC框架是在J2EE Web开发中对MVC模式的一个实现,本文通过实例讲解一下Spring MVC 的使用.转载 2016-03-05 19:11:48 · 252 阅读 · 0 评论 -
Hibernate框架核心组件
在Hibernate框架简述中,演示了一个简单的Hibernate应用,但并没有深入说明其中程序,在这篇中将比较详细的介绍一下Hibernate的核心组件。首先最关键一点就是Hibernate的配置文件,如果仔细看过我前面的笔记构建一个简单的基于MVC模式的JavaWeb ,我们可以大概知道hibernate的配置文件就相当于构建一个简单的基于MVC模式的JavaWeb 一文中的db.prop转载 2016-03-05 19:08:01 · 253 阅读 · 0 评论 -
解析文档的开源jar包 Apache Tika
解析各种文档开源jar包原创 2016-01-10 21:05:57 · 953 阅读 · 0 评论