自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【杂类】应对 MySQL 处理短时间高并发的请求:缓存预热

​缓存预热(Cache Warm-up)​核心要点说明​​是什么​​系统启动或高峰前,​​主动加载热点数据​​到缓存的过程。​​为什么​​防止冷启动时大量请求​​穿透​​到数据库,导致数据库​​崩溃​​。​​何时做​​1. ​​系统重启后​​2. ​​每日低谷期​​(如凌晨)3. ​​已知的高并发活动前​​(如大促、秒杀)。​​怎么做​​1. ​​全量预热​​:启动时加载所有热点。2. ​​增量预热​​:定时任务更新热点。3. ​​分级预热​​:本地缓存+分布式缓存。​。

2025-09-09 12:51:58 941

原创 【杂类】Nacos 共享配置文件的最佳实践:以 Redis 配置为例

摘要:Nacos共享配置文件可有效管理微服务中的公共中间件配置。以Redis为例,创建共享配置(如shared-redis-config.yaml),包含完整连接参数并支持环境变量。微服务通过bootstrap.yaml引用该配置,私有配置优先覆盖共享配置。启用refresh:true实现动态更新,建议采用命名规范(shared-前缀)、加密敏感数据、多环境隔离及版本控制,提升MySQL/RabbitMQ等中间件的配置管理效率。

2025-09-07 11:09:59 364

原创 【redis 基础】redis 的常用数据结构及其核心操作

本文系统介绍了Redis五种核心数据结构及其应用场景:1)String用于简单键值和原子计数;2)List实现有序列表和消息队列;3)Set保证元素唯一性,适合标签系统和集合运算;4)ZSet通过score实现有序存储,是排行榜的理想选择;5)Hash适合存储对象属性和购物车等场景。文章详细列出了各数据结构的操作命令,并给出了选择指南:String适合整体存储,List维护顺序,Set保证唯一,ZSet处理排序,Hash管理对象字段。开发者应根据数据特点和操作需求选择合适的数据结构。

2025-09-07 09:46:27 726

原创 【杂类】I/O

I/O操作是程序与外部设备(如硬盘、网络、键盘等)进行数据交换的过程,包括读取(Input)和写入(Output)。由于CPU处理速度远快于I/O设备(如硬盘和网络),I/O操作会显著拖慢程序性能。常见I/O类型包括磁盘读写、网络通信、数据库查询和设备交互。为优化性能,可采用缓冲技术(合并多次小I/O为一次大I/O)和异步I/O(在等待I/O时执行其他任务)。理解I/O是优化数据库、缓存和异步编程的基础。

2025-09-06 17:59:21 701

原创 【杂类】Spring 自动装配原理

摘要:SpringBoot自动配置通过@EnableAutoConfiguration和AutoConfigurationImportSelector实现,2.7版本后使用AutoConfiguration.imports替代spring.factories作为配置清单。自动配置类通过@ConditionalOn条件注解智能筛选,仅当满足依赖、配置等条件时才生效。自定义AutoConfiguration.imports文件可用于封装复杂配置或开发starter,实现依赖引入即自动配置的效果。整个过程如同智能

2025-09-06 11:25:31 1012 1

原创 【杂类】​​HttpServletResponse response​​ 和 返回的响应数据 / 方法的返回值 (内容/产品) 的区别

HttpServletResponse是底层HTTP响应工具,用于直接设置状态码和头信息;返回值(如R对象)是高层业务数据,由框架自动转换为JSON并写入响应体。二者分工明确:response控制协议层面细节,返回值传递业务信息,共同构成完整HTTP响应。这种设计分离关注点,兼顾灵活性与便捷性。

2025-09-06 10:43:27 635

原创 【杂类】JSON:现代Web开发的数据交换基石

JSON是一种轻量级的数据交换格式,采用文本结构,易读易写且支持多语言解析。它基于键值对结构(对象和数组),常用于Web API、配置文件和序列化数据。相比XML,JSON更简洁高效,但不支持注释和复杂数据类型。主流编程语言都提供JSON处理功能,如JavaScript的JSON.parse()/stringify()和Python的json模块。JSON已成为现代开发中不可或缺的数据传输标准。

2025-09-05 12:21:13 625

原创 【RabbitMQ运维】集群搭建

​​RabbitMQ 多节点集群搭建​​ 和 ​​单节点集群搭建​​ 的详细指南

2025-05-24 10:01:36 1371

原创 【RabbitMq】无法打开 RabbitMq 管理插件的问题

安装 RabbitMq 管理插件,无法访问管理界面。

2025-05-14 17:41:11 607

原创 【Redis 进阶】分布式锁

在分布式系统中,线程安全和分布式锁是确保资源访问同步的关键。线程安全问题主要出现在多线程并发访问同一资源时,而分布式系统由于涉及多个进程,传统的单机锁无法满足需求,因此需要引入分布式锁。分布式锁需满足互斥性、容错性和一致性,常见的实现方案包括Redis、MySQL和Zookeeper。以买票服务为例,分布式锁通过Redis的setnx和del命令实现加锁和解锁,避免资源冲突。为防止死锁,引入过期时间和动态续约机制,并通过Lua脚本实现原子操作,确保解锁的准确性和一致性。

2025-05-14 14:06:14 582

原创 【Redis 进阶】缓存

缓存是计算机系统中用于提高数据访问效率的关键技术,通过将常用数据存储在高速存储器中,减少对低速存储设备的访问。缓存的有效性遵循“二八原则”,即少数数据承载了大部分访问请求。Redis作为一种高性能内存数据库,常被用作关系型数据库的缓存层,显著提升数据读取速度并降低数据库负载。Redis的更新策略包括定期生成和实时生成,分别适用于访问模式稳定和变化频繁的场景。使用Redis时需注意缓存穿透、雪崩和击穿等问题,通过空值缓存、布隆过滤器、优化过期策略和服务降级等手段进行防范。

2025-05-13 15:50:11 978

原创 【Redis 进阶】集群

Redis集群是一种分布式存储解决方案,通过多组Master/Slave架构实现数据的高可用性和分布式存储。集群采用数据分片算法,如哈希求余、一致性哈希和哈希槽分区算法,来分配和定位数据。哈希槽分区算法是Redis集群的核心,它将数据划分为16384个槽位,每个节点负责一部分槽位,支持灵活扩展和数据均匀分布。集群的故障转移机制依赖于节点间的心跳包通信,通过主观下线和客观下线判定节点状态,并触发故障迁移。此外,集群支持扩容,通过添加新节点和重新分配槽位来扩展存储能力。

2025-05-13 11:10:27 1048

原创 【Redis 进阶】哨兵模式

Redis哨兵模式是一种高可用性解决方案,旨在解决传统主从复制模式中手动故障转移的局限性。哨兵模式通过引入哨兵节点集合,自动监控主从节点状态,并在主节点故障时自动选举新主节点,通知客户端更新连接信息,从而确保系统持续稳定运行。哨兵节点集合的设计防止了单点故障,并通过多节点共同确认降低误判概率。哨兵模式的工作机制包括监控、自动故障转移和客户端通知,其中故障转移过程涉及主观下线、客观下线判定、Leader选举和新主节点选择。在部署方面,Docker容器化技术为哨兵模式提供了轻量级、高效的部署环境。

2025-05-12 16:19:38 1236

原创 【Redis 进阶】主从复制

Redis在分布式系统中扮演重要角色,主要通过数据存储与共享解决单点故障问题。通过多实例部署和主从模式,Redis提高了系统的可用性和容错能力。主从模式下,主节点负责数据修改,从节点同步数据,确保数据一致性。这种模式支持读写分离和负载均衡,但也存在主节点写入瓶颈和单点故障的风险。此外,Redis的主从复制流程包括全量复制、部分复制和增量复制,根据不同场景选择复制方式,以优化数据同步效率和系统性能。总体而言,Redis的主从模式在提升分布式系统性能和数据安全方面具有显著优势,但也需权衡其复杂性和潜在的延迟问题

2025-05-12 09:07:55 685

原创 【Redis进阶】持久化

MySQL事务具有四大核心特性:原子性、一致性、持久性和隔离性,确保数据库操作的准确性和可靠性。原子性保证事务中的所有操作要么全部成功,要么全部失败;一致性确保事务执行前后数据库处于一致状态;持久性保证事务提交后结果永久保存;隔离性确保并发事务互不干扰。Redis作为内存数据库,需要持久化策略来实现数据持久化,常见策略包括RDB和AOF。RDB通过快照方式定期备份数据,适合灾难恢复,但可能丢失最近数据;AOF通过记录每次操作实现持久化,数据安全性高,但文件较大。两种策略各有优缺点,需根据实际需求选择。

2025-05-10 15:36:23 971

原创 【redis 初阶】linux 上安装 redis

绑定 127.0.0.1 这个ip 就说明 redis 服务器只能由主机的 redis 客户端访问,不能跨主机访问。默认的 redis 的配置文件在 /etc/redis 路径之下,文件名叫做 redis.conf。3. 使用 apt install redis 命令下载 redis 安装包。如果需要跨主机访问,就需要打开 redis 的配置文件修改。默认情况下是用自己主机的 ip 连接 redis 服务器。6. 使用 redis 自带的客户端连接服务器。4. 查看 redis 服务器的进程是否存在。

2025-05-10 09:20:43 346

原创 【Redis】Redis 特性

存储在当前服务器的内存里,请求携带的。可以直接匹配,不会出现会话丢失问题。

2025-04-21 14:22:31 815

原创 【软件测试】性能测试概念篇

性能测试概念

2025-04-17 18:09:48 1016

原创 【软件测试】测试分类

软件测试如同为产品做全方位体检,涵盖功能验证(如购物车操作)、性能评估(万人抢票测试)、安全检查(防SQL注入)等目标。通过白盒测试检查代码逻辑,黑盒测试模拟用户行为,灰盒测试结合两者优势。开发阶段从单元测试(函数验证)到系统测试(全流程回归),最终通过内测(α测试)和公测(β测试)确保质量。自动化测试提升效率,手工测试捕捉用户体验细节,结合地域规范(如多语言适配)和行业标准,为用户交付可靠易用的软件产品。

2025-04-16 15:37:45 1010

原创 【软件测试】Selenium自动化测试指南

本文系统讲解Selenium自动化测试的核心技术,涵盖元素定位(`findElement`与`findElements`)、CSS/XPath选择器实战、多窗口切换、弹窗处理等关键操作。通过百度热搜抓取等案例,详解代码实现与常见错误解决,并对比强制/隐式/显式等待策略的适用场景。同时提供浏览器无头模式、加载策略等优化配置方案,帮助开发者从零构建稳定的自动化测试框架,兼顾效率与代码可维护性。适合测试入门学习和技术团队规范落地参考。

2025-04-16 15:24:09 757

原创 【软件测试】自动化测试:从理论到初步实践

本文系统介绍了自动化测试的核心价值与应用实践,从生活场景延伸至软件开发领域。重点解析了自动化测试的分类体系(UI/接口测试)、金字塔模型理论及实际企业中的"冰淇淋筒"反模式现象,并通过百度搜索案例对比展示手工与自动化测试的实现差异。文章强调自动化测试在提升效率的同时存在维护成本高、灵活性不足等局限,需合理规划测试策略,配套提供了完整的Java+Selenium代码示例及常见问题解决方案。

2025-04-16 09:10:28 966

原创 【软件测试】用例

测试用例的设计以及各种方法

2025-04-14 19:57:48 946

原创 【软件测试】bug 篇

他们幽默地将这只蛾子贴在日志本上,标注"First actual case of bug being found",从此"bug"成为程序缺陷的代名词,"debug"则指排除故障的过程。这个真实的小故事不仅创造了计算机领域的经典术语,更生动展现了工程师们解决问题的智慧——再复杂的技术问题,往往源于最意想不到的细节。当我们进行测试的时候,我们不需要过分关注程序里的代码是如何写的,重点关注的是该程序的。问题标题、问题出现的版本、问题出现的环境、问题出现的步骤、预期结果、实际结果。

2025-04-14 13:49:31 1299

原创 【软件测试】概念篇

本章节系统介绍了软件需求分析(用户需求与软件需求)、常见开发模型(瀑布、螺旋、增量、迭代、敏捷及Scrum框架)及测试模型(V模型、W模型)。重点对比了各模型特点、优缺点及适用场景,强调敏捷模型的轻文档、快速迭代特性,以及Scrum的角色分工与迭代流程。测试模型部分突出早期介入和风险控制。

2025-04-13 20:40:13 935

原创 【python】基础语法 --- 文件

像电影,图片,歌曲,文本之类的数据,都保存在硬盘上。而硬盘上存储数据就是以文件的形式来组织的。

2025-04-13 10:26:43 756

原创 【python】基础语法 --- 字典

字典的底层是哈希表实现的,用来存储键值对。

2025-04-13 09:21:45 264

原创 【python】基础语法 --- 列表和元组

定义:列表和元组都是存储变量的数据结构,类似 java 中的数组区别:列表是可变的,后续还可以对列表进行增删查改操作元组是不可变的,一旦创建后,里面的数据就不可发生改变。

2025-04-13 08:11:51 857

原创 【python】基础语法

中变量的类型可以动态的发生改变,如下图所示而在中,变量 a 一旦初始化,就不能够再被改变,如图,在就会报错一个语言,是否是动态类型,和变量初始化是是否声明无关。只取决于程序运行时,类型是否发生改变。比如python 在定义变量的时候也可以声明类型,但是可以忽略不写。优点 : 增加了代码的灵活性,提高代码效率,在初期开发时效率更高,速度更快。缺点 :同样,灵活代表更容易出错。相比之下,静态语言在多人协作时更有优势,因为动态类型会增加沟通成本来确认变量类型,否则极易出错。

2025-04-12 17:43:41 378

原创 【算法】快速排序

题目描述:算法原理:三指针(快排的基础)思路分析:按照 0, 1, 2 进行排序,也就是将数组划分为三个区间,这道题很像前面写的移动 0 那道题,只不过那个是通过双指针划分两个区间,这道题是进阶了,不过整体思路类似,这里简单描述下过程。定义三个指针,左右指针和遍历的指针,通过遍历的指针分别把 0 和 2 划分到 left 左边区域和 right 右边区域,1 区间就在中间。

2025-04-08 19:00:17 329

原创 【算法】模拟

题目描述:算法原理:模拟思路分析:本道题我的第一想法是创建一个 numRows 行, 有字符串的长度的列的数组,在这个数组中模拟实现 N 字排列的过程,最后再遍历这个数组,取出变换后的字符串。但这个方法需要额外创建空间,本道题可以通过在原字符串的位置上进行模拟操作,进行优化。所有需要画图进行找规律:把不同字符串的下标依次放进这个数组,可以找到规律第一行和最后一行:nums[i], nums[i] + d, nums[i] + 2d ..... 最后的下标不超过字符串长度。

2025-04-08 17:02:20 405

原创 [算法]前缀和

算法——前缀和 .习题练习

2025-04-07 13:34:37 494

原创 [算法]二分查找

算法 —— 二分查找

2025-04-06 20:01:40 612

原创 盛水最多的容器

体积 v = w * h, 当计算区间体积时,将 left 向右移动,计算区间体积。w 一定减小, h 可能减小,可能不变。因为已经有了 4 这个数, 根据木桶效应,区间内的高度最大也只能是4, 所以可以直接抛掉 4 这个数。1.先计算区间内的体积,判断左右指针指向的大小,抛弃小的那一边。解法一 : 暴力枚举:把所有可能的情况都列举出来,取最大值。2.再次计算区间内大小,看是否更新体积。3.直到左右指针相遇,结束。时间复杂度 : O(n)

2025-03-23 09:52:59 162

原创 快乐数 —— 双指针

1.定义快慢双指针,这里的快慢指针是数,bitSum(n)为走一步。不是下标是因为还并没有一个数组,是边走边判断。本题的过程到最后要么进入循环,要么最后变成 1,也可以把 1 看成一直循环。所以本题可以看成判断最后的循环是否为 1,可以联想到判断链表是否由循环。3.直到快指针和满指针相遇,跳出循环,判断指针的值是否为 1。2.快指针走两步, 满指针走一步。做法就是定义快慢双指针。时间复杂度 :O(n)算法描述:快慢双指针。

2025-03-23 09:09:09 224

原创 复写 0 —— 双指针算法 + 模拟

但需要考虑到一个边界问题,当最后cur指向的是非零时,dest复写时越界了,则开始复写时会出错,就需要进行边界处理,将dest前的数置为0,同时cur向前移动一位,dest向前移动两位。不过需要考虑的问题就是从左向右修改时,复写的 0 会覆盖掉后面的数,所以本题需要从后向前修改,就需要找到复写完成后 cur 指向的数,以此数进行复写。注意 : arr[dest--] = arr[cur--] 不要写反了,否则会出错。先通过“异地”(新数组)操作,再优化为“就地”操作。算法原理 :双指针算法。

2025-03-23 07:20:41 213

原创 移动零 —— 数组划分

移动零——力扣.283数组划分. 双指针算法

2025-03-22 17:02:38 269

原创 part 8 - 抽象类和接口

抽象类和接口

2024-11-21 19:16:06 371

原创 part 7 - 继承和多态

继承和多态

2024-11-21 19:05:37 1038

原创 part 6 - 类和对象

java 中类和对象的初步理解

2024-11-20 21:15:48 1252

原创 part 5 - 数组的定义与使用

而引用数据类型创建的变量,一般称为对象的引用,其空间中存储的是对象所在空间的地址。数组元素可以通过索引进行访问。索引从0开始,最后一个元素的索引是数组长度减1。基本数据类型创建的变量,称为基本变量,该变量空间中直接存放的是其所对应的值;增强 for 循环(也称为 for-each 循环)可以更简洁地遍历数组。创建数组时,需要分配内存空间。多维数组是数组的数组。最常见的多维数组是二维数组。类提供了许多有用的静态方法,用于操作数组。可以通过索引修改数组中的元素。循环遍历数组中的每个元素。

2024-11-20 16:33:23 210

空空如也

空空如也

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

TA关注的人

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