- JAVA基础
- 集合
- JVM
- WEB
- 并发编程
- 网络编程
- Spring
- Spring Boot
- Spring Cloud
- Mybatis
- MySQL
- 分布式
- 消息队列
- 问:你用过哪些MQ,这个MQ有哪些组件,什么是可靠消息,重复消息怎么解决
- Zookeeper
- Redis
- Dubbo
- javaweb
1. 面向对象有哪些特征?
抽象,封装,继承,多态
2. JDK与JRE的区别是什么?
jdk: 编译+运行
jre:运行
jdk包括jre
jre包括jvm
3. Java有哪几种基本数据类型?
8种:byte、short、int、long、float、double、char、boolean
4. == 和equals比较有什么区别?
equals判断指向同一个内存空间的值是不是相同,而==是判断是不是指向同一个内存空间
5. public,private,protected,默认的区别什么?
作用域 当前类 同包 子类 其他
public √ √ √ √
protected √ √ √ ×
默认 √ √ × ×
private √ × × ×
6. short s1=1; s1+=1;有错吗? s1=s1+1; 有错吗?
s1+=1:没错(s1+= 1;相当于s1 = (short)(s1 + 1);其中有隐含的强制类型转换)
s1=s1+1:有错(1是int类型,因此s1+1运算结果也是int 型,需要强制转换类型才能赋值给short型)
7. float f = 1.9; 有错吗?
有:应该是float f= 1.9F
8. &和&&有什么区别?
相同点:&和&&都可以用作逻辑与的运算符,表示逻辑与(and)。
不同点:&&具有短路的功能,而&不具备短路功能。(&&第一个表达式为false,则不再计算下一个表达式;&则要计算完再判断)
9. 2*8最有效率的计算方法是什么?
2<<3:位运算,效率最高。一个数左移n位,相当于乘以了2的几次方。右移则相当于除法
10. 怎么理解值传递和引用传递?
值传递:值传递是传递实参副本,函数修改不会影响实参(形参接收到的内容是实参值的一个拷贝,因此在方法内对形参的任何操作,都仅仅是对这个副本的操作,不影响原始值的内容)
引用传递:引用传递是传递实参地址,函数修改会影响实参(形参和实参指向同一块内存地址,对形参的操作会影响的真实内容)
11. Java到底是值传递还是引用传递?
Java中只有值传递
12. 一个".java"源文件的类有什么限制?
一个.java文件下可以有多个类(非内部类),但只能有一个类是public,且这个类必须与文件名一致
13. final关键字有哪些用法?
四种:修饰属性、修饰方法参数、修饰方法、修饰类
14. final、finally、finalize有什么区别?
final: final用于声明属性、方法和类,分别表示属性不可变、方法不可覆盖、类不可被继承(不能再派生出新的子类)
finally: finally作为异常处理的一部分,它只能用在try/catch语句中,并且附带着一个语句块,表示这段语句最终一定被执行,经常被用在需要释放资源的情况下
finalize: finalize是Object类中的一个方法,在垃圾收集器执行的时候会调用被回收对象的finalize()方法,可以覆盖此方法来实现对其他资源的回收,例如关闭文件等
15. void和Void有什么区别?
void:void关键字表示方法没有返回结果
Void:(1)Void是一个Class,是void的包装方法
(2)Void不能被实例化
16. 为什么byte的取值范围为-128~127?
17. char类型可以存储中文汉字吗?
char型变量中可以存储汉字
18. 重载和重写有什么区别?
方法重载: "同一个类"中,方法名相同,参数不同(个数,类型),与返回类型无关;
方法重写: (1)访问权限可以放大
(2)返回值类型一致 或 是父类返回类型的子类
(3)方法名 和 参数必须一致
验证重写:@Override
19. 构造器可以被重写和重载吗?
不能重写,可以重载:由于构造器不能继承,所以就不能被重写。但是,在同一个类中,构造器是可以被重载的
20. Java中的断言(assert)是什么?
断言:jdk1.4之后加入的断言,用于测试判断数据是否是期望值,不是则会报错抛出AssertionError
21. Error和Exception有哪些区别?
相同点:Exception和Error都是继承了Throwable类
Error(错误): 虚拟机错误,无法依靠修改程序解决的错误
Exception(异常)
22. Java中常见的异常有哪些?
空指针异常、算数异常、数组下标越界、方法参数错误
23. Java中常见的运行时异常有哪些?
空指针异常、算数异常、数组下标越界、方法参数错误
24. 运行时异常和受检异常有什么区别?
受检异常:就是编译异常、非运行时异常
运行时异常:就是非受检异常、非编译异常
25. 什么时候会发生空指针异常?
调用null对象实例方法、访问或修改null对象字段
26. 你知道有哪些避免空指针异常的方法?
异常处理,如:try/catch
27. throw和throws有什么区别?
throw是处理异常
throws是抛出异常
28. try里面return,finally还会执行吗?
会
29. int和Integer有什么区别?
(1)Integer是int的包装类;int是基本数据类型;
(2)Integer变量必须实例化后才能使用;int变量不需要;
(3)Integer的默认值是null;int的默认值是0。
30. 什么是包装类型?有什么用?
包装类:与基本数据类型对应的类
作用:(1)方便涉及到对象的操作、(2)包含每种基本数据类型的相关属性
31. 什么是自动装箱和拆箱?
自动装箱和拆箱:指的是基本数据类型与他们的包装类型之间的相互转换
32. 你怎么理解Java中的自动类型转换和强制类型转换?
低类型的基本数据会自动向高类型的基本数据类型转换 ,高类型的基本数据类型需要强制向低类型的基本数据类型转换
33. 你怎么理解Java中的类型提升?
正向过程:由低字节向高字节自动转换
byte->short->int->long->float->double
逆向过程:使用强制转换,可能丢失精度。
34. 你怎么理解强、软、弱、虚引用?
强:内存即使满了,也不会GC
软:内存满了,就会被GC
弱:只要进行GC了,就会被清除
虚:任何时候都可能被GC
35. switch是否能用在long上?
switch可作用于char byte short int和其对应的包装类,和枚举、String(jdk7)类型
switch不可作用于long double float boolean和他们对应的包装类
36. switch case支持哪几种数据类型?
switch可作用于char byte short int和其对应的包装类,和枚举、String(jdk7)类型
switch不可作用于long double float boolean和他们对应的包装类
37. String的底层实现是怎样的?
String 的底层实现是基于 char[] 数组来实现的
38. String是可变的吗?为什么?
不可变:String底层是char[]数组决定
39. 为什么不能用 + 拼接字符串?
在循环和多个表达式中不能 +,频繁创建 SB 性能影响;
40. StringBuffer和StringBuilder有什么区别?
StringBuffer、StringBuilder和String一样,也用来代表字符串。
StringBuffer 和 StringBuilder 都是可变的字符串,任何对它所指代的字符串的改变都不会产生新的对象
StringBuffer则是线程安全版的StringBuilder
41. StringJoiner有什么用?
拼接字符串,添加前后缀(当拼接字符串太长时,StringJoiner更简便)
42. 普通类和抽象类有什么区别?
(1)普通类可以去实例化调用;抽象类不能被实例化,必须通过其非抽象子类来创建实例。
(2)普通类和抽象类都可以被继承,但是抽象类被继承后子类必须重写继承的方法
43. 静态内部类和普通内部类有什么区别?
普通内部类持有对外部类的引用,静态内部类没有持有外部类的引用。
普通内部类能够访问外部类的静态和非静态成员,静态内部类只能访问外部类的静态成员。
44. 静态方法可以直接调用非静态方法吗?为什么?
不能:静态方法属于类层级,非静态方法属于对象层级。
45. 静态变量和实力变量有什么区别?
实例变量必须创建对象后才可以通过这个对象来使用,静态变量则可以直接使用类名来引用
46. 内部类可以访问其外部类的成员吗?
普通内部类能够访问外部类的静态和非静态成员,静态内部类只能访问外部类的静态成员。
47. 接口和抽象类有什么区别?
接口是对对象动作的抽象,抽象类是对根源(对象)的抽象
接口可以多继承,抽象类不行
接口是抽象类的变体,接口中所有的方法都是抽象的
48. 接口里面可以写方法实现吗?
jdk8之后,接口里可以写方法实现
49. Java中的UUID是什么?
机器算法生成的,唯一通用标识
50. Java类初始化顺序是怎样的?
静态变量/代码块>mian方法> 非静态变量/代码块>构造方法
51. hashCode有什么作用?
hashCode主要是为了查找快捷
52. hashCode和identityHashCode的区别?
hashCode方法可以被重写并返回重写后的值,identityHashCode会返回对象的hash值而不管对象是否重写了hashCode方法。
53. 什么是Hash冲突?
如果两个不同对象的hashCode相同,这种现象称为hash冲突
54. Java常用的元注解有哪些?
常用四种:(1)@Target:用于指定自定义注解的使用范围
(2)@Retention:用于修饰自定义注解的生存周期,或者可以保留多久
(3)@documented:执行javadoc命令时,被该元注解修饰的自定义注解也会生成在文档中
(4)@Inherited:如果父类所使用的注解有@Inherited修饰,则子类可以继承该注解,否则不能继承
55. Java泛型中的T、R、K、V、E分别指什么?
T :表示确定的Java类型
K、V:Java中的键值对key、value
E :Element
56. Java金额计算怎么避免精度丢失?
BigDecimal类进行计算就不会出现这种精度丢失的情况
57. Java语法糖是什么意思?
语法糖:就是对现有语法的一个封装,使语法变得更加简洁
主要语法糖:
(1)自动装箱与拆箱、变长参数(方法可以接受长度不定确定的参数)
(2)增强for循环
(3)内部类与枚举类
58. transient关键字有什么作用?
transient用于修饰不需要序列化的字段
59. 如何实现对象克隆?
实现Cloneable接口,并重写object类中的clone方法,可以实现浅克隆,也可以实现深度克隆
60. 对象克隆浅拷贝和深拷贝有什么区别?
没有引用:那浅拷贝和深拷贝没有差别
有引用:浅拷贝出的对象修改时会改变引用里的值,而深拷贝会将原对象里的引用也拷贝一份
61. Java反射机制有什么作用?
对于任意一个类,都能够知道这个类的所有属性和方法。
对于任意一个对象,都能够调用它的任意一个方法和属性。
62. Java反射机制有什么优缺点?
优点:提高了程序的灵活性和扩展性,降低模块的耦合性
缺点:(1)消耗性能、(2)安全限制、
63. 什么是宏变量和宏替换?
宏变量:
1、该变量必须是final修饰的变量;
2、该变量必须在开始时就指定初始值;
3、该初始值必须是在编译时期就可以确定
64. 什么是逃逸分析?
是一种可以有效减少Java程序中同步负载和内存堆分配压力的跨函数全局数据流分析算法
65. 什么是伪共享?有什么解决方案?
当多线程修改互相独立的变量时,如果这些变量共享同一个缓存行,就会无意中影响彼此的性能,这就是伪共享
66. Java 8新增了哪些特性?
(1)Lambda表达式
(2)函数式接口
(3)接口的默认方法和静态方法
(4)方法引用
67. Java 8中的Lambda表达式有什么作用?
优点:使用Lambda表达式可以简化接口匿名内部类的使用,可以减少类文件的生成
缺点:使用Lambda表达式会减弱代码的可读性
68. Java 8中的Optional类有什么作用?
Optional类是Java8之后的新特性,主要是为了解决空指针异常
69. Java 8中的@Repeatable注解有什么作用?
@Repeatable注解是用来标注一个注解在同一个地方可重复使用的一个注解
70. Java 8中的方法引用是指什么?
方法引用本质是lambda表达式
方法引用是一种更简洁易懂的lambda表达式
格式:使用操作符“::”将类(或对象)与方法名分隔开
71. Java 8中的Stream有什么作用?
72. Java 8中的函数式编程怎么用?
73. 如何获取一个Stream流对象?
74. 什么是序列化,怎么序列化,为什么序列化,反序列化会遇到什么问题,如何解决。
集合序列化:把对象转换为字节序列
反序列化:把字节序列恢复为对象的过程
怎么序列化:实现Serializable接口
为什么序列化:(1)网络上传送对象的时候、(2)想把的内存中的对象状态保存到一个文件中或者数据库中时候
反序列化问题:可能会出现序列化版本不一致
反序列化问题解决:可序列化类中定义serialVersionUID(序列化版本),为它赋予明确的值
1. 说说常见的集合有哪些?
常用三大集合:
Set:Set 集合属于单列集合,不允许包含重复元素
List:List 集合属于单列、有序的、允许元素重复、可以为 null 的集合
Map:Map 集合属于双列Key-value键值对的集合,Key不允许重复,value随意
2. Comparable和Comparator接口的区别?
Comparable 是排序接口: 若一个类实现了Comparable接口,就意味着“该类支持排序”
Comparator 是比较器接口: 该类本身不支持排序(即没有实现Comparable接口),但我们要控制该类的次序。我们可以通过“实现Comparator类来新建一个比较器”,然后通过该比较器对类进行排序
联系: Comparable相当于“内部比较器”,Comparator相当于“外部比较器”。
3. 集合使用泛型有什么优点?
集合使用泛型之后,可以达到元素类型明确的目的,避免了手动类型转换的过程,同时,也让我们更加明确容器保存的是什么类型的数据
4. List、Set、Map之间的区别是什么?
Set:Set 集合属于单列集合,不允许包含重复元素
List:List 集合属于单列、有序的、允许元素重复、可以为 null 的集合
Map:Map 集合属于双列Key-value键值对的集合,Key不允许重复,value随意(jdk1.8:HashMap在链表长度为8时会转换为红黑树)
5. 为什么Map接口不继承Collection接口?
Map和List、set不同,Map放的是key-value对,而collection提供的是一组数据(并不是键值对映射)
接口分离原则: 因为数据结构不同,数据结构不同,操作就不一样,所以接口是分开的
6. 常用的线程安全的Map有哪些?
Hashtable、synchronizedMap、ConcurrentHashMap
7. HashMap和Hashtable有什么区别?
同步性: HashTable的方法是同步的,HashMap不能同步。
继承的父类不同: HashTable是继承自Dictionary类,而HashMap是继承自AbstractMap类
key-value支持不同: HashTable的key-value都不能为null,HashMap可以
8. HashMap和TreeMap怎么选?
HashMap: HashMap可实现快速存储和检索,但其缺点是其包含的元素是无序的,这导致它在存在大量迭代的情况
TreeMap(底层使用红黑树): TreeMap能便捷的实现对其内部元素的各种排序
9. HashMap的数据结构是什么?
jdk8之前: 数组+链表
jdk8之后: 数组+红黑树(防止攻击)
10. HashMap在JDK 8中有哪些改变?
HashMap数据结构改变: 数组(单向节点,同一位置上的节点数大于7时转成 红黑树)(防止攻击)
11. HashMap是怎么解决Hash冲突的?
1、开放定址法:如果出现hash冲突,我们就重新探测一个空闲位置,再将元素插入
2、再哈希法
3、链地址法
12. HashMap是怎么扩容的?
懒加载扩容: 没有初始容量时给16个位,有且满了则扩容为2倍
13. HashMap如何实现同步?
(1)使用synchronized关键字
(2)使用锁
(3)用ConcurrentHashMap类
14. 有没有可能2个不相等的对象有相同的hashcode。
有可能:哈希冲突(碰撞)
15. ConcurrentHashMap的数据结构是什么?
分离锁(锁分段)
16. ArrayList是线程安全的吗?
不安全
17. 常用线程安全的List集合有哪些?
Vector
18. 循环删除List集合可能会发生什么异常?
for循环遍历删除元素: 删除完后list的size还有值,原因是删除某个元素后,list的大小发生了变化,而索引也在变化,所以会导致你在遍历的时候漏掉某些元素
19. ArrayList和linkedList有什么区别?
ArrayList: 底层结构是数组
linkedList:
(1)底层结构是链表
(2)插入、添加、删除操作速度更快
(3)linkedList比ArrayList更占内存
20. ArrayList和Vector有什么区别?
ArrayList:线程不安全,扩容1.5倍
Vector:线程安全,性能低,扩容2倍
21. 什么是CopyOnWriteArrayList?
CopyOnWriteArrayList: 写时复制的方法:当有新元素添加到CopyOnWriteArrayList时,先从原有的数组中复制一份出来,然后在复制出的数组做写操作,写完之后,再将原来的数组引用指向到新数组
22. 什么是fail-safe?
fail-safe(安全失败): fail-safe机制在任何对集合结构的修改都会在一个复制的集合上进行修改,不会抛出ConcurrentModificationException(并发修改异常)
23. 什么是fail-fast?
fail-fast(快速失败): fail-fast机制在遍历一个集合时,当集合结构被修改,会抛出Concurrent Modification Exception
24. fail-fast和fail-safe有什么区别?
(1)在遍历时修改集合,fail-fast会抛出Concurrent Modification Exception异常,fail-safe不会
(2)修改集合时,fail-fast不会克隆对象,fail-safe会克隆
(3)fail-fast内存开销小,fail-safe内存开销大
25. HashSet的底层实现原理是什么?
底层使用HashMap实现
26. 怎么确保一个集合不能被修改?
JVM(1)通过 Collections. unmodifiableCollection(Collection c)
(2)通过Arrays.asList创建的集合
1. JVM是什么?
Java虚拟机(常用host)
2. JVM内存区域分类有哪些?
JVM内存区域分为3大类:类装载器(ClassLoader)子系统、运行时数据区、执行引擎
3. 堆和栈的区别是什么?
(1)管理方式不同。栈由操作系统自动分配释放;堆的申请和释放工作由程序员控制
(2)分配方式不同。堆都是动态分配的,没有静态分配的堆。栈有2种分配方式:静态分配和动态分配
(3)分配效率不同。栈比堆快
4. JVM那块内存区域不会发生内存溢出?
PC计数器
5. 什么情况下会发生栈内存溢出?
方法循环调用
6. 对象都是在堆上分配的吗?
不是,也可能在栈上分配: 某些未逃逸对象可以直接在栈上分配
7. 常用的JVM参数有哪些?
-Xms:初始大小内存
-Xmx:最大分配内存
-Xss:设置单个线程栈的大小
-Xmn:设置年轻代大小
8. 什么是类加载器?
类加载器: 就是加载字节码文件(.class)的类
9. 类加载器的分类及作用?
(1)启动类加载器: 用来加载java核心类库,无法被java程序直接引用
(2)扩展类加载器: 它用来加载Java的扩展库
(3)系统(应用)类加载器: 它根据Java应用的类路径来加载Java类
(4)自定义类加载器: 通过继承 java.lang.ClassLoader类的方式实现
10. 什么是双亲委派模型?
当需要加载一个类时,子类加载器不会马上去加载,而是依次去请求父类加载器加载,直到请求到最高类加载器:启动类加载器
11. 为什么要打破双亲委派模型?
jdbc
tomcat: 每个Tomcat的webappClassLoader加载自己的目录下的class文件,不会传递给父类加载器。
12. 可以自定义一个java.lang.String吗?
不能
13. 什么是JVM内存模型?
14. JVM内存模型和JVM内存结构有什么区别?
15. 什么是指令重排序?
JAVA语言为了维持顺序内部的顺序化语义,程序指令的执行顺序有可能和代码的顺序不一致,这个过程就称之为指令的重排序
就是编译器将代码优化,导致执行顺序和代码顺序不同
16. 内存屏障是什么?
内存屏障是一条CPU指令,该指令可以对编译器(软件)和处理器(硬件)的指令重排做出一定的限制
指令重排只能保证在单线程执行下逻辑正确,在多个线程同时读写多个变量的情况下,如果不对指令重排作出一定限制,代码的执行结果会根据指令重排后的顺序产生不同的结果
就是CPU指令对指令重排做限制
17. 什么是Happens-Before(先行发生)原则?
Happens-Before约束了编译器的优化行为,虽然允许编译器优化,但是编译器优化后一定要遵循Happens-Before原则
18. GC是什么?为什么需要GC?
GC是什么: GC 是垃圾收集的意思(Gabage Collection)
为什么需要GC: Java程序员不用担心内存管理,因为垃圾收集器会自动进行管理
19. 什么是MonitorGC和FullGC?
Minor GC触发条件:当Eden区满时,触发Minor GC
FullGC:
(1)老年代空间不足
(2)方法区空间不足
(3)调用System.gc时,系统建议执行Full GC,但是不必然执行
20. 一次完整的GC流程是怎样的?
新生代GC(MinorGC)–>老年代GC(FullGC)
21. 常用的垃圾收集器有哪些?
年轻代:Parallel Scavenge、ParNew
老年代:Parallel Old、CMS
通用:G1
22. 你知道哪几种垃圾收集器,各自的优缺点,重点讲下cms和G1,包括原理,流程,优缺点。
23. 什么是内存泄漏?
内存泄漏: 内存单元逐渐被无用的数据占用
24. 为什么会发生内存泄漏?
未对作废数据内存释放,逐渐耗尽内存资源,导致系统崩溃。
25. 如何防止内存泄漏?
定时GC
尽量少用静态变量:因为静态变量是全局的,GC不会回收
26. 常用的JVM问题定位工具有哪些?
27. 你们线上应用的JVM参数有哪些。
-Xms:初始大小内存
-Xmx:最大分配内存
-Xss:设置单个线程栈的大小
-Xmn:设置年轻代大小
28. g1和cms区别,吞吐量优先和响应优先的垃圾收集器选择。
CMS: 基于“标记-清除”算法实现(效率不高)
G1:
吞吐量优先: 年轻代:Parallel Scavenge;老年代:Parallel Old
响应优先: 年轻代:ParNew;老年代:CMS
29. 怎么打出线程栈信息。
- 请解释如下jvm参数的含义:
-server -Xms512m -Xmx512m -Xss1024K
-XX:PermSize=256m -XX:MaxPermSize=512m -
XX:MaxTenuringThreshold=20XX:CMSInitiatingOccupancyFraction=80 -
XX:+UseCMSInitiatingOccupancyOnly。
1. http和https有什么区别?
https比http协议安全:HTTPS协议是由SSL+HTTP协议构建的
端口不一样:http是80,https是443。
2. get和post有什么区别?
(1)post相比get更安全
(2)get传输数据较少,post则更多
(3)get数据放在http包头,post放在http正文
3. foward(转发)和redirect(重定向)有什么区别?
数据共享: foward可以数据共享,redirect不能
地址栏显示不同:
foward是服务器将从url拿到的内容直接转发给了浏览器,浏览器不知道数据从哪来的,所以地址栏地址不变
redirect是直接告诉浏览器去访问哪个地址,所以地址栏是新的url
本质: foward是服务器行为,redirect是客户端行为
4. 什么是Servlet?
servlet是web开发中的一个标准,主要是交互式地浏览和修改数据,生成动态Web内容
狭义:Servlet是指Java语言实现的一个接口
广义:Servlet是指任何实现了这个Servlet接口的类
5. 描述一下Servlet的生命周期
加载类—>实例化(为对象分配空间)—>初始化(为对象的属性赋值)—>请求处理(服务阶段)—>销毁
6. Servlet是单例还是多例?支持异步处理吗?
单例,支持异步
7. Servlet和JSP有什么区别和联系?
联系: JSP是Servlet 的扩展,本质上就是 Servlet
区别:
(1)Servlet 适合动态输出 Web 数据和业务逻辑处理,对于 html 页面内容的修改非常不方便;Jsp 是在 Html 代码中嵌入 Java 代码,适合页面的显示
(2)内置对象不同,获取内置对象的方式不同
8. JSP有哪些常用内置对象?
Request对象、Response对象、session对象、Config对象
9. JSP有哪几种作用域?
1.pageContext:
2.request:当把变量放到request里,有效范围就是当前请求周期,就是从http请求发起,到服务器处理结束,返回响应的整个过程
3.session:把变量放到session里,有效范围就是当前会话。就是从用户打开浏览器开始到用户关闭浏览器中间的过程。
4.application:整个应用,整个应用是指从应用启动到应用结束,存活时间最长。
10. cookie和Session有什么区别?
cookie储存在客户端
session储存在服务端
11. 什么是跨域,有哪些解决方案?
并发编程跨域: 当一个请求url的 协议、域名、端口 三者之间任意一个与当前页面url不同即为跨域
解决方案:
(1)JSONP: JSONP 是跨域通信的常用方法。最大特点就是简单适用,兼容性好,缺点是只支持get请求,不支持post请求
(2)document.domain: 设置document.domain解决无法读取非同源网页的 cookie问题
(3)nginx反向代理: 是最简单的跨域方式。只需要修改 nginx 的配置即可解决跨域问题,支持所有浏览器,支持 session,不需要修改任何代码,并且不会影响服务器性能。
1. 进程和线程有什么区别?
进程是线程的容器,线程是进程的一部分
2. 什么是原子性、有序性和可见性?
原子性: 一个操作或者多个操作,要么全部执行成功要么全部执行失败
有序性: 即程序执行的顺序按照代码的先后顺序执行
可见性: 可见性是指当多个线程访问同一个变量时,一个线程修改了这个变量的值,其他线程能够立即看得到修改的值
3. 为什么要使用多线程?
1、避免阻塞(异步调用)
2、避免CPU空转
3、提升性能: 在满足条件的前提下,多线程确实能提升性能
4. 创建线程都有哪些方式?
1、通过实现Runnable接口来创建Thread线程
2、通过实现Callable接口来创建Thread线程
3、通过继承Thread类来创建一个线程
5. 什么是守护线程?
守护线程:在线程start之前,设置setDaemon(true)就表示守护线程,守护线程要守护其他的用户线程,只要没有用户线程在执行着,那么守护线程也就退出了,所以在守护线程中不要处理具体的业务逻辑。 垃圾收集器就是一个典型的守护线程,只有用户线程在使用才会产生垃圾,所以垃圾收集器也才有存在的价值
6. 线程状态都有哪几种?怎么流转的?
新建(New):创建后尚未启动的线程状态
运行(Runnable):包含 Running(位于可运行线程池中)和 Ready(位于线程池中等待调度选中获取CPU使用权)
无限期等待(Waiting):不会被分配CPU执行时间,需要显式唤醒
限期等待(Timed Waiting):在一定时间后会有系统自动唤醒
阻塞(Blocked):等待获取排它锁
结束(Terminated):已终止线程的状态,线程已经结束执行
7. 线程的优先级有什么用?
线程的优先级只能确保CPU 尽量 将执行的资源让给优先级高的线程用
8. 我们常说的JUC是什么?
java并发编程工具包:JUC是java.util.concurrent的简写
9. i++是线程安全的吗?
不是
10. join方法有什么作用?什么原理?
join()方法:这个方法的作用是先将当前线程挂起,待其他线程结束后在执行当前线程的代码
11. start和run方法的区别是什么?
start:启动线程
run:不是启动线程,只是方法调用
12. sleep和wait有什么区别?
基本差别:
sleep是Thread类的方法,wait是Object类中定义的方法
sleep()方法可以在任何地方使用
wait()方法只能在synchronized方法或synchronized块中使用
本质区别:
Thread.sleep只会让出CPU,不会导致锁行为的改变
Object.wait不仅让出CPU,还会释放已经占有的同步资源锁
13. Thread.yield方法有什么作用?
它让掉当前线程 CPU 的时间片,使正在运行中的线程重新变成就绪状态,并重新竞争 CPU 的调度权
14. 怎么理解Java中的线程中断?
- 你怎么理解多线程分组?
- 你怎么理解wait、notify和notifyAll?
- 同步和异步有什么区别?
- 什么是死锁?
- 怎么避免死锁?
- 什么是活锁?
- 什么是无锁?
- 什么是线程饥饿?
- 什么是CAS?
- 阻塞和非阻塞的区别?
- 并发和并行的区别?
- 为什么不推荐使用stop停止线程?
- 如何优雅的终止一个线程?
- synchronized同步锁有哪几种方法?
- 什么是重入锁(ReentrantLock)?
- synchronized和ReentrantLock有什么区别?
- synchronized锁的是什么?
- 什么是读写锁?
- 公平锁和非公平锁有什么区别?
- 有哪些锁优化的方式?
- 什么是偏向锁?
- 什么是轻量级锁?
- 什么是自旋锁?
- 什么是锁消除?
- 什么是锁粗化?
- 什么是重量级锁?
- 什么是线程池?
- 描述一下线程池的工作原理
- Java里面有哪些内置的线程池?
- 为什么阿里不让使用Executors创建线程池?
- 线程池的拒绝策略有哪几种?
- 如何提交一个线程到线程池?
- 线程池submit和execute有什么区别?
- 如何查看线程池的运行状态?
- 如何设置线程池的大小?
- 如何关闭线程池?
- AQS是什么?
- AQS的底层原理是什么?
- Java中的Fork Join框架有什么用?
- ThreadLocal有什么作用?
- ThreadLocal有什么副作用?
- volatile关键字有什么作用?
- volatile有哪些应用场景?
- CyclicBarrier有什么作用?
- CountDownLatch有什么作用?
- CountDownLatch和CyclicBarrier有什么区别?
- Semaphore有什么作用?
- Exchanger有什么作用?
- LockSupport有什么作用?
- Java中原子操作的类有哪些?
- 什么是ABA问题?怎么解决?
- Java并发容器,你知道几个?
- 什么是阻塞队列?
- 阻塞队列有哪些应用场景?
- Java中的阻塞队列有哪些?
- 什么是幂等性?
1. 什么是IO?
输入输出
2. 常用的IO类有哪些?
IO、BIO、NIO、AIO
3. 你在怎么理解IO、BIO、NIO、AIO?
IO: 阻塞IO
BIO: 同步阻塞IO
NIO: 同步非阻塞IO
AIO: Asynchronous IO,异步非阻塞AIO
4. 什么是比特、字节和字符?
比特: 是计算机最基本的传输单位(0和1)
字节: 1 byte (字节)= 8 bit(位、比特)
字符: 字符是指计算机中使用的文字和符号(如123、abc)
5. Java有哪几种类型的流?
输入流、输出流、字节流、字符流
6. 字节流和字符流有什么区别?
7. Java的序列化是什么?
把对象转换为字节序列
8. 怎么序列化一个对象?
实现Serializable接口
9. Java有哪两种方式实现序列化?
1、实现Serializable接口
2、实现Externalizable接口
10. 怎么控制类中的变量不被序列化?
transient: transient的作用是阻止实例中那些用此关键字修饰的的变量序列化(transient只能修饰变量,不能修饰类和方法)
transient和static修饰的属性都不能被序列化
11. 静态变量能不能被序列化?
不能
12. OSI的七层模型都有哪些?
应用层——》显示层——》会话层——》传输层——》网络层——》链路层——》物理层
13. TCP和UDP协议有什么区别?
1、TCP面向连接协议;UDP面向无连接协议
2、TCP安全可靠;UDP不安全、不完全可靠
3、TCP能传输大型数据;UDP不能
14. TCP为什么要三次握手?
Spring信道是不可靠的,但是我们要建立可靠的连接发送可靠的数据,也就是数据传输是需要可靠的
1. Spring框架是什么?
开源的轻量级框架
核心:ioc、aop
2. Spring常用的注解有哪些?
@Autowired、@Configuration、@Bean、@Service、@Controller、@Component
3. 你用过spring的哪些?Spring框架有哪些好处?
IOC:依赖注入,不用人为控制
AOP:
4. Spring由哪些主要模块组成?
1、核心容器
2、Spring Aop
3、Spring Dao
4、Spring MVC
5、Spring Web
6、Spring ORM
7、Spring Context
5. Spring IOC容器是什么?
控制反转:依赖倒置,将资源由第三方管理
6. Spring IOC有哪些好处?
解耦:1、资源集中管理
2、降低了使用资源双方的依赖程度
7. BeanFactory和ApplicationContext有什么区别?
ApplicationContext 是 BeanFactory接口的子接口
BeanFactory不支持AOP等插件,Application支持
8. Spring的依赖注入有几种方式?
set注入、构造器注入、p空间注入
9. Spring Bean的实例化方式
构造器、静态工厂、实例工厂
10. beanfactory与factorybean的区别?工厂bean的获取使用&获取
ApplicationContext 是 BeanFactory接口的子接口
11. Spring Bean支持哪几种作用域?
request、session、global session、prototype、singleton
12. Spring Bean生命周期是怎样的?
13. Spring Bean是线程安全的吗?
spring bean默认是单例的,线程不安全
14. Spring怎么注入Java集合类型?
list类型用于注入一列值,允许有相同的值。
set类型用于注入一组值,不允许有相同的值。
map类型用于注入一组键值对,键和值都可以为任意类型。
props类型用于注入一组键值对,键和值都只能为 String 类型。
15. Spring装配是指什么?
当 bean 在 Spring 容器中组合在一起时,它被称为装配或 bean 装配。
16. Spring自动装配有哪些方式?
byType: 按类型装配(在ioc容器中按类型匹配,匹配到多个则按名称匹配,名字和primary="true"同时存在时,优先primary=“true”)
byName: 按名字装配(在ioc容器中去找 name对应的这个对象)
constructor: 按构造器装配(使用构造器注入,在ioc容器中先按类型匹配,类型匹配到多个的就按名称匹配)
default: 默认装配()
no: 不自动装配
17. Spring自动装配有什么局限性?
模糊性:自动专配没有手动装配精确
无法对基本数据类型装配
18. spring的循环依赖怎么解决的?
三级缓存
19. Spring AOP是什么?AOP的配置?AOP常见术语?(切面、通知、切入点、连接点)
AOP:面向切面编程
20. Spring AOP有什么作用?你在哪些地方使用了AOP?
21. Spring AOP有哪些实现方式?
22. Spring AOP和AspectJ AOP有什么区别?
Spring AOP 属于运行时增强,而 AspectJ 是编译时增强
Spring AOP 基于代理(Proxying),而 AspectJ 基于字节码操作(Bytecode Manipulation)。
AspectJ 相比Spring AOP功能更加强大,但spring aop更简单
23. Spring支持哪些事务管理类型?
1、编程式
2、声明式
24. Spring框架用了哪些设计模式?
所有
25. Spring MVC框架有什么用?
简化Web开发
26. Spring MVC DispatcherServlet的工作流程?
27. Spring MVC常用的注解有哪些?
@Controller、@RestController、@RequestMapping、@PathVariable、@RequestBody、SessionAttributes
28. springmvc异常处理
Spring Bootspringmvc异常处理器分为两大类:
1、系统内置的
2、自定义的
1. Spring Boot是什么?
简化spring应用开发的框架
spring技术栈的一个大整合
2. Spring Boot有哪些优缺点?
(1)使配置变得简单:spring boot提供许多默认配置,当然也提供自定义配置,且只有一个配置文件application.properties/application.yml
(2)使部署变得简单:可以打成一个jar包,然后通过java -jar xxx.jar来运行
(3)使编码变得简单
(4)使监控变得简单
3. Spring Boot的核心配置文件有哪些?
(1)bootstrap (.yml 或者 .properties)
(2)application (.yml 或者 .properties)
4. Spring Boot的核心注解是哪个?
是@SpringBootApplication:它主要由@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan这三个构成
5. Spring Boot有那两种方式集成?
6. Spring Boot的自动装配原理是什么?
7. Spring Boot的starter是什么?
starter可以理解成pom配置了一堆jar组合的空maven项目,用来简化maven依赖配置
8. Spring Boot有哪几种运行方式?
(1) 直接运行main方法类
(2) 打包用命令或者放到容器中运行
(3) 用 Maven/Gradle 插件运行
9. Spring Boot支持哪些日志框架?
Slf4j、Logback
10. Spring Boot有哪几种热部署方式?
(1) Spring Loaded
(2) Spring-boot-devtools
11. Spring Boot配置加载顺序是怎样的?
yml>properties。有相同配置时,使用properties里的配置,后读取的优先级高
12. Spring Boot如何定义不同环境配置?
通过application-自定义.properties,来定义不同配置环境,如:
application-dev.properties
application-test.properties
application-prod.properties
通过spring.profiles.active=自定义的环境,来激活定义的不同环境配置
13. Spring Boot怎么兼容老的Spring项目?
使用 @importResource 注解导入老 Spring 项目配置文件(例:@importResource(locations = {“classpath:spring.xml”}))
14. Spring Boot应用有哪些保护手法?
(1)在生产中使用HTTPS
(2)升级到最新版本
(3)使用Snyk检查依赖关系
(4)启用CSRF保护
15. Spring Boot怎么注册事件监听器?
使用@EventListener注解
16. Spring Boot怎么解决跨域问题?
(1)@CrossOrigin注解
(2)Spring Boot 通过实现WebMvcConfigurer接口,然后重写addCorsMappings方法解决跨域问题
(3)一个http请求,先走filter,到达servlet后才进行拦截器的处理,如果我们把cors放在filter里,就可以优先于权限拦截器执行
17. Spring Boot 2.x 有什么新特性?
(1)不再支持JDK7及以下版本
(2)大大简化了安全自动配置
(3)全新的执行器架构,支持 Spring MVC, WebFlux 和 Jersey
18. SpringBoot内置容器
Spring CloudTomcat、Jetty和Undertow三种web容器
1. Spring Cloud和Spring Boot的关系
Spring Cloud基于Spring Boot
2. Spring Cloud有哪些重要的组件
nacos、feign、sentinel、geteway
3. Spring Cloud和Dubbo的区别
1、定位不同:SpringCloud定位为微服务架构下的一站式解决方案;Dubbo关注点主要在于服务的调用和治理
2、生态环境不同:SpringCloud生态体系更加完善
4. Spring Cloud版本号怎么理解
5. Spring Cloud Eureka保护机制是什么
就是你的注册的服务就算停了,注册在Eureka 的信息仍然不会丢失。 而是保存一段时间
自我保护机制,就是为了避免因为网络波动,两个连接暂时断开连接了,虽然不能通信,但是其实有可能 服务还在,那么 Eureka 就多等上一点时间
6. Spring Cloud注册中心有哪些实现方案
nacos、zookeeper、eureka
7. Spring Cloud配置中心有哪些实现方案
Spring Cloud Config、Nacos、apollo
8. Spring Cloud如何保证微服务调用安全性
粗粒度:黑白名单
细粒度:token
9. Spring Cloud中的Ribbon是什么
负载均衡
10. Spring Cloud中的Feign是什么
远程调用
11. Spring Cloud Feign和Ribbon的区别
Feign 是在 Ribbon 的基础上进行了一次改进,是一个使用起来更加方便的 HTTP 客户端
12. Spring Cloud Gateway和Zuul怎么选
Spring Cloud Gateway使用起来比 Zuul 更简单,配置更方便,性能好
13. Spring Cloud Alibaba是什么
Mybatis(1)是Spring Cloud的子项目
(2)致力于提供微服务开发的一站式解决方案
1. Mybatis是什么框架?
mybatis就是一个封装来jdbc的持久层框架
2. Mybatis和ORM有什么区别?
Mybatis:将java方法与sql语句关联起来
ORM:将java对象与数据库关联起来
3. Mybatis为什么是半自动ORM映射?
要手动写sql语句
4. Mybatis框架的应用场景?
特点:mybatis直接编写sql,是一个足够灵活的DAO层解决方案。
应用场景:对性能要求高,或需求变化多的项目适用
5. Mybatis有哪些优缺点?
优点:简单易上手。
与JDBC相比,减少了代码量。
解除sql与代码的耦合。
提供XML标签,支持编写动态SQL语句。(if,where,trim,set,choose标签)
缺点:
SQL语句的编写工作量较大
SQL语句依赖于数据库,导致数据库移植性差
6. Mybatis和Hibernate有什么区别?
Hibernate是全自动ORM,Mybatis是半自动ORM。(Hibernate自动生成sql,mybatis手写sql,在写复杂查询时,Hibernate实现比Mybatis复杂的多)
7. Mybatis有哪几种SQL编写形式?
三种:(1)XML文件中写SQL
(2)注解式的SQL定义( 如果想要的是动态SQL,那么就加上
8. Mybatis支持哪些传参的方法?
mybatis支持“4种”传参:@Param注解传参法、Map传参法、Java Bean传参法、顺序传参法
9. Mybatis的$和#传参的区别?
#:预编译。$:不会预编译。
#{}将传入的参数当成一个字符串,会给传入的参数加一个双引号
${}将传入的参数直接显示生成在sql中,不会添加引号
10. Mybatis可以映射到枚举类吗?
可以。不单可以映射枚举类,Mybatis 可以映射任何对象到表的一列上。
11. Mybatis怎么封装动态SQL?
12. Mybatis的trim标签有什么作用?
trim标签一般用于除去sql语句中多余的and关键字、逗号,或拼接前后缀
13. Mybatis怎么实现分页?
Mybatis使用RowBounds对象进行分页。它是针对ResultSet结果集执行的内存分页,而非物理分页,可以在sql内直接书写带有物理分页的参数来完成物理分页功能,也可以使用分页插件来完成物理分页。
14. Mybatis的流式查询有什么作用?
流式查询的好处是能够降低内存使用。(流式查询指的是查询成功后不是返回一个集合而是返回一个迭代器,应用每次从迭代器取一条查询结果)
15. Mybatis模糊查询LIKE语句应该怎么写?
模糊查询like语句写法:(1)使用bind标签、(2)使用CONCAt()函数,CONCAt(’%’,#{question},’%’)、(3)"%"#{question}"%"、(4)’%${question}%’
16. Mybatis配置文件中的SQL id是否能重复?
不同的XML文件,如果配置了 namespace,那么 id 可以重复;如果没有配置 namespace,那么 id 不能重复
17. Mybatis如何防止SQL注入?
#{}
18. Mybatis如何实现主键回填?
主键回填:(1)在插入节点上添加 useGeneratedKeys 属性
(2)利用MySQL自带的 last_insert_id() 函数查询刚刚插入的id
19. Mybatis使用了哪些设计模式?
mybatis设计模式:装饰者、迭代器、适配器、单例、代理、工厂、组合、模板方法、Builder
20. Mybatis的缓存机制有什么作用?
缓存机制:用于减轻数据压力,提高数据库性能
21. Mybatis一级缓存和二级缓存有什么区别?
22. Mybatis-plus和TK-Mybatis是什么框架?
mybatis-plus是mybatis的增强,tk-mybatis是
23. Mybatis的实现原理
24. Mybatis插件原理
- 主键和外键有什么区别?
- 怎么理解三大范式和反范式?
- 范式和反范式有什么优缺点?
- 什么是事务?
- 事务有什么特性?
- 什么是脏读、幻读和不可重复读?
- MySQL有哪些事务隔离级别?
- MySQL默认的事务隔离级别是什么?
- 什么是索引?
- 索引有什么用?
- 索引为什么能提高查询效率?
- 索引的设计原则有哪些?
- 什么情况下应不建或者少建索引?
- MySQL索引的种类有哪些?
- MySQL索引最左匹配原则怎么理解?
- MySQL数据库引擎怎么选择?
- MySQL引擎MyISAM和InnoDB有什么区别?
- char和varchar有什么区别?
- MySQL中的drop、delete和truncate有什么区别?
- MySQL的高可用方案有哪些?
- MySQL为什么不建议默认 NULL值?
- MySQL为什么建议选择最小数据类型?
- 怎么理解数据库中的乐观锁和悲观锁?
- MySQL中的MVCC指的是什么?
- MySQL InnoDB的MVCC实现机制?
- MySQL中的MVCC支持哪些事务隔离级别?
- MySQL支持哪三种级别的锁?
- MySQL InnoDB支持什么锁?
- MySQL中的表锁有哪些?
- MySQL中的行锁有哪些?
- MySQL中的意向锁有哪些分类?有什么作用?
- MySQL中的意向锁是行锁还是表锁?
- MySQL中的自增锁有什么作用?
- MySQL中的行锁锁的是什么?
- MySQL中的行锁实现的算法都有哪些?
- MySQL什么情况下会发生死锁?
- MySQL死锁怎么排查?
- MySQL如何解决死锁?
- MySQL如何避免死锁?
- MySQL和MariaDB有什么区别?
- MySQL日志undo和redo有什么区别?
- 什么是表分区?
- 表分区有什么好处?
- 表分区与分表的区别?
- MySQL支持的分区类型有哪些?
- MySQL分区表有哪些限制因素?
- MySQL为什么要分库分表?
- MySQL分库分表如何实现?
- MySQL分库分表常用工具有哪些?
- MySQL分库分表会产生哪些问题?
- MySQL批量插入,如何不插入重复数据?
1. 什么是SOA
2. SOA和微服务架构有什么区别
不同维度的拆分
3. 什么是CAP定理
CP:一致性
AP:高可用
4. 什么是base理论
高可用,数据基本一致
5. 什么是RMI
远程过程调用
6. 什么是RPC
远程过程调用
7. RMI和RPC有什么区别
RPC 支持多种语言,而 RMI只支持 Java 写的应用程序。
8. 分布式系统下会遇到哪些问题
调用链路过长
9. 分布式Session共享怎么实现
redis
10. 分布式唯一ID怎么实现
雪花算法
11. 什么是分布式事务
拆库就会有分布式事务
12. 分布式事务的解决方案有哪些
(1)seat:AT、TCC、SAGA
(2)利用消息中间件、最终消息一致
13. 什么是微服务
将软件或应用拆分为一系列独立的服务(高内聚,低耦合)
14. 微服务架构有什么优势
(1)服务的独立部署,耦合性低
(2)各个服务可以快速启动
(3)服务可以动态按需扩容
15. 微服务架构有什么缺点
(1)分布式部署,调用的复杂性高
(2)测试、运维难度提升
16. 什么是服务治理
服务治理是主要针对分布式服务框架的微服务,处理服务调用之间的关系、服务发布和发现、故障监控与处理,服务的参数配置、服务降级和熔断、服务使用率监控等。
17. 什么是服务降级
服务降级是在服务器压力陡增的情况下,根据当前业务情况,关闭某些服务接口或者页面,以此释放服务器资源以保证核心任务的正常运行
18. 服务降级的方案有哪些
(1)流量控制,降低访问量
(2)关闭部分不重要的服务接口或页面,释放资源以保证核心任务的正常运行
19. 什么是服务雪崩
一条服务链路中,某个服务因各种原因响应或请求超时,导致整条链路崩溃,这就是服务雪崩。(熔断可以解决服务雪崩)
20. 什么是服务熔断
消息队列服务压力过大而导致响应变慢或失败,为了保护系统整体的可用性,暂时切断服务调用。这种牺牲局部,保全整体的措施就叫做熔断
1. 消息队列有什么用
解耦、削峰(依顺序写,以达到削峰目的)、异步
2. 消息队列有哪些应用场景
削峰、异步、解耦
3. 消息队列有什么优缺点
优点:解耦、削峰、异步
缺点:(1)引入MQ,系统复杂性提高:信息消费问题、数据丢失问题
(2)系统可用性降低:MQ一挂,系统全崩
(3)必须是异步
4. 消息队列怎么选型
rabbitMQ:快
kafka:吞吐量大,会丢消息(可以配置不丢消息,但吞吐量会下降)
5. 有了多线程,为什么还要消息队列
(1)多线程cpu消耗大一些:用线程的话,会占用主服务器资源,消息队列的话,可以放到其他机器上运行
(2)消息队列稳定:程序挂了之后,写入外部消息队列的数据依旧是保存的
6. 消息队列和多线程应该怎么选择
选择消息队列:(1)批量发送邮件时,数据量庞大,如果使用多线程对系统不安全
(2)解耦更充分,架构更合理
7. 使用消息队列会遇到哪些问题
(1)引入MQ,系统复杂性提高:信息消费问题、数据丢失问题…
(2)系统可用性降低:MQ一挂,系统全崩
(3)必须是异步
8. 消息队列如何处理消息重复消费问题
幂等
9. 消息队列为什么会产生消息丢失
(1)发送消息到MQ时,网络等各种问题会导致MQ没有收到消息
(2)MQ宕机
10. 消息队列如何解决消息丢失问题
1、消息要成功到MQ(MQ收到消息之后让MQ发个ack)
2、MQ要持久化
3、消息消费之后,手动ACK
11. 消息队列如何保证消息顺序消费
把要发送的数据全都放到一个队列
12. 消息延迟推送有哪些应用场景
自动关单:订单超时取消支付
13. 拉模式和推模式
消息队列一般是拉模式(推模式可能会导致消息堆积)
14. 什么是消息持久化
把数据保存到可永久保存的存储设备中
15. 消息持久化有什么缺点
影响性能
16. 什么是JMS
java消息服务
17. 什么是RabbitMQ
RabbitMQ是一个消息代理,它接受和转发消息。
18. RabbtiMQ有哪些优点
削峰、异步、解耦
19. RabbitMQ有哪些重要的组件
生产者、交换器、队列、消费者、信道、消息代理
20. RabbitMQ有哪些重要的角色
生产者、消费者、代理
21. RabbitMQ交换器类型有哪些
RabbitMQ 常用的交换器类型有:fanout 、direct、topic 、headers 这四种。
AMQP 协议里还提到另外两种类型::System 和自定义
22. RabbitMQ消息基于什么传输
信道
23. RabbitMQ怎么避免消息丢失
消息持久化
24. RabbitMQ支持事务消息吗
支持,但不支持分布式事务
25. RabbitMQ事务消息在什么情况下生效
26. RabbitMQ接收到消息之后必须消费吗
不必须
27. RabbitMQ如何确保每个消息能被消费
手动ACK
28. RabbitMQ消息持久化的条件
队列要持久化、消息持久化、交换机持久化
29. RabbitMQ中的死信队列是什么
当队列里的消息在一定条件下处理不成功,就会丢入死信队列,死信队列将死信重新丢入交换机,交换机重新丢给别的队列处理
30. RabbitMQ队列中的消息是否有数量限制
有限制
31. RabbitMQ怎么实现消息延迟推送
问:你用过哪些MQ,这个MQ有哪些组件,什么是可靠消息,重复消息怎么解决死信队列
ZookeeperRabbitMQ;生产者、消费者、交换机、队列、信道;消息要保证发送到交换机、交换机保证将信息放入队列、消费者保证消费了队列中的消息;幂等
1. Zookeeper是什么
分布式协调
2. Zookeeper有哪些特性
天生CP模型
3. Zookeeper有哪些应用场景
分布式协调,选主,注册中心
4. Zookeeper支持哪些数据节点类型
持久化节点,瞬时节点
5. Zookeeper常用命令有哪些
6. Zookeeper服务器有哪几种角色
follower、leader、observer
7. Zookeeper服务器有哪几种工作状态
8. Zookeeper支持哪些Java客户端
zkclient
9. Zookeeper有几种部署模式
单机部署
10. Zookeeper集群最少要几台机器,为什么
3台,必须超过半数
11. Zookeeper集群支持动态添加机器吗
支持
12. Zookeeper是如何实现分布式锁的
13. Zookeeper中的文件系统怎么理解
14.怎么理解ZAB协议
15. ZAB和Paxos算法的联系和区别
ZAB是Paxos的简易实现版
1. Redis是什么
key-value数据库
2. Redis有哪些应用场景
缓存、分布式锁
3. Redis有什么优势
速度快、支持数据类型丰富、支持事务
4. Redis为什么这么快
存内存、单线程(处理线程是单线程)
5. Redis主要消耗什么物理资源
网络
6. Redis到底是单线程还是多线程
单线程清除、删除,多线程
7. Redis和Mencache有什么区别
Mencache:专门用来做缓存,数据类型只支持string 不能持久化
缺点:单机 (没有分片)Redis 支持多个数据类型
8. Redis支持哪些数据类型
string、hash、set、list、sortlist
9. Redis默认支持多少个数据库,怎么修改
16个,在配置文件改
10. Redis最大key大小是多少
512M
11. Redis String值最大存储多少
512M
12. Redis事务有什么作用
支持事务 非常弱
13. Redis事务相关的命令有哪几个
MULTI、EXEC、DISCARD和WATCH
14. Redis持久化有什么用
为了快速恢复缓存
15. Redis有哪几种持久化方式
两种:RDB、AOF
16. Redis持久化方式如何选择
RDB:RDB 持久化机制,是对 redis 中的数据执行周期性的持久化。
AOF:AOF 机制对每条写入命令作为日志,以 append-only 的模式写入一个日志文件中,在 redis 重启的时候,可以通过回放 AOF 日志中的写入指令来重新构建整个数据集
选择:redis 支持同时开启开启两种持久化方式,可以综合使用 AOF 和 RDB 两种持久化机制
17. Redis内存满了怎么办
Redis有淘汰策略
18. Redis有哪些淘汰策略
1、不淘汰
2、尝试回收使用最少的键
3、随机回收键
4、回收在过期集合中的键
5、随机在过期集合中回收键
19. Redis如何提高多核CPU的利用率
把 Redis 实例和 CPU 物理核绑定了,让一个 Redis 实例固定运行在一个 CPU 物理核上
20. Redis如何实现大量数据插入
批量插入命令
21. Redis中的管道有什么用
22. Redis有哪些高可用的方案
哨兵、redis集群
23. Redis集群如何选择数据库
不能选择数据库,默认在0数据库
24. Redis中的哈希槽怎么理解
25. Redis支持的Java客户端有哪些
redisson、
26. Redisson是什么框架
操作redis的框架,封装了很多工具,提供了分布式锁
27. Redis和Redisson有什么关系
redisson封装了很多redis的工具包
28. Jedis和Redisson对比有什么优缺点
29. Redis如何设置密码访问
修改redis.conf配置文件,找到requirepass这个参数
30. Redis如何分析慢查询操作
记录查询执行时间
31. 什么是缓存预热和热备
预热:新的缓存中没有任何缓存数据,所以在系统上线之前就把要缓存的热点数据加载到缓存中
热备:当一台缓存服务器不可用时能实时切换到备用缓存服务器,不影响缓存使用
32. 什么是缓存雪崩,如何解决
redis宕机之后,所有请求将数据库挤爆,导致链路崩溃
解决:1、事前:缓存备份,服务降级 2、事后:恢复缓存
33. 什么是缓存穿透,如何解决
缓存穿透:故意大量查询不存在的key,就会对数据库造成很大的压力。
解决:(1)数据库没有相应的key,将key放入缓存设置为空
(2)布隆过滤器
(3)布谷鸟过滤器
34. 什么是缓存击穿,如何解决
缓存击穿:缓存过期导致大量线程访问数据库(数据库中有该数据)
解决:分布式锁(双重检测)
36. 什么是缓存抖动,如何解决
37. 什么是缓存无底洞现象,如何解决
38. Redis和数据库双写一致性问题如何解决
三种解决:
1、先更新数据库,再更新缓存
2、先删除缓存,再更新数据库
可能出现的问题:缓存删除了,数据库还没来得及更新,这时又来了新的访问,导致拿到旧数据,又把旧数据写到了缓存中
3、先更新数据库,再删除缓存
可能出现的问题:数据库更新了,缓存删除失败
两种方案:
(1)如果删除失败,隔2秒再删除一次,如果实在没删除,有过期来兜底
(2)先操作数据库,mysql就写binlog,就把binlog中的数据提取出来(canel),丢到mq中,由另外的服务从mq消费这条消息
39. Redis有哪些危险命令,如何防范
flushdb:删除 Redis 中当前所在数据库中的所有记录,并且此命令从不会执行失败
flushall:删除 Redis 中所有数据库中的所有记录,不止是当前所在数据库,并且此命令从不会执行失败。
40. Redis如何统计独立用户访问量
Dubbohyperloglog
- Dubbo是什么框架
- 为什么要用Dubbo
- Dubbo里面有哪几种节点角色
- Dubbo必须依赖的包有哪些
- Dubbo支持哪些注册中心,推荐哪种
- Dubbo内置了哪几种服务容器
- Dubbo需要Web容器吗
- Dubbo的服务注册和发现流程
- Dubbo服务暴露的过程
- Dubbo有哪几种配置方式
- Dubbo核心的配置有哪些
- Provider可以配置Consumer哪些属性
- Dubbo启动时依赖的服务不可用会怎么样
- Dubbo都支持什么协议,推荐哪种
- Dubbo支持什么通信框架,默认哪种
- Dubbo支持的序列化框架有哪些
- Dubbo有哪些集群容错方案,默认哪种
- 有多个同名服务时,如何连接指定的服务
- Dubbo支持服务多协议吗
- Dubbo服务上线怎么兼容旧的版本
- Dubbo一个服务接口有多种实现怎么区分
- Dubbo可以对结果进行缓存吗
- Dubbo服务之间的调用是阻塞的吗
- Dubbo支持分布式事务吗
- Dubbo telnet命令能做什么
- Dubbo支持服务降级吗
- Dubbo如何优雅的停机
- Dubbo服务提供者失效自动下线是什么原理
- Dubbo服务调用链过长如何解决
- Dubbo读写容错策略怎么做
- Dubbo的管理控制台能做什么
- Dubbo能继承Spring Boot吗
- Dubbo使用过程中都遇到了什么问题
- Dubbo的源码你读过吗
- Dubbo 和 Spring Cloud哪个好
- Dubbo 你们推荐的用法有哪些
- 你怎么理解Dubbo SPI
- Dubbo之外,你还了解别的RPC框架吗
- Dubbox是什么,和Dubbo有什么区别



