JAVA编程小知识
JAVA编程小知识
一、设计模式
1、设计模式的提出: 博士论文
2、Singleton模式
(1)确保全局至多只有一个对象
(2)用于:构造缓慢的对象,需要统一管理的资源
(3)缺点:很多全局状态,线程安全性
(4)创建
- 双重锁模式Double checked locking:check两次
- 作为Java类的静态变量
- 使用框架提供的能力—spring等
3、变继承关系为组合关系
继承关系:描述is-a关系,不要用继承关系来实现复用,使用设计模式实现服用
4、创建对象
(1)使用new创建对象
- 编译时必须决定创建哪个类的对象
- 不看具体代码,参数意义不明确
(2)Abstract Factory Pattern
二、并行计算与多线程
1、并行计算
(1)节点,将数据拆分到每个节点,每个节点并行的计算出结果,将结果汇总
(2)外部排序
- 将数据分为左右两半,分别归并排序,再将两个有序数据归并
- 左边右边进行一位一位的比较,左右相等时候出左边的数
- 每个节点都是有序排列,由归并结点进行合并
2、多线程
(1)在任何地方都可以线程切换,甚至在一句语句中间
(2)死锁条件
互斥等待,hold and wait,循环等待,无法剥夺的等待
(3)死锁防止
- 破除互斥等待-----一般无法破除
- 破除hold and wait----一次获取所有的资源
- 破除循环等待----按顺序获取资源
3、线程池
(1)创建线程开销大
(2)线程池:预先建立好线程,等待任务派发
(3)线程池:Blocking Queue + 线程
(4)线程池参数
- corePoolSize:线程池中初始线程数量,可能处于等待状态
- maximumPoolSize:线程池中最大允许线程数量
- keepAliveTime:超出corePoolSize部分线程如果等待这些时间将会被回收
三、资源管理与算法
1、资源管理
(1)Java垃圾回收
- 不被引用的对象会被回收
- 垃圾回收包括Minor GC 和Full GC
- 垃圾回收时所有运行暂停
(2)Java资源管理
内存会被回收,资源不会被释放
databaseConnection需要databaseConnection.close()来释放
2、算法
(1)算法导论
(2)对数据进行排序:快速排序算法O(nlogn)
(3)对一组数据进行排序:数据特征、是否包含大量重复的元素--------三路快排
(4)数据特征:大部分数据距离它正确的位置很近,近乎有序—查序
(5)数据特征:取值范围有限----计数排序
(6)对一组数据进行排序
- 有没有可能包含大量重复的元素
- 是否大部分数据距离它正确的位置很近
- 是否近乎有序
- 是否数据的取值范围非常有限,比如对学生成绩排序
- 是否需要稳定排序
- 是否是使用链表存储
- 数据的大小是否可以装载在内存