Java后端高频知识点学习笔记1---Java基础

1、重载和重写的区别

重载: 同一类中多个同名方法根据不同的传参来执行不同的处理逻辑 ;方法名必须相同,参数类型不同、个数不同、顺序不同;返回值类型可以相同也可以不同(因为返回值类型不是 方法签名 的一部分)

重写: 子类对父类的方法的实现过程进行重新编写 。方法名,参数列表和返回值类型都不能改变。抛出的异常范围小于等于父类,访问修饰符范围大于等于父类。

什么是方法签名?

答:方法签名, 区分不同方法的标示符 ; 方法是由方法名、形参列表、返回值以及方法体构成 ; 方法签名是由方法名与形参列表构成 ,也就是说,方法名和形参列表可以唯一地确定一个方法,与方法的返回值没有关系

构造器是否可以被重写,是否可以被重载?

答:构造器可以被重载(Overload),不能被重写(Override)

静态方法能否被重写,能否被重载?

答: 静态方法不能被重写,可以被重载

静态方法可以被继承。 静态方法是类在加载时就被加载到内存中的方法,在整个运行过程中保持不变,因而不能重写 ;在Java中,如果父类中含有一个静态方法,且在子类中也含有一个返回类型、方法名、参数列表均与之相同的静态方法,那么该 子类实际上只是将父类中的该同名方法进行了隐藏,而非重写,可以通过类名.方法名调用被隐藏地方法 ;换句话说,父类和子类中含有的其实是两个没有关系的方法,它们的行为也并不具有多态性

2、Java面向对象的三大特性

封装:把一个对象的属性私有化,不允许外部对象直接访问这些私有属性,同时提供一些可以被外界访问私有属性的方法

继承:子类继承父类的非私有属性和方法;子类可以对父类的方法进行重写,也可以进行扩展,拥有自己的属性和方法;一个子类只能拥有一个父类,但是可以通过实现多个接口来达到多重继承的目的

多态:同一个操作作用在不同对象时,可以产生不同的执行结果;在Java语言中,多态主要有两种表现形式,方法的重载和重写

多态分为编译时多态-->重载;运行时多态-->重写

  • 重载 :同一个类中有多个同名方法,根据不同的传参可以执行不同的处理逻辑; 在编译时就可以确定到底调用哪个方法,它是一种编译时多态
  • 重写 :子类对父类的方法的实现过程进行重新编写,方法名,参数列表和返回值类型都不能改变,因此同样的方法在父类与子类中有着不同的表现形式。 
    Java语言中,父类的引用变量不仅可以指向父类的实例对象,也可以指向子类的实例对象 。而程序调用的方法在运行时才动态绑定,就是引用变量所指向的具体实例对象的方法,也就是内存中正在运行的那个对象的方法,而不是引用变量的类型中的定义的方法。这就会出现相同类型的变量调用同一个方法时呈现出多种不同的行为特征,这就是多态; 在运行时才能确定调用哪个方法,被称为运行时多态

使用多态的好处?

多态:同一个操作作用在不同对象时,可以产生不同的执行结果; 使用多态,可以解决代码的紧耦合的问题,提高程序的可扩展性

  1. 应用程序不必为每一个子类编写功能调用,只需要对抽象父类进行处理即可,大大提高程序的可复用性
  2. 子类的功能可以被父类的方法或引用变量所调用,这叫向上兼容,可以提高可扩充性和可维护性

3、Java面向对象的5大设计原则

原则描述
单一职责一个类只负责一个功能的实现
里氏替换只要父类出现的地方,都可以用子类替换
依赖倒置高层模块不应该依赖低层模块,二者都应该依赖其抽象;就是面向接口编程
接口隔离接口的功能尽可能单一;接口更可能细化,不要建立臃肿庞大的接口
开闭尽量通过扩展来面对需求的更改或者系统的变化,尽量不要对原有内容修改

4、String、StringBuilder和StringBuffer的区别是什么?

(1)String是不可变的,StringBuilder和StringBuffer是可变的

String不可变,String类中使用final关键字修饰char字符数组来保存字符串; private final char value[] ,从Java9开始,String类的实现改用byte字节数组存储字符串; private final byte[] value

而StringBuilder与StringBuffer都继承自AbstractStringBuilder类,在AbstractStringBuilder中也是使用字符数组保存字符串char[] value但是没有用final关键字修饰,所以这两种对象都是可变的

(2)String和StringBuffer是线程安全的,StringBuilder不是线程安全的

String中的对象的不可变的,所以是线程安全

StringBuffer对方法加了synchronized同步锁,所以是线程安全的

StringBuilder没有对方法加同步锁,所以不是线程安全的

(3)执行效率:StringBuilder最高,StringBuffer次之,String最低

每次对String类型进行改变的时候,都会生成一个新的String对象,然后将指针指向新的String对象。StringBuffer每次都会对StringBuffer本身进行操作,而不是生成新的对象并改变对象引用。相同情况下使用StringBuilder相比使用StringBuffer仅能获得10%~15%左右的性能提升,但要冒多线程不安全的风险

对于三者使用的总结:

当操作少量数据时,优先使用String。

当在单线程下操作大量数据,优先使用StringBuilder类

当在多线程下操作大量数据,优先使用StringBuffer类

5、String为什么要设置成不可变的?

(1)实现字符串常量池

字符串常量池(String pool)是Java堆内存中一个特殊的存储区域,当创建一个String对象时,假如此字符串值已经存在于常量池中,则不会创建一个新的对象,而是引用已经存在的对象;假若字符串对象允许改变,那么将会导致各种逻辑错误,比如改变一个对象会影响到另一个独立对象,严格来说,这种常量池的思想,是一种优化手段

(2)允许String对象缓存HashCode

Java中String对象的哈希码被频繁地使用, 比如在HashMap等容器中;字符串不变性保证了hash码的唯一性;因此可以放心地进行缓存,这也是一种性能优化手段,意味着不必每次都去计算新的哈希码.

(3)安全性

String被许多的Java类(库)用来当做参数,例如:网络连接地址URL,文件路径path,还有反射机制所需要的String参数等,假若String不是固定不变的,将会引起各种安全隐患;

数据库的用户名、密码都是以字符串的形式传入来获得数据库的连接,或者在socket编程中,主机名和端口都是以字符串的形式传入;因为字符串是不可变的,所以它的值是不可改变的,否则黑客们可以钻到空子,改变字符串指向的对象的值,造成安全漏洞。

在并发场景下,多个线程同时读写资源时,由于 String 是不可变的,不会引发线程的问题而保证了线程安全

总体来说,String不可变的原因包括 设计考虑,效率优化与安全性 这三大方面

6、自动装箱与拆箱

装箱:将基本类型用它们对应的引用类型包装起来

拆箱:将包装类型转化为基本数据类型

如下代码:

Integer i = 100; // 实际上是Integer.valueOf(100), 
int n = i; // 实际上是 i.intValue()

如上代码所示,在装箱的时候 自动调用 的是 Integer的valueOf(int) 方法;而在拆箱的时候自动调用的是 Integer的intValue() 方法。

详解: 在调用Integer.valueOf()方法中,如果数值在[-128,127]之间,将直接从IntegerCache中获取

因为IntegerCache中缓存了[-128,127]之间的值,通过Integer.valueOf()方法创建数值在[-128,127]之间的Integer对象时,便返回指向IntegerCache中已经存在的对象的引用;否则创建一个新的Integer对象

7、抽象类和接口的异同?

不同点:

序号不同点
1在JDK1.8之前接口只有方法的定义,不能有方法的实现;JDK1.8中接口可以有默认方法(default修饰)和静态方法(static修饰)的实现;JDK1.9开始接口中可以定义和实现私有方法(普通私有方法和静态私有方法);而抽象类可以有方法的定义与实现
2接口里只能定义静态常量(static final),不能定义普通成员变量;抽象类中既可以定义静态常量,也能定义普通成员变量
3接口中不能包含静态代码块,抽象类中可以包含静态代码块
4一个类只能继承一个抽象类,但是一个类可以实现多个接口
5接口强调的是特定功能的实现,抽象类强调的是所属关系
6main 方法:接口不能有 main 方法;抽象类可以有 main 方法,并且可以运行它
7接口中定义的成员变量,只能是静态常量,默认修饰符 public static final,而且必须给其赋初值;接口中定义的成员方法,抽象方法,默认修饰符为public abstract;抽象类中成员变量默认default(默认,什么也不写,同一包中可见),可在子类中被重新定义,也可被重新赋值;抽象类中抽象方法被abstract修饰,不能被private、static、synchronzed和native等修饰,必须以分号结尾,不带花括号
8接口中不包含构造器;抽象类里可以包含构造器,抽象类中的构造器并不是用于创建对象,而是让其子类调用这些构造器来完成属于抽象类的初始化操作
9接口被用于常用的功能,便于日后维护和添加删除;抽象类更倾向于充当公共类的角色,不适用于日后重新对立面的代码修改;功能需要累积时用抽象类,不需要累积时用接口

相同点:

序号相同点
1接口和抽象类都不能被实例化;接口的实现类或抽象类的子类都只有实现了接口或抽象类中的方法后才能被实例化
2接口和抽象类都可以包含抽象方法

8、Java中" == "与equals()方法的区别?

" == ": 对于八大基本数据类型来说,直接比较值;如果是引用数据类型,则是比较内存地址;(因为 Java只有值传递 ,所以对于" == "来说,不管是比较基本数据类型,还是引用数据类型的变量,本质都是比较值,只是引用类型变量存的值是对象的地址)

equals():equals()是Object类提供的方法之一;每一个Java类都继承自Object类,所以每一个对象都具有equals方法。Object中的equals方法是直接使用" == "运算符比较的两个对象,所以在没有重写equals方法的情况下,equals与" == "运算符一样,比较的是地址; 可以通过重写equals方法来比较两个对象的内容是否相等

9、为什么重写equals()方法时必须重写hashCode()方法?

equals()和hashCode()方法要遵循如下的 原则 :

1、如果两个对象equals()方法相等,它们的hashCode返回值一定要相同

2、如果两个对象的hashCode返回值相同,但它们的equals()方法不一定相等

3、两个对象的hashcode()返回值不相等,则可以判定两个对象的内容一定不相等

如果只重写equals()方法而不重写hashCode()方法,将会造成equals()方法判断出的结果是true,但hashCode()返回值不同的情况,也可能会出现hashCode()方法返回值相等,但equals()方法相同的情况,因此equals()方法与hashCode()方法都要进行修改,使两者遵循上述原则; 即:equals方法被覆盖,则hashCode方法也必须被覆盖

问题:为什么需要hashCode()方法?

答:使用hashCode()方法提前校验,避免每一次比较都调用equals方法,提高效率

面试官:你有没有重写过equals()和hashcode()?

答: 在使用HashMap的“key”的部分存放自定义的对象时,重写过hashCode和equals方法,从而保证key是唯一的

10、Java中的八大基本数据类型

Java有8中基本数据类型,其中包括

6种数字类型:byte(1)、short(2)、int(4)、long(8)、float(4)、double(8)

1种字符类型:char(2)

1种布尔型:boolean

对于boolean型,官方文档未明确定义,它依赖于JVM厂商的具体实现

11、final关键字

final用来修饰类、方法和变量

1、 final修饰的类不能被继承,final类中的所有成员方法都会被隐式的指定为final方法 (但是final修饰的类中成员变量是可变的,如果想要final类的成员变量不可变,必须给成员变量增加final修饰)

2、final修饰的方法不能被重写

3、 final修饰的变量是常量 ;如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改;如果是引用类型的变量,则在对其初始化之后便不能让其指向另一个对象

12、static关键字

static关键字主要有以下4种用法:

1、修饰成员变量和成员方法

被 static 修饰的成员属于类,被类中所有对象共享,可通过 类名.成员变量 或 对象.成员变量的方式调用

static变量也称作静态变量,静态变量和非静态变量的区别是: 静态变量被所有的对象所共享,在内存中只有一个副本,它当且仅当在类初次加载时会被初始化 ;而非静态变量是对象所拥有的,在创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响;static成员变量的初始化顺序按照定义的顺序进行初始化

static方法也称作静态方法,静态方法不依赖于任何对象就可以进行访问,静态方法只能访问静态成员,但不能访问类的非静态成员,因为非静态成员必须依赖具体的对象才能够被调用(成员:成员方法与成员变量)

2.静态代码块

静态代码块定义在类中方法外,类中可以有多个static块

静态代码块在非静态代码块之前按照static块的顺序来执行每个static块(静态代码块-->非静态代码块-->构造方法)

一个类不管创建多少对象,静态代码块只执行一次

3.静态内部类

static修饰类的话只能修饰内部类;静态内部类与非静态内部类之间存在一个最大的区别: 非静态内部类在编译完成之后会隐含地保存着一个引用,该引用是指向创建它的外围类,但是静态内部类却没有。没有这个引用就意味着:<1>它的创建是不需要依赖外围类的创建;<2>它不能使用任何外围类的非静态成员(成员:成员方法与成员变量)

4.静态导包

用来导入类中的静态资源,1.5之后的新特性;可以指定导入某个类中的指定静态资源,并且不需要使用类名调用类中的静态成员,可以直接使用类中静态成员变量和成员方法。

静态代码块的加载次序: 
父类静态代码块-->子类静态代码块-->父类非静态代码块-->父类构造函数-->子类非静态代码块-->子类构造函数

13、深拷贝和浅拷贝

浅拷贝:对基本数据类型进行值传递;对引用数据类型只是进行引用的传递,并没有在内存中的创建一个新的对象,此为浅拷贝

深拷贝:对基本数据类型进行值传递;对引用数据类型,创建一个新的对象,并复制其内容,此为深拷贝

14、Java异常体系

Java中,所有的异常都有⼀个共同的祖先java.lang包中的Throwable类:Throwable类有两个重要的⼦类:Exception(异常) 和 Error(错误),⼆者都是Java异常体系的重要⼦类,各⾃都包含⼤量⼦类

Error(错误):程序⽆法处理的错误,表示运⾏应⽤程序中较严重问题;⼤多数错误与代码编写者执⾏的操作⽆关,⽽表示代码运⾏时JVM出现的问题;例如,Java 虚拟机运⾏错误(Virtual MachineError),当 JVM 不再有继续执⾏操作所需的内存资源时,将出现内存溢出(OutOfMemoryError);这些异常发⽣时,JVM⼀般会选择终⽌线程

Exception(异常):程序本身可以处理的异常;Exception 类有⼀个重要的⼦类RuntimeException;RuntimeException异常由JVM抛出;还有NullPointerException(要访问的变量没有引⽤任何对象时,抛出该异常);ArithmeticException(算术运算异常,⼀个整数除以0时,抛出该异常)以及 ArrayIndexOutOfBoundsException(数组下标越界异常)

Exception(异常)又分为两类:运行时异常和编译时异常

1、运行时异常(不受检异常):RuntimeException类及其子类表示JVM在运行期间可能出现的错误;比如说试图使用空值对象的引用(NulIPointerException)、数组下标越界(ArraylndexOutBoundException);此类异常属于不可查异常,一般是由程序逻辑错误引起的,在程序中可以选择捕获处理,也可以不处理

2、编译时异常(受检异常):Exception中除RuntimeException及其子类之外的异常;如果程序中出现此类异常,比如说IOException,必须对该异常进行处理,否则编译不通过;在程序中,通常不会自定义该类异常,而是直接使用系统提供的异常类

15、反射

1、什么是Java的反射

反射是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取信息以及动态调用对象的方法的功能称为 Java 语言的反射机制

2、反射的作用

运行时:判断对象所属的类;构造一个对象所属的类;判断一个对象的方法和属性;调用对象的方法和属性

16、Java泛型

Java的泛型即"参数化类型",允许程序在创建集合时指定集合元素的类型,表示该集合只能保存该类型的对象

为什么要使用泛型?

答: 如果不使用泛型,当把一个对象存入集合后,集合就会忘记这个对象的数据类型,再次取出该对象时,该对象的编译类型就变成了Object类型,还需要进行强制转换;当使用泛型后,集合中只能存入指定类型的对象,否则将报错,并且将对象从集合取出后无需对元素进行强制转换,就是原本的类型(指定的类型) ;

由此可见在集合中存储对象并在使用前进行类型转换是多么的不方便;泛型防止了那种情况的发生,提供了编译时的类型安全,确保只能把正确类型的对象放入集合中,避免了在运行时出现ClassCastException(类型转换异常)

扩展知识:

父子对象之间的转换分为了向上转型和向下转型;它们解释如下:

向上转型: 通俗地讲,就是将子类对象向上转为父类对象,或者说是父类引用指向子类对象 ,此处父类对象可以是接口

格式: 父类 变量名 = new 子类();

向上转型的好处?

向上转型后,父类引用可以调用子类重写过的父类方法,当需要新添功能时,可以新增一个(子)类即可,而不用更改原父类代码

向上转型后的对象不是新创建的父类对象,而是子类对象的"简化"状态,它不关心子类新增的功能,只关心子类继承和重写的功能;当一个类有很多子类时,并且这些子类都重写了父类中的某个方法,使用上转型对象调用这个方法时就可能具有多种形态,因为不同的子类在重写父类的方法时可能产生不同的行为;也就是说, 不同对象的上转型对象调用同一方法可能产生不同的行为

向下转型:与向上转型相反,即是把父类对象转为子类对象;一个已经向上转型的子类对象,将父类引用转为子类引用,可以使用强制转换的格式

格式: 子类 变量名 = (父类类型)父类变量;

为什么要向下转型?

向下转型一般是为了重新获得因为向上转型而丢失的子类特性;因此,通常在向下转型前已经有向上转型,而向下转型通常也会结合instanceof一起使用;借由向下转型,可以在灵活应用多态的基础上,同时兼顾子类的独有特征(instanceof:用来测试一个对象是否为一个类的实例)

用法是: boolean result = obj instanceof Class

17、什么是泛型擦除

在代码中定义 List<Object> 和 List<String> 等类型,在编译后都会变成List,JVM看到的只是List,而由泛型附加的类型信息对JVM是看不到的

在如下例子中,定义了两个ArrayList数组;一个是ArrayList 泛型类型的,只能存储字符串;一个是ArrayList

泛型类型的,只能存储整数;通过list1对象和list2对象的getClass()方法获取他们的类的信息,最后发现结果为true

说明泛型类型String和Integer都被擦除掉了,只剩下原始类型

Java代码:

import java.util.*;
public class Test {
    public static void main(String[] args) {
        List<String> l1 = new ArrayList<String>();
        List<Integer> l2 = new ArrayList<Integer>();
        System.out.println(l1.getClass() == l2.getClass());  
        System.out.println("l1.getClass():"+l1.getClass().getName());
        System.out.println("l1.getClass():"+l2.getClass().getName());
    }
}

运行结果:

true
l1.getClass():java.util.ArrayList
l1.getClass():java.util.ArrayList

18、Java Object类中的方法

方法含义
getClass()返回一个对象的运行时类
int hashCode()返回该对象的哈希码值
boolean equals(Object obj)判断其他对象是否与此对象“相等”
String toString()返回该对象的字符串表示
void notify()唤醒在此对象监视器上等待的单个线程
void notifyAll()唤醒在此对象监视器上等待的所有线程
void wait()导致当前的线程等待,直到其他线程调用此对象的 notify() 方法或 notifyAll() 方法
protected Object clone()创建并返回此对象的一个副本
protected void finalize()当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法

19、Java String类中的方法

20、Java创建对象的5种方式?

①使用new关键字

②使用Class类的newInstance方法

③使用Constructor类的newInstance方法

④使用clone方法

⑤使用反序列化

21、Java访问修饰符的范围

22、Hash冲突的解决方式?

1、开放定址法

当发生冲突时,使用某种探查技术在散列表中形成一个探查序列,沿此序列逐个单元地查找,直到找到一个开放的地址(地址单元为空)或探查序列查找完为止;若探查到开放的地址,则可将待插入的新结点存人该地址单元;若探查序列查找完都没有找到开放的地址,则失败

按照形成探查序列的方法不同,可将开放定址法区分为线性探查法、二次探查法、随机探查法

①线性探查法

②二次探查法

③随机探查法

2.拉链法

将所有哈希地址为i的元素构成一个称为同义词链的单链表,并将单链表的头指针存到哈希表的第i个单元中,因而查找、插入和删除主要在同义词链中进行

拉链法(链地址法)适用于经常进行插入和删除的情况

3.再Hash法

当计算出的hash值产生冲突时,再计算另一个Hash函数的哈希值,直到冲突不再发生为止

4.建立公共溢出区

将哈希表分为基本表和溢出表两部分,凡是和基本表发生冲突的元素,一律填入溢出表

23、Java中的流分为几种?

按照 流的流向 划分,分为 输⼊流和输出流

按照 操作单元 划分,分为 字节流和字符流

按照 流的⻆⾊ 划分,分为 节点流和处理流

Java IO流共涉及40多个类,这些类看上去很杂乱,但实际上很有规则,⽽且彼此之间存在⾮常紧密的联系;Java IO流的 40 多个类都是从如下4个抽象类基类中派⽣出来的;

InputStream/Reader: 所有的输⼊流的基类,前者是字节输⼊流,后者是字符输⼊流

OutputStream/Writer: 所有输出流的基类,前者是字节输出流,后者是字符输出流

如果看完的小伙伴有兴趣了解更多的话,欢迎添加vx小助手:ON7luck  详细了解~

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值