自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(20)
  • 资源 (1)
  • 收藏
  • 关注

原创 图解归并排序算法(java版)

归并排序:采用分治法的思想(递归),将整个数组序列分成两个序列,再讲两个序列分成各自的子序列,采用递归的思想解决一个个的子问题。归并排序的时间复杂度:O(n*lgn) 归病排序的空间复杂度:O(n)归并排序的两个核心: 核心一:将两个有序序列合并。比较两个数列的第一个数,谁小就取谁,然后让该数列向后移动一位,知道其中的一个序列移动到最后一个,将另一个序列按照次序加入到已排到的序列后面。 核心二

2017-05-24 19:03:11 570

原创 SpringMVC执行流程

1.SpringMVC的流程图 2.执行流程 1、用户发送请求至前端控制器DispatcherServlet 2、DispatcherServlet收到请求调用HandlerMapping处理器映射器。 3、处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。 4、DispatcherServlet通过Han

2017-05-23 10:28:41 340

原创 TCP/IP协议(三)——UDP与TCP的区别

UDP:(发包裹,会丢失数据) 1.将数据及源和目的封装成数据包,不需要建立链接 2.每个数据包大小限制在64k内,如果数据太大,则分多个包发送 3.因为不需要建立链接,所以是不可靠协议 4.不需要建立链接,所以发送速度快TCP:(打电话,文件的上传下载,不能丢失数据) 1.建立链接,形成传输数据的通道 2.在连接中形成大数据量的传输 3.通过三次握手完成链接,是可靠的协议 4.因为

2017-05-19 10:56:12 309

原创 TCP/IP协议(二)——三次握手与四次挥手

一、三次握手完成链接 简单的过程: 1.问对方在不在 2.对方回应在 3.确定对方在流程图: 过程描述: (1)第一次握手:Client将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。 (2)第二次握手:Server收到数据包后由标志位SYN=1,直到Clien

2017-05-19 10:36:15 381

原创 TCP/IP协议(一)——TCP/IP模型介绍

两个设备之间如何发送数据? 1.找到对方的Ip。 2.将数据发送到对方指定的应用程序上,为了标识这些程序,给这些网络应用程序设置了数字标识,将这些数字标识叫做端口号,称作逻辑端口。 3.定义通信规则,这些规则称为协议,通用协议有TCP协议和UDP协议。OSI参考模型和TCP/IP参考模型 TCP/IP模型四层介绍: 1.网络接口层:负责数据帧的发送和接收,该层负责将帧放到网上或者从网上

2017-05-15 19:57:07 646

原创 二叉树遍历算法的应用(java版)

1.统计二叉树中节点的个数 思路:统计二叉树节点个数,无次序的要求,按照一种次序遍历,遇到节点count++即可。 代码:/* * 先根序统计节点的个数 */ private int count = 0; public void calculateNodeCount(Btree<T> root){ if (root != null) {

2017-05-09 19:41:00 577

原创 二叉树遍历的非递归实现(java版)

在前面的这篇文章中我写了二叉树遍历的递归实现,在这篇文章中我将讲述下二叉树的非递归实现。大多数的递归问题的非递归算法,需要用栈来消除递归。栈是一种存储容器,同时又是一种控制结构,栈先进先出的控制结构,同时,调用时可用栈来保留必要的信息,退出时,可以从栈中取出信息,进行后续的处理。所以设计二叉树的遍历非递归算法, 需要用栈来保留节点的信息。二叉树的结构class Btree<T>{ T val

2017-05-08 20:19:47 1213 1

转载 Java事务处理全解析(八)——分布式事务入门例子(Spring+JTA+Atomikos+Hibernate+JMS)

在本系列先前的文章中,我们主要讲解了JDBC对本地事务的处理,本篇文章将讲到一个分布式事务的例子。 请通过以下方式下载github源代码:git clone https://github.com/davenkin/jta-atomikos-hibernate-activemq.git 本地事务和分布式事务的区别在于:本地事务只用于处理单一数据源事务(比如单个数据库),分布式事务可以处理多种异构的数

2017-05-07 09:58:41 755

转载 Java事务处理全解析(七)—— 像Spring一样使用Transactional注解(Annotation)

在本系列的上一篇文章中,我们讲到了使用动态代理的方式完成事务处理,这种方式将service层的所有public方法都加入到事务中,这显然不是我们需要的,需要代理的只是那些需要操作数据库的方法。在本篇中,我们将讲到如何使用Java注解(Annotation)来标记需要事务处理的方法。 这是一个关于Java事务处理的系列文章,请通过以下方式下载github源代码:Git clone https://gi

2017-05-07 09:57:08 434

转载 Java事务处理全解析(六)—— 使用动态代理(Dynamic Proxy)完成事务

在本系列的上一篇文章中,我们讲到了使用Template模式进行事务管理,这固然是一种很好的方法,但是不那么完美的地方在于我们依然需要在service层中编写和事务处理相关的代码,即我们需要在service层中声明一个TransactionTemplate。在本篇文章中,我们将使用Java提供的动态代理(Dynamic Proxy)功能来完成事务处理,你将看到无论是在service层还是DAO层都不

2017-05-07 09:53:52 430

转载 Java事务处理全解析(五)—— Template模式

在本系列的上一篇文章中,我们讲到了使用TransactionManger和ConnectionHolder完成线程安全的事务管理,在本篇中,我们将在此基础上引入Template模式进行事务管理。 这是一个关于Java事务处理的系列文章,请通过以下方式下载github源代码:Git clone https://github.com/davenkin/java_transaction_workshop.

2017-05-07 09:52:26 259

转载 Java事务处理全解析(四)—— 成功的案例(自己实现一个线程安全的TransactionManager)

在本系列的上一篇文章中我们讲到,要实现在同一个事务中使用相同的Connection对象,我们可以通过传递Connection对象的方式达到共享的目的,但是这种做法是丑陋的。在本篇文章中,我们将引入另外一种机制(ConnectionHolder)来完成事务管理。 这是一个关于Java事务处理的系列文章,请通过以下方式下载github源代码:Git clone https://github.com/da

2017-05-07 09:49:58 610

转载 Java事务处理全解析(三)—— 丑陋的案例

在本系列的上一篇文章中,我们看到了一个典型的事务处理失败的案例,其主要原因在于,service层和各个DAO所使用的Connection是不一样的,而JDBC中事务处理的作用对象正是Connection对象,所以不同DAO中的操作不在同一个事务里面,从而导致事务失败。从中我们得出了教训:要避免这种失败,我们可以使所有操作共享一个Connection对象,这样应该就没有问题了。 请通过以下方式下载本系

2017-05-07 09:47:38 253

转载 Java事务处理全解析(二)—— 失败的案例

在本系列的上一篇文章中,我们讲到了Java事务处理的基本问题,并且讲到了Service层和DAO层,在本篇文章中,我们将以BankService为例学习一个事务处理失败的案例。 请通过以下方式下载github源代码:Git clone https://github.com/davenkin/java_transaction_workshop.git BankService的功能为:某个用户有两个账户

2017-05-07 09:46:03 386

转载 java事务处理全解析(一)

最近学习Java事务,看到一位前辈的系列博客不错,转载过来作为记录转载地址:http://www.davenkin.me/post/2013-02-16/40048284001   (一)Java事务处理的基本问题   (二)失败的案例   (三)丑陋的案例   (四)成功的案例(自己实现一个线程安全的TransactionManager)   (五)Template模式   (六)使用动态代理

2017-05-07 09:43:32 325

原创 Spring的AspectJ的AOP

AspectJ是一个面向切面的框架,它扩展了java语言。AspectJ定义了专门的AOP语法,所以他有一个编译器用来生成遵守java字节码规范的java文件。AspectJ的表达式: 语法:execution(表达式) execution(<访问修饰符>?<返回类型><方法名>(<参数>)<异常>)execution(“* com.zhangyike.aspectj.*(..)”)

2017-05-05 20:19:48 294

原创 Spring中的AOP技术(一)

AOP技术是面向切面编程,采取横向抽取机制,取代了传统继承体系的重复性代码(性能监视、事务管理、安全检查、缓存)。Spring的AOP使用纯java语言编写,不需要专门的编译过程和类加载过程,在运行期采用动态代理方式向目标类织入增强的代码。AOP的相关术语: JoinPoint(连接点):被拦截的点,在Spring中所谓的点就是方法,Spring值支持方法类型的连接点。 CutPoint(切入点

2017-05-04 17:00:39 468

原创 java中的静态代理

代理的概念:为某个对象提供代理,以控制对这个对象的访问。 代理接口:声明代理对象和真实对象的接口。 真实对象:实现代理接口的对象,最终存在于代理对象内部,代理对象拦截到的方法会调用真实对象中的方法。 代理对象:内部含有真实对象,也实现了代理接口,在实现接口的时候会调用真实对象中的方法,同时会也附加了新的操作。

2017-05-03 19:23:38 395

原创 CGLib动态代理原理及实现

JDK的动态代理机制只能代理实现了接口的类,而不能实现接口的类就不能实现JDK的动态代理,cglib是针对类来实现代理的,他采用了非常底层的字节码技术,其原理是通过字节码技术为一个类创建子类,并在子类中采用方法拦截的技术拦截所有父类方法的调用,顺势织入横切逻辑,这种方式实质属于继承,所以不能对final修饰的类进行代理,而子类在拦截方法的时候不会拦截final修饰的方法,因为其无法被覆盖。

2017-05-03 17:39:08 685

原创 JDK动态代理模式

动态代理模式是对方法的横向增强,它不同于继承,继承通过对父类方法的覆盖,重新对方法进行定义,而横向增强是对方法执行前和执行后的一个增加,不重新定义方法。代理方式有两种: jdk代理模式:对接口或实现接口的类进行代理 CGLib代理模式:对类进行代理jdk动态代理机制中必不可少的类和接口,一个是InvocationHandler(接口)、另一个是Proxy(类)。必须有一个类实现Invocatio

2017-05-02 20:27:20 260

java中的三种代理模式

该资源提供了三种代理模式的使用代码,其中包含每种模式的jar包、具体代码、Demo测试类,详细的注释帮助你来理解。

2017-05-03

空空如也

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

TA关注的人

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