自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 JVM垃圾回收算法

单纯的从时间长短上面来看:标记-清除 < 标记-复制 < 标记-整理。单纯从结果来看:标记-整理 > 标记-复制 >= 标记-清除。

2024-02-11 18:01:11 460

原创 Java动态代理

在我们平时使用的框架中,像 servlet 的 filter、包括 spring 提供的 aop 以及 struts2的拦截器都使用了动态代理功能。我们日常看到的 mybatis 分页插件,以及日志拦截、事务拦截、权限拦截这些几乎全部由动态代理的身影。Java的动态代理,在日常开发中可能并不经常使用,但是并不代表他不重要。Java的动态代理的最主要的用途就是应用在各种框架中。因为使用动态代理可以很方便的运行期生成代理类,通过代理类可以做很多事情,比如AOP,比如过滤器、拦截器等。

2024-02-11 18:00:31 403

原创 Spring Bean 的生命周期

提供一种配置方式,在XML配置中指定Bean的初始化方法。如果Bean在配置文件中定义了初始化方法,那么该方法会被调用。在AbstractAutowireCapableBeanFactory的invokeInitMethods方法中调用。如果Bean在配置文件中定义了销毁方法,那么该方法会被调用。在DisposableBeanAdapter的destroy方法中实现。

2024-02-04 13:48:19 929

原创 Autowired和Resource的关系

2、Resource 在获取 bean 的时候,和 Autowired 恰好相反,先是 byName 方式,然后再是 byType 方式。当然,我们也可以通过注解中的参数显示指定通过哪种方式。都能将 bean 注入到对应的 field 中。

2024-02-04 13:38:35 403

原创 MySQL事务

数据库事务( transaction)是访问并可能操作各种数据项的一个数据库操作序列,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。事务由事务开始与事务结束之间执行的全部数据库操作组成。并非任意的对数据库的操作序列都是数据库事务。事务应该具有4个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性。原子性(Atomicity):事务作为一个整体被执行,包含在其中的对数据库的操作要么全部被执行,要么都不执行。

2024-01-28 07:09:03 1188

原创 Redis缓存击穿、缓存穿透、缓存雪崩、

当缓存服务器中没有缓存数据,数据库中也没有符合条件的数据,导致业务系统每次都绕过缓存服务器查询下游的数据库,缓存服务器完全失去了其应用的作用。当某一 key 的缓存过期时大并发量的请求同时访问此 key,瞬间击穿缓存服务器直接访问数据库,让数据库处于负载的情况。当大量缓存同时过期或缓存服务宕机,所有请求的都直接访问数据库,造成数据库高负载,影响性能,甚至数据库宕机。

2024-01-28 07:07:58 370

原创 RabbitMQ延迟信息

可能造成队头阻塞,因为队列是先进先出的,而且每次只会判断队头的消息是否过期,那么,如果队头的消息时间很长,一直都不过期,那么就会阻塞整个队列,这时候即使排在他后面的消息过期了,那么也会被一直阻塞。那就是我们给一个消息设定TTL,但是并不消费这个消息,等他过期,过期后就会进入到死信队列,然后我们再监听死信队列的消息消费就行了。当RabbitMQ中的一条正常的消息,因为过了存活时间(TTL过期)、队列长度超限、被消费者拒绝等原因无法被消费时,就会变成Dead Message,即死信。

2024-01-21 12:19:48 362

原创 RabbitMQ如何保证消息传输可靠性

如果消息被设置为非持久化,RabbitMQ 将尽力将消息传递给消费者,但不会将其写入磁盘,这意味着如果 RabbitMQ 服务器在消息传递之前崩溃或重启,消息可能会丢失。2(持久化):如果消息被设置为持久化,RabbitMQ 会将消息写入磁盘,以确保即使在 RabbitMQ 服务器重启时,消息也不会丢失。RabbitMQ 在接收到消息后,默认并不会立即进行持久化,而是先把消息暂存在内存中,这时候如果 MQ 挂了,那么消息就会丢失。持久化消息在发送到持久化队列后,将在服务器重启后保留,以确保消息不会丢失。

2024-01-21 12:19:24 1296

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

这可能是因为任务本身需要大量 I/O 操作,而程序的逻辑做得并不好,没有充分利用 CPU 能力,导致线程空余时间很多。通常我们会开 CPU 核心数数倍的线程,在线程进行 I/O 操作 CPU 空闲时,启用其他线程继续使用 CPU,以提高 CPU 的使用率,充分利用 CPU 资源。如果是单核情况下,开多线程是没有意义的,说白了就是一个 CPU 来回切着运行而已,徒增线程切换的资源消耗,卵用没有。对于双核 CPU 来说,它比较理想的线程数就是 20,当然这都不是绝对的,需要根据实际情况以及实际业务来调整。

2023-12-07 20:27:44 372

原创 ELK的日志解决方案

ELK 已经成为目前最流行的集中式日志解决方案,它主要是由 Beats、Logstash、Elasticsearch、Kibana 等组件组成,来共同完成实时日志的收集,存储,展示等一站式的解决方案。Logstash 是具有实时流水线能力的开源的数据收集引擎。Logstash 可以动态统一不同来源的数据,并将数据标准化到您选择的目标输出。它提供了大量插件,可帮助我们解析,丰富,转换和缓冲任何类型的数据。

2023-12-06 20:31:59 382

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

创建线程需要开辟本地线程栈、虚拟机栈、程序计数器等私有线程内存,消耗的时候也需要释放这些内存,频繁的创建和销毁需要⼀定的开销;当任务数远远⼤于线程可以承载的数量之后,不能友好的进⾏任务拒绝。//核心线程池数//最大线程池数//线程存活时间//存活时间单位//阻塞队列//线程工厂@OverrideSystem.out.println("创建线程:" + r);unit,workQueue,r -> {System.out.println("创建线程:" + r)

2023-12-05 20:34:18 1788

原创 三种定时器使用方法

启动,访问 192.168.3.10:19190/xxl-job-admin。编写实现类——每秒钟启动一次。打开 idea,创建新项目。在启动类添加启用定时器注解。创建模块 xxl-job。

2023-12-04 20:31:45 394

原创 Synchronized

Synchronized 是一种互斥锁,也成为同步锁,它的作用是保证在同一时刻,被修饰的代码块或方法只会有一个线程执行,以到达保证并发安全效果。在 JDK 1.6 以前,很多人称之为重量级锁,性能不高。但是在 JDK 1.6 以后,对 sychronized 进行了一些优化,引入了偏向锁,轻量级锁,以及重量级锁。synchrionized 会根据线程的竞争程度对锁进行升级和降级。原子性:确保线程互斥的访问同步代码;可见性:可保证一个线程的变化 (主要是共享数据的变化)被其他线程所看到。

2023-11-30 22:55:22 905

原创 websocket和http的区别

WebSocket 是一种实时通信协议,它允许客户端和服务器之间进行双向通信,而不需要每次请求都重新建立连接。WebSocket 是 HTML 5 中的新功能,它建立在 HTTP 协议之上,通过握手协议来建立持久化的连接。WebSocket 的握手协议比 HTTP 的握手协议更简单,因为 WebSocket 的连接建立后,客户端和服务器之间的数据交换是以二进制形式进行的,而不需要像 HTTP 那样进行文本解析。

2023-11-22 20:28:41 152

原创 ConcurrentHashMap和HashMap的区别

假设存在 A 和 B 两个线程同时对 HashMap 扩容,两个线程执行速度有快慢,当 A 线程对 HashMap 完成扩容后,B 线程才刚刚将一个元素移动到新表,在 JDK1.7 版本中,由于采用头插法,那么最后 B 线程插入这个值的 next 会指向前面的值,造成死循环。

2023-11-21 20:28:16 226

原创 7层网络结构模型

七层结构模型又称为 OSI 模型。在最基本的形式中,两台计算机通过网线和连接器相互连接,在网卡的帮助下共享数据,形成一个网络,但如果一台计算机基于微软的 Windows 系统而另一台计算机基于 Mac OS 系统,那么这两台计算机之间将如何相互通信?为了完成不同计算机或网络或架构之间的成功通信,国际标准化组织提出了 OSI 七层模型,该模型 (从上到下)包括了应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。

2023-11-20 20:34:06 45

原创 ThreadLocal对象的使用

ThreadLocal 是 java 提供的线程局部变量,这些变量与正常变量不同,因为每个访问一个线程的线程都有其自己的,独立初始化的变量副本。可以看到这里有个 ThreadLocalMap,根据 map 的键值对特性不难猜到是不是每个线程都有对应的 map,从而获取的 value 也不相同。创建了一个 ThreadLocal 变量,并使用了 set 方法为它赋值,可以看到线程 A 输出了 20。根据以往的对于全局变量的看法,会认为在线程 B 中,也会输出 20,但实际上。

2023-10-25 20:34:46 41

原创 CAS(Compare-And-Swap)

在多线程并发环境中,多个线程可能同时读取和修改同一个共享变量,这可能会导致数据不一致或竞态条件等问题。由此我们需要用一个“锁”来确保线程不会同时读取或修改同一个变量——例如一个票不能买两次。

2023-10-24 20:33:01 43

原创 搭建nexus私服部署项目

在 nexus 目录下新建 repo 文件夹, 将本地仓库内容上传, 本地仓库位置见1.3在本地仓库上传的文件夹 repo 下创建一个 shell 脚本,命名 localrepository.Sh/bin/bashdo;;;;;;esacdone添加权限执行以下命令localrepository.sh -u nexus用户名 -p nexus密码 -r 仓库地址。

2023-10-23 19:44:05 126

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

基于角色的权限控制用户:系统接口及访问的操作者权限:能够访问某接口或者做某操作的资格角色:具有一类相同操作权限的用户的总称。

2023-10-22 16:15:42 69

原创 Redis的安装和使用

用于获取有序集合中分数在指定范围内(包括端点)的成员列表,按照分数从小到大排序。设置指定 key 中 field 字段的值仅当 field 不存在时。为 key 中指定 field 的值增加 increment。向有序集合添加一个或多个成员, 或者更新已存在成员的分数。如果 key 不存在的话设置 key 的值。返回 key 中所有 field 对应的值。返回 key 中 field 对应的值。创建或修改key一个/多个字段的值。返回 key 中存储的所有元素。获取 key 中所有字段的数量。

2023-10-19 20:28:32 43

原创 Springboot缓存注解

Spring 从 3.1 开始就引入了对 Cache 的支持。定义了和接口来统一不同的缓存技术。并支持使用 JCache(JSR-107)注解简化我们的开发。其使用方法和原理都类似于 Spring 对事务管理的支持。Spring Cache 是作用在方法上的,其核心思想是,当我们在调用一个缓存方法时会把该方法参数和返回结果作为一个键值对存在缓存中。

2023-10-18 20:21:55 139

原创 springmvc的工作流程

简单而言,Spring MVC 是 Spring 在 Spring Container Core 和 AOP 等技术基础上,遵循上述 Web MVC 的规范推出的 web 开发框架,目的是为了简化 Java 栈的 web 开发。

2023-10-17 23:03:26 24

原创 mysql数据库引擎

update String 否 “” 字段 update set 部分注入,例如:当在version字段上注解update=“%s+1” 表示更新时会 set version=version+1 (该属性优先级高于 el 属性)ASSIGN_ID(3), //分配 ID(主键类型为 Number(Long 和 Integer)或 String)(since 3.3.0),//分配 UUID,主键类型为 String(since 3.3.0),// 根据 Wrapper 条件,查询全部记录。

2023-10-16 23:43:07 62

原创 搭建maven私服

在nexus目录下新建repo文件夹,将本地仓库内容上传,本地仓库位置见1.3在本地仓库上传的文件夹repo下创建一个shell脚本,命名 localrepository.sh/bin/bashdo;;;;;;esacdone添加权限执行以下命令localrepository.sh -u nexus用户名 -p nexus密码 -r 仓库地址。

2023-10-12 20:23:07 98

原创 接口测试:Swagger的应用

项目结构如下book #项目名称–common #子模块–domain #子模块–book #子模块-业务模块。

2023-10-11 20:36:49 289

原创 DockerFile

ENTRYPOINT与CMD非常类似,不同的是通过docker run执行的命令不会覆盖ENTRYPOINT,而docker run命令中指定的任何参数,都会被当做参数再次传递给ENTRYPOINT。Dockerfile中只允许有一个ENTRYPOINT命令,多指定时会覆盖前面的设置,而只执行最后的ENTRYPOINT指令。**CMD 在 Dockerfile 中的主要目的是为正在运行的容器提供默认值。使用指令使容器中的一个目录具有持久化存储的功能,该目录可被容器本身使用,也可以共享给其它容器。

2023-10-10 20:04:37 42

原创 Mysql主从搭建

为了获取一个初始化的my.cnf文件,这里新建一个mysql容器。多服务器(mysql)协同工作解决大量请求问题。A: 高可用性 ----主从,集群。2、重置slave:relaylog。转到文件夹,对my.cnf进行修改。原因: 从数据库使用root登录。3、重新配置change to。解决方案:创建一个只读用户。my.cnf文件示例如下。

2023-10-09 19:10:12 51

原创 Docker命令

docker常用命令

2023-10-09 10:51:21 34

空空如也

空空如也

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

TA关注的人

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