自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

dou_yuan的博客

when_where_why_who_what_how

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

原创 深入理解类加载

1. 什么是类加载?将描述类的数据从Class文件加载到内存,并并数据进行校验、转换解析、初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。 与那些在编译时需要进行连接工作的语言不同,在Java语言中,类的加载、解析、初始化等过程都是在程序运行阶段进行的,虽然这种策略在程序运行时会带来一定的性能开销,但是这也为Java程序提供了高度的灵活性,Java语言的可动态

2020-09-06 21:02:04 157

原创 MVC框架模式与SpringMVC框架

1. 框架与设计模式框架、设计模式这两个概念很容易被人混淆,但其实这两者之间还是存在差别的。框架通常是代码重用,而设计模式是设计重用。 设计模式是对反复出现的问题的解决方案的描述,是一种思想用于处理细节的,比框架更加抽象。框架是已经用代码实现的,可以执行也可以复用。常见的框架模式: MVC, ORM等。常见的框架: C++语言的MFC、qt、 gtk,Java语言的SSH,

2017-11-12 14:56:55 1385 2

原创 深入理解Java线程池

1. 线程池ThreadPoolExecutor类1.1 ThreadPoolExecutor类构造方法1.2 ThreadPoolExecutor类层次关系2. 线程池的设置2.1 线程池的状态2.2 线程池的初始化2.3 线程池的关闭3. execute方法内部实现4. 线程池大小的配置策略参考博客: http://www.cn

2017-11-03 11:40:44 230

原创 线程间通信

线程间的通信方式主要有如下4种方式: 1)共享变量; 2)wait, notify机制; 3)Lock, Condition机制; 4)管道 下面将逐一讲解这4中线程间通信方式。1. 共享变量线程之间通过共享一个对象,在同步块中访问该对象中数据来实现通信。 下面是一个例子,创建了两个线程thread1和thread2,创建了Runnable实现类对象task,thr

2017-10-29 21:22:56 363

原创 Java 线程简介

1. 线程的创建1.1 扩展java.lang.Thread类1)通过继承java.lang.Thread类,并重写run方法,该run方法代表了线程将要执行的任务,所以说run方法也称为执行体; 2)创建Thread类子类的实例,即创建了线程对象,然后调用对象的start()方法; 程序示例如下:public class Main4 extends Thread {

2017-10-28 15:34:59 178

原创 Java 垃圾回收机制

1. 虚拟机内存划分2. 垃圾对象的判断3. 典型垃圾回收算法

2017-10-26 21:30:00 228

原创 Java反射机制

1.11.2

2017-10-22 21:24:09 181

原创 全排列

1. 什么是全排列全排列是指:对给定一个字符串,求出该字符串中字符的所有排列。 例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。2. 全排列的字典序排列算法对给定的字符串,按照字典序输出该字符串的全排列。 下面通过以字符串{1,2,3}为例,说明字典序的全排列思路: 首先,在{1,2,3}的字典序全排列如

2017-10-20 17:00:22 577

原创 JVM基础之运行时数据区

Java虚拟机运行时数据区: 1. 程序计数器:用作当前线程所执行的字节码的行号指示器,所以说,每个线程都会有一个独立的程序计数器,该计数器为线程所私有; 2. Java虚拟机栈:同样属于线程私有,虚拟机栈描述的是Java方法执行的内存模型,每个方法在执行时都会创建一个栈帧,用于存储局部表量表、操作数栈、动态链接、返回地址等信息,每个方法从调用到执行完成的过程,都对应着一个栈帧在虚拟机栈里面从入

2017-09-30 22:42:14 147

原创 JVM基础之类加载

首先来说一下类的整个生命周期,它包括:加载、验证、准备、解析、初始化、使用和卸载7个阶段,其中验证、准备、解析这3个部分统称为链接。 虚拟机规范严格规定了有且只有5种情况必须对类进行初始化: 1. 使用new关键字实例化对象的时候(对应new 字节码指令)、读取或者设置(对应getstatic , putstatic字节码指令)一个类的静态字段(被final修饰、已经在编译器把结果放入常量池的静

2017-09-30 22:39:51 182

原创 Java代理模式

1. 代理模式代理是一种设计模式,提供了通过代理对象访问目标对象

2017-09-23 01:08:14 161

原创 Spring AOP

1. AOP思想AOP: Aspect Oriented Programming, 面向切面编程; OOP: Object Oriented Programming, 面向对象编程; AOP看起来更像是OOP的补充和完善。在OOP中,通过引入封装、继承、多态等特性来建立一种对象的层次结构,这通常可以表示对象的纵向关系,并不适合描述对象的横向关系。例如日志功能,它的代码散布在各个层次对象

2017-09-21 11:45:11 203

原创 Spring IOC

1.1 IOC的思想IOC(Inversion Of Control, 控制反转),的思想就是由spring容器来负责实现依赖对象的创建、协调工作,对象本身只需要关注其业务逻辑即可。从这方法面来看,对象如何获取依赖对象的责任被反转了。 IOC是spring的核心思想。在系统运行过程中,通过DI(Dependency Inject)动态为对象提供它所需要的对象。 spring是通过反射来实现注

2017-09-21 09:26:34 195

原创 JDK8常用集合类自上而下的关系

在Java中,集合类主要分为4大部分:Queue、Map、List、Set.1. 首先来看一下顶层接口Collection接口:public interface CollectionE> extends IterableE> {由上述代码可见,集合类的顶层接口Collection扩展了Iterable接口;2. 在顶层接口的下一层为AbstractCollection虚类,虚类

2017-09-17 09:49:32 672

原创 HashSet源代码分析(JDK1.8)

首先来看一下HashSet类的定义、常用构造方法、常用的类成员方法以及内部的成员变量: HashSet类的定义如下:public class HashSetE> extends AbstractSetE> implements SetE>, Cloneable, java.io.Serializable由上述代码可见,HashSet扩展了AbstractSet类,并实

2017-09-16 21:06:15 311

原创 ArrayList和LinkedList性能分析

测试程序源代码如下:public static void main(String[] args) { Random rand=new Random(); ArrayList<String> arrayList = new ArrayList<String>(); LinkedList<String> linkedList = new LinkedLis

2017-09-15 11:53:50 273

原创 ArrayList源码分析(基于JDK1.8)

首先了解ArrayList集合类常用的构造方法以及常用的成员方法: 常用的构造方法有:ArrayList<E>(); //默认构造器ArrayList<E>(Collection <? extends E> c); //将容器C作为构造参数ArrayList(int initialCapacity); //以初始容量作为构造参数常用的成员方法有://添加元素的方法 b

2017-09-15 09:45:12 201

原创 ConcurrentHashMap源码分析(基于JDK1.8)

1. 首先来看一下ConcurrentHashMap类的定义:public class ConcurrentHashMapK,V> extends AbstractMapK,V> implements ConcurrentMapK,V>, Serializable {由上述代码可见, ConcurrentHashMap扩展了AbstractMap类, 实现了Concurrent

2017-09-01 15:18:49 1047

原创 HashMap源代码分析(JDK1.8)

1.HashMap类的定义public class HashMapK,V> extends AbstractMapK,V> implements MapK,V>, Cloneable, Serializable {如上述代码所示, HashMap继承了AbstractMap类, 实现了Map, Cloneable, Serializable接口.2. HashMap中定义的

2017-08-29 11:26:13 3105 1

转载 <? extends T>和<? super T>区别

经常发现有List<? super T>、Set<? extends T>的声明,是什么意思呢? 首先来说一下为什么要用通配符和边界? 使用泛型会出现如下的很别扭的情况, 例如说, 我们有水果Fruit类, 以及它的派生类苹果Apple.class Fruit {}class Apple extends Fruit {}有如下代码, 假设一个存放Fruit的容器指向存放Apple的容器:A

2017-08-24 11:49:50 1244

原创 二分查找算法(Java)

1.二分查找算法思想:将n个元素分成大致相等的两部分,取a[n/2]与x做比较,如果x=a[n/2],则找到x,算法中止;如果x2.时间复杂度:匹配k次后,剩下的元素个数为: n/(2^k) 根据 n/(2^k) >=1 , 即可求出时间复杂度 O(log2 n) ,以2为底, n的对数.3.算法要求:(1)待查询的序列必须按关键字大小排列; (2)待查询的序列必须采用顺序存储结构;4.优缺点

2017-08-14 17:18:12 3676

原创 Stack类源代码分析(基于JDK1.8)

1. Stack类定义:publicclass Stack<E> extends Vector<E> { public Stack() { }由上述代码可见, Stack类继承了Vector类, 且Stack类只有一个构造方法.2.push方法: public E push(E item) { //调用父类Vector的addElement方法

2017-08-14 15:43:11 264

原创 LinkedList源代码分析(基于JDK1.8)

首先看一下LinkedList的定义: public class LinkedList extends AbstractSequentialList implements List, Deque, Cloneable, java.io.Serializable 由上述代码可以看出, LinkedList实现了 List, Deque, Cloneable, Serializable 接口,

2017-08-13 14:01:44 280

原创 Spring bean注入为null

最近在学习SSM框架的过程中, 总是遇到一个问题, @Autowired注解自动装配bean总是失败, 所注解的变量值总是为null, 后来通过网上查资料,发现原因如下: 使用了new实例化对象, 而new实例化出来的对象不是由spring bean容器进行管理, 从而导致spring 在自动扫描@Autowired注解时无法注入. 从另一个方面说, spring实现@Autowired注解自动

2017-07-27 20:09:20 4621 1

转载 spring+mybatis通过ApplicationContext实现Autowired

1、定义一个类,如下:[html] view plain copy print?package com.hl.demo;    import org.springframework.stereotype.Service;    public class Chinese {               public void eat() {          System.out.println(“e

2017-07-19 10:04:00 1328

转载 springmvc 配置静态资源后拦截失败

Web.xml拦截所有:<servlet> <servlet-name>spring</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </ser

2017-06-07 16:25:39 398

转载 eclipse maven项目中修改 tomcat 部署路径

Eclipse配置tomcat默认是发布到.metadata\plugins\目录下的,wtpwebapps。 这样在实际的tomcat目录下,就找不到发布的项目。那么我们要怎么设置呢? 在控制台菜单上找到Servers,然后右键,new一个server,如下图 然后finish,不要选择next,如果选择了next,那就不要选择add任何项目。 然后,在服务器名称上,双击,或者右键菜

2017-06-07 16:21:22 3787

转载 Ubuntu16.04下搜狗输入法无法输入中文

之前一段时间正常使用的搜狗输入法突然无法输出中文(具体现象是,可以呼出搜狗输入法界面,但是候选词列表无显示)

2017-04-05 19:16:02 438

原创 并发编程下的Executor框架

Executor是一个接口,用于执行实现了Runnable的任务;

2017-04-04 14:29:39 234

原创 java中的关键字

final关键字当final关键字修饰基本类型变量时,必须在定义或者构造器中对其进行初始化,该变量只能被赋值一次,当赋值完成后便不能再修改它的值;当final关键字修饰引用变量时,同样必须在定义时或者构造器对其进行初始化,引用变量在被赋值以后不能再指向其他的引用,但是可以改变引用变量中的内容;转优秀博文:对final关键字的详细理解

2017-04-03 16:01:28 186

原创 并发编程下的blockingqueue

BlockingQueue是一个接口,定义如下:public interface BlockingQueue extends QueueBlockingQueue主要用于生产者-消费者模式,读取元素时,阻塞直到队列非空;保存元素时,阻塞直到队列有可用位置;BlockingQueue不支持null值,当add,put 或者offer提供的值为null时,将会抛出NullPointerEx

2017-04-03 15:52:04 233

翻译 Spring中的<context:property-placeholder/>元素

spring中的元素主要用于方便在不同环境下进行参数配置转换,其主要的属性有如下几个:

2017-03-25 21:27:01 211

空空如也

空空如也

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

TA关注的人

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