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

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

一、并发编程知识体系
-
线程基础 线程是操作系统能够进行运算调度的最小单位,它是进程的一部分。在Java中,线程具有独立的堆栈、程序计数器和局部变量,这使得线程可以并行执行不同的任务。线程的状态包括新建(New)、可运行(Runnable)、阻塞(Blocked)、等待(Waiting)、超时等待(Timed Waiting)和死亡(Terminated)。
-
线程生命周期 线程的生命周期通过状态转换来体现。从新建状态开始,线程对象被创建但尚未启动。当调用start()方法后,线程进入可运行状态,等待CPU调度。如果线程被调度执行,则进入运行状态。线程可能因为等待资源、I/O操作等原因进入阻塞状态。当线程任务完成后或被其他线程终止,线程进入死亡状态。
-
线程优先级 线程优先级决定了线程在CPU调度时的优先顺序。Java中,线程优先级有10个等级,从最低的1到最高的10。线程优先级高的线程有更高的机会被CPU调度,但并不保证一定能够获得CPU时间。
-
守护线程 守护线程是一种特殊的线程,它的生命周期依赖于主线程。当主线程结束时,所有守护线程都将自动结束。守护线程通常用于执行一些后台任务,如垃圾回收器。
-
线程池 线程池是一组预先创建并缓存起来的线程集合。线程池可以减少线程创建和销毁的开销,提高应用程序性能。线程池的核心参数包括核心线程数、最大线程数、存活时间、工作队列类型和拒绝策略。
-
拒绝策略 当线程池中的线程数达到最大值时,新的任务将无法被提交。拒绝策略包括CallerRunsPolicy(调用者运行策略)、AbortPolicy(中断策略)、DiscardPolicy(丢弃策略)和DiscardOldestPolicy(丢弃最旧策略)。
-
工作队列类型 工作队列用于存放等待执行的任务。常见的工作队列类型包括LinkedBlockingQueue(链表阻塞队列)、ArrayBlockingQueue(数组阻塞队列)和SynchronousQueue(同步队列)。
-
同步机制 同步机制用于解决多线程并发执行时,资源竞争和数据不一致的问题。常见同步机制包括悲观锁、乐观锁、读写锁和条件变量。
-
悲观锁/乐观锁 悲观锁在操作数据时,认为数据冲突是必然发生的,因此在进行操作之前,先加锁,确保数据一致性。乐观锁在操作数据时,认为数据冲突是很少发生的,因此在进行操作时,不加锁,通过版本号或时间戳等方式检测冲突,如有冲突则重新操作。
-
读写锁 读写锁允许多个线程同时读取数据,但只允许一个线程写入数据。读写锁可以提高程序性能,降低线程竞争。
-
条件变量 条件变量用于线程间的通信,实现线程间的等待和通知。常用于实现生产者-消费者模式。
-
并发集合 并发集合是专门为多线程环境下设计的集合类,如ConcurrentHashMap、CopyOnWriteArrayList等。
-
ConcurrentHashMap ConcurrentHashMap是一种线程安全的哈希表,内部采用分段锁技术,提高了并发性能。
-
CopyOnWrite容器 CopyOnWrite容器是一种读写分离的并发容器,读操作时复制底层数据,写操作时创建新的底层数据。
-
BlockingQueue BlockingQueue是一种线程安全的队列,支持生产者-消费者模式。
-
并发工具类 Phaser、Exchanger、FutureTask等并发工具类,用于解决复杂并发问题。
-
非阻塞算法 非阻塞算法通过利用共享内存和原子操作来实现并发控制,提高了并发性能。
-
CAS原理 CAS(Compare and Swap)是一种原子操作,用于实现无锁编程。
-
Atomic类 Atomic类提供了一系列原子操作的方法,如AtomicInteger、AtomicLong等。
-
无锁队列 无锁队列是一种线程安全的队列,通过CAS原理实现无锁编程。
-
并发框架 Netty、Akka、Disruptor等并发框架,提供了强大的并发编程能力和高性能。
二、MyBatis知识体系
-
SQL映射 MyBatis通过XML文件或注解来实现SQL映射。XML映射文件中定义了SQL语句和结果集的映射关系,注解映射则通过注解来指定SQL语句和结果集的映射关系。
-
注解映射 MyBatis支持使用注解来映射SQL语句和结果集。常用的注解包括@Select、@Insert、@Update、@Delete、@Result、@Results等。
-
结果集映射 MyBatis通过XML文件或注解来映射结果集,将查询结果映射到实体类。映射关系包括字段名与实体类属性名的对应、类型转换、关联关系等。
-
关联查询 MyBatis支持一对一、一对多、多对多等关联查询。通过配置关联关系,可以实现实体类之间的关联操作。
-
动态SQL MyBatis支持动态SQL,可以根据条件动态构建SQL语句。常用的动态SQL标签包括 、 、 、 等。
-
OGNL表达式 OGNL(Object-Graph Navigation Language)表达式用于在MyBatis中访问对象属性。OGNL表达式可以访问对象的属性、方法、集合等。
-
分支语句 MyBatis支持分支语句,根据条件执行不同的SQL语句。常用的分支语句包括 、 、 、 等。
-
批量操作 MyBatis支持批量操作,如批量插入、批量删除等。批量操作可以提高数据库操作的效率。
-
缓存机制 MyBatis支持一级缓存和二级缓存,提高查询性能。一级缓存是SqlSession级别的缓存,用于缓存查询结果。二级缓存是全局缓存,可以跨SqlSession共享。
-
一级缓存 一级缓存是SqlSession级别的缓存,用于缓存查询结果。当同一个SqlSession中执行相同的查询时,可以直接从缓存中获取结果,避免重复查询数据库。
-
二级缓存 二级缓存是全局缓存,可以跨SqlSession共享。通过实现Cache接口,可以自定义二级缓存。
-
自定义缓存 MyBatis支持自定义缓存,通过实现Cache接口实现。自定义缓存可以满足特定场景下的缓存需求。
-
代理模式 MyBatis使用代理模式实现Mapper接口,提高性能。通过代理模式,MyBatis可以在不修改Mapper接口代码的情况下,动态生成代理对象,实现数据库操作。
-
MapperProxy MapperProxy是MyBatis的内部类,用于代理Mapper接口。MapperProxy通过CGLib或JDK动态代理技术实现代理功能。
-
插件拦截 MyBatis支持插件拦截,实现自定义功能。通过实现Interceptor接口,可以自定义拦截器,拦截MyBatis的执行过程。
-
动态代理执行流程 MyBatis通过CGLib或JDK动态代理实现动态代理执行流程。CGLib动态代理适用于无法通过接口进行代理的场景,JDK动态代理适用于可以继承接口或实现接口的场景。
-
SqlSession生命周期 SqlSession是MyBatis的核心接口,用于执行数据库操作。SqlSession的生命周期包括创建、使用和关闭。在SqlSession生命周期中,需要注意资源管理和异常处理。
-
执行器类型 MyBatis支持多种执行器类型,如SimpleExecutor、ReuseExecutor等。不同的执行器类型适用于不同的场景,可以根据实际需求选择合适的执行器类型。
-
延迟加载 MyBatis支持延迟加载,提高性能。延迟加载是指在需要时才加载关联数据,避免在查询时加载过多不必要的数据。
-
扩展机制 MyBatis支持扩展机制,如类型处理器、拦截器链、方言支持等。通过扩展机制,可以自定义MyBatis的功能和特性。
📥博主的人生感悟和目标

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

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