摘要:
一、等待唤醒机制 1、介绍 wait():一旦执行此方法,当前线程进入阻塞状态,并释放锁。 notify():一旦执行此方法,就会唤醒一个被wait()的线程。如果有多个,就唤醒优先级高的,如果优先级一样,则随机唤醒一个。 notifyAll():一旦执行此方法,会唤醒所有wait()的线程。 no 阅读全文
摘要:
一、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时,逆向思维一下, 阅读全文