亲身收集java常问面试问题

200多道题目是从网上收集,然后加上自己的理解写上去的,还没有收集完就入职下一家公司,先把资料放到这里,以后忘记了可以回头看看。

一、Java 基础
1.JDK 和 JRE 有什么区别?
  JRE是java运行时环境,包含了java虚拟机,java基础类库。
  JDK是编写开发java语言所需的工具包,包含了JRE

2. == 和 equals 的区别是什么?
  ==是比较内存地址 || equals是比较字符串内容

3. 两个对象的 hashCode()相同,则 equals()也一定为 true,对吗?
  如果两个对象hashcode相等,他们不一定equals相同

4. final 在 java 中有什么作用?
  final用来修饰类、类属性和类方法。表示类不能继承、属性不能修改、方法不能重写。

5. java 中的 Math.round(-1.5) 等于多少?
  floor向下取整 round四舍五入 ceil向上取整

6. String 属于基础的数据类型吗?
  String不是基本数据类型,是final修饰的java类

7. java 中操作字符串都有哪些类?它们之间有什么区别?
  String、StringBuffer、StringBuilder
  String线程不安全的,不可变得字符序列
  StringBuffer线程安全的可变字符序列,耗费系统资源
  StringBuilder线程不安全的节省系统资源

8. String str="i"与 String str=new String(“i”)一样吗?
  创建了一个对象 || 创建了两个对象

9. 如何将字符串反转?
  通过递归方法 || charAt进行字符串拼接 || reverse方法

10. String 类的常用方法都有那些?
  length、substring、indexOf、lastIndexOf、trim、split、valueOf

11. 抽象类必须要有抽象方法吗?
  抽象类可以没有抽象方法,但是有抽象方法的类必须声明为抽象类

12. 普通类和抽象类有哪些区别?
  抽象类不能被实例化、含有抽象方法的必须声明为抽象类、抽象的子类必须实现
  抽象类中的所有抽象方法,否则这个类也是抽象类。

13. 抽象类能使用 final 修饰吗?
  final修饰导致该类无法被继承,而java类被声明为抽象类必须要继承才能使用。

14. 接口和抽象类有什么区别?
  一个类能实现多个接口,但只能继承一个类
  抽象类可以有抽象方法,接口不能有抽象方法
  抽象类中可以有普通成员变量,接口中没有

15. java 中 IO 流分为几种?
  字节流、字符流

16. BIO、NIO、AIO 有什么区别?
  BIO是一个连接一个线程
  NIO是一个请求一个线程
  AIO是一个有效请求一个线程

17. Files的常用方法都有哪些?
  mkdir、delete、isFile、exists、getName、length、listFiles
二、容器
18. java 容器都有哪些?
  List:存放有序、列表存储、元素可重复
  Set:无序、元素不可重复
  Map:无序、元素可重复

19. Collection 和 Collections 有什么区别?
  Collection是一个集合接口,里面有List、set
  Collections是一个集合类的工具类,提供一系列的静态方法、用于集合元素进行排序、搜索以及线程安全等操作

20. List、Set、Map 之间的区别是什么?
  List允许有重复元素、Set不允许有重复元素、Map以键值对进行存储,键不允许重复,元素可以
  List及其所有实现类都保持了每个元素的插入顺序、Set中的元素都是无序的,Map跟Set一样对元素进行无序存储,但是某些实现类
  对元素进行了排序
  List和Set是实现了Collection接口,Map是实现了Map接口

21. HashMap 和 Hashtable 有什么区别?
  HashMap线程不安全,hashtable是线程安全的
  HashMap的key和value都可以为null(只能有一个),Hashtable不允许
  HashMap初始容量16,hashtable是11
  hashMap效率快一点

22. 如何决定使用 HashMap 还是 TreeMap?
  TreeMap增加、快速创建、基于红黑树实现
  HashMap查询快,基于散列表实现(推荐作为常规Map使用)

23. 说一下 HashMap 的实现原理?
  HashMap是使用数组加链表的方式存储数据,当我们讲键值传递给put()方法时,
  它调用键对象的hashCode()方法来计算hashcode,让后找到位置来储存值对象。

24. 说一下 HashSet 的实现原理?
  HashSet是基于HashMap实现的,默认构造函数是构建一个初始容量为16,负载因子为0.75的HashMap。

25. ArrayList 和 LinkedList 的区别是什么?
  ArrayList和Vector使用了数组的实现
  LinkedList使用了循环双向链表数据结构
  LinkedList在插入和删除时比ArrayList要快
  ArrayList查询时比LinkedList快

26. 如何实现数组和 List 之间的转换?
  List转数组:toArray(arraylist.size())方法
  数组转List:Arrays(a)方法

27. ArrayList 和 Vector 的区别是什么?
  Vector方法都是同步的(Synchronized),是线程安全的,由于线程的同步必然要影响性能,
  因此,ArrayList的性能要比Vector好。
  当Vector和ArrayList(10)中的元素超过它的初始大小时,Vector会将容量翻倍,Arraylist只增加了50%,这样,ArrayList就有利于节约内存空间

28. Array 和 ArrayList 有何区别?
  Array是数组,arrayList是数组列表,数组列表可以根据自身变化扩大,而数组只能长度之后就不可以
  Array可以包含基本类型和对象类型、ArrayList只能包含对象类型
  Array大小固定,ArrayList的大小是动态变化的
  ArrayList是Array的复杂版本

29. 在 Queue 中 poll()和 remove()有什么区别?
  poll()方法和Remove()方法都是从队列中取出一个元素,但是poll()在获取失败的时候会返回空,
  remove()方法在获取数据失败的时候抛出异常。

30. 哪些集合类是线程安全的?
  vector、hashtable、java.util.concurrent包中的集合

31. 迭代器 Iterator 是什么?
  集合体系中迭代器就是遍历,集合取出元素的方法,迭代器可以取出并操作集合中的元素

32. Iterator 怎么使用?有什么特点?
  通过hasNext判断是否有下一个元素,next返回迭代器中下一个元素,remove删除元素
  迭代可以遍历并选择集合中的每个对象不改变集合的结构

33. Iterator 和 ListIterator 有什么区别?
  Iterator方法在set和list接口中都有定义,ListIterator只在List接口中(或实现类定义)
  ListIterator有add()方法,可以向List添加对象,而Iterator不能
  ListIterator可以定位当前索引,Iterator没有这个功能

34. 怎么确保一个集合不能被修改?
  建一个类,持有集合的引用private,既外部不能直接访问集合,然后实现方法,只实现get结合元素的方法,
  不实现增删改,对于集合元素,属性都private只实现访问方法。
三、多线程
35. 并行和并发有什么区别?
  并行是在同一时刻执行多个事件,并发是在同一事件段内执行多个事件。
  你吃饭吃到一半,电话来了,你一直到吃完了以后才去接,这就说明你不支持并发也不支持并行。
  你吃饭吃到一半,电话来了,你停了下来接了电话,接完后继续吃饭,这说明你支持并发。 (不一定是同时的)
  你吃饭吃到一半,电话来了,你一边打电话一边吃饭,这说明你支持并行。

36. 线程和进程的区别?
  进程是操作系统资源分配的基本单位,而线程是任务调度和执行的基本单位
  一个进程可以包含多个线程

37. 守护线程是什么?
  守护线程是个服务线程,准确的来说就是服务其他的线程,比如垃圾回收机制,就是最典型的守护进程

38. 创建线程有哪几种方式?
  继承Thread类创建线程类
  实现Runnable接口创建线程类
  通过Callable和Future创建线程

39. 说一下 runnable 和 callable 有什么区别?
  两者都是接口、两者都可用来编写多线程
  实现Callable接口的任务线程能返回执行结果,而实现Runnable接口的任务线程不能返回结果
  Callable接口的call()方法允许抛出异常,而Runnable接口的run()方法的异常只能在内部消化,不能继续上抛

40. 线程有哪些状态?
  新建-->就绪-->运行-->阻塞-->死亡

41. sleep() 和 wait() 有什么区别?
  sleep方法属于Thread类中方法,表示一个线程进入睡眠状态,sleep方法没有释放锁,wait方法释放了锁
  wait属于Object的成员方法,一旦一个对象调用了wait方法,必须采用notify()和notifyAll方法唤醒该线程
  wait,notify、notifyAll只能在同步控制方法或同步控制块里面使用,而sleep可以在任何地方使用

42. notify()和 notifyAll()有什么区别?
  notify选择对象的一个wait状态线程进行通知,并使它获得该对象上的锁
  notifyAll通知对象上的所有线程统统退出wait的状态,变成等待该对象的锁,一旦该对象被解锁,它们就好竞争

43. 线程的 run()和 start()有什么区别?
  run()相当于线程的任务处理逻辑的入口方法,由java虚拟机在运行相应线程时直接调用,而不是由应用代码进行调用
  Start()是启动一个线程的方法,启动线程之后去调用run方法内容
  start是创建并启动一个线程,而run是要运行线程中的代码

44.创建线程池有哪几种方式?
  五种
  1、newCachedThreadPool(),它是用来处理大量短时间工作任务的线程池
  2、newFixeThreadPool(),重用指定书目的线程
  3、newSingleTheadExecutor(),它的特点在于工作线程数目限制为1

45.线程池都有哪些状态?
  1、running:线程池处在running状态时,能够接收新任务,以及对已添加的任务进行处理
  2、shutdown:线程池处于shutdown状态时,不接收新任务,但能处理已添加的任务
  3、stop:线程池处在stop状态时,不接收新任务,不处理已添加的任务,并且会中断正在处理的任务
  4、tidying:当所有的任务已终止,ctl记录的任务数量为0,线程池就会变为tidying状态
  5、terminateo:线程池彻底终止,就会变成terminateo状态

46. 线程池中 submit()和 execute()方法有什么区别?
  1、接收的参数不一样
  2、submit有返回值、而execute没有
  3、submit方便Exception处理

47. 在 java 程序中怎么保证多线程的运行安全?
  1、原子性:同一时刻只能一个线程进行操作
  2、可见性:一个线程对主内存的修改可以及时的被其他线程看到
  3、有序性:一个线程观察其他线程中指令执行顺序

48. 多线程锁的升级原理是什么?
  无锁状态、偏向锁、轻量级锁

49. 什么是死锁?
  线程死锁是指由于两个或者多个线程互相持有对方所需要的资源,导致这些线程处于等待状态,无法前往执行。

50. 怎么防止死锁?
  设置加锁顺序、设置加锁时限、死锁检测

51. ThreadLocal 是什么?有哪些使用场景?
  ThreadLocal很多地方叫线程本地变量,也有些地方叫线程本地存储
  最常见得ThreadLocal使用场景用来解决数据库连接、Seesion管理等。

52. 说一下 synchronized 底层实现原理?
  对象头、实列数据、对其填充

53. synchronized 和 volatile 的区别是什么?
  volatile仅能使用在变量级别,synchronized 则可以使用在变量、方法、类级别
  volatile仅能实现变量的修改可预见性,不能保证原子性,synchronized 可以保证变量的修改可见性和原子性
  volatile不能造成线程的阻塞、不会被编译器优化,synchronized 可能造成线程阻塞,变量可以被编译器优化

54. synchronized 和 Lock 有什么区别?
  synchronized 是java内置关键字,在jvm层面,lock是个java类
  synchronized 无法判断是否获取锁的状态,lock可以判断是否获取到锁
  lock锁适合大量同步的代码的同步问题,synchronized 锁适合代码少量的同步问题

55. synchronized 和 ReentrantLock 区别是什么?
  synchronized 是java内置关键字,ReentrantLock API层面的互斥锁类

56. 说一下 atomic 的原理?
  通过总线锁来保证原子性、通过缓存锁来保证原子性。
四、反射
57. 什么是反射?
  java反射就是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,对于任意一个对象,都能够调用
  它的任意方法和属性,并且改变它的属性。

58. 什么是 java 序列化?什么情况下需要序列化?
  序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化,将数据分解成字节流,
  以便存储在文件或网络上的传输。
  当你想把内存中的对象状态保存到一个文件中或者数据库中的时候

59. 动态代理是什么?有哪些应用?
  一个类中,想加一些额外的处理,比如说加日志、加事物等,可以给这个类创建一个代理,这个代理类不是定义好的
  是动态生成的、具有解耦意义,灵活,扩展性强。
  动态代理的应用:Spring的AOP,加事务、加权限、加日志

60. 怎么实现动态代理?
  JDK动态代理或者实现代理接口
五、对象拷贝
61. 为什么要使用克隆?
  想对一个对象进行处理,又想保留原有的数据进行接下来的操作,就需要克隆了。

62. 如何实现对象克隆?
  克隆分浅克隆和深克隆,浅克隆后的对象中非基本对象和原对象指向同一块内存,因此对这些非基本对象的修改会同时更改克隆前后的对象。
  深克隆可以实现完全的克隆,可以用反射的方式或序列化的方式实现。

63. 深拷贝和浅拷贝区别是什么?
  深拷贝:引用对象的值等信息,复制一份一样的
  浅拷贝:只复制引用,另一处修改,你当下的对象也会修改
六、Java Web
64. jsp 和 servlet 有什么区别?
  jsp经编译后就变成了servlet,jsp更擅长表现与页面显示,servlet更擅长逻辑控制
  jsp是servlet的一种简化,jsp侧重于视图,servlet主要用于控制逻辑

65. jsp 有哪些内置对象?作用分别是什么?
  page、pageContext、request、response、session、application、out、config、exception

66. 说一下 jsp 的 4 种作用域?
  application、session、request、page

67. session 和 cookie 有什么区别?
  cookie数据存放在客户的浏览器上,session数据放在服务器上
  cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应该用session
  session会在一定时间内保存在服务器上
  个人建议将登陆信息等重要信息保留在session上,其它需要保留的信息放在cookie上

68. 说一下 session 的工作原理?
  当用户发送一个请求时,如果把信息保存到session中,这个时候就会生产一个sessionid,会把信息放到
  session中,如果需要取出信息的话,用sessionid进行对不。

69. 如果客户端禁止 cookie 能实现 session 还能用吗?
  不能,sessionid是通过cookie来传递的,禁用cookie相当于失去了sessionid,也就得不到session了

70. spring mvc 和 struts 的区别是什么?
  struts是类拦截,mvc是方法拦截
  mvc的出口是servlet,struts是filter
  springmvc集成了ajax,struts实现ajax就需要麻烦一点

71. 如何避免 sql 注入?
  检查变量数据类型和格式
  过滤特殊符号
  绑定变量,使用预编译语句

72. 什么是 XSS 攻击,如何避免?
  即跨站脚本攻击,通过正则表达式过滤传入参数的html标签来防范xss攻击

73. 什么是 CSRF 攻击,如何避免?
  跨站请求伪造,请求令牌,token验证,提交验证码,在http头中自定义属性并验证
七、异常
74. throw 和 throws 的区别?
  throws声明异常
  throw抛出异常

75. final、finally、finalize 有什么区别?
  final用来修饰类、属性、方法
  finally只能在try/catch 语句中,表示不管怎么样都会执行
  finalize 在object里面定义,这个方法在gc启动,该对象被回收的时候定义

76. try-catch-finally 中哪个部分可以省略?
  catch跟finally不能同时省略

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

78. 常见的异常类有哪些?
  IOException、RunntimeException、NullPointerExcetion

八、网络
79. http 响应码 301 和 302 代表的是什么?有什么区别?
  301代表url永久性转移,302代表url暂时性转移

80. forward 和 redirect 的区别?
  forward发送请求时,地址栏不会发生改变,redirect会重新发送一次请求,地址栏也会有变化
  forward能数据共享,redirect不能数据共享,forward效率高,redirect效率低

81. 简述 tcp 和 udp的区别?
  udp是面向无连接的通信协议,tcp是面向连接的通信协议
  udp速度快,可以实现广播发送,tcp能保证数据正确性,较为可靠

82. tcp 为什么要三次握手,两次不行吗?为什么?
  防止已失效的连接请求又传送到服务器端,因而产生错误
  如果是两次握手,至多只有连接发起方的起始序列号能被确认,另一方选择的序列号则得不到确认

83. 说一下 tcp 粘包是怎么产生的?
  tcp粘包是指发送方发送的若干包数据到接收方接收时粘成一包,从接收缓冲区来看,后一包数据的头紧接前一包数据的尾

84. OSI 的七层模型都有哪些?
  应用层、表示层、会话层、传输层、网络层、数据链路层、物理层

85. get 和 post 请求有哪些区别?
  get在传输的时候有长度限制,而post没有
  get传输数据会暴露早url上,所以不能用来传递敏感信息
  get请求只能支持url编码,post支持多种编码
  get在浏览器回退时是无害的,而post会再次提交请求

86. 如何实现跨域?
  使用jsonp实现跨域

87. 说一下 JSONP 实现原理?
  添加一个<script>标签,src属性是没有跨域限制的,或者使用js调js 的方式
九、设计模式
88. 说一下你熟悉的设计模式?
  工厂方法模式、抽象工厂模式、单例模式、代理模式

89. 简单工厂和抽象工厂有什么区别?
  简单工厂由三种角色实现的,工厂类角色、抽象产品角色、具体产品角色
  抽象工厂给客户端提供一个接口、可以创建多个产品族中的产品对象

十、Spring/Spring MVC
90. 为什么要使用 spring?
  方便解耦,便于开发、spring支持aop编程、声明式事务的支持
  方便基础各种优秀的框架。

91. 解释一下什么是 aop?
  程序在运行时,动态地将代码切入到类的指定方法、指定位置上的编程思想就是面向切面编程。

92. 解释一下什么是 ioc?
  IOC既控制反转,不是什么技术,而是一种思想,意味着将你设计好的对象交给容器控制,而不是
  传统的在你的对象内部直接控制。

93. spring 有哪些主要模块?
  Core、AOP、ORM、DAO、WEB、Context、MVC

94. spring 常用的注入方式有哪些?
  构造器注入、get和set注入、注解注入、接口注入

95. spring 中的 bean 是线程安全的吗?
  Spirng框架并没有对单例bean进行任何多线程的封装处理。

96. spring 支持几种 bean 的作用域?
  单例模式、原型模式、request、session、global Session

97. spring 自动装配 bean 有哪些方式?
  XML和注解方式

98. spring 事务实现方式有哪些?
  编程式事务和声明式事务

99. 说一下 spring 的事务隔离?
  五种:读未提交、已提交、可重复读、串行化、还有一种是后台数据库默认的隔离级别

100. 说一下 spring mvc 运行流程?
  1、用户发送请求至前端控制器DispatcherServlet
  2、DispatcherServlet收到请求调用HandlerMapping处理器映射器。
  3、处理器映射器找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。
  4、DispatcherServlet调用HandlerAdapter处理器适配器
  5、HandlerAdapter经过适配调用具体的处理器(Controller,也叫后端控制器)。
  6、Controller执行完成返回ModelAndView
  7、HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet
  8、DispatcherServlet将ModelAndView传给ViewReslover视图解析器
  9、ViewReslover解析后返回具体View
  10、DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。
  11、DispatcherServlet响应用户

101. spring mvc 有哪些组件?
  HandlerMapping、Controller、ViewResolver

102. @RequestMapping 的作用是什么?
  @RequestMapping是一个用来处理请求地址映射的注解,可用于类或者方法上

103. @Autowired 的作用是什么?
  spring会扫描所有被@Autowired标注的类,然后根据类型在IOC容器中找到匹配的类注入。

十一、Spring Boot/Spring Cloud
104. 什么是 spring boot?
  Spring Boot是一个约定大于配置的框架、其设计的目的是用来简化Spring应用的创建、
  运行、调试、部署等。

105. 为什么要用 spring boot?
  简化maven配置,提供生产就绪型功能、无代码生产和xml配置、运行中应用状态的监控

106. spring boot 核心配置文件是什么?
  bootstrap(.yml或者.properties)和application(.yml或者.properties)

107. spring boot 配置文件有哪几种类型?它们有什么区别?
  bootstrap(.yml或者.properties)和application(.yml或者.properties)
  bootstrap比application优先加载,.properties是键值对的形式,.yml以空格和换行,容易读

108. spring boot 有哪些方式可以实现热部署?
  Spirng Loaded/spring-boot-devtools

109. jpa 和 hibernate 有什么区别?
  hibernate是持久化实现技术,而jps是持久化的标准,一个是具体实现
  ,一个是接口协议,当然spring data jpa 是在hibernate的基础上更上层的封装实现。

110. 什么是 spring cloud?
  Spring Cloud是一个微服务框架,相比Dubbo等RPC框架,
  Spring Cloud提供的全套的分布式系统解决方案。

111. spring cloud 断路器的作用是什么?
  使用Hystrix实现断路器功能,该框架目标在于通过控制那些访问远程系统、服务和第三方库的节点,从而对延迟
  和故障提供更强大的容错能力,

112. spring cloud 的核心组件有哪些?
  Eureka、Ribbon、Hystrix、Zuul、Config
十二、Hibernate
113. 为什么要使用 hibernate?
  对JDBC访问数据库做了封装,是一个主流的持久化框架,优秀的ORM实现,映射
  的灵活性非常出色,支持各种关系型数据库。

114. 什么是 ORM 框架?
  ORM是对象关系映射,是在关系型数据库和业务实体对象之间作一个映射,在操作业务对象的时候,不需要和复杂
  的SQL语句打交道,只需简单的操作对象属性和方法。

115. hibernate 中如何在控制台查看打印的 sql 语句?
  在hibernate的jba中,设置show_sql=true //控制台是否打印 ormat_sql=true //格式化sql语句

116. hibernate 有几种查询方式?
  HQL,QBC(命名查询)、SQL查询

117. hibernate 实体类可以被定义为 final 吗?
  不建议将实体类设置成final,这样会无法生成代理对象
  Hibernate会使用代理模式在延迟关联的情况下提高性能

118. 在 hibernate 中使用 Integer 和 int 做映射有什么区别?
  返回null的情况下int会报错

119. hibernate 是如何工作的?
  读取并解析配置文件、读取映射信息,创建SessionFactory、打开Session
  创建事务、持久化操作、提交事务、关闭session、关闭SessionFactory

120. get()和 load()的区别?
  get()立即加载、返回查询的实体对象、load()方法返回的是代理对象

121. 说一下 hibernate 的缓存机制?
  一级缓存即session级别的缓存
  二级缓存即SessionFactory的外置缓存

122. hibernate 对象有哪些状态?
  瞬时状态(对象刚new出来,还没设id,设了其他值)
  持久状态(调用了新增、修改就会变成持久状态)
  游离状态(当session close完之后)

123. 在 hibernate 中 getCurrentSession 和 openSession 的区别是什么?
  openSession :打开一个新的session
  getCurrentSession :在上下文获得一个session

124. hibernate 实体类必须要有无参构造函数吗?为什么?
  有、Hibernate进行反转的时候需要无参构造函数作为支持,否则hibernate无法进行反转

十三、Mybatis
125. mybatis 中 #{}和 ${}的区别是什么?
  使用#{}会产生预编译的sql,条件是 ? 代替,这样做更安全、迅速
  ${}相当于插入一个不转义的字符串,像order by

126. mybatis 有几种分页方式?
  数组分页、sql分页、拦截器分页、RowBounds分页

127. RowBounds 是一次性查询全部结果吗?为什么?
  RowBounds最大的数据量大概是20亿条数据,数据量达到一定程度,RowBounds所造成的内存压力比较大

128. mybatis 逻辑分页和物理分页的区别是什么?
  逻辑分页:内存开销比较大,在数据量小的情况下效率比物理分页高,量大的情况下内存消耗大 (RowBounds)
  物理分页:内存开销比较小,在数据量小的情况下比逻辑分页效率低,量很大的情况下,建议使用物理分页(PageHelper)

129. mybatis 是否支持延迟加载?延迟加载的原理是什么?
  mybatis默认没有延迟加载,想使用延迟加载的话,要把属性设置为 true ,延迟加载是使用动态代理完成的。

130. 说一下 mybatis 的一级缓存和二级缓存?
  一级缓存是SqlSession级别的缓存。
  二级缓存是mapper级别的缓存,多个sqlSession可以共用二级缓存,二级缓存是跨SqlSession的

131. mybatis 和 hibernate 的区别有哪些?
  mybatis:小巧、方便、高效、简单、直接、半自动化
  hibernate:强大、方便、高效、复杂、间接、全自动化

132. mybatis 有哪些执行器(Executor)?
  SimpleExecutor、ReuserExecutor、BatchExecutor

133. mybatis 分页插件的实现原理是什么?
  分页插件的基本原理是使用了Mybatis提供的插件接口、实现自定义插件、在插件的拦截方法内
  拦截待执行的slq,然后重写sql,添加对应的物理分页语句和物理分页参数。

134. mybatis 如何编写一个自定义插件?
  Mybatis针对自定义插件提供了四大对象:
  Executor:拦截器执行器的方法(log记录)
  StatementHandler:拦截Sql语法构建的处理
  ParameterHandler:拦截参数的处理
  ResultSetHandler:拦截结果集的处理 前两种比较常用

十四、RabbitMQ
135. rabbitmq 的使用场景有哪些?
  业务模块解耦以及异步通信

136. rabbitmq 有哪些重要的角色?
  none、management、policymaker、monitoring、administrator

137. rabbitmq 有哪些重要的组件?
  Exchange:顺丰和韵达
  routingkey:邮件地址的概念
  queue:邮箱接收软件,但是可以接收多个地址的邮件,通过bing实现
  producer:消息生产者,投递消息的程序
  consumer:消息消费者,接受消息的程序
  channel:消息通道,每个channel代表一个会话任务

138. rabbitmq 中 vhost 的作用是什么?
  vhost是虚拟主机,主要起到消息隔离的作用

139. rabbitmq 的消息是怎么发送的?
  可以图形界面可以查看消息是否发送

140. rabbitmq 怎么保证消息的稳定性?
  消息持久化、ACK确认机制(消费端消费完消息之后,要通知服务端)

141.rabbitmq 怎么避免消息丢失?
  消息持久化、ACK确认机制

142. 要保证消息持久化成功的条件有哪些?
  Exchange设置持久化、Queue设置持久化、Message持久化发送:发送消息设置发送模式deliveryMode=2,代表持久化消息

143. rabbitmq 持久化有什么缺点?
  MQ持久化是将消息记录到磁盘,对性能有影响,但是一般情况下为了消息可靠性允许性能损失。

144. rabbitmq 有几种广播类型?
  三种、绑定到rabbitmq的接受者都能接收到消息、通过地址和交换机决定那个唯一的队列可以接收消息、
所以表达式绑定的队列可以接收到消息

145. rabbitmq 怎么实现延迟消息队列?
  消息被消费者拒收,并且在参数里requeue是false,就不会被放到队列里面,被其他消费者消费。
  消息存活时间过期了
  队列长度限制满了,排在前面的消息会被丢弃或者扔到死信路由上

146. rabbitmq 集群有什么用?
  更快的吞吐消息

147. rabbitmq 节点的类型有哪些?
  内存节点和磁盘节点

148. rabbitmq 集群搭建需要注意哪些问题?
  rabbitmq集群搭建一定要注意每个节点的Cookie同步,否则节点之间无法通信
  主机之间 必须可以相互识别并可达

149. rabbitmq 每个节点是其他节点的完整拷贝吗?为什么?
  不是,队列的完整信息只放在一个节点上,其他节点存放的是该队列的指针

150. rabbitmq 集群中唯一一个磁盘节点崩溃了会发生什么情况?
  集群任然可以保持运行,但是无法进行其他操作(增删改查),直到节点恢复。
  解决方案:设置两个磁盘节点,至少有一个是可用的,可以保持元数据的更改。

151. rabbitmq 对集群节点停止顺序有要求吗?
  启动顺序:磁盘节点=>内存节点
  关闭顺序:内存节点=>磁盘节点

十五、Kafka
152. kafka 可以脱离 zookeeper 单独使用吗?为什么?
  kafka不能脱离zookeeper单独使用,因为kafka使用zookeeper管理和协调kafka的节点服务器

153. kafka 有几种数据保留的策略?
  kafka有两种保存策略:按照过期时间保留和按照存储的消息大小保留。

154. kafka 同时设置了 7 天和 10G 清除数据,到第五天的时候消息达到了 10G,这个时候 kafka 将如何处理?
  这个时候kafka会执行数据清除工作,时间和大小不论哪个条件满足,都会清空数据

155. 什么情况会导致 kafka 运行变慢?
  cpu性能瓶颈、磁盘读写瓶颈、网络瓶颈

156. 使用 kafka 集群需要注意什么?
  集群数量最好不要超过7个,节点越多,消息复制需要的时间就越长,整个群组的吞吐量就越低。
  集群数量最好是单数,因为超过一半故障集群就不能用了,设置为单数容错率更高

十六、Zookeeper
157. zookeeper 是什么?
  zookeeper是一个分布式的,开发源码的分布式应用程序协调服务,是hadoop和hbase的重要组件。

158. zookeeper 都有哪些功能?
  集群管理、主节点选举、分布式锁、命名服务

159. zookeeper 有几种部署模式?
  单机部署:一台集群上运行
  集群部署:多台集群运行
  伪集群部署:一台集群启动多个zookeeper实例运行

160. zookeeper 怎么保证主从节点的状态同步?
  有两种模式,分别是恢复模式和广播模式

161. 集群中为什么要有主节点?
  在分布式环境中,有些业务逻辑只需要集群中的某一台集群进行执行,其他机器可以共享这个结果,
  这样可以大大减少重复计算,提高性能,所以就需要主节点。

162. 集群中有 3 台服务器,其中一个节点宕机,这个时候 zookeeper 还可以使用吗?
  可以继续使用,单数服务器只要没有超过一半的服务器宕机就可以继续使用,

163. 说一下 zookeeper 的通知机制?
  客户端会对某个znode建立一个watcher事件,当该znode发生变化时,这些客户端会收到
  zookeeper的通知,然后客户端可以根据znode变化来做出业务上的改变。

十七、MySql
164. 数据库的三范式是什么?
  表的每一列都是唯一的,原子性,不可拆分、其他列直接或者间接依赖主键、其他列直接依赖主键

165. 一张自增表里面总共有 7 条数据,删除了最后 2 条数据,重启 mysql 数据库,又插入了一条数据,此时 id 是几?
  8
166. 如何获取当前数据库版本?
  select version()

167. 说一下 ACID 是什么?
  原子性:一个事务的操作要么全部完成,要么全部不完成,不会结束在中间某个环节
  一致性:一个事务在执行之前和执行之后数据库都必须处于一致状态
  隔离性:在并发环境下,每个事务都有各自的完成数据空间
  持久性:只要事务成功结束,它对数据库所做的更新就必须永久保存下来

168. char 和 varchar 的区别是什么?
  char的长度是固定的,varchar是一种可变长度的类型

169. float 和 double 的区别是什么?
  double比float的精度要高一些
  float占四个字节float占八个字节

170. mysql 的内连接、左连接、右连接有什么区别?
  左连接:左边有的,右边没有的为null
  右连接:右边有的,左边没有的为null
  内连接:显示左边右边共有的

171. mysql 索引是怎么实现的?
  使用B树索引实现的

172. 怎么验证 mysql 的索引是否满足需求?
  在select 语句前面加上explain关键字并且查看type字段的值

173. 说一下数据库的事务隔离?
  读已提交、读为提交、可重复读(mysql默认数据隔离级别)、串行化

174. 说一下 mysql 常用的引擎?
  MyISAM管理非事务表、InnoDB存储提供事务安全表。

175. 说一下 mysql 的行锁和表锁?
  表锁和行锁锁的粒度不一样,表锁锁住的是一整张表,行锁锁的是表中的一行数据,
行锁是开销最大的锁策略,表锁是开销最小的锁策略。

以下是还没有收集的,以后有机会再弄

 

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

177. mysql 问题排查都有哪些手段?
178. 如何做 mysql 的性能优化

十八、Redis
179. redis 是什么?都有哪些使用场景?
180. redis 有哪些功能?
181. redis 和 memecache 有什么区别?
182. redis 为什么是单线程的?
183. 什么是缓存穿透?怎么解决?
184. redis 支持的数据类型有哪些?
185. redis 支持的 java 客户端都有哪些?
186. jedis 和 redisson 有哪些区别?
187. 怎么保证缓存和数据库数据的一致性?
188. redis 持久化有几种方式?
189.redis 怎么实现分布式锁?
190. redis 分布式锁有什么缺陷?
191. redis 如何做内存优化?
192. redis 淘汰策略有哪些?
193. redis 常见的性能问题有哪些?该如何解决?

十九、JVM
194. 说一下 jvm 的主要组成部分?及其作用?
195. 说一下 jvm 运行时数据区?
196. 说一下堆栈的区别?
197. 队列和栈是什么?有什么区别?
198. 什么是双亲委派模型?
199. 说一下类加载的执行过程?
200. 怎么判断对象是否可以被回收?
201. java 中都有哪些引用类型?
202. 说一下 jvm 有哪些垃圾回收算法?
203. 说一下 jvm 有哪些垃圾回收器?
204. 详细介绍一下 CMS 垃圾回收器?
205. 新生代垃圾回收器和老生代垃圾回收器都有哪些?有什么区别?
206. 简述分代垃圾回收器是怎么工作的?
207. 说一下 jvm 调优的工具?
208. 常用的 jvm 调优的参数都有哪些?

209、你们项目中为什么需要使用SSO呢?
统一管理公司其他子系统登录入口,其他子系统需要登录的时候统一跳转到SSO认证授权中心登录,SSO认证授权中心登录成功之后跳转到原地址。

 正排所以是从文档到关键字的映射(已知文档求关键字),倒排索引是从关键字到文档的映射(已知关键字求文档)

 

posted @   梦一样&#128522;的人生  阅读(351)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
点击右上角即可分享
微信分享提示