Java基础知识框架体系
2020-11-01 本文已影响0人
千夜零一
“大部分码农无法成为架构师的一个原因。一直停留在业务层面,把砖砌的再好,终究只是砌砖师傅。”
“对于绝大多数编程从业开发者而言都面临一个普遍的问题:广度与深度难以兼顾。”
“底层知识学扎实了,上层的东西像风筝一般千变万化,而你是在底下扯线的那个人,顺着线往下拉,便能轻松看清楚这个风筝长什么样。”
与诸君共勉~
Java基础知识
面向对象三大特性
1、 封装
2 、继承
3 、多态
程序设计6大原则
1、单一职责原则
2 、 里氏替换原则
3、依赖倒置原则
4、接口隔离原则
5、迪米特法则
6、开闭原则
设计模式
单例模式
- Double check 双重加锁方式
- 枚举方式
- 静态内部类方式
构造器模式
模板方法模式
装饰器模式
中介模式
观察者模式
责任链模式
策略模式
简单工厂模式
Java字符串相关
1、String
2、StringBuilder
3、StringBuffer
Java 线程池
自定义线程池集成ThreadPoolExecutor
JDK 自带的几种线程池
-
newFixedThreadPool
newFixedThreadPool,创建固定大小的线程池,poolCoreSize和maxPoolSize 相等,到达coreSize,则将新的任务放到缓存队列,有线程执行完毕,直接去取。 -
newSingleThreadExecutor
newSingleThreadExecutor,创建一个单线程的线程池,核心池的大小和最大池大小都为1. -
newCacheThreadPool
newCacheThreadPool,无大小限制的线程池,提交一个任务就创建一个线程执行。
Java 集合
- Collection
1、List
-
1 , LinkedList
1、基于链表实现,插入和删除效率高,查找效率低。
2、有一个加速查找的优化,二分之一查找。
3、实现了栈和队列的方法,所以也可以用作栈和队列。 -
2、ArrayList
1、基于数组实现,查找效率高,但删除和插入是需要移动大量元素,效率低
2、默认容量为10,当容量不足时,扩容方式是原来容量的1.5倍+1。
3、当需要扩充容量时,需要将原来的数组通过Araays.copyOf() 方法进行拷贝到新数组中,非常耗时,所以尽量在容量确定的情况下使用AraayList,否则推荐LinkedList。 -
3,、Vector
1、与ArrayList 类似,添加元素时需要检查容量,不够需扩容,当设置了扩展容量时,新的容量为原来的容量+上扩展容量,否则新的为原来的2倍
2、线程安全的
2、Set
1、HashSet
2、TreeSet
3、Queue
Map
-
1、HashMap
hashMap 用一个Hash表来存储数据(也就是hash 数组),数组的每一个元素是一个单链表的头结点(用来解决冲突用)。
扩容非常的麻烦,需要重新计算每个元素在Hash表中新的位置,效率低,所以用HashMap 时最好能确定容量。
Hash 表的长度为2 的整数次幂,这样能确保均匀散列,充分利用空间,效率高。 - 2、TreeMap
- 3、HashTable
Collection结构图
Java 内存模型
- 栈内存
- 堆内存
- 垃圾回收机制