自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

沙漏

一步步从无到有的创造

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

原创 Spring4笔记----用基于 XML 的AOP配

(1)声明切面当使用 XML 声明切面时,需要在 根元素中导入 aop Schema在 Bean 配置文件中,所有的 Spring AOP配置都必须定义在 元素内部.对于每个切面而言,都要创建一个 元素来为具体的切面实现引用后端 Bean实例. 切面 Bean 必须有一个标示符,供 元素引用(2)声明切入点切入点使用 元素声明

2016-07-31 12:25:11 407

原创 Spring4笔记----AOP的环绕通知、切面的优先级以及重用切入点定义

一、环绕通知环绕通知是所有通知类型中功能最为强大的, 能够全面地控制连接点.甚至可以控制是否执行连接点.对于环绕通知来说, 连接点的参数类型必须是ProceedingJoinPoint . 它是JoinPoint 的子接口,允许控制何时执行,是否执行连接点.在环绕通知中需要明确调用 ProceedingJoinPoint 的proceed() 方法来执行被代理的

2016-07-31 11:53:40 5467

原创 Spring4笔记----AOP的返回通知和异常通知

返回通知:无论连接点正常返回还是抛出异常,后置通知都会执行。如果只想在连接点返回的时候记录日志,应使用返回通知代替后置通知。在返回通知中,只需要在@AfterReturning注解中添加returning属性,就可以访问连接点的返回值。必须在通知方法的签名中添加一个同名参数,在运行时Spring AOP会通过这个参数传递给返回值。在方法法正常结束后执行的代码 返回通知是可以

2016-07-31 11:36:53 7437

原创 String4笔记----AOP的前置通知和后置通知

Spring的AOP(1)引入AOP的相关jar包com.springsource.net.sf.cglib-2.2.0.jarcom.springsource.org.aopalliance-1.0.0.jarcom.springsource.org.aspectj.weaver-1.6.8.RELEASE.jarspring-aspects-4.0.0.RELEASE.jar

2016-07-30 13:47:37 905

原创 Spring4笔记----AOP概述

一、 上图中每一个运算模块。横向来看都有验证参数,前置日志,后置日志。如果每个模块都自己去实现这些功能不仅使代码混乱,也造成代码繁重冗余。而且每个业务模块不能仅仅只关注自身的业务逻辑实现。二、AOP的一些概念解释:(1)切面(Aspect)  横切关注点(跨越应用程序多个模块的功能)被模块化的特殊对象(2)通知(Advice): 切面必须要完成的工作目标(T

2016-07-30 11:41:51 426

原创 Spring4笔记----动态代理

代理设计模式的原理: 使用一个代理将对象包装起来,然后用该代理对象取代原始对象.任何对原始对象的调用都要通过代理.代理对象决定是否以及何时将方法调用转到原始对象上.也就是说在调用原对象的方法的前面和后面,可以加上要实现的追踪代码。这样就解决了原来代码的分散和混乱。使业务逻辑只关心业务。代码:package com.spring.aop;import java.lang.

2016-07-30 10:59:21 446

原创 Spring4笔记----为什么要使用AOP

希望实现;一:在程序执行期间追踪正在发生的活动二:希望计算器值处理整数的计算;要实现以上要求:我们可以在调用方法的前后对正在发生的活动进行追踪,代码:(1)运算的接口package com.spring.aop;public interface ArithmeticCalculator { int add(int i, int j); int sub(int i, in

2016-07-30 10:34:16 440

原创 Spring4笔记----Bean 的生命周期方法

(1)Spring IOC容器可以管理 Bean的生命周期, Spring允许在 Bean生命周期的特定点执行定制的任务.Spring IOC 容器对 Bean的生命周期进行管理的过程:通过构造器或工厂方法创建 Bean 实例为 Bean 的属性设置值和对其他Bean 的引用调用 Bean 的初始化方法Bean 可以使用了当容器关闭时, 调用

2016-07-29 10:27:40 432

原创 Spring4----使用注解方式配置bean和bean的属性

使用注解方式配置bean和bean的属性配置bean一、在classpath中扫描组件Spring 能够从 classpath下自动扫描,侦测和实例化具有特定注解的组件.(1)特定组件包括:@Component: 基本注解,标识了一个受 Spring管理的组件@Respository: 标识持久层组件@Service: 标识服务层(业务层)组件@

2016-07-29 10:16:12 4427 1

原创 Spring4笔记----实现 FactoryBean 接口配置 Bean

Spring 中有两种类型的 Bean, 一种是普通Bean, 另一种是工厂Bean, 即FactoryBean. 工厂 Bean 跟普通Bean不同, 其返回的对象不是指定类的一个实例, 其返回的是该工厂 Bean 的 getObject 方法所返回的对象 import org.springframework.beans.factory.FactoryBean;import org.s

2016-07-28 16:50:36 525

原创 Spring4笔记----工厂方法配置bean

(1)静态工厂方法调用静态工厂方法创建 Bean是将对象创建的过程封装到静态方法中.当客户端需要对象时,只需要简单地调用静态方法,而不同关心创建对象的细节.要声明通过静态方法创建的 Bean, 需要在Bean 的class 属性里指定拥有该工厂的方法的类,同时在 factory-method属性里指定工厂方法的名称.最后, 使用 元素为该方法传递

2016-07-28 16:33:06 345

原创 Spring4笔记----使用外部属性文件配置 bean

在配置文件里配置 Bean 时, 有时需要在Bean 的配置里混入系统部署的细节信息(例如:文件路径、 数据源配置信息等)。 而这些部署细节实际上需要和Bean 配置相分离。 Spring 提供了一个 PropertyPlaceholderConfigurer的 BeanFactory后置处理器, 这个处理器允许用户将 Bean配置的部分内容外移到属性文件中。可以在 Bea

2016-07-28 09:55:07 1001

原创 Spring4笔记----bean的作用范围

使用bean的scop属性来配置bean的作用域。1. singleton:是bean的默认值,Spring IOC容器中仅有一个bean实例,bean以单例的方式存在。scope="singleton">    整个bean的生命周期只会有一个People对象 2. prototype:(原型的),容器在初始化时不创建bean,每次从容器中调用bean时,都返回一

2016-07-28 09:54:10 382

原创 Spring4----Bean之间的关系

1、继承(指的的配置上的继承)Spring 允许继承 bean的配置,被继承的 bean称为父 bean.继承这个父 Bean的 Bean称为子 Bean子 Bean 从父Bean 中继承配置,包括 Bean的属性配置,子 Bean也可以覆盖从父 Bean继承过来的配置。 若只想把父 Bean 作为模板,可以设置 的abstract

2016-07-28 09:03:48 351

原创 Spring4学习笔记----Spring的依赖注入详解

Spring是一个IOC和AOP容器,Spring是非侵入型的,基于Spring开发的web应用中的对象可以不依赖Spring的API.IOC:依赖注入 (让Spring Bean以配置文件的形式组织在一起)所谓依赖注入:在程序运行过程中,如需要另外一个对象协作(调用他的属性、方法),无需在代码中创建该被调对象,而是依赖外部容器的注入。一、Spring容器(1)Spring容器

2016-07-27 20:47:31 2361

原创 归并排序----java实现

归并排序归并排序是将两个有序的序列合并成一个新的有序序列。归并排序:(1)递归分解数组;   将数组每次折半划分,直到把数组划分为n个长度为1的有序序列。(2)合并排序数组;先做两两合并,得到2/n 个有序序列,再两两合并,不断重复这个过程,直到得到一个长度为n的数组。合并两个排序数组:(1)先依次比较两个数组中的元素,把较小的那个元素放在辅助数组的对应位置。(

2016-07-26 16:59:04 480

原创 剑指offer----求1+2+3+...+n----java实现

求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。求1+2+3+...+n此题可以采用短路与&&;就是只有前一个条件满足才可以去判断第二个条件。递归的出口就是n=0时,当n>0是每次都会执行&&之后的表达式sum += Sum_Solution(n-1); public int S

2016-07-19 17:34:47 823

原创 剑指offer----二叉树中和为某一值的路径----java实现

输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。思路:对于树的遍历一般就是深度遍历和广度遍历下四种中的一种,从根节点往下找到叶节点形成一条路径,若是和为给定的值这个路径便是需要找的路径,从根节点到叶节点边访问边相加判断可以采用前序遍历。(1)若根节点的值大于给定的值或者根节点为空,则清空路径;

2016-07-19 17:25:36 3124

原创 剑指offer---- 圆圈中剩下的数----java实现

经典解法:(1)模拟一个循环数组,一共n个人,从零开始编号,设置一个变量i记录已经走过的编号,当编号i==n时,就将其值置为1,从而模拟出一个首位相连的环形数组。(2)从0开始报号,报到第m-1的时候出列该位置的人,设置变量step,当step==m-1时,就数组对应值设为true,下次跳过此位置的人。(3)因为要找到数组最后剩下的那个人,也就是要让n-1个人出列,那么设置一个变量并赋

2016-07-19 11:26:32 682

原创 剑指offer----之字形打印二叉树

请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。思路:(1)如果每层都是从左到右一次打印这样只需要一个队列,在访问当前节点时,把当前节点的孩子存入队列就可以实现。(2)现在奇数层出队顺序是正确的,偶数层的话就是队列反过来的顺序,所以依然用队列在每一层出队节点,如果左右孩子存在,入队节点的左右

2016-07-19 10:22:43 831

原创 深入浅出java IO模型

一、同步和异步同步:一个事件或者任务的执行,会使整个流程暂时等待,也就是说如果有多个任务要执行,必须要逐个进行。异步:一个事件或者任务的执行,不会使整个流程暂时等待,也就是说如果有多个任务要执行,可以并发去执行。同步和异步的关键在于一个事件或者任务的执行是否会导致整个流程暂时等待。也就是任务是逐个完成的吗二、阻塞和非阻塞阻塞:在某个事件或者任务执行的过程中,它发出了一个请求,但

2016-07-19 09:33:23 2724

原创 剑指offer----连续子数组的最大和----java实现

HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。你会不会被他忽悠住?利用动态规划思路

2016-07-17 23:52:06 2228

原创 剑指offer----字符流中第一个不重复的字符----java实现

题目描述请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。 输出描述:如果当前字符流没有存在出现一次的字符,返回#字符。思路:第一个不重复的字符  两个关键点 不重复也就是出现一次,第一个也就是找到将其返回

2016-07-17 21:17:55 2136 2

原创 剑指offer----二叉搜索树与双向链表----java实现

题目:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。思路:将二叉搜索树转换成一个排序的双链表,利用二叉搜索树的特性,非空二叉树的左子树上的节点的值都比根节点的值小,右子树上的节点的值都比根节点的值大,利用搜索二叉树的中序遍历得到的就是一个排序的序列;双链表不仅要指向它后面的节点还要指向它前面的节点,所以需要一个引用

2016-07-17 16:52:24 1345

原创 剑指offer----二叉搜索树的第K个节点----java实现

思路:根据二叉搜索树的特点来解决,非空二叉搜索树是左子树上的所有节点比根节点小,右子树上的所有节点比根节点大,其左右子树同样遵循这个规则。所以二叉搜索树的中序遍历结果,就是一个按照从大到小的顺序排序的序列,访问第K个节点时就终止程序即可。TreeNode KthNode(TreeNode pRoot, int k) { if(pRoot == null ||

2016-07-16 21:45:23 2244

原创 剑指offer----把二叉树打印成多行----java实现

利用层次遍历的算法,设置变量last指向当前层的最后一个节点,设置变量count记录当前层已经访问的节点的个数,当count等于last时,表示该层访问结束。层次遍历在求树的宽度、输出某一层节点,某一层节点个数,每一层节点个数都可以采取类似的算法。树的宽度:在树的深度算法基础上,加一个记录访问过的层节点个数最多的变量max,在访问每层前max与last比较,如果max比较大,max不变,如

2016-07-16 20:55:59 2043

原创 剑指offer----二叉树的深度----java实现

二叉树的深度二叉树的深度可以利用递归来解决,如果根节点不为空,先得到它的左子树和右子树的深度,用左右子树中深度较大的那个加一就是整个树的深度;/*public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) {

2016-07-16 17:47:49 365

原创 剑指offer----最小的k个数----java实现

输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。思路:如果对数组按照从小到大重新排序,那么前k个就元素就是最小的,但是时间复杂度高;可以利用快排的思想,选数组的第一个位置的数作为分界值,第一次排序后,分界点为low(1)如果low>k-1;low之后的数,都比low位置的数大,最小的k个数在low之前,只需要

2016-07-16 17:15:44 577

原创 剑指offer----O(1)时间删除给定链表中的节点

如果从头开始遍历,遍历到给定节点的前一个节点,让它的前一个指向它的下一个,该节点指向为空,就把该节点删除掉了,但是这个时间复杂度为O(N);思路:既然是给出了一个链表中的节点,我们可以根据这个节点的next属性找到它的下一个节点,让该节点的值和next都等于下一个节点的值和next就达到对下一个节点的复制,该节点的值和next都被覆盖掉了,然后把删除它的下一个节点,也就达到对给定节点的删除。

2016-07-14 16:30:15 370

原创 剑指offer----旋转数组的最小数字----java实现

把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。如果直接遍历数组,时间复杂度为O(n),可以利用旋转数组的特性来解决此题;思路:(1)如果发生旋转,前面的

2016-07-14 15:34:09 10031 2

原创 剑指offer----顺时针打印数组----java实现

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.思路:顺时针打印时,分为四个步骤:(1)从左到右  (2)从上到下(3)从右到左(4)从下到上问题的复杂性在于如

2016-07-12 20:13:49 2924

原创 剑指offer----调整数组顺序使奇数位于偶数前面----java实现

调整数组顺序使奇数位于偶数前面调整数组顺序使奇数位于偶数前面(1)相对位置可以改变,使用快排的思想,     从前往后找偶数,从后往前找奇数并交换。public void reOrderArray(int array[]) { if(array == null) return; int low = 0; int high = array.leng

2016-07-12 10:09:54 647

原创 插入排序----直接插入排序----java实现

依次将待排序的数据元素按其关键字大小插入到前面的有序序列第1趟:将第2个元素插入到前面的有序序列中,此时前面就只有一个元素,是有序的;第2趟:将第3个元素插入到前面的有序序列;.......第n-1趟:将第n-1个元素插入到前面的有序序列。public void insertSort(int[] array) { if(array == null || array.l

2016-07-11 21:46:31 289

原创 交换排序----冒泡排序----java实现

冒泡排序:第1趟:依次比较0和1、1和2.......n-2和n-1索引位置的元素,如果发现一个数比他后面的数大,则交换着两个数的位置,经过第一趟排序,最大的数排在了数组的最后面。第2趟:依次比较0和1、1和2.......n-3和n-2索引位置的元素,如果发现一个数比他后面的数大,则交换着两个数的位置,经过第2趟排序,0-n-2区间中最大的数排在了数组的倒数第二个位置。.......

2016-07-11 15:49:32 429

原创 选择排序----堆排序----java实现

(1)小顶堆    假设有n个元素的序列,k0-kn,如果将这组数据排成一棵完全二叉树,则此树的特点是:树中所有节点的值都小于其左右节点的值,此树的根必然是最小的;(2)大顶堆假设有n个元素的序列,k0-kn,如果将这组数据排成一棵完全二叉树,则此树的特点是:树中所有节点的值都大于其左右节点的值,此树的根必然是最大的;堆排序算法思想:大顶堆的根节点一定是这组数据中最大的数,如果

2016-07-11 15:26:10 427 1

原创 选择排序----直接选择排序----java实现

思路:第一趟比较:程序将记录定位在数组的第一个位置,拿第一个数据与后面的每个数据对比,用一个变量mix记录比第一个数小的数据的索引,通过比较不断更新mix,最后得到整个数组中最小的元素的索引,将第一个数与第mix个数交换,则最小数位于数组的其实位置了,第二趟比较:程序将记录定位在数组的第二个位置,拿第二个数据与后面的每个数据对比,得到从第二个数据开始,数组中最小的数,并与第二个数交

2016-07-11 15:19:15 3296 1

原创 剑指offer----数字在排序数组中出现的次数----java实现

题目:统计一个数字在排序数组中出现的次数。因为是排序数组,那么数组中第一个K之前的数都会比K小,最后一个K之后的数都会比K大,可以分为两步来解决这个问题,分别用二分查找找到数组中第一个K再找到第二个K,这样就可以得到数组中K的个数。在数组中查找K,如果中间的数比K大,那么K出现在前半段;如果比K小,K出现在后半段,那么K出现在后半段;如果等于K,寻找第一个K的算法则需要判断

2016-07-10 11:29:30 604

原创 剑指offer----两个链表的第一个公共节点----java实现

输入两个链表,找出它们的第一个公共结点。思路:两个有公共节点的链表,具有这样的特点:单向链表的节点的的属性有节点的值,它指向的下一个节点。所以当有一个公共节点时,不仅值相同,它们指向的下一个节点也相同,依次类推。两个有公共节点的链表,从第一个公共节点开始,直到尾节点都相同。 1--> 3-->4-->              6--->7--->1-->85--->2--->

2016-07-08 10:44:47 732

原创 剑指offer----第一个只出现一次的字符位置----java实现

在一个字符串(1字符串长度,全部由字母组成)中找到第一个只出现一次的字符的位置。若为空串,返回-1。位置索引从0开始。如果从头开始让每一个字符都与其后面的字符相比较,当第一个出现一次的字符,就结束程序。但是这种算法的时间复杂度是O(n^2);思路:我们可以遍历统计每个字符在字符串中出现的次数,把它保存在数组中,可以利用哈希算法,让字符的ASCII码与数组的键值保持一定的关系,数组的值用来保

2016-07-07 17:32:58 2931 2

原创 剑指offer----二叉搜索树的后序遍历----java实现

一、二叉搜索树,又叫二叉排序树,简称BST二叉排序树或者是一棵空树,或者是一棵具有下列特性的非空二叉树:(1)若左子树为空,则左子树上所有的节点关键字均小于根节点的关键字;(2)若右子树非空,则右子树上所有的节点的关键字均大于根节点的关键字;(3)左右子树本身也是一棵二叉排序树。后序遍历的顺序: 左 右 根一般在处理二叉树的遍历顺序时,先找到根节点,根据根节点把序列拆分

2016-07-07 16:26:57 366

空空如也

空空如也

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

TA关注的人

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