- 博客(166)
- 收藏
- 关注
原创 深入理解 HTTP 状态码 —— 前端后端必备知识
HTTP 状态码是服务器响应 HTTP 请求时返回的一个三位数字代码,它表示服务器对请求的处理结果。使用标准 HTTP 状态码在返回的 JSON 中自定义业务错误码,例如:"message": "用户未注册"这样可以在统一的200 OK下做细致的业务判断。类别范围含义示例1xx100–199信息响应2xx200–299成功3xx300–399重定向4xx400–499客户端错误5xx500–599服务器错误当然可以,下面我们来具体深入讲解 HTTP 状态码中的。
2025-06-22 18:50:02
975
原创 算法系列|队列+宽搜(BFS)
BFS(Breadth-First Search,广度优先搜索)的原理基于逐层搜索节点。具体来说,BFS从一个起始节点开始,首先访问该节点的所有直接邻居,然后再访问这些邻居的邻居,依此类推,直到访问所有节点或找到目标节点。适用于图的遍历和无权图的最短路径搜索。通过使用队列来管理待访问的节点,可以确保所有节点按层级顺序被访问,从而实现广度优先搜索。
2025-06-21 10:32:45
509
原创 Java枚举类如何避免反射攻击和序列化攻击
Java 的反射(Reflection)机制允许你在运行时访问类的私有构造方法,这就可能绕过单例模式的限制,创建多个实例。// 又创建了一个新对象当你对一个对象序列化后再反序列化,如果没有处理好方法,可能会重新创建一个新的实例。// 序列化// 又是一个新对象安全防护项普通单例需要额外处理枚举单例线程安全❌(需加锁或静态内部类)✅ JVM 保证反射攻击❌(可被破坏)✅ JVM 禁止序列化攻击❌(需要重写✅ JVM 自动处理写法简洁❌✅✅✅。
2025-06-20 19:43:41
748
原创 一文掌握 MySQL 聚合函数(含语法 + 示例 + 实战)
聚合函数(Aggregate Functions)是用于对一组数据进行汇总计算并返回一个单一值的函数。通俗点说:聚合函数不关心单条记录,而是**“一堆值算出一个结果”**,比如统计数量、求总和、找最大/最小值等。函数用途COUNT()计数量SUM()求总和AVG()求平均MAX()最大值MIN()最小值合并字符串聚合函数让你可以轻松实现报表统计、业务分析、分组汇总、数据聚合等操作,是 SQL 中的核心武器!
2025-06-20 19:37:25
335
原创 一文掌握 MySQL 聚合函数(含语法 + 示例 + 实战)
聚合函数(Aggregate Functions)是用于对一组数据进行汇总计算并返回一个单一值的函数。通俗点说:聚合函数不关心单条记录,而是**“一堆值算出一个结果”**,比如统计数量、求总和、找最大/最小值等。函数用途COUNT()计数量SUM()求总和AVG()求平均MAX()最大值MIN()最小值合并字符串聚合函数让你可以轻松实现报表统计、业务分析、分组汇总、数据聚合等操作,是 SQL 中的核心武器!
2025-06-19 11:35:59
891
原创 Java 内存管理机制通俗讲解(小白友好版)
Java 的内存管理机制指的是 JVM(Java 虚拟机)在程序运行时,自动完成内存的分配与回收的全过程。相比 C/C++ 语言需要手动管理内存,Java 的优势在于有自动的垃圾回收机制(GC),帮你识别哪些对象不用了,并释放它们的内存,防止内存泄漏和程序崩溃。Java 的内存管理机制通过“内存分区 + 垃圾回收算法 + 分代策略 + 回收器实现”,自动管理对象的生命周期,让我们可以更专注于业务逻辑开发,而不用操心内存分配和释放。
2025-06-19 10:32:56
823
原创 使用 CountDownLatch 实现并发压测(Java 实战详解)
是并发编程中协调线程启动与结束的利器;在压测中非常实用,可以有效模拟真实并发场景;与线程池结合使用效果更佳;面试中可以作为并发编程 + 性能优化的实际经验亮点进行展示。
2025-06-18 16:46:40
739
原创 Java 单元测试实战:以“两数之和”为例,讲透测试思维
在 Java 开发中,。今天我们通过一个最简单的功能——“两数之和”来系统讲解如何从测试设计、代码实现到测试策略进行全面思考,提升代码质量,夯实测试意识。
2025-06-18 13:42:05
371
原创 白盒测试实战:如何在Spring Boot项目中用白盒测试发现“上传MP3”功能的隐藏BUG?
白盒测试(White Box Testing)也被称为结构测试透明盒测试逻辑驱动测试,是软件测试中的一种重要类型。与黑盒测试关注“功能是否正确”不同,白盒测试关注程序的内部逻辑结构是否正确。白盒测试 = “看得见代码的测试”,设计者需要了解程序内部实现。提升代码质量:覆盖每一条执行路径,提早暴露 bug;加强异常控制:尤其是处理空指针、IO 异常等非主路径情况;加分项面试技能:展示你理解代码的深度与严谨性,是区分“写功能”与“做工程”的关键。
2025-06-16 11:05:00
636
原创 Java 中的线程调度机制
要点内容🎯 调度机制Java 使用抢占式调度,结合时间片和优先级🔢 优先级范围 1~10,建议作用,不保证先执行🧭 调度条件线程必须处于RUNNABLE状态才可能被调度⛔ 非 RUNNABLE 状态sleep()wait()blocked无法被调度🛠 常用方法sleep()yield()join()
2025-06-15 16:38:53
262
原创 Java事务隔离问题详解:脏读、不可重复读与幻读(含解决方案)
一个事务读取了另一个尚未提交事务所修改的数据。这种情况下,如果修改数据的事务最终回滚了,那么读取事务中保留的数据就变成了“脏数据” —— 它从未真正存在过。在同一个事务中,读取同一条记录,前后结果不一致。这是因为在两次读取之间,另一事务修改并提交了该记录。在一个事务中,两次查询相同条件的数据集合,但第二次的结果包含了第一次没有的数据行,这些新数据是在事务执行期间被其他事务插入的。幻读是多行数据集合层面的“不可重复读”。问题类型典型表现建议隔离级别脏读读到了未提交的修改不可重复读。
2025-06-15 15:08:13
623
原创 一文读懂数据库的四种事务隔离级别(含原理 + 实例 + 优缺点)
ACID—— 原子性、一致性、隔离性、持久性。其中,隔离性用来解决多个事务并发访问数据库时,可能出现的“脏读”、“不可重复读”、“幻读”等问题。隔离级别能否读未提交数据能否发生不可重复读能否发生幻读✅ 可以✅ 可以✅ 可以❌ 不可✅ 可以✅ 可以❌ 不可❌ 不可✅ 可以(部分可)❌ 不可❌ 不可❌ 不可允许一个事务读取另一个尚未提交的事务修改的数据。一个事务只能读取到其他事务已提交的数据。保证在一个事务内,多次读取同一数据记录时,结果是一样的。所有事务依次执行,串行排队。
2025-06-15 15:07:30
881
原创 Java 多线程轮流打印 ABC 的 4 种实现方式详解
方法控制方式唤醒机制难度推荐场景状态 + 模 3 判断notifyAll⭐简单测试、学习入门状态 + Conditionsignal⭐⭐更精确唤醒,推荐实际开发使用Semaphore信号量控制顺序⭐⭐控制有限资源访问/固定顺序令牌传递take/put⭐⭐结构直观,适合理解通信流程线程按顺序轮流执行是实际开发中很常见的需求,比如:生产者消费者模型、有序打印日志、顺序处理任务等。掌握以上几种方法不仅能应对面试题,更能提升对 Java 并发编程的理解。
2025-06-15 12:53:44
961
原创 深度排查 RabbitMQ 消费“忽接忽不接”的离奇 Bug!一次抽奖成功一次失败?我经历了什么…
用户登录创建抽奖活动启动抽奖异步决定中奖人异步推送中奖结果展示中奖名单为了保障抽奖体验,我们引入了RabbitMQ来异步处理中奖逻辑和消息推送,使得主流程不被阻塞,提升响应速度和系统吞吐能力。收获说明🧠 RabbitMQ 消费机制明确了同队列多消费者的行为是轮询而非广播🛠 系统测试能力学会用“场景复现”分析复杂异步问题⚠ 部署注意事项开发、测试、线上环境需要明确区分监听对象。
2025-06-12 14:16:06
952
原创 Linux 杀进程指令详解:`kill -9 PID` 和 `kill -15 PID` 有什么区别?
kill -15(SIGTERM):温和终止,允许进程自我清理,推荐优先使用。kill -9(SIGKILL):强制终止,直接由系统杀死进程,无清理过程。一个是“请求”,一个是“命令”;一个可以被处理,另一个不可商量。
2025-06-11 23:17:59
817
原创 【MySQL 从 0 讲解系列】深入理解 GROUP BY 的本质与应用(含SQL示例+面试题)
GROUP BY是一个分组语句,用于将结果集按照一个或多个字段进行分组,并常与聚合函数(如COUNT()SUM()AVG()MAX()MIN())一起使用,对每个组分别进行统计。GROUP BY是分组;HAVING是对分组后的结果进行筛选;HAVING一般与聚合函数一起使用,而WHERE是分组之前的筛选条件。能力是否支持按字段组合分组✅配合聚合函数统计✅配合 HAVING 筛选✅多字段组合分组✅替代 DISTINCT 去重✅(功能上)点击进入力扣上这道题目可以很好的锻炼到。
2025-06-11 09:35:32
936
原创 【MySQL从0讲解系列】彻底搞懂 HAVING:和 WHERE 有什么区别?
Q1:HAVING 和 WHERE 的区别?WHERE是过滤原始数据,不能用聚合函数;HAVING是过滤分组之后的结果,常用于配合聚合函数。Q2:可以只用 HAVING 而不用 GROUP BY 吗?A:这和WHERE类似,但不推荐这么写,一般 HAVING 是和 GROUP BY 配套使用的。Q3:能用 HAVING 替代 WHERE 吗?A:不建议。虽然在某些情况下可以实现相同结果,但它们的执行阶段不同,用错会导致性能或结果出错。场景应使用关键字原始数据的条件过滤WHERE。
2025-06-11 09:03:11
421
原创 主键(PRIMARY KEY)与唯一键(UNIQUE KEY)的区别详解
❌ 报错:只能定义一个主键!Q1:主键和唯一键的区别?主键用于唯一标识一行数据,不能为 NULL,一个表只能有一个主键;唯一键也约束唯一性,但可以为 NULL,且一个表可以有多个唯一键;主键是强约束(唯一 + 非空 + 唯一标识),唯一键是弱约束(只是唯一)。Q2:可以同时设置主键和唯一键吗?答:可以。一个字段作为主键,另一个或多个字段作为唯一键,不冲突。Q3:主键和唯一键哪个更适合身份证号字段?如果身份证号一定不能为空并作为唯一身份标识,建议用主键;
2025-06-10 23:53:26
869
原创 性能测试必看!超全核心指标详解 + 实战案例 + 面试宝典
客户端、服务器端、业务指标环环相扣,需关联分析,切忌孤立看待!性能测试的核心价值在于发现并解决瓶颈。熟练使用工具,更要掌握指标关联分析、根因定位的思维。所有指标阈值和测试场景都应源于并服务于业务需求。上线后持续监控生产环境指标,性能保障是持久战!🚀下次做性能测试,对照这份清单,确保关键指标一个不漏!💬 互动时间:你在性能测试中踩过最深的“坑”是哪个指标异常导致的?或者对哪个指标的理解有独到心得?欢迎评论区分享交流!#性能测试 #软件测试 #系统优化 #后端开发 #面试题。
2025-06-10 21:51:13
971
原创 Linux 性能瓶颈,你在看哪里?—— CPU、内存、磁盘与网络 I/O 的深度解读与实践
在运维和开发的世界里,系统性能是永恒的焦点。通过熟练运用这些命令和理解这些核心指标,你就能更有效地诊断 Linux 系统的性能问题,从而为你的应用提供一个稳定、高效的运行环境!(run queue) 列,如果长期大于 CPU 核心数,则表明 CPU 资源不足,有大量进程在排队等待 CPU。例如,一个 4 核 CPU 的服务器,如果负载长期大于 4,就可能存在 CPU 瓶颈。CPU 是计算机的“大脑”,其使用率直接反映了系统计算负载的状况。内存是应用程序运行的“工作空间”,充足的内存是系统高效运行的基础。
2025-06-10 21:46:20
663
原创 Linux常用命令速查与面试高频命令总结
Linux 是后端、运维、测试岗位的必备技能之一,而熟练掌握命令行工具,不仅提升工作效率,也能帮助你在面试中脱颖而出。
2025-06-10 12:11:37
378
原创 一文搞懂 SQL 执行顺序(SQL 初学者必看!)
从哪儿找(FROM),怎么连(JOIN/ON),先筛行(WHERE),再分组(GROUP BY),组后筛(HAVING),选字段(SELECT),排序走(ORDER BY),最后限制(LIMIT)留。写 SQL 的顺序和数据库执行 SQL 的顺序,其实并不一样。你是不是也有这样的疑惑:为什么我写的。在最前面,但数据库却好像“先不看它”?,让你从小白进阶为思路清晰的 SQL 玩家!假设有一个学生成绩表。
2025-06-10 10:05:37
414
原创 深入理解 MySQL 中的更改操作:UPDATE、ALTER、RENAME 的原理与区别
MySQL 的更改操作不仅仅是语法问题,更是对数据库引擎、日志机制、锁机制的理解和运用。合理使用UPDATEALTER和RENAME能帮助你构建更加高效、可维护的数据库系统。🙌。
2025-06-10 00:36:59
588
原创 深入理解 MySQL 中的删除操作:DELETE、TRUNCATE 和 DROP 的区别与原理
特性DELETETRUNCATEDROP支持事务回滚✅ 是❌ 否❌ 否是否逐行删除✅ 是❌ 否❌ 否是否触发触发器✅ 是❌ 否❌ 否是否重置自增计数❌ 否✅ 是✅ 是是否保留表结构✅ 是✅ 是❌ 否适合大表操作❌ 慢✅ 快✅ 极快MySQL 的删除操作不仅是语法问题,更是数据库底层原理、事务机制、日志系统的综合体现。理解清楚三种删除方式的区别和使用场景,对于写出高性能、可维护的数据库代码至关重要。🙌。
2025-06-10 00:35:34
990
原创 Linux 性能利器:详解 `top` 命令的使用与输出信息解析
top优点说明实时监控可持续查看系统资源动态变化可交互通过快捷键进行排序、杀进程等易部署所有 Linux 系统默认内置,无需安装排障利器快速排查 CPU 或内存异常问题top是每个 Linux 使用者都必须掌握的工具,它在系统维护、性能分析中都发挥着重要作用。建议大家多练习,用实际问题来驱动理解!
2025-06-09 23:57:15
1071
原创 LRU 缓存机制详解与实现(Java版) + 力扣解决
用 HashMap 加速查找 + 双向链表维护访问顺序这一组合思想,是很多设计类题目的范式和精华。
2025-06-09 10:35:46
986
原创 Roller: 抽奖系统测试的幕后剧本-测试报告
该项目是一个操作简便、安全可靠的抽奖系统。主要业务是抽奖,并支持管理员管理用户、奖品和抽奖活动,以配置抽奖内容。抽奖操作由管理员进行,支持依次抽取配置好的奖品和人数,并保证每人最多中一次奖。系统对异常情况进行了处理,并对中奖人发送短信和邮件通知。项目采用了分层分模块设计,技术栈包括 Spring Boot3、JDK 17、MySQL、MyBatis、Redis、RabbitMQ、SLF4J + logback 等。
2025-06-01 20:20:32
944
原创 Spring Boot 中 @RequestParam 和 @RequestPart 的区别详解(含实际项目案例)
比较点适用请求类型适用参数类型简单类型(字符串、文件、数字)复杂类型(JSON 对象、多个文件、嵌套结构)JSON 自动转换❌ 不支持✅ 支持(通过 HttpMessageConverter)常见使用场景普通表单提交、单文件上传JSON + 文件上传、富表单场景理解和的使用场景,能够帮助我们在设计接口时做出更合适的技术选择,也能避免参数绑定错误、JSON 转换失败等常见问题。✍️ 作者:Lvzi📅 时间:2025年。
2025-05-30 17:30:15
1405
原创 事务详解及面试常考知识点整理
比如你和室友一起做饭,只有一个炉灶,就得排队做(串行);但如果有两个灶,就能同时炒菜(并发)。数据库中的并发执行可以提升处理效率,但也容易引发问题。下面是三大经典并发问题,每一个问题都有对应的隔离级别来解决。事务本质上是为了解决数据一致性与并发效率之间的矛盾。若业务要求强一致性(如转账、库存),优先选择高隔离级别;事务四大特性(ACID)三大并发问题(脏读、不可重复读、幻读)四种隔离级别及其对应能力MySQL 默认的隔离级别如需更深入地学习事务的原理与实现,如。
2025-05-27 08:52:21
760
原创 算法系列--分治排序|归并排序|逆序对的求解
归并排序和快速排序的区别在于排序的时机不同,归并排序是等到分解完毕之后在进行排序,快速排序是先进行分解,再排序;更形象的说,归并排序更像二叉树的后序遍历,遍历完左右子树再打印根节点;快速排序反之合并两个有序列表。
2024-07-07 11:07:39
835
原创 Java中String,StringBuilder,StringBuffer的区别
当然可以,我们可以通过面试问答的形式来探讨String和的区别。
2024-06-30 14:02:02
365
原创 前缀和算法系列|概念讲解|应用场景|大量例题讲解
一维前缀和就是一个简单的dp问题链接:一维前缀和(模版题)代码:2.二维前缀和同理,二位前缀和是一个简单的二维dp问题,难点在于dp表的状态转移方程和如何使用,需要进行推导链接:二维前缀和代码:3.使用条件前缀和算法是一种高效解决数组区间求和问题的技巧。它通过预处理数组,构建一个前缀和数组,。以下是一些你必须要掌握的核心概念和步骤:前缀和数组定义:构建前缀和数组:区间和的计算:理解并构建前缀和数组:使用前缀和数组进行区间求和:优化特定问题:01.寻找数组的中间下标链接:https://
2024-06-27 09:19:00
1112
原创 贪心算法系列(二)|摆动序列最长递增子序列|买卖股票的最佳时机|买卖股票的最佳时机II
后面两种情况从宏观角度来看是存在波峰和波谷的,所有相同的点(平直部分)其实可以当作一个点,所以如果遇到。每次都假定今天卖出,那么就需要知道今天之前的最小值,这样才能获得当天的最大利润,,如果小于,就能构成一个新的,更长的递增子序列,取所有情况中的最大值。位置的元素时,我们只关心i位置之前的。,这样遍历一遍数组就能得到最大利润。即可,无需关注序列本身的组成,观察dp的思路不难发现,如果趋势是平的怎么处理。的解题思路中,当走到。所有的今天构成了每天。
2024-06-24 17:38:36
484
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人