第055层:81道重点面试题

本文深入探讨了Java中静态方法访问限制、线程同步与线程池实现,并阐述了Spring框架模块与SpringBoot优势。还涵盖了MyBatis安全与Spring注入、HTTP响应码含义及JVM加载机制。

27、在 Java 中,为什么不允许从静态方法中访问非静态变量?

33、实例化对象有哪几种方式

35、Java 容器都有哪些?

73、如何让 Java 的线程彼此同步?

75、Java 中的线程池是如何实现的

76、创建线程池的几个核心构造参数

81、请谈谈 ThreadLocal 是怎么解决并发安全的?

97、http 响应码 301 和 302 代表的是什么?有什么区别?

114、什么是 Spring 框架?Spring 框架有哪些主要模块?

115、使用 Spring 框架能带来哪些好处?

137、请举例说明如何在 Spring 中注入一个 Java Collection?

138、mybatis 中 #{}和 ${}的区别是什么?

139、mybatis 是否支持延迟加载?延迟加载的原理是什么?

145、mybatis如何防止sql注入

150、什么是 Spring Boot?Spring Boot 有哪些优点?

162、数据库的三范式是什么?

179、说一下 jvm 的主要组成部分?及其作用?

180、说一下 jvm 运行时数据区?

181、什么是类加载器,类加载器有哪些?

182、说一下类加载的执行过程?

183、JVM的类加载机制是什么?

184、什么是双亲委派模型?

185、怎么判断对象是否可以被回收?

第二波重点

27、在 Java 中,为什么不允许从静态方法中访问非静态变量?

静态变量属于类本身,在类加载的时候就会分配内存,可以通过类名直接访问;

非静态变量属于类的对象,只有在类的对象产生时,才会分配内存,通过类的实例去访问;

静态方法也属于类本身,但是此时没有类的实例,内存中没有非静态变量,所以无法调用。

33、实例化对象有哪几种方式

new

clone()

通过反射机制创建

35、Java 容器都有哪些?

(1)Collection

① set   HashSet、TreeSet

② list    ArrayList、LinkedList、Vector

(2)Map    HashMap、HashTable、TreeMap

73、如何让 Java 的线程彼此同步?

synchronized

volatile

ReenreantLock

使用局部变量实现线程同步

75、Java 中的线程池是如何实现的

在第一次执行任务时创建足够多的线程,并处理任务,之后每个工作线程自动从任务队列中获取线程,直到任务队列中任务为0为止,此时线程处于等待状态,一旦有工作任务加入任务队列中,即刻唤醒工作线程进行处理,实现线程的可复用性。

线程池一般包括四个基本组成部分:

(1)线程池管理器

(2)工作线程

(3)任务队列

(4)任务接口

76、创建线程池的几个核心构造参数

线程池长期维持的最小线程数

线程数的上限

线程最大生命周期。

时间单位                                 

任务队列。

线程工厂。

81、请谈谈 ThreadLocal 是怎么解决并发安全的?

在java程序中,常用的有两种机制来解决多线程并发问题,

sychronized方式,通过锁机制,一个线程执行时,让另一个线程等待,是以时间换空间的方式来让多线程串行执行。另外一ThreadLocal方式,通过创建线程局部变量,以空间换时间的方式来让多线程并行执行。

97、http 响应码 301 和 302 代表的是什么?有什么区别?

301和302状态码都表示重定向,当浏览器拿到服务器返回的这个状态码后悔自动跳转到一个新的URL地址。

301代表永久性重定向,旧地址被永久移除,客户端向新地址发送请求。

302代表暂时性重定向,旧地址还在,客户端继续向旧地址发送请求。

303代表暂时性重定向,重定向到新地址时,必须使用GET方法请求新地址。

114、什么是 Spring 框架?Spring 框架有哪些主要模块?

Spring是一个控制反转和面向切面的容器框架。

Spring有七大功能模块:

1、Core

2、AOP

3、orm

4、Dao

5、Web

6、Context

7、MVC

115、使用 Spring 框架能带来哪些好处?

1、轻量级框架、容器

2、控制反转IOC

3、支持AOP

5、方便测试

6、对Java中很多API进行了封装

7、方便集成各种优秀框架

8、支持声明式事务处理

137、请举例说明如何在 Spring 中注入一个 Java Collection?

Spring注入有四种方式,

set注入;

构造器注入;

基于注解的注入;

xml配置文件注入;

138、mybatis 中 #{}和 ${}的区别是什么?

#{}带引号,${}不带引号;

#{}可以防止SQL注入;

${}常用于数据库表名、order by子句;

一般能用#{}就不要使用${};

139、mybatis 是否支持延迟加载?延迟加载的原理是什么?

1、mybatis 是否支持延迟加载?

延迟加载其实就是讲数据加载时机推迟。

延迟加载可以实现先查询主表,按需实时做关联查询,返回关联表结果集,一定程度上提高了效率。

145、mybatis如何防止sql注入

1、检查变量数据类型和格式

2、过滤特殊符号

3、绑定变量,使用预编译语句

150、什么是 Spring Boot?Spring Boot 有哪些优点?

1、Spring Boot简介

继承了Spring框架原有的优秀特性,而且还通过简化配置来进一步简化spring应用的整个搭建和开发过程。

2、Spring Boot 有哪些优点?

1快速构建项目,可以选一些必要的组件;

2对主流框架的无配置集成;

3内嵌Tomcat容器,项目可独立运行;

4删除了繁琐的xml配置文件;

5极大地提高了开发和部署效率;

6提供starter,简化maven配置;

162、数据库的三范式是什么?

1、列不可再分;

2、每一行数据只做一件事,只与一列相关,主键;

3、每个属性都与主键有直接关系,而不是间接关系;

179、说一下 jvm 的主要组成部分?及其作用?

1、类加载子系统

2、直接内存

3、垃圾回收器

4、执行引擎

1、类加载子系统  类加载子系统负责加载class信息,加载的类信息存放于方法区中。

2、直接内存  访问直接内存的速度会由于Java堆。出于性能的考虑,读写频繁的场合可能会考虑使用直接内存。

3、垃圾回收器  垃圾回收器可以对堆、方法区、直接内存进行回收。

4、执行引擎  执行引擎负责执行虚拟机的字节码,虚拟机会使用即时编译技术将方法编译成机器码后再执行。

180、说一下 jvm 运行时数据区?

运行时数据区包括 堆、 方法区、 栈、 本地方法栈、 程序计数器。

1、堆   堆解决的是对象实例存储的问题,垃圾回收器管理的主要区域。

2、方法区  方法区用于存储已被虚拟机加载的信息,常量、静态变量、即时编译器编译后的代码。

3、栈  栈里面存的是栈帧,栈帧里面存的是局部变量表、操作数栈、动态链接、方法出口等信息。

4、本地方法栈

5、程序计数器(PC寄存器)程序计数器中存放的是当前线程所执行的字节码的行数。

181、什么是类加载器,类加载器有哪些?

1、什么是类加载器?

类加载器负责加载所有的类

2、类加载器有哪些?

JVM有三种类加载器:

(1)启动类加载器

(2)扩展类加载器

(3)应用程序类加载器

182、说一下类加载的执行过程?

当程序主动使用某个类时,如果该类还未被加载到内存中,JVM会通过加载、连接、初始化3个步骤对该类进行类加载。

1、加载

从本地文件系统加载

从jar包加载

通过网络加载

2、连接

3、初始化 为类的静态变量赋予初始值。

183、JVM的类加载机制是什么?

JVM类加载机制主要有三种:

1、全盘负责

2、双亲委派    先让父加载器加载该class,父加载器无法加载时才考虑自己加载。

3、缓存机制

184、什么是双亲委派模型?

如果一个类收到了类加载请求,它并不会自己先去加载,而是把这个请求委托给父类的加载器执行,

如果父加载器还存在其父加载器,则进一步向上委托,依次递归,请求将最终到达顶层的启动类加载器,如果父类加载器可以完成父加载任务,就成功返回,如果父加载器无法完成加载任务,子加载器才会尝试自己去加载,这就是双亲委派模型。

185、怎么判断对象是否可以被回收?

1、引用计数算法

2、可达性分析算法

1、引用计数算法

(1)判断对象的引用数量

通过判断对象的引用数量来决定对象是否可以被回收;

每个对象实例都有一个引用计数器,被引用+1,完成引用-1;

任何引用计数为0的对象实例可以被当做垃圾回收;

2、可达性分析算法

通过判断对象的引用链是否可达来决定对象是否可以被回收。

====================================================================================================================================================================================================================================================================================================================================

====================================================================================================================================================================================================================================================================================================================================

====================================================================================================================================================================================================================================================================================================================================

====================================================================================================================================================================================================================================================================================================================================

========================================================================================================================================================================================================================

第一波重点

1、JDK 和 JRE 有什么区别?

2、== 和 equals 的区别是什么?

3、final 在 java 中有什么作用?

10、如何将字符串反转?

12、普通类和抽象类有哪些区别?

13、接口和抽象类有什么区别?

14、java 中 IO 流分为几种?

15、BIO、NIO、AIO 有什么区别?

16、Files的常用方法都有哪些?

17、什么是反射?

18、什么是 java 序列化?什么情况下需要序列化?

19、为什么要使用克隆?如何实现对象克隆?深拷贝和浅拷贝区别是什么?

20、throw 和 throws 的区别?

21、final、finally、finalize 有什么区别?

23、常见的异常类有哪些?

24、hashcode是什么?有什么作用?

25、java 中操作字符串都有哪些类?它们之间有什么区别?

26、java 中都有哪些引用类型?

31、在 Java 中,什么时候用重载,什么时候用重写?

35、Java 容器都有哪些?

36、Collection 和 Collections 有什么区别?

37、list与Set区别

38、HashMap 和 Hashtable 有什么区别?

39、说一下 HashMap 的实现原理?

40、set有哪些实现类?

42、ArrayList 和 LinkedList 的区别是什么?

45、哪些集合类是线程安全的

46、迭代器 Iterator 是什么?

47、Iterator 怎么使用?有什么特点?

50、队列和栈是什么?有什么区别?

54、HasmMap和HashSet的区别

56、线程的run()和start()有什么区别?

57、为什么我们调用 start() 方法时会执行 run() 方法,为什么我们不能直接调用 run() 方法?

88、jsp 和 servlet 有什么区别?

89、jsp 有哪些内置对象?作用分别是什么?

90、forward 和 redirect 的区别?

91、说一下 jsp 的 4 种作用域?

92、session 和 cookie 有什么区别?

96、说一下 session 的工作原理?

97、http 响应码 301 和 302 代表的是什么?有什么区别?

98、简述 tcp 和 udp的区别?

99、tcp 为什么要三次握手,两次不行吗?为什么?

101、get 和 post 请求有哪些区别?

107、请列举出在 JDK 中几个常用的设计模式?

108、什么是设计模式?你是否在你的代码里面使用过任何设计模式?

109、Java 中什么叫单例设计模式?请用 Java 写出线程安全的单例模式

112、请解释自动装配模式的区别?

114、什么是 Spring 框架?Spring 框架有哪些主要模块?

115、使用 Spring 框架能带来哪些好处?

116、Spring IOC、AOP举例说明

117、什么是控制反转(IOC)?什么是依赖注入?

119、什么是 JavaConfig?

120、什么是 ORM 框架?

121、Spring 有几种配置方式?

122、请解释 Spring Bean 的生命周期?

123、Spring Bean 的作用域之间有什么区别?

127、请解释 Spring Bean 的自动装配?

150、什么是 Spring Boot?Spring Boot 有哪些优点?

151、Spring Boot 中的监视器是什么?

153、如何使用 Spring Boot 实现分页和排序?

175、mysql 的内连接、左连接、右连接有什么区别?

第一波重点

1、JDK 和 JRE 有什么区别?

JDK(Java Development Kit),Java开发工具包

JRE(Java Runtime Environment),Java运行环境

2、== 和 equals 的区别是什么?

对于基本类型,==比较的是值;

对于引用类型,==比较的是地址;

equals不能用于基本类型的比较;

如果没有重写equals,equals就相当于==;

如果重写了equals方法,equals比较的是对象的内容;

3、final 在 java 中有什么作用?

(1)用来修饰一个引用

 如果引用为基本数据类型,则该引用为常量,该值无法修改;

 如果引用为引用数据类型,比如对象、数组,则该对象、数组本身可以修改,但指向该对象或数组的地址的引用不能修改。

(2)用来修饰一个方法

当使用final修饰方法时,这个方法将成为最终方法,无法被子类重写。但是,该方法仍然可以被继承。

(3)用来修饰类

当用final修改类时,该类成为最终类,无法被继承。比如常用的String类就是最终类。

10、如何将字符串反转?

添加到StringBuilder中,然后调用reverse()。

11、String 类的常用方法都有那些?

equals、length、contains、replace、hashcode、indexof、substring、toUpperCase、toLowerCase、isEmpty

12、普通类和抽象类有哪些区别?

抽象类不能被实例化;

抽象类可以有抽象方法,只需申明,无须实现;

有抽象方法的类一定是抽象类;

抽象类的子类必须实现抽象类中的所有抽象方法,否则子类仍然是抽象类;

抽象方法不能声明为静态、不能被static、final修饰。

13、接口和抽象类有什么区别?

(1)接口

接口使用interface修饰;

接口不能实例化;

类可以实现多个接口;

(2)抽象类

抽象类使用abstract修饰;

抽象类不能被实例化;

抽象类只能单继承;

抽象类中可以包含抽象方法和非抽象方法,非抽象方法需要有方法体;

14、java 中 IO 流分为几种?

(1)按流划分,可以分为输入流和输出流;

(2)按单位划分,可以分为字节流和字符流;

字节流:inputStream、outputStream;

字符流:reader、writer;

15、BIO、NIO、AIO 有什么区别?

(1)同步阻塞BIO

(2)同步非阻塞NIO

(3)异步非阻塞AIO

16、Files的常用方法都有哪些?

createFile    createDirectory

Write  read   copy    size    delete   move

17、什么是反射?

所谓反射,是java在运行时进行自我观察的能力,

通过class、constructor、field、method四个方法获取一个类的各个组成部分。

在Java运行时环境中,对任意一个类,可以知道类有哪些属性和方法。

这种动态获取类的信息以及动态调用对象的方法的功能来自于反射机制。

18、什么是 java 序列化?什么情况下需要序列化?

序列化就是一种用来处理对象流的机制。

序列化是将对象转换为容易传输的格式的过程。

19、为什么要使用克隆?如何实现对象克隆?深拷贝和浅拷贝区别是什么?

(1)什么要使用克隆?

想对一个对象进行复制,又想保留原有的对象进行接下来的操作,这个时候就需要克隆了。

(2)如何实现对象克隆?

实现Cloneable接口,重写clone方法;

实现Serializable接口,通过对象的序列化和反序列化实现克隆,可以实现真正的深克隆。

(3)深拷贝和浅拷贝区别是什么?

浅拷贝:仅仅克隆基本类型变量,不克隆引用类型变量;

深克隆:既克隆基本类型变量,又克隆引用类型变量;

20、throw 和 throws 的区别?

(1)throw

作用在方法内,表示抛出具体异常,由方法体内的语句处理;

(2)throws

作用在方法的声明上,表示抛出异常,由调用者来进行异常处理;

21、final、finally、finalize 有什么区别?

final可以修饰类,变量,方法,修饰的类不能被继承,

修饰的变量不能重新赋值,修饰的方法不能被重写

finally用于抛异常,finally代码块内语句无论是否发生异常,都会在执行finally,

常用于一些流的关闭。

finalize方法用于垃圾回收。

23、常见的异常类有哪些?

NullPointerException:空指针异常;

SQLException:数据库相关的异常;

IndexOutOfBoundsException:数组下角标越界异常;

FileNotFoundException:打开文件失败时抛出;

IOException:当发生某种IO异常时抛出;

ClassCastException:当试图将对象强制转换为不是实例的子类时,抛出此异常;

NoSuchMethodException:无法找到某一方法时,抛出;

ArrayStoreException:试图将错误类型的对象存储到一个对象数组时抛出的异常;

NumberFormatException:当试图将字符串转换成数字时,失败了,抛出;

IllegalArgumentException 抛出的异常表明向方法传递了一个不合法或不正确的参数。

ArithmeticException当出现异常的运算条件时,抛出此异常。例如,一个整数“除以零”时,抛出此类的一个实例。

24、hashcode是什么?有什么作用?

Java中Object有一个方法:

(1)hashcode()方法的作用

当集合需要添加新的对象时,先调用这个对象的hashcode()方法,得到对应的hashcode值.

(2)equals和hashcode的关系

如果equals为true,hashcode一定相等;

如果equals为false,hashcode不一定不相等;

如果hashcode值相等,equals不一定相等;

如果hashcode值不等,equals一定不等;

(3)重写equals方法时,一定要重写hashcode方法

25、java 中操作字符串都有哪些类?它们之间有什么区别?

(1)String

String是不可变对象,每次对String类型的改变时都会生成一个新的对象。

(2)StringBuilder

线程不安全,效率高,多用于单线程。

(3)StringBuffer

线程安全,由于加锁的原因,效率不如StringBuilder,多用于多线程。

StringBuilder > StringBuffer > String。

26、java 中都有哪些引用类型?

(1)强引用

(2)软引用

(3)弱引用  进行垃圾回收时,弱引用就会被回收。

(4)虚引用

(5)引用队列

31、在 Java 中,什么时候用重载,什么时候用重写?

重写的使用是建立在继承关系上的,子类在继承父类的基础上,增加新的功能,可以用重写。

35、Java 容器都有哪些?

(1)Collection

① set  HashSet、TreeSet

② list   ArrayList、LinkedList、Vector

(2)Map  HashMap、HashTable、TreeMap

36、Collection 和 Collections 有什么区别?

(1)Collection是最基本的集合接口,

Collection派生了两个子接口list和set,分别定义了两种不同的存储方式。

(2)Collections是一个包装类,它包含各种有关集合操作的静态方法此类不能实例化

37、list与Set区别

(1)List简介

ArrayList:

LinkedList

(2)Set简介

Set具有与Collection完全一样的接口,

Set : 存入Set的每个元素都必须是唯一的,因为Set不保存重复元素。

HashSet:为快速查找设计的Set。存入HashSet的对象必须定义hashCode()。

TreeSet: 保存次序的Set, 底层为树结构。使用它可以从Set中提取有序的序列。

(3)list与Set区别

① List,Set都是继承自Collection接口

② List特点:元素有放入顺序,元素可重复 ,

③ Set和List对比:

Set:检索元素效率低下,删除和插入效率高,插入和删除不会引起元素位置改变。

List:和数组类似,List可以动态增长,查找元素效率高,插入删除元素效率低,因为会引起其他元素位置改变。

38、HashMap 和 Hashtable 有什么区别?

HashMap是线程不安全的,HashTable是线程安全的;

HashMap中允许键和值为null,HashTable不允许;

39、说一下 HashMap 的实现原理?

HashMap基于map接口,元素以键值对方式存储,允许有null值,HashMap是线程不安全的。

HashMap采取存储key-value,重要的属性有hash、key、value、next。

40、set有哪些实现类?

HashSet是set接口的实现类,set下面最主要的实现类就是HashSet(也就是用的最多的),TreeSet。

HashSet是无序的、不可重复的。通过对象的hashCode和equals方法保证对象的唯一性。

HashSet内部的存储结构是哈希表,是线程不安全的。

42、ArrayList 和 LinkedList 的区别是什么?

ArrayList是动态数组的数据结构实现,查找和遍历的效率较高;

LinkedList 是双向链表的数据结构,增加和删除的效率较高;

45、哪些集合类是线程安全的

Vector:就比Arraylist多了个同步化机制(线程安全)。

Stack:栈,也是线程安全的,继承于Vector。

Hashtable:就比Hashmap多了个线程安全。

ConcurrentHashMap:是一种高效但是线程安全的集合。

46、迭代器 Iterator 是什么?

为了方便的处理集合中的元素,Java中出现了一个对象,该对象提供了一些方法专门处理集合中的元素.例如删除和获取集合中的元素.该对象就叫做迭代器(Iterator)。

47、Iterator 怎么使用?有什么特点?

next() 方法获得集合中的下一个元素

hasNext() 检查集合中是否还有元素

remove() 方法将迭代器新返回的元素删除

50、队列和栈是什么?有什么区别?

(1)队列先进先出,栈先进后出。

(2)遍历数据速度不同。

54、HasmMap和HashSet的区别

(1)先了解一下HashCode

Java中的集合有两类,一类是List,一类是Set。

List:元素有序,可以重复;

Set:元素无序,不可重复;

56、线程的run()和start()有什么区别?

每个线程都是通过某个特定Thread对象所对应的方法run()来完成其操作的,run()方法称为线程体。\

通过调用Thread类的start()方法来启动一个线程。

start() 方法用于启动线程,方法方可启动线程并使线程进入就绪状态,run() 方法用于执行线程的运行时代码。

run() 可以重复调用,而 start() 只能调用一次。

88、jsp 和 servlet 有什么区别?

(1)servlet是服务器端的Java程序,它担当客户端和服务端的中间层。

(2)jsp  Java服务器页面,JSP是一种动态页面设计。

(3)JVM只能识别Java代码,不能识别JSP,JSP编译后变成了servlet,

web容器将JSP的代码编译成JVM能够识别的Java类(servlet)。

(4)JSP有内置对象、servlet没有内置对象。

89、jsp 有哪些内置对象?作用分别是什么?

JSP九大内置对象:

pageContext,页面上下文对象,相当于页面中所有功能的集合,

通过它可以获取JSP页面的out、request、response、session、application对象。

request

response

session

application,应用程序对象,application实现了用户间数据的共享,可存放全局变量,它开始于服务器启动,知道服务器关闭。

page,就是JSP本身。

exception

out,out用于在web浏览器内输出信息,并且管理应用服务器上的输出缓冲区,作用域page。

config,取得服务器的配置信息。

90、forward 和 redirect 的区别?

forward是直接请求转发;redirect是间接请求转发,又叫重定向。

forward,客户端和浏览器执行一次请求;redirect,客户端和浏览器执行两次请求。

forward,经典的MVC模式就是forward;redirect,用于避免用户的非正常访问。(例如用户非正常访问,servlet就可以将HTTP请求重定向到登录页面)。

forward,地址不变;redirect,地址改变。

forward常用方法:RequestDispatcher类的forward()方法;redirect常用方法:HttpServletRequest类的sendRedirect()方法。

91、说一下 jsp 的 4 种作用域?

application、session、request、page

92、session 和 cookie 有什么区别?

(1)存储位置不同

cookie在客户端浏览器;

session在服务器;

(2)存储容量不同

(3)存储方式不同

(4)隐私策略不同

cookie对客户端是可见的,不安全;

session存储在服务器上,安全;

96、说一下 session 的工作原理?

当客户端登录完成后,会在服务端产生一个session,此时服务端会将sessionid返回给客户端浏览器。

客户端将sessionid储存在浏览器的cookie中,当用户再次登录时,会获得对应的sessionid,然后将sessionid发送到服务端请求登录,服务端在内存中找到对应的sessionid,完成登录,如果找不到,返回登录页面。

97、http 响应码 301 和 302 代表的是什么?有什么区别?

301和302状态码都表示重定向,当浏览器拿到服务器返回的这个状态码后悔自动跳转到一个新的URL地址。

98、简述 tcp 和 udp的区别?

TCP是传输控制协议,

UDP是用户数据表协议;

TCP长连接,UDP无连接;

TCP速度慢,UDP速度快;

99、tcp 为什么要三次握手,两次不行吗?为什么?

因为客户端和服务端都要确认连接,

①客户端请求连接服务端;

②针对客户端的请求确认应答,并请求建立连接;

③针对服务端的请求确认应答,建立连接;

两次无法确保A能收到B的数据;

101、get 和 post 请求有哪些区别?

get请求参数是连接在url后面的,

而post请求参数是存放在requestbody内的;

get请求因为浏览器对url长度有限制,所以参数个数有限制,

而post请求参数个数没有限制;

因为get请求参数暴露在url上,所以安全方面post比get更加安全;

get请求只能进行url编码,而post请求可以支持多种编码方式;

get请求参数会保存在浏览器历史记录内,post请求并不会;

107、请列举出在 JDK 中几个常用的设计模式?

1、单例模式

2、静态工厂模式

3、抽象工厂

4、原型模式

5、适配器模式

9、代理模式

10、迭代器模式

108、什么是设计模式?你是否在你的代码里面使用过任何设计模式?

1、什么是设计模式?

设计模式是解决软件开发某些特定问题而提出的一些解决方案,

也可以理解为解决问题的一些固定思路。

通过设计模式可以帮助我们增强代码的可复用性、可扩展性、灵活性。

我们使用设计模式的最终目的是实现代码的高内聚、低耦合。

3、你是否在你的代码里面使用过任何设计模式?

(1)单例模式

JDK种的runtime,Spring种的singeton。

(2)简单工厂模式

Spring的BeanFactory,根据传入一个唯一标识来获得bean对象。

(3)原型模式clone()

109、Java 中什么叫单例设计模式?请用 Java 写出线程安全的单例模式

保证程序只有一个对象的实例,叫做单例模式;

内部类的方式实现单例模式,是线程安全的;

112、请解释自动装配模式的区别?

有五种自动装配的方式,可以用来指导 Spring 容器用自动装配方式来进行依赖注入。

1、no

2、byName

3、byType:

4、constructor

114、什么是 Spring 框架?Spring 框架有哪些主要模块?

Spring是一个控制反转和面向切面的容器框架。

Spring有七大功能模块:

1、Core  Core模块是Spring的核心类库,Core实现了IOC功能。

2、AOP  Apring AOP模块是Spring的AOP库,提供了AOP(拦截器)机制,并提供常见的拦截器,供用户自定义和配置。

3、orm  提供对常用ORM框架的管理和支持,hibernate、mybatis等。

4、Dao   Spring提供对JDBC的支持,对JDBC进行封装。

5、Web

6、Context   Context模块提供框架式的Bean的访问方式,相当于资源注入。

7、MVC    MVC模块为spring提供了一套轻量级的MVC实现,即Spring MVC。

115、使用 Spring 框架能带来哪些好处?

1、轻量级框架、容器

Spring是一个容器,管理对象的生命周期和配置。

基于一个可配置原型prototype,你的bean可以使单利的,也可以每次需要时都生成一个新的实例。

2、控制反转IOC

Spring通过控制反转实现松耦合。

3、支持AOP

Spring提供对AOP的支持,它允许将一些通用任务,如安全、事务、日志等进行集中式处理,从而提高了程序的复用性。

4、轻量级框架

5、方便测试

Spring提供Junit4的支持,可以通过注解方便测试spring程序。

6、对Java中很多API进行了封装

7、方便集成各种优秀框架

如Struts、hibernate、mybstis。

8、支持声明式事务处理

只需通过配置就可以完成对事务的管理,而无须手动编程。

116、Spring IOC、AOP举例说明

117、什么是控制反转(IOC)?什么是依赖注入?

借助Spring实现具有依赖关系的对象之间的解耦。

对象A运行需要对象B,由主动创建变为IOC容器注入,这便是控制反转。

获得依赖对象的过程被反转了,获取依赖对象的过程由自身创建变为由IOC容器注入,这便是依赖注入。

119、什么是 JavaConfig?

JavaConfig是以注解的形式取代Spring中繁琐的xml文件。

JavaConfig结合了xml的解耦和java编译时检查的优点。

120、什么是 ORM 框架?

ORM(Object-relational mapping),对象关系映射。

是为了解决面向对象与关系型数据库存在的不匹配问题。

ORM框架的优点:

开发效率更高

数据访问更抽象、轻便

支持面向对象封装

121、Spring 有几种配置方式?

1、xml配置文件

2、基于注解的方式   项目越来越大,基于xml配置太麻烦,提供了声明bean的注解。

(1)Bean的定义

@Component、@Controller、@Service、@Repository。

(2)Bean的注入

@Autowire

3、基于Java的方式

Spring 3.x以后,可以通过Java代码装配Bean。

122、请解释 Spring Bean 的生命周期?

通过构造器或工厂方法创建bean实例;

为bean的属性赋值;

调用bean的初始化方法;

使用bean;

当容器关闭时,调用bean的销毁方法;

123、Spring Bean 的作用域之间有什么区别?

Spring容器中的bean可以分为5个范围:

singleton:这种bean范围是默认的,这种范围确保不管接受多少请求,每个容器中只哟一个bean的实例,单例模式;

prototype:为每一个bean提供一个实例;

request:在请求bean范围内为每一个来自客户端的网络请求创建一个实例,在请求完毕后,bean会失效并被垃圾回收器回收;

session:为每个session创建一个实例,session过期后,bean会随之消失;

global-session:

127、请解释 Spring Bean 的自动装配?

Spring支持IOC,自动装配不用类实例化,直接从bean容器中取。

1、配置在xml中

2、@Autowired自动装配

150、什么是 Spring Boot?Spring Boot 有哪些优点?

1、Spring Boot简介

不仅继承了Spring框架原有的优秀特性,而且还通过简化配置来进一步简化spring应用的整个搭建和开发过程。

2、Spring Boot 有哪些优点?

快速构建项目,可以选一些必要的组件;

对主流框架的无配置集成;

内嵌Tomcat容器,项目可独立运行;

删除了繁琐的xml配置文件;

极大地提高了开发和部署效率;

提供starter,简化maven配置;

3、SpringBoot有哪些缺点?

版本迭代速度快,一些模块改动很大;

由于无须配置,报错时很难定位;

151、Spring Boot 中的监视器是什么?

监听器也叫listener,是servlet的监听器,可以用于监听web应用程序中某些对象的创建、销毁、增加、修改、删除等动作的发生,然后做出相应的响应处理。

153、如何使用 Spring Boot 实现分页和排序?

使用Spring Data Jpa可以实现将可分页的传递给存储库方法。

175、mysql 的内连接、左连接、右连接有什么区别?

内连接,显示两个表中有联系的所有数据;

左链接,以左表为参照,显示所有数据,右表中没有则以null显示

右链接,以右表为参照显示数据,,左表中没有则以null显示

====================================================================================================================================================================================================================================================================================================================================

====================================================================================================================================================================================================================================================================================================================================

====================================================================================================================================================================================================================================================================================================================================

====================================================================================================================================================================================================================================================================================================================================

====================================================================================================================================================================================================================================================================================================================================

====================================================================================================================================================================================================================================================================================================================================

====================================================================================================================================================================================================================================================================================================================================

二、String这个类的理解?

三、什么是值传递,和引用传递?

五、 创建线程的几种方式?

六、 线程的生命周期

七、 什么是线程安全问题, 怎么解决?

八、 sleep和wait的区别?

九、什么情况下你会考虑使用接口,什么情况下你会考虑使用抽象类?

十、servlet是否线程安全?为什么?

十一、 ajax运行原理?

十二、 JDBC运行流程?

十三、 谈谈你对异常的理解?

常见的异常有:

十四、JSP九大内置对象

十五、谈谈你对反射的理解?

十六、 JDK,JRE,JVM区别?

十七、 truncate,delete,drop区别?

十八、 SQL中包含哪些语句?

二十、 主键,唯一键,外键的区别?

二十三、 表连接有哪些?

二十四、 怎么获取数据的并集, 交集 , 差集?

二十六、 堆栈的区别?

二十七、 TCP和UDP区别

二十八、 Comparable和Comparator

二十九、hibernate和mybatis的区别?

三十、 什么是事务?

十一、 hibernate对象的三态/ hibernate对象有哪些状态?

三十二、什么是一级缓存和二级缓存?

三十三、hibernate运行流程/原理?

三十五、 什么是ORM

三十六、悲观锁和乐观锁

三十七、什么是脏读、幻读、不可重复读?

三十八、SpringMvc运行原理?

三十九、什么是IOC和DI?

四十、spring事务隔离级别有哪些?

四十一、 谈谈你用过的常用注解有哪些?

四十二、 spring事务的传播特性?

四十三、volatile关键字的作用?

四十五、什么是序列化和反序列化? 哪些属性无法被序列化?

四十七、谈谈对AOP的理解?

四十八,数据库函数和存储过程的区别?

四十九,什么是同步,异步?堵塞。非堵塞?什么是BIO,NIO,AIO?

五十一、转发和重定向的区别

五十二、页面传递数据方式有哪些?

五十五过滤器和拦截器

六十一:描述一下JVM加载class文件的原理机制?

六十二:GC是什么? 为什么要有GC?

六十三:http,https,tcp/ip的区别?

七十二:springcloud的理解?

七十三、spring的事务

七十四、jsp执行原理

七十五 redis是什么,什么场景使用?

八十 spring cloud 的核心组件有哪些?

八十一spring cloud 断路器的作用是什么?

二、String这个类的理解?

String 是final修饰的类,代表不可被继承

String还是jdk中一个特殊的类,代表不可变.

三、什么是值传递,和引用传递?

原生类(8基本类型) 属于值传递,

值传递代表复制一份新的数据给到对方, 对方修改,不影响自己.

引用类型 属于引用传递, 传递的时候是把地址传递过去,

如果对方修改了该地址内的内容, 会影响到所有指向该地址的变量.

五、 创建线程的几种方式?

extends继承Thread类,重写run方法

interface 实现Runnable接口,重写run方法

实现Callable接口,重写call方法

六、 线程的生命周期

线程实例化/初始化

线程start.进入 就绪/可运行 状态

cpu选中该线程并执行 进入 运行 状态

进入同步方法,或wait,或sleep 进入 阻塞/等待 状态

线程执行完毕, 结束/死亡 状态

七、 什么是线程安全问题, 怎么解决?

线程安全指多个线程同时访问和修改同一资源发生数据不安全的情况。

为每个线程单独创建一个新的资源对象。

使用局部变量传参,因为局部变量不存在线程安全的问题。

使用synchronize关键字锁住共享资源(性能较差)

使用ReentrantLock重入锁对象.比synchronize灵活度高(性能较差)

使用ReentrantReadWriteLock对象,灵活度高,性能较好,读的时候可以一起读

八、 sleep和wait的区别?

sleep是一个Thread类的静态本地方法,调用后进入阻塞状态

sleep不会去释放对象锁

sleep需要设置一个睡眠等待时间, 时间到了进入就绪状态

wait是Object类的方法,调用后进入等待状态

wait方法必须由锁池对象来调用,否则会抛出监视器异常

wait会释放对象锁

wait需要被notify唤醒或者设置时间自动唤醒,唤醒后进入抢占锁/锁池状态

然后进入可运行状态.

九、什么情况下你会考虑使用接口,什么情况下你会考虑使用抽象类?

如果考虑扩展性更强的时候,使用接口,因为可以多实现

如果要使用到父类的构造器,那么使用抽象类,因为接口没有构造器

如果要子类要继承一些公用字段和属性的时候,考虑使用抽象类,因为接口中不可以有

实例属性和静态属性,接口中的属性都是静态常量。

如果要继承一些已经写好的普通方法,那么可以使用抽象类, 因为接口中的方法都是

抽象方法

补充: 一般情况下,符合 is a关系使用extends, like a使用implement.

十、servlet是否线程安全?为什么?

servlet本身不存在线程安全的问题,但是程序员要注意避免造成线程的不安全.

比如在servlet中新加了实例变量,就会造成不安全.

因为doGet,doPost都为局部变量,局部变量不存在线程安全的问题,每次进入方法

都会单独的开辟新的方法内存空间存储当前的局部变量数据.

十一、 ajax运行原理?

根据不同的浏览器创建ajax对象

执行open,设置url,请求方式,参数,是否异步等等…

设置callback(口白可)回调

执行send发送

执行回调函数,根据请求状态(4代表已完成)和服务器响应状态(200),处理结果

十二、 JDBC运行流程?

加载数据库驱动

建立数据库连接创建指令

执行sql语句

解析ResultSet结果

释放数据库资源

十三、 谈谈你对异常的理解?

java中异常的基类为Throwable该类下面有两个子类Exception(e普赛可限),Error

Exception代表的是程序运行中可能出现的异常, 一般可以通过代码避免和解决

Error代表错误,比如编译错误,内存溢出,硬件等,这类错误一般代码自身无法修复,

需要联系管理员具体问题具体分析

Exception下面又分为RuntimeException(运行时异常)和非运行时异常,

也称检查性异常CheckedException.

运行时异常程序不要求处理,检查性异常程序要求必须处理

(try-catch或throws在方法上声明抛出)

throws :声明异常

throw:抛出一个具体的异常

try-catch:捕获异常

常见的异常有:

NullPointException(空指针异常)

IndexOutOfBoundsException(索引越界异常)

SQLException(数据库异常)

IOException(IO异常,一般指输入输出流或文件错误的时候抛出)

ClassCastException(类型转换异常)

IllegalArgumentException(参数不匹配异常)

SerializationException(序列化异常)

FileNotFoundException(文件找不到异常)

ClassNotFoundException(类找不到异常)

十四、JSP九大内置对象

application

应用服务器级别对象,获取Servlet的一些信息,也可以setAttribute存储对象

,存储的数据所有用户都能访问,所以是共享的,使用的时候要注意.

session

会话级别, 存储的数据在一次会话中有效, 多个用户之间是隔离的.

但考虑到是会话期间数据一直保存在服务器,所有使用的时候要注意性能问题.

request

请求级别,一次请求中的数据有效,一般传值用的较多.

page 当前页面对象,等价于servlet中的this

pageContext 页面上下文,存储的数据在当前页面有效

exception jsp页面异常信息

config 获取servlet配置信息

response 服务器响应,和重定向

out 输出对象

十五、谈谈你对反射的理解?

java的反射机制代表的是:

给任意一个类,可以知道它的所有属性和方法,当然还有其他(构造器,注解)

给任意一个对象,可以执行它的属性和方法,获取到属性值和执行方法的结果

比如spring ioc aop,hibernate和mybatis的orm.

十六、 JDK,JRE,JVM区别?

jdk java开发工具 有一些常用的类库,供开发者使用,其中包含了jre.

jre java运行环境 运行java程序所需的环境,其中包含了jvm

jvm java虚拟机 编译和运行java程序,跨平台, 管理java内存.

十七、 truncate,delete,drop区别?

drop和truncate属于DDL语句, delete属性DML语句.

drop会删除定义和数据.

truncate代表截断,会删除数据和日志,删除速度快,不能带条件,无法还原.

delete可带条件删除数据,会记录日志可还原,删除速度慢.

十八、 SQL中包含哪些语句?

DML 数据操纵语言 update insert delete

DQL 数据查询语言 select

DDL 数据定义语言 create,alter,drop

DCL 数据控制语言 grant(授权), revoke瑞我克(收回权

二十、 主键,唯一键,外键的区别?

主键一个表只能有一个,不能为null,不能重复

唯一键,一个表可以有多个,可以为null,不能重复

外键, 必须是其他表的主键或唯一键, 可以有多个,也可以为null.

开发中一般使用逻辑外键, 不会去创建物理外键,因为分布式项目或数据库的迁移都不方便

二十三、 表连接有哪些?

外连接,包含了

left [outer] join左外连接, 以左边为主表,左表的内容全部显示,右边表符合条件的显示,不符合的显示为null

right [outer] join右外连接,以右边为主表,右表的内容全部显示,左边表符合条件的显示,不符合的显示为null

full [outer] join全外连接, 两个表的数据都会显示,匹配的直接显示在同一行, 不匹配的连接表各自行显示为null

内连接inner join, 两个表匹配的显示, 不匹配的都不显示

交叉连接cross join, 笛卡尔积, 即第一张表的每一条数据会和第二张表的每一条数据匹配一次,

如: A表有3条, B表有4条. 那么结果为: 12条.

二十四、 怎么获取数据的并集, 交集 , 差集?

并集可以使用union和union all. 区别是: union会去除重复记录,且会默认排序.

union all直接合并.

交集使用intersect

差集使用minus

二十六、 堆栈的区别?

栈的性能较高, 但是大小固定.

堆的性能没有栈高, 但是大小可扩展.

new出来的对象都是存储在堆中.

基本数据类型存储在栈中.

方法调用存储在栈中.

二十七、 TCP和UDP区别

TCP 性能较差, 但是安全稳定, 需要三次握手,每次数据交互需要确认。

UDP 性能较高,发送数据无需对方确认, 所以可能会丢包。

二十八、 Comparable和Comparator

Comparable属于内部比较, 需要在比较的类上去实现该接口,

Comparator属于外部比较, 对需要比较的类无侵入(不需要实现接口),

二十九、hibernate和mybatis的区别?

hibernate是面向对象方式来操作数据库,支持跨数据库;

mybatis由于自己写sql,所以不支持跨数据库.

hibernate是全自动ORM框架,而mybatis是半自动ORM框架

hibernate入门容易,掌握和精通难, mybatis就相对hibernate容易掌握。

mybatis由于是手写sql,所以可以完成sql优化. hibernate一般不写SQL,sql优化

做不了或者没有mybatis方便.

三十、 什么是事务?

事务是数据库保证一系列指令执行得到安全保障的一种机制,让我们的指令要么都

成功执行,要么都回滚,它有ACID四个特性.

原子性: 所有操作为一个最小化原子操作,要么都成功,要么都失败.

一致性: 所有操作在执行的前后数据的状态始终是一致的.

隔离性: 事务与事务之间相互隔离, 互不影响

持久性: 事务执行结束, 对数据的提交或回滚是持久的.

十一、 hibernate对象的三态/ hibernate对象有哪些状态?

瞬时态 刚实例化的对象,session中没有该对象的缓存,DB中也没有该记录.

持久态 session中有该对象的缓存,DB中也有该记录.

调用get,save,update等方法会进入持久态.

持久态的对象做任何修改,最终会持久到DB.

游离态/托管态 session中没有该对象,DB中有.调用session.close,clear,evict

会使对象进入托管态.托管态对对象操作,不会影响DB.

三十二、什么是一级缓存和二级缓存?

一级缓存默认已经打开, 在同一个session中有效,当session缓存中有对象

那么查询不会去访问数据库,而是直接使用本地数据。

二级缓存属于sessionFactory/(mybatis:mapper)级别的缓存, 多个session可以共享.默认关闭,需要手动打开

二级缓存一般使用在不怎么修改,但是经常可能查询数据上.比如:地区表,字典表

三十三、hibernate运行流程/原理?

读取hibernate.cfg.xml核心配置

创建sessionFactory对象

创建session

创建Transaction

提交/回滚事务

关闭资源

三十五、 什么是ORM

1). Object Relational Mapping 对象关系映射

2). 类名对应表名

3). 字段名对应数据库列名

4). 对象对应一行数据

5). 类的属性类型对应数据库的字段类型

三十六、悲观锁和乐观锁

悲观锁是使用数据库的锁进制, 被锁住的数据, 其他线程无法修改,

悲观锁性能很差,一般不建议使用.

悲观锁有三种:

for update(尝试获取数据锁,获取不到一直等待),

for update nowait(尝试获取数据锁,获取不到抛出异常)

for update skip locked(尝试获取数据锁,获取不到跳过)

乐观锁是代码实现的一种算法, 不依赖数据库锁机制

三十七、什么是脏读、幻读、不可重复读?

脏读: 读取到一个未提交的事务的数据, 该数据随时有可能被回滚,所以数据无效.

不可重复读: 事务A 多次读取一个数据,前后读取返回的不一致

(因为中间有事务BCDEFG)修改并提交了该数据.

幻读: 当事务A删除或修改所有数据,最后查询发现还有一/N条数据没有删除或修改

(其实是中间有其他事务BCDEFG插入了新的数据),

三十八、SpringMvc运行原理?

客户端发送请求, 被web.xml中DispatcherServlet接住.

(如果没有配置load-on-start,这里还要去实例化DispatcherServlet并加载配置文件)

DispatcherServlet会调用HandlerMapping(处理器映射)对象寻找与之匹配的

Controller返回给到DispatcherServlet.

DispatcherServlet调用HandlerAdapter(处理器适配器)去执行该Controller.

controller方法执行完成返回一个ModelAndView对象给到DispatcherServlet

DispatcherServlet调用ViewResolver(视图解析器)解析ModelAndView.

解析完成的结果响应给到客户端.

三十九、什么是IOC和DI?

IOC 代表控制反转, 或者IOC容器. 用于spring管理程序中所有对象的生命周期.

DI 代表依赖注入. 从IOC容器中获取要注入的对象,注入到接口或对象中.

注入方式有五种:(AutoWrite注解注入,set方法注入,构造器注入,静态工厂注入,实例工厂注入)

这种思想提升了代码的可维护性, 使得我们代码的结构上下层之间完全解耦,

可以动态的装配对象.

四十、spring事务隔离级别有哪些?

有五种.

不参与设置级别, 使用数据库默认的隔离级别

读未提交 脏读, 幻读, 不可重复读 (Oracle不支持)

读已提交 幻读, 不可重复读

不可重复读 幻读 (Oracle不支持)

序列化/串行化 绝对安全

四十一、 谈谈你用过的常用注解有哪些?

四十二、 spring事务的传播特性?

四十三、volatile关键字的作用?

不能够保证线程安全.只是让线程之间共享变量的时候,确保拿到的是最新的值.

禁止变量重排序

四十五、什么是序列化和反序列化? 哪些属性无法被序列化?

序列化是指把程序内存中的对象, 保存到外部存储介质上存储(比如硬盘上).

反序列化是指把外部存储介质上的内容, 加载到程序内存中.

transient(瞬时的),static(静态的)属性无法被序列化.

序列化需要实现Serializable接口.否则会抛出NotSerializableException.

四十七、谈谈对AOP的理解?

AOP 为面向切面编程

使用AOP让我们业务代码只需关注本身功能, 对公共组件功能可以单独

封装到aop中. 比如(异常,验证,事务,日志,监控等等)都为通用功能,是不需要每个

模块的业务去重复编写的.

使用AOP可以提供代码的复用性,降低耦合性.

spring aop有五种通知: 分别为: 前置,后置,异常,最终,环绕.

四十九,什么是同步,异步?堵塞。非堵塞?什么是BIO,NIO,AIO?

1,同步:客户端发送请求到服务器,假设服务器处理请求需要n秒时间。那么客服端会一直等待(无法做其他任务)。

2,异步:客户端发送请求到服务器假设服务器处理请求需要秒时间,那么客户端不会等待。可以先做其他任务,服务器响应后。会执行回调处理结果。

3,堵塞:服务器只能处理一个客户端请求,处理完后接收第二个请求。

4,非堵塞:服务器可以同时接受多个请求,

IO分为BIO,NIO,AIO

BIO:同步堵塞,客户端和服务器一对一交互,效率比较低。

NIO:同步非堵塞,客户端和服务器多对一交互,服务器效率提升。

AIO:异步非堵塞,客户端和服务器多对多交互。性能卓越

五十一、转发和重定向的区别?

1.转发属于服务器内部跳转,只能跳转内部页面,属于一次请求

重定向是向客户响应一个指令,客户端二次重新跳转,可以跳转到外部页面

2.转发可以通过request传递数据,重定向不能

3.转发性能比重定向好

4.转发地址栏不会改变,重定向因为属于二次请求,所有地址栏会变

五十二、页面传递数据方式有哪些?

1、如果是前后端分离项目

1.1可以通过url传递数据

1.2可以通过cookie传递

1.3可以通过第三方中间性,如redis。后端放置数据到redis中,前端通过异步请求后台获取

2、如果是模板引擎,非前后端分离的项目:

1.1可以通过form表单隐藏域

1.2可以通过request,但只限于转发

1.3可以通过session

1.4可以通过application,不建议使用,application是应用级别,所有用户共享

五十五过滤器和拦截器

拦截器和过滤器的功能比较类似,有区别

过滤器是Servlet规范的一部分,任何框架都可以使用过滤器技术。

拦截器是SpringMVC框架独有的。

过滤器配置了/*,可以拦截任何资源。

拦截器只会对控制器中的方法进行拦截。

拦截器也是AOP思想的一种实现方式

想要自定义拦截器,需要实现HandlerInterceptor接口。

controller方法执行前,进行拦截的方法

return true放行

return false拦截

可以使用转发或者重定向直接跳转到指定的页面

preHandle方法是controller方法执行前拦截的方法

可以使用request或者response跳转到指定的页面

postHandle是controller方法执行后执行的方法,在JSP视图执行前。

可以使用request或者response跳转到指定的页面

postHandle方法是在JSP执行后执行

六十一:描述一下JVM加载class文件的原理机制?

加载

把类的.class文件中的数据读入内存中,通常是创建一个字节数组读入.class文件,然后产生与所加载类对应的class对象。此时的对象还不稳重,类还不可以使用。

连接

当类被加载后就进入连接阶段,这一阶段包括验证、准备(为静态变量分配内存并设置默认的初始值)和解析(将符号引用替换为直接引用)三个步骤

初始化

1)如果类存在直接的父类并且这个类还没有被初始化,那么就先初始化父类;

2)如果类中存在初始化语句,就依次执行这些初始化语句

六十二:GC是什么? 为什么要有GC?

GC是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,

Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的显示操作方法。

GC是垃圾收集器。Java 程序员不用担心内存管理,因为垃圾收集器会自动进行管理。要请求垃圾收集,可以调用下面的方法之一:

System.gc()

Runtime.getRuntime().gc()

六十三:http,https,tcp/ip的区别?

https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用

http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议

http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443

http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全

七十二:springcloud的理解?

spring cloud 是一系列框架的有序集合。它利用 spring boot 的开发

便利性巧妙地简化了分布式系统基础设施的开发,

如服务发现注册、配置中心、消息总线、负载均衡、断路器、

数据监控等,都可以用 spring boot 的开发风格做到一键启动和部署。

七十三、spring的事务

1.声明式事务

1.1@基于@Tranctional注解

2.2基于TranctionProxyFactoryBean

1.3基于@Aspactj切面 AOP

2编程式事务

七十四、jsp执行原理

1.jsp本质也是一个servlet,首先会翻译成servlet文件

2.servlet文件编译为.class文件

3.服务器虚拟机执行.class文件

4.request返回静态内容给前端页面

七十五 redis是什么,什么场景使用?

1.redis是一个nosql基于内存的高性能缓存数据库

经常查询的数据,可以缓存到redis,程序不用每次访问数据库查询,

提升服务器性能和用户体验

对于会修改的数据要及时更新redis缓存,或者设置有效时间

八十 spring cloud 的核心组件有哪些?

Eureka:服务注册于发现。

Feign:基于动态代理机制,根据注解和选择的机器,拼接请求 url 地址,发起请求。

Ribbon:实现负载均衡,从一个服务的多台机器中选择一台。

Hystrix:提供线程池,不同的服务走不同的线程池,实现了不同服务调用的隔离,避免了服务雪崩的问题。

Zuul:网关管理,由 Zuul 网关转发请求给对应的服务。

八十一spring cloud 断路器的作用是什么?

在分布式架构中,断路器模式的作用也是类似的,当某个服务单元

发生故障(类似用电器发生短路)之后,通过断路器的故障监控

(类似熔断保险丝),向调用方返回一个错误响应,而不是长时间

的等待。这样就不会使得线程因调用故障服务被长时间占用不释放

,避免了故障在分布式系统中的蔓

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值