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。
11、Spring Cache是什么的?
SpringCache是Spring提供的一个缓存框架
Spring Cache利用了AOP,实现了基于注解的缓存功能,保证了幂等性,简化代码,提高接口响应速度
Spring Cache不支持TTL的设置,但是可以加上一个#后面可以设置过期时间
12、flowable干嘛的?
简化审核流程的代码,将我们审核流程的代码与业务代码解耦,比如将我们采购单的审核流程通过flowable完成,这样哪怕审核条件变化也可以不用修改代码;
13、xxl-job在哪用到了
1、xxl-job定期扫描死信队列中堆积的消息,每天将死信队列中的消息钉钉推送
2、订单完成:超过20天的订单,xxl-job去扫描订单表里20天前状态为运输中的订单,去调用快递100接口查看这些订单的状态,如果快递的状态为签收则修改订单的状态为完成,如果订单状态还是运输中,就将这些订单推送到客服中心,走人工
3、商品中心第一次全量同步使用ES做个定时任务
4、秒杀系统,在活动开始前5分钟将商品预热到Redis中,原理是我们活动都有一个活动表和活动明细表,XXL-JOB每5分钟扫描一次活动表,用活动表的活动开始日期减去当前日期剩余的时间如果小于五分钟就将活动对应的商品预热到Redis中
5、ELK定期清除10天前的日志
14、聚合支付Jeepay
我们使用的聚合支付jeepay,只需要在Jeepay管理后台填入支付宝/微信等渠道的接口参数(如APPID、密钥),系统自动生成支付路由规则,通过Jeepay提供的Java SDK或HTTP接口,用一行代码发起支付请求,屏蔽不同支付平台的差异,支付结果通过MQ(如RabbitMQ)异步通知业务系统,需验签并更新订单状态,确保高可用。
15、如何设计一个秒杀系统
前端:
1、前端页面静态化+CDN,意思是对于秒杀活动设计来说,我们可以将所有可以静态化的内容全部静态化,然后将其配置在 CDN 服务器上。这样既提高了用户打开页面的时间,又减少了后端服务器的压力。
2、请求频率限制进行优化
后端:
-
增加缓存层 + 预热数据:我们在秒杀活动开始之前,可以手动将热点数据加载到缓存中,从而避免秒杀时去请求数据库
-
MQ 异步处理:
-
限流、熔断、降级
-
业务端优化
16、为什么要序列化和反序列化?
其核心作用在于实现数据结构的跨场景兼容性
例如:
网络传输:网络通信只能传输二进制字节流,而程序中的对象无法直接传输。序列化将对象转换为字节流(如JSON、二进制等),接收方再通过反序列化还原为对象,实现跨网络的对象传递
持久化存储:对象无法直接存储到文件或数据库,需序列化为特定格式(如二进制、XML)
序列化和反序列化是连接内存对象与外部介质(网络、存储)的桥梁,解决了数据跨场景交互、持久化和跨语言协作的难题。合理使用可提升系统扩展性,但需注意版本控制、安全性和性能优化。
17、JWT好处
无状态
有效避免CSRF攻击
适合移动后端
单点登录友好
18、线程池核心参数怎么设置
CPU密集型:核心线程数=CPU核数,最大线程数=核心线程数
IO密集型任务:核心线程数=CPU核数x2,最大线程数=根据阻塞系数计算
阻塞系数0~1,阻塞系数越大,CPU越闲,一般阻塞系数为0.8
19、你对工作的期望是什么?
1、我希望通过我的努力,为团队和公司解决实际问题,推动项目的成功落地。同时,我也非常期待能够在团队中与优秀的同事合作,共同成长。
2、我对工作的期望是能够在公司中深入参与到具体技术领域,如分布式系统、大数据处理等相关的项目中。我希望通过实践不断提升自己的技术水平,并将所学应用于实际场景,为公司创造更多价值。
此外,我也期待能够在一个鼓励创新和持续学习的环境中工作,与团队一起攻克技术难题。
20、你自己感觉你是一个怎样的人?
1.好学 2.责任心强 3,协作强 4.吃苦耐劳 5.自我总结自我复盘 6.积极上进
21、你如何去胜任这份工作?
1.多年经验 2.高效的编码能力 3.全栈 4.沟通能力强 5.及时汇报进度
6.自我学习,解决问题 7.同学在这个领域,经常沟通学习
22、你们人脸识别传的核心参数有哪些?
性别,年龄,业主的某一帧的照片
23、享元模式
是一种结构型设计模式,其核心思想是通过共享技术减少大量相似对象的资源消耗,优化内存使用和系统性能。
优点:减少内存占用:通过共享对象避免重复创建;提升性能:降低对象频繁创建/销毁的开销
缺点:增加系统复杂性以及线程安全问题
场景:字符串常量池、数据库连接池、游戏开发(角色与道具复用
)
24、单体数据库挂了怎么保证数据的可靠性?
日志持久化、数据备份与恢复、主从复制、最好采用集群
25、MySQL的二阶段提交
第一阶段先把数据提交的内存和redolog中,二阶段后台起一个线程去将redolog日志里记录的数据刷新到磁盘里
26、list、set、map区别
特性 | List | Set | Map |
---|---|---|---|
重复元素 | 允许 | 不允许 | 键唯一,值可重复 |
Null 值 | 允许多个 null | 最多一个 null(如 HashSet 允许,TreeSet 不允许) | 键最多一个 null,值允许多个 null |
顺序性 | 按插入顺序存储 | 默认无序(TreeSet 有序,LinkedHashSet 按插入顺序) | 默认无序(TreeMap 按键排序,LinkedHashMap 按插入顺序) |
27、实现深拷贝的两种核心方式
1、实现 Cloneable
接口 + 重写 clone()
方法
①目标类实现 Cloneable
接口(标记接口,无方法需实现
②重写 Object
类的 clone()
方法,所有需要深拷贝的引用类型属性所在的类,都必须实现 Cloneable
接口并重写 clone()
方法,否则仅实现浅拷贝
2、序列化(Serializable
接口)
目标类实现 Serializable
接口
通过对象序列化与反序列化生成新对象,自动实现深拷贝
28、死锁产生的条件
互斥条件(锁的互斥):一个资源一次只能被线程持有
保持条件:一个线程获取资源时,会一直持有这些资源,直到获取所有满足的资源才释放
不剥夺条件:已分配的资源不能被其他线程抢走
环路等待:多个线程形成一种循环等待的关系,互相持有对方所需资源,导致死锁
死锁产生这四个条件必须全部满足,少一个都产生不了死锁
29、static 属性为什么不会被序列化
因为序列化是针对对象而言的, 而 static 属性优先于对象存在, 随着类的加载而加载, 所以不会被序列化.
30、强软弱虚引用
强引用:普通的变量引用
软引用:
-
当所剩内存空间不够我们新的对象存储的时候,直接干掉软引用。
-
当所剩内存空间够我们新对象的存储的时候,不会删除我们的软引用对象。
弱引用:将对象用WeakReference弱引用类型的对象包裹,弱引用跟没引用差不多,GC会直接回收掉,只要GC执行了,他就会被回收掉.
虚引用:虚引用也称为幽灵引用或者幻影引用,它是最弱的一种引用关系,几乎不用
相关文章:

Spring面试题2
1、compareable和compactor区别 定义与包位置:Comparable是一个接口,位于java.lang包,需要类去实现接口;而Compactor是一个外部比较器,位于java.util包 用法:Comparable只需要实现int compareTo(T o) 方法,比较当前对…...

Linux 权限系统和软件安装(二):深入理解 Linux 权限系统
在 Linux 的世界里,权限系统犹如一位忠诚的卫士,严密守护着系统中的文件与目录,确保只有具备相应权限的用户才能进行操作。与其他一些操作系统不同,Linux 并不依据文件后缀名来标识文件的操作权限,而是构建了一套独特且…...

二:前端发送POST请求,后端获取数据
接着一:可以通过端口访问公网IP之后 二需要实现:点击飞书多维表格中的按钮,向服务器发送HTTP请求,并执行脚本程序 向服务器发送HTTP请求: 发送请求需要明确一下几个点 请求方法: 由于是向服务器端发送值…...

单机上使用docker搭建minio集群
单机上使用docker搭建minio集群 1.集群安装1.1前提条件1.2步骤指南1.2.1安装 Docker 和 Docker Compose(如果尚未安装)1.2.2编写docker-compose文件1.2.3启动1.2.4访问 2.使用2.1 mc客户端安装2.2创建一个连接2.3简单使用下 这里在ubuntu上单机安装一个m…...

安全生产月安全知识竞赛主持稿串词
女:尊敬的各位领导、各位来宾 男:各位参赛选手、观众朋友们 合:大家好~ 女:安全是天,有了这一份天,我们的员工就会多一份幸福, 我们的企业就会多一丝光彩。 男:安全是地,有了这一片地,我们的员工就多了一…...
C++的设计模式
1. 创建型模式 单例模式 (Singleton) 意图:确保类仅有一个实例,并提供全局访问点。(常见的日志类)实现:class Singleton { private:static Singleton* instance;Singleton() {} // 私有构造函数 public:static Singl…...

C++手撕AVL树
C手撕AVL树 1、AVL树的概念2、AVL树的结构3、AVL树的插入3.1、大概过程3.2、更新平衡因子3.3、更新平衡因子代码3.4、左单旋3.5、右单旋3.6、右左双旋3.7、左右双旋 4、AVL树的删除5、AVL树的查找6、AVL树的平衡检测7、AVL树的其他函数完整代码 1、AVL树的概念 二叉搜索树虽可…...

写大论文的word版本格式整理,实现自动生成目录、参考文献序号、公式序号、图表序号
前情提要:最近开始写大论文,发现由于内容很多导致用老方法一个一个改的话超级麻烦,需要批量自动化处理,尤其是序号,在不断有增添删减的情况时序号手动调整很慢也容易出错,所以搞一个格式总结,记…...

Redission可重试、超时续约的实现原理(源码分析)
Redission遇到其他进程已经占用资源的时候会在指定时间waitTime内进行重试。实现过程如下: 执行获取锁的lua脚本时,会返回一个值, 如果获取锁成功,返回nil,也就是java里的null 如果获取锁失败,用语句“PT…...
java八股文-消息队列
一、MQ基础篇 1. 什么是消息队列? 消息队列(MQ)是分布式系统中实现异步通信的中间件,解耦生产者和消费者。 2. 使用场景有哪些? 异步处理(如注册后发送邮件)系统解耦(不同服务通过…...

3分钟idea接入deepseek
DeepSeek简介 DeepSeek 是杭州深度求索人工智能基础技术研究有限公司开发的一系列大语言模型,背后是知名量化资管巨头幻方量化3。它专注于开发先进的大语言模型和相关技术,拥有多个版本的模型,如 DeepSeek-LLM、DeepSeek-V2、DeepSeek-V3 等&…...
【DeepSeek与鸿蒙HarmonyOS:开启应用开发新次元】
引言:科技融合的新曙光 在当今数字化浪潮中,DeepSeek 和鸿蒙 HarmonyOS 宛如两颗璀璨的明星,各自在人工智能和操作系统领域熠熠生辉。DeepSeek 以其强大的大模型能力,在自然语言处理、代码生成等多个领域展现出卓越的性能&#x…...

基于光度立体视觉的三维重建方法
基于光度立体视觉的三维重建方法 一、三维重建概述二、光度立体原理简介三、Halcon:光度立体实验1.四张测试原图2.结果图3.Halcon实验代码 四、相关参考 光度立体视觉通过多角度的光源激励,获取多个不同光照方向下的表面图像,从中重建表面法向࿰…...

在VSCode中接入deepseek
注册就送14元2000万tokens。 https://cloud.siliconflow.cn/i/rnbA6i6U各种大模型 下面介绍我是如如接入vscode的 左边生成一个key,呆会vscode要用,不然401. 打开vscod,电脑能上网。下插件。 下好要配置 点它一下。 要配置,全…...
DeepSeek掘金——VSCode 接入DeepSeek V3大模型,附使用说明
VSCode 接入DeepSeek V3大模型,附使用说明 由于近期 DeepSeek 使用人数激增,服务器压力较大,官网已 暂停充值入口 ,且接口响应也开始不稳定,建议使用第三方部署的 DeepSeek,如 硅基流动 或者使用其他模型/插件,如 豆包免费AI插件 MarsCode、阿里免费AI插件 TONGYI Lin…...

申请SSL证书,如何完成域名验证
一、前言 给大家分享一下Lets Encrypt 证书申请时,如何完成域名验证这一步操作的方法。 二、为什么要进行域名验证 申请SSL证书时进行域名验证的主要原因是确保证书只颁发给有权控制特定域名的实体。这是为了保证互联网的安全性和信任,防止恶意方获取不…...

HTTP实验(ENSP模拟器实现)
HTTP概述 HTTP(HyperText Transfer Protocol,超文本传输协议),设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。 HTTP定义了多种请求方法,常用的包括: GET:请求资源。 POST&…...

AI工具评论
deepseek(一系列接入R1的工具如:元宝、纳米、C知道、qq浏览器、百度AI、小艺...,应该都是R1满血版吧...) kimi 豆包 ------ chatGPT Grok3 cursor github copilot https://zhuanlan.zhihu.com/p/21161495794https://zhuan…...
comfy UI节点缺失dlib库处理
安装出现dlib错误: [!] ERROR: Failed building wheel for dlib Failed to build dlib 依赖环境:python3.12 comfyui 最新版本 pip install dlib 出现错误 直接下代码编译 编译为:dlib-19.24.99-cp312-cp312-win_amd64.whl 下载地址&am…...

STM32 HAL库I2C函数使用详解:以MPU6050传感器为例
引言 I2C(Inter - Integrated Circuit)由Philips公司开发的一种简单、双向二线制串行通信协议。它只需要两根线即可在连接于总线上的器件之间传送信息,主要用于短距离、低速的数据传输,广泛应用于各种传感器、存储器等设备的通信中…...
【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】
1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件(System Property Definition File),用于声明和管理 Bluetooth 模块相…...

Linux-07 ubuntu 的 chrome 启动不了
文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了,报错如下四、启动不了,解决如下 总结 问题原因 在应用中可以看到chrome,但是打不开(说明:原来的ubuntu系统出问题了,这个是备用的硬盘&a…...

MySQL 8.0 OCP 英文题库解析(十三)
Oracle 为庆祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始,将英文题库免费公布出来,并进行解析,帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...
CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云
目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...

SpringTask-03.入门案例
一.入门案例 启动类: package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...

vue3+vite项目中使用.env文件环境变量方法
vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...
Java + Spring Boot + Mybatis 实现批量插入
在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法:使用 MyBatis 的 <foreach> 标签和批处理模式(ExecutorType.BATCH)。 方法一:使用 XML 的 <foreach> 标签ÿ…...
SQL慢可能是触发了ring buffer
简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...

LabVIEW双光子成像系统技术
双光子成像技术的核心特性 双光子成像通过双低能量光子协同激发机制,展现出显著的技术优势: 深层组织穿透能力:适用于活体组织深度成像 高分辨率观测性能:满足微观结构的精细研究需求 低光毒性特点:减少对样本的损伤…...
Modbus RTU与Modbus TCP详解指南
目录 1. Modbus协议基础 1.1 什么是Modbus? 1.2 Modbus协议历史 1.3 Modbus协议族 1.4 Modbus通信模型 🎭 主从架构 🔄 请求响应模式 2. Modbus RTU详解 2.1 RTU是什么? 2.2 RTU物理层 🔌 连接方式 ⚡ 通信参数 2.3 RTU数据帧格式 📦 帧结构详解 🔍…...