自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 java7 try-with-resources

在 java7之前,java的异常处理结构是 try catch finally , try代码块里打开的资源,它们的关闭都得放到finally里,挺繁琐的一个语法规则,相信被广大开发者吐槽过。 举个简单例子看下:public static void main(String[] args) { File file = new File(...

2016-10-30 15:47:00 119

转载 ThreadLocal说明

通常,程序中的对象在多线程下,数据都是竞争共享的。但是,有一个类例外,他生成的实例是线程私有的,ThreadLocal。ThreadLocal生成的对象,线程私有,这是怎么做到的呢?先看个实例:public class Test { private ThreadLocal<String> stringThreadLoca...

2016-08-16 21:40:00 126

转载 spring实例化三:CglibSubclassingInstantiationStrategy

在SimpleInstantiationStrategy类中,留下了包含MethodOverride对象的bd对象定义未做实现,做了抽象。CglibSubclassingInstantiationStrategy类是其中的一种实现方式,采用cglib生成之类方式,实例化对象。 下面看SimpleInstantiationStrategy类抽象的两个方法...

2016-08-11 20:44:00 720

转载 spring实例化二:SimpleInstantiationStrategy

spring对类的实例化,定义了接口InstantiationStrategy,同时先做了个简单实现类SimpleInstantiationStrategy。采用实现部分,抽象部分的策略。为了更好的扩展性,把一部分再次抽象,后面可以采用多种实现方式。 下面具体代码分析:public class SimpleInstantiationSt...

2016-08-11 20:43:00 562

转载 spring实例化一:InstantiationStrategy

DefaultListableBeanFactory对bean的管理工厂,包括bean的生成,从class到bean的实例化。spring特为这个实例化过程,定义了接口InstantiationStrategy,直译为实例化策略。里面分别定义了几个接口方法。public interface InstantiationStrategy { ...

2016-08-11 20:42:00 142

转载 spring DefaultListableBeanFactory 概述

有人说,DefaultListableBeanFactory是spring的发动机,其实重要性不为过。TA的整体类图如下:这里先概述接口部分:BeanFactory是Spring的最根的接口,类的工厂接口。HierarchicalBeanFactory接口是在继承BeanFactory的基础上,实现BeanFactory的父子...

2016-08-10 20:04:00 350

转载 spring replaced method 注入

replaced method注入是spring动态改变bean里方法的实现。需要改变的方法,使用spring内原有其他类(需要继承接口org.springframework.beans.factory.support.MethodReplacer)的逻辑,替换这个方法。通过改变方法执行逻辑来动态改变方法。内部实现为使用cglib方法,重新生成子类,重写配置的方法和返...

2016-08-07 12:20:00 109

转载 spring lookup method 注入

lookup method注入是spring动态改变bean里方法的实现。方法执行返回的对象,使用spring内原有的这类对象替换,通过改变方法返回值来动态改变方法。内部实现为使用cglib方法,重新生成子类,重写配置的方法和返回对象,达到动态改变的效果。 实例如下:package fiona.apple; // no more...

2016-08-07 11:15:00 144

转载 java应用本地缓存

在java应用中,对于访问频率比较高,又不怎么变化的数据,常用的解决方案是把这些数据加入缓存。相比DB,缓存的读取效率快好不少。java应用缓存一般分两种,一是进程内缓存,就是使用java应用虚拟机内存的缓存;另一个是进程外缓存,现在我们常用的各种分布式缓存。相比较而言,进程内缓存比进程外缓存快很多,而且编码也简单;但是,进程内缓存的存储量有限,使用的是java应用...

2016-08-03 21:08:00 116

转载 java8之Metaspace

HotSpot JVM是java中最常用的java虚拟机。在java8HotSpot JVM 中,虚拟机的内存模型做了修改调整。以前HotSpot JVM的内存模型分为新生代,老年代,永久代;在java8HotSpot JVM中,把永久代移除了。永久代中存放的类加载信息移到直接内存区存放。 以前都通过参数PermSize 和 MaxPermSize来设...

2016-07-31 11:29:00 122

转载 HashMap源码分析四

HashMap源码在jdk1.8中,改动挺大,里面内容已经变的非常复杂了,后面另起博客分析。jdk1.8以前,HashMap一直是数组加链表的数据结构,在数组的某个下标位置,有多次碰撞,则使用链表数据结果存储。在jdk1.8中,引入了红黑二叉查找树的数据结构。刚开始产生碰撞时,碰撞处仍然是链表结构,当链表的长度超过源码设定值8以后,该处的链表将转为红黑二叉树。相比以前,查询效...

2016-07-30 17:21:00 67

转载 HashMap源码分析三

HashMap的源码,在jdk1.5中相比jdk1.4,改动不大,有几个方面1 jdk1.5中引入了范型,在HashMap中也有体现2 引入了另一个hash值的计算方式,不过默认是关闭状态,可以通过设置jvm的参数开启private static int oldHash(int h) { h += ~(h << 9);...

2016-07-30 11:15:00 57

转载 JVM命令jinfo

jinfo也是jvm中参与的一个命令,可以查看运行中jvm的全部参数,还可以设置部分参数。格式 jinfo [ option ] pidjinfo [ option ] executable corejinfo [ option ] [server-id@]remote-hostname-or-IP 参...

2016-07-25 21:35:00 67

转载 JVM命令jps

jps是JVM的一个常用命令,类似linux中的ps命令。jps是查看java进程信息的命令;ps是查看linux系统中进程的命令格式 jps [ options ] [ hostid ]参数说明 options -q 只输出java进程的进程id -l 输出java进程的进程id...

2016-07-25 18:50:00 123

转载 HashMap源码分析二

jdk1.2中HashMap的源码和jdk1.3中HashMap的源码基本上没变。在上篇中,我纠结的那个11和101的问题,在这边中找到答案了。jdk1.2 public HashMap() { this(101, 0.75f); } public HashMap(Map t) { this(Math...

2016-07-23 20:00:00 67

转载 HashMap源码分析一

HashMap在java编程中,算使用频率top10中的类了。这里是关于HashMap的源码的分析。一个类的源码分析,要看他的来龙去脉,他的历史迭代。一来从以前的版本开始分析,由易到难;二来可以看到他的迭代优化过程。HashMap的源码分析,就从很老以前的一个版本开始分析。 简要说明,HashMap内部是一个数组,Object key 通过hash得到数...

2016-07-23 13:49:00 83

转载 bug-- java.lang.RuntimeException: Type “Klass*"

使用jinfo查看jvm进程id为27523的信息[java@xftest0 ~]$ jinfo 27523Attaching to process ID 27523, please wait...Exception in thread "main" java.lang.reflect.InvocationTargetException ...

2016-07-19 20:27:00 519

转载 ThreadPoolExecutor源码分析二

接上文,这里继续分析源码private static final int COUNT_BITS = Integer.SIZE - 3;private static final int CAPACITY = (1 << COUNT_BITS) - 1; // runState is stored in the high-order bit...

2016-07-17 14:32:00 52

转载 ThreadPoolExecutor源码分析一

在线程池出现之前,每次需要使用线程,都得创建一个线程。但是,在java的运行环境中,创建一个线程是非常耗费资源和时间的。是否可以把线程重复利用,减少线程的创建次数。基于此,java1.5中引入了java的线程池管理。试想如果让你来实现一个线程池的管理,你会怎么实现呢? 下面详细分析java ThreadPoolExecutor类的线程池原理。...

2016-07-17 14:27:00 72

转载 java动态代理框架

java动态代理是一个挺有意思的东西,他有时候可以被使用的很灵活。像rpc的调用,调用方只是定义的一个接口,动态代理让他匹配上对应的不同接口;mybatis内部的实现,编码时,只是实现了mapper层的接口和sql的xml的配置,动态代理把他们连起来。记得之前在一家公司,他们使用thrift做rpc的解决方案,每个项目都得管理thrift的连接和关闭,代码考来考去...

2016-07-12 21:13:00 126

转载 流程控制

任何一个语言,都有他的流程控制模块,而且都相差不大,go语言也不例外。go语言的流程控制分三块:1 条件选择 通过条件的不同,选择不同的程序执行流程,有if else else if ,switch case,2 循环 满足条件后,重复执行程序流程,有for, range3 跳转 根据条件,跳转到不同的执行流程,有 goto未了丰富流...

2016-07-10 17:57:00 76

转载 常量

常量是程序中的不变量,从程序启动到程序结束。在java中,常量定义方式是:public final static int a = 1 ; // 指定常量类型go语言中,常量的定义是这样的:const a = 1 我们发现go语言中,加入流关键字const,专为常量定义使用,同时常量的类型不用设定,根...

2016-07-10 12:16:00 78

转载 java序列化

java序列化是指java对象转为二进制流;对应的还有反序列化,是把二进制流转为对象。java中序列化,要么是为了对象持久化,要么是为了网络传输。java对象序列化技术,在现在的应用开发中,越来越重要,特别是现在的分布式异构系统中,系统与系统中对象的网络传输,rpc调用。 看看java自带的序列化框架。 序列化: ...

2016-07-09 17:54:00 68

转载 JVM锁说明

以前Synchronised关键字加锁效率问题,经常受到吐槽。后来java的开发团队进行了优化,引入了偏向锁、自旋锁、轻量锁,性能有了很大的提升。下面我们来分析下这里面的过程和原理。 最初阶段,我们的代码段或者方法加syncronized关键字,如下:syncronized(object) { // do someth...

2016-07-07 20:29:00 84

转载 go变量和数据类型

go语言的基本数据类型布尔类型:bool整型:int8、byte、int16、int、uint、uintptr等浮点类型:float32、float64复数类型:complex64、complex128 字符串:string字符类型:rune错误类型:error int8 表示一个字节长的整形(-128 ~ 127);...

2016-07-03 12:08:00 72

转载 ClassLoader心得

我们都知道,jvm执行的代码,都是通过jvm加载系统加入的。加载系统的第一步是通过ClassLoader加载class二进制信息,jvm规范中并没有规定class的来源类型,这就给jvm的实现这块很大的灵活。可以放在数据库里,可以放在网络的其他地方(以前的applet),zip文件等。现在大多数都是放在zip包里,我们引入其他class都是通过引入zip包的形...

2016-07-03 08:27:00 59

转载 布隆算法(BloomFilter)

BloomFilter算法,是一种大数据排重算法。在一个数据量很大的集合里,能准确断定一个对象不在集合里;判断一个对象有可能在集合里,而且占用的空间不大。它不适合那种要求准确率很高的情况,零错误的场景。通过牺牲部分准确率达到高效利用空间的目的。 场景一:假如有一个很大的表,通过字段key查询数据,操作很重;业务方请求时,传过来的key有很大一部分是不存在...

2016-06-30 00:01:00 120

转载 go学习开篇

我是做java开发的,从接触java开始算,已经8年了,为什么会想到学go语言呢?前端时间我一直在学习jvm,java的一些更底层的东西,梳理回顾时,感觉可以通过学习其他开发语言,来提升我对java的理解,站在另一个角度来看java。但是又怕是蜻蜓点水式的学,达不到效果,于是有了接下来的文章,希望能写下去。 go的历史这里就不谈了,算一个很有...

2016-06-25 22:00:00 89

转载 主键生成策略

应用开发中,我们经常需要涉及到数据主键的生成。大部分情况,我们会采用数据库主键自增,比如学生表,让学生表里的id自增。但是如果我们希望主键里保护日期信息呢?或者我们在库里实行了分表策略,表主键自增也是不行的。 有人会想到uuid,uuid能做到全局唯一的,能解决分表策略的问题,当时在主键里加入其他信息还是不行。还有个问题uuid字符...

2016-06-23 21:41:00 70

转载 一致性hash算法

在分布式场景中,后台提供的支撑服务是n个具体的主机,我们怎么能做到每台主机的负载均衡,伸缩性灵活呢?在分布式服务上,我们用一些hash策略就能实现均衡。添加一台服务器或者下线一台服务器,更新路由配置就ok了。但是在分布式缓存上,如果添加一台主机或者下线一台主机,也采用相同的策略,这意味着之前的全部缓存将失效,这种后果是大部分系统无法承受的。那怎么办呢? ...

2016-06-21 21:17:00 59

转载 Mybatis mapper.xml 配置

<!-- xml的标准格式 --><?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" ><!-- mappe...

2014-03-30 09:58:00 61

转载 Mybatis config.xml 配置

<!-- xml标准格式 --><?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-/mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> &l...

2014-03-30 09:54:00 67

转载 mybatis配置加载源码概述

Mybatis框架里,有两种配置文件,一个是全局配置文件config.xml,另一个是对应每个表的mapper.xml配置文件。Mybatis框架启动时,先加载config.xml,在加载每个mapper.xml配置文件,最后启动框架,等待应用的调用。Mybatis的启动代码一般如下:Readerreader=Resources.getResourceAsRead...

2014-03-26 23:41:00 61

转载 mybatis总体分析

Mybatis是一个半orp框架,说是半,也就是不完全是,还有很多地方是需要开发人员完成的。发现很多互联网公司使用Mybatis,而不是hibernate。应该是因为Mybatis不但有orp的优势,同时还可以更加灵活高效的控制DB的读写。Mybatis框架分两块:一、启动,框架启动是读取配置文件初始化;二、调用,用户调用mapper接口,框架实现接口读写数据库,返回结果集。启动...

2014-03-25 22:28:00 53

转载 Java nio 理解

Javanio称为JavanewIO,对Javaio而言的。他有两个主要的概念:缓存、通道。在程序中,数据的来源或写入,要么网络、要么硬盘。所有通道分为:文件通道、TCP通道、UDP通道。如下:FileChannelDatagramChannelSocketChannelServerSocketChannel缓存是通过通道读取数...

2014-03-24 22:29:00 59

转载 Java io 理解

  任何程序都有io部分,io是对程序来说数据流的输入和输出。这里说的流,是指有字节组成的列,不断输入程序,或者从程序中输出,我们形象称为流。Java的io流有两种,一种叫字节流,最原始的;一种叫字符流。字节流  输入字节流,在jdkapi中,他的继承关系如下图:  InputStream为输入流的接口类,下面是各种具体输入流的实现类,其他输入流中关键地方是调用...

2014-03-16 10:50:00 78

转载 Java应用的理解

一、程序  对每个程序来说,不管用什么语言开发出来的,他的功用分为三种:    1、接收输入流    2、处理数据    3、传出输出流  接收输入流,包括从网络、文件、用户输入等;传出输出流,包括网络、文件、显示设备等;处理数据,指程序通过算法处理接收到的输入流。  总体来说,程序是接收输入流,然后算法处理,传出输出流,不断的重复,直到程序结束。二、J...

2014-03-14 22:33:00 68

转载 Flyweight 享元模式

注:享元模式是结构型设计模式,避免大量拥有相同内容的小类的开销(如耗费内存),使大家共享一个类(元类).很多细粒度对象,只用部分状态不同,大部分是相同的。为了减少内存开销,我们可以利用享元模式,通过一个对象来代替多个对象,实现需求。享元模式中有个很经典的例子,字母的享元使用。Java简单代码实现字母类package com.pa...

2013-10-06 08:39:00 74

转载 Bridge 桥梁模式

 注:桥梁模式是结构型设计模式,将抽象部分与它的实现部分相分离,使他们可以独立的变化。抽象部分可能有n种实现,而实现部分可能有n种实现方式,采用享元模式,减少子类数据。曾经看过一个桥梁模式相关的例子,觉得挺好的。一个客户端需要调用一个作画程序。对画笔要求为,三种笔芯大小:小、中、大;三种颜色:红、黑、黄。下面用java代码实现如下1,...

2013-10-05 09:03:00 73

转载 Decrator 装饰模式

  注:装饰模式是结构型设计模式,动态地给一个对象增加一些额外的职责,就增加的功能来说,Decorator模式相比生成子类更加灵活。 主要是利用组合代替继承来实现业务功能,对动态改变业务实现来说,相比更灵活。 假如我们有一个工程,他有四个展示点,1、2、3、4,外国游客来考察,展示1、2、3比较好,领导来考察,展示2、3、4,下面来观看...

2013-10-05 07:46:00 82

空空如也

空空如也

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

TA关注的人

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