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

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

一、并发编程知识体系
线程基础
线程概念:在操作系统中,线程是处理器的独立调度单位,是执行程序的基本单元。在Java中,线程是进程的一部分,由Java虚拟机(JVM)管理。线程通过共享进程的地址空间,实现了资源共享和高效并发。
线程生命周期:线程的生命周期由JVM管理,包括以下状态:
- 新建(New):线程对象被创建,但尚未启动。
- 就绪(Runnable):线程已获得CPU时间片,等待被调度执行。
- 运行(Running):线程正在执行。
- 阻塞(Blocked):线程由于等待某个资源(如锁)而无法继续执行。
- 等待(Waiting):线程在等待某个事件发生,如另一个线程的通知。
- 超时等待(Timed Waiting):线程在等待某个事件发生,但有一个超时限制。
- 死亡(Terminated):线程执行完毕或被强制终止。
线程优先级、守护线程:Java中,线程优先级分为1(最低)到10(最高),优先级高的线程有更高的执行机会。守护线程是一种特殊的线程,它不会阻止程序退出。当所有非守护线程结束时,程序会退出,即使守护线程还在运行。
线程池:线程池是一种管理线程的机制,它可以避免频繁创建和销毁线程的开销。线程池的核心参数包括:
- 核心线程数:线程池中最小数量的线程数。
- 最大线程数:线程池中最大数量的线程数。
- 存活时间:线程池中空闲线程的存活时间。
- 任务队列:用于存放等待执行的任务。
- 拒绝策略:当任务队列已满时,如何处理新任务。
同步机制:同步机制用于保证线程安全,防止数据竞争。常见的同步机制包括:
- 悲观锁/乐观锁:悲观锁假设并发操作会破坏数据的一致性,因此在操作数据前先加锁;乐观锁则认为并发操作不会破坏数据的一致性,在操作过程中检查数据是否被修改。
- 读写锁:读写锁允许多个读操作同时进行,但写操作会阻塞所有读操作和写操作。
- 条件变量:条件变量允许线程在某些特定条件下等待,直到其他线程通知。
并发集合:并发集合用于在多线程环境中安全地存储和操作数据。常见的并发集合包括:
- ConcurrentHashMap:线程安全的HashMap,适用于高并发场景。
- CopyOnWrite容器:在写操作时复制底层数组,读操作直接操作复制的数组。
- BlockingQueue:阻塞队列,用于实现线程之间的数据交换。
并发工具类:并发工具类用于实现线程之间的同步和协作。常见的并发工具类包括:
- Phaser:用于实现线程之间的同步。
- Exchanger:用于在线程之间交换数据。
- FutureTask:用于异步计算。
非阻塞算法:非阻塞算法用于实现无锁编程,提高系统性能。常见的非阻塞算法包括:
- CAS原理:Compare-And-Swap,用于实现无锁编程。
- Atomic类:提供线程安全的原子操作。
- 无锁队列:基于CAS原理实现的线程安全队列。
并发框架:并发框架提供了一套完整的并发编程解决方案。常见的并发框架包括:
- Netty线程模型:基于NIO的异步网络框架。
- Akka Actor模型:基于消息传递的并发模型。
- Disruptor环形缓冲区:高性能的环形缓冲区,适用于高并发场景。
二、MyBatis知识体系
SQL映射
注解映射:MyBatis使用注解来映射SQL语句和结果集,简化了映射过程。常见的注解包括:
- @Select:用于映射查询语句。
- @Insert:用于映射插入语句。
- @Update:用于映射更新语句。
- @Delete:用于映射删除语句。
结果集映射:MyBatis将数据库结果集映射到Java对象,包括以下步骤:
- 定义实体类:实体类包含数据库表的结构信息。
- 定义映射文件:映射文件定义SQL语句和实体类之间的映射关系。
- 使用Mapper接口:Mapper接口定义了SQL语句的执行方法。
关联查询:MyBatis支持将多个表的数据映射到一个Java对象,包括以下步骤:
- 定义实体类:实体类包含多个表的结构信息。
- 定义映射文件:映射文件定义SQL语句和实体类之间的映射关系。
- 使用Mapper接口:Mapper接口定义了SQL语句的执行方法。
动态SQL
OGNL表达式:OGNL表达式用于构建动态SQL语句,包括以下功能:
- 访问对象的属性和方法。
- 访问集合的元素。
- 使用条件判断和循环。
- 调用函数和执行逻辑运算。
分支语句:分支语句用于构建条件分支的SQL语句,包括以下功能:
- if-else语句:根据条件执行不同的SQL语句。
- choose-when-otherwise语句:类似于if-else语句,但支持多个条件分支。
批量操作:批量操作将多个操作合并为一个操作,提高执行效率。常见的批量操作包括:
- 插入操作:将多条数据插入数据库。
- 更新操作:更新多条数据。
- 删除操作:删除多条数据。
缓存机制
一级缓存:一级缓存是SqlSession级别的缓存,用于缓存查询结果。一级缓存的作用包括:
- 缓存查询结果:避免重复查询数据库。
- 提高查询效率:减少数据库访问次数。
二级缓存:二级缓存是Mapper级别的缓存,用于缓存查询结果。二级缓存的作用包括:
- 缓存查询结果:避免重复查询数据库。
- 提高查询效率:减少数据库访问次数。
自定义缓存:自定义缓存允许用户根据需求实现缓存机制。自定义缓存的作用包括:
- 扩展缓存功能:支持多种缓存策略。
- 提高缓存性能:根据应用场景优化缓存机制。
代理模式:代理模式通过代理类实现缓存的延迟加载,提高缓存命中率。
MapperProxy、插件、动态代理
MapperProxy:MapperProxy是MyBatis中用于代理Mapper接口的类,实现方法包括:
- 创建SqlSession:获取数据库连接。
- 执行SQL语句:执行查询、插入、更新、删除等操作。
- 返回结果:将数据库结果集映射到Java对象。
插件:插件机制允许用户扩展MyBatis的功能,包括:
- 拦截器:拦截SQL语句的执行过程。
- 扩展Mapper接口:扩展Mapper接口的功能。
动态代理:动态代理技术用于实现Mapper接口的代理,提高代码的可读性和可维护性。
SqlSession生命周期、执行器类型
SqlSession生命周期:SqlSession的创建、使用和关闭,包括以下步骤:
- 创建SqlSession:获取数据库连接。
- 使用SqlSession:执行SQL语句。
- 关闭SqlSession:释放数据库连接。
执行器类型:MyBatis提供多种执行器类型,如SimpleExecutor、ReuseExecutor和BatchExecutor,分别适用于不同的场景。
延迟加载、扩展机制
延迟加载:延迟加载在需要时才加载关联数据,提高系统性能。
扩展机制:通过插件、拦截器等方式扩展MyBatis的功能,满足不同需求。
类型处理器、拦截器链、方言支持
类型处理器:类型处理器将数据库类型转换为Java类型,提高数据转换效率。
拦截器链:拦截器可以串联起来,形成拦截器链,实现多种功能。
方言支持:MyBatis支持多种数据库方言,如MySQL、Oracle等,方便用户使用。
总结
并发编程和MyBatis是现代软件开发中的两个核心领域。通过深入理解这两个领域的知识点,我们可以更好地设计高并发、高性能的软件系统。在实际应用中,我们需要根据具体场景选择合适的并发编程技术和MyBatis配置,以达到最佳性能。
📥博主的人生感悟和目标

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

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