Java核心知识总结---第一版

1. 网络部分

关于TCP/IP的面试题

TCP和UDP的认识和区别

TCP为什么是三次握手,两次握手不行吗?

感觉是二次握手就可以了,但是当服务端发送syn/ack给客户端,告诉客户端,我可以接收信息时。客户端并没有告诉服务端,收了了服务端的确认,所以需要客户端发送确认信息,告诉服务端,我收到了,我知道你可以接收信息,我们这就建立连接,发送数据。

TCP四次挥手的意义

确保客户端和服务端数据能够完全传输

tcp三次握手,可靠传输如何实现

这个题很重要,是在一个网友字节跳动面试时遇到
参考资料-01
参考资料-02

自我总结:

  • 三次握手四次保证数据传输链接的可靠建立和完整的传输完数据,销毁连接。
  • 校验保证传输数据的是没有被修改的
  • 序列号和应答机制规定了数据传输的基本流程,也规定了字节流大小。应答机制也是重传机制,快速回复机制的基本元素。
  • 重传机制,保证数据的完整性,其中较为可行的是基于数据的快速重传机制
  • 滑动窗口机制,是流量控制的元素,接受方返回的报文中加入了可使用窗口大小,发送方根据窗口大小来控制数据发送速度,防止一大波数据发过去,接收方来不及接受
  • 拥塞控制,通过使用窗口协议(cwnd),通过慢启动防止一开始大量数据导致阻塞,通过拥塞避免状态尽量避免阻塞,当发生阻塞,通过快重传,快恢复来保证数据完整性。

HTTP和HTTPS的区别

HTTPS和HTTP建立过程

HTTPS建立过程成需要加入SSL认证。

重定向和转发的区别

协程是什么?

2. Linux系统

3. Java基础

3.1 Java多态的实现原理

3.2 Java HashMap的详细介绍

  • 关于1.8的HashMap是个难点,加通过数组+链表+红黑树来实现。

  • 请认真思考为什么HashMap的容量一定是2^n ,而不会是其他,这与扩容有很大关系,方便扩容,要联系(b.hash & oldCap) == 0 这个判断。 这里是在扩容时原来的元素在扩容后重新定位的关键。

  • 为什么jdk1.7扩容时头插法会引起死循环?不是线程安全的,会导致死锁问题。

黑红树参考资料
参考资料
阿里面试提问

3.3 正则表达式的书写

参考资料

3.4 JDK 动态代理的原理,JDK 动态代理为什么只能针对接口

3.5 面向对象三大基本特征

这个知识点是比较基础,但是可有拓展点。就继承而言,

  • 有一条设计原则,组合优先于继承。可以好好的了解一下为什么,以及组合的实际应用。

  • 哪些情况下用组合,哪些情况下用继承?
    判定标准是:是否需要从新类上溯造型会基类,如果必须上溯,则用继承,否则用组合。

Java线程有哪些状态,各个状态之间怎么转换?

synchronized的实现原理

锁升级机制是怎么样的流程,这其中关键知识

线程池实战,用过哪些线程池,线程池工作流程

参考资料

关于Java初始化问题

首先变量初始化会在任何方法调用之前(包括静态方法)
初始化顺序: 父类静态代码块 -->子类静态代码块–>父类非静态便令–>父类构造函数–>子类非静态变量–>子类构造函数

注意:
通过子类来引用父类中的定义的静态字段,只会触发父类的初始化而不会触发子类的初始化。
当编译阶段通过时,通过常量传播优化,已经将static final 类型的变量加入到(调用该常量的,而不是声明该常量的类)类的常量池中,这不会触发类的初始化

参考资料

. JVM

注意,本内容全是基于《深入理解JVM》第三版进行学习,在某个知识点标记了页号,默认该这本书。

介绍下垃圾收集机制(在什么时候,对什么,做了什么)。

垃圾回收主要回收的是线程共享的区域,堆和方法去,其中因为堆存放程序运行时的所有实例,这里进行垃圾回收也更加频繁。
回收的对象主要是那些jvm认为没有用的对象,对其进行回收,对于如何判断java对象无用,采用根搜索算法进行判定。
堆内存分类新生代和老年代,采用分代收集算法,新生代和老年代采用不同的垃圾回收方法。新生代主要采用标记复制的方法进行垃圾回收,老年代采用标记整理算法进行垃圾回收。

垃圾收集有哪些算法,各自的特点。

  • 标记-清除: 简单,好操作,但是会产生内存碎片
  • 标记-复制::主要应用于新生代,用牺牲一半内存来保证没有内存碎片参数,空间代价大
  • 标记-整理: 主要用于老年代,克服了标记-复制的缺点,也不会产生内存碎片
  • 分代收集算法: 新生代和老年代应用不同的垃圾收集算法

类加载的过程

加载–>验证–>准备–>解析–>初始化–>使用–>卸载。
初始化前,必须经历加载、验证和准备阶段。
验证阶段主要是验证文件格式等是否符合当前虚拟机。
其中解析可以不按照顺序来,主要是为了动态绑定。
准备阶段会将类变量赋值为0值,真正进行赋值阶段是解析阶段。通过调用类加载器自动生成的<>client()方法进行赋值。 方法一定是在子类初始化之前完成的,而且不需要子类显示调用。

双亲委派模型

在加载一个方法是,子类一开始不自己调用自身的类加载器,而是转向父类进行类加载,当父类反馈找不到该方法时,子类才会执行自己的类加载。

双薪委派模型是基于三层类加载器基础上,这样做的好处是,对满足条件下,执行类加载,父类控制类加载过程,防止不同子类进行类加载,导致产生不同的类实例。

有哪些类加载器

  • 启动类加载器
  • 拓展类加载器
  • 应用类加载器
  • 自定义类加载器

怎么判断一个对象已经死了,可以回收?

通过两次标记,第一次标记不需要暂停攻错线程,第二次为了标记第一次程序正在运行,导致第一次有的对象标记发生变化,所以暂停线程进行第二次标记。

什么情况之下把新生代对象放到老年代去?

当 to suivivor 的空间不足时,将其中的对象存储到老年代中。默认年龄达到15岁的对象会被移到老年代中。

什么情况下不会执行类初始化?

在这里插入图片描述

双亲委派类加载

当一个类收到类加载请求是,他首先不会尝试自己去加载这个类,二货思把这个请求委派给父类去完成,每一个层次的类加载器都是这个样子。当父类加载器反馈不能完成此次类加载时,子类加载器才会尝试自己去加载。
在这里插入图片描述

类加载层次如下:
在这里插入图片描述

运算指令

在这里插入图片描述

类型转换指令

大范围类型向小范围类型转换时,不需要显示支出转换指令
小范围向大范围类型转换时,需要显示支出转换指令
指令如下:
在这里插入图片描述
注意:
窄转换指令永远不可能导致虚拟机抛出运行时异常,也就是说转换不会抛出异常,即使是精度受损,这要靠编程人员自己排查。这一点不注意,很可能出现bug

对象创建与访问指令

在这里插入图片描述

操作数栈管理指令

在这里插入图片描述

控制转移指令理解

JVM提供了十分丰富的int类型的条件分支比较。
因为各个类型的比较最终都会转化为int类型的比较操作,所以JVM提供了丰富的int类型条件分支比较。

控制转移指令如下:
在这里插入图片描述

方法调用和返回指令

  • invokevirtual 调用对象的实例方法
  • invokeinterface
  • invokespecial
  • invokestatic
  • invokedynamic

返回指令:

  • ireturn : 适用于boolean、byte、char、short、int
  • lreturn
  • freturn
  • dreturn
  • areturn :返回的是对象引用

同步指令

和好奇,看似高大上的并发、同步在JVM层面用的是什么指令。
一看还真简单,这个指令之前在阅读《Java并发编程艺术》一书中看到过。这个指令是成对使用的,上锁肯定也有解锁。

  • Monitor

关于synchronized指令的支持:

  • monitorenter : 进
  • monitorexit : 出

类加载中为什么解析阶段有时靠一放在初始化之后

这一个特性是为了支持Java语言的运行时动态绑定特征,一直知道运行时动态绑定,但不知道其具体如何实现的,这里提供了突破口。

有且仅有六种情况必须立即对类进行初始化

在这里插入图片描述
在这里插入图片描述
P264**《深入理解JVM》第三版**

非数组类型的加载阶段是开发人员可控性最强的阶段

在这个阶段,开发人员可以定义自己的类加载器去控制二进制字节流的获取方式。如常用的代理模式也是这么弄得。 P267**《深入理解JVM》第三版**

验证阶段内容

验证阶段是JVM自我保护阶段,防止恶意攻击。因为可.clsse文件是可以改动的。
之前我在编译代码时就遇到一个问题,说我的.class文件版本号不适应当前虚拟机。在之前了解.class格式时,就了解到,字节码的版本号和虚拟机的版本号是有关系的。
验证阶段包括内容如下:

  • 文件格式验证
  • 元数据验证
  • 字节码验证
  • 符号引用验证 :验证调用的外部类是否合法

准备阶段

为类变量分配内存兵设置类变量初始值。JDK8之后类变量会随着Class对象的一起存放在Java堆中。
注意:

  • 记住一点,在这个阶段只有类变量被分配内存,实例变量并没有,实例变量将会咋对象实例化时随着对象一起分配在Java堆中。

  • 这里对类变量的初始化不是设置类中给定的值,而是设置每个类型的零值。如int 类型为0,引用类型为null。 private static int value = 123; 这里初始化value= 0 而不是123. 真正赋值要等到初始化阶段。
    P272《深入理解JVM》第三版

  • 关于第二条也有特殊情况,如果是这样:public static final int value = 123 这里就会赋值 value = 123.

解析阶段

主要针对类或者接口、字段、类方法、接口方法、方法类型、方法句柄和调用点限制符
对于上面解析的具体流程,看书
P276 《深入理解JVM》第三版

初始化阶段

初始化阶段就是执行类构造器()方法过程。()Java程序中直接编写的方法,是Javac编译器的自动生成物。
之前在准备阶段,关于类变量真正初始化阶段就是在这个阶段,通过()方法进行初始化。

  • ()是编译器自动收集类中的所有类变量的赋值动作和静态代码块中的语句合并产生的

  • ()编译器收集的顺序是根据在类中定义的顺序来决定的

  • ()也有父类,但是不需要显示的调用父类的(),父类在子类执行()前已经执行完该方法,所以之前的初始化题原理就是这样了。 第一个执行的()方法一定是java.lang.Object

  • ()对于类或者接口不是必须的,没有类变量和静态代码块编译器就不会自动产生该方法。

  • 在多线程下,JVM必须保证()正确的加锁和同步。及时阻塞,也是隐蔽的,不可见。

P279 《深入理解JVM》第三版

类加载器

类加载器和类本身一起共同确认了其在JVM中的唯一性,每一个类加载器都拥有一个独立的类名称空间。

由不同类加载器加载同一个类,在JVM中所得到的的不是同一个类,是不同的。这个点要引起重视。当自定义了类加载器,然而有默认的类加载器,对于加载同一个类,在JVM会得到两个类。

Java对象是如何在堆中存在的?

首先是Java对象创建过程 ,关于对象内存分配,有两种选择,指针碰撞和空闲列表。具体要看垃圾收集齐是否有压缩整理功能。
参考资料

当对象创建之后,在内存中是怎样存在的呢?
主要包含三分部分,对象头、实例数据和对齐填充
参考资料

参考资料

CAS 和 AQS的实现原理

CAS: Compare and Swap

AQS: AbstractQuentsynchronizer - 抽象队列同步器

参考资料

参考资料

线程是如何获取锁的

首先要知道一点,线程获取的锁是对象的锁,而不是代码块的锁。每一个对象在对象头都留有对锁信息记录的空间。
那线程如何获取锁的呢?

  • 在当前线程的栈帧中简历一个名为 Lock Record 的空间,将对象头中的Mark Work拷贝到 Lock Record中
  • 虚拟机使用CAS尝试将Mark Record更新指向该线程的Lock Record,并将Lock Record的owner指向obhect mark recoed 如果成功,那么线程就获得了该对象的锁。
  • 接下来就是锁升级了,这个流程不在赘述,需要了解的查看相关文章。被阻塞的线程自旋来获取锁,当再次被阻塞时,将锁升级为重量级锁。

参考资料

关于静态分派问题-重载

在执行重载方法是,具体调用哪个方法是由静态类型决定的,而不是实际类型。 静态类型在编译器就已经确定了,而实际类型要在运行期间才能确定。

静态分派有个问题,有时候重载版本不是唯一的,执行哪个版本,是通过确定一个小队更合适的版本来执行,这里就有点凌磨两可了。
P305

动态分派-重写

根据实际类型决定调用哪个版本的方法。这里其实就是子类重写父类方法,将子类实例向上转型给父类,通过动态绑定,调用方法时,实际上调用的是子类重写父类的方法。

关于动态分配最关键的就是:invokevirtual指令

Java动态语言支持,关于动态性

在方法调用时加入了新的调用方法:invokedynamic
动态语言就是:类型检查的主体过程是运行期间而不是编译期间进行。变量无类型,变量值才有类型

Refalection和MethodHandel的区别

两个动能实现动态的调用方法,但是反射是在Java代码层面的方法调用,而MethodHandel是在字节码层面的方法调用。 反射所获取到目标方法的信息很多,而后者指获取到了执行该方法的相关信息,信息很少,那怎么才能正确实现方法调用呢?
P320

JVM参数

-Xmx 和 - Xms

这两个参数是用来设定堆内存大小的,前者为最大值,后者为最小值

参考资料

总结

JVM的学习其实很早就开始了,阅读《深入理解JVM》这本书也有一两遍了,以前只是了解了内存模型,垃圾回收器等知识。在后来了解JVM发现,其实类加载这方面的知识其实更重要,对于了解Java原理还是很有帮助,这次重点看的是类加载。

此次学习是通过查看别人总结的面试题目,有了大概的了解,在通过阅读《深入理解JVM》深入理解。
做学习笔记,其实我自我感觉这种程度还是不够的,获取还需要阅读相关部分一两遍才会有更深入的理解。

以下是感觉不错的参考资料:
参考资料-01

. spirng全家桶

. 微服务

. redis

. Mongodb

. mysql

. 数据结构和算法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
java核心知识点整理 1.Java中没有多继承,而是用接口来代替多继承 2.运行一个已经编译的程序时,Java解释器总是从指定类的main方法中的代码开始执行,因此,执行代码中必须有一个main函数。 3.Java是典型的强类型语言,即必须声明变量的类型,Java中有8种类型,6种数值类型(4个整数型和2个浮点型)、一个字符类型和一个boolean类型。 想学习java可以来这个群,首先是二二零,中间是一四二,最后是九零六,里面有大量的学习资料可以下载。 4.强制类型转换: int nx = (int) x; // (语法:用圆括号将目标类型括起来,后面跟上要转换的变量); 5.Java不能为单独的方法,如main方法,定义局部常量,而只能为类定义常量,供该类的所有方法使用,所以,通常称之为类常量。如: class UsersConstants{ 2public static final double g = 32; public static final double main(String[] args){ System.out.println(g); } } 注意:常量定义于main方法的外边,而且必须有关键字 static final; 6.字符串的子串: String str = hello”“; String str1 = str.substring(0,4); //输出hell 7.不要用==运算符来测试两个字符串是否相等,该运算符只能判断两个字符串是否存在同一个位置。 用equals. String str = “hello”; str.equals(”hell”); // return false; 8.对象的行为、状态、标识 9.面向过程与OOP
1. 目录 1. 2. 目录 .........................................................................................................................................................1 JVM ....................................................................................................................................................... 19 2.1. 线程 ...................................................................................................................................................... 20 2.2. JVM 内存区域 ..................................................................................................................................... 21 2.2.1. 程序计数器(线程私有) ................................................................................................................ 22 2.2.2. 虚拟机栈(线程私有) .................................................................................................................... 22 2.2.3. 本地方法区(线程私有) ................................................................................................................ 23 2.2.4. 堆(Heap-线程共享)-运行时数据区 ...................................................................................... 23 2.2.5. 方法区/永久代(线程共享) ..................................................................................................... 23 2.3. JVM 运行时内存 ................................................................................................................................. 24 2.3.1. 新生代 .......................................................................................................................................... 24 2.3.1.1. 2.3.1.2. 2.3.1.3. 2.3.1.4. Eden 区 .................................................................................................................................................... 24 ServivorFrom........................................................................................................................................... 24 ServivorTo .............................................................................................................................................. 24 MinorGC 的过程(复制->清空->互换) ....................................................................................... 24 1:eden、servicorFrom 复制到 ServicorTo,年龄+1................................................................................... 25 2:清空 eden、servicorFrom............................................................................................................................. 25 3:ServicorTo 和 ServicorFrom 互换................................................................................................................25 2.3.3.1. 2.4.1. 如何确定垃圾 .............................................................................................................................. 26 2.4.1.1. 引用计数法............................................................................................................................................... 26 2.4.1.2. 可达性分析............................................................................................................................................... 26 2.3.2. 2.3.3. 老年代 .......................................................................................................................................... 25 永久代 .......................................................................................................................................... 25 JAVA8 与元数据.................................................................................................................................25 2.4. 垃圾回收与算法 .................................................................................................................................. 26 2.4.2. 2.4.3. 2.4.4. 2.4.5. 2.4.5.1. 2.4.5.2. 2.6.1. 2.6.1.1. 2.6.1.2. 2.7.1. 2.7.2. 2.7.3. 2.7.4. 2.7.5. 2.7.6. 2.7.6.1. 标记清除算法(Mark-Sweep) .............................................................................................. 27 复制算法(copying)................................................................................................................. 27 标记整理算法(Mark-Compact).................................................................................................. 28 分代收集算法 .............................................................................................................................. 29 新生代与复制算法 .............................................................................................................................. 29 老年代与标记复制算法 ......................................................................................................................29 2.5. JAVA 四中引用类型 ........................................................................................................................... 30 2.5.1. 强引用 .......................................................................................................................................... 30 2.5.2. 软引用 .......................................................................................................................................... 30 2.5.3. 弱引用 .......................................................................................................................................... 30 2.5.4. 虚引用 .......................................................................................................................................... 30 2.6. GC 分代收集算法 VS 分区收集算法................................................................................................ 30 分代收集算法 .............................................................................................................................. 30 在新生代-复制算法............................................................................................................................. 30 在老年代-标记整理算法.....................................................................................................................30 分区收集算法 .............................................................................................................................. 31 2.7. GC 垃圾收集器 ................................................................................................................................... 31 2.6.2. Serial 垃圾收集器(单线程、复制算法)................................................................................ 31 ParNew 垃圾收集器(Serial+多线程) ................................................................................... 31 .......................................................... 32 ........................................................................... 32 ......................................................................... 33 ..................................................................................... 33 初始标记 .............................................................................................................................................. 33 Parallel Scavenge 收集器(多线程复制算法、高效) Serial Old 收集器(单线程标记整理算法 ) Parallel Old 收集器(多线程标记整理算法) CMS 收集器(多线程标记清除算法) 2.7.6.2. 2.7.6.3. 2.7.6.4. 2.8.1. 2.8.2. 2.8.3. 2.8.4. 2.8.5. 2.8.1. 2.8.2. 2.8.2.1. 2.8.2.2. 2.8.3. 2.8.4. 2.8.5. 并发标记 .............................................................................................................................................. 34 重新标记 .............................................................................................................................................. 34 并发清除 .............................................................................................................................................. 34 G1 收集器 .................................................................................................................................... 34 2.8. JAVA IO/NIO ....................................................................................................................................... 34 2.7.7. 2.9. 2.9.2. 2.9.2.1. 2.9.2.2. 2.9.2.3. 2.9.3. 2.9.4. 2.9.4.1. 2.9.4.2. 阻塞IO模型 ................................................................................................................................ 34 ............................................................................................................................ 35 ........................................................................................................................ 35 ........................................................................................................................ 36 ................................................................................................................................ 36 .................................................................................................................................. 36 .................................................................................................................................... 37 NIO 的缓冲区 .....................................................................................................................................38 NIO 的非阻塞 .....................................................................................................................................38 ....................................................................................................................................... 40 非阻塞 IO 模型 多路复用 IO 模型 信号驱动 IO 模型 ............................................................................................................................................ 40 ........................................................................................................................................ 40 JVM 类加载机制 ................................................................................................................................. 41 2.9.1.1. 2.9.1.2. 2.9.1.3. 2.9.1.4. 2.9.1.5. 2.9.1.6. 2.9.1.7. 2.9.1.8. 加载 .......................................................................................................................................................... 41 验证 .......................................................................................................................................................... 41 准备 .......................................................................................................................................................... 41 解析 .......................................................................................................................................................... 41 符号引用 .............................................................................................................................................. 42 直接引用 .............................................................................................................................................. 42 初始化 ...................................................................................................................................................... 42 类构造器 .............................................................................................................................. 42 类加载器 ...................................................................................................................................... 42 启动类加载器(Bootstrap ClassLoader) ......................................................................................... 43 扩展类加载器(Extension ClassLoader)..........................................................................................43 应用程序类加载器(Application ClassLoader): ..........................................................................43 双亲委派 ...................................................................................................................................... 43 OSGI(动态模型系统) ............................................................................................................ 44 动态改变构造 ...................................................................................................................................... 44 模块化编程与热插拔 .......................................................................................................................... 44 3. JAVA集合............................................................................................................................................45 3.1. 接口继承关系和实现 .......................................................................................................................... 45 3.2. LIST ....................................................................................................................................................... 47 3.2.1. ArrayList(数组)....................................................................................................................... 47 3.2.2. Vector(数组实现、线程同步) ............................................................................................... 47 3.2.3. LinkList(链表) ......................................................................................................................... 47 3.3. SET ....................................................................................................................................................... 48 3.3.1.1. 3.3.1.2. HashSet(Hash 表) ............................................................................................................................. 48 TreeSet(二叉树) ................................................................................................................................ 49 LinkHashSet(HashSet+LinkedHashMap) ................................................................................... 49 3.3.1.3. 3.4. MAP....................................................................................................................................................... 50 3.4.1. HashMap(数组+链表+红黑树)............................................................................................. 50 3.4.1.1. JAVA7 实现 ............................................................................................................................................. 50 3.4.1.2. JAVA8 实现 ............................................................................................................................................. 51 3.4.2. ConcurrentHashMap.................................................................................................................. 51 3.4.2.1. 3.4.2.2. 3.4.2.3. 3.4.2.4. Segment 段.............................................................................................................................................. 51 线程安全(Segment 继承 ReentrantLock 加锁) .............................................................................. 51 并行度(默认 16) ................................................................................................................................. 52 Java8 实现 (引入了红黑树) .............................................................................................................. 52 13/04/2018 Page 2 of 283 异步IO模型 JAVA IO 包 JAVA NIO Channel Buffer Selector 3.4.3. HashTable(线程安全) ........................................................................................................... 53 3.4.4. TreeMap(可排序) .................................................................................................................. 53 3.4.5. LinkHashMap(记录插入顺序) .............................................................................................. 53 4. JAVA 多线程并发.................................................................................................................................54 4.1.1. JAVA 并发知识库 ....................................................................................................................... 54 4.1.2. JAVA 线程实现/创建方式 .......................................................................................................... 54 4.1.2.1. 4.1.2.2. 4.1.2.3. 4.1.2.4. 继承 Thread 类 ........................................................................................................................................ 54 实现 Runnable 接口。............................................................................................................................ 54 ExecutorService、Callable、Future 有返回值线程.............................................................55 基于线程池的方式................................................................................................................................... 56 4.1.3. 4 种线程池 ................................................................................................................................... 56 4.1.3.1. 4.1.3.2. 4.1.3.3. newSingleThreadExecutor ................................................................................................................. 58 4.1.4. 线程生命周期(状态) .................................................................................................................... 58 4.1.3.4. 4.1.4.1. 4.1.4.2. 4.1.4.3. 4.1.4.4. 新建状态(NEW) ................................................................................................................................. 58 就绪状态(RUNNABLE): ................................................................................................................. 59 运行状态(RUNNING): .................................................................................................................... 59 阻塞状态(BLOCKED):....................................................................................................................59 4.1.9.5. 4.1.9.6. 4.1.9.7. 13/04/2018 Semaphore 信号量 ................................................................................................................................. 68 ................................................................................................................................. 68 ................................................................................................................................................................ 68 ........................................................................................................................... 69 AtomicInteger .......................................................................................................................................... 69 Page 3 of 283 newCachedThreadPool ......................................................................................................................... 57 ............................................................................................................................. 57 newScheduledThreadPool .................................................................................................................... 58 newFixedThreadPool 等待阻塞(o.wait->等待对列): ...................................................................................................................... 59 .......................................................................................................................................... 59 ............................................................................................................................................ 59 线程死亡(DEAD)................................................................................................................................ 59 ............................................................................................................................................................... 59 ............................................................................................................................................................... 59 ............................................................................................................................................................... 59 4.1.5. 终止线程 4 种方式 ...................................................................................................................... 60 同步阻塞(lock->锁池) 其他阻塞(sleep/join) 4.1.4.5. 4.1.5.1. 4.1.5.2. 4.1.5.3. 4.1.5.4. 正常运行结束........................................................................................................................................... 60 使用退出标志退出线程...........................................................................................................................60 Interrupt 方法结束线程 ........................................................................................................................... 60 stop 方法终止线程(线程不安全)....................................................................................................... 61 正常结束. 异常结束. 调用 stop 4.1.6. sleep 与 wait 区别....................................................................................................................... 61 4.1.7. start 与 run 区别 .......................................................................................................................... 62 4.1.8. JAVA 后台线程 ........................................................................................................................... 62 4.1.9. JAVA 锁 ....................................................................................................................................... 63 4.1.9.1. 4.1.9.2. 4.1.9.3. 乐观锁 ...................................................................................................................................................... 63 悲观锁 ...................................................................................................................................................... 63 自旋锁 ...................................................................................................................................................... 63 自旋锁的优缺点....................................................................................................................................................63 自旋锁时间阈值(1.6 引入了适应性自旋锁) .................................................................................................. 63 自旋锁的开启........................................................................................................................................................ 64 4.1.9.4. Synchronized 同步锁.............................................................................................................................. 64 ....................................................................................................................................... 64 ....................................................................................................................................... 64 Synchronized 作用范围 Synchronized 核心组件 Synchronized 实现 ............................................................................................................................................... 64 ReentrantLock......................................................................................................................................... 66 ........................................................................................................................................... 66 ................................................................................................................................................................ 66 .................................................................................................................................................................... 67 ........................................................................................................................ 67 ............................................................................................................................................. 67 ......................................................................................................... 68 tryLock 和 lock 和 lockInterruptibly 的区别........................................................................................................ 68 Lock 接口的主要方法 非公平锁 公平锁 ReentrantLock 与 synchronized ReentrantLock 实现 Condition 类和 Object 类锁方法区别区别 实现互斥锁(计数器为 1) 代码实现 Semaphore 与 ReentrantLock 4.1.9.8. 4.1.9.9. 4.1.9.10. 4.1.9.11. 4.1.9.12. 4.1.9.14. 4.1.9.15. 4.1.9.16. 可重入锁(递归锁)............................................................................................................................... 69 公平锁与非公平锁................................................................................................................................... 70 ..................................................................................................................................................... 70 ........................................................................................................................................... 70 ReadWriteLock 读写锁......................................................................................................................70 ........................................................................................................................................................................ 70 ........................................................................................................................................................................ 70 公平锁(Fair) 非公平锁(Nonfair) 读锁 写锁 共享锁和独占锁 .................................................................................................................................. 70 .................................................................................................................................................................... 70 .................................................................................................................................................................... 70 重量级锁(Mutex Lock)................................................................................................................71 轻量级锁 .............................................................................................................................................. 71 锁升级.................................................................................................................................................................... 71 独占锁 共享锁 4.1.9.13. 偏向锁 .................................................................................................................................................. 71 分段锁 .................................................................................................................................................. 71 锁优化 .................................................................................................................................................. 71 减少锁持有时间 .................................................................................................................................................... 72 ............................................................................................................................................................ 72 .................................................................................................................................................................... 72 .................................................................................................................................................................... 72 .................................................................................................................................................................... 72 4.1.10. 线程基本方法..............................................................................................................................72 减小锁粒度 锁分离 锁粗化 锁消除 4.1.10.1. 4.1.10.2. 4.1.10.3. 4.1.10.4. 4.1.10.5. 4.1.10.6. 4.1.10.7. 4.1.10.8. 线程等待(wait) ............................................................................................................................... 73 线程睡眠(sleep)............................................................................................................................. 73 线程让步(yield) .............................................................................................................................. 73 线程中断(interrupt)........................................................................................................................ 73 Join 等待其他线程终止 ...................................................................................................................... 74 为什么要用 join()方法? .................................................................................................................... 74 线程唤醒(notify)............................................................................................................................. 74 其他方法: .......................................................................................................................................... 74 4.1.11. 线程上下文切换..........................................................................................................................75 4.1.11.1. 4.1.11.2. 4.1.11.3. 4.1.11.4. 4.1.11.5. 4.1.11.6. 4.1.11.7. 进程......................................................................................................................................................75 上下文..................................................................................................................................................75 寄存器..................................................................................................................................................75 程序计数器 .......................................................................................................................................... 75 PCB-“切换桢”................................................................................................................................. 75 上下文切换的活动: .......................................................................................................................... 76 引起线程上下文切换的原因 .............................................................................................................. 76 4.1.12. 同步锁与死锁..............................................................................................................................76 4.1.12.1. 同步锁 .................................................................................................................................................. 76 4.1.12.2. 死锁 ...................................................................................................................................................... 76 4.1.13. 线程池原理..................................................................................................................................76 4.1.14.1. 4.1.14.2. 4.1.14.3. 4.1.14.4. 4.1.14.5. 4.1.14.6. 4.1.14.7. 4.1.14.8. 4.1.13.1. 4.1.13.2. 4.1.13.3. 4.1.13.4. 线程复用 .............................................................................................................................................. 76 ...................................................................................................................................... 76 .............................................................................................................................................. 78 ......................................................................................................................... 78 4.1.14. JAVA 阻塞队列原理.................................................................................................................... 79 线程池的组成 拒绝策略 Java 线程池工作过程 阻塞队列的主要方法 .......................................................................................................................... 80 ............................................................................................................................................................ 80 .................................................................................................................................................... 81 ............................................................................................................................. 81 ....................................................................................... 82 ......................................................................... 82 .............................................................. 82 .......................................................................................... 82 .............................................................. 83 ...................................................................................................................... 83 插入操作: 获取数据操作: Java 中的阻塞队列 ArrayBlockingQueue(公平、非公平) LinkedBlockingQueue(两个独立锁提高并发) PriorityBlockingQueue(compareTo 排序实现优先) DelayQueue(缓存失效、定时任务 ) SynchronousQueue(不存储数据、可用于传递数据) LinkedTransferQueue 13/04/2018 Page 4 of 283 4.1.14.9. LinkedBlockingDeque ..................................................................................................................... 83 4.1.15. CyclicBarrier、CountDownLatch、Semaphore 的用法 ........................................................ 84 4.1.15.1. 4.1.15.2. 4.1.15.3. ................................................................................................ 84 ............................................... 84 ....................................................................... 85 CountDownLatch(线程计数器 ) CyclicBarrier(回环栅栏-等待至 barrier 状态再全部同时执行) Semaphore(信号量-控制同时访问的线程个数) 4.1.16. volatile 关键字的作用(变量可见性、禁止重排序) ............................................................. 87 变量可见性............................................................................................................................................................ 87 禁止重排序............................................................................................................................................................ 87 ..................................................................................................................... 87 ................................................................................................................................................................ 87 4.1.17. 如何在两个线程之间共享数据...................................................................................................88 将数据抽象成一个类,并将数据的操作作为这个类的方法.............................................................................88 .................................................................................................................. 89 4.1.18. ThreadLocal 作用( )........................................................................................ 90 .............................................................................................................. 90 ................................................................................................................................................................ 91 4.1.19. synchronized 和 ReentrantLock 的区别 .................................................................................. 91 4.1.19.1. .................................................................................................................................. 91 4.1.19.2. .................................................................................................................................. 92 4.1.20. ConcurrentHashMap 并发......................................................................................................... 92 4.1.20.1. .......................................................................................................................................... 92 4.1.20.2. .......................................................................................................... 92 ................................................. 93 4.1.21. Java 中用到的线程调度 ............................................................................................................. 93 比 sychronized 更轻量级的同步锁 适用场景 Runnable 对象作为一个类的内部类 ThreadLocalMap(线程的一个属性) 线程本地存储 使用场景 两者的共同点: 两者的不同点: 4.1.21.1. 4.1.21.2. 4.1.21.3. 4.1.21.4. 减小锁粒度 ...................................................................................................................................... 93 ...................................................................................................................................... 93 ............................................................................................. 94 ..................................................................................................................... 94 4.1.22. 进程调度算法..............................................................................................................................94 4.1.22.1. 4.1.22.2. 4.1.22.3. ...................................................................................................................................... 94 ...................................................................................................................... 95 .............................................................................................................. 96 )..................................................................96 .......................................................................................................................................... 96 ........................................................................... 97 ............................................................................................................................................. 98 4.1.24. 什么是AQS(抽象的队列同步器).........................................................................................98 Exclusive 独占资源-ReentrantLock ................................................................................................................... 99 Share 共享资源-Semaphore/CountDownLatch ............................................................................................... 99 同步器的实现是 ABS 核心(state 资源状态计数) ....................................................................................... 100 ReentrantReadWriteLock 实现独占和共享两种方式.....................................................................................100 5. JAVA基础..........................................................................................................................................101 4.1.23. 什么是CAS( 4.1.23.1. 4.1.23.2. 4.1.23.3. 5.1.1. 5.1.1.1. 5.1.1.2. 5.1.1.3. 5.1.1.4. JAVA 异常分类及处理.............................................................................................................. 101 .................................................................................................................................................... 101 ............................................................................................................................................ 101 ..................................................................................................................................................................... 101 ........................................................................... 101 ................................................................................................................................ 102 ......................................................... 102 .................................................................................................................. 102 ............................................................................................................ 102 13/04/2018 Page 5 of 283 ConcurrentHashMap 分段锁 ConcurrentHashMap 是由 Segment 数组结构和 HashEntry 数组结构组成 抢占式调度: 协同式调度: JVM 的线程调度实现(抢占式调度) 线程让出 cpu 的情况: 优先调度算法 高优先权优先调度算法 基于时间片的轮转调度算法 比较并交换-乐观锁机制-锁自旋 概念及特性 原子包 java.util.concurrent.atomic(锁自旋) ABA 问题 概念 异常分类 Error Exception(RuntimeException、CheckedException) 异常的处理方式 遇到问题不进行具体处理,而是继续抛给调用者 (throw,throws) try catch 捕获异常针对性处理方式 Throw 和 throws 的区别: 位置不同 功能不同: 5.1.2. 5.1.2.1. 5.1.2.2. 5.1.2.3. 5.1.2.4. 5.1.2.5. 5.1.2.6. 5.1.2.7. 5.1.3. 5.1.4.1. 5.1.4.2. 5.1.4.3. 5.1.4.4. @Documented 描述-javadoc @Inherited 阐述了某个被标注的类型是被继承的 5.1.5.1. 5.1.5.2. 5.1.5.3. 5.1.5.4. 泛型方法() ............................................................................................................................. 112 泛型类 ............................................................................................................................................. 112 类型通配符? .......................................................................................................................................... 113 类型擦除 ................................................................................................................................................ 113 .............................................................................................................................................................. 102 .......................................................................................................................................................... 102 JAVA 反射 ................................................................................................................................. 103 ............................................................................................................................................ 103 ............................................................ 103 ................................................................................................................................ 103 .................................................................................................................................. 103 ...................................................................................................................... 104 .................................................................................................................................... 104 ............................................................................ 104 ..................................................................... 104 ............................................................................................................ 104 ....................................................................................................................... 104 ................................................................................ 104 ............................................................................ 104 动态语言 反射机制概念 (运行状态中知道类所有的属性和方法) 反射的应用场合 编译时类型和运行时类型 的编译时类型无法获取具体方法 Java 反射 API 反射 API 用来生成 JVM 中的类、接口或则对象的信息。 反射使用步骤(获取 Class 对象、调用对象方法) 获取 Class 对象的 3 种方法 调用某个对象的 getClass()方法 调用某个类的 class 属性来获取该类对应的 Class 对象 使用 Class 类中的 forName()静态方法(最安全/性能最好) 创建对象的两种方法 Class 对象的 newInstance() 调用 Constructor 对象的 newInstance() ........................................................................................................................ 105 ............................................................................................................................. 105 .......................................................................................................... 105 JAVA 注解 ................................................................................................................................. 106 5.1.3.1. 概念 ........................................................................................................................................................ 106 5.1.3.2. 4 种标准元注解...................................................................................................................................... 106 @Target 修饰的对象范围 ................................................................................................................................. 106 @Retention 定义 被保留的时间长短 ............................................................................................................... 106 ................................................................................................................................ 106 .............................................................................................. 106 5.1.3.3. 注解处理器............................................................................................................................................. 107 5.1.4. JAVA 内部类 ............................................................................................................................. 109 静态内部类............................................................................................................................................. 109 成员内部类............................................................................................................................................. 110 局部内部类(定义在方法中的类) ..................................................................................................... 110 匿名内部类(要继承一个父类或者实现一个接口、直接使用 new 来生成一个对象的引用) ..... 111 5.1.5. JAVA 泛型 ................................................................................................................................. 112 5.1.6. JAVA 序列化(创建可复用的 Java 对象) ................................................................................. 113 .................................................................................................... 113 ................................................................................................. 113 .................................................................................................................................. 113 Serializable 实现序列化 .................................................................................................................................... 113 ............................................... 113 ................................................................................................ 113 ............................................................................................................................................................. 113 .................................................................................................................................. 114 .............................................................................................................................................. 114 ............................................................................................ 114 5.1.7. JAVA 复制 ................................................................................................................................. 114 5.1.7.1. ......................................................................................................................................... 114 5.1.7.2. ..................................................................................... 114 5.1.7.3. ................................................................................................. 115 5.1.7.4. ........................................................................................................ 115 6. SPRING 原理 ..................................................................................................................................... 116 6.1.1. Spring 特点................................................................................................................................ 116 6.1.1.1. 轻量级 ................................................................................................................................................ 116 13/04/2018 Page 6 of 283 保存(持久化)对象及其状态到内存或者磁盘 序列化对象以字节数组保持-静态成员不保存 序列化用户远程对象传输 ObjectOutputStream 和 ObjectInputStream 对对象进行序列化及反序列化 writeObject 和 readObject 自定义序列化策略 序列化 ID 序列化并不保存静态变量 序列化子父类说明 Transient 关键字阻止该变量被序列化到文件中 直接赋值复制 浅复制(复制引用但不复制引用的对象) 深复制(复制对象和其应用对象) 序列化(深 clone 一中实现) 6.1.1.2. 6.1.1.3. 6.1.1.4. 6.1.1.5. 6.1.2. 6.1.3. 6.1.4. 6.1.5. 6.1.6. 6.1.7. ............................................................................................................................................ 116 ............................................................................................................................................ 116 .................................................................................................................................................... 116 ............................................................................................................................................ 116 Spring 核心组件........................................................................................................................ 117 Spring 常用模块........................................................................................................................ 117 Spring 主要包............................................................................................................................ 118 Spring 常用注解........................................................................................................................ 118 Spring 第三方结合.................................................................................................................... 119 Spring IOC 原理........................................................................................................................ 120 6.1.7.1. 6.1.7.2. 6.1.7.3. 概念 ........................................................................................................................................................ 120 Spring 容器高层视图 ............................................................................................................................ 120 IOC 容器实现......................................................................................................................................... 120 控制反转 面向切面 容器 框架集合 BeanFactory-框架基础设施 .............................................................................................................................. 120 1.1..1.1.1 1.1..1.1.2 1.1..1.1.3 1.1..1.1.4 1.1..1.1.5 1.1..1.1.6 1.1..1.1.7 1.1..1.1.8 BeanDefinitionRegistry 注册表................................................................................................. 121 BeanFactory 顶层接口 .............................................................................................................. 121 ListableBeanFactory ................................................................................................................. 121 HierarchicalBeanFactory 父子级联.......................................................................................... 121 ConfigurableBeanFactory......................................................................................................... 121 AutowireCapableBeanFactory 自动装配 ................................................................................ 122 SingletonBeanRegistry 运行期间注册单例 Bean................................................................... 122 依赖日志框框.............................................................................................................................122 ApplicationContext 面向开发应用 .................................................................................................................... 122 WebApplication 体系架构 ................................................................................................................................. 123 6.1.7.4. Spring Bean 作用域.............................................................................................................................. 123 singleton:单例模式(多线程下不安全) ...................................................................................................... 123 prototype:原型模式每次使用时创建 ................................................................................................................ 124 Request:一次 request 一个实例 .................................................................................................................... 124 session ................................................................................................................................................................ 124 global Session....................................................................................................................................................124 6.1.7.5. Spring Bean 生命周期.......................................................................................................................... 124 实例化.................................................................................................................................................................. 124 IOC依赖注入......................................................................................................................................................124 setBeanName 实现............................................................................................................................................ 124 BeanFactoryAware 实现 ................................................................................................................................... 124 ApplicationContextAware 实现......................................................................................................................... 125 postProcessBeforeInitialization 接口实现-初始化预处理.......................................................................... 125 init-method .......................................................................................................................................................... 125 postProcessAfterInitialization ........................................................................................................................... 125 Destroy 过期自动清理阶段 ............................................................................................................................... 125 destroy-method 自配置清理 ............................................................................................................................. 125 6.1.7.6. Spring 依赖注入四种方式 .................................................................................................................... 126 构造器注入.......................................................................................................................................................... 126 setter方法注入...................................................................................................................................................127 静态工厂注入...................................................................................................................................................... 127 实例工厂.............................................................................................................................................................. 127 6.1.7.7. 5 种不同方式的自动装配...................................................................................................................... 128 6.1.8. Spring APO 原理 ...................................................................................................................... 129 6.1.8.1. 6.1.8.2. 6.1.8.1. 概念 ........................................................................................................................................................ 129 AOP 核心概念 ....................................................................................................................................... 129 AOP 两种代理方式 ............................................................................................................................... 130 JDK 动态接口代理 ............................................................................................................................................. 130 CGLib 动态代理.................................................................................................................................................. 131 6.1.8.2. 实现原理 ................................................................................................................................................ 131 6.1.9. Spring MVC原理......................................................................................................................132 6.1.9.1. MVC 流程............................................................................................................................................... 132 Http 请求到 DispatcherServlet ....................................................................................................................... 133 HandlerMapping 寻找处理器............................................................................................................................133 调用处理器 Controller........................................................................................................................................ 133 13/04/2018 Page 7 of 283 Controller 调用业务逻辑处理后,返回 ModelAndView.................................................................................133 DispatcherServlet 查询 ModelAndView .......................................................................................................... 133 ModelAndView 反馈浏览器 HTTP ................................................................................................................... 133 6.1.9.1. MVC 常用注解 ....................................................................................................................................... 133 6.1.10. Spring Boot 原理....................................................................................................................... 134 1. 创建独立的 Spring 应用程序............................................................................................................................. 134 2.嵌入的Tomcat,无需部署WAR文件.............................................................................................................134 3. 简化 Maven 配置 ................................................................................................................................................ 134 4. 自动配置 Spring ................................................................................................................................................. 134 5. 提供生产就绪型功能,如指标,健康检查和外部配置................................................................................... 134 6. 绝对没有代码生成和对 XML 没有要求配置 [1] ............................................................................................... 134 6.1.11. JPA 原理 .................................................................................................................................... 134 6.1.11.1. 事务....................................................................................................................................................134 6.1.11.2. 6.1.11.1. 6.1.11.1. 本地事务 ............................................................................................................................................ 134 分布式事务 ........................................................................................................................................ 135 两阶段提交 ........................................................................................................................................ 136 1 准备阶段........................................................................................................................................................... 136 2 提交阶段:....................................................................................................................................................... 136 6.1.12. Mybatis 缓存.............................................................................................................................. 137 6.1.12.1. Mybatis 的一级缓存原理(sqlsession 级别)..............................................................................138 6.1.12.2. 二级缓存原理(mapper 基本).....................................................................................................138 具体使用需要配置: .......................................................................................................................................... 139 6.1.13. Tomcat 架构 .............................................................................................................................. 139 7. 微服务 ................................................................................................................................................. 140 7.1.1. 服务注册发现 ............................................................................................................................ 140
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值