- 博客(78)
- 收藏
- 关注
原创 事务传播机制
例子核心场景事务结果关键原因1捕获异常后,重新抛回滚Spring 默认对回滚2捕获异常后,不抛出任何异常提交Spring 认为方法 “正常执行完毕”3捕获后直接抛出回滚等价于 “没捕获异常”,触发 Spring 自动回滚4手动调用回滚强制标记 “事务需要回滚”5抛出受检异常(无提交Spring 默认仅对Error回滚,受检异常不触发6包装受检异常为回滚Lombok 将受检异常转为,触发默认回滚7用指定受检异常需回滚回滚显式配置,让受检异常也能触发回滚。
2025-12-23 09:00:00
538
原创 如何使用ChatGPT来学习-自动化测试实例-微信红包
大家好,在AI盛行的年代,我们体会到它带来的诸多便利,他上知天文下知地理,人们遇到什么问题都快可以进行询问他,但是当我们进入考场,即兴发挥,AI给出的信息真假性等场景,我们又被打回原形,逐渐意识到我们应该更好的使用AI来辅助我们的学习,培养明辨是非的能力。如果 AI 已经能直接给出答案,我们还需要思考吗?苏格拉底式提问不是“最快的学习方式”,但往往是“最深刻的学习方式”。最佳做法不是二选一,而是结合使用:先讲清楚 → 再提好问题先给地图 → 再让人自己探索示例结构:1️⃣ 不直接要答案,而是要。
2025-12-23 09:00:00
1309
原创 从单体到云原生:一位架构学习者的八步演进+生活例子实录
首先,我先谈谈对读写分离/主从架构的理解。它是数据库层面的一种分流架构,核心是部署一台主库和多台从库,主库专门负责写请求和数据同步,从库通过主从复制机制同步主库的数据,专门负责读请求,实现“写走主库、读走从库”的分流策略。至于为什么要做读写分离,我认为核心原因是大多数业务场景中“读多写少”的特点——比如电商平台,用户查看商品的次数远多于下单购买的次数。
2025-12-22 09:00:00
795
原创 MyBatis 的XML实现方法
,导致SQL错误;官方定义的核心标签有:<select>、<insert>、<update>、<delete>、<resultMap>、<sql>、<include>以及动态SQL标签(<if>、<choose>、<trim>、<foreach>)。:MyBatis的“灵魂功能”,官方重点讲解4类标签:<if>(条件判断)、<choose>(多条件选其一,类似switch)、<trim>/<where>/<set>(解决SQL拼接冗余问题)、<foreach>(遍历集合,适合批量操作)。
2025-12-18 09:00:00
1689
原创 MyBatis 中的动态 SQL 的相关使用方法
根据MyBatis 3.x官方文档定义,动态SQL是MyBatis的核心强大特性之一,它基于OGNL(对象图导航语言)表达式,允许我们根据运行时的条件(比如输入的查询参数、业务规则)动态构建SQL语句。咱们用大白话讲:以前用JDBC写SQL,遇到多条件查询时,得手动拼接语句,还得小心翼翼处理空格、逗号,生怕多写个AND报错;而动态SQL就像有个“智能小助手”,会帮咱们自动判断条件,拼出正确的SQL,彻底摆脱拼接的痛苦。
2025-12-11 09:00:00
699
原创 Bean 的生命周期的各个阶段
目录Spring Bean生命周期深度解析:从定义到销毁的11个核心节点一、前言:为什么Bean生命周期是Spring的“基石考点”?二、核心拆解:Bean生命周期的11个核心阶段(附阶段流转逻辑)1. 第一阶段:Bean定义加载(“规划蓝图”)2. 第二阶段:实例化(“婴儿出生”)3. 第三阶段:属性赋值(“喂养穿衣”)4. 第四阶段:Aware接口回调(“认识世界”)5. 第五阶段:BeanPostProcessor前置处理(“学前辅导”)6. 第六阶段:初始化(“正式入学”)
2025-11-30 20:58:37
744
原创 SpringIoc和SpringAOP的关系以及区别
IoC通过 "控制反转" 实现对象依赖的解耦,让组件之间基于接口编程,提高灵活性AOP通过 "关注点分离" 实现横切逻辑的解耦,让业务代码更纯净,提高可维护性高内聚,低耦合。
2025-09-13 09:00:00
843
原创 SpringAOP
AOP(Aspect Oriented Programming),翻译为 “面向切面编程”,本质是对 “某一类事情” 的集中处理。比如 “统计所有接口耗时” 是一类事“所有方法的参数校验” 是另一类事AOP 能把这些事从业务代码中抽离出来,单独实现,再 “织入” 到需要的地方。如果想 “随机拦截几个无规则的方法”(比如同时拦截和),用execution会很麻烦,此时用更合适 —— 就像中介 “只服务主动打电话预约的房东”。java运行@Slf4j@Aspect@Component。
2025-09-12 09:00:00
1250
原创 SpringBoot 统一功能处理
Component@Slf4j // 日志注解@Override// 从Session获取用户信息,没有则拦截(返回401状态码)log.warn("用户未登录,拦截请求");// 401状态码// 拦截请求log.info("用户已登录,放行请求");// 放行@Data // Lombok注解,自动生成get/set等方法// 成功时的快捷方法// 失败时的快捷方法@ControllerAdvice // 全局异常处理类。
2025-05-19 09:00:00
699
原创 MyBatis (入门)
简化 JDBC:通过配置和映射,减少模板代码。灵活 SQL:支持注解和 XML 两种方式。安全高效:预编译防注入,连接池提升性能。
2025-05-07 09:00:00
647
原创 Spring Boot 日志
当月底发现钱不够用时,你可以翻看账本,找到哪笔开销异常,从而调整消费习惯。就像接待员,提供一个统一接口(如SLF4J),屏蔽底层复杂实现(如Logback、Log4j)。去医院看病时,接待员帮你处理挂号、缴费、取药,你无需直接面对各个科室。就像这个账本,记录程序的运行状态和问题,帮助开发者快速定位错误。类似手环,通过日志分析程序性能,比如某个接口响应过慢,触发报警。通过日志记录用户行为(如点击、浏览),用于数据分析或个性化推荐。智能手环记录你的步数、心率和睡眠质量,发现异常时提醒你。
2025-05-05 09:00:00
2113
原创 SpringBoot 配置文件
像文件夹的层级结构,“Spring” 是父文件夹,“datasource” 是子文件夹,缩进代表 “缩进多少代表层级多深”,错位就像把文件放进错误的文件夹。这时候,咖啡店给你一张“偏好卡”,你可以在卡上写下自己最喜欢的口味(比如“拿铁,少糖,加燕麦奶”)。比如咖啡店的营业时间、WiFi密码,这些可能经常变化的信息,写在“卡片”里更方便修改,不需要重新装修店面(修改代码)。虽然简单,但如果有多个 “地址” 相关的信息(如邮编、街道),每行都要重复 “地址.”,显得啰嗦。:比如配置数据库、第三方服务,用。
2025-05-04 09:00:00
856
原创 Spring IoC&DI
你不需要关心零件怎么来,只管用就行。2.生活类比假设你想组装一辆玩具车,传统方式需要自己买轮子、车身、电池,然后一步步组装。但如果你有一个“万能仓库”,只需要告诉仓库“我要一辆车”,仓库会自动配齐所有零件并组装好。这个仓库就是IoC容器。3.技术解释IoC(控制反转):把对象的创建和管理交给Spring框架(仓库),而不是自己手动创建。好处:代码更灵活,修改零件(比如换大轮子)时,不需要重写所有代码,仓库会自动调整。4.传统程序开发car.run();/*** ⻋⾝类*/
2025-05-03 09:00:00
963
原创 Spring Web MVC基础
Spring MVC是餐厅的“智能点餐系统”,帮你把顾客需求快速转给厨房,并让厨师高效做菜。分工明确:就像相亲介绍所的红娘、顾问、数据库各司其职,MVC 让代码更易维护。高效协作:Spring MVC 像外卖平台一样,快速连接用户需求和服务端处理。灵活扩展:如果想加一个新功能(比如会员系统),只需新增一个“模块”,不用重写整个程序。💡记住MVC是设计模式,帮你组织代码结构;Spring MVC是工具包,帮你快速实现 MVC 模式,就像外卖平台提供现成的接单、配送系统。2.什么是 Servlet?
2025-04-28 09:00:00
1645
原创 JVM相关介绍
JVM(Java 虚拟机)就像一条智能生产线,专门负责把 Java 代码转换成电脑能理解的指令。JDK(Java开发工具包)是工厂的“工具箱”,包含生产汽车(开发程序)需要的所有工具。JRE(Java运行环境)是工厂的“运行车间”,只有这里才能启动生产线,让汽车跑起来。JVM 就好比一个超级翻译官。咱们写的 Java 程序就像是一份中文剧本,而不同的系统(比如 Windows、Linux 等)就像是不同国家的演员,这些演员只懂自己国家的语言。
2025-04-22 09:00:00
664
原创 网络原理 - HTTP/HTTPS
平时我们俗称的"网址"其实就是说的URL(Uniform Resource Locator统一资源定位符).互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它.URL 的详细规则由 因特网标准RFC1738 进行了约定.(https://datatracker.ietf.org/doc/html/rfc1738)2.Cookie3. body4.url 的path认识请求 "正文" (body)
2025-04-21 09:00:00
1434
原创 网络原理 - TCP/IP
应用层就像我们日常用的各种 APP(如外卖软件、社交软件),程序员通过调用系统提供的网络 API 写代码,实现功能。这里不仅有现成协议(如 HTTP),更多时候需要根据场景自定义协议,约定客户端和服务器交互的信息、数据格式。以点外卖打开外卖 APP,首页要显示附近商家列表。此时客户端需把用户位置发给服务器,服务器返回商家名称、图片、评分等信息。交互哪些信息由产品经理和程序员共同确定,数据怎么组织(格式)就是程序员自定义协议的工作。约定请求响应:客户端按约定发请求,服务器按约定解析;
2025-04-14 09:00:00
1194
原创 网络编程套接字
flush方法的主要作用是强制把缓冲区里的数据发送出去。在代码里,对象会先把数据存于缓冲区,调用flush方法后,缓冲区的数据就会立刻发送给服务器。close方法的作用是关闭资源,释放系统资源,保证数据完整传输。在代码里,语句块结束时会自动调用close方法,关闭等资源。因为TCP是字节流,数据像流水一样源源不断的传输。线程池,解决的是频繁创建销毁的问题如果,当前的场景是线程频繁创建,但是不销毁呢每个客户端如果处理过程很短(网站)每个客户端处理过程都很长呢?(游戏服务器)
2025-04-07 09:00:00
1158
原创 网络原理 - 初识
网络发展史网络发展史独立模式独立模式:计算机之间相互独立;网络互连将多台计算机连接在一起,完成数据共享。数据共享本质是网络数据传输,即计算机之间通过网络来传输数据,也称为网络通信。根据网络互连的规模不同,可以划分为局域网和广域网。局域网LAN(1)基于网线直连(2)基于交换机组建(3)基于交换机和路由器组建交换机下面还能再接路由器,路由器下面还能再接交换机,理论上是可以无限延伸的,当前网络就是这么构造出来。
2025-04-04 09:00:00
918
原创 多线程-进阶
CAS(一种操作机制)在执行时,会判断当前内存值是否和寄存器中的值一样,一样就修改,不一样就不操作。而 ABA 问题的本质是,在代码执行过程中,有其他线程 “插足”,让数据先从 A 变成 B,又从 B 变回 A。看似数据没变,但中间经历了变化。
2025-04-01 09:00:00
765
原创 多线程 - 初阶
代码核心问题代码中count++操作在单线程下正常,但多线程下会出问题。因为count++底层由三个 CPU 指令组成:读取(load):从内存读数据到 CPU 寄存器;计算(add):寄存器里的数据 +1;保存(save):把结果写回内存。多线程时,CPU 调度线程的顺序不可控,可能导致两个线程的指令交叉执行,最终结果比预期值(10 万)小。线程不安全的本质多个线程操作共享数据(如代码里的count)时,因操作步骤拆分且调度无序,导致数据被错误修改。它们和join类似,作用是。
2025-03-30 09:00:00
1148
原创 计算机是如何工作的
PCB 就像进程的 “全能档案”,操作系统通过这些属性管理进程,如同餐厅通过顾客档案优化服务。每个属性各司其职:标识身份(PID)、管理资源位置(内存指针、文件描述符表)、跟踪状态(状态、优先级)、记录开销(记账信息)、保存进度(上下文),最终让计算机高效有序地运行。好好理解各部分之间的关系。
2025-03-15 22:08:06
1774
原创 MySQL索引事务
若查询涉及到某个字段的范围筛选(如查询年龄在 20 到 30 岁之间的用户),或者需要对结果进行排序(如按时间顺序显示订单记录),B - tree 索引是很好的选择,因为它能高效地处理这类操作。但如果给笔记本做个 “索引”(搞个目录),提前记好 “哪一页写了周一的事、哪一页写了周三的事”,之后找内容时,看一眼目录(索引),直接翻到对应页就行,找得又快又准。比如点外卖选了三道菜,下单时这三道菜要么都成功加入订单,但凡其中一道菜售罄(某个操作失败),整个订单都不会成立,不会只留部分菜在订单里。
2025-03-08 11:23:24
1020
原创 MySQL表的增删改查(进阶)
返回查询到的数据的 数量查找同伴同学,关键突破就是拿到这个班级的id,因为同班=在一个班,在一个班 -> name1. 一对一:2. 一对多:3. 多对多:需要创建中间表来映射两张表的关系。
2025-03-04 09:01:18
1247
原创 MySQL表的增删改查
目录1.CRUD2.新增(C)2.1语法2.2单行插入 + 全列插入2.3多行数据+指定列插入2.4如何获取当前的时间?3.查询(R)3.1全列查找语法注意3.2指定列查询语法注意3.3 查询字段为表达式表达式不包含字段表达式包含一个字段表达式包含多个字段例子实践3.4别名语法别名的解释3.5去除重复的数据语法例子3.6 order by 排序语法例子 注意3.7条件查询(where)比较运算符逻辑运算符例子基本查询and和or范围查询1.between ... and ...2.in模糊查询likeNUL
2025-02-24 19:01:06
739
原创 反射、枚举以及lambda表达式
Java的反射(reflection)机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性,既然能拿到那么,我们就可以修改部分类型信息。Java 反射机制允许程序在运行时获取、操作类和对象的信息。通过Class类 、Field类、Method类、类,可获取类的构造函数、方法和字段等。其优点是增加程序灵活性与扩展性,应用于众多框架;缺点是存在性能开销且破坏封装性,使用时需注意安全。
2025-01-27 14:52:56
774
原创 数据结构--排序
int i =0;i++;j++;//输出每一趟的修改后的结果d++) {}*///那么如果我只想让你只输出发生修改了的结果//我们可以利用设计标志去记录这个情况//将这个包含在循环里面,如果这个情况发生则输出//输出发生修改后的结果d++) {i++;j++;}*/i++) {// 希尔排序的实现// 初始化 gap,并逐步减小 gapgap > 0;// 对当前步长进行插入排序i < n;
2025-01-15 11:25:23
599
原创 HashSet的常用方法及其源码展示
先计算元素的哈希值,然后根据哈希值找到元素可能存储的位置(索引),再检查该位置及其关联的链表(如果有哈希冲突)中是否存在与给定元素相等的元素。它用于获取当前迭代器位置之后的下一个元素,并将迭代器的指针向前移动一位,以便下次循环时能够获取到下一个新的元素。将获取到的下一个元素输出到控制台,并在元素后面添加一个空格,从而实现逐个元素的输出展示,直到。用于获取下一个元素并移动迭代器指针,它们共同协作实现了对集合元素的有序、完整的遍历操作。通过使用泛型,编译器可以在编译时检查元素的类型是否符合集合的要求。
2024-12-01 15:04:12
1303
原创 Java抛出自定义运行运行
1.重新生成异常的.java文件 Empty:空 Exception:异常 加起来就是 空指针异常的文件。4.在需要抛出异常的地方写上:throw new Run。2.打上extends + 运行的异常(异常的类型)3.点击ctrl+o,选着这两个快捷重写。5.若要自定义异常类型。
2024-11-30 21:15:39
317
原创 对于大根堆的计算时间复杂度的过程
接着每一层节点需要调整的次数= (每一层的节点个数 * 这一层节点需要调整的所在高度)再全部相加起来。优化答案,再结合树知识中高度的求法公式,发现两个函数的关系再优化。然后求解出每一层的节点个数+这一层节点需要调整的所在高度。利用*2T(n)构造出等差数列。
2024-11-10 20:08:36
347
原创 数据结构--二叉树
树是一种非线性的数据结构,它是由nn>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:1.有一个特殊的结点,称为根结点,根结点没有前驱结点2.除根结点外,其余结点被分成M(M > 0)个互不相交的集合3.树是递归定义的。注意:树形结构中,子树之间不能有交集,否则就不是树形结构。
2024-11-08 18:52:38
1097
原创 数据结构--栈和队列
只允许在固定的一端进行插入和删除元素操作的特殊线性表,数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出的原则。如果是两个栈(一个空,一个非空)来进行交换数据的话,特点是“倒进去”---刷题很大用处1.2栈的使用方法1.3栈的关系图栈是最底层的操作,当使用cloneable等操作时候可以延申2.队列(Queue)2.1只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表---先进先出2.2 队列的使用方法主要是区分栈,队列两者的特点!!!
2024-10-20 14:43:39
430
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅