- 博客(104)
- 收藏
- 关注
原创 Redis 非缓存核心场景及实例说明
分布式锁用于解决分布式系统中多节点竞争同一资源的问题,确保操作原子性。Redis 实现分布式锁的核心思路是利用键的唯一性和原子命令,通常基于 Redisson 框架简化实现(底层依赖 Redis 命令)。:电商秒杀场景中防止库存超卖。假设某商品库存为 100 件,多台应用服务器同时处理用户抢购请求,需通过分布式锁保证“查库存-扣库存”操作的原子性。
2025-09-08 15:27:29
1006
原创 DNS及DNS域名解析流程
我们首先要了解域名和IP地址的区别。IP地址是互联网上计算机唯一的逻辑地址,通过IP地址实现不同计算机之间的相互通信,每台联网计算机都需要通过IP地址来互相联系和分别。但由于IP地址是由一串容易混淆的数字串构成,人们很难记忆所有计算机的IP地址,这样对于我们日常工作生活访问不同网站是很困难的。基于这种背景,人们在IP地址的基础上又发展出了一种更易识别的符号化标识,这种标识由人们自行选择的字母和数字构成,相比IP地址更易被识别和记忆,逐渐代替IP地址成为互联网用户进行访问互联的主要入口。这种。
2025-07-24 08:51:10
1056
原创 MySQL-EXPLAIN详解
那么找到满足条件的索引后也会进行一次索引下推的操作,判断content1 > 'z’是否成立(这是源码中为了编程方便做的冗余判断)**补充:**MySQL在处理带有派生表的语句时,优先尝试把派生表和外层查询进行合并,如果不行,再把派生表。查询涉及到的字段上若存在索引,则该索引将被列出,内连接时,MySQL性能优化器会自动判断哪个表是驱动表,哪个表示被驱动表,和书写的顺序无关。查询的类型,主要是用于区别普通查询、联合查询、子查询等的复杂查询。表示索引使用的字节数,根据这个值可以判断索引的使用情况,
2025-07-20 23:52:01
601
原创 JMeter使用教程
填写请求信息,在相应的浏览器页面F12,按照下图步骤设置Body Data(还可以设置其他的如Parameters等,按照实际需求来)解压后进入bin目录,双击jmeter.bat即可看到可视化界面。在相应的浏览器页面F12,按照下图步骤,填写Cookie信息。我这里只设置了下述两个,可以根据实际情况自己设置其他的。右键“Thread Group”右键“HTTP Request”右键“Test Plan”去官网下载安装包解压即可。填写完后“Save”保存。点击下边的“Add”
2025-07-18 14:23:09
246
原创 Win11安装Docker,并使用Docker安装RabbitMQ
参考链接:https://blog.youkuaiyun.com/qq_45502336/article/details/118699251。可以改成自己的外网端口号,这里映射的外网端口是5673 那么程序连接端口就是用5673。这里是直接安装最新的,如果需要安装其他版本在rabbitmq后面跟上版本号即可。如果显示了Client和Server信息,就说明安装成功了。我使用的谷歌账户进行登录(也可以跳过登录直接使用。右键桌面任务栏的win图标,选择“终端管理员”访问web界面,这里的用户名和密码默认都是。
2025-07-18 14:21:40
684
原创 ThreadLocal详解
在多线程编程中,我们创建的变量默认可以被任何线程访问和修改。那么,如果想让每个线程都拥有自己的专属变量,互不干扰,该如何实现呢?但如果每个人都有一个独立的袋子,就不会有这个问题。每个线程进入系统时,都会得到一个属于自己的、独立的盒子。线程可以随时向自己的盒子里存放或取用物品,但无法窥探或操作其他线程的盒子。变量时,每个访问该变量的线程都会获得一个独立的、初始化的副本。),但持有它的线程却一直存活(比如线程池中的复用线程),那么这个。方法获取自己线程的本地副本,或通过。,但这种清理是被动的,不能保证及时性。
2025-07-15 00:00:25
795
原创 Java进程、线程与协程对比
特性进程 (Process)平台线程 (Platform Thread)虚拟线程 (Coroutine in Java)定义资源分配的基本单位CPU调度的基本单位用户态的、更轻量的执行单元资源所有权拥有独立的内存和资源共享进程的内存和资源,有私有栈共享平台线程的资源,有极小的栈开销非常高(创建、切换)较高(比进程低,但仍需OS)极低(JVM管理,无需OS)调度方操作系统 (OS)操作系统 (OS)JVM / 用户程序调度方式抢占式抢占式协作式(阻塞时自动让出)数量级数十个。
2025-07-14 23:26:50
696
原创 Java4种设计模式详解(单例模式、工厂模式、适配器模式、代理模式)
为了解决数据格式不兼容的问题, 你可以为分析函数库中的每个类创建将 XML 转换为 JSON 格式的适配器, 然后让客户端仅通过这些适配器来与函数库进行交流。当某个适配器被调用时, 它会将传入的 XML 数据转换为 JSON 结构, 并将其传递给被封装分析对象的相应方法。被封装的对象甚至察觉不到适配器的存在。但是, 仔细想一下, 现在你可以在子类中重写工厂方法, 从而改变其创建产品的类型。在理想情况下, 我们希望将代码直接放入对象的类中, 但这并非总是能实现: 比如类可能是第三方封闭库的一部分。
2025-07-13 18:58:59
1027
原创 Java虚拟线程及其与单线程、多线程在I/O密集、CPU密集情况下运行对比
1、虚拟线程是Java19提出来的一个概念,Java19提供特性预览,开放实装是Java21(2023年9月),目前来说(2024年3月),还是一个比较新的特性,对于一些不是很常见的库可能尚未适配。2、虚拟线程主要解决的问题是减少I/O密集型任务的I/O阻塞。传统的多线程在处理I/O的时候,例如某个线程在处理某个任务,如果遇到I/O例如网络通信、文件读取,受限于网络速度、机器的硬盘I/O速度等,这个线程会阻塞等待I/O的完成,然后再继续往下执行任务。
2025-07-13 18:17:22
400
原创 HashMap的put、get方法详解(附源码)
如果定位到的数组位置有元素就和要插入的 key 比较,如果 key 相同就直接覆盖,如果 key 不相同,就判断 p 是否是一个树节点,如果是就调用。根据键的哈希码,定位到红黑树中的某个节点,然后逐个比较键,直到找到相同的键或达到红黑树末尾。如果键值对集合是链表结构,从链表的头部开始逐个比较键的哈希码和equals()方法,直到找到相同的键或达到链表末尾。第三步:如果该位置已经存在其他键值对,检查该位置的第一个键值对的哈希码和键是否与要添加的键值对相同?如果不是就遍历链表插入(插入的是链表尾部)。
2025-07-10 00:04:12
1321
原创 @Transactional详解及实现转账案例
在 spring 项目中,注解默认会回滚运行时异常及其子类,其它范围之外的异常 Spring 不会帮我们去回滚数据(如果也想要回滚,在方法或者类加上即可)。异常继承体系如下图Throwable类及其子类。Error和Exception,它们分别代表了不同类型的异常情况。Error(错误)表示运行时环境的错误。错误是程序无法处理的严重问题,如系统崩溃、虚拟机错误、动态链接失败等。通常,程序不应该尝试捕获这类错误。Exception(异常)表示程序本身可以处理的异常条件。异常分为两大类:非运行时异常。
2025-07-09 08:50:29
1371
原创 云服务器环境配置——安装Tomcat
官网:https://tomcat.apache.org/download-90.cgi。默认情况下,Tomcat会在8080端口运行。如果看到Tomcat的默认欢迎页面(如下图所示),说明Tomcat已成功启动。为了方便管理,可以将解压后的文件夹重命名为更简单的名称,例如 tomcat9。,可能是防火墙阻止了流量。你需要开放8080端口。(这一步需要先保证Tomcat处于开启状态)你应该能在输出中看到 8080/tcp。可以使用下述命令关闭Tomcat。(2) 开放8080端口。,说明防火墙正在运行。
2025-07-06 09:39:48
401
原创 云服务器环境配置——安装JDK
去官网下载安装包:https://www.oracle.com/europe/java/technologies/downloads/#java8-linux。为了方便使用 JDK,你需要配置环境变量,将 JDK 的路径添加到系统中。我的服务器是阿里云,centos,所以选择了linux的。解压后如下(我挪到了jdk18文件夹下边。输入 :wq 并按下回车键保存并退出。按下 Esc 键退出插入模式。在XShell中输入命令。
2025-07-05 11:31:07
556
原创 XShell安装并连接远程服务器教程
5.上图出现了一个警告“The remote SSH server rejected X11 forwarding request.****”意思是“远程SSH服务器拒绝X11转发请求。去官网下载安装包:https://www.xshell.com/zh/free-for-home-school/2.点击“我接受许可证协议中的条款”,点击“下一步”1.双击运行XShell安装文件,并点击“下一步”3.点击“浏览”更改默认安装路径,点击“下一步”5.安装完成,点击“完成”2.点击“新建”,新建会话。
2025-07-05 10:34:45
432
原创 SpringMVC简介
如果所有的处理都交给Servlet来处理的话,所有的东西都耦合在一起,对后期的维护和扩展极其不利所以将后端服务器Servlet拆分成三层,分别是web、service和daoweb层主要由servlet来处理,负责页面请求和数据的收集以及响应结果给前端service层主要负责业务逻辑的处理dao层主要负责数据的增删改查操作但servlet处理请求和数据时,存在一个问题:一个servlet只能处理一个请求。
2025-06-08 19:34:05
745
原创 Selenium详解
需要:(1)java环境 和 idea;(2)引入依赖;(3)下载对应的浏览器的webdriver需要:(1)安装python;(2)安装selenium库;(3)下载对应的浏览器的webdriver pip installselenium。
2025-06-08 17:36:04
1252
原创 Java线程:并发/并行区别、线程生命周期、乐观锁/悲观锁
与之前不同的是,现在count是一个一个加的,即打印出的count是有序的,且能加到10000了,线程安全了。进程中的线程是由CPU负责调度执行的,但CPU能同时处理线程的数量有限,为了保证全部线程都能往前执行,一开始不上锁,认为是没有问题的,大家一起跑,等要出现线程安全问题的时候才开始控制。虽然代码出现了线程安全问题,但是最终的结果也是很接近我们想要的结果的,即只是偶尔发生了线程冲突。也就是线程从生到死的过程中,经历的各种状态及状态转换。需求:1变量,100个线程,每个线程对其加100次。
2025-05-30 15:15:48
388
原创 Java线程:线程池详解(ThreadPoolExecutor构造器七个参数、线程池处理Runnable/Callable任务)
线程池就是一个可以。
2025-05-30 15:14:53
1190
原创 Java多线程:线程同步以及加锁的三种方式(同步代码块、同步方法、Lock锁)
解决线程安全问题的方案让多个线程先后依次访问共享资源,这样就解决了线程安全问题锁对象随便选择一个唯一的对象好不好呢不好,会影响其他无关线程的执行锁对象使用规范建议使用共享资源作为锁对象,对于实例方法建议使用this作为锁对象对于**静态方法建议使用字节码(类名.class)**对象作为锁对象。
2025-05-29 16:13:48
1736
原创 Java基础:this关键字详解
this其实可以理解为对象的一个属性(成员变量),但是这个属性是隐藏的.即this相当于对象的一个隐藏属性。和对象的其他属性一样,在new一个新对象的时候,会在堆内存为对象分配空间,属性就储存在这份空间中。且该this属性的值就是对象在堆内存中地址,即this指向该对象(this代表该对象).【重点】
2025-05-29 15:30:24
894
原创 Redis设置永久密码
requirepass是一个用于设置 Redis 密码的参数。默认情况下,它可能是被注释掉的(前面有 #),或者根本没有设置。将 requirepass 参数设置成。1.找到Redis安装目录,打开。保存修改,重启redis。
2025-05-06 14:39:49
417
原创 Redis卸载重装教程
找到redis安装目录cmd打开该目录,输入运行结果如下最后再删除redis文件夹即可(如果显示该文件夹已在其他地方被打开而无法删除,可以重启一下电脑,就能正常删除啦)
2025-05-06 11:20:31
1464
原创 IDEA导入并启动若依项目步骤(SpringBoot+Vue3)
复制命令,将项目克隆到本地使用IDEA打开(会有点慢,耐心等待),打开后如下。
2025-04-24 19:13:29
1635
原创 数据库三大范式:原子性、唯一性、消除依赖传递
不知道读者们有没有发现,以上所介绍的范式的最终目的都是为了减少我们的工作量呢?所以说,尽管范式是一种很好的指导规范,但在实际应用中,我们也不需要太局限在范式中,更多的是应该从项目中出发,设计出合理的表结构。以下是本篇三范式的简单总结:第一范式(1 NF):字段不可再拆分。第二范式(2 NF):表中任意一个主键或任意一组联合主键,可以确定除该主键外的所有的非主键值。第三范式(3 NF):在任一主键都可以确定所有非主键字段值的情况下,不能存在某非主键字段 A 可以获取 某非主键字段 B。
2025-04-23 19:40:10
1137
原创 分布式应用架构的演变
给不同访问压力的业务逻辑分配不同大小的服务器资源,且同一个业务逻辑,优先将新来的请求分配给正在处理该模块业务逻辑的服务器中压力较小的那个(比如用户模块被分配了3台服务器,服务器1正在处理10个请求,服务器2正在处理1000个请求,服务器3正在处理100000个请求,那么新进来的请求就会分配给服务器1或者2而不分配给3了)单一应用架构,是把所有服务都放在一个项目中,进行打包部署到服务器上,如果流量特别大的话,就在另外的服务器上部署相同的功能模块用来分摊流量。
2025-04-14 11:08:43
435
3
原创 Java中线程常用方法
多个线程,同时操作一个共享资源的时候,可能会出现业务安全问题存在多个线程同时执行同时访问一个共享资源存在修改该共享资源例如:取钱的线程安全问题场景:小明和小红是一对夫妻,他们有一个共同的账户,余额是10万元,如果小明和小红同时来取钱,并且2人各自都在取钱10万元,可能会出现什么问题呢?
2025-03-02 08:15:06
456
原创 线程概述以及Java中线程的三种创建方式(继承Thread类、实现Runnable接口、实现Callable接口)
线程是一个程序内部的一条执行流程程序如果只有一条执行流程,那么这个程序就是单线程的程序多线程是指从软硬件上实现的多条执行流程的技术(多条线程由CPU负责调度执行)如:12306同时处理多个用户请求,百度网盘下载文件的同时上传文件;再例如:消息通信、淘宝、京东系统都离不开多线程技术。
2025-02-28 18:14:11
367
原创 java基础11——为什么Java字符串是不可变的
String可能是 Java 中使用频率最高的引用类型了,因此String类的设计者可以说是用心良苦。比如说String的不可变性。
2025-02-13 19:33:13
688
原创 银行家算法
允许进程动态地申请资源,系统在每次实施资源分配之前,先计算资源分配的安全性,若此次资源分配安全(即资源分配后,系统能按某种顺序来为每个进程分配其所需的资源,直至最大需求,使每个进程都可以顺利地完成),便将资源分配给进程,否则不分配资源,让进程等待。
2025-02-13 02:49:59
1013
原创 操作系统四大常用的作业调度算法(FCFS丨SJF丨HRRN丨RR)
先来先服务调度算法(First-Come, First-Served, FCFS)是一种基本的进程调度算法,其核心思想是按照作业到达时间的先后顺序进行调度。有三个作业按下表的时间提交给系统,请按照先来先服务的调度算法计算它们的平均周转时间T和平均带权周转时间W分析:按照先来先服务的原则,可以计算出各个作业在系统中的开始执行时刻、结束时刻、周转时间。
2025-02-13 01:28:14
1145
原创 java基础10——为什么重写equals方法的时候必须要重写hashCode方法
Java 是一门面向对象的编程语言,所有的类都会默认继承自 Object 类,而 Object 的中文意思就是“对象”。这是一个本地方法,用来返回对象的哈希值(一个整数)。在 Java 程序执行期间,对同一个对象多次调用该方法必须返回相同的哈希值。对于任何非空引用 x 和 y,当且仅当 x 和 y 引用的是同一个对象时,equals 方法才返回 true。单从这两段解释上来看,的确是这样的。但两个方法的 doc 文档中还有下述两条信息。
2025-02-06 23:59:34
657
原创 java基础09—— == 和 equals() 的区别
方法比较的是对象的值。当创建 String 类型的对象时,虚拟机会在常量池中查找有没有已经存在的值和要创建的值相同的对象,如果有就把它赋给当前引用。因为 Java 只有值传递,所以,对于 == 来说,不管是比较基本数据类型,还是引用数据类型的变量,其本质比较的都是值,只是引用类型变量存的值是对象的地址。方法存在于Object类中,而Object类是所有类的直接或间接父类,因此所有的类都有。方法是比较的对象的内存地址,而 String 的。方法是被重写过的,因为 Object 的。比较的是对象的内存地址。
2025-02-06 14:21:42
254
原创 java基础08——面向对象三大特征 封装继承多态
封装是指把一个对象的状态信息(也就是属性)隐藏在对象内部,不允许外部对象直接访问对象的内部信息。但是可以提供一些可以被外界访问的方法来操作属性。就好像我们看不到挂在墙上的空调的内部的零件信息(也就是属性),但是可以通过遥控器(方法)来控制空调。如果属性不想被外界访问,我们大可不必提供方法给外界访问。但是如果一个类没有提供给外界访问的方法,那么这个类也没有什么意义了。就好像如果没有空调遥控器,那么我们就无法操控空凋制冷,空调本身就没有意义了(当然现在还有很多其他方法 ,这里只是为了举例子)。
2025-02-06 09:09:02
223
原创 JSON Web Token令牌(JWT)的原理与组成
Json web token(JWT)是为了网络应用环境间传递声明而执行的一种基于JSON的开发标准(RFC 7519),该token被设计为紧凑且安全的,特别适用于分布式站点的单点登陆(SSO)场景。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外的其它业务逻辑所必须的声明信息,该token也可直接被用于认证,也可被加密。
2025-02-06 09:08:04
1051
原创 java基础07——面向对象与面向过程的区别
POP 和 OOP 的性能差异主要取决于它们的运行机制,而不仅仅是编程范式本身。因此,简单地比较两者的性能是一个常见的误区。在选择编程范式时,性能并不是唯一的考虑因素。我们定义了一个 Circle 类来表示圆,该类包含了圆的半径属性和计算面积、周长的方法。下面是一个求圆的面积和周长的示例,简单分别展示了面向对象和面向过程两种不同的解决方案。POP 的编程方式通常更为简单和直接,适合处理一些较简单的任务。我们直接定义了圆的半径,并使用该半径直接计算出圆的面积和周长。
2025-02-06 09:07:29
205
原创 TCP三次握手、四次挥手过程及原理
TCP 提供面向有连接的通信传输,面向有连接是指在传送数据之前必须先建立连接,数据传送完成后要释放连接。无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条连接。在TCP/IP协议中,TCP协议提供可靠的连接服务,连接是通过进行初始化的。同时由于TCP协议是一种面向连接的、可靠的、基于字节流的运输层通信协议,TCP是,所以需要关闭连接。
2025-02-05 11:11:25
1256
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅