自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 跳跃表的底层实现

【代码】跳跃表的底层实现。

2024-02-08 18:09:57 330

原创 LRU和LFU有什么区别

选择使用哪种策略取决于具体的应用场景和访问模式。如果应用对最近访问的数据比较敏感,LRU 可能更适合;如果应用对访问频率较低的数据更感兴趣,LFU 可能更合适。有些缓存系统也采用 LRU 和 LFU 的结合策略,根据具体情况灵活选择淘汰键。LRU(Least Recently Used,最近最少使用)和LFU(Least Frequently Used,最不常使用)都是常见的缓存淘汰策略,它们在选择淘汰缓存中的键时有不同的侧重点。

2024-02-08 18:07:40 734

原创 Redis保证数据不丢失的手段

我们分别来看它们两的具体实现细节。

2024-01-31 19:39:16 1479

原创 TCP四次挥手

TCP 协议在关闭连接时,需要进行四次挥手的过程,主要是为了确保客户端和服务器都能正确地关闭连接。

2024-01-31 19:38:35 1638 2

原创 死锁 4 大条件

​ 死锁(Dead Lock)指的是两个或两个以上的运算单元(进程、线程或协程),互相持有对方所需的资源,导致它们都无法向前推进,从而导致永久阻塞的问题就是死锁。比如线程 1 拥有了锁 A 的情况下试图获取锁 B,而线程 2 又在拥有了锁 B 的情况下试图获取锁 A,这样双方就进入相互阻塞等待的情况,如下图所示:​ 在上面的示例中,我们创建了两个锁 lock1 和 lock2,并在两个线程中分别获取这两个锁,但是获取的顺序不同。

2024-01-24 18:58:15 848

原创 CAS及其执行流程

​ CAS(Compare and Swap)是一种轻量级的同步操作,也是乐观锁的一种实现,它用于实现多线程环境下的并发算法。CAS 操作包含三个操作数:内存位置(或者说是一个变量的引用)、预期的值和新值。如果内存位置的值和预期值相等,那么处理器会自动将该位置的值更新为新值,否则不进行任何操作。在多线程环境中,CAS 可以实现非阻塞算法,避免了使用锁所带来的上下文切换、调度延迟、死锁等问题,因此被广泛应用于并发编程中。

2024-01-23 14:34:54 451

原创 线程池执行流程以及拒绝策略

/ 任务的具体方法@OverrideSystem.out.println("当前任务被执行,执行时间:" + new Date() +" 执行线程:" + Thread.currentThread().getName());try {// 等待 1s// 创建线程,线程的任务队列的长度为 1@Override// 执行自定义拒绝策略的相关操作System.out.println("我是自定义拒绝策略~");});// 添加并执行 4 个任务。

2024-01-19 11:58:22 419

原创 线程池优点

​ 线程池是一种管理和复用线程资源的机制,它由一个线程池管理器和一组工作线程组成。线程池管理器负责创建和销毁线程池,以及管理线程池中的工作线程。工作线程则负责执行具体的任务。线程池的主要作用是管理和复用线程资源,避免了线程的频繁创建和销毁所带来的开销。线程池包含两个重要的组成部分:线程池大小:指线程池中所能容纳的最大线程数。线程池大小一般根据系统的负载情况和硬件资源来设置。工作队列:用于存放等待执行的任务。当线程池中的工作线程已经全部被占用时,新的任务将被加入到工作队列中等待执行。

2024-01-19 11:53:25 884

原创 数据库常用锁

悲观锁的特点是先获取锁,再进行业务操作,即“悲观”的认为获取锁是非常有可能失败的,因此要先确保获取锁成功再进行业务操作。1.共享锁(Shared Lock): 又称读锁,允许一个事务去读取一行,阻止其他事务获得相同数据集的排它锁,若事务T对数据对象A加上S锁,则事务T可以读A,但不能修改A,其他事务只能对再对A加S锁,而不能加X锁,直到T释放A上的锁,这保证了其他事务可以读A,但在释放A上的S锁之前不能对A做任何修改多个事务可以同时持有共享锁,用于读取数据而不修改。如果锁不可用,线程会一直尝试获取锁。

2023-12-11 20:11:01 48

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

​。

2023-12-07 20:32:35 57

原创 ELK的日志解决方案

​ ELK 是一个流行的日志管理解决方案,它由 Elasticsearch、Logstash 和 Kibana 组成,用于收集、存储、搜索和可视化日志数据。

2023-12-06 20:28:10 30

原创 线程池的三大方法、七大参数、四种拒绝策略详解

线程池:三大方法、七大参数、四种拒绝策略OOM:Out of memory 内存溢出程序的运行,本质:占用系统的资源!优化资源的使用!=>池化技术线程池、连接池、内存池、对象池、常量池 //… 创建、销毁、池化技术:事先准备好一些资源,有人要用,就来我这里拿,用完之后还给我降低资源的消耗提高响应的速度方便管理线程池的使用规范。

2023-12-05 20:07:57 49

原创 定时任务总结

​ 定时任务的作用是在设定的时间和日期后自动执行任务,执行任务的周期既能是单次也能是周期性。

2023-12-04 20:13:16 69

转载 Docker整理

说明:基于docker save 归档文件中创建镜像 docker import mytomcat2.5.tar runoob/mytomcat2.6。说明:用于显示 docker 的版本信息,包括 docker 客户端 和 docker服务端基本信息。说明:恢复容器中所有的进程 docker unpause tomcat:8.5.38。说明:停止一个运行中的容器 docker stop tomcat:8.5.38。说明:杀掉一个运行中的容器 docker kill tomcat:8.5.38。

2023-12-03 15:50:18 21

原创 Linux整理

Linux命令是在命令行上运行的程序或实用程序。命令行是一个界面,它接受文本行并将其处理为计算机的指令。

2023-12-03 15:47:25 28

原创 Java多线程——synchronized

如果持有锁的线程在较短的时间内释放了锁,自旋锁的效果就比较好,如果持有锁的线程很长时间都不释放锁,自旋的线程就会白白浪费资源,所以一般线程自旋的次数必须有一个限制,该次数可以通过参数-XX:PreBlockSpin调整,一般默认为10。什么是自旋锁:当线程A已经获得锁时,线程B再来竞争锁,线程B不会直接被阻塞,而是在原地循环 等待,当线程A释放锁后,线程B可以马上获得锁。1. 修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代码块的对象;

2023-11-30 20:10:14 83

原创 过滤器使用场景

​ 过滤器(Filter),拦截器(Interceptor),和切面编程(AOP,Aspect-Oriented Programming)是在软件开发中用于实现横切关注点(cross-cutting concerns)的不同技术。过滤器(Filter):过滤器是在 Java Web 应用中使用的一种机制,通常与 Servlet 技术一起使用。过滤器用于在请求被发送到 Servlet 之前或响应被发送到客户端之前执行特定的任务。

2023-11-29 20:26:40 41

原创 代理的三种方式

​ 代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象,这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能。​ 被代理的对象可以是远程对象、创建开销答得对象或需要安全控制得对象。代理模式主要有三种形式,分别是(也称JDK代理、接口代理)和。

2023-11-28 20:18:43 35

原创 Spring如何解决循环依赖

Spring的循环依赖的理论依据其实是基于Java的引用传递,当我们获取到对象的引用时,对象的field或则属性是可以延后设置的(但是构造器必须是在获取引用之前)。循环依赖其实就是循环引用,也就是两个或则两个以上的bean互相持有对方,最终形成闭环。2.如果获取不到,并且对象正在创建中,就再从二级缓存earlySingletonObjects中获取。注意,这里不是函数的循环调用,是对象的相互依赖关系。(1)createBeanInstance:实例化,其实也就是调用对象的构造方法实例化对象。

2023-11-27 20:04:18 31

原创 Rpc和http的区别

RPC服务和HTTP服务还是存在很多的不同点的,一般来说,RPC服务主要是针对大型企业的,而HTTP服务主要是针对小企业的,因为RPC效率更高,而HTTP服务开发迭代会更快。当使用http进行服务间调用的时候,无需关注服务提供方使用的编程语言,也无需关注服务消费方使用的编程语言,服务提供方只需要提供restful风格的接口,服务消费方,按照restful的原则,请求服务,即可。当使用RPC框架实现服务间调用的时候,要求服务提供方和服务消费方 都必须使用统一的RPC框架,要么都dubbo,要么都cxf。

2023-11-25 16:18:10 42

原创 设计模式-build

Builder模式通常作为配置类的构建器将配置的构建和表示分离开来,同时也是将配置从目标类中隔离出来,避免作为过多的setter方法。,作用就是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。它的主要将一个复杂对象的构建过程分解为多个简单对象的构建过程,并且使这些构建过程按照一定的顺序进行组装,最终实现对复杂对象的创建。1.相同的方法,不同的执行顺序,产生不同的事件结果。(View的封装,对外暴露的方法不同)3.产品类非常复杂,或者产品类中的调用顺序不同产生了不同的作用。

2023-11-23 22:09:12 46 1

原创 http协议和websocket协议

HTTP 即超文本传输协议,是一种获取网络资源 (例如图像、HTML 文档) 的应用层协议,它是互联网数据通信的基础,由请求和响应构成。通常,首先客户端会发送 HTTP 请求(在请求报文中会指定资源的 URL),然后用传输层的 TCP 建立连接,最后服务器响应请求做出应答,回传数据报文。

2023-11-22 23:41:13 80 1

原创 ConcurrentHashMap和HashMap的区别

但是在某些情况下,迭代时可能会看到一些陈旧(stale)的数据,因为迭代器反映的是迭代器创建时的快照,而不是最新的映射状态。2、ConcurrentHashMap: 是设计用于高并发环境的,并提供了一定程度的线程安全性,因此多个线程可以并发地读取和写入,而不需要额外的同步。2、ConcurrentHashMap: 使用分段锁,每个段(segment)都可以看作是一个独立的小的 HashMap,只对该段进行加锁,而不是对整个 ConcurrentHashMap 进行加锁。

2023-11-21 23:43:16 379

原创 网络的七层

7层是指OSI七层协议模型,主要是:应用层(Application)、表示层(Presentation)、会话层(Session)、传输层(Transport)、网络层(Network)、数据链路层(Data Link)、物理层(Physical)。提供可靠的数据传输:通过使用差错检测和纠正技术,如循环冗余检验(CRC)和海明码,来检测和纠正数据传输中的错误。实现可靠的数据传输:通过使用传输控制协议(TCP)来实现可靠的数据传输,确保数据的完整性和顺序性。它的主要作用是建立、管理和终止应用程序之间的会话。

2023-11-20 19:49:20 63 1

原创 Gitlab的 搭建流程

GitLab 是一个基于 Git 的版本控制工具,并在此基础上搭建起来的Web服务,旨在提供一个全面的工作流程来帮助管理代码、协作和部署。版本控制是指对软件开发过程中各种程序代码、配置文件及说明文档等文件变更的管理。代码管理:GitLab 允许您存储、管理和浏览您的代码,可以对代码库进行版本控制、分支管理和合并请求等操作。接下来在docker上建立一个gitlab的文件夹。接下来根据自己的地址进入gitlab的网站。这样就可以登陆自己建立的gitlab了。接着创建其他的所需文件夹。

2023-11-18 17:06:47 86 1

原创 生产者消费者消费者模型

这种模型通常用于描述生产者和消费者之间的关系,其中生产者生成数据,而消费者消费这些数据。典型的场景包括生产者不断地将数据放入一个共享的缓冲区,而消费者则从缓冲区中取出数据并进行处理。这个缓冲区的大小通常是有限的,因此在某些情况下,生产者必须等待缓冲区中有可用的空间,而消费者必须等待缓冲区中有数据可供消费。生产者在生成数据后,将数据添加到缓冲区中,并通常会在添加数据后通知消费者,以便消费者可以处理这些数据。同步机制:为了确保生产者和消费者之间的协同工作,通常需要使用同步机制,如互斥锁、信号量或条件变量。

2023-10-30 22:03:54 85 1

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

分表分库是一种数据库水平切分的策略,用于处理大规模数据和提高数据库性能、可伸缩性、和容量。这种技术通过将数据分散存储在多个数据库实例和表中,从而分担数据库服务器的负荷,降低了单一数据库的压力。分表分库的原理涉及许多复杂的技术和管理考虑,需要仔细规划和实施,以确保系统的高性能、可靠性和可维护性。数据库分表分库是一种数据库水平扩展的策略,它可以提高数据库的性能、可伸缩性和容量。水平分库是指,将表的数据量切分到不同的数据库服务器上,每个服务器具有相同的库和表,只是表中的数据集合不一样。

2023-10-29 12:25:25 357 1

原创 Threadlocal对象的使用

是 Java 中的一个类,用于在多线程环境下存储线程本地变量。每个线程都有自己独立的实例,它可以用来存储线程特定的数据,这些数据对于其他线程不可见,从而实现了线程隔离。以下是关于创建一个可以存储字符串的本地变量。

2023-10-25 21:40:15 35 1

原创 CAS锁的机制及优缺点

ABA问题:CAS在操作的时候会检查变量的值是否被更改过,如果没有则更新值,但是带来一个问题,最开始的值是A,接着变成B,最后又变成了A。CAS的核心是在将B值写入到V之前要比较A值和V值是否相同,如果不相同证明此时V值已经被其他线程改变,重新将V值赋给A,并重新计算得到B,如果相同,则将B值赋给V。(1)预期原始值(A)是从偏移位置读取到三级缓存中让CPU处理的值,修改后的新值是预期原始值经CPU处理暂时存储在CPU的三级缓存中的值,而内存指定偏移位置中的原始值。需要将共享变量更新到的最新值:B。

2023-10-24 20:15:41 88

原创 搭建nexus私服部署项目

在搭建之前需要先去docker确认是否启动nexus。接下来则是进行添加仓库。

2023-10-23 20:08:30 31

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

我们开发一个系统,必然面临权限控制的问题,即不同的用户具有不同的访问、操作、数据权限。形成理论的权限控制模型有:自主访问控制(DAC: Discretionary Access Control)、强制访问控制(MAC: Mandatory Access Control)、基于属性的权限验证(ABAC: Attribute-Based Access Control)等。最常被开发者使用也是相对易用、通用的就是RBAC权限模型(Role-Based Access Control),本文就将向大家介绍该权限模型。

2023-10-22 22:03:00 95 1

原创 redis的常用类

这五种常用的数据结构类覆盖了各种不同的数据存储和处理需求,Redis提供了丰富的命令和功能来操作这些数据结构。你可以根据具体的应用场景选择合适的数据结构来存储和管理数据。类型用于存储文本或二进制数据,它是最基本的数据结构。类型是一个有序的字符串元素列表,你可以在列表的两端进行元素的插入和删除。类型是一种有序的集合,每个成员都有一个相关的分数(score)。在Redis中,有五种常用的数据结构类,它们用于不同的数据存储和处理需求。类型用于存储字段和与之关联的值的映射,类似于关联数组。

2023-10-19 20:18:42 23

原创 spring缓存注解

2.@EnableCaching 启用了Spring的缓存管理功能,使得@Cacheable、@CachePut 和 @CacheEvict 注解生效。2.当一个被@Cacheable标记的方法被调用时,Spring首先检查缓存中是否已经有相应的缓存数据,如果有,它会返回缓存的数据而不执行实际方法。1.用于标记方法,表示该方法的结果应该被缓存,与@Cacheable 不同,它会每次执行方法并将结果存入缓存。3.@Cacheable可以指定缓存的名称、缓存的键(key)等选项,以便更精确地控制缓存行为。

2023-10-18 20:19:51 33 1

原创 springmvc的工作流程

8.DispatcherServlet 发送响应:最后,DispatcherServlet 将视图生成的响应发送回客户端,响应可能是一个HTML页面、JSON 数据或其他类型的响应,取决于处理程序和视图的处理过程。它是一个特殊的Servlet,负责将请求分派给相应的处理程序。5.处理程序返回模型和视图信息:处理程序处理请求后,它会返回一个包含模型数据的逻辑视图名。7.渲染视图:一旦视图被解析,DispatcherServlet 将模型数据传递给视图,并要求视图将模型数据呈现为最终的响应。

2023-10-17 19:24:58 67 1

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

数据库存储引擎是数据库底层软件组件,数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据操作。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎,还可以获得特定的功能。现在许多不同的数据库管理系统都支持多种不同的数据引擎。MySQL的核心就是存储引擎。MySQL是一款流行的关系型数据库管理系统(RDBMS),其中提供了多个不同的存储引擎,包括处理事务安全表的引擎和处理非事务安全表的引擎。

2023-10-16 22:01:56 28 1

原创 搭建maven私服

由于 Maven 的缺省构建规则有较高的可重用性,所以常常用两三行 Maven 构建脚本就可以构建简单的项目。由于 Maven 的面向项目的方法,许多 Apache Jakarta 项目发文时使用 Maven,而且公司项目采用 Maven 的比例在持续增长。解压nexus-3.40.1-01-unix.tar.gz并修改文件名为nexus-3.40.1。接下来进入linux创建repo.sh并且进行脚本配置。接下来进入bin文件夹进行配置。接下来则是进行下载nexus。接下来则是启动nexus。

2023-10-13 00:32:13 49

原创 <<swagger>></swagger>

knife4j是一个集Swagger2和OpenAPI3为一体的增强解决方案,所以本次测试选择依赖的是knife4j.利用本程序可以进行多条信息同时发送来进行并发测试,当产生的数值有相同的时,即为发生了并发。本次要聊的是怎么进行swager测试。application-dev.yml配置。项目建立之后启动并且根据自己定的地址进入。以上则是本次所要聊的内容。2、接下来进行common模块的定义。创建父模块和子模块来进行组合。4、接下来进行项目的编码。后面也可以进行并发测试。3、接下来进行依赖。

2023-10-11 20:24:11 34

原创 springboot整合Dockerfile

Dockerfile是用来构建镜像的,他实际上就是把在linux下的命令操作写到了Dockerfile中,通过Dockerfile去执行设置好的操作命令,保证通过Dockerfile的构建镜像是一致的。

2023-10-10 20:03:54 89

原创 搭建mysql主从数据库

数据库主从架构是大数据时代实现高效数据管理的重要手段。通过将读和写操作分散到不同的数据库服务器上,可以提高系统的可扩展性和可靠性。而数据同步、数据备份、主从切换以及维护和管理等方面是保证主从数据库高效运行的关键技术环节。

2023-10-09 19:49:01 112 1

原创 docker常用命令总结

docker run -it --name xxx(自定义容器名称) -e xxxxx -d 镜像名称。5、创建、运行docker容器。7、查询docker日志。6、查询docker进程。8、删除docker容器。10、查看容器的内部状况。11、容器的关闭与重启。

2023-10-08 19:35:18 107

空空如也

空空如也

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

TA关注的人

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