09 2021 档案
摘要:一、volatile 1、介绍 JDK 5.0 提供了java.util.concurrent包,在此包中增加了并发编程中很常用的使用工具类,用于定义类似于线程的自定义子系统,包括线程池、异步IO和轻量级任务框架。提供可调的、灵活的线程池。还提供了设计用于多线程上下文的Collection实现等。
阅读全文
摘要:一、概述 1、介绍 Java VM 启动的时候会有一个进程Java.exe,该进程中至少有一个线程负责Java程序的执行。而且这个线程运行的代码存在于main方法中,该线程称之为主线程。其实从细节上来说,JVM不止启动了一个线程,其实至少有三个线程。除了main() 主线程,还有 gc() 负责垃圾
阅读全文
摘要:一、概述 1、介绍 ArrayList元素是有序的,可重复。线程不安全的。底层维护一个 Object 数组。 JDK1.7:ArrayList像饿汉式,默认初始长度直接创建一个容量为 10 的数组。 JDK1.8:ArrayList像懒汉式,默认一开始创建一个长度为 0 的数组,当添加第一个元素时再
阅读全文
摘要:一、概述 1、介绍 Java里古老的容器,JDK1.0版本添加的类,矢量队列,线程安全的,使用关键字synchronized,保证方法同步。 底层维护一个 Object 数组,初始长度为10,默认情况扩容为原来数组的 2 倍。也可以指定扩容步长。其他的和 ArrayList 没有太大区别。 扩容原理
阅读全文
摘要:一、概述 1、介绍 Arrays 类是 JDK1.2 提供的一个工具类,提供处理数组的各种方法,基本上都是静态方法,能直接通过类名Arrays调用。 二、类源码 1、asList()方法 将一个泛型数组转化为List集合返回。但是,这个List集合既不是ArrayList实例,也不是Vector实例
阅读全文
摘要:一、概述 1、介绍 String是一个final类,不可被继承,代表不可变的字符序列,是一个类类型的变量。Java程序中的所有字符串字面量(如"abc")都作为此类的实例实现,"abc"是一个对象。字符串是常量,创建之后不能更改,包括该类后续的所有方法都是不能修改该对象的,直至该对象被销毁(该类的一
阅读全文
摘要:一、概述 1、介绍 为什么出现集合? 答:面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,对对象进行存储,集合就是存储对象最常用的一种方式。 数组和集合类同是容器,有何不同? 答:数组虽然也可以存储对象,但长度是固定的,集合长度是可变的。数组中可以存储基本数据类型,集合中只能
阅读全文
摘要:一、概述 1、介绍 所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法(静态方法)。 2、优缺点 优点:提供了对唯一实例的受控访问;由于在系统内存中只存在一个对象,因此可以节约系统资源,当需要频繁创建和销毁的对象时,单
阅读全文
摘要:一、青蛙跳台阶&斐波那契数列 1、问题 一只青蛙跳台阶,每次可以跳 1 层或 2 层。青蛙跳到 n 层一共有多少种跳法? 2、思想 先把问题规模缩小,考虑 n = 1时,n = 2的解。那么,显然有: (1)边界条件:dp[1] = 1、dp[2] = 2 (2)再考虑 n = 3时,逆向思维一下,
阅读全文
摘要:一、AOP注解 1、介绍 上一节介绍了 AspectJ 框架如何实现 AOP,具体的实现方式是通过 xml 来进行配置的。xml 方式思路清晰,便于理解,但是书写过于麻烦。这一节介绍注解的方式来进行 AOP 配置。 2、案例(注解) 定义目标对象(被代理的对象) 1 // 定义一个接口 2 publ
阅读全文
摘要:一、AspectJ 1、介绍 AspectJ是一个面向切面的框架,它扩展了Java语言。AspectJ定义了AOP语法,也可以说 AspectJ 是一个基于 Java 语言的 AOP 框架。通常我们在使用 Spring AOP 的时候,都会导入 AspectJ 的相关 jar 包。 2、案例(xml
阅读全文
摘要:一、AOP 1、介绍 AOP(Aspect Oriented Programming),面向切面编程。它利用一种称为"横切"的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其命名为"Aspect",即切面。所谓"切面",简单说就是那些与业务无关,却为业务模块所共
阅读全文
摘要:一、介绍 1、介绍 递归:递归就是方法自己调用自己,每次调用时传入不同的变量。递归有助于编程者解决复杂的问题,同时可以让代码变得简洁。迭代和递归区别:迭代使用的是循环结构,递归使用的选择结构。使用递归能使程序的结构更清晰、更简洁、更容易让人理解,从而减少读懂代码的时间。其时间复杂度就是递归的次数。
阅读全文