📕我是廖志伟,一名Java开发工程师、《Java项目实战——深入理解大型互联网企业通用技术》(基础篇)、(进阶篇)、(架构篇)清华大学出版社签约作家、Java领域优质创作者、CSDN博客专家、阿里云专家博主、51CTO专家博主、产品软文专业写手、技术文章评审老师、技术类问卷调查设计师、幕后大佬社区创始人、开源项目贡献者。
📘拥有多年一线研发和团队管理经验,研究过主流框架的底层源码(Spring、SpringBoot、SpringMVC、SpringCloud、Mybatis、Dubbo、Zookeeper),消息中间件底层架构原理(RabbitMQ、RocketMQ、Kafka)、Redis缓存、MySQL关系型数据库、 ElasticSearch全文搜索、MongoDB非关系型数据库、Apache ShardingSphere分库分表读写分离、设计模式、领域驱动DDD、Kubernetes容器编排等。不定期分享高并发、高可用、高性能、微服务、分布式、海量数据、性能调优、云原生、项目管理、产品思维、技术选型、架构设计、求职面试、副业思维、个人成长等内容。

🌾阅读前,快速浏览目录和章节概览可帮助了解文章结构、内容和作者的重点。了解自己希望从中获得什么样的知识或经验是非常重要的。建议在阅读时做笔记、思考问题、自我提问,以加深理解和吸收知识。阅读结束后,反思和总结所学内容,并尝试应用到现实中,有助于深化理解和应用知识。与朋友或同事分享所读内容,讨论细节并获得反馈,也有助于加深对知识的理解和吸收。💡在这个美好的时刻,笔者不再啰嗦废话,现在毫不拖延地进入文章所要讨论的主题。接下来,我将为大家呈现正文内容。

一、并发编程知识体系补充说明
-
线程基础 线程的基础实现通常依赖于操作系统提供的线程库,例如在Unix-like系统中,线程是由内核管理的轻量级进程。线程的生命周期管理涉及操作系统调度器的复杂算法,以确保线程能够公平、高效地获得CPU时间。线程优先级通常由操作系统或编程语言提供支持,优先级高的线程在CPU空闲时可以获得更多的执行机会。
-
线程同步与互斥 在多线程环境中,线程同步是防止数据竞争和条件竞争的关键。互斥锁(Mutex)是一种常见的同步机制,它确保一次只有一个线程可以访问共享资源。互斥锁的实现通常依赖于原子操作,如Test-and-Set(CAS)指令。
-
线程通信 线程间的通信可以通过多种方式实现,如条件变量、信号量、事件和管道。条件变量允许线程在某些条件下等待,直到另一个线程发出信号。信号量是一种更为复杂的同步工具,它允许线程等待某个计数达到特定值。
-
线程池 线程池通过重用已有的线程来减少线程创建和销毁的开销。核心线程数决定了线程池的最小线程数,最大线程数限制了线程池的最大线程数。线程池的存活时间是指线程池中空闲线程的存活时间。任务队列是线程池用于存储等待执行的任务,拒绝策略则决定了当线程池达到最大线程数时如何处理新的任务。
-
同步机制 同步机制中的悲观锁和乐观锁分别适用于不同的场景。悲观锁假设数据冲突是常见的,因此在访问共享资源时总是先加锁。乐观锁则假设数据冲突是罕见的,它使用版本号或时间戳来检测和解决冲突。
-
并发集合 并发集合类如ConcurrentHashMap通过分段锁(Segment Locking)实现了高效的并发访问。分段锁将数据分割成多个段,每个段有自己的锁,这样多个线程可以同时访问不同的段,从而提高并发性能。
-
BlockingQueue BlockingQueue通过内部锁机制确保线程安全。LinkedBlockingQueue使用链表实现,适用于生产者消费者模型。ArrayBlockingQueue使用数组实现,具有固定容量,适用于生产者消费者模型的容量限制场景。
-
并发工具类 Phaser是一个灵活的线程同步工具,它允许线程在达到某个点之前等待其他线程。Exchanger允许两个线程交换数据,这在实现数据交换算法时非常有用。FutureTask表示一个异步计算的结果,它可以在计算完成时获取结果或等待计算完成。
-
非阻塞算法 非阻塞算法通过原子操作和条件变量实现线程间的协作。原子操作如CAS确保了操作的不可分割性,而条件变量则允许线程在某些条件下等待。
-
并发框架 并发框架如Netty、Akka和Disruptor提供了高级抽象,以简化并发编程。Netty通过事件驱动模型处理并发,Akka基于Actor模型,Disruptor则提供了一个高性能的环形缓冲区实现。
二、MyBatis知识体系补充说明
-
SQL映射 MyBatis的SQL映射通过XML或注解实现。XML映射提供了丰富的配置选项,包括动态SQL、参数处理和结果集映射。注解映射则提供了一种更简洁的配置方式。
-
映射结果集 映射结果集定义了如何将SQL查询结果映射到Java对象属性。MyBatis提供了多种映射类型,如一对一、一对多和多对多,以及自动映射和手动映射。
-
关联查询 关联查询通过嵌套查询或嵌套关联实现。嵌套查询使用SQL中的JOIN语句来关联多个表,而嵌套关联则在XML映射中使用嵌套的SQL语句。
-
动态SQL 动态SQL通过OGNL表达式和SQL片段实现。OGNL表达式用于动态构建SQL语句中的值,SQL片段则允许将常用的SQL代码块定义为一个可重用的部分。
-
缓存机制 MyBatis的缓存机制分为一级缓存和二级缓存。一级缓存是SqlSession级别的缓存,二级缓存是全局缓存。自定义缓存实现可以通过实现Cache接口来实现。
-
代理模式 MyBatis使用代理模式来处理数据库操作。MapperProxy代理了Mapper接口,实现了数据库操作的封装。
-
插件拦截 MyBatis插件可以拦截执行过程中的特定阶段,如查询、更新和执行器执行。插件通过实现Interceptor接口来实现。
-
执行流程 MyBatis的执行流程包括解析XML配置、构建SqlSession、执行查询、处理结果集和关闭SqlSession。每个阶段都有相应的处理逻辑。
-
SqlSession生命周期 SqlSession是MyBatis的核心接口,它管理数据库连接和事务。SqlSession的生命周期包括打开、使用和关闭,每个阶段都有相应的注意事项。
-
执行器类型 MyBatis提供了多种执行器类型,如SimpleExecutor和ReuseExecutor。SimpleExecutor直接使用JDBC操作数据库,ReuseExecutor则重用预处理语句。
-
延迟加载 延迟加载通过懒加载关联数据,减少初始化时的资源消耗。延迟加载可以在运行时按需加载数据。
-
扩展机制 MyBatis提供了多种扩展机制,如类型处理器、拦截器链和方言支持。类型处理器用于转换Java类型和数据库类型,拦截器链允许拦截执行过程中的特定阶段,方言支持允许MyBatis根据数据库类型使用不同的SQL语法。
以上补充内容旨在提供更深入的技术实现细节,以提升文章的专业性和技术深度。
📥博主的人生感悟和目标

- 💂 博客主页: Java程序员廖志伟希望各位读者大大多多支持用心写文章的博主,现在时代变了,信息爆炸,酒香也怕巷子深,博主真的需要大家的帮助才能在这片海洋中继续发光发热,所以,赶紧动动你的小手,点波关注❤️,点波赞👍,点波收藏⭐,甚至点波评论✍️,都是对博主最好的支持和鼓励!
- 👉 开源项目: Java程序员廖志伟
- 🌥 哔哩哔哩: Java程序员廖志伟
- 🎏 个人社区: Java程序员廖志伟
- 🔖 个人微信号:
SeniorRD

📙经过多年在CSDN创作上千篇文章的经验积累,我已经拥有了不错的写作技巧。同时,我还与清华大学出版社签下了四本书籍的合约,并将陆续出版。这些书籍包括了基础篇、进阶篇、架构篇的📌《Java项目实战—深入理解大型互联网企业通用技术》📌,以及📚《解密程序员的思维密码--沟通、演讲、思考的实践》📚。具体出版计划会根据实际情况进行调整,希望各位读者朋友能够多多支持!
🔔如果您需要转载或者搬运这篇文章的话,非常欢迎您私信我哦~