自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

ZKaTT的博客

技术交流爱好者

  • 博客(34)
  • 问答 (1)
  • 收藏
  • 关注

原创 剑指offerQuestion9

package test;/* * 写一个函数用于求解斐波那契数 * f(n)=f(n-1)+f(n-2) * n=0,f(0)=0;n=1,f(1)=1 */public class Question9 { public static int fibonaci(int n){ /* * 可以考虑使用递归,原方程就是递归方程 * 但是这种情况的时间复杂度比较大

2017-08-17 11:27:11 342

原创 剑指Offer_Question5

package test;/* * 从尾到头打印链表 * 输入一个头结点,从尾到头打印每个节点的值 * * 可以可以使用栈来实现,访问一个节点时就入栈,根据栈的特点,输出时已经反向 * 递归本身就相当于栈结构 */class Qnode{ public int key; public Qnode next; public Qnode(int key){ this.ke

2017-08-02 22:51:00 302

原创 剑指offer

package test;/* * 替换空格 * 实现一个函数,将字符串中的空格替换成%20 */public class Question4 { public static String replaceBlank(String string){ /* * 可以直接创建一个新的字符串/StringBuffer,然后对输入的字符串进行遍历,如果遇到字符, * 则加在新

2017-08-02 17:56:20 239

原创 剑指offer

package test;/* * 在一个二维数组中查找一个整数,数组是从左向右,从上向下递增 * 分析: * 对于无序的数组,我们可以一行一行地进行比较,时间复杂度为O(n) * 由于该数组有序,按照一般的比较思路,我们一般从左上角到又开始比较,如果当前数字比待查找值小,则向右或者 * 向下继续查找,这样的话便不容易进行选择。因此,我们可以尝试从右上角向左进行排查/从左下角向右进行排查,这样就不

2017-08-02 17:12:54 287

原创 虚拟机字节码执行引擎

Java执行引擎的过程为:输入的是字节码文件,处理过程是字节码解析的等效过程,输出的是执行结果。栈帧是支持虚拟机方法调用与执行的数据结构,栈帧存储了方法的局部变量表,操作数栈,动态连接,方法返回地址等信息。每一个方法的调用都是栈帧在虚拟机栈中入栈和出栈的过程。在活动线程中,只有位于栈顶的栈帧才是有效的,称为当前栈帧。局部变量表:局部变量表是一组变量值存储空间,用于存放方法参数与方法

2017-03-09 14:35:45 301

原创 虚拟机类加载机制

类的生命周期包括:加载-->连接-->初始化-->使用-->卸载,其中连接包括,验证-->准备-->解析。虚拟机把描述类的数据从Class文件中加载到内存,并对数据进行校验,转换,解析和初始化,最终形成可被虚拟机直接使用的Java类型。在Java中,类的加载,连接,初始化都是在运行期间完成的,这种策略与C++等不同,但是这也实现了Java语言的运行期动态加载与动态连接的特点。类加载的过程:

2017-03-08 15:39:13 276

原创 JVM内存区域

Java运行时数据区分为:方法区,堆,虚拟机栈,本地方法栈,程序计数器。其中,方法区与堆为所有线程共享;虚拟机栈,本地方法栈与程序计数器为线程私有。程序计数器:所占内存空间比较小,可以看做当前线程所执行字节码的行号指数器。字节码解释器在工作时就是通过这个计数器的值来选取下一条需要执行的字节码指令。每个线程都有一个独立的程序计数器,各个线程的程序计数器互不影响,独立存储,为“

2017-03-06 23:17:50 257

原创 线程池

Excutor是顶级线程池接口ExecutorService是真正的线程池接口。Executors类提供了一些静态工厂用于生成一些常用的线程池,当将一个任务添加到线程池时,线程池会为每个任务创建一个线程,该线程会在某个时刻执行。public class Executors extendsObject     public static ExecutorServicene

2017-02-23 21:04:36 271

原创 线程

public class Thread  extends Object  implements Runnable线程 是程序中的执行线程。Java 虚拟机允许应用程序并发地运行多个执行线程。每个线程都有一个优先级,高优先级线程的执行优先于低优先级线程。每个线程都可以或不可以标记为一个守护程序。当某个线程中运行的代码创建一个新 Thread 对象时,该新线程的初始优先级被设定

2017-02-23 15:32:32 330

原创 集合--集合框架中的接口与具体的集合

Java集合框架为不同的 集合定义了大量的接口:集合有两个基本接口:Collection与Map。Collection中插入元素使用  boolean add(E)  方法;Map中使用  V put(K key,V value)。Collection中读取元素使用  迭代器  访问;Map中使用  V get(K key)。List是有序集合,元素会增加到容器的特定位置。可以

2017-02-23 09:35:04 644

原创 集合---视图与包装器

实现了Collection/Map接口的类不只有我们熟悉的(ArrayList,LinkedList,HashSet,TreeSet,PriorityQueue,HashMap等类)类,还有好多别的类也实现了这些接口。通过使用视图可以获得其他实现了Collection/Map接口的对象。映射类的keySet方法就是这样的示例。映射类的keySet方法看起来是重新创建一个集合并将映射中所有的键填充进

2017-02-23 09:21:55 400

原创 Java泛型

泛型程序设计意味着编写的代码可以被很多不同类型的对象所重用。在增加泛型之前,泛型程序是利用继承实现的。public class ArrayList{     private Object[] data;     ...     public Object get(int i){}     public void add(Object o){}}     这种方法

2017-02-10 21:49:42 312

原创 Java代理

代理(Proxy):利用代理可以在运行时创建一个实现了一组给定接口的新类。代理类可以在运行时创建全新的类,这样的代理类能够实现指定的接口,代理类具有的方法如下:指定接口所需要的全部方法。Object类中的全部方法,(所有的代理类都覆盖了Object类中的方法toString,equals,hashCode,其他方法如,clone,getClass没有重新定义)然而,不能再运行时定义这些

2017-02-10 18:03:28 292

原创 Java内部类

* 内部类(inner class)是定义在另一个类中的类。* 为什么要使用内部类? 1. 内部类方法可以访问该类定义所在的作用域中的数据,包括私有的数据。 2. 内部类可以对同一个包中的其他类隐藏起来。 3. 当想要定义一个回调函数且不想编写大量代码时,使用匿名内部类比较便捷。* 使用内部类访问对象的状态public class Out { private S

2017-02-06 18:10:32 228

原创 克隆对象

clone()方法是Object类的方法,是protected类型,同时也是native方法。默认的克隆操作是“浅拷贝”,只能对对象逐个域进行拷贝,并没有克隆对象中引用的其他对象(对于子对象采用共享的方式),一般只是克隆基本数据类型。浅拷贝有什么影响?如果原对象与浅克隆对象共享的子对象是不变的,那么这种共享就是安全的。如果子对象属于不可变的类,如String;或者子对象一直包含不变的常量,

2017-02-05 19:41:10 350

原创 泛型数组列表

对于数组,Java允许在运行时确定数组的大小。ArrayList是一个采用类型参数的泛型类,为了指定数组列表中保存的元素对象类型,需要使用尖括号将类名括起来。ArrayList中的类型参数不允许是基本类型。ArrayList arl=new ArrayList使用add方法将元素添加到数组列表中,如果调用add且内部数组已经满了,数组列表就会自动地创建一个更大的数组,并将所有的对象从较

2017-02-01 21:12:43 2478

原创 对象包装器与自动装箱

所有的基本类型都有一个与之对应的类,这些类称为包装器(Wrapper)。 这些包装器类名为:Integer,Long,Float,Double,Short,Byte,Character,Void,Boolean(前六个类派生于公共的父类Number)。对象的包装器类都是不可变的,即一旦构造了包装器,就不允许更改包装在其中的值。同时,对象包装器类还是final,因此不能定义它们的子类。包含在包装器中

2017-02-01 21:11:26 966

原创 Object类详解

* Object类是所有类的父类,每个类都是由Object类扩展而来。如果没有明确指出父类,则默认为Object类为该类的父类。* 可以使用Object类型的变量引用任何类型的对象。* 在Java中,只有基本数据类型(数字,字符,布尔)不是对象。所有的数组类型,不管是对象数组还是基本类型的数组都扩展了Object类。 int[] i=new int[5]; Object obj=i;* equ

2017-01-27 14:30:25 416

原创 方法参数

* 参数传递分为:* * 按值调用:方法接收的是调用者提供的值。 * 按引用调用:方法接收的是调用者提供的变量地址。* Java采用的总是按值调用。也就是说,方法得到的是所有参数值的拷贝,特别的,方法不能修改传递给它的任何参数变量的值。因为在方法结束之后,拷贝不再使用,被放弃。改变拷贝的值不能改变原始参数变量的值。* 方法参数有两种类型:* * 基本数据类型(数值,

2017-01-23 15:51:17 480

原创 String讲解

String类没有提供用于修改字符串的方法。String类对象为不可变字符串,如字符串string=”HELLO”永远只包含HELLO这几个字母,而不能修改其中任何一个字符。当然可以修改字符串变量string的引用,让它引用另一个字符串。 不可变字符串有一个优点:编译器可以让字符串实现共享。实际上只有字符串常量(使用“ ”声明,存储在字符串常量池中)是共享的,subStrng,+等操作产生的结果不

2017-01-21 14:27:34 1877 1

原创 Java中equals和==的区别

Java中equals和==的区别 java中的数据类型,可分为两类: 1.基本数据类型,也称原始数据类型。byte,short,char,int,long,float,double,boolean 他们之间的比较,应用双等号(==),比较的是他们的值。 2.复合数据类型(类) 当他们用(==)进行比较的时候,比较的是他们在内存中的存放地址,所以,除非是同一个new出来的对象,他们

2017-01-21 14:26:18 297

原创 Java枚举类型

所有的枚举类型都是Enum类的子类,枚举类型包括有限个命名的值。枚举类型的变量只能存储该类型中指定的枚举常量,或者null值。 枚举类型在定义时,可以添加指定的域,方法或者构造函数;当然构造函数为private,只是在声明枚举常量时调用,用于传递值。 枚举类型可以简单定义为: enum Size{ //枚举常量列表必须写在前面,否则编译出错 Small,

2017-01-20 17:43:04 271

原创 JUnit单元测试

添加Junit4包:项目右键--》properties--》libaries--》add libaries(Junit4)使Java类生成相应的测试类:类右键--》new--》Junit Test Case--》选中需要选择的选项(方法级初始化资源/销毁资源,类级初始化资源/销毁资源)setUp/tearDown/setUpBeforeClass--》finish运行测试类

2017-01-06 21:20:51 311

原创 基于@AspectJ的AOP

我们所说的SpringAOP,包括基于xml文档配置的AOP,也包括基于AspectJ注解的AOP,但是它们底层采用的都是动态代理技术,包括JDK动态代理与CGLib动态代理。基于@AspectJ的AOP 简单示例:(1)切面定义packageaspect; importorg.aspectj.lang.annotation.After;importorg.aspe

2016-11-06 18:28:49 314

原创 增强类(不经常使用)

Spring使用增强类定义横切逻辑,由于只支持方法级别的连接点,增强类中还包含了部分连接点的方位信息。 增强类既包含了横切逻辑,又包含了连接点的方位信息(方法前,后),所以增强类可以用来代表一个切面,只不过它表示的连接点是目标类中所有方法,如果需要定位到特定的方法,则需要切点进一步描述。 增强类型:前置增强:BeforeAdvice,又由于Spring只支持方法级别的增强,所以

2016-11-06 18:27:30 500

原创 AOP术语

连接点(joinpoint):程序执行的某个特定位置,如方法执行前,后。Spring仅支持方法级别的连接点。连接点由两个信息定位:1.用方法表示的程序的执行点;2.用相对点表示对的方位信息。Spring使用切点对执行点进行定位,而方位信息则在增强类型中定义,即:切点+增强中的方位信息=连接点 切点(pointcut):用于定位特定的连接点,一个切点可以匹配多个连接点

2016-11-06 18:26:08 312

原创 Spring容器高级主题

1.ResourceLodaer从Spring配置文件中加载Spring配置信息,并      使用Resource表示这个配置文件的资源。BeanDefinitionReader读取Resource所指向的配置文件的资源,然后解析该配置文件。配置文件的每个元素被解析成一个BeanDefinition对象,并保存到BeanDefinitionRegistry中。容器扫描BeanDefi

2016-11-02 10:32:40 363

原创 自动装配补充

既然可以使用注解为Spring的Bean自动装配其他Bean的引用,同样可以使用注解来装配简单的值。Spring3.0引入了@Value,它是一个新的装配注解,可以让我们使用注解装配String类型的值和基本类型的值,例如int、boolean。我们可以通过@Value直接标注某个属性、方法或者方法参数,并传入一个String类型的表达式来装配属性。例如    @Value("lvmingyi

2016-11-02 10:31:36 279

原创 基于注解的配置

Spring容器启动三要素:Bean的定义,Bean的实现,Spring容器 在基于xml文档配置bean时,Bean的定义与实现是分开的而采用注解配置时,Bean的定义通过在Bean的实现类上标注注解实现。 使用注解定义Bean@Component 用于任何层次@Service 用于对Service实现类进行标注@Controller 用于对Controlle

2016-11-02 10:30:22 147

原创 Bean的作用域

主要有Singleton(单实例),Prototype(多实例),在Web应用中还有Request,Session,GlobalSession作用域 1,Singleton(默认作用域)在Spring容器中只有一个Bean实例,在配置文件中通过ref引用注入,及通过getBean(id)方式调用,返回的都是同一个Bean的实例。Spring容器在启动时,会自动实例化

2016-11-02 10:28:24 266

原创 Bean之间的关系

继承abstract="true"/> parent="parent"/>即child Bean会继承parent Bean 父主要是为了简化子的配置,所以一般将其声明为abstract="true",表示这个Bean不会实例化成一个对应的bean 整合多个配置文件 两种方法:(1)在加载配置文件启动Spring容器时,可以通过字符串数组指定文件的名称,

2016-10-30 22:40:29 363

原创 注入参数详解

在Spring配置文件中,可以将int,String等字面值注入Bean中,还可以将List,Map等类型注入,以及其他定义的Bean。 字面值字面值指的是可用字符串表示的值,默认情况下基本数据类型,String等类型都可以采用字面值注入的方式。Spring容器在内部为字面值提供了编辑器,可以将字符串表示的字面值转换成相应的数据类型。(可以自定义编辑器) 引用其他B

2016-10-30 22:39:41 1671

原创 依赖注入

Spring提供两种依赖注入的方式:属性注入和构造函数注入还支持工厂方法注入的方式(不常使用) 属性注入通过setXXX()函数注入Bean的属性及依赖对象属性注入要求Bean提供一个默认的构造函数及要注入属性的SetXXX()方法 Ps: Spring 只要求是否有setXXX()方法,对于是否有相应的属性不做要求如:P

2016-10-30 22:38:33 368

原创 在Spring容器中装配bean

Spring学习笔记

2016-10-27 20:41:57 335

空空如也

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

TA关注的人

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