答案长期更新 有的懒得写 有的还不知道 如果有大神补充 可以评论或者私信 谢谢

1. Java 基础

1. JDK 和 JRE 有什么区别?

    A: JDK就是Java Development Kit, JRE就是Java Runtime Enviroment, JRE是个运行环境,JDK是个开发环境,如果你电脑安装了JDK,那么你不仅可以开发Java程序,也同时拥了运行Java程序的平台。如果你电脑安装了JRE,那么你的电脑只能运行Java程序

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

    A: 对于基本数据类型来说,== 是比较他们的值是否相等,对于引用数据类型来说 == 和equals 是比较他们的地址是否相同,equals 是Object中的方法 所有的对象都有,String 和Integer之类的类是重写了equals来达到比较比值得目的

3. 两个对象的 hashCode() 相同,则 equals() 也一定为 true,对吗?

A: hashCode相同 他们的值不一定相同,这里如果要用equals比较的话要重写这个方法,如果两个对象equals 相同(重写了该方法)但是没有重写hashcode方法,这两个对象的hashcode仍然不相同。所有说重写equals要重写他们的hashcode方法

4. final 在 java 中有什么作用?

A: final 是java中的关键字 用来修饰变量表示改变量是常量不能改变,修改方法表示该方法不能被继承他的子类重写,修饰类表该类不能被继承

5. java 中的 Math.round(-1.5) 等于多少?

A: Math.rand()方法是用来进行取整运算的 当参数>0时采用四舍去五入 Math.rand(1.5)==2,Math.rand(1.49)==1对于复数Math.rand(-1.5)==-1,Math.rand(-1.51)==-2

6. String 属于基础的数据类型吗?

    A: Java中的基本数据类型有 整形: byte 1字节8位,short 2字节,int 4字节,long 8字节;字符型 :char 2字节,浮点型 float 4字节,double 8字节;布尔型 boolen 在jvm规范中说到占一个int的大小,而boolen[]占一个byte字节,String是引用数据类

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

    A: 常见的String,StringBuffer,StringBuild,三者都是用char[]来在底层维护的(String 维护的用final修饰所以不能append),三者都被声明为final,三者的字符串操作购会返回新的Stirng对象差别不大,但是Strng的连接每次都会创建一个新的String所以不好,但是StringBuffer和StringBuilder有append方法,所以不会创建一个新的char[],StringBuffer和StringBuilder都是继承自AbstractStringBulder但是StringBuffer在实现方法时都用了synchronized修饰保证了线程同步

8. String str="i"与 String str=new String(“i”)一样吗?

A: 不一样 第一种是先从常量池中获取,如果有就直接获取该引用,而第二种是直接在堆内存中创建一个对象,对一种是在方法区创建的,jdk1.7之前 jdk1.8之后将方法区取消,把常量池和静态变量移动到堆中。

9. 如何将字符串反转?

A: String s = "12345678";

char[] chars = s.toCharArray();

char[] newChar = new char[chars.length];

for (int i = 0; i < chars.length; i++) {

newChar[i] = chars[chars.length-i-1];

}

String newS = new String(newChar);

System.out.println(newS);

10. String 类的常用方法都有那些?

A: String.spilt() 字符串分割,subString(start,end)字符串截取 indexOf()字符定位 lastIndexOf() trim()去除左右空白 contains()判断是否包含 replaceAll()替换所有

11. 抽象类必须要有抽象方法吗?

A: 不一定只要是abstract修饰就可以,但是如果含有抽象方法,那就一定要声明是抽象类

13. 抽象类能使用 final 修饰吗?

A: 不能,因为final修饰的类不能被继承,而final修饰的类不能被继承

14. 接口和抽象类有什么区别?

A: 关键字不同,接口使用abstract修饰抽象类使用abstract class修饰,接口不能含有实现的方法,抽象类可以含有实现的方法,一个类可以实现多个接口,只能继承一个抽象类

15. java 中 IO 流分为几种?

A: javaIO流分为字符流和字节流 字符流 是以Reader和Writer为父类,常用的有BufferReader 能一次读一行(操作文本)创建时要以Reader的一个实现类创建,一般有FileReader

FileReader f = new FileReader(""); BufferReader b = new BufferReader(f);字节流是以字节为单位来读取的,常用的FileInputStream f = new FileInputStream(“”);

读取的时候要依赖byte[1024]数组,能对图片进行读取和写入。

16. BIO、NIO、AIO 有什么区别?

A: https://qindongliang.iteye.com/blog/2018539

17. Files的常用方法都有哪些?

A: 常用的getParentFile获取文件listFiles()获取子文件 isDirectory()判断是否是文件夹isFile()判断是是否是文件getName()获取文件名字getPath/getAbsolutePath获取文件路径等。

2. 容器

18. java 容器都有哪些?

A: java的集合分为继承自collection的list和set还有map

19. Collection 和 Collections 有什么区别?

A: Collection 是一个集合接口(集合类的一个顶级接口)。它提供了对集合对象进行基本操作的通用接口方法。Collections则是集合类的一个工具类/帮助类,其中提供了一系列静态方法,用于对集合中元素进行排序、搜索以及线程安全等各种操作

20. List、Set、Map 之间的区别是什么?

A: List Set都是继承自Collection接口,而Map不是,List是可以有重复的,set是不能有重复的,map的key是不能有重复的。

21. HashMap 和 Hashtable 有什么区别?

A: HashMap是非线程安全的,HashTable是线程安全的。HashMap的键和值都允许有null值存在,而HashTable则不行。因为线程安全的问题,HashMap效率比HashTable的要高。Hashtable是同步的,而HashMap不是。因HashMap更适合于单线程环境,而Hashtable适合于多线程环境。一般现在不建议用HashTable, ①是HashTable是遗留类,内部实现很多没优化和冗余。②即使在多线程环境下,现在也有同步的ConcurrentHashMap替代,没有必要因为是多线程而用HashTable。

22. 如何决定使用 HashMap 还是 TreeMap?

A: TreeMap能够把它保存的记录根据键排序,默认是按升序排序,也可以指定排序的比较器。当用Iteraor遍历TreeMap时,得到的记录是排过序的。TreeMap的键和值都不能为空。一般情况下,我们用的最多的是HashMap,HashMap里面存入的键值对在取出的时候是随机的,它根据键的HashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度。在Map 中插入、删除和定位元素,HashMap 是最好的选择。TreeMap取出来的是排序后的键值对。但如果您要按自然顺序或自定义顺序遍历键,那么TreeMap会更好。LinkedHashMap 是HashMap的一个子类,如果需要输出的顺序和输入的相同,那么用LinkedHashMap可以实现,它还可以按读取顺序来排列,像连接池中可以应用

23. 说一下 HashMap 的实现原理

    A: HashMap的底层是用hash数组和单向链表实现的 ,当调用put方法是, 首先计算key的hashcode,定位到合适的数组索引,然后再在该索引上的单向链表进行循环遍历用equals比较key是否存在,如果存在则用新的value覆盖原值,如果没有则向后追加。HashMap的两个重要属性是容量capacity和加载因子loadfactor,默认值分布为16和0.75,当容器中的元素个数大于 capacity*loadfactor时,容器会进行扩容resize 为2n,在初始化Hashmap时可以对着两个值进行修改,负载因子0.75被证明为是性能比较好的取值,通常不会修改, 那么只有初始容量capacity会导致频繁的扩容行为,这是非常耗费资源的操作,所以,如果事先能估算出容器所要存储的元素数量,最好在初始化时修改默认容量capacity,以防止频繁的resize操作影响性能。

24. 说一下 HashSet ,TreeSet, LinkedHashSet的实现原理?

A:1、HashSet对速度进行了优化,提供了最快的查找速度,无特殊说明一般默认是用这个Set放到HashSet中的元素要保证唯一,应该重写hashCode方法和equals方法,但是不能保证元素有序,底层实现是维护一个hashMap2、TreeSet底层实现是红黑树(自平衡二叉树),不但能保证元素唯一,还能元素保证有序,存放到TreeSet中的元素应该实现Comparable接口,重写compareTo方法,或者在创建treeSet时候传入一个比较器,否则会抛出ClassCastException 按照该方法指定的规则维持元素的顺序3、LinkedHashSet,继承了hashSet,底层实现是linkhashmap,还能按照插入元素的顺序维持元素顺序

25. ArrayList 和 LinkedList 的区别是什么?

A:ArrayList和LinkedList都实现了List接口,他们有以下的不同点:1.ArrayList是基于索引的数据接口,它的底层是数组Array。它可以以O(1)时间复杂度对元素进行随机访问。与此对应,LinkedList是以元素列表的形式存储它的数据,每一个元素都和它的前一个和后一个元素链接在一起,在这种情况下,查找某个元素的时间复杂度是O(n)。2. 相对于ArrayList,LinkedList的插入,添加,删除操作速度更快,因为当元素被添加到集合任意位置的时候,不需要像数组那样重新计算大小或者是更新索引。3. LinkedList比ArrayList更占内存,因为LinkedList为每一个节点存储了两个引用,一个指向前一个元素,一个指向下一个元素。

26. 如何实现Array和 List 之间的转换?

A:List<String> list= Arrays.asList(strings); String[] strings = (String[]) list.toArray();

27. ArrayList 和 Vector 的区别是什么?

    A:Vector与ArrayList一样,也是通过数组实现的,不同的是它支持线程的同步,即某一时刻只有一个线程能够写Vector,避免多线程同时写而引起的不一致性,但实现同步需要很高的花费,因此,访问它比访问ArrayList慢。Vector允许用户设置capacityIncrement,这样在每次需要扩充数组的size的时候, Vector会尝试按照预先设置的capacityIncrement作为增量来增加空间。如果capacityimcrement并未设定,默认是增加一倍。

28. Array 和 ArrayList 有何区别?

A:1.Array数组可以包含基本类型和对象类型, ArrayList却只能包含对象类型。但是需要注意的是:Array数组在存放的时候一定是同种类型的元素。ArrayList就不一定了,因为ArrayList可以存储Object。2.空间大小比较: 它的空间大小是固定的,空间不够时也不能再次申请,所以需要事前确定合适的空间大小。ArrayList的空间是动态增长的,如果空间不够,它会创建一个空间比原空间大一倍的新数组,动态增长的时候用到了Array.copyOf()方法 然后将所有元素复制到新数组中,接着抛弃旧数组。这里可以看出来ArrayList内部维护的是一个Array,而且,每次添加新的元素的时候都会检查内部数组的空间是否足够。(比较麻烦的地方)。3.方法上的比较:ArrayList作为Array的增强版,当然是在方法上比Array更多样化,比如添加全部addAll()、删除全部removeAll()、返回迭代器iterator()等。4.适用场景: 如果想要保存一些在整个程序运行期间都会存在而且不变的数据,我们可以将它们放进一个全局数组里,但是如果我们单纯只是想要以数组的形式保存数据,而不对数据进行增加等操作,只是方便我们进行查找的话,那么,我们就选择ArrayList。5.而且还有一个地方是必须知道的,就是如果我们需要对元素进行频繁的移动或删除,或者是处理的是超大量的数据那么,使用ArrayList就真的不是一个好的选择,因为它的效率很低,使用数组进行这样的动作就很麻,那么,我们可以考虑选择LinkedList。

29. 在 Queue 中 poll()和 remove()有什么区别?

    A:remove method differs from poll only in that it throws an exception if this queue is empty.都是弹出最底层的元素,不同的是remove如果在队列为空回报异常poll还会返回空

30. 哪些集合类是线程安全的?

   A:List中的Vertor对比ArrayLit,HashTable 对比hashMap

31. 迭代器 Iterator 是什么?Iterator 怎么使用?有什么特点?

A:迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构。迭代器通常被称为“轻量级”对象,因为创建它的代价小。Java中的Iterator功能比较简单,并且只能单向移动:(1) 使用方法iterator()要求容器返回一个Iterator。第一次调用Iterator的next()方法时,它返回序列的第一个元素。注意:iterator()方法是java.lang.Iterable接口,被Collection继承。(2) 使用next()获得序列中的下一个元素。(3) 使用hasNext()检查序列中是否还有元素。(4) 使用remove()将迭代器新返回的元素删除

32. Comparable和Comparator接口是干什么的?

    A:两者都是用来比较的,但是使用的方式不一样,有很多能自动排序的集合想要排序 就是根据实现的Comparable的 compareTo()方法进行排序的,这个是定义在被比较类的内部的,而Comparator是另外写一个单独的类,当需要排序时不需要被比较类必须实现这个方法 比如Arrays.sort()方法,Comparable是被比较的类通常需要实现的方法,Comparator通常是需要排序的集合需要接受的比较器

33. Iterator 和 ListIterator 有什么区别?

A:Iterator是Java迭代器最简单的实现,为List设计的ListIterator具有更多的功能,它可以从两个方向遍历List,也可以从List中插入和删除元素。

34. 如何权衡是使用无序的数组还是有序的数组?常见的有序与无序

A:有序数组最大的好处在于查找的时间复杂度是O(log n),而无序数组是O(n)。有序数组的缺点是插入操作的时间复杂度是O(n),因为值大的元素需要往后移动来给新元素腾位置。相反,无序数组的插入时间复杂度是常量O(1)。所以处理插入比较多的用无序的 处理查询比较多的操作时用有序的。有序 TreeMap对比HashMap ,TreeSet 对比hashSet

3. 多线程

35. 并行和并发有什么区别?

A:简而言之就是并发是多个事件在同一时间段执行,而并行是多个事件在同一时间点执行

36. 线程和进程的区别?

A:进程:是并发执行的程序在执行过程中分配和管理资源的基本单位,是一个动态概念,竞争计算机系统资源的基本单位。线程:是进程的一个执行单元,是进程内科调度实体。比进程更小的独立运行的基本单位。线程也被称为轻量级进程。

37. 守护线程是什么?

A:Java分为两种线程:用户线程和守护线程 所谓守护线程是指在程序运行的时候在后台提供一种通用服务的线程,比如垃圾回收线程就是一个很称职的守护者,并且这种线程并不属于程序中不可或缺的部分。因 此,当所有的非守护线程结束时,程序也就终止了,同时会杀死进程中的所有守护线程。反过来说,只要任何非守护线程还在运行,程序就不会终止。守护线程和用户线程的没啥本质的区别:唯一的不同之处就在于虚拟机的离开:如果用户线程已经全部退出运行了,只剩下守护线程存在了,虚拟机也就退出了。 因为没有了被守护者,守护线程也就没有工作可做了,也就没有继续运行程序的必要了

38. 创建线程有哪几种方式?

A:通过继承Thread 通过实现Runable还有实现Callable接口

39. 说一下 runnable 和 callable 有什么区别?

    A:通过继承Thread 通过实现Runable相同点:两者都是接口;两者都可用来编写多线程程序;两者都需要调用Thread.start()启动线程;不同点:两者最大的不同点是:实现Callable接口的任务线程能返回执结果;而实现Runnable接口的任务线程不能返回结果;Callable接口的call()方法允许抛出异常;而Runnable接口的run()方法的异常只能在内部消化,不能继续上抛;注意点:allable接口支持返回执行结果,此时需要调用FutureTask.get()方法实现,此方法会阻塞主线程直到获取‘将来’结果;当不调用此方法时,主线程不会阻塞!

40. 线程有哪些状态

41. sleep() 和 wait() 有什么区别?

    A:虽然两者都是用来暂停当前运行的线程,但是 sleep() 实际上只是短暂停顿,因为它不会释放锁,而 wait() 意味着条件等待,这就是为什么该方法要释放锁,因为只有这样,其他等待的线程才能在满足条件时获取到该锁;sleep是Thread中定义的,wait()是Object中定义的,sleep是等时间过了就会自动醒来,如果wait没有这这时间就还会一直等待 直到执行notify或notifyAll方法

42. notify()和 notifyAll()有什么区别?

    A:wait方法执行后,会将线程放到一个等待队列中,notify()方法只是让一个线程从wait等待队列中恢复过来,至于具体是哪个,那就得看那些线程的运气了(不设置优先级的情况下),继续执行后面的语句;notifyAll()方法是让所有的线程从wait中恢复过来,继续执行后面的语句。

43. 线程的 run()和 start()有什么区别?

    A:start()方法被用来启动新创建的线程,而且start()内部调用了run()方法,这和直接调用run()方法的效果不一样。当你调用run()方法的时候,只会是在原来的线程中调用,没有新的线程启动,start()方法才会启动新线程。run() 方法是runnable接口中的方法 而star()是Thred类中的方法;

44.创建线程池有哪几种方式?

A:1.ExecutorService cachedThreadPool = Executors.newCachedThreadPool(); 可缓存线程池工作线程的创建数量几乎没有限制(其实也有限制的,数目为Interger. MAX_VALUE), 这样可灵活的往线池中添加线程。如果长时间没有往线程池中提交任务,即如果工作线程空闲了指定的时间(默认为1分钟),则该工作线程将自动终止。终止后,如果你又提交了新的任务,则线程池重新创建一个工作线程。2.ExecutorService cachedThreadPool = Executors.newFixedThreadPool(3);创建一个指定工作线程数量的线程池。每当提交一个任务就创建一个工作线程,如果工作线程数量达到线程池初始的最大数,则将提交的任务存入到池队列中。FixedThreadPool是一个典型且优秀的线程池,它具有线程池提高程序效率和节省创建线程时所耗的开销的优点。但是,在线程池空闲时,即线程池中没有可运行任务时,它不会释放工作线程,还会占用一定的系统资源。3.Executors.newSingleThreadExecutor();创建一个单线程化的Executor,即只创建唯一的工作者线程来执行任务,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。如果这个线程异常结束,会有另一个取代它,保证顺序执行。单工作线程最大的特点是可保证顺序地执行各个任务,并且在任意给定的时间不会有多个线程是活动的。4.Executors.newScheduleThreadPool(5),固定数量,支持延迟执行。

45.线程池都有哪些状态?

46. 线程池中 submit()和 execute()方法有什么区别?

47. 在 java 程序中怎么保证多线程的运行安全?

48. 多线程锁的升级原理是什么?

49. 什么是死锁?

50. 怎么防止死锁?

51. ThreadLocal 是什么?有哪些使用场景?

52. 说一下 synchronized 底层实现原理?

53. synchronized 和 volatile 的区别是什么?

54. synchronized 和 Lock 有什么区别?

55. synchronized 和 ReentrantLock 区别是什么?

56. 说一下 atomic 的原理?

4. 反射

57. 什么是反射?

58. 什么是 java 序列化?什么情况下需要序列化?

59. 动态代理是什么?有哪些应用?

60. 怎么实现动态代理?

5. 对象拷贝

61. 为什么要使用克隆?

62. 如何实现对象克隆?

63. 深拷贝和浅拷贝区别是什么?

6. Java Web

64. jsp 和 servlet 有什么区别?

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

66. 说一下 jsp 的 4 种作用域?

67. session 和 cookie 有什么区别?

68. 说一下 session 的工作原理?

69. 如果客户端禁止 cookie 能实现 session 还能用吗?

70. spring mvc 和 struts 的区别是什么?

71. 如何避免 sql 注入?

72. 什么是 XSS 攻击,如何避免?

73. 什么是 CSRF 攻击,如何避免?

7. 异常

74. throw 和 throws 的区别?

75. final、finally、finalize 有什么区别?

76. try-catch-finally 中哪个部分可以省略?

77. try-catch-finally 中,如果 catch 中 return 了,finally 还会执行吗?

78. 常见的异常类有哪些?

8. 网络

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

80. forward 和 redirect 的区别?

81. 简述 tcp 和 udp的区别?

A:tcp和udp都是计算机网络中运输层的协议,udp是无连接的,是尽最大努力交付,半双工,首部开销小,只有8个字节

分别是源端口、目的端口、长度,校验和。tcp是面向连接的,在使用之前,喜爱能建立一个Tcp连接,只能有两个端点,1对1的,全双工的、提供可靠交付的。使用的头部是20个固定字节和4n的可变长度

82. tcp 为什么要三次握手,两次不行吗?为什么?

83. 说一下 tcp 粘包是怎么产生的?

84. OSI 的七层模型都有哪些?

85. get 和 post 请求有哪些区别?

86. 如何实现跨域?

87. 说一下 JSONP 实现原理?

9. 设计模式

88. 说一下你熟悉的设计模式?

89. 简单工厂和抽象工厂有什么区别?

10. Spring/Spring MVC

90. 为什么要使用 spring?

91. 解释一下什么是 aop?

面向切面编程,可以将通知  (前置,后置,环绕)植入到目标对象中 ,比如对日志的处理等

92. 解释一下什么是 ioc?

依赖注入,用户不需要实例化对象,只需要声明就能从Spring容器中取出

93. spring 有哪些主要模块?

SringCore SpringAop SpirngORM SpringMVC SpringWeb

94. spring 常用的注入方式有哪些?

属性注入 构造其注入 方法注入

95. spring 中的 bean 是线程安全的吗?

不是 默认是单例的,不是线程安全,要是线程安全 要使用ThreadLoacl

96. spring 支持几种 bean 的作用域?

单例,原型,在web中 request session global_session

97. spring 自动装配 bean 有哪些方式?

通过Xml配置,通过注解

98. spring 事务实现方式有哪些?

Spring 事务有编程式事务,即使用代码开启事务,常用的有transactionTemplate

还有声明式事务 使用注解开启 在启动类上加上 @EnableTranSactionManagement表示开始声明式

在类的方法上加上@Transactional开始方法事务 就可以在事务发生异常时回滚 (rollbackFor = RuntimeException.class

要注意的是 如果在一个类的内部A 的a1 方法(没有事务注解)要调用 A的a2方法(有事务注解),a2将无法开启事务这是因为Spring的事务处理是使用AOP的思想进行动态代理(java cglib)所以实际上是调用了在本地方法上加上编程式事物,解决方法使用类对象调用 不用本地调用。

注意点2 事务的传播性 spring定义了其中事务的传播 使用事物的传播 会使声明了事务的方法调用其他方法开启新的方法栈时都会给新的方法使用事务 默认是0

99. 说一下 spring 的事务隔离?

Spring 中定义了5种事务的隔离性 都是与数据库有关 还有一种是DEFAULT默认使用数据库的隔离性 这也是Spring的默认值,关于数据库的隔离性详见 (173. 说一下数据库的事务隔离?)

100. 说一下 spring mvc 运行流程?

101. spring mvc 有哪些组件?

102. @RequestMapping 的作用是什么?

103. @Autowired 的作用是什么?

11. Spring Boot/Spring Cloud

104. 什么是 spring boot?

105. 为什么要用 spring boot?

106. spring boot 核心配置文件是什么?

107. spring boot 配置文件有哪几种类型?它们有什么区别?

yml property xml

108. spring boot 有哪些方式可以实现热部署?

109. jpa 和 hibernate 有什么区别?

110. 什么是 spring cloud?

111. spring cloud 断路器的作用是什么?

112. spring cloud 的核心组件有哪些?

12. Hibernate

113. 为什么要使用 hibernate?

114. 什么是 ORM 框架?

115. hibernate 中如何在控制台查看打印的 sql 语句?

116. hibernate 有几种查询方式?

117. hibernate 实体类可以被定义为 final 吗?

118. 在 hibernate 中使用 Integer 和 int 做映射有什么区别?

119. hibernate 是如何工作的?

120. get()和 load()的区别?

121. 说一下 hibernate 的缓存机制?

122. hibernate 对象有哪些状态?

123. 在 hibernate 中 getCurrentSession 和 openSession 的区别是什么?

124. hibernate 实体类必须要有无参构造函数吗?为什么?

13. Mybatis

125. mybatis 中 #{}和 ${}的区别是什么?

126. mybatis 有几种分页方式?

127. RowBounds 是一次性查询全部结果吗?为什么?

128. mybatis 逻辑分页和物理分页的区别是什么?

129. mybatis 是否支持延迟加载?延迟加载的原理是什么?

130. 说一下 mybatis 的一级缓存和二级缓存?

131. mybatis 和 hibernate 的区别有哪些?

132. mybatis 有哪些执行器(Executor)?

133. mybatis 分页插件的实现原理是什么?

134. mybatis 如何编写一个自定义插件?

14. RabbitMQ

135. rabbitmq 的使用场景有哪些?

136. rabbitmq 有哪些重要的角色?

137. rabbitmq 有哪些重要的组件?

138. rabbitmq 中 vhost 的作用是什么?

139. rabbitmq 的消息是怎么发送的?

140. rabbitmq 怎么保证消息的稳定性?

141.rabbitmq 怎么避免消息丢失?

142. 要保证消息持久化成功的条件有哪些?

143. rabbitmq 持久化有什么缺点?

144. rabbitmq 有几种广播类型?

145. rabbitmq 怎么实现延迟消息队列?

146. rabbitmq 集群有什么用?

147. rabbitmq 节点的类型有哪些?

148. rabbitmq 集群搭建需要注意哪些问题?

149. rabbitmq 每个节点是其他节点的完整拷贝吗?为什么?

150. rabbitmq 集群中唯一一个磁盘节点崩溃了会发生什么情况?

151. rabbitmq 对集群节点停止顺序有要求吗?

15. Kafka

152. kafka 可以脱离 zookeeper 单独使用吗?为什么?

153. kafka 有几种数据保留的策略?

154. kafka 同时设置了 7 天和 10G 清除数据,到第五天的时候消息达到了 10G,这个时候 kafka 将如何处理?

155. 什么情况会导致 kafka 运行变慢?

156. 使用 kafka 集群需要注意什么?

16. Zookeeper

157. zookeeper 是什么?

158. zookeeper 都有哪些功能?

159. zookeeper 有几种部署模式?

160. zookeeper 怎么保证主从节点的状态同步?

161. 集群中为什么要有主节点?

162. 集群中有 3 台服务器,其中一个节点宕机,这个时候 zookeeper 还可以使用吗?

163. 说一下 zookeeper 的通知机制?

17. MySql

164. 数据库的三范式是什么?

165. 一张自增表里面总共有 7 条数据,删除了最后 2 条数据,重启 mysql 数据库,又插入了一条数据,此时 id 是几?

166. 如何获取当前数据库版本?

167. 说一下 ACID 是什么?

168. char 和 varchar 的区别是什么?

169. float 和 double 的区别是什么?

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

171. mysql 索引是怎么实现的?

https://blog.csdn.net/waeceo/article/details/78702584

172. 怎么验证 mysql 的索引是否满足需求?

173. 说一下数据库的事务隔离?

1、未提交读(Read Uncommitted) 即使一个更新语句没有提交,但是别的事务可以读到这个改变。2、提交读(Read Committed)  执行了COMMIT以后别的事务就能读到这个改变,并且只能读取到已经提交的数据。3、可重复读(Repeatable Read):在同一个事务里面先后执行同一个查询语句的时候,得到的结果是一样的。4、串行读(Serializable)事务执行的时候不允许别的事务并发执行,完全串行化的读,每次读都需要获得表级共享锁,读写相互都会阻塞

https://www.cnblogs.com/fjdingsd/p/5273008.html

自己理解的事务隔离性

事务四大特性: 原子性 一致性 持久性 隔离性

数据库的四种隔离级别:

Serializable 序列化 Repeatable read 可重复度 Read committed 度提交 Read uncommitted 读不提交

这里先不说明这四个隔离级别是什么,先讨论一下由于数据库多事务同时操作数据产生的三种数据不一致的情况:

1.脏读:指的是一个事务读取到另一个事务没有提交或者回滚(没有读到最终数据),造成的事务读取的数据与数据库数据不一致的情况。数据库解决方法,加上行锁。如图: 解决方法 使用一个事务无法读取到另一个事务未持久化的数据(这里用持久化,因为参考其他的博客,有的说是没有提交,有的说又进行了回滚,总之就是没有持久化,这一解决方法就是传说的Read Commend)

2.不可重复读 :不可重复读 指的是一个事务在读取一个数据之后 其他事物对上一个事务读取的数据进行修改并提交,但是由于上一个事务的操作时间过长,导致该事务再次读取数据的时候读取的值前后不一致。这种情况虽然遵循了read commend (一个事务不能读取另一个事务未持久的数据,是的)但是还是发生了数据不一致。

解决方案,规定一个事务A不能修改另一个事务B已读取的数据,此时事务B还在进行中。(repeatable read)

3.幻读:在repeatable read隔离级别中,既然一个事务A无法修改事务B正在读取的数据,那事务A如果插入新的数据就不在repeatable read规定的范围内了吧,好。那就会发生事务A读取数据的数量是100 ,事务B插入了一条新的数据,结果实际数量是101,造成了事务A的两次读取数据的数量不一致,这就是幻读,解决方法 事务A对表操作时候其他事物无法对表进行操作 即加上表锁。传说中的serialable

说明了这几种数据不一致的情况,现在还差read uncommend没有说了,就是没有任何控制。另外对下面的结果就很好理解了。

174. 说一下 mysql 常用的引擎?

MyISAM 非聚集引擎 和 InnoDB聚集引擎

175. 说一下 mysql 的行锁和表锁?

https://www.cnblogs.com/deliver/p/5730616.html

176. 说一下乐观锁和悲观锁?

乐观锁和悲观锁是数据库层面的处理并行的一种机制。乐观锁 ---  乐观的认为拿到锁是很容易的,所以先处理业务,到最后一步才申请资源锁,并且打上时间戳 or 版本号悲观锁 ---  悲观的认为拿到锁是很困难的,所以在执行业务之前必须先拿到锁。乐观锁在不发生取锁失败的情况下开销比悲观锁小,但是一旦发生失败回滚开销则比较大,因此适合用在取锁失败概率比较小的场景,可以提升系统并发性能

177. mysql 问题排查都有哪些手段?

178. 如何做 mysql 的性能优化?

18. Redis

179. redis 是什么?都有哪些使用场景?

180. redis 有哪些功能?

181. redis 和 memecache 有什么区别?

182. redis 为什么是单线程的?

183. 什么是缓存穿透?怎么解决?

184. redis 支持的数据类型有哪些?

string set list zset hash

185. redis 支持的 java 客户端都有哪些?

186. jedis 和 redisson 有哪些区别?

187. 怎么保证缓存和数据库数据的一致性?

188. redis 持久化有几种方式?

189.redis 怎么实现分布式锁?

190. redis 分布式锁有什么缺陷?

191. redis 如何做内存优化?

192. redis 淘汰策略有哪些?

193. redis 常见的性能问题有哪些?该如何解决?

19. JVM

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

195. 说一下 jvm 运行时数据区?

JDK1.6、1.8之后都不太一样,1.7包括之前如下图,

而1.8及之后没有了永久代(方法区),或者说使用了元空间实现了方法区;其中程序计数器是线程私有,用来记录线程当前到哪里,没有内存溢出,也是最小的一个地方。虚拟机栈用于存放局部变量表、操作数栈、动态链接、方法出口 等信息。本地方法栈与虚拟机栈相似,但是属于本地方法调用使用,都是线程私有的。堆是线程公用的,几乎所有的对象都在此生成。JDK1.7之前使用永久代来实现方法区,但是垃圾回收的效率很低。放的是类信息,静态变量,常量。。1.8之后类信息存放在元空间,而静态变量和常量在堆中生成。

/***java -Xmx2m -XX:PermSize=2M -XX:MaxPermSize=3M StaticBaseVarTest*** 运行在jdk 1.6上 java.lang.OutOfMemoryError: PermGen space 永久代* 运行在jdk 1.6上 java.lang.OutOfMemoryError: PermGen space 永久代* 运行在jdk 1.8 上* Exception in thread "main" java.lang.OutOfMemoryError: Java heap space*     at StaticBaseVar.<clinit>(StaticBaseVar.java:2)**/
public class StaticBaseVarTest {static int[] as = new int[100000];static {for (int i = 0; i < 100000; i++) {as[i] = i * i * i * i;}}public static void main(String[] args) {System.out.println("?");}
}

上面是测试静态变量这个是测常量 结果一样

public class FinalVarTest {static String  base = "string";public static void main(String[] args) {List<String> list = new ArrayList<>();for (int i=0;i< Integer.MAX_VALUE;i++){String str = base + base;base = str;list.add(str.intern());}}}

196. 说一下堆栈的区别?

如上所说 堆是线程共有的,栈是私有的。具体功能见上

197. 队列和栈是什么?有什么区别?

都是一种抽象的数据结构,队列先进先出 栈先进后出

198. 什么是双亲委派模型?

199. 说一下类加载的执行过程?

200. 怎么判断对象是否可以被回收?

引用计数器和可达性分析

201. java 中都有哪些引用类型?

202. 说一下 jvm 有哪些垃圾回收算法?

采用分代收集的思想来管理内存,青总标记清除算法标记后清除,复制算法 新生代清除用到的算法  ,标记清除和标记整理算法

203. 说一下 jvm 有哪些垃圾回收器?

204. 详细介绍一下 CMS 垃圾回收器?

205. 新生代垃圾回收器和老生代垃圾回收器都有哪些?有什么区别?

206. 简述分代垃圾回收器是怎么工作的?

大部分对象在创建的时候是在eden区分配 但是大对象直接在老生代分配,虚拟机会给每个对象定义一个年龄的计数器,如果eden经过了第一次垃圾回收的话,存活下来的对象会将age+1 然后到新生代的survivor中,当这个age增长到一定年龄,(15)将其晋升到老生代

207. 说一下 jvm 调优的工具?

208. 常用的 jvm 调优的参数都有哪些?

2020 年 初中级Java 面试题目大全相关推荐

  1. Java面试题目大全

    选择题: 单选题 1,以下 java 程序代码,执行后的结果是() java•util•HashMap map=newjava.util•HashMap(); map.put(HnameH,null) ...

  2. JAVA工程师面试题目大全_绝对值得看

    JAVA工程师面试题目大全 一.单选题 1.下列哪种说法是正确的( D) A)实例方法可直接调用超类的实例方法 B)实例方法可直接调用超类的类方法 C)实例方法可直接调用其他类的实例方法 D)实例方法 ...

  3. 2021年Java面试题目最新总结【90%面试会踩的坑】

    学会java技术之后大家面临的最多的问题就是面试这关,求职面试java岗位是否能够成功是直接影响我们的工作机会的,所以对于Java程序员面试你准备好了吗?今天小编汇总了一下关于Java程序员面试,90 ...

  4. Java面试题目大汇总(附参考答案)

    足足准备了长达3个月的面试,终于在上周拿到了阿里的offer! 博主汇总整理了一份我面试之前看的一些Java面试题目,可以说是非常详细! 分享给大家,希望对正在面试Java岗位的朋友有帮助哈~~ (文 ...

  5. 2019蚂蚁金服 Java面试题目!涵盖现场3面真题

    蚂蚁Java一面 二叉搜索树和平衡二叉树有什么关系,强平衡二叉树(AVL树)和弱平衡二叉树(红黑树)有什么区别 B树和B+树的区别,为什么MySQL要使用B+树 HashMap如何解决Hash冲突 e ...

  6. 非常全面的阿里的Java面试题目,涵盖Java基础+高级+架构

    阿里技术一面 自我介绍 Java中多态是怎么实现的 Java中的几种锁 数据库隔离级别 脏读 幻读 ACID mysql的隔离级别 mysql索引实现,如何解决慢查询 数据库锁是怎么实现的 死锁的条件 ...

  7. 史上最全阿里Java面试题目大汇总!强烈建议收藏~

    阿里面试题目目录 技术一面(基础面试题目) 技术二面(技术深度.技术原理) 项目实战(项目模拟面试) JAVA开发技术常问的问题 阿里必会知识 阿里面试范畴 阿里面试总结 一:阿里技术一面(基础掌握牢 ...

  8. 最全蚂蚁金服高级Java面试题目(3面)

    一面: JVM数据存储模型,新生代.年老代的构造? java GC算法,什么时候会触发minor gc,什么时候会触发full gc? GC 可达性分析中哪些算是GC ROOT? 你熟悉的JVM调优参 ...

  9. 阿里巴巴Java面试题目

    [应聘]阿里巴巴Java面试题目 原文地址:http://blog.csdn.net/free0sky/article/details/7927275 见过的很全的Java知识总结,强悍的人生不需要解 ...

最新文章

  1. parsing:NLP之chart parser句法分析器
  2. 技术03期:自然语言处理NLP【分词篇】
  3. 《预训练周刊》第34期:使用图像级监督检测两万个类别、BigScience寻求建立强大的开放语言模型...
  4. win10设置默认打开方式
  5. 禁止 pdf 下载、打印的方法
  6. Nacos初探(3)-- 服务发现原理解析
  7. 如何macOS 上优雅的使用 Gaussian 09 与GaussView 6
  8. 黑马程序员 HTML基础
  9. QQ登录超时,请检查您的网络或本机防火墙设置【00001】
  10. RapidMiner教程
  11. 【供应链架构day5】美团供应链架构的演进之道 - 团购时代
  12. u盘linux启动盘制作ultraiso,U+启动:利用UltraISO制作启动U盘,引导DOS系统
  13. 电脑风扇狂转,声音巨大是什么原因?
  14. 快速查看南京商品房销售信息
  15. iOS手机上查看html源码,View Source:在 iOS 上轻松查看网页源代码-网页源文件
  16. 读易[2]·该出手时就出手(乾卦)
  17. 由于这台计算机没有远程桌面客户端
  18. 第七阶段 -- 网页编程基础:【HTML】
  19. JavaMail IMAPFolder.getMessageByUID 获取QQ和腾讯企业邮箱新邮件的问题
  20. 均值、方差和标准差计算的python代码

热门文章

  1. Mobile Inverted Residual Bottleneck Block图解
  2. 【老九学堂】【初识C语言】C语言保留字(关键字)详解
  3. JavaScript——劫持
  4. linux lo回环服务名称是什么,什么叫 lo 回环? ESTABLISHED及RELATED?[已经解决]
  5. adb连接不上手机测试设备
  6. DeviceIOControl函数
  7. 51nod 1526 分配笔名(Trie树+贪心)
  8. html5落叶效果,使用Html5实现树叶飘落的效果
  9. 柑橘病虫害识别方案总结
  10. 打开Excel的报错,提示:不能使用对象链接和嵌入