自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 数据库常用锁

​ 在数据库系统中,锁起着至关重要的作用,因为它们确保数据的一致性和有效性,同时也是处理并发访问的关键机制。

2023-12-12 08:41:02 45 1

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

对于CPU密集型任务,它们主要涉及大量的计算操作,而输入/输出操作相对较少。这意味着任务的执行时间主要取决于CPU的计算速度,而不是数据的读写速度。想象一下你是一位大厨,正在烹饪一道需要很多切菜工作的菜品。这时候,你就是 CPU(中央处理器),而切菜就是计算任务。总的来说,CPU密集型任务就是更注重计算工作的任务,而线程配置就是在处理这些任务时,合理地利用助手(线程)来提高效率,就像在烹饪中合理利用助手来提高整个菜谱的完成速度一样。那怎么去合理的把握这个度呢?

2023-12-08 08:44:45 44

原创 ELK的日志解决方案

​ ELK、实时监控、安全事件检测等场景。它提供了一个强大的工具集,可以帮助组织更好地理解其数据,做出更明智的决策。ELK的组件也可以独立使用,根据需要进行定制和配置.

2023-12-07 08:50:13 44

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

​ 池化技术我们经常见,比如学习spring JDBC要学习数据库连接池,学习Http网络协议的时候要引入http连接池.同样的,多线程也有与之对应的线程池.池化技术的思想主要是为了减少每次获取,对系统资源的消耗提高资源的利用率.我们知道在面向对象编程中,创建和销毁对象是很费时间的,因为线程其实也是一个对象,创建一个对象,需要经过类加载过程,销毁一个对象,需要走GC垃圾回收流程,都是需要资源开销的。重复利用.线程用完,再放回池子,可以达到重复利用的效果,节省资源。

2023-12-06 08:55:49 43

原创 三种定时任务总结

​ @Schedule是Spring 3.0 版本之后自带定时任务,提供了@EnableScheduling注解和@Scheduled注解来实现定时任务功能。​ 基于注解@Scheduled默认为单线程,开启多个任务时,任务的执行时机会受上一个任务执行时间的影响。在配置类上使用,开启计划任务的支持(类上)。来声明这是一个任务,包括 cron,fixDelay,fixRate 等类型(方法上,需先开启计划任务的支持)。​ 常用于Spring应用中,通过注解的方式实现简单的定时任务。

2023-12-04 20:42:42 19

原创 synchronized用法和原理

​ 很多synchronized 里面的代码只是一些很简单的代码,执行时间非常快,此时等待的线程都加锁可能是一种不太值得的操作,因为线程阻塞涉及到用户态和内核态切换的问题。既然synchronized 里面的代码执行得非常快,不妨让等待锁的线程不要被阻塞,而是在synchronized 的边界做忙循环,这就是自旋。如果做了多次循环发现还没有获得锁,再阻塞,这样可能是一种更好的策略。

2023-11-30 20:46:17 16

原创 代理的三种方式

​ 静态代理是java中的一种设计模式,通过创建一个代理类来代替原始类,从而控制对原始类的访问.代理类和原始类之间都实现了相同的接口.使得客户端在使用时无需关心具体的实现细节.代理的概念已经解释了,那为什么叫做静态代理呢?是因为该代理在编译阶段就已经确定了代理类和原始类之间的关系.Subject​ 代码示例:假设有一个接口Subject和一个原始类然后,创建一个代理类在这个示例中,是Subject接口的实现,通过包含一个对象,它能够在原始方法执行前后插入额外的逻辑。在这个例子中,客户端通过代理类。

2023-11-28 20:35:46 33

原创 spring 是如何解决循环依赖的

​ 循环依赖是指两个或多个 Bean 之间相互依赖形成闭环的情况,如上图所示,从而导致程序运行出现问题,因为在实例化和初始化阶段,容器无法确定哪个 Bean 应该先创建。​ 体现在代层面上,如下图所示:二者之间相互依赖。

2023-11-28 08:41:58 36

原创 RPC和Http的区别

​ RPC(Remote Procedure Call 远程过程调用)和HTTP(Hypertext Transfer Protocol)是两种不同的通信协议,都用于计算机系统之间的通信,但他们之间有者一些显著的区别。​ RPC 是一种协议,用于在计算机网络上的不同进程之间进行通信。它允许程序调用另一台计算机上的程序,就像调用本地程序一样,而无需显式地处理网络通信的细节,本质上就是允许在不用服务器之间调用方法和同一服务器间调用方法一样。原理:特点:实现细节:应用场景:​ RPC调用流程图​ 协议(超文本

2023-11-26 19:53:21 15

原创 设计模式之build

​ Builder模式是一种创建型模式,它允许用户在不了解内部构造细节的情况下,通过逐步添加或设置值来创建复杂对象.这种模式将构建复杂对象的过程与它的表示分离开来,使得同样的构建过程可以创建不同的表示在Builder模式中,通常会有一个Builder类,它包含构建复杂对象所需的各个步骤或组成部分。:负责使用 Builder 接口构建产品,它通常包含一个构建方法,该方法接收一个 Builder 对象作为参数,并按照一定的顺序调用 Builder 的方法来构建产品。:表示被构建的复杂对象。

2023-11-24 08:48:10 20

原创 Http协议和webSocket协议之间的区别

握手是在两个实体之间建立连接或协商参数时进行的一系列步骤。在网络通信中,一次握手通常包括一方发送一个请求,另一方接收并回复,最终建立了双方之间的通信通道。在 WebSocket 协议中,建立连接时也需要进行一次握手过程,确保客户端和服务器都支持 WebSocket,并协商连接参数。确认是指在接收到数据包或消息后,接收方发送一个确认消息以告知发送方数据已经成功接收。这是一种确保数据传输可靠性的机制,用于避免数据丢失或重复。在通信中,确认可以是一种简单的成功响应,也可以包含接收方对接收到的数据进行校验的信息。

2023-11-22 20:06:37 26

原创 ConcurrentHashMap和HashMap的区别

​ HashMap是java中常用的数据结构,是java.util包下存储数据结构的集合,在jdk1.7版本中,使用一个Entry数组来存储数据,用key的hashcode取模来决定key会被放到数组里的位置,如果hashcode相同,或者hashcode取模后的结果相同,那么这些key会被定位到Entry数组的同一个格子里,这些key会形成一个链表;

2023-11-22 08:26:27 35

原创 计算机网络分层模型

​ 网络的七层是指OSI(Open Systems Interconnection,开放式系统互联)参考模型,这是一个由国际标准化组织(ISO)制定的网络通信协议体系结构。该模型定义了网络通信的七个层次,每个层次负责特定的功能。

2023-11-20 19:53:27 23 1

原创 gitlab搭建流程

gitlab服务器搭建

2023-11-18 11:03:46 26 1

原创 生产者和消费者模型

​ 生产者消费者模型是一种并发同步模式,用于解决生产者和消费者之间的数据传输问题。在该模型中,生产者生成数据并将其放入缓冲区,而消费者从缓冲区中取出数据并进行处理。这种模型的目的是解耦生产者和消费者之间的关系,从而使它们能够独立地进行操作。

2023-10-31 13:52:32 27 1

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

​ 数据库分库分表是一种数据库架构设计方法,用于处理大规模数据集的存储和管理。在分库分表策略中,大型数据库被拆分成多个小型数据库(分库),每个小型数据库中的表被拆分成多个子表(分表),以降低单一数据库的数据量和提高数据库性能和可伸缩性。

2023-10-28 20:16:50 41 1

原创 ThreadLocal对象的使用

​ ThreadLocal 是用于创建线程局部变量的机制,它确保每个线程都有自己的变量副本,互不干扰。这意味着在多线程环境中,每个线程可以独立地访问和修改自己的 ThreadLocal 变量,而不会影响其他线程的数据,从而实现了线程之间的隔离。这对于处理线程安全和多线程并发问题非常有用。​ ThreadLocal 变量是线程局部变量,这意味着每个线程都拥有其自己的变量副本,且这些副本是相互隔离的。这个名称也正是由于这个特性而来。

2023-10-25 23:06:02 26 1

原创 nexus私服上部署项目

​ 前面我们已经学习了如何搭建maven私服nexus(),接下来,我们进一步学习如何在nexus私服上部署项目。

2023-10-24 23:31:46 246

原创 一文带你搞懂CAS

CAS机制中,有三个基本操作数:内存地址V,旧的预期值A,要修改的新值B(新值)。更新一个变量的时候,只有当变量的预期值A和内存地址V当中的实际值相同时,才会将内存地址V对应的值修改为B。其中最重要的是 CAS 操作可能会引发 ABA 问题,即虽然共享数据的值在一段时间内没有变化,但在此期间它可能经历了一系列修改和恢复,因此 CAS 操作可能会误判成功。解决方案:可以添加版本号作为标识,在CAS比较数据当前值和旧值的时候,也要比较版本号是否符合预期,从而对应地增加版本号。

2023-10-24 22:45:57 42

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

优点:简化权限管理:RBAC简化了权限管理,通过将权限分配给角色,然后将角色分配给用户,使权限管理更加可维护和清晰。降低错误风险:RBAC减少了出错的机会,因为权限分配是基于角色的,而不是直接与用户相关。这有助于减少意外的权限泄漏或滥用。提高安全性:RBAC可以增加系统的安全性,因为它限制了用户对资源的访问,确保用户只能执行其职责范围内的操作。合规性和审计:RBAC有助于满足合规性要求,因为权限分配和使用是可追踪和审计的。这有助于监督和验证系统的合规性。适用于大型组织。

2023-10-22 23:21:16 107 1

原创 SpringBoot全局异常处理

​ Java虽然提供了大量的异常处理类,但实际开发中还不足以满我们的需求,这时候我们可以通过自定义异常来更快的定位错误,解决问题。​ 我们自定义异常的时候通常继承Java中的运行时异常通常表示程序员的错误,而检查异常通常表示外部因素引发的问题。如果您的自定义异常继承自,那么它们更有可能被视为编程错误,而不是需要强制捕获的外部因素。这可以帮助开发人员更好地理解和遵循编程风格和约定。继承的自定义异常不需要强制捕获或声明,这可能减少了在方法签名中添加throws声明的需求,从而减少了冗余的异常处理代码。

2023-10-20 20:31:10 32 1

原创 redis五种常用数据类型

​ Redis是一种开源(采用BSD许可证)、用作数据库、缓存、消息代理和流式引擎的内存数据结构存储系统。Redis提供了诸如字符串、哈希表、列表、集合、带范围查询的有序集合、位图、HyperLogLog、地理空间索引和流等数据结构。Redis内置了复制、Lua脚本、LRU(最近最少使用)淘汰、事务和不同级别的磁盘持久性,并通过Redis Sentinel提供高可用性以及通过Redis Cluster实现自动分区。

2023-10-19 21:13:02 24

原创 spring缓存注解

​ spring缓存是Spring框架中的功能,提供了应用程序中有效管理数据缓存的方式。缓存时一种将数据存储在内存中的技术,方便我们在后续访问相同数据时能更快的获取数据,而不必重新访问数据库或资源。​ Spring缓存的主要目标是提高应用程序的性能,减少对耗时资源的访问,并减少响应时间。它通过将数据存储在内存中的缓存中,以加快对数据的访问,从而提高了应用程序的响应速度。这在处理频繁访问的数据或计算昂贵的数据时特别有用。

2023-10-18 23:57:08 108 1

原创 springmvc的工作流程

(Model):封装了数据和对数据的操作,是实际进行数据处理的地方(模型层是和数据库进行交互的)(View):应用与用户之间的接口,负责将应用显示给用户和现实模型的状态。(Controller):控制器负责视图和模型之间的交互,控制对用户输入的响应、响应方式和流程;它主要负责两方面的动作,一是把用户的请求分发到相应的模型,二是把模型的改变及时地反映到视图上。(简单理解就是处理请求和响应数据)

2023-10-17 23:48:01 15

原创 mysql数据库引擎 ------Inodb,MyISAM

​ 数据库引擎是数据库管理系统(DBMS)的核心组件之一,负责管理数据的储存、检索、更新和索引等功能。它定义了如何组织和操作数据,以确保数据库的有效性、性能和数据完整性。数据库引擎又被叫做数据库存储引擎,不同的数据库支持不同的数据库引擎,每个引擎都有自己的用例和特性。

2023-10-16 20:17:28 30 1

原创 # maven介绍和私服搭建Nexus

​ Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件。Maven 除了以程序构建能力为特色之外,还提供高级项目管理工具。由于 Maven 的缺省构建规则有较高的可重用性,所以常常用两三行 Maven 构建脚本就可以构建简单的项目。由于 Maven 的面向项目的方法,许多 Apache Jakarta 项目发文时使用 Maven,而且公司项目采用 Maven 的比例在持续增长然后选择 maven2(hosted)

2023-10-16 19:07:50 70 1

原创 测试技能提升:Junit,Knife4J和JMeter使用指南

Ramp-Up 时间(秒):表示从第一个虚拟用户开始生成直到最后一个虚拟用户开始生成的时间,假如配置了5个虚拟用户,Ramp-Up 设置成10s,那么 JMeter 会每隔2s生成1个虚拟用户,Ramp-Up设置成0,那么所有用户将会同时立即产生。​ 单元测试、接口测试和压力(并发测试)都是与软件测试和开发密切相关的工具和框架,但它们在测试方面有不同的应用和重点。​ 在测试过程中发现,存在一张票被两个线程同时购买的情况,可以在方法上+synchronized 来保证线程安全,但是会导致效率下降的问题。

2023-10-15 22:31:13 145

原创 Springboot整合Dockerfile

在springboot应用中使用Dockerfile的目的是将应用程序部署到Docker容器中,使其在Docker容器中运行。独立性和一致性:使用Dockerfile将应用程序和其依赖项打包到一个独立的Docker容器中,确保了应用程序在不同环境中的一致性。这消除了"在我的开发机器上可以运行,但在其他地方不行"的问题。环境隔离:Docker让您的应用程序成为"自带环境的旅行者",不受周围环境的影响。就像在一个安全的泡泡中运行一样,不必担心与其他软件包的冲突。自动化部署。

2023-10-11 09:46:47 417 1

原创 搭建mysql主从服务器

在传统仅有单个mysql服务器的项目中,一旦同时间遇到大量用户对数据库进行速写操作,服务器就就很容易宕机,进而导致数据丢失,这种原因是由于数据库无法有效处理高并发写入请求,导致资源耗尽,响应时间延长甚至崩溃.因此,就有必要采用多服务器协同解决大量请求的问题,减轻单台服务器的压力。

2023-10-09 21:15:06 110

原创 docker 常用命令总结

docker 常用命令总结查询镜像拉取镜像列出已经下载的镜像删除镜像(2种方法)创建并运行容器创建自定义网络(network)查看docker日志(2种方式)进入容器登录mysql服务器退出容器容器的关闭和重启删除容器查看容器的内部状况Linux常用指令文件和目录操作文件查看与编辑其他补充Linux中查看日志的方法docker network ls 查询所有的network-d mysql序列参数解释1-i以交互模式运行容器2-t为容器重新分配一个伪输入终端3–name容器名称4。

2023-10-08 21:37:37 49 1

空空如也

空空如也

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

TA关注的人

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