记录生活点滴,分享技术心得
我是一名热爱编程的全栈开发者,专注于全栈技术开发和系统设计架构,关注用户体验和系统性能优化。
核心技能
深厚的技术积累和全栈开发经验
技术开发
深厚的技术积累和全栈开发经验,精通JAVA,Vue、TypeScript等主流技术栈,有大型应用架构设计和开发经验。
AI技术融合
深入研究AI与技术融合,专注于AI编程和AI Agent开发,利用AI技术提升应用性能和用户体验。
团队管理
丰富的技术团队管理经验,善于规划技术方向和推动团队创新。
最新文章
SQL 性能避坑:为什么阿里强制禁用 ORDER BY RAND()?
技术分享
在阿里巴巴的《Java 开发手册》及众多高并发系统的数据库规范中,**`ORDER BY RAND()`** 被列为**强制禁止**的写法。这并非因为语法错误,而是因为它在数据量稍大时,会引发严重的性能问题,甚至导致数据库雪崩。 以下是其被禁用的核心原因、底层机制分析及推荐的替代方案: ### 1. 核心痛点:为什么 `ORDER BY RAND()` 是“性能毒药”? 当执行 `SELECT * FROM table_name ORDER BY RAND() LIMIT N;` 时,MySQL 的执行过程极其低效,主要包含以下三个致命步骤: 1. **全表扫描与逐行计算**: MySQL 必须扫描表中的**每一行数据**,并为每一行调用一次 `RAND()` 函数生成一个随机数。这意味着即使你只需要 1 条数据,如果表里有 100 万行,它也要计算 100 万次随机数。 2.
阅读更多HashMap 是不是线程安全的?如果让你来实现一个线程安全的 HashMap 你要怎么设计?如果不用加锁你要怎么设计?
技术分享
HashMap 的线程安全性是多线程编程中的一个重要问题,下面我将为你详细解答,并探讨线程安全 HashMap 的设计方案。 # 🔒 HashMap 的线程安全性分析 ## HashMap 的非线程安全本质 HashMap 在设计上**不是线程安全**的。当多个线程同时访问和修改同一个 HashMap 实例时,会导致不可预知的行为。 ### 并发环境下的主要问题: - **数据竞争**:多个线程同时执行 put/remove 操作可能导致数据丢失或覆盖 - **死循环**:在扩容过程中,多线程可能导致链表形成环,引发 CPU 100% 问题 - **大小不一致**:size() 方法返回的结果可能不准确 ### 特例分析 需要注意的是,当 HashMap 作为**方法内的局部变量**,且每个线程拥有独立实例时,不存在线程安全问题。 # 🛠️ 实现线程安全 HashMap 的设计方案 #...
阅读更多Trie树介绍
技术分享
### 🌲 Trie树的核心特性 Trie树有三个基本性质: 1. **根节点不包含字符**,它作为所有字符串的起点。 2. 从根节点到任意一个节点的路径上,经过的所有字符连接起来,就是该节点对应的字符串(或前缀)。 3. 每个节点的所有子节点所包含的字符都互不相同。 它的核心思想是 **空间换时间**,通过将字符串的公共前缀合并存储,避免了大量无谓的字符串比较,使得查询效率在很多情况下优于哈希表。 ### 🧱 结构与基本操作 一个典型的Trie树节点(TrieNode)通常包含两部分信息: * **子节点指针**:可以是固定大小的数组(如处理26个小写英文字母时使用长度为26的数组)或更灵活的映射(如`Map`),用于指向下一个字符节点。 * **结束标记**:一个布尔值(如`isEndOfWord`),标记从根节点到当前节点的路径是否构成了一个完整的单词(而不仅仅是前缀)。...
阅读更多