- 博客(34)
- 资源 (15)
- 收藏
- 关注
原创 Spring MVC实现原理解析
Spring MVC基于MVC设计模式设计,其实现基于Spring IOC容器和Servlet。Spring MVC的启动Spring MVC通常运行在Web容器(如Tomcat)中,其启动由Web容器触发。 以下是一个常规的Web应用部署描述文件Web.xml:<?xml version="1.0" encoding="UTF-8"?><web-
2018-07-10 17:14:53
9935
原创 Spring AOP实现原理解析
Spring AOP相关概念AOP:Aspect-Oriented Programming,是一种新的模块化机制,用来描述分散在对象、类或者函数中的横切关注点。Join Point:程序流中被分割为一个个代码单元,单元之间的点即为Join Point。如程序调用栈中,可以按照各个方法将代码执行流分割为一个个方法单元,那么方法调用前后都是Join Point。Advice:模块化内...
2018-07-05 13:39:32
1670
原创 Spring IOC实现原理解析
IOCIOC即DI,控制反转与依赖注入。表示的概念都是将对象自身从其依赖关系的管理中解放出来,将这个管理工作的责任交给第三方来完成。在Spring中,这个第三方就是IOC容器:基础版的BeanFactory和升级版的ApplicationContext。IOC容器全面接手了对象依赖关系图的管理工作。管理工作主要分为两大部分:元数据信息的准备和对象关系图的正式建立。元数据信息元数...
2018-07-05 13:25:27
1833
原创 InnoDB引擎--事务隔离性
事务将数据库从一个一致状态转换至另外一个一致状态,若某个事务看到了另外一个事务在状态转换过程中的中间态数据(不一致状态),将有可能导致另外一个事务的操作基于一个不一致的数据库状态,进而数据库失去一致性。事务隔离性主要用于处理数据库的并发访问问题。事务隔离性级别事务隔离性分为4个级别,可以在事务的一致性与并发性上的做出权衡。另外,不同的隔离级别也有不同的问题存在。读未提交(Rea...
2018-06-03 17:21:44
595
原创 InnoDB引擎--事务持久性
事务是指构成单一逻辑工作单元的操作的集合。数据库系统维护事务的ACID四个特性:原子性:事务的所有操作在数据库中要么全部反映,要么全部不反映。一致性:事务执行前后数据库保持约束一致性和业务逻辑一致性。隔离性:在事务并发执行时,各个事务都感觉不到其他事务的存在。持久性:事务一旦提交,其更改是永久性的,即使数据库系统崩溃也能恢复。先从持久性说起。持久性保证持久性的策略就是Wr...
2018-05-15 14:36:14
4452
原创 InnoDB引擎--索引
良好的索引设计可以大大提高数据库查询性能。InnoDB引擎支持自适应哈希索引、B+树索引和全文索引。其中自适应哈希索引是系统自动调整的,用户无法干预。B+树索引聚集索引聚集索引以主键顺序构建B+树,叶子节点中存储行数据记录,数据也是索引的一部分。辅助索引辅助索引以索引列逻辑顺序构建B+树,叶子节点中不存储实际的行数据记录,而存储的是行数据的聚集索引键。...
2018-05-15 10:56:36
480
原创 InnoDB引擎--存储结构与文件
数据库是数据的集合,数据库管理系统(DBMS)是操作和管理数据库的应用程序。数据库应用主要有两类:OLAP(联机分析处理)和OLTP(联机事务处理)。 OLAP的主要特点是:实时性要求不高数据量大并发量小OLTP的主要特点是:实时性要求高数据量小高并发要求满足ACIDMysql体系架构mysql是一种DBMS,其体系架构如下图所示: mysql中集成的...
2018-05-14 14:36:54
10883
1
原创 JVM--解析、分派、重载与重写
方法调用最关键的问题就是要确定具体调用哪个版本的方法。在Java虚拟机里共有5条方法调用字节码指令:invokestatic:调用静态方法invokespecial:调用实例构造方法,私有方法和父类方法invokevirtual:调用虚方法invokeinterface:调用接口方法,在运行时确定一个实现此接口的对象invokedynamic静态解析通过invokestat...
2018-04-23 15:08:20
293
原创 JVM--JVM类加载机制(下)
在深入理解JVM–JVM类加载机制(上)中,只写到Java类加载机制的加载阶段,在类的生命周期中,还有后面的验证、准备、解析、初始化、使用和卸载这些阶段。验证验证阶段的主要工作是为了确保Class文件流中包含的内容符合虚拟机的要求,而且不会威胁到虚拟机自身的安全,主要有以下几个方面:文件格式验证:验证Class文件格式元数据验证:Java语言级语义分析字节码验证:验证方法体不会危...
2018-04-18 16:56:53
272
原创 JVM--JVM类加载机制(上)
类加载机制虚拟机把描述类的Class文件(一串二进制字符流,无论何种存在形式)加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是JVM的类加载机制。类的生命周期类从加载到内存到卸载的整个生命周期如下图: 加载阶段Java虚拟机规范并没有指定什么时候开始加载阶段,由虚拟机实现自己选择。加载阶段的工作由类加载器来完成,在JV...
2018-04-17 16:54:19
250
原创 JVM--垃圾回收
哪些内存应该被回收?JVM垃圾回收主要针对堆区和方法区。在Java堆中,我们不再需要的对象就可以被回收了。例如:在一个方法中新生成了一个Integer对象作为局部变量,当方法结束后,该对象将不会再被使用,是被回收的对象。如何确定对象可被回收?引用计数法当没有引用指向某个对象时,可以认为该对象可被回收。在引用计数法中,每个对象都记录了指向它的引用的个数,当引用为0时即可被...
2018-03-30 10:48:01
295
原创 JVM--JVM内存布局与Java对象的定义
JVM基本结构如图所示: 运行时数据区Java虚拟机定义了若干种程序运行时会用到的运行时数据区。程序计数器每个Java线程都拥有自己的程序计数器,字节码执行游标。虚拟机栈每个Java线程都拥有自己的虚拟机栈,在线程创建时同时创建,用于存储栈帧。栈帧是用来存储数据和部分过程结果的数据结构,用来处理动态链接,方法返回和异常分派。栈帧随着方法的调用而创建,随着方...
2018-03-29 12:46:41
290
原创 Java并发机制(5)--线程、中断、Runnable、Callable、Future
Thread线程的基本概念我们已经在深入理解Java并发机制(1)–理论基础中总结过了,这里不再赘述。线程的状态Java线程在其生命周期里处于以下6种状态,这些状态定义在Thread类内部枚举中。状态 说明NEW 初始态,还未调用start()方法RUNNABLE 运行态,将操作系统中的就绪态和运行态统一定义为RUNNABLEBLOCKED 阻塞态,线程等...
2018-03-28 09:51:50
2043
原创 AVL树图解和Java实现
AVL树AVL树是带有平衡条件的二叉查找树。平衡条件为:某节点左右子树的高度差不超过1。平衡操作-旋转在AVL树的插入和删除操作中,需要更新树节点的高度信息以检查AVL树的平衡状态,如果插入和删除后出现了不平衡,还需要通过旋转操作来修正AVL树的平衡状态。插入后平衡假设插入后非平衡节点为N,4种情况和修正方案:向N的左儿子的左子树插入:右旋向N的右儿子的右子树插...
2018-03-27 13:33:44
4914
原创 二叉查找树Java实现
二叉查找树首先是一棵二叉树,使其称为查找树的关键性质是其某节点的左子树中任意值都小于该节点,右子树中任意值都大于该节点。代码如下:public class BinaryTree<T extends Comparable<T>> { private TreeNode<T> root = null; private LinkedLi...
2018-03-22 13:23:59
349
原创 排序算法汇总
冒泡排序算法思想:比较+交换。从数组第一个元素开始,两两比较相邻元素,将较大者后移,直到最后一个元素。重复此操作,直到数组中所有元素有序。public class BubbleSort { public static void sort(int[] arr) { //重复N-1次 for (int i = 0; i &lt; arr.length - 1...
2018-03-19 15:27:47
247
原创 Java String类相关
String类简述String类是不可变类,由final关键字修饰,内部由final数组char[]保存字符。对于String类的方法,查询类方法不会导致char[]数组内容变化。其他诸如subString,replace的方法均需要原字符串内容变化,又由于String类不可变,当调用这些方法的时候实际上返回的是新建的String对象。String类内部由char[]数组维护,String...
2018-03-15 16:46:23
220
原创 JDK动态代理与CGLIB动态代理应用及源码解析
代理模式代理模式:为其他对象提供一种代理以控制对这个对象的访问。代理模式中有三种角色:Subject抽象主题角色、RealSubject真实主题角色、Proxy代理主题角色。Subject描述了业务行为,RealSubject执行具体的业务逻辑,Proxy代理会拦截对RealSubject对象方法的调用,并在方法调用前后做预处理以及一些善后工作。代理模式可以很好地在不侵入原代码的情况下...
2018-03-15 13:40:44
2840
1
原创 Session与Cookie
cookie技术http协议是无状态的,服务器无法判断某一个简单http请求来自于谁。这里我们可以利用cookie技术,当一个用户第一次登录服务器时,http request中不带有cookie字段,服务器通过http response中set-cookie字段设置浏览器访问该网站的cookie,然后该用户第二次访问服务器时,由于服务器设置了cookie,浏览器会自动将关联该服务器的cooki...
2018-03-13 10:46:59
288
原创 单例模式
单例模式定义确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。单例模式优缺点优点在内存中只有一个实例,节约内存,减少性能开销。当一个对象的产生需要占用较多资源时(如文件、读取配置文件等),采用单例模式可有效节约资源。单例对象可以作为全局访问点,优化和共享全局资源访问。缺点单例模式要求自行实例化,因此单例模式一般没有接口,拓展性不好。...
2018-02-28 16:03:51
243
原创 Java并发机制(4)--AQS、ReentrantLock、ReentrantReadWriteLock源码分析
背景锁是用来控制多个线程访问共享资源的工具,Java中有两种锁,一种是jvm层面的synchronized关键字,一种是JUC的Lock接口的实现类。 Lock接口对比synchronized关键字需要显示的获取/释放锁,虽然丧失了一定的便捷性,但是提供了synchronized关键字所不具备的获取/释放锁的灵活性、可中断获取锁、超时获取锁、非阻塞获取锁(trylock)、以及多个条件变量。...
2017-11-24 16:20:31
491
原创 Java并发机制(3)--synchronized关键字底层原理
synchronized关键字在Java语言层面提供了同步功能。synchronized同步的形式Java中的任何对象都可以被锁。 有以下三种形式:对于普通同步方法,锁住的是当前实例对象对于静态同步方法,锁住的是当前类的Class对象对于同步方法块,锁住的是synchronized括号里配置的对象这三种形式在jvm里都是由管程来支撑的。 同步代码块在字节码层面插入了...
2017-11-02 10:32:52
412
原创 Java并发机制(1)--理论基础
进程与线程概念在现代操作系统中,进程支持多线程。进程是资源管理的最小单元,线程是程序执行的最小单元。线程作为调度和分配的基本单位,进程作为资源分配的基本单位。一个进程的组成实体可以分为两大部分:线程集和资源集。进程中的线程是动态的对象;代表了进程指令的执行。资源,包括地址空间、打开的文件、用户信息等等,由进程内的线程共享。多道程序设计模型计算机采用多道程序设计模型...
2017-10-25 14:16:14
2840
原创 数据结构与算法基础概念总结
线性结构—–线性表定义具有相同数据类型数据元素的有限序列顺序表逻辑上相邻的元素物理位置上也相邻,即数组链式表逻辑上相邻的元素物理位置上不一定相邻,节点包含数据域和指针域,指针域指向后继节点。有单向链表,双向链表,循环链表。顺序与链式比较 名称 存取方式 逻辑/物理结构 增删 查 空间分配 场景选择 顺序表 ...
2017-05-11 21:08:28
457
原创 Java 基础知识总结--持续更新
Java是OOP语言,所有的OOP语言都有三个特性:封装、多态、继承。封装封装是一种将代码与它所处理的数据结合起来,而不被外界干扰滥用的程序设计机制。 在Java中,基本封装单元是类,数据即字段,代码即方法。多态多态是一种允许使用一个接口来访问一类动作的特性。 在Java中,多态的表现形式为:1、接口的实现;2、继承父类进行方法重写(override);3、同一个类中进...
2017-05-08 11:02:00
3063
原创 SQL各种Join连接总结
本文对比总结了SQL中的JOIN之间的联系和区别1.INNER JOIN or JOIN2.OUTER JOIN 2.1LEFT OUTER JOIN or LEFT JOIN 2.2RIGHT OUTER JOIN or RIGHT JOIN 2.3FULL OUTER JOIN or FULL JOIN3.NATURAL JOIN4.CROSS JOIN5.SELF JOIN
2017-04-25 10:20:28
22348
原创 BUG 记录
Mybatis1、sql update 当wedId为null时不抛异常,不更新数据库,注意手动检查条件是否为nullUPDATE exception_waterquality_diagnose SET enterpriseId = #{enterpriseId},categoryId = #{categoryId},cause = #{cause},solution = #...
2017-04-21 16:35:33
294
深入理解Redis
2018-09-06
微服务设计--中文高清完整版
2018-01-09
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人