JAVA架构师复习计划

生活所迫,再过几个月秋招了,不一定能找到计算机视觉的工作,只能先搞一下老本行了。

拖延症实在是一大毛病。

只好定制一个Java复习计划,打卡。每天一个半小时(看情况),每周六天。

2020年5月11日,凌晨零点十六。

ck means check

    123
45678910
11 ck12 ck13 ck14 ck15c k16 ck17
18 ck19 ck20 ck21 ck22 ck2324
25 ck26 ck2728 ck29 ck3031

2020-5-11 10:22-12:05

JVM : 线程,Java内存区域,JVM运行时内存,GC机制

JVM 内存区域:线程私有、线程共享、直接内存

线程私有:PC、VM stack(栈帧 stack frame,运行java方法分配栈)、Native method stack( 本地方法栈,比如实现C)

线程共享:堆(Java对象实例, 包括通过.class生成的类对象 )、永久代(方法区,存一些类信息,常量、静态变量,编译后的代码,永久代java8后放入本地内存)

GC:新生代(Eden,from servivor,to servivor),老年代。

GC 算法:标记-清除(Mark-sweep,标记为可回收,然后第二次清除),复制(copying),标记整理(Mark-compact ,标记为可回收,第二次先整理,后清除), copying 和 Mark-compact 都是为了解决内存碎片的问题

新生代与老年代占比1:2,也就是新生代三分之一

新生代中Eden占大部分,加上两个小的servivor(8:1:1),因为新生代中的每次垃圾回收(Minor GC,复制算法)都会回收大部分对象,复制较少(这也是选择复制算法的原因),然后把Eden中和from servivor中的存活的对象age加1,放入到to servivor中,在将to servivor地址引用为fromservivor,作为下一次minorGC的区域。这也是分为两个servivor区域的原因,作为复制交换区域。当 servivor 内存不够时,或当对象的年龄到达15时,或对象初始化时太大,都会被放入到老年代中。

老年代使用MajorGC,每次只回收少量对象,一般不执行,执行一般都在minorGC后,新放入到老年代的对象使得老年代内存不够,所以执行majorGC。majorGC算法为mark-compact。

2020-5-12 10:10-12:20 20:00-21:42

Java中的四种引用类型:

强引用:对象赋予,处于可达状态,不能被回收

软引用:SoftReference, 内存不足会被回收,用于内存敏感(少)的程序中

SoftReference<String> ref = new SoftReference<String>("Hello world");
String value = ref.get();
// 如果 内存被回收了,value == null

弱引用:weakReference, 只要GC一运行,就回收,不管内存够不够用。用的时候用weakReference.get(),不要把.get()重新赋值,不然就是一个强引用,垃圾回收机制就不会再回收。

WeakReference<People> peopleWeakReference = new WeakReference(new People());
System.gc();
Thread.sleep(1000);
System.out.println(peopleWeakReference.get());
// 如果 内存被回收了,value == null

虚引用:PhantomReference( Phantom : 幽灵;幻影,幻觉 ) ,不能单独使用,必须和引用队列联合使用。

G1垃圾收集器:https://blog.csdn.net/coderlius/article/details/79272773

JVM 类加载机制 :加载,验证,准备,解析,初始化

OSGI(动态模型系统)

https://www.jianshu.com/p/5406b2473157

Java IO,NIO

IO : 字节流(outputStream、inputStream)、字符流(Reader、Writer)

NIO:Channel(通道),Buffer(缓冲区),Selector

2020-5-13 10:08-12:20

JAVA集合

Collection: List, Set, Quene

List : ArrayList、Vector、LinkedList

Set: HashSet ,TreeSet

Collection 接口的接口 对象的集合(单列集合)
├——-List 接口:元素按进入先后有序保存,可重复
│—————-├ LinkedList 接口实现类, 链表, 插入删除, 没有同步, 线程不安全
│—————-├ ArrayList 接口实现类, 数组, 随机访问, 没有同步, 线程不安全
│—————-└ Vector 接口实现类 数组, 同步, 线程安全
│ ———————-└ Stack 是Vector类的实现类
└——-Set 接口: 仅接收一次,不可重复,并做内部排序
├—————-└HashSet 使用hash表(数组)存储元素
│————————└ LinkedHashSet 链表维护元素的插入次序
└ —————-TreeSet 底层实现为二叉树,元素排好序

ArrayList :

关于ArrayList已经继承AbstractList为什么还要实现List接口。可以看一下 https://www.cnblogs.com/bluejavababy/p/4320545.html
继承RandomAccess接口的原因是“to indicate that they support fast (generally constant time) random access”,表明ArrayList支持 常量时间内随机读取

https://www.jianshu.com/p/939b8a672070

Map : HashMap, HashTable, TreeMap

Map 接口 键值对的集合 (双列集合)
├———Hashtable 接口实现类, 同步, 线程安全
├———HashMap 接口实现类 ,没有同步, 线程不安全,Java8后一个hashcode上超过8个元素链表转为红黑树
│—————–├ LinkedHashMap 双向链表和哈希表实现
│—————–└ WeakHashMap
├ ——–TreeMap 红黑树对所有的key进行排序
└———IdentifyHashMap

ConCurrent

java.util.concurrent

2020-5-14 10:20-13:20

多线程

2020-5-15

多线程

2020-5-16

多线程

2020-5-18 2:00-3:00 11:00-13:55,22:24-23:29

2020-5-19 12:50-13:55

Spring 大致复习:

2020-5-20

Spring 复习

2020-5-21

Spring 复习

2020-5-22

Spring 复习

2020-5-25

2020-5-26

Spring面试题

2020-5-28

2020-5-29 19:30-





除非注明,否则均为一叶呼呼原创文章,转载必须以链接形式标明本文链接

本文链接:http://www.yiyehu.tech/archives/2020/05/11/java%e6%9e%b6%e6%9e%84%e5%b8%88%e5%a4%8d%e4%b9%a0%e8%ae%a1%e5%88%92

发表评论

电子邮件地址不会被公开。 必填项已用*标注