自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(59)
  • 问答 (2)
  • 收藏
  • 关注

原创 【java面试day11】redis网络模型

目前的I/O多路复用都是采用的epolll模式实现,它在通知用户进程Socket就绪的同事,会把已经就绪的Socket写入用户空间,不需要挨个遍历Socket来判断是否就绪,提升了性能。在Redis6.0之后,为了提升更好的性能在命令回复,处理器使用了多线程来处理回复事件,在命令请求处理器中,对命令的转换使用了多线程,增加了命令转换速度,但在命令执行的时候仍然是单线程。:Redis是完全基于内存操作的,是C语言编写的;使用多路I/O复用模型,非阻塞的I/O。:Redis是单线程的,为什么还那么快?

2025-08-04 10:35:55 192

原创 【java面试day10】redis集群-分片集群

分片集群主要解决的是海量数据存储的问题,集群中有多个master,每个master保存不同的数据,并且还可以给每个master设置多个slave节点,就可以继续增大集群的高并发能力。客户端可连接集群中的任一节点,请求最终都会被转发到正确的节点。Redis集群引入了哈希槽的概念,共有16384个哈希槽,集群中每个主节点绑定了一定范围的哈希槽范围,key通过CRC16校验后对16384取模来决定放置在那个槽,通过槽找到对应的节点进行存储。:Redis分片集群中数据是怎么存储和读取的?

2025-07-31 11:40:35 273

原创 【java面试day9】redis集群-哨兵模式

当主节点(Master)发生故障时,Sentinel 会自动将某个从节点(Slave)提升为新的主节点,并将其他从节点指向它,同时将最新的主节点信息推送给客户端,确保服务不中断。:为防止 Redis 脑裂,我们设置了主节点的写入保护机制:要求至少有一个从节点处于连接状态才允许写操作(min-slaves-to-write 1),同时限制主从之间的复制延迟不能超过设定的阈值(如 min-slaves-max-lag 3)。哨兵负责监控主从节点状态,当主节点发生故障时可自动完成主从切换,保障系统稳定运行。

2025-07-30 09:05:55 357

原创 【java面试day8】redis集群-主从复制

主从服务分为两个阶段,一个是全量同步,一个是增量同步。从节点请求同步数据,携带replication id和offset,若replication id与主节点replication id不一致,则表明这是第一次与主节点进行连接,此时会使用全量同步,主节点会将自身的replication id和offset发送给从节点,然主从节点信息保持一致,同时主节点会执行bgsave,生成rdb文件后,发送给从节点执行,从节点会先把自己的数据清空,然后执行主节点发送过来的rdb文件,这样就保持了一致。

2025-07-29 09:39:24 385

原创 【java面试day7】redis分布式锁

Redisson 的普通分布式锁不能完全解决主从一致性问题,因为 Redis 的主从复制是异步的,可能在主节点加锁成功但还未同步到从节点时主节点就宕机,导致锁丢失。在Redisson中会自动启用“看门狗机制”,每隔特定的时间会检查当前线程是否还持有锁,如果是,则会自动续期,防止业务尚未完成时锁被自动释放。:是可重入的,同一个线程在持有锁的情况下可以重复加锁,内部会通过线程标识和锁重入计数来管理,确保只有获取锁的线程才能释放,避免误删其他线程的锁。:redisson实现的分布式锁是可重入的吗?

2025-07-28 17:24:55 294

原创 【java面试day6】redis缓存-数据淘汰策略

数据库有1000万数据 ,Redis只能缓存20w数据, 如何保证Redis中的数据都是热点数据?:使用allkeys-lru(挑选最近最少使用的数据淘汰)淘汰策略,留下来的都是经常访问的热点数据。:主要看数据淘汰策略是什么?如果是默认的配置( noeviction ),会直接报错。:Redis的内存用完了会发生什么?

2025-07-17 10:42:45 168

原创 【java面试day5】redis缓存-数据过期策略

在 Redis 中有两种数据过期策略,一种惰性删除,这种方式是在访问 key 时才检查是否过期,过期就删除,这种方式对 CPU 友好,但可能造成过期键长期占用内存。第二种就是定期删除,这种方式是每秒随机抽查部分键清理过期数据释放内存,但频率和范围有限。实际使用中是两者配合使用,既节省资源,又防止过期数据堆积,兼顾性能和内存管理。:Redis的数据过期策略有哪些?

2025-07-16 09:08:02 154

原创 【java面试day4】redis缓存-数据持久化

有两种机制,一种是RDB,RDB会在指定的时间间隔内将内存中的数据生成快照,保存到磁盘(.rdb 文件)。当 Redis 重启时,会通过读取快照文件恢复数据。第二种是AOF,AOF 会将每一次写操作(如 set、del 等)记录成日志,追加写入到文件(.aof 文件)中。Redis 重启时会重新执行这些操作日志来恢复数据。:redis作为缓存,数据的持久化是怎么做的?

2025-07-10 14:11:39 225

原创 【java面试day3】redis缓存-双写一致性

对于强一致性的数据如库存等,可以使用 Redisson 提供的分布式读写锁来控制对缓存和数据库的并发访问,确保在更新数据时,先加锁,然后同时更新 MySQL 和 Redis,最后释放锁,从而实现缓存与数据库之间的强一致性。而对于允许短时间延迟一致的业务场景如生产数据等,可以采用异步通知的方式,应用在更新数据库后,通过消息队列(如 RocketMQ)发送变更通知,由消费者异步更新或删除 Redis 缓存;:redis作为缓存,mysql的数据是如何与redis进行同步的呢?

2025-07-09 09:32:43 241

原创 【java面试day2】redis缓存-击穿+雪崩

缓存击穿是指某个热点Key在缓存刚好失效时,恰好有大量并发请求同时访问该Key,由于缓存失效,请求会直接打到数据库,这些并发的请求可能会瞬间将数据库压垮。:缓存雪崩是指在同一时间大量缓存 Key 同时失效,或者Redis 服务器整体不可用(如宕机),导致大量请求绕过缓存直达数据库,从而引发数据库压力激增,甚至造成系统崩溃的现象。解决方案主要是可以将缓存失效时间分散开,比如可以在原有的失效时间基础上增加一个随机值,比如1-5分钟随机,这样每一个缓存的过期时间的重复率就会降低,就很难引发集体失效的事件。

2025-07-08 09:36:40 239

原创 【java面试day1】redis缓存-穿透

在 redis 缓存预热时,会先把缓存中的有效数据通过多个哈希函数映射到布隆过滤器的位数组上,将对应的索引位置置为 1。若索引位置都为1,则说明数据“可能存在”,有一定误判的可能,但只要有一个索引位置是 0,就可以确定该数据一定不存在,直接返回,避免无效请求打到数据库。:用户请求的数据缓存里没有,数据库里也找不到。解决方式的话有两种,一种是缓存空数据,就是数据库查不到结果时,也把空值缓存起来,不过这样会占用比较多的内存,因此我们一般选择另一种方式即布隆过滤器,这种方式可以有效避免缓存穿透且内存占用较少。

2025-07-07 11:49:34 414

原创 【redis相关】

Redis(Remote Dictionary Server)是一个开源的、基于内存的、支持多种数据结构的 Key-Value 存储系统。它可以用作数据库、缓存、消息队列等。🚀 速度快,是 Redis 最大的特点!因为它将所有数据存储在内存中。

2025-07-07 11:47:04 286

原创 【web 安全】从 HTTP 无状态到现代身份验证机制

早期session+cookie无法解决分布式服务的原因:举例如下:用户请求 → 随机到 A 服务器 或 B 服务器 或 C 服务器(负载均衡)用户第一次登录 → 分配到 A 服务器 → A 创建了一个 Session用户第二次请求 → 分配到 B 服务器 → B 根本没有 A 上那个 Session!结果:用户虽然登录了,但在 B 看来是“未登录”,因为找不到 Session。优雅解决:Token 模式因为JWT 是“无状态”的,后端服务使用同一套验证机制。

2025-06-19 09:54:37 846

原创 【web 安全】 认证、授权、鉴权

鉴权是“认证+授权”的检查过程,特别体现在某个请求能否通过。授权就是“确定你能做什么”。认证就是“确认用户是谁”。

2025-06-19 09:52:15 195

原创 【vue3+element-plus+echats 实现随机转盘抽奖】

/ 获取初始偏移角度及初始索引。// 奖项配置(可自定义)// 计算目标旋转角度。

2025-06-04 10:27:27 291

原创 【vue3】vue3项目中eslint+prettier 统一代码风格

发现潜在错误(如变量未定义、函数重复定义等)统一代码风格(比如强制使用单引号、缩进为 2 个空格等)提高代码质量(比如提示不要使用 ==,而应该用 ===)ESLint 会根据你配置的规则(或.eslintrc文件)扫描代码,然后告诉你哪里不符合这些规则。"rules": {"semi": ["error", "always"], // 强制加分号"quotes": ["error", "single"] // 强制使用单引号应该用单引号:“hello” → ‘hello’

2025-05-26 13:19:17 1412

原创 【vue3】vite构建vue3新项目

Vite 是新一代前端构建工具,速度极快,是创建 Vue 3 项目的推荐方式。命令行会提示选择框架:选择vue+ts(TypeScript)①:Select a framework(选择框架)②Select a variant(选择变体/版本)(该版本是安全版本,部分版本如果开放外网的话有漏洞,好像是因为vite版本过高,将vite版本从。)即可正常启动,默认运行在。

2025-05-22 09:37:37 628

原创 【Spring Boot后端组件】SpringMVC介绍及使用

SpringMVC 是 Spring 框架中的一个模块,用于构建基于 Web 的应用程序。它是一个实现了 MVC 设计模式 的 Web 框架,旨在帮助开发者更清晰地分离表示层(View)、控制层(Controller)和业务逻辑(Model)。SpringMVC 是 Spring Framework 的一部分,可以与 Spring 的其他模块(如 Spring Boot、Spring Security、Spring Data)无缝整合。注解说明标识一个类是控制器组件等价于,用于返回 JSON 数据。

2025-05-19 10:37:28 1158

原创 【Spring Boot后端组件】mybatis-plus使用

pom.xml文件二、添加相关配置项application.yaml三、功能详解1.自增主键表单说明:在数据库软件如navicat中直接插入数据时,数据呈现主键自增情况,但使用mybatis-plus直接插入数据则不会。(1)直接为实体id字段添加注解,加上此注解后插入的数据就可以实现主键自增了。实体类如下:(2)全局配置,在配置文件中加入以下配置实体类如下:表单说明:deleted字段默认设为false即0,删除数据时值需要将deleted字段置为1即可,不需要真正的删除数据。my

2025-05-16 10:36:17 1469

原创 【Spring Boot 注解】@SpringBootApplication

是 Spring Boot 提供的一个注解,通常用于启动类(主类)上,它是三个注解的组合:1.表示该类是一个配置类,等价于 XML 配置文件。2.告诉 Spring Boot 启动自动配置功能,根据类路径下的依赖、配置等自动配置 Spring 应用。3.启动组件扫描,默认扫描当前类所在包及其子包,将标注了如 @Component、@Service、@Repository、@Controller 等注解的类注入 Spring 容器。

2025-05-06 14:34:34 1493

原创 【Spring Boot 注解】@Configuration与@AutoConfiguration

需要在 resource/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports 文件中声明此类,Spring Boot 才会自动扫描并导入,不需要添加包路径到。这是最常用的 Spring 注解之一,表示当前类是一个 配置类,可以定义 @Bean 方法,等效于传统的 XML 配置文件。这是 Spring Boot 提供的注解,用于自动配置类。扫描范围内,那么该Bean就会被加载。

2025-05-06 14:33:45 790

原创 【Spring Boot 注解】@ConfigurationProperties

是 Spring Boot 提供的一个强大注解,用于将外部配置(如 application.properties 或 application.yml 文件中的属性)绑定到 Java 对象上。

2025-04-30 10:49:39 984

原创 【Maven】子POM与父POM

在 Maven 项目结构中,子 POM(子模块)可以继承父 POM 的很多配置。合理使用继承机制可以大大减少重复配置,让项目更清晰、易维护。

2025-04-28 09:17:42 637

原创 【Spring Boot】Maven中引入 springboot 相关依赖的方式

如果因为公司项目有自定义父 POM,又想用 Spring Boot 的统一版本管理,可以在中导入:</</</</</</</</然后添加依赖时,同样无需再写<version>。

2025-04-27 11:47:54 1139

原创 【Maven】特殊pom.xml配置文件 - BOM

仅用于集中管理项目依赖版本在 Maven 中,BOM 用于定义一个项目的依赖版本的集合,通常用于管理一组共享的依赖版本。这意味着你可以将一组依赖版本集中管理,避免在每个项目中单独定义每个依赖的版本,从而确保多个模块之间的版本一致性。

2025-04-23 14:28:03 517

原创 【Maven】核心配置文件 pom.xml

在 Maven 中,pom.xml 是项目的。通过将多个模块的配置抽象到一个父 POM中,子模块可以继承这些通用配置,只关注自己的差异部分,从而达到统一、解耦、协同构建的目的。子 POM 并不是“从属”关系,而是“继承 + 聚合”的组合。

2025-04-23 10:22:22 1522

原创 【Maven】配置文件 application.yaml

Spring Boot 默认会在 classpath 路径(通常是。

2025-04-22 10:02:16 783

原创 【Maven】项目管理工具

【代码】【Spring Boot】groupid与artifactId。

2025-04-21 13:51:18 294

原创 【java 13天进阶Day12】XML和Dom4j,装饰模式,工厂模式,commons-io工具包,Base64

commons-io是apache开源基金组织提供的一组有关IO操作的类库,可以挺提高IO功能开发的效率。commons-io工具包提供了很多有关io操作的类,见下表:包功能描述有关Streams、Readers、Writers、Files的工具类输入流相关的实现类,包含Reader和InputStream输出流相关的实现类,包含Writer和OutputStream步骤:下载commons-io相关jar包;

2025-04-18 13:52:08 721

原创 【java 13天进阶Day11】JUnit单元测试、反射、注解、动态代理

修饰符 @interface 注解名{//注解属性}@Book@MyTest@Book@MyTest@Book@MyTest@MyTest@Book自定义注解用@interface关键字。使用注解的格式:@注解名称。注解默认可以标记很多地方。需求:定义若干个方法,只要加了MyTest注解,就可以被自动触发执行。(1)定义一个自定义注解MyTest.– 只能注解方法。– 存活范围一直都在。

2025-04-18 13:48:23 911

原创 【java 13天进阶Day10】Socket网络编程、NIO

一个该类的对象就代表一个IP地址对象。InetAddress类成员方法:构造器static InetAddress getLocalHost():获得本地主机IP地址对象。static InetAddress getByName(String host):根据IP地址或域名获得对应的IP地址对象。String getHostName():获得主机名。String getHostAddress():获得IP地址字符串。

2025-04-18 13:44:01 558

原创 【java 13天进阶Day09】序列化流,打印流,属性集

public String getProperty(String key) :使用此属性列表中指定的键搜索属性值。– public String getProperty(String key) :使用此属性列表中指定的键搜索属性值。Properties核心作用:Properties代表的是一个属性文件,可以把键值对的数据存入到一个属性文件中去。小结:属性集对象Properties实际上是一个Map集合,可以实现把键值对数据保存到属性文件中去!(保存数据到属性文件)也就是一个键值对集合。

2025-04-18 13:41:10 610

原创 【java 13天进阶Day08】File类 ,字节流,字符流, 缓冲流、转换流

字节输入流字节输出流字符输入流字符输出流ReaderWriter(抽象类)FileReaderFileWriter(实现类,低级流)BufferedWriter(实现类,缓冲流)缓冲流分为四类:(1)BufferedInputStream:字节缓冲输入流,可以提高字节输入流读数据的性能。(2)BufferedOutStream: 字节缓冲输出流,可以提高字节输出流写数据的性能。(3)BufferedReader: 字符缓冲输入流,可以提高字符输入流读数据的性能。

2025-04-18 13:39:26 568

原创 【java 13天进阶Day07】异常,线程的创建方式,线程安全,线程同步,线程状态,volatile关键字、原子性、并发包、死锁、线程池、方法引用, Stream流

概述:java从JDK1.5开始提供了java.util.concurrent.atomic包(简称Atomic包),这个包中的原子操作类提供了一种用法简单,性能高效,线程安全地更新一个变量的方式,CAS机制(compare and swap)。Error : 错误的意思,严重错误Error,无法通过处理的错误,一旦出现,程序员无能为力了,只能重启系统,优化项目。比如内存奔溃,JVM本身的奔溃。Exception:才是异常类,它才是开发中代码在编译或者执行的过程中可能出现的错误,它是需要提前处理的。

2025-04-18 13:26:40 792

原创 【java 13天进阶Day06】Map集合,HashMapTreeMap,斗地主、图书管理系统,排序算法

Map集合的完整格式:{key1=value1 , key2=value2 , key3=value3 , …注意:集合和泛型都只能支持引用数据类型,集合完全可以称为是对象容器,存储都是对象。“键找值**”**的方式遍历:先获取Map集合全部的键,再根据遍历键找值。Map集合是另一个集合体系,是一种双列集合,每个元素包含两个值。的格式:key=value(键值对元素)。Map集合的键和值都可以存储自定义类型。Map集合的常用API(重点中的重点)Map集合也被称为“键值对集合”。Map集合的遍历方式。

2025-04-18 13:14:30 805

原创 【java 13天进阶Day05】数据结构,List,Set ,TreeSet集合,Collections工具类

a.直接为对象的类实现比较器规则接口Comparable,重写比较方法(拓展方式)。ps:b站课程《黑马程序员Java13天进阶》根据官方笔记结合自身情况整理的笔记。b.直接为集合设置比较器Comparator对象,重写比较方法。

2025-04-18 13:11:21 854

原创 【java 13天进阶Day04】常用API、正则表达式,泛型、Collection集合API

1、数组既可以存储基本数据类型,又可以存储引用数据类型(基本数据类型存储的是值, 引用数据类型存储的是地址值),集合只能存储引用数据类型(对象), 集合中也可以存储基本数据类型,但是在存储的时候会自动装箱(JDK1.5新特性)变成对象。因此,Java内部给我们提供了集合类,能存储任意对象,长度是可以改变的,随着元素的增加而增加,随着元素的减少而减少。6、集合以接口和类的形式存在,具有封装,继承和多态等类的特性,通过简单的方法和属性调用即可实现各种复杂的操作,大大提高软件的开发效率。

2025-04-18 11:47:41 1085

原创 【java 13天进阶Day03】多态、包、权限修饰符、内部类,Object类,Date类

权限修饰符:有四种(private -> 缺省 ->protected - > public),可以修饰成员变量,修饰方法,修饰构造器,内部类,不同修饰符修饰的成员能够被访问的权限将受到限制!ps:b站课程《黑马程序员Java13天进阶》根据官方笔记结合自身情况整理的笔记。定义在一个类里面的类就是内部类。

2025-04-18 11:44:46 657

原创 【java 13天进阶Day02】抽象类、接口、代码块,final、单例、枚举

ps:在Spring Boot中,通常推荐使用接口进行依赖注入,而不是具体的实现类。开发中有很多类的对象我们只需要一个,例如虚拟机对象,任务管理器对象,对象越多约占内存,有些时候只需要一个对象就可以实现业务,单例可以节约内存,提高性能。接口体现的是规范思想,实现接口的子类必须重写接口的全部抽象方法。如果实现了多个接口,多个接口中存在同名的静态方法并不会冲突。当一个类实现多个接口时,多个接口中存在同名的默认方法。接口与接口的多继承(类与类是单继承、类与接口多实现),类与类是继承关系,类与接口是实现关系。

2025-04-18 11:40:56 963

原创 【java 13天进阶Day01】基础知识回顾-静态、继承、引用类型使用

this.子类成员变量。this.子类成员方法。this(…):可以根据参数匹配访问本类其他构造器。super代表了父类对象的引用(继承中指代了父类对象空间)super.父类成员变量。super.父类的成员方法。super(…):可以根据参数匹配访问父类的构造器。注意this(…)和super(…)必须放在构造器的第一行,否则报错!所以this(…)和super(…)不能同时出现在构造器中!如果在一个类的构造器中没有明确使用super()或this()

2025-04-18 11:27:02 661

mysql自用资源文件

mysql自用资源文件

2025-07-20

若依项目框架-工具组件

若依项目框架-工具组件

2025-06-04

idea软件包及使用说明

idea软件包及使用说明

2023-12-20

Maven软件安装及配置方式

Maven软件安装及配置方式

2023-12-20

一些辅助开发工具,比如apiFox请求工具等

一些辅助开发工具,比如apiFox请求工具等

2023-12-20

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

TA关注的人

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