java
-
rabbitmq 的消息是怎么发送的?
RabbitMQ消息发送的核心组件包括生产者、连接、信道、交换机、队列和绑定。生产者通过连接建立信道,将消息发布到交换机,交换机根据类型和路由键将消息路由至队列,消费者从队列中获取消息。交换机是消息路由的“指挥官”,主要有四种类型:Direct Exchange(直连交换机)精确匹配路由键与绑定键,…
-
mybatis 分页插件的实现原理是什么?
MyBatis分页插件通过拦截StatementHandler的prepare方法,在SQL执行前动态改写SQL实现分页。首先拦截SQL获取原始语句,根据数据库类型判断生成对应分页语法(如MySQL用LIMIT,Oracle用ROWNUM嵌套查询),并构造COUNT(*)查询获取总记录数,最终将分页…
-
java 中线程池都有哪些状态?
%ignore_a_1%有五种状态:RUNNING、SHUTDOWN、STOP、TIDYING、TERMINATED。RUNNING为初始状态,可接收任务;调用shutdown()后进入SHUTDOWN,不再接收新任务但处理队列任务;调用shutdownNow()进入STOP,尝试中断执行中的任务并…
-
简述分代垃圾回收器是怎么工作的?
分代垃圾回收器将堆内存分为新生代和老年代,基于对象存活时间采用不同回收策略,提升效率。新生代使用复制算法处理短命对象,频繁进行Minor GC;老年代使用标记-清除或标记-整理算法,较少触发Major GC。通过分代设计,避免全堆扫描,提高回收效率。G1回收器进一步优化,将堆划为Region,实现可…
-
hibernate 中如何在控制台查看打印的 sql 语句?
配置Hibernate显示SQL语句可通过三种方式:在hibernate.cfg.xml中设置show_sql、format_sql和use_sql_comments属性;2. Spring Boot项目在application.yml或properties中配置spring.jpa.show-sq…
-
请简述编写Java程序,使用新的日期时间API(Lo
Java 8引入java.time包以替代Date和Calendar。1. 使用LocalDateTime.now()获取当前日期时间;2. 通过DateTimeFormatter格式化或解析日期字符串;3. 用ZonedDateTime处理时区,如纽约时间;4. 支持便捷的日期计算,如加减天数、小…
-
java 中Array 和 ArrayList 有何区别?
Array是固定大小的原始数据结构,可存基本类型和对象,性能高;ArrayList来自%ignore_a_1%.util包,动态扩容,仅存对象,操作灵活但稍慢。 Java 中 Array 和 ArrayList 都用于存储多个元素,但它们在使用方式和特性上有明显区别。 1. 类型与所属包 Array…
-
java 中notify()和 notifyAll()有什么区别?
notify()唤醒一个等待线程,由JVM随机选择,适用于单一资源场景;notifyAll()唤醒所有等待线程,避免线程饥饿,推荐用于多条件或复杂逻辑,确保线程安全。 在 Java 中,notify() 和 notifyAll() 都是用于唤醒等待线程的方法,它们定义在 Object 类中,通常配合…
-
redis 是什么?都有哪些使用场景?
Redis是高性能内存数据库,支持多数据类型与持久化,常用于缓存、会话存储、排行榜、消息队列、分布式锁及实时数据处理,具备高并发、低延迟特性,广泛应用于现代分布式系统。 Redis 是一个开源的内存数据结构存储系统,常被用作数据库、缓存和消息中间件。它支持多种数据结构,如字符串(string)、哈希…
-
什么是 CSRF 攻击,如何避免?
CSRF攻击利用浏览器自动携带用户认证信息的特点,诱导用户执行非本意操作。例如,用户登录银行网站后访问恶意页面,页面中的隐藏请求会携带Cookie自动发起转账。防御方法包括:使用Anti-CSRF Token验证请求合法性;检查Referer或Origin头确认来源;设置SameSite Cooki…