- 博客(125)
- 收藏
- 关注
原创 测试-用例篇
需要明确的是,正交法本质上是从所有可能的输入组合(全量组合)中,依据正交性原则,筛选出一组具有代表性的少量测试用例,其核心价值在于 “用最少用例覆盖关键组合(尤其是两两交互)”。因此针对 “填写部分选项” 场景,我们可按以下逻辑操作:先借助正交法(如通过 allpairs 工具)生成覆盖因素两两组合的最小用例集(并非 “全量组合”,而是用最少用例覆盖关键交互的正交表),再通过人工筛选剔除表中 “全填”“全不填” 的用例,仅保留 “部分填写” 的核心组合。
2025-09-01 15:01:11
946
原创 Spring Boot 自动配置揭秘:轻松管理第三方依赖
在这些自动配置类中,开发者可以定义需要自动注册的 Bean。需要特别说明的是,这里所说的“自动装配”特指 Spring Boot 对第三方依赖所提供的自动配置类的自动化 Bean 注册过程,并不包括开发者通过 @Bean、@Component 等方式手动定义的 Bean。因此,Spring Boot 设计了更优雅的自动配置机制,让第三方组件能通过自身的配置规则(如 spring.factories 等)主动向 Spring 容器暴露需要注册的 Bean,避免了手动配置扫描路径的麻烦。
2025-08-25 16:44:57
1309
原创 Bean的作用域和生命周期
这种 “管理主体和生命周期绑定对象的差异”,会导致一个关键问题:当 Spring 容器管理这些 Web 作用域的 Bean 时,Bean 初始化时(此时可能还没有任何 HTTP 请求或会话)无法直接获取到 “真实的 Web 作用域实例”,甚至后续 Web 上下文变化时(如请求结束、会话切换),原有的实例会失效。从输出的 Bean 对象地址值相同可以看出,每次从 Spring 容器中获取的对象都是同一个实例,这体现的正是 “单例模式”—— 确保一个类在应用中只存在一个实例,无论获取多少次都不会创建新的实例。
2025-08-18 17:42:10
650
原创 Linux基本使用和Java程序部署(含 JDK 与 MySQL)
apt(Advanced Packaging Tool)是 Ubuntu、Debian 及衍生发行版中管理 .deb 格式软件包的工具,可实现安装、更新、卸载等全生命周期管理,多数操作需 sudo 权限,其工作基于可用软件包的数据库,因此安装 Linux 系统后应首先更新该数据库,否则系统无法知晓是否有更新的软件包可用一、核心配置:镜像源镜像源是指在不同地区或网络环境中,通过复制并同步主服务器的软件包与数据而搭建的服务器。
2025-08-14 18:10:50
930
原创 Spring 对数组和集合类的自动注入
如果不需要通过 key 定位,而是要遍历所有实现类(例如执行批量操作、责任链模式),可以用这个。启动类的方法改成这样。
2025-07-21 18:37:54
486
原创 Spring 事务和事务传播机制
比如此级别的事务正在执行时,另一个事务成功的插入了某条数据,但因为它每次查询的结果都是一样的,所以会导致查询不到这条数据,自己重复插入时又失败 (因为唯一约束的原因). 明明在事务中查询不到这条信息,但自己就是插入不进去,这个现象叫幻读。A 方法运行时,会开启一个事务。当 A 调用 B 时,B 方法本身也有事务,此时 B 方法运行时,是加入 A 的事务,还是创建一个新的事务呢?事务隔离级别解决的是多个事务同时调用一个数据库的问题,而事务传播机制解决的是一个事务在多个节点 (方法) 中传递的问题。
2025-07-20 23:59:53
1033
原创 SpringBoot 统一功能处理(拦截器、@ControllerAdvice、Spring AOP)
三者均通过抽取横切关注点并进行统一处理,既实现了代码复用(避免重复开发),又完成了业务逻辑与通用功能的解耦,其核心优势在于无侵入性增强—— 在程序运行期间,无需修改原有业务代码。最终简化开发流程并显著提升系统的可维护性。
2025-07-20 01:02:50
1187
原创 MyBatis 操作数据库
MyBatis 是一款优秀的 持久层 框架,用于简化 JDBC 的开发MyBatis 中文网持久层:指的就是持久化操作的层,通常指数据访问层 (dao), 用来操作数据库简单来说, MyBatis 是更简单完成程序和数据库交互的框架,也就是更简单的操作和读取数据库的工具。
2025-07-14 14:48:11
362
原创 Windows用户和组以及常用命令
Windows是多用户操作系统,即同一时间内允许多个用户同时使用计算机,每个用户的权限可以是不一样的。用户组是一系列用户的集合,组内的用户自动具备该组所设置的权限。
2025-07-13 01:24:09
3172
原创 Spring Boot 日志
SLF4J 提供了一套通用的接口规范,允许开发者在不修改应用代码中日志调用方式的前提下,灵活切换底层实际的日志实现框架,比如 Logback、Log4j 等。也可以通过日志记录这个系统的运行状态,每一个方法的响应时间,响应状态等,设置不同的规则,超过阈值时进行报警。还有一些内部的违规和信息泄漏(比如客户信息被卖掉)现象出现后,如果未记录留存日志,为事后调查提供依据,那么后续很难追查(一些公司查看客户信息的操作都会记录日志,如果频繁查询也会报警)需要传递一个参数,标识这个日志的名称。
2025-07-04 18:01:47
1318
3
原创 SpringBoot 配置文件
我们使用的绝大多数软件(如浏览器、微信、IDEA 等 ),都离不开配置文件来定义运行参数、个性化设置。这些配置文件通常不会直接被普通用户手动编辑,但会以各种格式(如 .config、.xml、.ini 等 ),散落在计算机的文件夹中硬编码是指将数据直接嵌入到程序或其他可执行对象的源代码中,也就是我们常说的 “代码写死”配置文件主要是为了解决硬编码带来的问题,把可能会发生改变的信息,放在一个集中的地方,当我们启动某个程序时,应用程序从配置文件中读取数据,并加载运行。
2025-07-03 15:11:39
995
原创 Spring IoC & DI介绍
Spring 是什么?Spring 是一个开源框架,让我们的开发更加简单。我们用一句更具体的话来概括 Spring,那就是:Spring 是包含了众多工具方法的 IoC 容器那么问题来了,什么是容器?什么是 IoC 容器?接下来我们一起来看什么是容器?容器是用来容纳某些物品的装置。生活中的水壶,冰箱都是容器。Java中 List,Map 等集合类(数据存储容器),Tomcat(Web 容器) 也是容器什么是 IoC: Inversion of Control (控制反转)?
2025-07-01 18:58:26
1175
1
原创 Python中if name == ‘main‘的妙用
if __name__ == "__main__"是Python中用于判断脚本执行方式的惯用方法。当文件直接运行时,__name__值为__main__;当被导入或创建子进程时,__name__变为文件名。这个机制主要用于:1)区分模块导入与直接执行,避免导入时自动执行测试代码;2)解决Windows多进程编程中的递归问题。通过这种方式,代码既能作为独立程序运行,又能安全地被复用,增强了灵活性和可维护性。
2025-06-27 17:53:20
331
原创 Spring Web MVC
Spring Web MVC简介与基础使用 Spring Web MVC是基于Servlet API构建的原始Web框架,是Spring框架的核心模块。它实现了MVC(Model-View-Controller)设计模式,通过DispatcherServlet作为核心控制器来处理HTTP请求。文章介绍了MVC模式的三个核心组件:View(视图交互)、Model(数据处理)和Controller(请求分发)。Spring MVC作为MVC的具体实现,同时也是一个Web框架。 通过Spring Boot可以快速
2025-06-27 00:58:13
1141
原创 掌握应用分层:高内聚低耦合的艺术
应用分层是一种软件设计思想,将系统划分为多个职责分明的层次(如MVC模式中的模型、视图、控制器或三层架构中的表现层、业务逻辑层、数据层),通过解耦实现高内聚低耦合。分层架构的优势在于提升代码可维护性、扩展性和复用性,避免模块间过度依赖。文章以Spring项目为例,展示了Controller、Service、Mapper的分层协作,并对比了MVC与三层架构的异同,强调二者共同目标是通过模块化设计降低系统复杂度。软件设计原则强调模块内部高内聚(功能集中)与模块间低耦合(依赖最小化),类比企业部门协作说明其重要性
2025-06-14 23:59:16
1238
原创 Lombok 介绍
Lombok是一款简化Java开发的工具库,通过注解自动生成常用代码。只需添加@Data注解,就能为类自动生成getter/setter、equals、toString等方法,减少模板代码。其原理是在编译期通过注解处理器生成代码。Lombok还提供@Getter、@Setter等细粒度注解,满足不同需求。使用时只需在pom.xml中添加依赖,也可通过EditStarters插件快速引入。Lombok使代码更简洁,提高开发效率,是Java开发中实用的工具库。
2025-06-14 11:11:01
435
原创 SpringBoot 快速上手
Maven是一个基于POM(项目对象模型)的Java项目管理工具,主要提供项目构建和依赖管理两大核心功能。它通过pom.xml配置文件自动获取jar包,无需手动添加。Maven支持跨平台的项目构建流程(编译、测试、打包、发布),并具有依赖传递、排除和调解机制。开发者可以通过Maven Help插件分析依赖冲突,本地仓库存储下载的jar包,中央仓库(如mvnrepository.com)提供资源查询。Maven简化了Java项目的开发和维护流程。
2025-06-09 01:04:38
961
原创 Comparable和Comparator
Comparable让类自身实现排序规则,适用于类的默认排序逻辑;Comparator在外部定义排序规则,不修改原类。可通过 Lambda 简化实现。适用于临时排序或多种排序方式。Comparable 是通过重写 compareTo 方法实现排序的,而 Comparator 是通过重写 compare 方法实现排序的侵入性:实现Comparable接口会对类产生侵入,因为要修改类的定义;实现Comparator接口则不会影响类的定义,能在不修改类的情况下实现不同的排序规则。
2025-06-04 17:10:45
306
原创 Kotlin-特殊类型
函数并返回兼容类型,数据类会生成相应的函数,并覆盖父类的函数,如果由于关键字导致无法重写父类对应的函数会直接导致报错。object关键字除了用于声明匿名类型,也可以用于声明单例类(整个程序中只能存在一个对象)枚举也可以具有成员,但不能命名为name,因为name用来返回枚举名称了。匿名类虽然没名字,也可以定义成员,不过不能定义任何构造函数。如果枚举实现了某个接口,既可以成员实现也可以统一实现。匿名类也可以作为某个类的子类定义,或是某个接口的实现。在枚举类中也可以编写抽象函数,但需要枚举自行实现。
2025-05-30 17:18:38
1496
1
原创 Kotlin-数组,集合类以及序列
序列实际上是一个延迟获取数据的集合,只有需要元素时才会产生元素并提供给外部,包括所有对元素的操作也不是一次性全部处理,而是根据情况选择合适的元素进行操作,使用序列能够在处理大量数据时获得显著的性能提升。可以发现,序列根据我们的操作流程,对数据的操作也进行了优化,执行次数明显减少,并且只有我们从序列读取数据时才会执行定义好的工序。迭代器的出现,使得我们无论使用哪一种集合,都可以使用同样的方式对元素进行遍历。如果我们既需要通过筛选的元素,也需要未通过筛选的元素,可以使用分区操作。
2025-05-23 15:34:51
1233
原创 Kotlin-类和对象
主构造函数:可以直接定义类属性,使用更方便,但主构造函数只能存在一个,并且无法编写函数体,不过可以用init编写,下面对象初始化有介绍次要(辅助)构造函数:可以存在多个,并且可以自定义函数体,但是无法像主构造函数那样定义类属性,并且当类具有主构造函数时,所有的次要构造函数必须直接或间接地调用主构造函数。
2025-05-13 16:06:20
1328
1
原创 Kotlin-访问权限控制
在Kotlin中有四个可见性修饰符,分别是: private、protected、internal 和 public。有了访问控制,我们就可以更加明确地表示哪些内容是可以访问的,而哪些是内部使用的。在类、对象、接口、函数以及属性上可以为其添加 可见性修饰符 来控制其可见性。
2025-05-06 15:33:40
558
原创 Kotlin-解构声明
要让一个类的属性支持解构,我们只需添加约定的函数即可。在Kotlin中,我们可以自定义解构出来的结果,也就是定义。解构同样可以用在Lambda表达式中。如果我们不想用前面的参数,可以用。
2025-05-06 11:03:40
527
原创 Kotlin-空值和空类型
即便它是一个可空类型的变量,也要调用成员方法或是获取成员属性。而不去引用某一个具体对象, 此时就需要将变量的类型修改为可空类型,只需要在类型名称的后面添加一个。在Kotlin中, 对空值的处理是非常严格的,正常情况下,我们的变量是不能直接赋值为。Kotlin为我们提供了一种更为安全的空类型操作,更安全地访问可能包含。的,否则无法编译通过, 这直接在编译阶段就避免了空指针问题。变量除了能引用一个具体的值之外,还有一种特殊的值,那就是。,在使用安全调用运算符时,返回一个我们自定义的结果,而不是。
2025-05-05 11:44:48
827
原创 Kotlin-中缀函数
在 Kotlin 里,中缀函数属于一种特殊的函数,它能以中缀表示法来调用,也就是把函数名置于两个操作数之间。在这个例子中,knows 是 Person 类的中缀函数,用于判断两个 Person 对象是否代表同一个人。在 main 函数里,我们使用中缀表示法调用 knows 函数,就像使用运算符一样。
2025-05-04 01:42:28
508
原创 Kotlin-运算符重载函数
在 Kotlin 里,运算符重载函数允许为自定义类型重新定义现有的运算符(如…)行为,从而让自定义类型能像内置类型那样使用运算符。
2025-05-01 21:53:41
869
原创 Kotlin-高阶函数,Lambda表达式,内联函数
内联函数是Kotlin中提供的一种优化性能的机制,通过将函数体的代码直接复制到调用处,减少了Lambda表达式的额外对象创建和函数调用的开销。使用内联函数可以提高程序的性能,并简化代码结构。然而,需要慎重选择内联函数,并注意在必要的情况下使用noinline修饰符来禁止参数的内联关系。
2025-04-29 09:31:27
996
原创 Windows安装Docker Desktop
首先确保自己的电脑打开了虚拟化,可以在BIOS中查看,不同的电脑名字可能不一样,有的是。下载完,在商店里点击打开。第一次打开会设置用户名和密码,然后可以试一下有没有问题。,CPU是AMD的可能是其他名字。右键,以管理员身份运行,一直下一步就安装完成了。第二步,打开"启用或关闭Windows功能"如果显示默认版本为1,则更新wsl,输入命令。这两个选项是必须勾选的,第一个就是。如果更改了配置请重启,不然不生效。查看版本,如果不是2需要更新到2。第四步,检验wsl2安装成功。第三步,安装wsl2。
2024-12-17 11:45:44
637
1
原创 JVM机制
JVM 是 Java Virtual Machine 的简称,意为 Java虚拟机。JVM 是 Java 运行的基础,也是实现一次编译到处执行的关键。虚拟机是指通过软件模拟的具有完整硬件功能的、运行在一个完全隔离的环境中的完整计算机系统。常见的虚拟机:JVM、VMwave、Virtual BoxVMwave与VirtualBox是通过软件模拟物理CPU的指令集,物理系统中会有很多的寄存器JVM则是通过软件模拟Java字节码的指令集,JVM中主要保留了PC寄存器,其他的寄存器都进行了裁剪。
2024-10-27 01:31:21
1060
原创 网络原理 - HTTP/HTTPS
Cookie就是浏览器给网页提供的特定机制,不是让网页随意访问硬盘,而是对硬盘的操作做了特殊的封装,提供了一个/一组特殊的文件,只能在这个特殊的文件里写,并且是键值对的形式。旧地址和新地址之间的映射关系是固定的,浏览器会缓存这样的映射关系,后续再次访问旧地址的时候,浏览器就可以直接构造新地址的请求,减少一次HTTP访问了。存储键值对格式的内容,和query string类似,都是程序猿自定义的,可以根据不同的需求定义不同的数据,增加HTTP的可扩展性,但往往有一个键值对用来标识用户的身份信息。
2024-10-14 19:41:39
1562
原创 测试-BUG篇
工作中开发人员通常需要按照bug的级别来分配优先级来处理bug,除此之外,通过bug级别也能够体现出开发人员的开发质量。测试人员在执行测试的过程中如有发现bug,需要在对应的bug管理平台来创建bug(bug生命起源),创建好的bug需要被开发人员修复,以及测试人员的持续跟踪和测试。描述bug的基本要素:问题出现的版本、问题出现的环境、问题出现的步骤、预期结果、实际结果、bug级别。在心理学上说,人们在编写文档的时候,经常会出现自己想表达的和写出来的内容往往南辕北辙。为什么描述bug还有要素要求?
2024-10-06 17:16:19
1262
原创 网络原理 - TCP/IP
当数据层层分用到TCP这一层时会被放入这个接收缓冲区中,放的过程中,会根据当前数据的序号,判定这个数据是否在队列中存在(或者曾经在队列中存在过),只要存在过,这个数据就会被直接丢弃,不过即使判定出现重复了也会继续返回应答报文,不然发送方继续会认为自己没发送成功而重传。接收缓冲区,除了去重之外,还有一个很重要的功能:针对收到的数据进行排序,并且数据和数据之间的序号始终是连续的,如果后面的数据先到,队首会留有空位等待前面的数据到达。在网络传输的过程中,经常会出现一个情况:后发先至,这是客观存在的改变不了。
2024-09-27 00:12:52
1276
原创 网络编程套接字(含Java示例)
Socket套接字,是系统提供用于网络通信的技术,是基于TCP/IP协议的网络通信的基本操作单元。基于Socket套接字的网络程序开发就是网络编程。操作系统提供的网络编程的API就称为"socket API"
2024-09-01 17:54:06
1067
1
原创 网络原理 - 初识
计算机之间通过网络来传输数据,也称为网络通信。根据网络互连的规模不同,可以划分为局域网和⼴域网。所谓 “局域网” 和 “广域网” 只是⼀个相对的概念。
2024-08-28 23:24:53
1678
原创 HTML 基础
本文介绍了HTML的基本结构和常见标签。HTML是超文本标记语言,通过标签描述网页内容。文章首先讲解HTML文件的基本结构,包括<html>、<head>、<body>等核心标签,以及自动生成的代码框架。然后详细介绍了多种常用标签: 文本标签:标题标签h1-h6、段落标签p、换行标签br、格式化标签(加粗、倾斜等) 多媒体标签:图片标签img及其属性 超链接标签a及其属性 特殊功能标签:注释标签、表格标签、表单标签等 每个标签都配有示例代码和效果展示,便于理解HTML如何构建网页内容和结构。文章还提到标签间
2024-07-11 22:36:37
1131
原创 文件操作和IO
IO包括Input(输入)和Output(输出)数据靠近cpu就是输入,远离cpu就是输出通过控制台读取数据到内存也是输入,把数据打印显示到控制台上也是输出。
2024-07-08 21:05:13
1037
原创 CAS(compare and swap)
CAS的机制是"比较-发现相等-交换"假设存在两个线程 t1 和 t2. 有⼀个共享变量 num, 初始值为 A.接下来, 线程 t1 想使用 CAS 把 num 值改成 Z, 那么就需要先读取 num 的值, 记录到 oldNum 变量中.使用 CAS 判定当前 num 的值是否为 A, 如果为 A, 就修改成 Z.但是, 在 t1 执行这两个操作之间, t2 线程可能把 num 的值从 A 改成了 B, 又从 B 改成了 A (A->B->A)
2024-07-04 23:44:24
938
原创 常见锁策略
读写锁就是把读操作和写操作分别进行加锁.读锁和读锁之间不互斥.写锁和写锁之间互斥.写锁和读锁之间互斥.读写锁最主要用在 “频繁读, 不频繁写” 的场景中.如果获取锁失败, 就会立即再尝试获取锁, 无限循环, 直到获取到锁为止. ⼀旦锁被其他线程释放, 就能第⼀时间获取到锁.优点: ⼀旦锁被释放就能第⼀时间获取到锁, 更高效. 在锁持有时间比较短的场景下非常有用.缺点: 如果锁的持有时间较长, 就会浪费 CPU 资源.
2024-07-03 15:31:07
1184
原创 进程以及多线程编程
一个程序运行起来,在操作系统中,就会出现一个对应的进程。也就是说,进程就是一个跑起来的应用程序我们可以在任务管理器中就把当前运行的所有进程都列出来除了自己运行的程序是进程外,还有一些系统自带的程序也是进程右边显示的那些CPU,内存,磁盘…就是当前进程占用了多少对应的系统资源。要想让一个程序运行,就必须给这个进程分配系统资源,包括不限于CPU,内存,硬盘,网络带宽,显卡…所以在操作系统内部,进程又是操作系统进行资源分配的基本单位。而进程多了就需要进行管理,做法则是先描述,再组织。
2024-07-02 16:59:10
768
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅