自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

gloryzyf

--技术改变生活,希望能和有情有义的人一起做有意义的事

  • 博客(44)
  • 收藏
  • 关注

转载 java io

Java IO       本篇主要讲述IO相关的内容,主要包括:与IO相关的简单的历史背景知识;Java IO的简单分类;与IO设计相关的两个模式;同时列举几个简单的例子;分析其中几个实现的源代码;最后给大家一些简单扩展的例子。治学先治史,下面我们先从简单的历史开始吧! 一、      历史背景       “对语言设计人员来说,创建好的输入/输出系统是一项特别困

2016-03-15 21:39:29 382

转载 java io 流 设计模式

三 装饰模式的应用 学过装饰模式后,大家会发现,它在Java语言中最著名的应用莫过于Java I/O标准为库的设计了。这一节将以处理Byte流为例,看看装饰模式是怎样得到应用的。 为什么不用继承而用装饰模式 我们知道Java I/O库需要很多性能的各种组合,如果说这些性能的组合是通过继承方式来实现的话,那么每一种组合都需要一个类,这样就会出现大量重复性问题的出现,从而使类数

2016-03-15 21:38:41 401

转载 有return的情况下try catch finally的执行顺序

结论:1、不管有木有出现异常,finally块中代码都会执行;2、当try和catch中有return时,finally仍然会执行;3、finally是在return后面的表达式运算后执行的(此时并没有返回运算后的值,而是先把要返回的值保存起来,管finally中的代码怎么样,返回的值都不会改变,任然是之前保存的值),所以函数返回值是在finally执行前确定的;4、finally

2016-03-14 11:14:30 335

原创 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 671

转载 new一个Object对象占用多少内存?

ava的自动内存管理机制省却了很多编码工作,大大地提高了Java的生产力,而且JVM的性能也越来越好,特别是G1的出现,改善了垃圾回收中stop the world的状况。 也许很多人都没有考虑过这个问题,new一个Object对象到底占用多少内存呢( Object obj = new Object() )? 这里很明确的是obj是一个指向对象的引用,引用的长度

2016-03-14 10:25:31 2007

转载 Java 8: 从永久代(PermGen)到元空间(Metaspace)

正如大家所知,JDK 8 Early Access版已经提供下载。这使开发者可以体验Java8的新特性。其中之一,是Oracle从JDK7发布以来就一直宣称的要完全移除永久代空间。例如,字符串内部池,已经在JDK7中从永久代中移除。JDK8的发布将宣告它的终结。这篇文章将会分享到目前为止对 PermGen 继任者:Metaspace的了解。我们将通过运行一个存在类元数据对象“泄漏”的程序,来对

2016-03-13 19:00:38 573

转载 Spring AOP 实现原理与 CGLIB 应用

写的很不错!简介: AOP(Aspect Orient Programming),也就是面向方面编程,作为面向对象编程的一种补充,专门用于处理系统中分布于各个模块(不同方法)中的交叉关注点的问题,在 Java EE 应用中,常常通过 AOP 来处理一些具有横切性质的系统级服务,如事务管理、安全检查、缓存、对象池管理等。AOP 实现的关键就在于 AOP 框架自动创建的 AOP 代理,AOP

2016-03-13 14:10:32 405

转载 MySQL存储引擎 MyISAM与InnoDB区别

MyISAM 和InnoDB 讲解  InnoDB和MyISAM是许多人在使用MySQL时最常用的两个表类型,这两个表类型各有优劣,视具体应用而定。基本的差别为:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持以及外部键等高级数据库功能。  以下是一些

2016-03-13 11:26:14 246

转载 聚集索引和非聚集索引(整理) 实例讲解

很好的一篇博文,值得转载。官方说法:聚集索引  一种索引,该索引中键值的逻辑顺序决定了表中相应行的物理顺序。   聚集索引确定表中数据的物理顺序。聚集索引类似于电话簿,后者按姓氏排列数据。由于聚集索引规定数据在表中的物理存储顺序,因此一个表只能包含一个聚集索引。但该索引可以包含多个列(组合索引),就像电话簿按姓氏和名字进行组织一样。      聚集索引对于那些经常要

2016-03-13 11:09:10 4708

转载 MySQL索引背后的数据结构及算法

索引的本质MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构。提取句子主干,就可以得到索引的本质:索引是数据结构。我们知道,数据库查询是数据库的最主要功能之一,例如下面的SQL语句:SELECT * FROM my_table WHERE col2 = '77'可以从表“my_table”中获得“col2”为“77”的数据记录

2016-03-13 10:43:34 305

转载 B-tree B+tree B*tree

B~树               1.前言:动态查找树主要有:二叉查找树(Binary Search Tree),平衡二叉查找树(Balanced Binary Search Tree),红黑树 (Red-Black Tree ),B-tree/B+-tree/ B*-tree (B~Tree)。前三者是典型的二叉查找树结构,其查找的时间复杂度O(log2N)与树的深度相关,那么降低树的

2016-03-13 10:31:11 322

转载 深入理解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 474

转载 ibatis源码学习(五)缓存设计和实现

缓存不算是ibatis框架的一个亮点,但理解ibatis的缓存设计和实现对我们合理使用ibatis缓存是很有帮助的。本文将深入分析ibatis框架的缓存设计和实现。缓存的使用参见官方文档:Cache Models。本文使用的ibatis版本为2.3.4。 问题 在介绍ibatis缓存设计和实现之前,我们先思考几个问题。 1. 缓存的目标是什么? 缓存中存放哪些数据? 2.

2016-03-11 17:52:49 517

转载 ibatis源码学习(四)动态SQL的实现原理

动态SQL是ibatis框架的一个重要特性,本文将深入分析ibatis框架中动态SQL的实现原理。动态sql的使用参见官方文档:Dynamic SQL。本文使用的ibatis版本为2.3.4。 问题 在介绍动态SQL的实现原理之前,让我们先来思考几个问题。 1. 为什么需要动态SQL? 通过动态sql可以提高运行程序的灵活性,使我们可以方便地实现多条件下的数据库操作。 

2016-03-11 17:51:41 3042

转载 ibatis源码学习(三)参数和结果的映射原理

在ibatis整体设计和核心流程一文中,我们提到了ibatis框架中sql的执行过程,sql执行前后有两个重要步骤: 参数对象映射到sql执行参数,sql执行结果映射到结果对象。本文将深入分析ibatis框架中参数和结果的映射原理。本文使用的ibatis版本为2.3.0。 问题 在详细介绍ibatis参数和结果映射原理之前,让我们先来思考几个问题。 1. 为什么需要参数和结果的

2016-03-11 17:50:21 697

转载 ibatis源码学习(二)初始化和配置文件解析

在ibatis整体设计和核心流程一文中,我们提到了ibatis框架的初始化过程,本文将深入分析ibatis框架的初始化和配置文件解析过程。本文使用的ibatis版本为2.3.4,不同版本间会略有差异。 问题 在详细介绍ibatis初始化过程之前,让我们先来思考几个问题。 1. ibatis初始化的目标是什么? 上文中提到过,ibatis初始化的核心目标是构造SqlMapCl

2016-03-10 23:29:16 397

转载 ibatis源码学习(一)整体设计和核心流程

本文主要从ibatis框架的基本代码骨架进行切入,理解ibatis框架的整体设计思路,各组件的实现细节将在后文进行分析。 背景 介绍ibatis实现之前,先来看一段jdbc代码: Java代码  Class.forName("com.mysql.jdbc.Driver");  String url = "jdbc:mysql://localhost:33

2016-03-10 23:27:26 361

原创 jdk动态代理解析

jdk动态代理通过jdk提供的Proxy类和InvocationHandler接口实现动态代理,但是jdk动态代理需要被代理的对象一定要实现了接口,更具体来说,实现的接口中的方法就是你想要代理的方法,在被代理类中不是实现接口中的方法的方法是不会被代理的。下面来看一下InvocationHandler接口的源码:public interface InvocationHandler {

2016-03-10 12:47:54 599

原创 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 5980

原创 transient关键字的作用

transient作用:当对象被序列化时(写入字节序列到目标文件),transient阻止实例中那些用此关键字声明的变量持久化;当对象被反序列化时(从源文件读取字节序列进行重构),这样的实例变量值不会被持久化和恢复。具体例子就不写了,transient关键字可以解决在实际开发过程中一个类的有些属性需要序列化,而其他属性不需要被序列化的问题,比如说一些我们不愿意持久化和恢复的属性,敏感信

2016-03-08 14:00:17 549

原创 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 12957 4

原创 java中CAS算法保证原子性 无锁编程

悲观锁和乐观锁悲观锁会导致其它所有需要锁的线程挂起,等待持有锁的线程释放锁。乐观锁每次不加锁而是假设没有冲突而去完成某项操作,如果因为冲突失败就重试,直到成功为止。synchronized的缺点:在JDK1.5之前java语言是使用sychronized关键字实现同步,多线程并发。但是这样会有锁机制(对线程造成影响的,下面介绍的CAS其实也是有锁的,是硬件实现的锁),造

2016-03-07 23:23:31 3088

转载 java内存模型详解

这篇文章写的很棒,正好承接我上一篇  探究多线程正确单例模式的总结 1. 概述  多任务和高并发是衡量一台计算机处理器的能力重要指标之一。一般衡量一个服务器性能的高低好坏,使用每秒事务处理数(Transactions Per Second,TPS)这个指标比较能说明问题,它代表着一秒内服务器平均能响应的请求数,而TPS值与程序的并发能力有着非常密切的关系。在讨论Java内存

2016-03-06 21:35:18 448

原创 探究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 8401 11

原创 java 内部类总结

这里我总结一下非静态内部类和静态内部类,主要问题是外部类和内部类之间的访问权限。1.内部类定义方法类型限制的问题:非静态内部类不可以定义静态的代码块和静态的成员属性和成员方法(但是可以定义final静态常量,java在编译期就确定所有常量,放到常量池中,和普通变量不一样)静态内部类中只能定义可以定义静态成员变量和静态成员方法和非静态的成员属性和方法

2016-03-06 16:18:06 423

原创 java 类加载后不一定会对类进行初始化

下面是会对类进行初始化的情况:当创建某个类的新实例时(如通过new或者反射,克隆,反序列化等)当调用某个类的静态方法时当使用某个类或接口的静态字段时当调用Java API中的某些反射方法时,比如类Class中的方法,或者java.lang.reflect中的类的方法时当初始化某个子类时当虚拟机启动某个被标明为启动类的类(即包含main方法的那个类)    Java编译器会收集所

2016-03-06 15:32:11 1925 1

原创 类从加载到对象实例化的过程顺序

JVM加载类过程:1.加载:类字节码文件从硬盘读入到内存中类加载器(BootStrapClassLoader,ExtensionClassLoader,SystemClassLoader)加载字节码文件 在方法区存放生成类对应的Class对象---------2.连接这个过程又包括了:验证、准备、解析验证:对class等进行验证的过程;准备阶段:为静态变

2016-03-06 15:06:58 2751

原创 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 804

转载 正向代理和反向代理的区别

正向代理的概念正向代理,也就是传说中的代理,他的工作原理就像一个跳板,简单的说,我是一个用户,我访问不了某网站,但是我能访问一个代理服务器这个代理服务器呢,他能访问那个我不能访问的网站于是我先连上代理服务器,告诉他我需要那个无法访问网站的内容代理服务器去取回来,然后返回给我从网站的角度,只在代理服务器来取内容的时候有一次记录有时候并不知道是用户的请求,也隐藏

2016-03-05 22:19:57 333

转载 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 411

转载 Spring MVC入门使用

MVC模式(Model-View-Controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model),视图(View)和控制器(Controller).通过分层使开发的软件结构更清晰,从而达到开发效率的提高,可维护性和扩展性得到提高.Spring提供的MVC框架是在J2EE Web开发中对MVC模式的一个实现,本文通过实例讲解一下Spring MVC 的使用.

2016-03-05 19:11:48 257

转载 Hibernate框架核心组件

在Hibernate框架简述中,演示了一个简单的Hibernate应用,但并没有深入说明其中程序,在这篇中将比较详细的介绍一下Hibernate的核心组件。首先最关键一点就是Hibernate的配置文件,如果仔细看过我前面的笔记构建一个简单的基于MVC模式的JavaWeb ,我们可以大概知道hibernate的配置文件就相当于构建一个简单的基于MVC模式的JavaWeb 一文中的db.prop

2016-03-05 19:08:01 258

转载 spring mvc 中controller是非线程安全的

springmvc的controller是singleton的(非线程安全的),struts2中的action是每次请求都实例一个action对象,是不用考虑action的线程安全问题的。和Struts一样,Spring的Controller默认是Singleton的,这意味着每个request过来,系统都会用原有的instance去处理,这样导致了两个结果:一是我们不用每次创建Controlle

2016-03-05 19:02:56 2696

原创 ThreadLocal详解

ava.lang.ThreadLocal的具体实现那么到底ThreadLocal类是如何实现这种“为每个线程提供不同的变量拷贝”的呢?先来看一下ThreadLocal的set()方法的源码是如何实现的:[java] view plain copy print?/**     * Sets the current thread'

2016-03-05 00:31:57 298

转载 二分查找真的有你想象中那么简单吗?

二分查找是查找算法里家喻户晓的算法了,其时间复杂度为O(logn),可是如果真的让你立马拿出笔写一个二分查找的函数出来,你确定你可以比较快的完全写对吗?我们的目的是从一个已经按从小到大的顺序排序好的数组arr中查找值为value的元素的位置。大体思路我们应该都很清楚:有三个游标,一个low在头,一个high在尾,还有一个mid指向中间,如果要检索的数据value比中间的元素arr[

2016-03-04 10:59:48 466

转载 Java四种线程池

Java通过Executors提供四种线程池,分别为:newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。newScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务执行。

2016-03-03 21:32:57 234

原创 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 1119

转载 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 1886

原创 JVM 学习总结

JVM的物理结构:JVM由堆、栈、方法区、本地方发栈组成,JVM的内存组成结构:1)堆所有通过new创建的对象的内存都在堆中分配,其大小可以通过-Xmx和-Xms来控制。堆被划分为新生代和旧生代,新生代又被进一步划分为Eden和Survivor区,最后Survivor由From Space和To Space组成,结构图如下所示:新生代:新建的

2016-03-02 11:30:09 296

转载 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 303

空空如也

空空如也

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

TA关注的人

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