- 博客(21)
- 收藏
- 关注
原创 什么是双亲委派模型?JVM为什么采用双亲委派机制?
双亲委派模型中,每一个类加载器都有一个父类加载器。类加载请求总是首先委托给父类加载器去完成,只有当父类加载器无法完成这个请求时,子类加载器才会尝试自己去加载。启动类加载器 (Bootstrap ClassLoader):这是最顶层的类加载器,它用来加载 Java 的核心库(如rt.jar),并且是 C++ 实现的,没有父类加载器。扩展类加载器 (Extension ClassLoader):它的父类加载器是启动类加载器,它用来加载扩展目录 (lib/ext或者由指定的路径) 中的 jar 文件。
2024-08-12 23:10:44
437
原创 JVM由那些部分组成,运行流程是什么?
JVM 是一个复杂的软件系统,它不仅负责执行 Java 字节码,还管理内存、处理线程调度、执行垃圾回收等。
2024-08-12 22:59:15
1052
原创 说一说对synchronized关键字的理解?
是 Java 语言中用于实现线程同步的关键字。它主要用于确保多个线程之间的互斥访问,即在同一时刻只有一个线程可以执行被修饰的方法或代码块。
2024-08-11 22:08:04
1008
原创 说一说你对AQS的理解?
AQS 是 Java 并发编程中的一个重要组成部分,它提供了构建各种同步工具的基础框架。通过继承 AQS 并实现其提供的模板方法,开发人员可以方便地创建出符合自己需求的同步组件。AQS 的灵活性和可扩展性使其成为 Java 并发工具箱中的重要基石。
2024-08-11 22:03:47
461
原创 什么情况下mysql 会索引失效?
MySQL 中索引失效的情况通常与查询条件、表结构以及数据访问模式有关。了解索引失效的原因可以帮助我们更有效地使用索引来提高查询性能。为了确保索引能够被有效使用,建议根据查询需求来仔细设计索引策略,包括创建复合索引、避免上述情况的发生等。命令来分析查询计划,查看 MySQL 是否正确地使用了索引。
2024-08-10 20:40:36
428
原创 @Scheduled注解来定义定时任务多了会不会有什么问题?
注解来定义定时任务是一种常见的做法,尤其是在Spring框架中。如果在一个应用中定义了过多的。的定时任务时,应该充分考虑到这些潜在的问题,并采取适当的预防措施。总之,在设计和实现基于。
2024-08-10 20:37:37
364
原创 @Autowired 和 @Resource 是两种注解区别?
Autowired和@Resource都用于自动装配 Bean,但它们的默认行为和使用场景略有不同。@Autowired更适合与 Spring 框架紧密集成的项目,而@Resource则更适合需要跨框架使用的项目。在大多数情况下,使用@Autowired是更推荐的做法,因为它提供了更丰富的特性和更好的 Spring 集成。
2024-08-09 11:45:44
1020
原创 说一说mysql的having?和where有什么区别?
在 MySQL 中,HAVING 子句和 WHERE 子句都是用于过滤查询结果的,但它们之间有一些重要的区别。下面我将详细介绍这两个子句的区别以及它们的使用场景。1. HAVING 子句作用:HAVING 子句用于过滤聚合后的结果集。它通常与 GROUP BY 子句一起使用,用于过滤分组后的结果。语法:HAVING 子句通常出现在 GROUP BY 子句之后。例如,HAVING COUNT(*) > 10。示例:假设有一个 orders 表,包含 order_id
2024-08-09 11:07:08
786
原创 说说mysql窗口函数
窗口函数是 MySQL 中一个非常强大的特性,它可以帮助你执行复杂的计算,而无需使用复杂的子查询或连接操作。通过使用窗口函数,你可以轻松地执行各种数据分析任务,如计算累计和、排名、百分比等。掌握窗口函数的使用可以大大提高你的 SQL 查询能力。
2024-08-09 11:04:17
361
原创 mvcc底层实现原理知道吗
MVCC是一种并发控制机制,通过保存数据的多个版本来支持并发读写操作。使用 MVCC 来支持事务的并发执行,并通过事务 ID 和版本号来判断数据的可见性。隔离级别影响 MVCC 的行为,不同的隔离级别有不同的可见性和锁定策略。垃圾回收是 MVCC 的一个重要部分,用于清理不再需要的数据版本。
2024-08-08 20:01:48
1859
原创 谈谈你对ThreadLocal的理解?
是一个强大的工具,用于实现线程绑定的变量,避免多线程环境下的数据竞争问题。它通过每个线程拥有自己的哈希表来存储变量副本,从而实现线程之间的隔离。使用时需要注意内存泄漏问题,并确保在适当的时候清理不再需要的变量。可以简化多线程编程的复杂性,并提高程序的健壮性。
2024-08-08 19:59:31
1882
原创 MySql的默认隔离级别是什么?可以解决幻读问题吗?
隔离级别可以防止脏读和不可重复读。它并不能完全解决幻读问题,但 InnoDB 的 Next-Key Locks 机制有助于减少幻读的发生。如果需要完全避免幻读,可以使用隔离级别,但这可能会降低并发性能。
2024-08-07 21:49:44
967
原创 如何防止库存扣减的并发问题?
乐观锁和悲观锁是两种常见的并发控制机制,可以根据具体情况选择使用。事务是一种保证操作原子性的有效手段,特别适用于简单的并发场景。分布式锁适用于分布式系统,可以确保跨服务的一致性。库存预分配和消息队列是解决并发问题的有效方法,可以应用于高并发场景。选择合适的方法取决于您的具体需求和系统架构。在实际应用中,可能需要结合多种方法来解决库存扣减的并发问题。
2024-08-07 21:39:07
606
原创 RabbitMQ 和 Kafka有什么异同?
RabbitMQ 和 Apache Kafka 是两种非常流行的分布式消息传递系统,它们各有特点和适用场景。
2024-08-06 15:47:03
2518
1
原创 如何确定线程池核心线程数?
核心线程数对于计算密集型任务,设置为核心数。对于 I/O 密集型任务,可以设置为核心数的 1.5 至 2 倍。根据具体的任务特性和系统负载进行调整。监测和调整通过监控工具定期检查性能指标,并根据实际情况调整核心线程数。正确设置核心线程数可以显著提高系统的性能和稳定性。
2024-08-06 11:32:08
821
原创 线程池中有哪些常见的阻塞队列?
线程池中常用的阻塞队列(BlockingQueue)是包中的一部分,用于在线程池中管理任务队列。阻塞队列对于线程池非常重要,因为它可以控制线程池中的任务队列的大小,并在队列为空或满时阻塞线程。
2024-08-06 10:32:07
586
原创 shutdown() 和shutdownNow()的区别?如何正确的关闭线程池?
shutdown()停止接受新任务,允许已提交的任务完成。适用于希望优雅地关闭线程池,并等待所有任务执行完成的情况。停止接受新任务,尝试取消正在执行的任务,并清空任务队列。适用于需要尽快关闭线程池,即使这意味着中断正在执行的任务的情况。选择哪个方法取决于您的应用程序的具体需求。如果需要尽可能快地关闭线程池而不关心正在执行的任务,可以选择。如果希望等待所有任务执行完毕再关闭线程池,可以选择shutdown()。示例代码。
2024-08-05 18:23:17
1238
原创 说一下线程池的核心参数(线程池的执行原理知道吗)
线程池是一种多线程处理形式,它允许多个线程重用一组固定数量的线程,而不是为每个任务创建和销毁线程。使用线程池可以有效地管理资源,提高应用程序的响应速度和线程的利用率。Java 中的线程池主要通过接口及其实现类来实现。是 Java 核心线程池的实现之一,它提供了许多配置选项来定制线程池的行为。
2024-08-05 17:37:34
771
原创 如何停止一个正在运行的线程?
在Java中,官方并不推荐使用强制终止线程的方式,因为这可能会导致资源泄露或数据不一致等问题。然而,有时候出于某些原因,我们可能需要停止一个正在运行的线程。在设计多线程程序时,应该尽量避免强制终止线程,而是通过设计良好的控制机制来优雅地停止线程。这样可以减少潜在的错误和资源泄露的风险。
2024-08-04 14:38:57
338
原创 新建T1、T2、T3三个线程,如何保证它们按顺序执行?
选择哪种方法取决于具体的应用场景和需求。在设计多线程程序时,需要考虑线程安全、性能以及资源利用等多个方面。
2024-08-04 13:47:04
528
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人