1、匿名内部类
在不定义子类的情况下创建Animal的子类对象,就可以使用匿名内部类。
2、Lambda表达式
作用:用于简化匿名内部类代码的书写。
只有基于函数式接口的匿名内部类才能被Lambda表达式简化。
3、线程安全问题是什么,怎么解决
为了解决前面的线程安全问题,我们可以使用线程同步思想。同步最常见的方案就是加锁,意思是每次只允许一个线程加锁,加锁后才能进入访问,访问完毕后自动释放锁,然后其他线程才能再加锁进来。
1.同步代码块
2.同步方法
3.Lock锁
4、反射机制的应用场景有哪些?
反射是框架设计的灵魂。 在我们平时的项目开发过程中,基本上很少会直接使用到反射机制,但这不能说明反射机制没有用,实 际上有很多设计、开发都与反射机制有关,例如模块化的开发,通过反射去调用对应的字节码;动态代 理设计模式也采用了反射机制,还有我们日常使用的 Spring/Hibernate 等框架也大量使用到了反射机 制。 举例:
①我们在使用JDBC连接数据库时使用Class.forName()通过反射加载数据库的驱动程序; ②Spring框架也用到很多反射机制, 经典的就是xml的配置模式。Spring 通过 XML 配置模式装载 Bean 的过程:1) 将程序内所有 XML 或 Properties 配置文件加载入内存中; 2)Java类里面解析xml或 properties里面的内容,得到对应实体类的字节码字符串以及相关的属性信息; 3)使用反射机制,根据这个字符串获得某个类的Class实例; 4)动态配置实例的属性
5、CountDownLatch
CountDownLatch就是JUC包下的一个工具,整个工具最核心的功能就是计数器。
如果有三个业务需要并行处理,并且需要知道三个业务全部都处理完毕了。
需要一个并发安全的计数器来操作。
每个业务处理完毕之后,执行一次countDown方法,指定的3每次在执行countDown方法时,对3 进行-1。 主线程可以在业务处理时,执行await,主线程会阻塞等待任务处理完毕。 当设置的3基于countDown方法减为0之后,主线程就会被唤醒,继续处理后续业务。
当咱们的业务中,出现2个以上允许并行处理的任务,并且需要在任务都处理完毕后,再做其他处理 时,可以采用CountDownLatch去实现这个功能。
6、@Autowired 注解:
默认注入方式:
- 按类型自动注入:
@Resource 注解
默认行为是按 名称 注入。
7、SpringBoot中如何实现定时任务?
定时任务也是一个常见的需求,Spring Boot 中对于定时任务的支持主要还是来自 Spring 框架。 在 Spring Boot 中使用定时任务主要有两种不同的方式,
一个就是使用 Spring 中的 @Scheduled 注解,
另一个则是使用第三方框架 Quartz。
使用 Spring 中的 @Scheduled 的方式主要通过 @Scheduled 注解来实现。 使用 Quartz ,则按照 Quartz 的方式,定义 Job 和 Trigger 即可
8、SpringBoot打成的jar和普通jar有什么区别?
Spring Boot 项目最终打包成的 jar 是可执行 jar ,这种 jar 可以直接通过 java -jar xxx.jar 命令来运行, 这种 jar 不可以作为普通的 jar 被其他项目依赖,即使依赖了也无法使用其中的类。 Spring Boot 的 jar 无法被其他项目依赖,主要还是他和普通 jar 的结构不同。 普通的 jar 包,解压后直接就是包名,包里就是我们的代码,而 Spring Boot 打包成的可执行 jar 解压 后,在 \BOOT-INF\classes 目录下才是我们的代码,因此无法被直接引用。 如果非要引用,可以在 pom.xml 文件中增加配置,将 Spring Boot 项目打包成两个 jar ,一个可执行, 一个可引用
9、springCloud和Dubbo有什么区别
①定位不同: springCloud微服务架构下的一站式解决方案;Dubbo主要用于服务的调用和治理。
②生态环境不同: springCloud依靠spring平台,更完善;Dubbo相对匮乏。
③调用方式不同: springCloud是采用Http协议做远程调用,接口一般是Rest风格,比较灵活;Dubbo是采用Dubbo协议,接口一般是Java的Service接口,格式固定。
简单来说: springCloud是品牌机,Dubbo是组装机。
10、 构造方法出现了循环依赖怎么解决?
候选人:
由于构造函数是bean生命周期中最先执行的,Spring框架无法解决构造方法的循环依赖问题。可以使用@Lazy懒加载注解,延迟bean的创建直到实际需要时。
11、什么是服务雪崩,怎么解决这个问题?
候选人:
服务雪崩是指一个服务的失败导致整个链路的服务相继失败。我们通常通过服务降级和服务熔断来解决这个问题:
- 服务降级:在请求量突增时,主动降低服务的级别,确保核心服务可用。
- 服务熔断:当服务调用失败率达到一定阈值时,熔断机制会启动,防止系统过载。
12、UDP协议的特点
13、TCP协议特点(三次握手、四次挥手)
14、SpringBoot有哪些优点
1.独立运行
2.简化配置:约定优于配置的理念
3.自动配置
4.无代码生成和XML配置
5.Actuator应用监控
15、SpringBoot项目需要单独的Web容器吗?
可以不需要,SpringBoot项目中我们会添加spring-boot-starter-web这个依赖,而在这个依赖中内嵌了 Tomcat容器
16、简述一下自定义异常的应用场景
借助异常机制,我们可以省略很多业务逻辑上的判断处理,直接借助java的异常机制可以简化业务逻辑判断 代码的编写
1当你不想把你的错误直接暴露给前端或者你想让前端从业务角度判断后台的异常,这个时候自定义异常 类是你的不二选择
2 虽然JAVA给我们提供了丰富的异常类型,但是在实际的业务上,还有很多情况JAVA提供的异常类型不能准 确的表述出我们业务上的含义
3 控制项目的后期服务 … …
17、怎样声明一个类不会被继承,什么场景下会用?
final修饰的类不能有子类 大部分都是出于安全考虑
String举例
18、Jdk1.8中的stream有用过吗
Stream有如下三个操作步骤:
一、创建Stream:从一个数据源,如集合、数组中获取流。
二、中间操作:一个操作的中间链,对数据源的数据进行操作。
三、终止操作:一个终止操作,执行中间操作链,并产生结果。
19、谈谈你对单例模式的理解
1.单例模式的核心:要保证一个类只有一个对象在当前的容器中,而且需要提供一个实例全局的访问方 法。
2.实现单例的方式:饿汉式,懒汉式
20、使用RocketMQ过程中遇到过什么问题?
1、消息挤压问题
2、消息丢失问题
3、消息重复消费问题
4、RocketMQ 内存不够OOM问题