当前位置: 首页 > news >正文

Spring面试题2

1、compareable和compactor区别

定义与包位置:Comparable是一个接口,位于java.lang包,需要类去实现接口;而Compactor是一个外部比较器,位于java.util包

用法:Comparable只需要实现int compareTo(T o) 方法,比较当前对象与参数对象的顺序

Compactor实现int compare(T o1, T o2) 方法,比较两个外部对象的顺序

排序逻辑:Comparable由类自身定义唯一排序规则,Compactor可以自定义多种排序规则

2、SpringIOC,什么是控制反转,什么是依赖注入?

IOC其实就是控制反转,依赖注入(DI)是SpringIOC的一种实现方式

IOC(Inversion of Control):IOC指将对象的创建和管理权交给Spring容器(如ApplicationContext)统一控制。传统开发中,对象通过new主动创建依赖,而IoC模式下,容器负责对象的生命周期和依赖关系

DI(Dependency Injection):是IoC的具体实现方式,指容器在运行时动态将依赖对象注入到目标组件中

依赖注入的两种实现方式

  • XML配置:通过<bean>标签定义对象及依赖关系。
  • 注解:如@Autowired(按类型注入)、@Resource(按名称注入)、@Component等,简化配置

依赖注入的三种方式

构造方法注入

Setter方法注入

属性注入:@Autowired,@Resources

spring容器的核心作用

创建和管理bean、依赖注入、管理bean生命周期

SpringAOP是什么?特点是什么

Spring AOP(面向切面编程)是 Spring 框架的核心模块之一,通过动态代理技术将横切关注点(如日志、事务、权限等)与核心业务逻辑解耦

核心是:

切面(Aspect)
封装横切逻辑的模块化单元,通过@Aspect注解定义。例如日志切面类中可包含记录方法执行时间的代码

连接点(JoinPoint)
程序执行过程中的可插入点,如方法调用、异常抛出等。Spring AOP仅支持方法级别的连接点

通知(Advice)

通知类型:

  • 前置通知(@Before):在方法执行前触发(如权限校验)。
  • 后置通知(@After):在方法执行后触发(如日志记录)。
  • 环绕通知(@Around):包裹目标方法,可控制执行流程(如事务管理)。
  • 异常通知(@AfterThrowing):在方法抛出异常时触发(如错误处理)。
  • 返回通知(@AfterReturning):在方法正常返回后触发

优点:与业务代码解耦,提高代码复用性,代码灵活性提高

代理

静态代理

动态代理

JDK动态代理:需要实现至少一个接口,这个接口可以是任意接口,spring会扫描是否使用了接口,如果有接口就用JDK动态代理,运行时动态生成接口实现类,用代理去掉用实现类的方法

CGLIB动态代理:是一个外部的类库,支持去代理未实现接口的普通类

JDK动态代理与CGLIB在Spring中互补使用,前者适用于接口代理,后者覆盖无接口场景

3、BIO/NIO/AIO区别

同步:同步就是发起一个调用后,被调用者未处理完请求之前,调用者不返回

异步:异步就是发起一个调用后,但是被调用者并没有返回结果,此时调用者可以处理其他请求。

阻塞:阻塞就是发起一个请求,调用者一直等待请求结果返回,也就是当前线程会被挂起,无法从事其他任务,只有当条件就绪才能继续。

非阻塞:非阻塞就是发起一个请求,调用者不用一直等着结果返回,可以先去干其他事情

  • BIO同步阻塞I/O模型,它使用一个线程来处理一个请求,如果这个请求没有被处理完,这个线程就会一直等待,直到请求处理完成。

  • NIO同步非阻塞I/O模型,它使用单个线程来处理多个请求,这些请求可以同时被这个线程处理,它通过轮询的方式来处理I/O请求,如果有I/O请求就处理,没有就继续轮询。这种模型适用于连接数较多但是连接时间短的情况

  • AIO异步非阻塞I/O模型,这种模型不需要为每个请求创建一个线程,由操作系统内部的线程来处理I/O请求,同时它也具有非阻塞的特性,I/O请求不会一直等待,而是异步执行。这种模型适用于连接数很多的情况

举个生活中简单的例子,你妈妈让你烧水,小时候你比较笨啊,在那里傻等着水开(同步阻塞)。等你稍微再长大一点,你知道每次烧水的空隙可以去干点其他事,然后只需要时不时来看看水开了没有(同步非阻塞)。后来,你们家用上了水开了会发出声音的壶,这样你就只需要听到响声后就知道水开了,在这期间你可以随便干自己的事情,壶响了你需要去倒水了(异步非阻塞)。

4、final 在 Java 中有什么作用?

  • final 修饰的类叫最终类,该类不能被继承。

  • final 修饰的方法不能被重写。

  • final 修饰的变量叫常量,常量必须初始化,初始化之后值就不能被修改。

5、Java中的容器都有哪些?

6、http和https区别

传输形式:http是明文传输的,https加密传输,采用对称加密和非对称加密结合的方式

传输协议:http基于TCP协议,而https基于SSL/TLS 协议

端口不同:http端口为80,https端口为443

证书:https需要证书认证,而http不需要证书

7、Array 和 ArrayList 有何区别

  • Array 可以存储基本数据类型和对象,ArrayList 只能存储对象

  • Array 是指定固定大小的,而 ArrayList 大小是自动扩展的。

  • Array 内置方法没有 ArrayList 多,比如 addAll、removeAll、iteration 等方法只有 ArrayList 有。

8、哪里用到了对称加密和非对称加密?

对称加密:JWT生成token

非对称:https,阿里云效代码仓库

9、spring框架哪里用到了反射?

1、bean的实例化:Spring通过反射动态创建对象实例,无需硬编码new操作

2、依赖注入:通过反射调用setter方法或直接修改字段(如Field.set() ),将依赖对象注入目标Bean

3、Spring AOP利用反射生成代理对象

4、Spring MVC处理请求:Spring MVC通过反射解析@RequestMapping标记的方法,动态匹配请求参数并执行目标方法

5、数据库访问:Spring JDBC通过反射将ResultSet数据映射到实体类字段

10、SPU和SKU

SPU(Standard Product Unit)标准产品单元:指的是标准化的产品单位,通常是一个品牌下具有相同特征、属性的一类产品,例如,iPhone 13可以被认为是一个SPU,它包含了所有配置和版本的iPhone 13

SKU(Stock Keeping Unit)库存保有单位:是指库存管理中的最小可用单元,用于区分具体商品的种类。例如,不同颜色、不同内存大小的iPhone 13将被视作不同的SKU。

相关文章:

  • gitlab 解决双重认证无法登录remote: HTTP Basic: Access denied.
  • webmin配置终端显示样式,模仿UbuntuDesktop终端
  • 25年HVV关于0day的面试题
  • Elasticsearch Open Inference API 增加了对 Jina AI 嵌入和 Rerank 模型的支持
  • 改进收敛因子和比例权重的灰狼优化算法【期刊论文完美复现】(Matlab代码实现)
  • Python爬虫实战:获取笔趣阁小说信息,并做数据分析
  • 科普:你的笔记本电脑中有三个IP:127.0.0.1、无线网 IP 和局域网 IP;两个域名:localhost和host.docker.internal
  • 【Linux】进程优先级
  • 【小白学AI系列】NLP 核心知识点(八)多头自注意力机制
  • js版本ES6、ES7、ES8、ES9、ES10、ES11、ES12、ES13、ES14[2023]新特性
  • 【什么是双亲委派?】
  • MySQL数据库(3)—— 表操作
  • DeepSeek与ChatGPT:AI语言模型的全面对决与开发者洞察
  • uniapp h5端和app端 使用 turn.js
  • 基于大语言模型的推荐系统(1)
  • 数据库索引:优点、缺点及常见类型
  • 鸿蒙-自定义布局-实现一个可限制行数的-Flex
  • MySQL优化
  • Pandas库:(二)数组对象的索引
  • Python 高级特性-生成器
  • 做网站最简单的方法/seo优化包括哪些内容
  • 网页地址怎么消除/网站seo培训
  • 织梦网站开发兼职/百度收录网站
  • 建设一个企业网站多少钱/企业培训课程视频
  • 学习网站建设有什么用/营销型企业网站有哪些平台
  • 沈阳祥云医院看男科怎么样/北京seo课程