自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 synchronized锁优化前传-Java对象结构解析
原力计划

我们经常会说到synchronized是一把重量级的锁,难道是因为这把锁有几斤?我们也常听到说,在JDK1.6中对其进行了优化,那么又是怎么实现的?想了解这些,我们必须先详细的了解Java对象的结构。 一:Java对象,请掀起你的盖头来 以下是64位JVM下的对象结构描述: ...

2020-04-11 12:20:40 232 0

原创 cglib动态代理实现原理详细分析

在之前Java代理模式中大致的分析了下代理模式的类型及对每种代理类型简单的举例了下。在上篇JDK动态代理实现原理详细分析中,对其JDK代理的流程做了一个详细的分析。而本文,将介绍另一种动态代理模式:cglib动态代理。阅读完本文,你将对cglib代理模式的运行的流程有一个清晰的认识。 本文的目录...

2020-01-13 16:37:11 1187 0

原创 JDK动态代理实现原理详细分析

在之前Java代理模式中大致的分析了下代理模式的类型及对每种代理类型简单的举例了下。本文将对JDK动态代理进行详细的分析。读完本文,你将对JDK的动态代理的运行流程,生成的代理类结构以及实现的原理有一个更加深入的认识。 本文将从以下几个方面概述: 目录 一:JDK动态代理简单样例 二:JD...

2020-01-13 16:36:53 414 0

原创 Java并发编程之synchronized解析

初学Java多线程的时候,遇到需要线程同步的地方,总是会用到synchronized关键词。很简单的就是帮助我们实现预想的“效果”。殊不知,synchronized是一个重量级的锁,使用不当的话其实会使我们程序执行的效率大打折扣。以下, 一:synchronized的作用范围 synchr...

2019-03-16 18:13:50 124 0

原创 Java并发编程之线程状态与创建线程的方式

在Java并发编程中,线程所处的状态以及创建线程的方式算是’开学第一课’了。而从本文开始,我将对Java并发做一个系统的认识。话不多说,开始进入主题。 一:线程状态 在Thread类中详细的枚举了线程的状态,如下: public enum State { /** ...

2019-03-02 13:41:42 193 0

原创 Spring源码分析之createBean主流程分析

我们知道,在调用getBean获取bean实例的实例,首先会从缓存中获取bean实例,如果没有获取到,就会去创建bean的时候。关于获取bean实例,可以参考Spring源码分析之getBean主流程分析,而本文将会对创建bean实例的主流程来做一个分析。而入口,当然是createBean(Abs...

2019-01-20 15:21:35 289 0

原创 Spring源码分析之getBean主流程分析

当我们通过向Spring容器获取某个bean的时候,总是调用Spring中重载的各种getBean方法。那么,getBean中的流程是什么样的? 通过本文,你将对getBean方法的主流程有一个详细的认识。 入口当然是getBean方法: public Object getBean(St...

2019-01-08 23:23:35 700 0

原创 Spring源码分析之BeanFactory初始化

在上一篇Spring源码分析之IOC容器创建过程中,大致梳理了一下IOC容器初始化的流程。在初始化的过程中,会调用模板方法refresh(),在刷新工厂方法中,首先会获取beanFactory,即以下这行代码: ConfigurableListableBeanFactory beanFacto...

2018-12-11 12:26:23 517 0

原创 Spring源码分析之IOC容器创建过程

我们知道,Spring框架基于IOC容器能够实现依赖注入,使代码之间不在具有高度的耦合关系.解耦给问我们带来很多的好处,不仅会使我们的代码更加容易扩展维护,同时也更加方便测试。 在Spring中,我们常使用ClassPathXmlApplicationContext(类路径下读取配置),XmlW...

2018-12-04 23:14:35 604 0

原创 小结

新的一年,希望自己能够多看一些专业书籍,加油!

2017-12-31 22:51:12 100 0

原创 MAVEN工程JAR包丢失问题

问题背景: Tomcat 服务器运行一个Maven工程后,重新加入另一个之前能够运行的Maven工程一直失败,并报一下错误.java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderLis...

2017-11-28 14:57:40 2404 0

原创 SpringMVC+Spring+Mybatis基于Maven的整合

其整合工程的目录结构如下:首先是pom.xml文件中的内容:<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instan...

2017-10-28 22:16:39 265 0

转载 互联网协议入门(二)

上一篇分析了互联网的总体构思,从下至上,每一层协议的设计思想。这是从设计者的角度看问题,今天我想切换到用户的角度,看看用户是如何从上至下,与这些协议互动的。互联网协议入门(二)(接上文)七、一个小结先对前面的内容,做一个小结。我们已经知道,网络通信就是交换数据包。电脑A向电脑B发送一个数据包,后者...

2017-09-30 16:32:53 124 0

转载 互联网协议入门(一)

我们每天使用互联网,你是否想过,它是如何实现的?全世界几十亿台电脑,连接在一起,两两通信。上海的某一块网卡送出信号,洛杉矶的另一块网卡居然就收到了,两者实际上根本不知道对方的物理位置,你不觉得这是很神奇的事情吗?互联网的核心是一系列协议,总称为”互联网协议”(Internet Protocol S...

2017-09-30 16:04:13 132 0

原创 排序算法之快速排序

快速排序每趟排序的结果是:在选取的基准值得左边全部比其小,而右边都比其大。 下面的采用快速排序第一遍的演示: 其代码(Java)如下: import java.util.Arrays;/** * 快速排序 * * @author sg */ public class TestQu...

2017-09-30 15:27:17 136 0

原创 二分查找之Java实现

非递归与递归两种方法实现:/** * 二分查找:非递归的方法 * 缺点:有序数组中含有多个待查找的数值的时候,这种方法只能显示一个 * @param src //带查找的有序数组 * @param des //带查找的数值 * @return ...

2017-08-18 13:09:49 157 0

原创 Spring 之通知的类型以及切面的优先级

Spring AOP编程,即面向切面编程,那么什么是切面?先看下面的例子:一个简单的加减乘除public interface Calculate { int add(int x,int y); int sub(int x,int y); int mul(int ...

2017-07-08 18:31:32 1131 0

原创 Spring之自动装配

Spring自动装配分为利用xml配置文件配置和注解的方式进行自动装配两大类xml配置(常用): byType:通过类型来装配bean byName:通过名称来装配bean //接口dao: package com.sg.dao; public interface UserDao { ...

2017-07-07 12:40:50 319 0

原创 Spring之创建bean的方式

学习Spring有一段时间了,这里会把一些知识点给梳理一遍。这里要说到的是-Spring创建bean的四种方式:整个工程的目录结构,用maven进行了管理: 配置文件applicationContext.xml:<?xml version="1.0" encoding=...

2017-07-06 15:13:17 509 0

原创 Java并发编程之CountDownLatch

在Java.util.concurrent包下,有一个CountDownLatch类。官方定义:A synchronization aid that allows one or more threads to wait untila set of operations being performe...

2017-06-12 00:26:24 475 0

原创 Java并发编程之CAS算法

在多线程环境下,我们要实现对一个变量自增的话,往往会使用java.util.concurrent.atomic包下的相关实现类。 如下:public class TestAtomic { public static void main(String[] args) { Th...

2017-06-11 11:16:21 966 0

原创 Java并发编程之volatile解析

在对该关键字进行认识之前,需要对Java内存模型有一定的认识。 Java内存模型规定了所有的变量都存储在主内存中,每个线程都有自己的工作内存,线程的工作内存保存了该线程使用到的变量的是主内存副本的拷贝,线程对于变量的操作(读取,复制)都必须在工作内存中进行,而不能直接读写主内存中的变量。 在进...

2017-06-11 00:56:44 569 0

原创 数据库事务的隔离级别

事务的隔离级别分为以下四种:对事务的基本操作 /*查看事务的隔离级别*/ SELECT @@tx_isolation;/*查看事务是否自动提交*/ SELECT @@autocommit;/*设置隔离级别为读已提交*/ SET tx_isolation='READ-UNCOMMITTED...

2017-06-03 12:56:35 480 0

原创 Java代理模式

本文将从以下几个方面进行阐述:静态代理: 其类图如下: 真实角色与代理类同时实现一个接口,真实角色只处理与它核心业务相关的,其他的全部由代理角色完成。/** * 抽象接口 * @author sg */ public interface Subject { void ...

2017-05-31 23:15:07 282 0

原创 Java NIO的非阻塞式网络通讯

之前说过NIO与传统IO不同有一点是NIO是非阻塞的,当线程从某通道进行读写数据时,若没有数 据可用时,该线程可以进行其他任务。线程通常将非阻塞 IO 的空闲时间用于在其他通道上执行 IO 操作,所以单独的线程可以管理多个输入和输出通道。因此,NIO 可以让服务器端使用一个或有限几个线程来同时处...

2017-05-11 15:39:26 679 0

原创 Java NIO的Scatter与Gather

Scatter(分散):分散读取,从管道Channel中读取的数据分散到一个或者多个缓冲区Buffer中,分散的时候会依次的按缓冲区的顺序一个一个的进行。 Gather(聚集):聚集写入,把缓冲区position到limit之间的数据依次的写入到管道中。 这样,一个大文件就可以分割成许多小的文...

2017-05-11 15:12:54 594 0

原创 Java NIO的Channel

NIO中通道由 java.nio.channels 包定义的。Channel 表示 IO 源与目标打开的连接。Channel 类似于传统的“流”。只不过 Channel本身不能直接访问数据,Channel 只能与Buffer 进行交互。

2017-05-11 14:52:37 461 0

原创 Java NIO的Buffer

前面说到的NIO中Buffer一个用于保存特定基本数据类型的容器,其底层就是一个数组。 可以看到,基本类型除了boolean,其他的都对应一个Buffer的实现类。对于抽象类Buffer,需要理解其以下几个属性: private int mark = -1; //标志位,标记后能使调用...

2017-05-11 12:14:27 350 0

原创 Java NIO 与IO的区别

在jdk1.4中,引入了NIO(NEW IO),其与传统的IO有着很大的差别,具体表现在:1:面向流与面向缓冲区传统IO面向流的,意味着每次从流中读取一个字节或多个字节,直到读取完所有字节,而没有缓冲的,想要缓冲的就得使用相应的缓冲流。对于InputStream与OutputStream要么是输入...

2017-05-11 10:19:42 558 0

原创 Java_LinkedHashSet工作原理

Hash table and linked list implementation of the Set interface, with predictable iteration order. This implementation differs from HashSet in that ...

2017-05-04 15:10:02 848 0

原创 Java_LinkedHashMap工作原理

Hash table and linked list implementation of the Map interface,with predictable iteration order. This implementation differs from HashMap in that it...

2017-05-04 14:50:11 3263 3

原创 Java_HashSet工作原理

This class implements the Set interface, backed by a hash table (actually a HashMap instance). It makes no guarantees as to the iteration order of t...

2017-05-03 23:53:30 1116 0

原创 Java_LinkedList工作原理

Doubly-linked list implementation of the List and Deque interfaces. Implements all optional list operations, and permits all elements (including nu...

2017-05-03 17:47:11 1367 0

原创 Java_ArrayList的工作原理

Resizable-array implementation of the List interface. Implements all optional list operations, and permits all elements, including null. In additio...

2017-05-03 14:03:30 497 0

原创 Java-try_catch_finally中带有return语句的执行顺序

我们知道,在try_catch_finally块对异常进行捕捉时,一定会执行到finally块中的语句。看下面例子:Test1:(try语句中有return,finally中没有) public static void main(String[] args) { System...

2017-05-03 11:59:35 245 0

原创 Java自动装箱与拆箱

Java的原始数据类型有byte,boolean,short,char,int,float,long,double 而包装类对应的分別有Byte,Boolean,Short,Chararcter,Integer,Float,Long,Double 自动装箱就是Java自动把原始数据类型装换为对...

2017-04-23 17:39:42 215 0

原创 Struts2中OGNL的解析

OGNL是Object Graphic Navigation Language的缩写,顾名思义,对象图导航语言。它是struts2框架的默认的表达式语言。 通过OGNL,我们可以在jsp的页面中很方便获取一些我们所需要的值。那么,能获取哪些值,怎么获取的这些值?这里我们先清楚三个概念:Actio...

2017-04-09 16:27:15 281 0

原创 struts2的启动流程与请求流程

从点击服务器(这里说到的服务器为tomcat)的start来启动服务,到对服务器发出请求,中间经历了一个怎样的过程?启动流程: WEB服务器启动: 1- 加载解析 $CATALINA_HOME/conf/web.xml 2-加载每个WEB app 下的 web.xml 3-对于...

2017-04-08 15:13:46 439 0

原创 Java并发编程之线程池

线程是一种稀缺的资源,如果对于每一个任务都来创建一个新的线程来处理,不仅会消耗系统的资源,还会是降低系统的稳定性。使用线程池能够统一的对线程分配与管理。——-类结构图 1-在接口Executor中,只有一个void execute(Runnable command)方法 2-ThreadPoo...

2017-03-15 16:11:44 299 0

原创 Java线程之Timer

很多时候,我们需要周期性的执行某个任务,在JDK1.5之前,有一个Timer类。其官方文档中这样描述一种工具,线程用其安排以后在后台线程中执行的任务。可安排任务执行一次,或者定期重复执行其执行任务的时候,需要调用schedule方法。schedule重构了四个方法,如下:void schedule...

2017-03-13 17:13:50 243 0

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