★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
004:面试常问到的问题
①反射机制的相关知识
②jvm的内存
③说说你知道多线程那些知识
④重写和重载的区别
⑤你知道微服务是什么吗?
⑥springboot的常用注解自己作用
⑦你写mysql时候遇到什么问题?怎么解决的?如何优化sql语句。
⑧你对集合的理解,set和list区别等等。
⑨线程和进程区别
⑩数据库三范式,自己sql的优化
★★★★★★★★★★★★★★★★★★★★★★★★★★★
004:面试常问到的问题
①反射机制的相关知识
②jvm的内存
③说说你知道多线程那些知识
④重写和重载的区别
⑤你知道微服务是什么吗?
⑥springboot的常用注解自己作用
⑦你写mysql时候遇到什么问题?怎么解决的?如何优化sql语句。
⑧你对集合的理解,set和list区别等等。
⑨线程和进程区别
⑩数据库三范式,自己sql的优化
JVM篇
第一 ②jvm的内存---关于JVM的知识点很重要
194.说一下 jvm 的主要组成部分?及其作用
195.说一下 jvm 运行时数据区?
196.说一下堆栈的区别?
197.队列和栈是什么?有什么区别?
198.什么是双亲委派模型?
199.说一下类装载的执行过程?
200.怎么判断对象是否可以被回收?
201.java 中都有哪些引用类型?
1
1、JVM内存模型:2、栈:3、本地方法栈4、程序计数器5、堆6、方法区:7、JVM 内存可见性
1、JVM内存模型: 线程独占:栈,本地方法栈,程序计数器 线程共享:堆,方法区
2、栈: 方法栈,线程私有的,用来存储局部变量表,操作栈,动态链接,方法出口等信息.
3、本地方法栈 执行Native方法时使用本地方法栈.
4、程序计数器 保存着当前线程执行的字节码位置,每个线程工作时都有独立的计数器
5、堆 JVM内存管理最大的一块,对被线程共享,目的是存放对象的实例,
6、方法区: 用于存储常量,静态变量,
2
194.说一下 jvm 的主要组成部分?及其作用?
- 类加载器(ClassLoader)
- 运行时数据区(Runtime Data Area)
- 执行引擎(Execution Engine)
- 本地库接口(Native Interface)
组件的作用:
首先通过类加载器(ClassLoader)会把 java 代码转换成字节码,
运行时数据区(Runtime Data Area)再把字节码加载到内存中,
然后需要特定的命令解析器执行引擎(Execution Engine),将字节码翻译成底层系统指令,
再交由 CPU 去执行,而这个过程中需要调用其他语言的本地库接口(Native Interface)来实现整个程序的功能。
3
195.说一下 jvm 运行时数据区?
分为以下 5 个部分:程序计数器 Java 虚拟机栈 本地方法栈Java 堆 方法区
- 程序计数器:线程执行的字节码的指示器,选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能;
- Java 虚拟机栈:用于存储局部变量表、操作数栈、动态链接、方法出口等信息;
- 本地方法栈:执行Native方法时使用本地方法栈.;
- Java 堆:java 虚拟机中内存最大的一块,是被所有线程共享的,所有的对象实例都在这里分配内存;
- 方法区:用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译后的代码等数据。
4
196.说一下堆栈的区别?
- 功能方面:堆是用来存放对象的,栈是用来执行程序的。
- 共享性:堆是线程共享的,栈是线程私有的。
- 空间大小:堆大小远远大于栈。
5
197.队列和栈是什么?有什么区别?
队列和栈都是被用来预存储数据的。
队列允许先进先出检索元素。
栈,运行对元素进行后进先出进行检索。
6
198.什么是双亲委派模型?
类加载器分类: 启动类加载器 扩展类加载器 应用程序类加载器
双亲委派模型:如果一个类加载器收到了类加载的请求,它首先不会自己去加载这个类,而是把这个请求委派给父类加载器去完成,每一层的类加载器都是如此,这样所有的加载请求都会被传送到顶层的启动类加载器中,只有当父加载无法完成加载请求(它的搜索范围中没找到所需的类)时,子加载器才会尝试去加载类。
7
199.说一下类装载的执行过程?
类装载分为以下 5 个步骤:加载 检查 准备 解析 初始化
- 加载:根据查找路径找到相应的 class 文件然后导入;
- 检查:检查加载的 class 文件的正确性;
- 准备:给类中的静态变量分配内存空间;
- 解析:虚拟机将常量池中的符号引用替换成直接引用的过程。
- 初始化:对静态变量和静态代码块执行初始化工作。
8
200.怎么判断对象是否可以被回收?
一般有两种方法来判断:引用计数器 可达性分析:
- 引用计数器:为每个对象创建一个引用计数,有对象引用时计数器 +1,引用被释放时计数 -1,当计数器为 0 时就可以被回收。它有一个缺点不能解决循环引用的问题;
- 可达性分析:从 GC Roots 开始向下搜索,搜索所走过的路径称为引用链。当一个对象到 GC Roots 没有任何引用链相连时,则证明此对象是可以被回收的。
9
201.java 中都有哪些引用类型?
- 强引用:发生 gc 的时候不会被回收。
- 软引用:有用但不是必须的对象,在发生内存溢出之前会被回收。
- 弱引用:有用但不是必须的对象,在下一次GC时会被回收。
- 虚引用(幽灵引用/幻影引用)。
多线程篇
1什么是多线程,多线程的优劣?
2. 线程与进程什么是线程与进程
3.线程和进程的区别?
4并行和并发有什么区别?
5创建线程有哪几种方式?
6线程的run()和start()有什么区别?
7为什么我们调用 start() 方法时会执行 run() 方法,为什么我们不能直接调用 run() 方法?
8线程的 run()和 start()有什么区别
9 线程的生命周期
10sleep和wait的区别?
11sleep() 和 wait() 有什么区别?
12什么是线程安全问题, 怎么解决?
13如何停止一个正在运行的线程?
14如何让 Java 的线程彼此同步?
15Java 中的线程池是如何实现的
16创建线程池的几个核心构造参数
1
1.4 什么是多线程,多线程的优劣?
定义:多线程是指在一个程序中可以同时进行多个不同的线程来执行不同的任务。
优点:
可以提高CPU的利用率
缺点:
多线程所占用的内存多。
多线程需要相互协调和管理。
线程之间共享资源的访问会相互影响。
————————————————
2
36.线程和进程的区别?
一个程序下至少有一个进程,一个进程下至少有一个线程,一个进程下也可以有多个线程来增加程序的执行速度。
进程是指一段正在执行的程序。
线程是程序执行的最小单元,一个进程可以拥有多个线程,
————————————————
3
35.并行和并发有什么区别?
- 并行:多个处理器或多核处理器同时处理多个任务。
- 并发:多个任务在同一个 CPU 核上,按细分的时间片轮流(交替)执行,从逻辑上来看那些任务是同时执行。
并发 = 两个队列和一台咖啡机。
并行 = 两个队列和两台咖啡机
4
38.创建线程有哪几种方式?
创建线程有三种方式:
- 继承 Thread 重写 run 方法;
- 实现 Runnable 接口;
- 实现 Callable 接口
5
56、线程的run()和start()有什么区别?
每个线程都是通过某个特定Thread对象所对应的方法run()来完成其操作的,run()方法称为线程体。\
通过调用Thread类的start()方法来启动一个线程。
start() 方法用于启动线程,可启动线程并使线程进入就绪状态,run() 方法用于执行线程的运行时代码。
run() 可以重复调用,而 start() 只能调用一次。
43.线程的 run()和 start()有什么区别?
start()方法用于启动线程,run()方法用于执行线程的运行时代码。run() 可以重复调用,而 start()只能调用一次。
6
六、 线程的生命周期
线程实例化/初始化
线程start.进入 就绪/可运行 状态
cpu选中该线程并执行 进入 运行 状态
进入同步方法,或wait,或sleep 进入 阻塞/等待 状态
线程执行完毕, 结束/死亡 状态
7
八、 sleep和wait的区别?
sleep是一个Thread类的静态本地方法,调用后进入阻塞状态
sleep不会去释放对象锁
sleep需要设置一个睡眠等待时间, 时间到了进入就绪状态
wait是Object类的方法,调用后进入等待状态
wait方法必须由锁池对象来调用,否则会抛出监视器异常
wait会释放对象锁
wait需要被notify唤醒或者设置时间自动唤醒,唤醒后进入抢占锁/锁池状态
然后进入可运行状态.
41.sleep() 和 wait() 有什么区别?
- 类的不同:sleep() 来自 Thread,wait() 来自 Object。
- 释放锁:sleep() 不释放锁;wait() 释放锁。
- 用法不同:sleep() 时间到会自动恢复;wait() 可以使用 notify()/notifyAll()直接唤醒。
8
七、 什么是线程安全问题, 怎么解决?
线程安全指多个线程同时访问和修改同一资源发生数据不安全的情况。
为每个线程单独创建一个新的资源对象。
使用局部变量传参,因为局部变量不存在线程安全的问题。
使用synchronize关键字锁住共享资源(性能较差)
使用ReentrantLock重入锁对象.比synchronize灵活度高(性能较差)
使用ReentrantReadWriteLock对象,灵活度高,性能较好,读的时候可以一起读
9
4.12 如何停止一个正在运行的线程?
- 使用stop方法终止,但是这个方法已经过期,不被推荐使用。
- 使用interrupt方法终止线程
- run方法执行结束,正常退出
10
73、如何让 Java 的线程彼此同步?
synchronized
volatile
ReenreantLock
使用局部变量实现线程同步
11
75、Java 中的线程池是如何实现的
在第一次执行任务时创建足够多的线程,并处理任务,之后每个工作线程自动从任务队列中获取线程,直到任务队列中任务为0为止,此时线程处于等待状态,一旦有工作任务加入任务队列中,即刻唤醒工作线程进行处理,实现线程的可复用性。
线程池一般包括四个基本组成部分:
(1)线程池管理器
(2)工作线程
(3)任务队列
(4)任务接口
12
76、创建线程池的几个核心构造参数
线程池长期维持的最小线程数
线程数的上限
线程最大生命周期。
时间单位
任务队列。
线程工厂。
反射篇
1谈谈你对反射的理解?
2什么是反射?
3.java反射的作用于原理
4实现Java反射的类:
1
十五、谈谈你对反射的理解?
java的反射机制代表的是:
给任意一个类,可以知道它的所有属性和方法,当然还有其他(构造器,注解)
给任意一个对象,可以执行它的属性和方法,获取到属性值和执行方法的结果
比如spring ioc aop,hibernate和mybatis的orm.
17、什么是反射?
所谓反射,是java在运行时进行自我观察的能力,
通过class、constructor、field、method四个方法获取一个类的各个组成部分。
在Java运行时环境中,对任意一个类,可以知道类有哪些属性和方法。
这种动态获取类的信息以及动态调用对象的方法的功能来自于反射机制。
2
1.29.java反射的作用于原理
1、定义:
反射机制是在运行时,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意个对象,都能够调用它的任意一个方法。在java中,只要给定类的名字,就可以通过反射机制来获得类的所有信息。
这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反射机制。
3
4、实现Java反射的类:
1)Class:表示正在运行的Java应用程序中的类和接口 注意: 所有获取对象的信息都需要Class类来实现。
2)Field:提供有关类和接口的属性信息,以及对它的动态访问权限。
3)Constructor:提供关于类的单个构造方法的信息以及它的访问权限
4)Method:提供类或接口中某个方法的信息
集合篇
1、Java 容器都有哪些?
2、ArrayList 和 LinkedList 的区别是什么?
3、list与Set区别
4、HashMap 和 Hashtable 有什么区别?
5、说一下 HashMap 的实现原理?
6、哪些集合类是线程安全的
7、队列和栈是什么?有什么区别?
8.List 、set、 map直接按的区别是什么
9.HashMap 和 Hashtable 有什么区别?
1
35、Java 容器都有哪些?
java 容器分为 Collection 和 Map 两大类,其下又有很多子类
(1)Collection
① set HashSet、TreeSet
② list ArrayList、LinkedList、Vector
(2)Map HashMap、HashTable、TreeMap
42、ArrayList 和 LinkedList 的区别是什么?
ArrayList是动态数组的数据结构实现,查找和遍历的效率较高;
LinkedList 是双向链表的数据结构,增加和删除的效率较高;
java的集合有两类,一类是List,还有一类是Set。前者有序可重复,后者无序不重复。
37、list与Set区别
(1)List简介
ArrayList:
LinkedList :
(2)Set简介
Set存入Set的每个元素都必须是唯一的,不保存重复的元素
HashSet:查找就效率高。。
TreeSet: 底层为树结构。可以从Set中有顺序的取出元素。
(3)list与Set区别
① List,Set都是继承自Collection接口
② List特点:元素有放入顺序,元素可重复 ,
③ Set和List对比:
Set:无序不可重复,删除和插入效率高,插入和删除不会引起元素位置改变。
List:有序可以重复,查找和遍历效率高。插入删除元素效率低,因为会引起其他元素位置改变。
Map:key-value形式储存元素,一个map只能有一个key,每个key最多只能映射一个value
38、HashMap 和 Hashtable 有什么区别?
HashMap是线程不安全的,HashTable是线程安全的;
HashMap中允许键和值为null,HashTable不允许;
39、说一下 HashMap 的实现原理?
HashMap基于map接口,元素以键值对方式存储,允许有null值,HashMap是线程不安全的。
HashMap采取存储key-value,重要的属性有hash、key、value、next。
45、哪些集合类是线程安全的
Vector:就比Arraylist多了个同步化机制(线程安全)。
Stack:栈,也是线程安全的,继承于Vector。
Hashtable:就比Hashmap多了个线程安全。
ConcurrentHashMap:是一种高效但是线程安全的集合。
50、队列和栈是什么?有什么区别?
(1)队列先进先出,栈先进后出。
(2)遍历数据速度不同。
21.HashMap 和 Hashtable 有什么区别?
- 存储:HashMap 允许 key 和 value 为 null,而 Hashtable 不允许。
- 线程安全:Hashtable 是线程安全的,而 HashMap 是非线程安全的。
- 推荐使用:Hashtable 是保留类不建议使用,
- 单线程环境下使用 HashMap 替代,
- 多线程使用则用 ConcurrentHashMap 替代。
1.7.重载和重写的区别
重写(Override)
从字面上看,重写就是重新写一遍的意思。
其实就是在子类中把父类本身有的方法重新写一遍。
子类继承了父类原有的方法,但有时子类并不想原封不动的继承父类中的某个方法,
所以在方法名,参数列表,返回类型(除过子类中方法的返回值是父类中方法返回值的子类时)都相同的情况下, 对方法体进行修改或重写,这就是重写。
但要注意子类函数的访问修饰权限不能少于父类的。
重写总结:
1.发生在父类与子类之间
2.方法名,参数列表,返回类型(除过子类中方法的返回类型是父类中返回类型的子类)必须相同
3.访问修饰符的限制一定要大于被重写方法的访问修饰符(public>protected>default>private)
4.重写方法一定不能抛出新的检查异常或者比被重写方法申明更加宽泛的检查型异常
重载(Overload)
在一个类中,同名的方法如果有不同的参数列表(参数类型不同、参数个数不同甚至是参数顺序不同)则视为重载。
同时,重载对返回类型没有要求,可以相同也可以不同,但不能通过返回类型是否相同来判断重载。
重载总结:
1.重载Overload是一个类中多态性的一种表现
2.重载要求同名方法的参数列表不同(参数类型,参数个数甚至是参数顺序)
3.重载的时候,返回值类型可以相同也可以不相同。无法以返回型别作为重载函数的区分标准
————————————————
25、java 中操作字符串都有哪些类?它们之间有什么区别?
(1)String
String是不可变对象,每次对String类型的改变时都会生成一个新的对象。
(2)StringBuilder
线程不安全,效率高,多用于单线程。
(3)StringBuffer
线程安全,由于加锁的原因,效率不如StringBuilder,多用于多线程。
StringBuilder > StringBuffer > String。
Spring SpringMvc篇
1、Spring是什么?
2.Spring主要包括以下七个模块:
3、使用 Spring 框架能带来哪些好处?
4、Spring的IoC理解:什么是IOC:什么是DI:
5、谈谈对AOP的理解? aspect oriented programming
6.spring 常用的注入方式有哪些?
7.spring 自动装配 bean 有哪些方式?
8.spring mvc 有哪些组件?
9、SpringMvc运行原理?
10.SpringMVC常用的注解有哪些?
11、请解释 Spring Bean 的生命周期?
12、 Spring中bean的作用域:
13、Spring 有几种配置方式?
14、Spring基于xml注入bean的几种方式:
15、spring事务隔离级别有哪些?
16、什么是脏读、幻读、不可重复读?
17.@RequestMapping 的作用是什么?
18.@Autowired 的作用是什么?
1、Spring是什么?
Spring是一个轻量级的IoC和AOP容器框架。
是为Java应用程序提供基础性服务的一套框架,目的是用于简化企业应用程序的开发,
它使得开发者只需要关心业务需求。
主要包括以下七个模块:
Spring Core:核心类库,所有功能都依赖于该类库,提供IOC和DI服务;
Spring AOP:AOP服务;
Spring Web:提供了基本的面向Web的综合特性,Spring能够管理这些框架,将Spring的资源注入给框架
Spring MVC:提供面向Web应用的Model-View-Controller,即MVC实现。
Spring DAO:对JDBC的抽象封装,并能统一管理JDBC事务;
Spring ORM:对现有的ORM框架的支持;
————————————————
115、使用 Spring 框架能带来哪些好处?
1、轻量级框架、容器 Spring是一个容器,管理对象的生命周期和配置。
2、控制反转IOC Spring通过控制反转实现松耦合。
3、支持AOP Spring提供对AOP的支持,它允许将一些通用任务,如安全、事务、日志等
进行集中式处理,从而提高了程序的复用性。
5、方便测试 Spring提供Junit4的支持,可以通过注解方便测试spring程序。
6、对Java中很多API进行了封装
7、方便集成各种优秀框架 如hibernate、mybstis。
8、支持声明式事务处理 只需通过配置就可以完成对事务的管理,而无须手动编程。
3、Spring的IoC理解:
(1)什么是IOC:
IOC,Inversion of Control,控制反转,指将对象的控制权转移给Spring框架,由 Spring 来负责控制对象的生命周期(比如创建、销毁)和对象间的依赖关系。
也就是说,对于某个具体的对象而言,以前是由自己控制它所引用对象的生命周期,而在IOC中,所有的对象都被 Spring 控制,控制对象生命周期的不再是引用它的对象,而是Spring容器,由 Spring 容器帮我们创建、查找及注入依赖对象,而引用对象只是被动的接受依赖对象,所以这叫控制反转。
————————————————
(2)什么是DI:
什么是依赖注入?Dependency Injection
获取依赖对象的过程由自身创建变为由IOC容器注入,这便是依赖注入
IoC 是动态的向某个对象提供它所需要的其他对象,这一点是通过DI来实现的,
即应用程序在运行时依赖 IoC 容器来动态注入对象所需要的外部依赖。而 Spring 的 DI 具体就是通过反射实现注入的,
反射允许程序在运行的时候动态的生成对象、执行对象的方法、改变对象的属性
————————————————
四十七、谈谈对AOP的理解? aspect oriented programming
AOP 为面向切面编程
使用AOP让我们业务代码只需关注本身功能,
对公共组件功能可以单独封装到aop中. 比如(异常,验证,事务,日志,监控等等)都为通用功能,
是不需要每个模块的业务去重复编写的.
使用AOP可以提供代码的复用性,降低耦合性.
spring aop有五种通知: 分别为: 前置,后置,异常,最终,环绕.
94.spring 常用的注入方式有哪些?
setter 属性注入 构造方法注入 注解方式注入
97.spring 自动装配 bean 有哪些方式?
- no:默认值,表示没有自动装配,应使用显式 bean 引用进行装配。
- byName:它根据 bean 的名称注入对象依赖项。
- byType:它根据类型注入对象依赖项。
- 构造函数:通过构造函数来注入依赖项,需要设置大量的参数。
- autodetect:容器首先通过构造函数使用 autowire 装配,如果不能,则通过 byType 自动装配。
101.spring mvc 有哪些组件?
- 前置控制器 DispatcherServlet。
- 映射控制器 HandlerMapping。
- 处理器 Controller。
- 模型和视图 ModelAndView。
- 视图解析器 ViewResolver。
三十八、SpringMvc运行原理?
1.客户端发送请求, 被web.xml中DispatcherServlet接住.
2.DispatcherServlet会调用HandlerMapping(处理器映射)对象寻找与之匹配的Controller返回给到DispatcherServlet.
3.DispatcherServlet调用HandlerAdapter(处理器适配器)去执行该Controller.
4.controller方法执行完成返回一个ModelAndView对象给到DispatcherServlet
5.DispatcherServlet调用ViewResolver(视图解析器)解析ModelAndView.
6.解析完成的结果响应给到客户端.
4.7.SpringMVC常用的注解有哪些?
@RequestMapping:用于处理请求 url 映射的注解,可用于类或方法上。用于类上,则表示类中的所有响应请求的方法都是以该地址作为父路径。
@RequestBody:注解实现接收http请求的json数据,将json转换为java对象。
@ResponseBody:注解实现将conreoller方法返回对象转化为json对象响应给客户
————————————————
122、请解释 Spring Bean 的生命周期?
通过构造器或工厂方法创建bean实例;
为bean的属性赋值;
调用bean的初始化方法;
使用bean;
当容器关闭时,调用bean的销毁方法;
简单来说,Spring Bean的生命周期只有四个阶段:
实例化 Instantiation --> 属性赋值 Populate --> 初始化 Initialization --> 销毁 Destruction
10、 Spring中bean的作用域:
singleton: prototype : request: session: global-session:
(1)singleton:默认作用域,单例bean,每个容器中只有一个bean的实例。
(2)prototype:为每一个bean请求创建一个实例。
(3)request:为每一个request请求创建一个实例,在请求完成以后,bean会失效并被垃圾回收器回收。
(4)session:同一个session会话共享一个实例,不同会话使用不同的实例。
(5)global-session:全局作用域。
————————————————
121、Spring 有几种配置方式?
1、xml配置文件
2、基于注解的方式
(1)Bean的定义 @Component、@Controller、@Service、@Repository。
(2)Bean的注入 @Autowire
3、基于Java的方式
12、Spring基于xml注入bean的几种方式:
- set()方法注入;
- 构造器注入:①通过index设置参数的位置;②通过type设置参数类型;
- 静态工厂注入;
- 实例工厂;
四十、spring事务隔离级别有哪些?
有五种.
不参与设置级别, 使用数据库默认的隔离级别
读未提交 脏读, 幻读, 不可重复读 (Oracle不支持)
读已提交 幻读, 不可重复读
不可重复读 幻读 (Oracle不支持)
序列化/串行化 绝对安全
三十七、什么是脏读、幻读、不可重复读?
脏读: 读取到一个未提交的事务的数据, 该数据随时有可能被回滚,所以数据无效.
不可重复读: 事务A 多次读取一个数据,前后读取返回的不一致
(因为中间有事务BCDEFG)修改并提交了该数据.
幻读: 当事务A删除或修改所有数据,最后查询发现还有一/N条数据没有删除或修改
(其实是中间有其他事务BCDEFG插入了新的数据)
102.@RequestMapping 的作用是什么?
将 http 请求映射到相应的类/方法上。
103.@Autowired 的作用是什么?
@Autowired 它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作,通过@Autowired 的使用来消除 set/get 方法。
SpringBoot 篇
1、什么是 Spring Boot?
2、为什么要用 Spring Boot?
3、什么是 Spring Boot?Spring Boot 有哪些优点?
4.Spring Boot 的核心注解是哪个?它主要由哪几个注解组成的?
5.spring boot 配置文件有哪几种类型?它们有什么区别?
6.运行Spring Boot有哪几种方式?
7.如何使用 Spring Boot 实现分页和排序?
8、运行SpringBoot有哪几种方式?
9.注解的优势:
SpringBootApplication:
Configuration EnableAutoConfiguration ComponentScan
ResponseBody:
Controller:
RestController:
RequestMapping:
EnableAutoConfiguration:
ComponentScan:
Configuration:
Import
ImportResource
Autowired:
Service:
Repository
Bean:
Value:
Inject:
1、什么是 Spring Boot?
Spring Boot 是 Spring 组件一站式解决方案,主要是简化了使用 Spring 的难度,简省了繁重xml的配置,提供了各种启动器,在运行过程中自动配置。
2、为什么要用 Spring Boot?
Spring Boot 优点非常多,如:
- 独立运行 简化配置 自动配置 无代码生成和XML配置
150、什么是 Spring Boot?Spring Boot 有哪些优点?
1、Spring Boot简介
继承了Spring框架原有的优秀特性,而且还通过简化配置来进一步简化spring应用的整个搭建和开发过程。
2、Spring Boot 有哪些优点?
1快速构建项目,可以选一些必要的组件;
2对主流框架的无配置集成;
3内嵌Tomcat容器,项目可独立运行;
4删除了繁琐的xml配置文件;
5极大地提高了开发和部署效率;
6提供starter,简化maven配置;
4.Spring Boot 的核心注解是哪个?它主要由哪几个注解组成的?
启动类上面的注解是@SpringBootApplication,组件扫描 自动配置
3 个注解:
@Configuration: 组合了 @Configuration 注解,实现配置文件的功能。
@EnableAutoConfiguration:打开自动配置的功能,
@ComponentScan: Spring组件扫描。
107.spring boot 配置文件有哪几种类型?它们有什么区别?
配置文件有 .properties 格式和 .yml 格式
6.3.运行Spring Boot有哪几种方式?
1)打包用命令或者放到容器中运行
2)用 Maven/Gradle 插件运行
3)直接执行 main 方法运行
spring boot 核心配置文件是什么?bootstrap和 application有何区别 ?
spring boot 核心的两个配置文件:
application : 由ApplicatonContext 加载,用于 spring boot 项目的自动化配置。
bootstrap : 由ApplicationContext 加载的,配置在应用程序上下文的引导阶段生效。
如何使用 Spring Boot 实现分页和排序?
使用 Spring Boot 实现分页非常简单。使用 Spring Data-JPA 可以实现将可分页的传递给存储库方法。
8、运行SpringBoot有哪几种方式?
1)打包用命令或者放到容器中运行
2)用 Maven/ Gradle 插件运行
3)直接执行 main 方法运行
注解的优势:
1.采用纯java代码,不在需要配置繁杂的xml文件
2.在配置中也可享受面向对象带来的好处
3.类型安全对重构可以提供良好的支持
4.减少复杂配置文件的同时亦能享受到springIoC容器提供的功能
@SpringBootApplication:
@Configuration ,@EnableAutoConfiguration 和 @ComponentScan 三个配置。
@ResponseBody:
@Controller:
@RestController:
@RequestMapping:
@EnableAutoConfiguration:
@ComponentScan:
@Configuration:
@Import
@ImportResource@Autowired:@Service:
@Repository@Bean:@Value:@Inject:
一、注解详解(配备了完善的释义)
@SpringBootApplication:
申明让spring boot自动给程序进行必要的配置,这个配置等同于:
@Configuration ,@EnableAutoConfiguration 和 @ComponentScan 三个配置。
@Configuration:相当于传统的xml配置文件
@EnableAutoConfiguration:SpringBoot自动配置,将jar依赖自动配置你的Spring应用。
@ComponentScan:Spring组件扫描。
@Controller:用于定义控制器类,和@RequestMapping配合使用。
@RequestMapping:提供路由信息,负责URL到Controller中的具体函数的映射。
@ResponseBody:表示该方法的返回结果直接写入HTTP response body中,
@Import:用来导入其他配置类。
@ImportResource:用来加载xml配置文件。
@Autowired:自动导入依赖的bean
@Service:修饰service层的组件
@Bean:用@Bean标注方法等价于XML中配置的bean,意思是产生一个bean,并交给spring管理。
@Value:注入配置属性的值。
SpringClould 篇
1.什么是 spring cloud?
2:springcloud的理解?
3 spring cloud 的核心组件有哪些?Eureka:Feign:Ribbon:Hystrix:Zuul:
4.spring cloud 的核心组件有哪些?
5. SpringCloud由什么组成
6.什么是微服务
7. Spring Cloud 和dubbo区别?
8.spring cloud 断路器的作用是什么?
9. SpringBoot和SpringCloud的区别?
10.SpringBoot 和 SpringCloud 之间关系?
11.负载平衡的意义什么?
Eureka:
1. 服务注册和发现是什么意思?Spring Cloud 如何实现?
2. 什么是Eureka
3. Eureka怎么实现高可用
Zuul
1. 什么是网关?
2. 网关的作用是什么
3. 什么是Spring Cloud Zuul(服务网关)
4. 网关与过滤器有什么区别
5. 常用网关框架有那些?
6. ZuulFilter常用有那些方法
7. 如何实现动态Zuul网关路由转发
8. Zuul网关如何搭建集群
1. 负载平衡的意义什么?
2. Ribbon是什么?
3. Nginx与Ribbon的区别
4. Ribbon底层实现原理
31. 什么是断路器
32. 什么是 Hystrix?
33. 谈谈服务雪崩效应
35. 服务雪崩效应产生的原因
36. 谈谈服务降级、熔断、服务隔离
37. 服务降级底层是如何实现的?
38. 什么是Feign?
40. Ribbon和Feign调用服务的区别
42. 什么是Spring Cloud Config?
43. 分布式配置中心有那些框架?
44. 分布式配置中心的作用?
45. SpringCloud Config 可以实现实时刷新吗?
Bus
41. 什么是 Spring Cloud Bus?
七十二:springcloud的理解?
spring cloud 是一系列框架的有序集合。
它利用 spring boot 的开发便利性巧妙地简化了分布式系统的开发,
如服务发现注册、配置中心、消息总线、负载均衡、断路器、
数据监控等,都可以用 spring boot 的开发风格做到一键启动和部署。
八十 spring cloud 的核心组件有哪些?
Eureka:服务注册与发现。
Feign:声明性的Web服务客户端。
Ribbon:实现负载均衡,从一个服务的多台机器中选择一台。
Hystrix:提供线程池,不同的服务走不同的线程池,实现了不同服务调用的隔离,避免了服务雪崩的问题。
Zuul:网关管理,由 Zuul 网关转发请求给对应的服务。
7. SpringCloud由什么组成
Spring Cloud Eureka:服务注册与发现
Spring Cloud Zuul:服务网关
Spring Cloud Ribbon:客户端负载均衡
Spring Cloud Feign:声明性的Web服务客户端
Spring Cloud Hystrix:断路器
Spring Cloud Confifig:分布式统一配置管理
9.2.什么是微服务
微服务架构是一种架构模式或者说是一种架构风格,它提倡将单一应用程序划分为一组小的服务,每个服务运行在其独立的自己的进程中,服务之间相互协调、互相配合,为用户提供最终价值。
服务之间采用轻量级的通信机制互相沟通(通常是基于HTTP的RESTful API),每个服务都围绕着具体的业务进行构建,并且能够被独立的构建在生产环境、类生产环境等。另外,应避免统一的、集中式的服务管理机制,对具体的一个服务而言,应根据业务上下文,选择合适的语言、工具对其进行构建,可以有一个非常轻量级的集中式管理来协调这些服务,可以使用不同的语言来编写服务,也可以使用不同的数据存储。
————————————————
9. Spring Cloud 和dubbo区别?
(1)服务调用方式:
(2)注册中心:dubbo 是zookeeper springcloud是eureka,也可以是zookeeper
(3)服务网关:dubbo本身没有实现,只能通过第三方技术整合,springcloud有Zuul路由网关,作为路由服务器。
———————————————
111.spring cloud 断路器的作用是什么?
在分布式架构中,断路器模式的作用也是类似的,当某个服务单元发生故障(类似用电器发生短路)之后,通过断路器的故障监控(类似熔断保险丝),向调用方返回一个错误响应,而不是长时间的等待。这样就不会使得线程因调用故障服务被长时间占用不释放,避免了故障在分布式系统中的蔓延。
5. SpringBoot和SpringCloud的区别?
————————————————
4.SpringBoot 和 SpringCloud 之间关系?
SpringBoot:专注于快速方便的开发单个个体微服务(关注微观);
SpringCloud:关注全局的微服务协调治理框架,将SpringBoot开发的一个个单体微服务组合并管理起来(关注宏观);
SpringBoot可以离开SpringCloud独立使用,但是SpringCloud不可以离开SpringBoot,属于依赖关系。
————————————————
9.7.负载平衡的意义什么?
在计算中,负载平衡可以改善跨计算机,计算机集群,网络链接,中央处理单元或磁盘驱动器等多种计算资源的工作负载分布。负载平衡旨在优化资源使用,最大化吞吐量,最小化响应时间并避免任何单一资源的过载。使用多个组件进行负载平衡而不是单个组件可能会通过冗余来提高可靠性和可用性。负载平衡通常涉及专用软件或硬件,例如多层交换机或域名系统服务器进程。
————————————————
Eureka:服务注册与发现
Spring Cloud Zuul:服务网关
Spring Cloud Ribbon:客户端负载均衡
Spring Cloud Feign:声明性的Web服务客户端
Spring Cloud Hystrix:断路器
Spring Cloud Confifig:分布式统一配置管理
Eureka:
10. 服务注册和发现是什么意思?Spring Cloud 如何实现?
11. 什么是Eureka
- Eureka作为SpringCloud的服务注册功能服务器,他是服务注册中心,系统中的其他服务使用Eureka的客户端将其连接到Eureka Service中,并且保持心跳,这样工作人员可以通过EurekaService来监控各个微服务是否运行正常。
12. Eureka怎么实现高可用
集群吧,注册多台 Eureka ,然后把 SpringCloud 服务互相注册,客户端从 Eureka 获取信息时,按照Eureka 的顺序来访问。
Zuul
16.什么是网关?
网关相当于一个网络服务架构的入口,所有网络请求必须通过网关转发到具体的服务。
17. 网关的作用是什么
统一管理微服务请求,权限控制、负载均衡、路由转发、监控、安全控制黑名单和白名单等
18. 什么是Spring Cloud Zuul(服务网关)
19. 网关与过滤器有什么区别
网关是对所有服务的请求进行分析过滤,过滤器是对单个服务而言。
20. 常用网关框架有那些?
Nginx 、 Zuul 、 Gateway
24. ZuulFilter常用有那些方法
Run():过滤器的具体业务逻辑
shouldFilter():判断过滤器是否有效
fifilterOrder():过滤器执行顺序
fifilterType():过滤器拦截位置
25. 如何实现动态Zuul网关路由转发
通过 path 配置拦截请求,通过 ServiceId 到配置中心获取转发的服务列表, Zuul 内部使用 Ribbon 实现本地负载均衡和转发。
26. Zuul网关如何搭建集群
使用 Nginx 的 upstream 设置 Zuul 服务集群,通过 location 拦截请求并转发到 upstream ,默认使用轮询机制对Zuul 集群发送请求。
————————————————
27. 负载平衡的意义什么?
28. Ribbon是什么?
29. Nginx与Ribbon的区别
30. Ribbon底层实现原理
Ribbon 使用 discoveryClient 从注册中心读取目标服务信息,对同一接口请求进行计数,使用 % 取余算法获取目标服务集群索引,返回获取到的目标服务信息。
@LoadBalanced注解的作用
开启客户端负载均衡。
31. 什么是断路器
32. 什么是 Hystrix?
33. 谈谈服务雪崩效应
35. 服务雪崩效应产生的原因
因为 Tomcat 默认情况下只有一个线程池来维护客户端发送的所有的请求,这时候某一接口在某一时刻被大量访问就会占据tomcat 线程池中的所有线程,其他请求处于等待状态,无法连接到服务接口。
36. 谈谈服务降级、熔断、服务隔离
37. 服务降级底层是如何实现的?
Hystrix实现服务降级的功能是通过重写HystrixCommand中的getFallback()方法,当Hystrix的run方法或construct执行发生错误时转而执行getFallback()方法。
38. 什么是Feign?
- Feign 是一个声明web服务客户端,这使得编写web服务客户端更容易
- 他将我们需要调用的服务方法定义成抽象方法保存在本地就可以了,不需要自己构建Http请求了,直接调用接口就行了,不过要注意,调用方法要和本地抽象方法的签名完全一致。
40. Ribbon和Feign调用服务的区别
42. 什么是Spring Cloud Config?
43. 分布式配置中心有那些框架?
Apollo 、 zookeeper 、 springcloud confifig 。
44. 分布式配置中心的作用?
动态变更项目配置信息而不必重新部署项目。
45. SpringCloud Config 可以实现实时刷新吗?
springcloud confifig 实时刷新采用 SpringCloud Bus 消息总线
————————————————
七、Bus
Mysql 篇
1.数据库的三范式是什么?
2.如何获取当前数据库版本?
3.什么是事务?
4.char 和 varchar 的区别是什么?
5.mysql 的内连接、左连接、右连接有什么区别?
6.mysql 索引是怎么实现的?
7.说一下数据库的事务隔离?
8.spring事务隔离级别有哪些?
9.mysql 问题排查都有哪些手段?
10.如何做 mysql 的性能优化?
11.如何执行批量插入?
164.数据库的三范式是什么?
166.如何获取当前数据库版本?
使用 select version() 获取当前 mysql 数据库版本。
三十、 什么是事务?
事务是数据库保证一系列指令执行得到安全保障的一种机制,让我们的指令要么都
成功执行,要么都回滚,它有ACID四个特性.
原子性: 所有操作为一个最小化原子操作,要么都成功,要么都失败.
一致性: 所有操作在执行的前后数据的状态始终是一致的.
隔离性: 事务与事务之间相互隔离, 互不影响
持久性: 事务执行结束, 对数据的提交或回滚是持久的.
168.char 和 varchar 的区别是什么?
- char(n) :固定长度类型,比如订阅 char(10),当你输入"abc"三个字符的时候,它们占的空间还是 10 个字节,其他 7 个是空字节。
chat 优点:效率高;缺点:占用空间;适用场景:存储密码的 md5 值,固定长度的,使用 char 非常合适。
- varchar(n) :可变长度,存储的值是每个值占用的字节再加上一个用来记录其长度的字节的长度。
所以,从空间上考虑 varcahr 比较合适;从效率上考虑 char 比较合适,二者使用需要权衡
170.mysql 的内连接、左连接、右连接有什么区别?
内连接关键字:inner join;左连接:left join;右连接:right join。
内连接是把匹配的关联数据显示出来;左连接是左边的表全部显示出来,右边的表显示出符合条件的数据;右连接正好相反。
171.mysql 索引是怎么实现的?
索引是满足某种特定查找算法的数据结构,而这些数据结构会以某种方式指向数据,从而实现高效查找数据。
173.说一下数据库的事务隔离?
四十、spring事务隔离级别有哪些?
有五种.
不参与设置级别, 使用数据库默认的隔离级别
读未提交 脏读, 幻读, 不可重复读 (Oracle不支持)
读已提交 幻读, 不可重复读
不可重复读 幻读 (Oracle不支持)
序列化/串行化 绝对安全
177.mysql 问题排查都有哪些手段?
- 使用 show processlist 命令查看当前所有连接信息。
- 使用 explain 命令查询 sql 语句执行计划。
- 开启慢查询日志,查看慢查询的 sql。
178.如何做 mysql 的性能优化?
- 为搜索字段创建索引。
- 避免使用 select *,列出需要查询的字段。
- 垂直分割分表。
- 选择正确的存储引擎。
5.7.如何执行批量插入?
首先,创建一个简单的insert语句:
<insert id=”insertname”>
insert into names (name) values (#{value})
Mybatis 篇
1.mybatis 中 #{}和 ${}的区别是什么?
2.mybatis 是否支持延迟加载?延迟加载的原理是什么?
3.mybatis如何防止sql注入
4.hibernate和mybatis的区别?
5.Mybatis是如何进行分页的?分页插件的原理是什么?
6.mybatis 有几种分页方式?
7.什么是一级缓存和二级缓存?
8.mybatis 中 #{}和 ${}的区别是什么?
#{}是预编译处理,${}是字符替换。 在使用 #{}时,mybatis 会将 sql 中的 #{}替换成“?”,配合 PreparedStatement 的 set 方法赋值,这样可以有效的防止 sql 注入,保证程序的运行安全。
139、mybatis 是否支持延迟加载?延迟加载的原理是什么?
1、mybatis 是否支持延迟加载?
延迟加载其实就是讲数据加载时机推迟。
延迟加载可以实现先查询主表,按需实时做关联查询,返回关联表结果集,一定程度上提高了效率。
145、mybatis如何防止sql注入
1、检查变量数据类型和格式
2、过滤特殊符号
3、绑定变量,使用预编译语句
二十九、hibernate和mybatis的区别?
hibernate是面向对象方式来操作数据库,支持跨数据库;
mybatis由于自己写sql,所以不支持跨数据库.
hibernate是全自动ORM框架,而mybatis是半自动ORM框架
hibernate入门容易,掌握和精通难, mybatis就相对hibernate容易掌握。
mybatis由于是手写sql,所以可以完成sql优化. hibernate一般不写SQL,sql优化
做不了或者没有mybatis方便.
5.5.Mybatis是如何进行分页的?分页插件的原理是什么?
Mybatis使用RowBounds对象进行分页,它是针对ResultSet结果集执行的内存分页,而非物理分页
126.mybatis 有几种分页方式?
分页方式:逻辑分页和物理分页。
1).逻辑分页: 使用 mybatis 自带的 RowBounds 进行分页,它是一次性查询很多数据,然后在数据中再进行检索。
2).物理分页: 自己手写 sql 分页或使用分页插件 PageHelper,去数据库查询指定条数的分页数据的形式
三十二、什么是一级缓存和二级缓存?
一级缓存默认已经打开, 在同一个session中有效,。
二级缓存,多个session可以共享.默认关闭,需要手动打开
二级缓存一般使用在不怎么修改,但是经常可能查询数据上.
4321

被折叠的 条评论
为什么被折叠?



