自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(77)
  • 收藏
  • 关注

原创 Mockito

这些传参方法是Mockito框架中用于创建“任意匹配器”的工具,它们在编写单元测试时非常有用,特别是当我们要验证方法被调用时的参数类型和数量,而不关心具体的参数值时。用途:@EnumSource 专门用于为参数化测试提供枚举类型的值。如果某个 @BeforeEach 方法执行失败(抛出异常),仅影响紧随其后的那个测试方法,其他测试方法仍会尝试执行各自的 @BeforeEach 方法。@BeforeEach 注解的方法不能是静态的,因为它们与每个测试方法的执行紧密相关,通常需要访问非静态的成员变量或方法。

2024-04-22 15:56:16 810

原创 如何将对象转换成json字符串,以json格式输出,并获取到其中的特定字段

综上所述,这段代码的作用是:使用 Gson 库的 GsonBuilder 创建一个开启了美观打印模式的 Gson 实例,然后使用这个实例将 student 对象序列化为格式化的 JSON 字符串,并最终将该 JSON 字符串输出到控制台。这样做的目的是以易于阅读的格式显示 student 对象的 JSON 表示。“menu” 键对应的值是一个对象,其中 “popup” 键对应的值又是一个对象,而这个对象的 “menuitem” 键对应的值则是一个数组,数组中的每个元素都是一个描述菜单项的 JSON 对象。

2024-04-12 15:16:48 885

原创 如何遍历map

由于map集合中的元素没有索引, 因此不能使用普通for循环对其进行遍历, 因此考虑使用for-each对其进行遍历, 但是只有继承了iterable接口的类才能使用for-each进行遍历, 因此使用for-each进行遍历的方法也行不通, 更不用说使用迭代器进行遍历了.因此, 遍历map集合通常需要将map集合转换成set或者List集合, 然后对其进行遍历, 实际上更常见的是转换成set集合.

2024-03-17 22:28:08 355

原创 为什么Comparable接口比Comparator接口对类的侵入性强

在这个例子中,为了让Employee支持默认排序,我们必须修改Employee类以实现Comparable接口,并在compareTo()方法中定义具体的比较逻辑。在这个例子中,我们没有修改Employee类本身,而是通过创建两个实现了Comparator接口的匿名内部类,分别用于按年龄和职位级别排序。这样,当排序需求改变时,只需调用不同的Comparator即可,无需改动Employee类的代码,因此Comparator接口相对于Comparable接口来说,其侵入性较弱。// 按照职位级别排序。

2024-03-16 13:35:45 363 1

原创 测试分类篇

冒烟测试的对象是每一个新编译的正式测试的软件版本, 也就是测试此次开发新加的需求, 目的是确认软件本次新加的主要功能和核心流程正常. 回归测试和冒烟测试都属于系统测试, 但是冒烟测试在正式进行系统测试之前进行, 由开发人员先进行冒烟测试, 然后由测试人员进行冒烟测试. 冒烟测试通过之后, 测试人员开始正式的系统测试.回归测试是指修改了代码之后, 重新进行测试确认修改没有引入新的错误或导致其他代码产生了错误. 软件开发的各个阶段会多次进行回归测试, 随着系统的逐步完善, 回归测试的成本也会逐渐扩大.

2024-01-07 22:05:18 1005

原创 测试用例设计

黑盒测试用例测试方法: 按需求设计测试用例法, 等价类划分法, 边界值法, 判定表.

2024-01-05 20:14:57 887

原创 测开专业术语

注意在执行测试时, 不能拘泥于测试用例或已有的测试方法, 要根据自己的直觉进行随机测试, 有时可以发现测试用例无法发现的缺陷. 同时要多总结测试方法和测试故障模型.当开发人员与测试人员之间产生了争执, 不应该互相推卸责任, 要以解决问题作为第一要义.需求分析, 测试计划, 测试设计/测试开发, 测试执行, 测试评估。open: 测试人员将问题指派给开发人员。rejected: 开发人员否认问题.fixed: 开发人员已修复问题。new : 测试人员发现问题。close: 问题已修复。reopen: 打回。

2024-01-03 15:14:44 862

原创 测开基础概念

本文介绍测试相关基础概念, 常见开发模型和测试模型.所谓软件测试, 就是验证软件产品特性是否满足用户的需求. 根据需求定义的预期结果, 验证软件功能执行的正确性, 保障软件的质量.需求分为用户需求和软件需求(功能需求)用户需求: 用户需求是终端用户在使用产品时必须要实现的任务, 或是甲方提出的需求.软件需求: 在软件需求中会详细描述开发人员必须完成的软件功能可以理解为用户需求就是一句话, 而软件需求是一个文档, 用来详细描述用户需求应该如何实现.

2024-01-02 18:43:44 806

原创 Bean作用域和生命周期

在之前的文章中我们知道, Spring是一个存放Bean的IoC容器, 这个容器的两大核心功能是存Bean和取Bean. 今天来详细了解一下Bean的作用域和生命周期.以前我们接触到的作用域说的是变量的可作用范围. 而今天要讲到Bean的作用域不同于之前的作用域, Bean的作用域说的是一个Bean在整个Spring框架中的行为模式. 行为模式有六种. 也就是作用域有六种. 下面将具体介绍这六种行为模式(作用域).

2023-12-09 09:33:57 808

原创 Spring 依赖注入的三种方式优缺点

在前面的文章中介绍了基于注解的方式将Bean存储到Spring中, 接下来介绍如何基于注解的方式从Spring中取对象, 也就是实现DI依赖注入. 本篇文章将会介绍三种依赖注入的方式, 分别是属性注入Setter注入和构造方法注入. 并介绍其各自优缺点.综上, 依赖注入的实现方式有以上三种. 分别是属性注入, Setter注入和构造方法注入.属性注入的写法最简单, 使用频率最高. 但缺点也很明确.Setter注入适用于注入可变对象的场景.

2023-12-07 19:49:05 1128

原创 Spring基于注解存储对象

上一篇文章中已经介绍了在Spring中存储Bean和取Bean的方法. 而在 Spring 中想要更简单的存储和读取对象的核⼼是使⽤注解. 这篇文章介绍如何基于注解存储对象。

2023-12-07 17:35:46 428

原创 Spring IoC如何存取Bean对象

控制反转. 所谓控制, 就是控制对象的生命周期. 对象的生命周期由创建这个对象的类控制. 有时对控制权进行反转, 可以起到很好的编程效果, 从而完成特定的功能.例如: 创建了一个对象, 称为对象1, 对象1要依赖于对象2, 对象2要依赖于对象3.如果在对象1中创建对象2, 在对象2中创建对象3. (也就是对象3的控制权在类2中, 对象2的控制权在类1中)当改变一个类的构造方法时, 如在构造方法中增加参数, 同时也需要对依赖这个类的类中的代码进行修改.

2023-12-07 10:44:11 435

原创 Linux常用命令

本篇文章只介绍最常用的linux命令.所有的linux命令都是特定的可执行文件. 这些可执行文件存储在根目录下, 也就是说如果把根目录删除了, 当前的操作系统就是一个废系统,执行不了任何命令, 需要重装系统来解决.

2023-12-02 17:11:03 832

原创 Servlet知识汇总

父类的父类的方法. 这三个方法通常不需要我们重写, 也就是不需要我们显示调用, servet容器(此处的servlet容器就是。添加一个带有给定的名称和值的 header. 如果 name 已经存在, 不覆盖旧的值, 并列添加新的键值对。), 但是在window系统上可能会会有点bug, 这是由于操作系统提供的目录检索api造成的.设置一个带有给定的名称和值的 header. 如果 name 已经存在, 则覆盖旧的值.. 我们知道main方法是程序启动的入口. 相当于一辆车的发动机. 而。

2023-11-26 18:21:07 876

原创 SSL加密

SSL表示安全套接层,是一个用于保护计算机网络中数据传输安全的协议。SSL通过加密来防止第三方恶意截取并篡改数据。在实际应用中,SSL的继任者是TLS,通常用SSL来泛指这类安全协议。以下做具体介绍。本篇文章并不是具体的介绍密码学,密码学是一个极其复杂的学科。说到这里,就不得不提起图灵这位在计算机科学、密码学、人工智能等领域都有所成就大佬了。

2023-11-17 19:41:28 525

原创 HTTP协议

HTTP是应用层中最广泛使用的协议之一,HTTP基于传输层的TCP协议,用于浏览器和web服务器之间进行交互。浏览器将符合HTTP协议格式的数据填入传输层的socket 发给服务器,服务器进行响应。URL是唯一资源定位符,俗称网址。协议名:// 服务器地址(ip地址): 端口号 / 带层次的文件路径?查询字符串。在上面搜狗的URL中,省略了端口号和查询字符串,‘/’ 代表的是根目录。当省略了端口号时,浏览器会根据协议名提供一个默认端口号。如果是HTTP则默认端口号是80。

2023-11-15 15:59:02 51

原创 前端通过导入editor.md库实现markdown功能

下载editor.md到本地将本地editor导入到前端代码中编写少量代码对其进行初始化但是还需要注意的一点是,editor.md要依赖于jquery。jquery是一个被广泛运用于前端的库,我们需要先将jquery下载到本地。这样就实现了一个简易的markdown功能了。--这里用id是为了与markdown编辑器对接--> < script > var editor = editormd("editor" , {

2023-11-11 16:54:58 342

原创 网络层重要协议 --- IP协议

当一个私网ip要访问公网ip时,经过NAT设备(路由器)进行地址转换之后,就会将私网ip映射成一个公网ip,同一个内网中的设备映射的公网ip是相同的。当公网ip收到内网ip的访问时,虽然无法得知访问者的内网ip是多少,但是知道了访问者的公网ip和端口号,将响应发送给访问者的公网ip,公网ip的路由器会根据端口号来区分具体响应的是哪个主机,从而完成通信。,在路由表中保存了周围设备的信息,当ip数据报经过一个路由器时,都会查看路由器的路由表,根据自己的目标ip看一下自己的下一站应该去哪个ip。

2023-11-05 16:32:29 167

原创 护网蓝队初级面试题摘录(下)

这种方法也是使用 token 并进行验证,和上一种方法不同的是,这里并不是把 token 以参数的形式置于 HTTP 请求之中,而是把它放到 HTTP 头中自定义的属性里。通过 XMLHttpRequest 这个类,可以一次性给所有该类请求加上 csrftoken 这个 HTTP 头属性,并把 token 值放入其中。

2023-11-05 11:48:38 366

原创 TCP协议

TCP协议是一个很复杂的协议,本篇文章有万余字,各位看官可以根据目录跳转到自己想要的模块。TCP中的校验和,序列号,确认应答,超时重发,连接管理,流量控制,拥塞控制来保证可靠性。滑动窗口,快速重传,延迟应答,捎带应答来提高性能。TCP机制还有很多,如果想查看更多详细内容,建议去RFC标准文档进行参考学习,以下给出文档链接。

2023-11-03 18:35:24 163

原创 UDP协议

生活中要实现的业务流程是多种多样的, 使用现有的统一的应用层协议不足以完成业务需求, 因此需要自定义应用层协议首先需要结合业务需求确认请求响应(客户端和服务器之间传递)的是哪些数据然后约定好传递的数据的格式, 这样是为了客户端和服务器之间传递的数据能够相互解析目前典型的数据格式有以下三种XML 标签化的数据组织格式, 使用标签来表示键值对和树结构, 标签名字和内容是由自己指定的, 然后代码中赋予标签名字所表示的含义

2023-10-31 21:31:35 209

原创 基于UDP/TCP的网络通信编程实现

那么问题又来了, 如果频繁的这样频繁的创建销毁线程产生的开销是很大的, 这可以用多线程来解决. 也就是为一个部门接入多台电话. 每个电话对应一个接听人. 转接员在转接时, 看下哪个电话是空闲着的, 就将电话转接给它, 由该电话对应的接听人对拨打人进行服务。放在主线程中, 每次连接后在新线程中进行通信, 这就相当于是转接员的任务依旧是将电话转接给接听人, 该部门的人收到转接员的接听通知时, 就在部门中新接一个电话, 通话结束后再将电话移出去, 从而实现该部门同时可以为多个拨打人提供服务。

2023-10-29 18:39:52 608

原创 计算机网络概述

再谈到协议分层, 对应着TCP各层有着各层的协议, 对协议进行分层不仅可以降低学习, 运维成本, 而且可以单独对一层的协议进行修改, 只需要对接好两层间的接口即可(无需了解相邻层协议的具体实现, 只需要了解接口即可).生产计算机的厂商有很多, 操作系统的类型也不止一个, 生产网络通信设备的厂商也有很多, 虽然他们生产的设备各式各样, 但是都会遵循同一个协议, 从而确保不同的设备间可以顺利通信.网络的通信通常是由两个或多个进程间进行的. 不同的主机或服务器有不同的。. 互相通信的主机要遵循相同的。

2023-10-26 14:18:10 944

原创 IO文件操作

因为计算机每次访问硬盘都要消耗一定的时间, 无参的read方法每次访问硬盘只读一个字节的内容, 而有参的read方法每次访问硬盘可以读数组长度个字节的内容。这里讨论的是狭义上的文件, 文件是储在硬盘上的, 和之前的代码中的变量不同, 变量存储在内存中, 从内存中读取数据到CPU上相对来说比硬盘要简单./(本目录的上级目录)来表示路径。IDEA工作目录是当项目所在的目录, 之后代码中出现的相对路径都是对应该工作目录.相比于无参的read方法, 有参的read方法的。的信息, 图片, 音频, 代码等。

2023-10-24 23:10:07 414

原创 多线程环境下如何安全的使用线性表, 队列, 哈希表

读频繁, 不经常写入。

2023-10-21 21:01:20 205

原创 多线程抽象知识汇总

比较并修改, 将内存中的值和寄存器中的值相比较, 如果一致, 则用另一值来更新内存中的值, 这看似是两步操作, 但实际上CAS是一个原子操作. 既然是原子操作就可以用来代替上锁解决一些并发安全问题, 避免了传统上锁机制带来的性能问题.锁策略是针对多线程和并发编程来说的, 它主要是管理多个线程访问同一共享资源, 即发生锁竞争时该怎么办, 不同的锁策略会影响性能和并发程度, 以下介绍几种锁策略。乐观锁和悲观锁并不是具体的锁, 而是两类锁, 是根据预测的锁竞争激烈程度的结果来定义乐观锁和悲观锁的。

2023-10-20 22:18:49 148

原创 线程安全案例 --- 线程池

线程池是对线程进行管理和复用的机制. 在程序中创建一组线程, 当有任务需要执行时, 随机分配任务给空闲线程. 而不单独为一个任务创建线程, 这提高了线程的利用率, 减小了线程使用时创建和销毁的开销.线程池的管理结构, 线程对象状态, 线程队列保存在java虚拟机的堆中, 包括了ThreadPollExecutor中的字段. 而线程执行时的线程状态, 栈信息保存在内存中.

2023-10-16 21:46:54 68

原创 线程安全之wait的虚假唤醒 --- 没有调用notify就被唤醒

所谓虚假唤醒,是指线程调用wait方法, 在没有收到明确的通知(notify)的情况下被唤醒。

2023-10-14 22:45:36 287

原创 线程安全实例 --- 计时器

2. 还需要一个数据结构来存储注册的任务, 可以用优先级阻塞队列, 以时间为优先级(注意这里指定以时间为优先级需要先实现Compareable, 并重写ComparaTo)– 4. 实现schedule方法, 在该方法中调用MyTask通过传参的方式初始化MyTask, 并将该节点加入到队列中。计时器的功能是在指定的时间执行指定的方法, 可以直接调用java标准库中的方法, 实现计时器。– 3. 为了描述队列上的每一个节点, 还需要写一个类, 这个类里面有两个变量.

2023-10-13 18:48:46 132

原创 线程安全案例 --- 阻塞队列

当队列中没有元素时执行出队的操作, 会使线程陷入阻塞. 直到另一个线程在队列里增加元素(使得队列不为空).当队列已经满了还要往队列里增加元素时, 也会陷入阻塞利用阻塞队列的特性, 可以实现一个生产者消费者模型实现生产者和消费者间的解耦合削峰填谷, 保证系统稳定性。

2023-10-12 21:33:20 134

原创 单例模式中的线程安全问题

在一个类只用来创建一个实例的场景中, 利用java现有语法, 使得一个类只能被用来创建一个实例(对象).

2023-10-10 23:31:35 477 2

原创 线程安全问题 --- 内存可见性问题

所谓内存可见性, 就是当两个线程同时访问一个变量, 其中一个变量发生变化时, 另一个线程能够及时获取该变量的最新值,注意区分这里的内存可见性和之前的脏读, 不可重复读那么内存安全性问题便是当两个线程同时访问一个变量, 其中一个变量发生变化时, 另一个线程无法获取该变量最新值, 这个问题要使用volatile来解决。

2023-10-09 23:14:40 389

原创 线程安全问题 --- 死锁

所谓死锁就是线程进入了阻塞状态且无法由阻塞状态转为可执行状态。

2023-10-09 13:45:48 91

原创 初始多线程

为了解决并发编程问题, 引入了进程, 但是由于进程在创建, 销毁, 调度时的开销太大(主要是资源分配和释放), 所以又引进了线程线程省下了资源分配和释放, 多个线程共用进程中的同一资源(意味着多个线程只需进行一次资源分配, 资源分配以进程为单位, 一个进程包含多个线程一个进程至少包含一个线程, 可以包含多个线程线程是系统调度执行的基本单位, 进程是系统资源分配的基本单位, 进程中的第一个线程在启动时是和进程一起启动的, 所以第一个线程在启动时需要申请资源, 但是之后的线程不需要。

2023-10-07 10:03:39 54

原创 操作系统与进程简介

操作系统是一个管理软件, 对下管理硬件设备, 对上要给计算机软件运行提供良好环境硬件设备: cpu(控制器, 计算器), 内存, 输入输出设备等驱动程序: 硬件厂商除了提供硬件, 还会提供一个驱动程序, 只有给计算机安装了驱动程序, 计算机才能正确识别该硬件系统内核: 操作系统, 向下管理硬件设备,向上为软件运行提供环境系统调用: 操作系统为应用程序提供的api接口, 程序想要操作硬件设备, 首先通过系统调用将程序指令告诉操作系统内核, 操作系统内核通过驱动程序去操作硬件应用程序: app。

2023-09-23 16:15:32 41

原创 java的jdbc编程

jdbc提供了一套共用的api, 其自身包含了不同数据库的api, jdbc只管怎么用,具体实现需要靠不同厂商的驱动包, 因此再使用jdbc实现mysql编程时, 就需要先下载mysql提供的驱动包。jdbc屏蔽了不同数据库的原生api,共用一套api来规范实现不同数据库的编程操作。

2023-09-21 22:28:39 37

原创 mysql索引与事务

重要:隔离的四个级别以及脏读, 不可重复读, 幻读的问题。

2023-09-20 21:46:42 12

原创 mysql语句的复杂使用

自连接可用来解决一些特殊的问题, 如比较行与行之间的数值的大小, sql语句只能比较同行不同列的数据,想要比较同列不同行的数据,只能将不同行的数据转换成同一行, 即将行与列进行转换, 此时可用自连接,自连接相当于一个奇淫巧计。所谓聚合查询就是进行行与行之间的运算,之前的带有表达式的查询进行的是列于列之间的运算。与之前写法不同之处在于之前的写法只能实现内连接,而这种写法还能实现外连接。多表查询会产生很多的无效组合, 用来筛选有效数据的条件叫连接条件。查询成绩总分和个人信息(聚合查询和多表查询结合使用)

2023-09-20 10:02:05 59

原创 mysql数据库表的设计

实体关系为一对一的两个实体,可以设计在同一个表中,也可以设计在两个表中,通过外键来约束并建立联系.以下将详细介绍数据库的设计。

2023-09-16 23:11:50 36

原创 mysql数据库基本操作

timestamp是以时间戳的方式来计算时间的,所谓时间戳就是从1970年1月1日起到现在经过了多少秒,计算机中存储的就是四字节的时间戳,然后格式化成时间格式呈现出来,因为四字节最大只能是42亿九千万秒,所以到2038年时间戳就会用尽。创建表之前,必须先选中数据库, 同一个数据库中的表名不能相同,列名和表名不能是关键字,如果表名需和关键字冲突,需给表名加反引号`, 数据库中注释可用comment,或者-- (杠杠空格), comment只能在创建表时使用;

2023-09-15 17:04:51 67

空空如也

空空如也

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

TA关注的人

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