自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 线程之间如何通信?

比如线程 A 修改了对象的值,然后通知给线程 B,使线程 B 能够知道线程 A 修改的值,这就是线程通信。另一个线程调用 Object 的 notify()/notifyAll() 方法,wait() 阻塞的线程继续执行。● notifyAll():唤醒所有正在等待相应对象锁的线程,使它们进入就绪队列,以便在当前线程释放锁后竞争锁,进而得到 CPU 的执行。● notify():唤醒一个正在等待相应对象锁的线程,使其进入就绪队列,以便在当前线程释放锁后竞争锁,进而得到 CPU 的执行。

2024-02-08 14:02:54 420

原创 线程池常用的阻塞队列

DelayedWorkQueue 的内部元素并不是按照放入的时间排序,而是会按照延迟的时间长短对任务进行排序,内部采用的是“堆”的数据结构,可以保证每次出队的任务都是当前队列中执行时间最靠前的。FixedThreadPool 最多只能创建核心线程数的线程(核心线程数和最大线程数相等),SingleThreadExector 只能创建一个线程(核心线程数和最大线程数都是 1),二者的任务队列永远不会被放满。新任务来的时候,会先判断当前运行的线程数量是否达到核心线程数,如果达到的话,新任务就会被存放在队列中。

2024-02-08 14:01:40 428

原创 Redis 双写一致性

先删除缓存,还是先修改数据库?无论怎么操作都会存在数据不一致的问题。为什么要删除缓存呢?先删除缓存再删除数据库肯定是存在脏数据的,所以要删除两次缓存。为什么要延时双删?因为数据库是主从分离的,主从同步需要时间,所以需要延时删除。但是因为延时的时间不好控制,所以延时的过程中也可能出现脏数据。

2024-02-02 16:29:38 895

原创 synchronized 关键字的底层原理

当一个线程进入 synchronized 代码块之后,会让对象锁与 Monitor 进行关联,检查一下 Monitor 中的 Owner 是否为 null,如果为 null,则让当前线程持有,如果不为 null,则需要到 EntryList 中进行等待,如果线程调用了 wait 方法,则会进入到 WaitSet 里面。EntryList 关联的是处于阻塞状态的线程;它的底层由 monitor 实现的,monitor 是 jvm 级别的对象(C++实现),线程获得锁需要使用对象(锁)关联 monitor。

2024-02-02 16:27:07 371

原创 RabbitMQ问题总结

::info使用场景。

2024-01-26 09:23:42 1220

原创 MySQL 常用函数

MySQL 常用函数。

2024-01-25 16:52:48 329

原创 线程基础知识点

线程基础知识点

2024-01-19 17:07:37 375

原创 MySQL 日志

而顺序写入则可以利用磁盘的预读功能,将相邻的数据一起读入内存,减少寻道时间。WAL 机制,主要的操作是先写日志,先在一个日志中记录了 MySQL 要对硬盘中的存储 MySQL 数据的数据页中的数据进行什么样的更改,等到 MySQL 空闲的时候再进行同步操作到硬盘中。在 MySQL 中,为了提高数据库的性能,MySQL 采用了 WAL 机制,即客户端在修改数据的过程后,并不会立马对硬盘中的数据进行更新。这样做的原因在于,如果每次客户端进行数据更改后,立马对磁盘中的数据进行更改的话,那么磁盘的压力是非常大的。

2024-01-17 11:59:15 428

原创 MySQL 常用锁

锁是一种常见的并发事务的控制方式。

2023-12-11 20:31:17 984

原创 CPU密集型和IO密集型对 CPU内核之间的关系

她给你回消息肯定需要时间,这个时候你就可以下载 IDEA,下载完一看,她还没有回消息,然后看会博客。,由于 CPU 密集型任务的性质,导致 CPU 的使用率很高,如果使用线程池中的核心线程数量过多,会增加上下文切换的次数,带来额外的开销。打个比方,你的大脑是 CPU,你本来就在一本心思地写作业,多线程这时候就是要你写回作业,然后敲会代码,然后在看个视频,然后在切换回作业。,由于I/O 密集型任务 CPU 使用率并不是很高,可以让 CPU 在等待 I/O 操作的时候去处理别的任务,充分利用 CPU。

2023-12-07 19:22:12 376

原创 ELK 日志解决方案

进入 es 容器的 ik/config 目录查看配置文件注意:ext_dict_my.dic 是我自定义的词典文件,默认没有。编写自己的配置文件重启容器,并测试。

2023-12-06 21:15:03 1125 1

原创 JAVA 线程池,及7大参数,4大拒绝策略详解

如上图所示,执行顺序为:当提交任务数大于核心线程数时,会优先将任务放到阻塞队列中。当阻塞队列饱和时,会扩充线程池中的线程数,直到达到最大线程数。当任务数超出最大线程数时,就会触发线程池的拒绝策略。/**} /**throw new RejectedExecutionException("任务 " + r . toString() + " 拒绝 from " + e . toString());System . out . println("创建线程:" + r);t < 20。

2023-12-05 21:15:34 948

原创 三种定时器的实现方式

Schedule是Spring框架提供的一种简单的定时任务调度方法,通过注解的方式即可实现定时任务的调度。它适用于简单的定时任务需求,例如每隔一段时间执行一次任务或者在特定时间执行任务。XXL-Job是一个分布式任务调度平台,提供了可视化的任务管理界面、任务的动态添加、修改、删除等功能。Quartz是一个功能强大的、开源的定时任务调度框架,提供了丰富的功能和灵活的调度管理。配置任务:任务管理 -> 新增,根据实际情况填写内容,注意 JobHandler内容需要与创建的调度任务注解名称保持一致。

2023-12-04 20:49:24 1225

原创 Linux 常用命令

linux 一些命令

2023-12-03 20:12:00 1151

原创 Docker Compose简单入门

Docker Compose 是一个编排多容器发布式部署的工具,提供命令集管理容器化应用的完整开发周期,包括服务构建,启动和停止。Docker Compose 真正的作用是在一个文件(docker-compose.yml)中定义并运行多容器 Docker 应用程序,提供了一种简单的方法来管理容器化应用程序的生命周期和构建过程。它将容器、网络、卷、环境变量等元素整合到一个工具中,提供一致的部署流程,从而解决了多容器应用程序的构建和管理问题。

2023-12-03 15:58:11 479

原创 过滤器、拦截器、aop之间的差异

在 Spring 中,过滤器都默认继承了 OncePerRequestFilter,顾名思义,OncePerRequestFilter 的作用就是确保一次请求只通过一次过滤器,而不重复执行。过滤器的创建和销毁都由 Web 服务器负责,Web 应用程序启动的时候,创建过滤器对象,为后续的请求过滤做好准备。过滤器可以有多个,一个个过滤器组合起来就成了 FilterChain,也就是过滤器链。

2023-11-30 20:21:14 355

原创 synchronized 关键字

synchronized 是 JVM 内置锁,通过内部对象 Monitor (监视器锁)来实现,基于进入与退出 monitor 对象来实现方法与代码块的同步。监视器锁的实现最终依赖操作系统的 Mutex lock(互斥锁)来实现。synchronized 在 jdk 1.6 版本进行了优化,性能有了巨大提升,基本上和 java 锁性能没有什么差异,所以在生产环境中,synchronized 能满足的场景,尽量使用 synchronized,简单方便。

2023-11-30 20:16:59 895

原创 Spring是怎么解决循环依赖的?

循坏依赖就是字面意思,A 依赖了 B,B 同时也依赖了 A。如下所示@Component// A中注入了B@Autowired@Component// B中也注入了A@Autowired又或者是下面这种// 自己依赖自己@Component// A中注入了A@Autowired。

2023-11-28 19:55:58 445

原创 Java三种代理模式:静态代理、动态代理和cglib代理

其原理是通过字节码技术动态生成一个要代理类的子类,子类重写要代理类的所有不是 final 的方法。Spring 在 5.X 之前默认的动态代理实现一直是 jdk 动态代理。Java 动态代理是一种在运行时创建代理类的机制,它允许在不提前知道代理类的具体类型的情况下,动态地创建一个代理对象来代替原始类。相比于静态代理,动态代理更加灵活,可以代理任意的接口类型,不需要为每个被代理的类编写专门的代理类,而是。静态代理就是在程序运行之前,提前写好被代理方法的代理类,编译后运行。在程序运行之前,class已经存在。

2023-11-28 19:34:24 463

原创 HTTP 与 RPC 接口区别

RPC 的全称是 Remote Procedure Call Protocol,中文名是远程过程调用协议。通俗点讲就是:客户端在不知道调用细节的情况下,调用存在于远程计算机上的某个对象,就像调用本地应用程序中的对象一样。官方的描述是:一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。

2023-11-25 12:04:01 885

原创 设计模式之Builder模式

Builder设计模式就像是搭积木一样,它将复杂对象的构建过程拆解成多个简单的步骤,并提供一个建造者(Builder)来逐步构建对象。这样,你可以根据需要选择性地执行每个步骤,最终得到不同的对象表示形式。就像通过不同的积木组合,可以构建出不同的形状和结构一样。这种方式使得构建过程更加灵活、可扩展,同时保持了代码的可读性和可维护性。

2023-11-23 19:47:43 912

原创 http协议和websocket协议的区别

WebSocket 是双向的,在客户端-服务器通信的场景中使用的全双工协议,与HTTP不同,它以ws://或wss://开头。举例:当客户端向服务器发送请求时,该请求以HTTP或HTTPS的形式发送,在接收到请求后,服务器会将响应发送给客户端。每个请求都与一个对应的响应相关联,在发送响应后客户端与服务器的连接会被关闭。每个HTTP或HTTPS请求每次都会新建与服务器的连接,并且在获得响应后,连接将自行终止。HTTP 是单向的,客户端发送请求,服务器发送响应。

2023-11-22 20:28:14 55

原创 ConcurrentHashMap和HashMap的区别

可以看出,SynchronizedMap 确实比 Hashtable 改进了,synchronized 不再放在方法上,而是放在方法内部,作为同步块出现,但仍然是对象级别的同步锁,读和写操作都需要获取锁,本质上,仍然只允许一个线程访问,其他线程被排斥在外。根据 Java7 HashMap 的讲解可以知道,HashMap 在查找数据的时候,根据 hash 值我们能够快速定位到数组的具体下标,但是之后的话,需要顺着链表一个个比较下去才能找到需要的数据,这样时间复杂度就取决于链表的长度,为 O(n)。

2023-11-21 21:31:10 51

原创 OSI 七层网络模型

OSI 模型是一个描述网络功能的概念框架。它不是一组规则,而是一个用于理解网络如何运作的工具。OSI 模型由七层网络组成。什么是层呢?层是对网络上的功能和行为进行分类和分组的一种方式。在 OSI 模型中,层的组织结构从最具形态和最物理到不太有形,虚拟但更接近最终用户。如何记住所有层的名字呢?很简单。请不要把暗号告诉任何人(Please Do Not Tell the Secret Password to Anyone)。Please | 物理层(Physical Layer)

2023-11-20 19:48:29 69 1

原创 使用 docker 搭建 gitlab

使用 docker 搭建 gitlab

2023-11-18 11:48:52 90 1

原创 生产者消费者模型

生产者和消费者模型是一种常用于描述**多线程操作**中生产者和消费者之间的关系

2023-10-30 19:38:33 64 1

原创 数据库分库分表的原则

分库分表是指将原本存储在单一数据库中的数据,拆分到多个数据库或者多个数据表中。这样做的目的是为了提高数据库的扩展性和性能,解决单一数据库在数据量和并发访问上的瓶颈。

2023-10-28 16:54:17 39

原创 Threadlocal 对象的使用

是Java提供的以一种方便的方式在一个线程内不同方法之间传递和获取对象的类。

2023-10-25 20:28:33 45 1

原创 CAS简单介绍

CAS 全称为翻译过来就是比较并且交换。它是一种 CPU 并发原语,用于实现多线程环境下的同步操作。CAS 通常包含三个参数:当前内存值V、旧的预期值A、即将更新的值B。CPU 读取内存值 V。CPU 将读取到的值和 旧的预期值 A 比较。如果结果相等,就将内存值修改为 B,并返回 true,否则,什么都不做,并返回false。CAS 是 Compare And Swap,是一条 CPU 原语,由操作系统保证原子性。

2023-10-24 21:06:51 49 1

原创 一步步教你如何搭建 Nexus 的 Maven 私服(二)

上一篇文章中,我们介绍了如何搭建 Nexus 的 Maven 私服(),今天简单做一个扩展,搭建一下 release 和 snapshot 库。

2023-10-23 20:07:26 68

原创 RBAC-基于角色权限的模型

RBAC(Role-Based Access Control),即基于角色的权限控制。通过用户关联角色,角色关联权限的方式间接赋予用户权限。有人会问为什么不直接将权限赋值给用户,中间要增加角色这一环节?其实是可以直接为用户分配权限的,但是这样就少了一层关系,扩展性弱了很多,适合哪些用户数量、角色类型少的平台。一般的系统中,都会存在多个用户拥有相同权限的情况,在分配的时候,就需要分别给不同的用户指定权限,后续权限更新也是个麻烦事儿。

2023-10-21 17:35:40 148 1

原创 Redis 数据类型常用命令

Redis 是一个开源(BSD许可),内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列代理。它支持字符串、哈希表、列表、集合、有序集合,位图,hyperloglogs 等数据类型。内置复制、Lua 脚本、LRU 收回、事务以及不同级别磁盘持久化功能,同时通过 Redis Sentinel 提供高可用,通过 Redis Cluster 提供自动分区。

2023-10-19 20:21:41 47 1

原创 Spring缓存注解入门

性能缓慢是开发人员经常面临的一个反复出现的复杂问题,解决此类问题的最常见方法之一就是利用缓存,不过,处理缓存并不是一个容易的事情。幸运的是,自 3.1 版本开始,Spring 引入了对 Cache 的支持。其使用方法和原理都类似于 Spring 对事务管理的支持。接下来我们了解一下如何基于注解的方式来使用 Spring 的 Cache。

2023-10-18 20:13:39 46 1

原创 SpringMVC 的工作流程

SpringMVC 属于 Spring 的后续产品,其实就是 Spring 在原有的基础上,又提供了 Web 应用的 MVC 模块,以简单的把 SpringMVC 理解为是spring的一个模块。SpringMVC 是一个 MVC 的开源框架,SpringMVC 就相当于是 Struts2 加上 Spring 的整合,那么 SpringMVC 和 Spring 是什么样的关系呢?

2023-10-17 20:12:16 35

原创 MySQL存储引擎对比:MyISAM与InnoDB的区别

我们将逻辑表中的数据存储到数据库中,数据库又将我们表中的数据存储到物理设备中(如磁盘,内存)。数据在物理设备上如何存储?如何创建索引?如何进行增删改查操作?对于数据在物理设备上的存储和操作方式,就称为数据库引擎。数据库引擎,通常通俗的称为存储引擎,是数据库管理系统用来在数据库中进行创建、读取、更新和删除(CRUD) 数据的底层软件组件。许多数据库管理系统支持多个数据库引擎,例如MySQL支持InnoDB以及MyISAM等等。特定引擎的选择通常会影响数据库系统的效率,可靠性和可扩展性。

2023-10-16 20:57:54 62 1

原创 一步步教你如何搭建 Nexus 的 Maven 私服

搭建 Nexus 的 Maven私服

2023-10-12 21:19:39 163

原创 提升测试技能:Junit、Knife4j和JMeter的使用指南

一般常用的测试方法有单元测试、接口测试和并发测试。本文对这三种测试方法在 JAVA 开发中常用的工具配置及使用做一个简单介绍。

2023-10-11 20:31:30 202 1

原创 SpringBoot整合Dockerfile:一步步部署你的应用程序

SpringBoot整合Dockerfile:一步步部署你的应用程序

2023-10-11 18:45:50 325

原创 使用Docker搭建Mysql主从数据库

近期巴以冲突爆发,拦截率90%的铁穹防空系统当场被打到宕机。我们在日常工作中,也会随着业务的增长,面临海量用户对于服务器的并发访问量造成的性能问题。为此,我们可以搭建数据库集群,实现主从分离和负载均衡,来提高系统的可用性和性能。接下来,本文就介绍一下,如何利用Docker来搭建MySQL数据库集群,并实现主从分离(1主2从)。

2023-10-10 20:22:15 171 1

原创 Docker 入门

Docker自2013年发布至今, 一直广受瞩目,被认为可能会改变软件行业。但是,许多人并不清楚Docker到底是什么,要解决什么问题,好处又在哪里?

2023-10-08 20:24:43 105 3

空空如也

空空如也

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

TA关注的人

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