自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(141)
  • 收藏
  • 关注

原创 BIO、NIO线程模型

本文主要介绍了BIO(单线程、多线程和线程池版本)和NIO(早期版本和多路复用器版本)两种线程模型。

2023-06-20 22:03:44 730 1

原创 MyBatis参数传递(提供ParamNameResolver类来进行参数封装)源码分析

MyBatis参数传递源码分析,提供ParamNameResolver类来进行参数封装,在实际开发中当传入多个参数、collection集合、list集合和array数组等的时候,要尽量避免使用这种默认的参数,最好使用@Param注解来替换Map集合中的默认键名,并使用修改后的名称来获取值,这样会使代码可读性更高。

2023-05-29 16:44:55 1104

原创 MyBatis中的#{}和${}有什么区别?

本文主要介绍了MyBatis中的#{}和${}的区别,以及各自的使用场景。

2023-05-22 15:44:34 809

原创 Spring事务的传播机制

本文主要介绍了事务的传播机制,以及演示了嵌套事务(NESTED)和加⼊事务(REQUIRED )的场景,最后总结了他们各自的区别。

2023-05-16 09:14:28 800 1

原创 Spring事务(编程式事务&声明式事务)

本文主要介绍了Spring中的事务,包括编程式事务和声明式事务,以及事务的隔离级别。

2023-05-10 16:56:41 892 2

原创 SpringBoot统一功能处理(统⼀⽤户登录权限验证、统⼀异常处理、统⼀数据格式封装)

SpringBoot统一功能处理(统⼀⽤户登录权限验证、统⼀异常处理、统⼀数据格式封装)

2023-05-04 12:49:28 888

原创 如何实现Spring AOP以及Spring AOP的实现原理

本文主要讲解了如何实现Spring AOP以及Spring AOP的实现原理。AOP 是对某⽅⾯能⼒的统⼀实现,它是⼀种实现思想,Spring AOP 是对 AOP 的具体实现,Spring AOP 可通过 @Aspect(注解)的⽅式来实现 AOP 的功能。Spring AOP 是通过动态代理的⽅式,在运⾏期将 AOP 代码织⼊到程序中的,它的实现⽅式有两种: JDK Proxy 和 CGLIB。

2023-04-24 08:03:39 1673

原创 分布式缓存之Redis(持久化、主从、哨兵、分片集群)

本文主要简要介绍了用redis做分布式缓存,主要从redis持久化、redis主从、redis哨兵以及redis分片集群这四个方面做了介绍。

2023-04-18 13:11:07 433

原创 MySQL主从复制

本文主要介绍了mysql的主从复制。

2023-04-15 10:56:44 636

原创 Redis常用命令以及如何在Java中操作Redis

本文主要介绍了Redis的下载安装以及配置,数据类型以及常用命令,还介绍了如何在Java中操作Redis。

2023-04-04 13:04:18 1078

原创 Docker基础操作

详细的介绍了docker的基本操作、如何挂载数据卷、Dockerfile自定义镜像、Docker-Compose,以及如何部署微服务集群。

2023-04-01 22:49:10 417

原创 RabbitMQ安装和5种不同的消息模型(BasicQueue,WorkQueue,Fanout Exchange,Direct Exchange,Topic Exchange)与SpringAMQP

详解介绍了RabbitMQ的安装和5种不同的消息模型如何使用。基本消息队列BasicQueue,工作消息队列WorkQueue。发布订阅( Publish、Subscribe),又根据交换机类型不同分为三种:广播Fanout Exchange,路由Direct Exchange,主题Topic Exchange

2023-03-28 14:39:13 198

原创 MyBatis之动态SQL的使用

本文主要介绍了MyBatis之动态SQL的使用,主要讲解了if标签、trim标签、where标签、set标签以及foreach标签的使用。

2023-03-15 06:30:00 305 11

原创 MyBatis之多表查询

本文主要介绍了MyBatis的多表查询。

2023-03-13 06:30:00 443 8

原创 如何使用MyBatis框架实现对数据库的增删查改?

本文主要介绍了如何使用MyBatis框架对数据库进行增删查改。

2023-03-11 06:30:00 729 6

原创 如何做SpringBoot单元测试?

本文主要对SpringBoot项目做单元测试做了一个介绍,大概介绍了做单元测试的几个操作步骤。Spring Boot 项⽬创建时会默认单元测试框架 spring-boot-test,⽽这个单元测试框架主要是依靠另⼀个著名的测试框架 JUnit 实现的,打开 pom.xml 就可以看到,以下信息是 Spring Boot 项⽬创建是⾃动添加的。

2023-03-09 06:30:00 2793 3

原创 Spring MVC 详解(连接、获取参数、返回数据)

本文主要对Spring MVC 使用进行详解,包括连接、获取参数、以及返回数据三个大的方面。还介绍了Spring、SpringBoot以及Spring MVC框架之间的关系,以及MVC和 Spring MVC的关系。

2023-03-07 06:30:00 833 9

原创 如何使用SpringBoot ⽇志?

⽇志是程序中的重要组成部分,使⽤⽇志可以快速的发现和定位问题,Spring Boot 提供了⽇志框架,默认情况下使⽤的是 info ⽇志级别将⽇志输出到控制台的,我们可以通过 lombok 提供的 @Slf4j 注解 和 log 对象快速的打印⾃定义⽇志,⽇志包含 6 个级别,从低到高依次是:trace、info、debug、warn、error、fatal。⽇志级别依次提升,⽽⽇志界别越⾼,收到的⽇志信息也就越少,我们可以通过配置⽇志的保存名称或保存⽬录来将⽇志永久地保存下来。

2023-03-01 08:39:28 603 6

原创 SpringBoot配置文件(properties & yml)

本文主要介绍了两种配置文件的格式,properties和yml。properties 是以 key=value 的形式配置的键值类型的配置⽂件,⽽ yml 使⽤的是类似 json 格式的配置⽅式进⾏配置的,yml 层级之间使⽤换⾏缩进的⽅式配置,key 和 value 之间使⽤“: ”英⽂冒号加空格的⽅式设置,并且空格不可省略。properties 为早期并且默认的配置⽂件格式,但其配置存在⼀定的冗余数据,使⽤ yml 可以很好的 解决数据冗余的问题。 yml 通⽤性更好,⽀持更多语⾔。

2023-02-27 13:54:12 1460 5

原创 使用IDEA社区版如何创建SpringBoot项目?

本文主要介绍了IDEA社区版如何创建一个spring boot 项目。主要有两种方式,一种使基于插件,一种就是通过spring官网中的网页创建。

2023-02-25 06:30:00 11672 14

原创 Bean的生命周期和作用域

本文主要介绍了Bean的生命周期和作用域。

2023-02-23 06:30:00 1953 6

原创 Linux常用命令(文件目录操作、拷贝移动、打包压缩、文本编辑、查找)

Linux常用命令(文件目录操作、拷贝移动、打包压缩、文本编辑、查找)

2023-02-21 06:30:00 502 6

原创 Git常用命令以及如何在IDEA中使用Git

Git常用命令介绍以及在IDEA中使用Git。

2023-02-19 09:04:04 2631 4

原创 网络层重点协议之IP协议(IPv4)

网络层的作用就是来路由的选择,规划传输的路径,其中网络层的重点协议就是IP协议。介绍了IP协议的4位版本号、4位首部长度等,重点介绍了IPv4和IPv6的区别,以及IP协议如何进行地址管理(IPv4)。

2023-02-17 08:35:25 1475 15

原创 传输层重要协议之UDP协议和TCP协议详解

传输层重要协议之UDP协议和TCP协议详解。TCP协议的核心机制:确认应答、超时重传、连接管理(三次握手、四次挥手)、滑动窗口、流量控制、拥塞控制、延迟应答、捎带应答、粘包问题以及一些异常情况。

2023-02-15 09:10:43 1289 10

原创 动态规划之01背包问题和完全背包问题

01背包问题,用二维数组dp[i][j]和一维数组dp[i]来求解,两者有很大区别。在dp数组的含义,dp数组的初始化,以及for循环嵌套顺序以及遍历顺序都是不同的。01背包和完全背包的区别在于,01背包的物品只能使用一次,而完全背包的物品可以无限次使用,所以在遍历顺序上有区别。01背包问题为了每个物品只使用一次,所以倒序遍历背包,而完全背包为正序遍历。因为正序遍历,后一个背包要依赖前一个背包的状态,所以一个物品被加了多次,而倒序遍历,因为前面的背包状态是初始值,所以加了前面的背包状态也是无效。

2023-02-13 06:30:00 2217 8

原创 二叉搜索树之AVL树

左单旋-插入位置在较高右子树的右侧:(parent.bf = 2, cur.bf = 1);右单旋-插入位置在较高左子树的左侧:(parent.bf = -2, cur.bf = -1);左右双旋-插入位置在较高左子树的右侧:(parent.bf = -2, cur.bf = 1);右左双旋-插入位置在较高右子树的左侧:(parent.bf = 2, cur.bf = -1)。一种查询高效且有序的数据结构,而且数据的个数为静态的(即不会改变),可以考虑AVL树,但一个结构经常修改,就不太适合。

2023-02-11 06:30:00 1140 12

原创 基于UDP/TCP实现客户端服务器的网络通信程序

UDP是无连接、不可靠传输、面向数据报、全双工;TCP是有连接、可靠传输、面向字节流、全双工。基于UDP实现客户端服务器的网络通信程序和基于TCP实现客户端服务器的网络通信程序。

2023-02-09 08:00:00 976 9

原创 网络通信基础

网络通信基础:一、IP地址二、端口号三、关于协议四、五元组五、协议分层1. 分层的作用2. OSI七层模型3. TCP/IP五层(或四层)模型4. 网络设备所在分层六、关于封装和分用

2023-02-07 09:35:30 1327 10

原创 Spring中获取Bean对象的三种注入方式和两种注入方法

获取 bean 对象也叫做对象装配,是把对象取出来放到某个类中,有时候也叫对象注⼊。 对象装配(对象注⼊)的实现⽅法以下 3 种:属性注⼊、构造⽅法注⼊ 、Setter 注⼊。属性注⼊、构造⽅法注⼊ 和Setter 注⼊有什么区别呢?@Autowired 和 @Resource 有什么区别呢?

2023-02-05 13:31:45 1878 16

原创 抽象类和接口有什么区别?

抽象类中可以包含普通方法和普通字段, 这样的普通方法和字段可以被子类直接使用(不必重写), 而 接口中不能包含普通方法, 子类必须重写所有的抽象方法。

2023-02-04 09:38:59 231 4

原创 线程安全的集合类(多线程环境下使用ArrayList、队列及哈希表)

1. 多线程环境下使用ArrayList2. 多线程环境下使用队列3. 多线程环境下使用哈希表:ConcurrentHashMap进行了哪些优化?比HashTable好在哪里?和HashTable之间的区别是啥?Hashtable和HashMap、ConcurrentHashMap 之间的区别?ConcurrentHashMap在jdk1.8做了哪些优化?ConcurrentHashMap的读是否要加锁?

2023-02-02 14:43:04 1911 23

原创 多线程之Callable接口、ReentrantLock、信号量 Semaphore以及CountDownLatch

一、Callable接口1.Callable的用法2.小结二、ReentrantLock1.ReentrantLock 的用法2.ReentrantLock 和 synchronized 的区别?3.为什么有了 synchronized 还需要 juc(java.util.concurrent) 下的 lock?三、信号量 Semaphore1.如何理解信号量?2.信号量可以用在过哪些场景下?3.线程同步的方式有哪些?四、CountDownLatch是同时等待 N 个任务执行结束

2023-01-31 08:12:51 1292 6

原创 多线程之CAS

CAS全称 Compare and swap, 即 "比较并交换"。相当于通过一个原子的操作, 同时完成 "读取内存, 比较是否相等, 修改内存" 这三个步骤,本质上需要 CPU 指令的支撑。解决CAS带来的问题需要给要修改的数据引入版本号。在 CAS 比较数据当前值和旧值的同时, 也要比较版本号是否符合预期。如果发现当前版本号和之前读到的版本号一致, 就真正执行修改操作, 并让版本号自增; 如果发现当前版本号比之前读到的版本号大, 就认为操作失败。

2023-01-29 09:59:10 2144 10

原创 浅析Spring的五大类注解和方法注解

简单的将bean对象存储到Spring容器中,可以使用五大类注解实现,也可以通过@Bean方法注解实现。本文重点围绕这几个问题展开:1.为什么需要五大类注解?2.五大类注解之间有没有关系?3.Spring使用五大类注解生成beanName问题。4.如何使用方法注解将对象更简单的存储到容器中?

2023-01-23 15:07:53 1343 21

原创 synchronized 原理(锁升级、锁消除和锁粗化)

关于锁升级,根据锁竞争的情况,synchronized从无锁、偏向锁、轻量级锁和重量级锁升级。关于锁消除,编译器智能的判定,看当前的代码是否是真的要加锁,如果这个场景不需要加锁,程序猿也加了,那么就会自动把锁给干掉。关于锁粗化,通常情况下,认为锁的粒度细一点比较好。加锁的部分的代码,是不能并发执行的,锁的粒度越细,能并发的代码就越多;反之就越少。但是有些情况下,锁的粒度粗一些反而更好,两次加锁解锁之间,间隙非常小,此时,不如就直接一次大锁搞定得了。

2023-01-19 08:00:00 1407 14

原创 多线程之常见的锁策略

一、乐观锁 VS 悲观锁二、互斥锁 VS 读写锁三、轻量级锁 VS 重量级锁四、自旋锁 VS 挂起等待锁五、公平锁 VS 非公平锁六、可重入锁 VS 不可重入锁

2023-01-17 06:30:00 1053 19

原创 线程池(关于变量捕获、线程数、针对ThreadPoolExecutor的构造方法参数的解释、自实现线程池)

一:相比较于进程,创建线程 / 销毁线程 的开销是相对较小的,但是太过频繁的创建线程 / 销毁线程,其开销也很大。这时候我们就需要使用线程池来减少每次启动和销毁线程的损耗。事先把需要使用的线程先创建好,然后放到线程池中,后面需要使用的时候,直接从池里面获取,如果用完了就还给池。二、关于变量捕获三、针对ThreadPoolExecutor的构造方法参数的解释四、自实现线程池

2023-01-15 10:14:58 877 9

原创 实现定时器(基于标准库提供的定时器、基于优先级队列自实现的定时器)

一、基于标准库提供的定时器二、基于优先级队列自实现的定时器

2023-01-14 09:35:18 451 16

原创 生产者消费者模型(基于标准库提供的阻塞队列、基于环形数组自实现的阻塞队列)

一、基于标准库提供的阻塞队列实现生产者消费者模型二、基于环形数组自实现的阻塞队列实现生产者消费者模型

2023-01-13 09:38:14 316 16

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除