- 博客(65)
- 收藏
- 关注
原创 HashMap初始化容量怎么保证是2的n次方
HashMap通过方法将用户传入的初始容量调整为大于或等于该值的最小 2 的幂次方。容量为 2 的幂次方可以优化哈希值映射、减少冲突,并简化扩容操作。这种设计是HashMap高性能的关键之一。通过这种机制,HashMap确保了初始容量始终是 2 的幂次方,从而提高了哈希表的性能和可靠性。
2025-03-14 16:22:15
370
原创 根据JVM参数改变系统默认的HashCode计算方法
在 Java 中,-XX:hashCode是一个 JVM 参数,用于控制对象的 hashCode() 方法的生成方式。通过设置不同的参数值,可以改变 hashCode() 的生成算法。
2025-03-14 15:57:32
423
原创 多线程--happens-before原则
原则是 Java 内存模型(JMM)的核心概念之一,用于定义多线程环境下操作之间的和。它的作用是确保在多线程程序中,某些操作的结果对其他线程是可见的,并且操作的执行顺序符合预期。
2025-03-11 15:42:06
460
原创 设计模式--单例模式
在高并发应用中,数据库连接池是管理数据库连接资源的常用方式。为了避免重复创建连接池,我们可以使用单例模式来设计一个。在多线程应用中,线程池是管理线程资源的常用方式。为了避免重复创建线程池,我们可以使用单例模式来设计一个。在一个大型系统中,日志记录是必不可少的。为了避免重复创建日志对象,我们可以使用单例模式来设计一个。为了避免重复加载配置文件,我们可以使用单例模式来设计一个。,统一管理线程池的创建和任务分配。,统一管理日志的写入和输出。,统一管理配置的读取和访问。,统一管理连接的获取和释放。
2025-03-07 16:39:45
342
原创 多线程--锁
锁是一种用于控制多个线程对共享资源访问的同步机制。它的主要作用是确保同一时刻只有一个线程可以访问共享资源,从而避免数据竞争和不一致性问题。
2025-03-06 11:41:49
824
原创 多线程--synchronized关键字
synchronized是Java中的一个关键字,用于实现线程同步,确保多个线程在访问共享资源时的线程安全。它可以修饰方法或代码块,确保同一时刻只有一个线程可以执行被修饰的代码。
2025-03-05 15:53:39
449
原创 多线程--volatile关键字
特性描述可见性通过内存屏障强制刷新 CPU 缓存,确保变量的修改对其他线程立即可见。有序性通过内存屏障禁止指令重排序,确保代码的执行顺序与编写顺序一致。适用场景状态标志、简单的可见性需求。性能开销比轻量,但比普通变量稍高。
2025-03-05 13:57:57
1071
原创 多线程--JMM(Java Memory Modle,java内存模型)
特性描述解决方法可见性一个线程对共享变量的修改,其他线程能够立即看到。volatile、锁机制有序性程序的执行顺序按照代码的先后顺序执行。volatile、锁机制原子性一个操作是不可分割的,要么全部执行成功,要么全部不执行。原子类、锁机制JMM 是 Java 多线程编程的基础,理解其内存结构和规则,可以帮助我们编写高效、可靠的多线程程序。
2025-03-04 16:21:20
833
原创 多线程--线程池
核心线程数。:最大线程数。:线程空闲时间。unit:时间单位。workQueue:工作队列。:线程工厂。handler:拒绝策略。
2025-03-04 14:50:53
618
原创 多线程--常见的线程安全问题
问题类型描述解决方法竞态条件多个线程同时访问共享资源,导致行为依赖于执行顺序。使用锁或原子类数据竞争多个线程同时访问共享变量,导致行为不可预测。使用volatile或锁机制死锁多个线程互相等待对方释放锁,导致无法继续执行。避免嵌套锁,使用锁顺序一致性活锁线程不断重试某个操作,导致无法继续执行。引入随机性饥饿某些线程由于优先级低或竞争资源失败,导致长时间无法执行。使用公平锁,合理设置优先级内存可见性问题一个线程对共享变量的修改,另一个线程无法立即看到。使用。
2025-03-04 11:49:40
1278
原创 多线程--项目中哪些地方用到了多线程
场景原理技术实现异步任务处理通过多线程异步执行任务,避免阻塞主线程。@Async批量数据处理将数据分片,利用多线程并行处理。定时任务定时执行任务,如数据清理、缓存刷新。@Scheduled高并发请求处理使用线程池处理高并发请求,提高系统吞吐量。、消息队列并行计算利用多线程并行处理计算密集型任务。Stream API。
2025-03-04 11:00:31
1362
原创 spring--spring和springboot差别
特性Spring项目初始化手动配置使用 Spring Initializr 快速生成配置方式XML 或 Java 配置自动配置 + 外部化配置Web 开发手动配置 DispatcherServlet自动配置 DispatcherServlet内嵌服务器需要外部服务器内嵌服务器依赖管理手动管理Starter 依赖 + 自动依赖管理监控和管理需要手动集成 Actuator内置 Actuator是Spring的进一步封装和优化,适合快速开发和现代应用架构。
2025-03-03 16:15:42
1270
原创 集合之List--List如何安全删除
方法适用场景特点单线程环境安全高效removeIf()Java 8+,单线程环境简洁,适合函数式编程倒序遍历for循环根据索引删除避免索引错位多线程环境线程安全,适合读多写少+ 锁多线程环境线程安全,需要手动加锁生成新列表不修改原列表,适合函数式编程。
2025-03-03 11:39:35
1675
原创 集合之List--List如何实现排序
如果需要对自定义对象排序,可以实现Comparable接口或使用Comparator示例:自定义对象排序int age;@Override方法适用场景特点自然排序或自定义排序简单易用,支持降序排序自然排序或自定义排序Java 8 引入,直接操作List流式处理,支持并行排序适合函数式编程风格实现Comparable自定义对象的自然排序需要修改类代码使用Comparator自定义排序规则灵活,无需修改类代码。
2025-03-03 11:21:44
864
原创 集合之List--List如何去重
方法是否保留顺序时间复杂度适用场景HashSet不保留O(n)快速去重,不关心顺序保留O(n)快速去重,保留顺序保留O(n)函数式编程风格手动遍历去重保留O(n²)数据量较小TreeSet排序O(n log n)去重并排序保留O(n)使用第三方库。
2025-03-03 11:04:49
808
原创 集合之List--ArrayList扩容机制
ArrayList的默认初始容量为 10。当元素数量超过当前容量时,会触发扩容,新容量通常是原容量的 1.5 倍。扩容操作会复制元素到新数组,时间复杂度为 O(n)。可以通过提前调整容量,或通过trimToSize减少容量。理解ArrayList的扩容机制有助于在性能敏感的场景中优化内存使用和性能。
2025-03-03 10:39:25
313
原创 集合之List--ArrayList是否线程安全?如何线程安全地操作ArrayList?
ArrayList本身不是线程安全的。可以通过或手动同步来实现线程安全。选择哪种方式取决于具体的应用场景和性能需求。
2025-03-03 10:04:04
429
原创 MySQL--DQL、DML、DDL、DCL概念与区别
在SQL中,根据功能和操作对象的不同,通常将语文分为四大类:DQL(数据查询语言)、DML(数据操作语言)、DDL(数据定义语言)、DCL(数据控制语言)定义:用于从数据库中检索数据,不修改数据或数据库结构核心命令:SELECT:查询数据用途:从表中提取特定条件的过滤支持复杂的条件过滤、排序、分组、聚合等操作示例:SELECT name, age FROM users WHERE age > 18 ORDER BY name;二、DML(Data Manipulation Language,数据
2025-02-28 17:04:01
1115
原创 spring--ApplicationContext和BeanFactory的区别(源码)
是 Spring 容器的基础接口,提供最基本的 Bean 管理功能。是的扩展,提供了更多企业级功能。在实际开发中,通常使用,因为它功能更强大,使用更方便。通过理解和的区别和源码实现,可以更好地掌握 Spring 容器的核心机制。
2025-02-28 17:02:20
515
原创 设计模式--spring中用到的设计模式
定义:确保一个类只有一个实例,并提供全局访问点Spring中的应用:Spring默认将Bean配置为单例模式@Component// Spring 默认将其管理为单例在spring容器中,MySingletonBean只会有一个实例。
2025-02-27 15:38:32
990
原创 集合之线程安全--java中有哪些线程安全的集合
集合类型线程安全原理适用场景写时复制 + 锁读多写少的列表写时复制 + 锁读多写少的集合分段锁(JDK 7)或 CAS + synchronized高并发的键值对存储跳表 + CAS需要有序的键值对存储跳表 + CAS需要有序的集合锁 + 条件变量生产者-消费者模型方法级别加锁(synchronized)需要线程安全的集合Vector方法级别加锁(synchronized)不推荐使用Hashtable方法级别加锁(synchronized)不推荐使用。
2025-02-27 15:37:01
1028
原创 集合之List--ArrayList与LinkedList以及List与数组、Set的区别
在java中,List是最常用的集合类型之一,而ArrayList和LinkedList是List接口的两种主要实现。它们各有优缺点,适用于不同的场景。此外,List与数组、Set之间也有显著的区别。以下是对他们的详细对比和分析底层实现:基于动态数组特点随机访问速度快:通过索引访问元素的时间复杂度为O(1)。插入和删除效率低:在中间插入或删除元素时,需要移动后续元素,时间复杂度为O(n)内存占用少:只需要存储元素本身,不需要额外的指针适用场景:频繁读取数据(如遍历或随机访问)数据量较大且插入/删除操作较少的
2025-02-26 16:39:20
1097
原创 MySQL--聚集索引、辅助索引、回表查询和覆盖索引的原理
在MySQL中,索引是提高查询性能的核心工具。理解和的原理,对于优化数据性能至关重要。以下是对这些概念的详细解释以及优化方法。
2025-02-26 14:53:32
655
原创 MySQL--索引的优化--ORDER BY
在MySQL中,ORDER BY语句的性能优化是一个重要的课题,尤其是在处理大数据集时,如果ORDER BY没有正确使用索引,可能会导致全表扫描或文件排序(Using filesort),从而严重影响查询性能。以下是一些详细的优化策略和示例。
2025-02-26 14:02:51
709
原创 MySQL--索引的优化--LIKE模糊查询
通过以上方法,可以显著优化MySQL中LIKE模糊查询的性能。根据具体的业务需求和数据特点,选择合适的优化策略:前缀匹配:使用普通索引。后缀匹配:使用反转索引。中间匹配:使用全文索引或外部搜索引擎。大数据量:使用分区表或外部搜索引擎。高频查询:使用缓存。注:了解MySQL-MATCH ... AGAINST工具参考MySQL-MATCH ... AGAINST工具。
2025-02-26 11:30:45
1508
2
原创 MySQL-MATCH ... AGAINST工具
在MySQL中,MATCH……AGAINST是全文索引(Full-Text index)的查询语法,它允许你对文本进行高效的全文搜素,支持自然语言搜索和布尔搜索模式。以下是MATCH……AGAINST的详细用法和示例。
2025-02-26 11:28:51
810
原创 MySQL联合索引
联合索引适用于多列查询、排序和分组操作。最左前缀原则是关键,查询条件必须从索引的最左列开始。优化建议选择性高的列放在前面。避免冗余索引。使用覆盖索引减少回表。使用EXPLAIN分析查询计划。
2025-02-25 16:59:40
917
原创 MySQL索引失效
索引失效的原因多样,常见问题包括OR条件、LIKE通配符、函数使用、数据类型不匹配等。通过优化查询、调整索引设计,可以有效避免索引失效,提升查询性能。
2025-02-25 16:33:58
761
原创 锁的分类(详解)
定义锁是数据库管理系统(DBMS)用来控制对共享资源(如表、行、页等)访问的控制确保事务的隔离性防止多个事务同时修改同一数据,导致数据不一致锁的基本原理当一个事务访问数据时,会请求锁如果锁被授予,其他事务必须等到锁释放后才能访问该数据。
2025-02-25 11:23:00
404
原创 可重复读隔离级别为什么不能防止幻读
在可重复读隔离级别下,幻读的发生是因为 MVCC 无法完全控制范围查询中新插入的数据。MySQL 通过机制部分解决了幻读问题,但并不能完全避免。如果需要完全避免幻读,可以使用串行化隔离级别,但会牺牲并发性能。在实际应用中,应根据业务需求选择合适的隔离级别,权衡数据一致性和并发性能。
2025-02-24 16:55:23
1054
原创 当规避了不可重复读问题后,怎么保证幂等性
在隔离级别下,事务在第一次查询时会生成一个,并在整个事务期间使用该视图。这意味着事务在后续的查询中只能看到第一次查询时的数据快照,而不会看到其他事务提交的修改。虽然这种机制避免了,但如果程序基于第一次查询到的数据做结果处理,可能会导致错误的结果。以下详细分析这种情况及其解决方案。
2025-02-24 14:48:20
973
原创 MySQL的三种并发问题和四种隔离级别
阅读之前,请心里默念,脏读、不可重复读、幻读是三种常见的并发问题,隔离级别是应对并发问题的四种隔离级别,,不要混淆。在数据库事务中,和是三种常见的并发问题。它们与事务的隔离级别密切相关,理解这些问题有助于选择合适的隔离级别来平衡数据一致性和并发性能。
2025-02-24 14:37:11
1960
2
原创 数据库-事务的ACID
事务中的所有操作要么全部成功执行,要不全部不执行。如果事务中的任何一部分操作失败,整个事务将被回滚倒事务开始前的状态,就像什么都没发生过一样。
2025-02-24 11:06:41
494
原创 MySQL隔离级别的实现方式
MVCC是MySQL InnoDB实现事务隔离级别的核心技术,它通过维护数据的多个版本和Read View机制,实现了高并发性和一致性读。不同的隔离级别通过调整Read View的生成时机和数据可见性规则,提供了不同的数据一致性保证。理解MVCC的工作原理对于优化数据库性能和设计高并发应用至关重要。
2025-02-24 11:06:08
470
原创 倒排索引(Inverted Index)
是一种用于快速查找文档中包含特定词的数据结构,广泛应用于全文搜索引擎(如Elasticsearch、Lucene等)和数据库的全文索引中。与传统的正排索引(从文档到词的映射)不同,倒排索引是从词到文档的映射。
2025-02-21 15:51:07
527
Windows环境下DeepSeek AI本地部署指南 - 从模型安装到ChatBox配置全过程
2025-02-24
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人