- 博客(67)
- 问答 (2)
- 收藏
- 关注
原创 【java面试day18】mysql-索引失效情况
索引失效的情况主要有几类。常见的有:违反最左前缀法则,比如复合索引中间列被跳过;范围查询之后的列无法继续用索引;在索引列上做运算或者函数操作;数据类型不一致,比如字符串没加引号导致隐式转换;还有模糊查询如果是前置 %,索引就会失效。另外,像 OR 条件如果两边字段不都带索引,或者 NOT、!=、IS NOT NULL 这类非等值查询,也容易失效。最后,索引区分度太低时,即使有索引,优化器也可能选择全表扫描。:什么情况下索引会失效?
2025-08-22 10:01:57
171
原创 【java面试day17】mysql-索引创建原则
在数据库中创建索引时,首先会针对数据量较大且查询频繁的表建立索引,以提高查询效率。索引一般建立在常用作查询条件(WHERE)、排序(ORDER BY)或分组(GROUP BY)的列上,同时优先选择区分度高的列,必要时建立唯一索引。在多列查询场景下,尽量使用联合索引,并遵循最左前缀原则,以便实现覆盖索引,提高查询性能。同时需要控制索引数量,避免因索引过多影响插入、更新和删除操作的性能,并尽量对索引列设置NOT NULL约束以提升效率。:索引创建原则有那些?
2025-08-21 11:37:35
93
原创 【java面试day16】mysql-覆盖索引
如果直接使用LIMIT进行查询会扫描大量的数据,效率很低。可先用索引分页查询主键 ID,再根据 ID 查询完整数据;如果索引包含所需列,可直接通过索引返回,避免回表,性能更高。:如果一个查询所需要的列全部都能从索引中直接获取,而不触发回表查询,那么这个索引就称为覆盖索引。:MYSQL超大分页怎么处理?
2025-08-20 17:13:39
253
原创 Java Web
全球局域网,也称万维网(www World Wide Web),能够通过浏览器访问的网站。②服务端程序-业务逻辑处理。③数据库-数据存储和管理。①前端程序-界面展示。
2025-08-20 15:40:16
191
原创 【java面试day15】mysql-聚簇索引
聚簇索引主要是指数据与索引放到一块,B+树的叶子节点保存了整行数据,有且只有一个,一般情况下是主键作为聚簇索引的。非聚簇索引指的是数据与索引分开存储,B+树的叶子节点保存对应的主键,可以有多个,一般我们自己定义的索引都是非聚簇索引。:回表查询是指使用非聚簇索引查询时,由于索引本身不包含完整的行记录,只能得到主键值,所以还需要再根据主键去聚簇索引中取出整行数据的过程。:什么是聚簇索引,什么是非聚簇索引?
2025-08-19 09:20:43
298
原创 【java面试day14】mysql-索引
通过在表的某些列上建立索引,MySQL 可以更快地定位数据,减少全表扫描,从而显著降低磁盘 I/O 开销。同时,索引还能对索引列中的数据进行有序存储,这样不仅能加快排序和分组操作的速度,还能降低 CPU 的计算成本。:B+树所有数据都存放在叶子节点,且叶子节点通过链表相连,既保证了查询路径的一致性,又能高效支持范围查询和顺序访问,而B树的数据分散在不同层级节点上,既导致查询路径不稳定,也不利于范围查询,因此MySQL更倾向于使用B+树作为索引结构。:B树和B+树的区别是什么呢?
2025-08-18 10:48:13
152
原创 【java面试day13】mysql-慢查询分析
当一条 SQL 执行较慢时,可以先使用 EXPLAIN 查看执行计划,通过 key 和 key_len 判断是否命中了索引及索引利用程度,若索引已存在仍慢,则检查是否存在索引失效的情况;再查看 type 字段判断访问方式,尽量让其处于 const、eq_ref、ref 等高效级别,避免出现全索引扫描(index)或全表扫描(ALL);最后结合 Extra 字段分析是否存在回表,如果出现了可以尝试添加索引或修改返回字段来修复。:这条sql语句执行很慢,你如何分析呢?
2025-08-14 09:05:05
153
原创 【java面试day12】mysql-定位慢查询
SkyWalking 还能展示 SQL 的具体执行时间,因此我们可以直接定位到是哪个 SQL 出现了性能问题。对于没有部署类似监控系统的情况,其实 MySQL 也提供了 慢查询日志 功能。只需在 MySQL 配置文件中开启该功能,并设置 SQL 执行时间阈值(超过该时间的 SQL 会被记录到日志文件中),就能帮助排查和优化慢 SQL。由于系统部署了运维监控工具 SkyWalking,我们能够通过报表快速定位哪些接口较慢,并进一步分析接口中哪个环节耗时较多。:Mysql中,如何定位慢查询?
2025-08-13 14:28:02
245
原创 Mysql相关
慢查询日志记录了所有执行时间超过指定参数(long_query_time,单位:秒,默认10秒)的所有SQL语句的日志。配置完毕之后,通过以下指令重新启动MySQL服务器进行测试,查看慢日志文件中记录的信息。**慢查询:**页面加载过慢、接口压测响应时间过长(超过1s)2、MySQL自带慢日志。
2025-08-13 14:15:54
230
原创 【java面试day11】redis网络模型
目前的I/O多路复用都是采用的epolll模式实现,它在通知用户进程Socket就绪的同事,会把已经就绪的Socket写入用户空间,不需要挨个遍历Socket来判断是否就绪,提升了性能。在Redis6.0之后,为了提升更好的性能在命令回复,处理器使用了多线程来处理回复事件,在命令请求处理器中,对命令的转换使用了多线程,增加了命令转换速度,但在命令执行的时候仍然是单线程。:Redis是完全基于内存操作的,是C语言编写的;使用多路I/O复用模型,非阻塞的I/O。:Redis是单线程的,为什么还那么快?
2025-08-04 10:35:55
197
原创 【java面试day10】redis集群-分片集群
分片集群主要解决的是海量数据存储的问题,集群中有多个master,每个master保存不同的数据,并且还可以给每个master设置多个slave节点,就可以继续增大集群的高并发能力。客户端可连接集群中的任一节点,请求最终都会被转发到正确的节点。Redis集群引入了哈希槽的概念,共有16384个哈希槽,集群中每个主节点绑定了一定范围的哈希槽范围,key通过CRC16校验后对16384取模来决定放置在那个槽,通过槽找到对应的节点进行存储。:Redis分片集群中数据是怎么存储和读取的?
2025-07-31 11:40:35
277
原创 【java面试day9】redis集群-哨兵模式
当主节点(Master)发生故障时,Sentinel 会自动将某个从节点(Slave)提升为新的主节点,并将其他从节点指向它,同时将最新的主节点信息推送给客户端,确保服务不中断。:为防止 Redis 脑裂,我们设置了主节点的写入保护机制:要求至少有一个从节点处于连接状态才允许写操作(min-slaves-to-write 1),同时限制主从之间的复制延迟不能超过设定的阈值(如 min-slaves-max-lag 3)。哨兵负责监控主从节点状态,当主节点发生故障时可自动完成主从切换,保障系统稳定运行。
2025-07-30 09:05:55
361
原创 【java面试day8】redis集群-主从复制
主从服务分为两个阶段,一个是全量同步,一个是增量同步。从节点请求同步数据,携带replication id和offset,若replication id与主节点replication id不一致,则表明这是第一次与主节点进行连接,此时会使用全量同步,主节点会将自身的replication id和offset发送给从节点,然主从节点信息保持一致,同时主节点会执行bgsave,生成rdb文件后,发送给从节点执行,从节点会先把自己的数据清空,然后执行主节点发送过来的rdb文件,这样就保持了一致。
2025-07-29 09:39:24
388
原创 【java面试day7】redis分布式锁
Redisson 的普通分布式锁不能完全解决主从一致性问题,因为 Redis 的主从复制是异步的,可能在主节点加锁成功但还未同步到从节点时主节点就宕机,导致锁丢失。在Redisson中会自动启用“看门狗机制”,每隔特定的时间会检查当前线程是否还持有锁,如果是,则会自动续期,防止业务尚未完成时锁被自动释放。:是可重入的,同一个线程在持有锁的情况下可以重复加锁,内部会通过线程标识和锁重入计数来管理,确保只有获取锁的线程才能释放,避免误删其他线程的锁。:redisson实现的分布式锁是可重入的吗?
2025-07-28 17:24:55
297
原创 【java面试day6】redis缓存-数据淘汰策略
数据库有1000万数据 ,Redis只能缓存20w数据, 如何保证Redis中的数据都是热点数据?:使用allkeys-lru(挑选最近最少使用的数据淘汰)淘汰策略,留下来的都是经常访问的热点数据。:主要看数据淘汰策略是什么?如果是默认的配置( noeviction ),会直接报错。:Redis的内存用完了会发生什么?
2025-07-17 10:42:45
172
原创 【java面试day5】redis缓存-数据过期策略
在 Redis 中有两种数据过期策略,一种惰性删除,这种方式是在访问 key 时才检查是否过期,过期就删除,这种方式对 CPU 友好,但可能造成过期键长期占用内存。第二种就是定期删除,这种方式是每秒随机抽查部分键清理过期数据释放内存,但频率和范围有限。实际使用中是两者配合使用,既节省资源,又防止过期数据堆积,兼顾性能和内存管理。:Redis的数据过期策略有哪些?
2025-07-16 09:08:02
159
原创 【java面试day4】redis缓存-数据持久化
有两种机制,一种是RDB,RDB会在指定的时间间隔内将内存中的数据生成快照,保存到磁盘(.rdb 文件)。当 Redis 重启时,会通过读取快照文件恢复数据。第二种是AOF,AOF 会将每一次写操作(如 set、del 等)记录成日志,追加写入到文件(.aof 文件)中。Redis 重启时会重新执行这些操作日志来恢复数据。:redis作为缓存,数据的持久化是怎么做的?
2025-07-10 14:11:39
228
原创 【java面试day3】redis缓存-双写一致性
对于强一致性的数据如库存等,可以使用 Redisson 提供的分布式读写锁来控制对缓存和数据库的并发访问,确保在更新数据时,先加锁,然后同时更新 MySQL 和 Redis,最后释放锁,从而实现缓存与数据库之间的强一致性。而对于允许短时间延迟一致的业务场景如生产数据等,可以采用异步通知的方式,应用在更新数据库后,通过消息队列(如 RocketMQ)发送变更通知,由消费者异步更新或删除 Redis 缓存;:redis作为缓存,mysql的数据是如何与redis进行同步的呢?
2025-07-09 09:32:43
246
原创 【java面试day2】redis缓存-击穿+雪崩
缓存击穿是指某个热点Key在缓存刚好失效时,恰好有大量并发请求同时访问该Key,由于缓存失效,请求会直接打到数据库,这些并发的请求可能会瞬间将数据库压垮。:缓存雪崩是指在同一时间大量缓存 Key 同时失效,或者Redis 服务器整体不可用(如宕机),导致大量请求绕过缓存直达数据库,从而引发数据库压力激增,甚至造成系统崩溃的现象。解决方案主要是可以将缓存失效时间分散开,比如可以在原有的失效时间基础上增加一个随机值,比如1-5分钟随机,这样每一个缓存的过期时间的重复率就会降低,就很难引发集体失效的事件。
2025-07-08 09:36:40
244
原创 【java面试day1】redis缓存-穿透
在 redis 缓存预热时,会先把缓存中的有效数据通过多个哈希函数映射到布隆过滤器的位数组上,将对应的索引位置置为 1。若索引位置都为1,则说明数据“可能存在”,有一定误判的可能,但只要有一个索引位置是 0,就可以确定该数据一定不存在,直接返回,避免无效请求打到数据库。:用户请求的数据缓存里没有,数据库里也找不到。解决方式的话有两种,一种是缓存空数据,就是数据库查不到结果时,也把空值缓存起来,不过这样会占用比较多的内存,因此我们一般选择另一种方式即布隆过滤器,这种方式可以有效避免缓存穿透且内存占用较少。
2025-07-07 11:49:34
415
原创 【redis相关】
Redis(Remote Dictionary Server)是一个开源的、基于内存的、支持多种数据结构的 Key-Value 存储系统。它可以用作数据库、缓存、消息队列等。🚀 速度快,是 Redis 最大的特点!因为它将所有数据存储在内存中。
2025-07-07 11:47:04
291
原创 【web 安全】从 HTTP 无状态到现代身份验证机制
早期session+cookie无法解决分布式服务的原因:举例如下:用户请求 → 随机到 A 服务器 或 B 服务器 或 C 服务器(负载均衡)用户第一次登录 → 分配到 A 服务器 → A 创建了一个 Session用户第二次请求 → 分配到 B 服务器 → B 根本没有 A 上那个 Session!结果:用户虽然登录了,但在 B 看来是“未登录”,因为找不到 Session。优雅解决:Token 模式因为JWT 是“无状态”的,后端服务使用同一套验证机制。
2025-06-19 09:54:37
867
原创 【web 安全】 认证、授权、鉴权
鉴权是“认证+授权”的检查过程,特别体现在某个请求能否通过。授权就是“确定你能做什么”。认证就是“确认用户是谁”。
2025-06-19 09:52:15
202
原创 【vue3+element-plus+echats 实现随机转盘抽奖】
/ 获取初始偏移角度及初始索引。// 奖项配置(可自定义)// 计算目标旋转角度。
2025-06-04 10:27:27
293
原创 【vue3】vue3项目中eslint+prettier 统一代码风格
发现潜在错误(如变量未定义、函数重复定义等)统一代码风格(比如强制使用单引号、缩进为 2 个空格等)提高代码质量(比如提示不要使用 ==,而应该用 ===)ESLint 会根据你配置的规则(或.eslintrc文件)扫描代码,然后告诉你哪里不符合这些规则。"rules": {"semi": ["error", "always"], // 强制加分号"quotes": ["error", "single"] // 强制使用单引号应该用单引号:“hello” → ‘hello’
2025-05-26 13:19:17
1464
原创 【vue3】vite构建vue3新项目
Vite 是新一代前端构建工具,速度极快,是创建 Vue 3 项目的推荐方式。命令行会提示选择框架:选择vue+ts(TypeScript)①:Select a framework(选择框架)②Select a variant(选择变体/版本)(该版本是安全版本,部分版本如果开放外网的话有漏洞,好像是因为vite版本过高,将vite版本从。)即可正常启动,默认运行在。
2025-05-22 09:37:37
637
原创 【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
1164
原创 【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
1478
原创 【Spring Boot 注解】@SpringBootApplication
是 Spring Boot 提供的一个注解,通常用于启动类(主类)上,它是三个注解的组合:1.表示该类是一个配置类,等价于 XML 配置文件。2.告诉 Spring Boot 启动自动配置功能,根据类路径下的依赖、配置等自动配置 Spring 应用。3.启动组件扫描,默认扫描当前类所在包及其子包,将标注了如 @Component、@Service、@Repository、@Controller 等注解的类注入 Spring 容器。
2025-05-06 14:34:34
1503
原创 【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
796
原创 【Spring Boot 注解】@ConfigurationProperties
是 Spring Boot 提供的一个强大注解,用于将外部配置(如 application.properties 或 application.yml 文件中的属性)绑定到 Java 对象上。
2025-04-30 10:49:39
995
原创 【Maven】子POM与父POM
在 Maven 项目结构中,子 POM(子模块)可以继承父 POM 的很多配置。合理使用继承机制可以大大减少重复配置,让项目更清晰、易维护。
2025-04-28 09:17:42
653
原创 【Spring Boot】Maven中引入 springboot 相关依赖的方式
如果因为公司项目有自定义父 POM,又想用 Spring Boot 的统一版本管理,可以在中导入:</</</</</</</</然后添加依赖时,同样无需再写<version>。
2025-04-27 11:47:54
1170
原创 【Maven】特殊pom.xml配置文件 - BOM
仅用于集中管理项目依赖版本在 Maven 中,BOM 用于定义一个项目的依赖版本的集合,通常用于管理一组共享的依赖版本。这意味着你可以将一组依赖版本集中管理,避免在每个项目中单独定义每个依赖的版本,从而确保多个模块之间的版本一致性。
2025-04-23 14:28:03
526
原创 【Maven】核心配置文件 pom.xml
在 Maven 中,pom.xml 是项目的。通过将多个模块的配置抽象到一个父 POM中,子模块可以继承这些通用配置,只关注自己的差异部分,从而达到统一、解耦、协同构建的目的。子 POM 并不是“从属”关系,而是“继承 + 聚合”的组合。
2025-04-23 10:22:22
1565
原创 【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
724
原创 【java 13天进阶Day11】JUnit单元测试、反射、注解、动态代理
修饰符 @interface 注解名{//注解属性}@Book@MyTest@Book@MyTest@Book@MyTest@MyTest@Book自定义注解用@interface关键字。使用注解的格式:@注解名称。注解默认可以标记很多地方。需求:定义若干个方法,只要加了MyTest注解,就可以被自动触发执行。(1)定义一个自定义注解MyTest.– 只能注解方法。– 存活范围一直都在。
2025-04-18 13:48:23
916
原创 【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
563
html页面显示不全,会被电脑下方任务栏遮挡,全屏才可看到完整页面
2023-08-25
el-time-picker为内置确认按钮绑定事件
2023-07-24
echart boundarygap
2023-03-02
pyqt中combox以及按钮触发事件
2022-05-08
TA创建的收藏夹 TA关注的收藏夹
TA关注的人