
为什么要写测试用例
为什么要写测试用例 作为一名开发人员,你可能会发现周围的开发并不太喜欢写测试用例,甚至有些同学根本不写测试用例,认为写测试用例完全是浪费时间,或者是测试用例只是测试的事情。 在开发过程中,往往都是呼啦啦的写完代码,然后用 Postman 或者 Httpclient 等接口工具请求下接口,看着没问题就提测,然后等测试人员反馈问题。 这大概和职业以及所处的环境有关系,有些是公司没有相关的要求,有些是注重敏捷开发(项目和自己总有一个敏捷),不
29 篇相关内容

为什么要写测试用例 作为一名开发人员,你可能会发现周围的开发并不太喜欢写测试用例,甚至有些同学根本不写测试用例,认为写测试用例完全是浪费时间,或者是测试用例只是测试的事情。 在开发过程中,往往都是呼啦啦的写完代码,然后用 Postman 或者 Httpclient 等接口工具请求下接口,看着没问题就提测,然后等测试人员反馈问题。 这大概和职业以及所处的环境有关系,有些是公司没有相关的要求,有些是注重敏捷开发(项目和自己总有一个敏捷),不

使用 IDEA 快速创建测试用例 在写测试用例中,一般要遵循一些规范,像命名规范、注释规范等等。 像测试用例命名规范,一般建议测试类命名为 ClassNameTest,这样能很好的表示当前测试类对应的是哪个类的测试用例。 对于测试方法的命名建议为 testMethodNameWithXXX 或者 methodNameWithXXX,methodName 很好理解,就是被测试方法的名字,后面为什么加 WithXXX 是因为一个方法的测试用

工作中的设计模式 —— 门面模式 前言 门面模式也叫外观模式,是一种结构型设计模式,能为程序库、框架或其他复杂类提供一个简单的接口。 使用场景 门面模式可以说是在工作中使用非常多的一种设计模式了,比如常用的 slf4j。 下面简单介绍常用的使用场景: 为远程接口设计统一入口 比如需要调用微信支付宝支付,里面一大堆参数,参数什么也不一样,这时候就可以统一封装一个接口,然后小伙伴们使用的时候,只需要调用封装的接口就可以了。 也不用担心同样是

本章教你如何进行一些基础配置,包括:网站标题、站点 logo、侧栏头像、首页分页、评论功能 以下内容为 Halo 的公共设置,和主题无关,可能会随着 Halo 更新发生变化,如果有所差异,可以留言并 @我,进行修改。 主题在设计之初,会复用一些 Halo 自带的部分设置,不会在主题菜单中,所以有些小伙伴会疑惑找不到 logo、标题设置的地方,那是因为他们设置的地方在系统-设置这里。 基本设置 分页设置 列表数量影响着每夜会展示多少文章,

服务器 500 错误 不少小伙伴安装,或者升级主题后会遇到这个情况,原因是因为后台部分配置不适配,或者新的配置没有设置属性。 理论上应该保证升级不受到影响,但是没排查到是什么配置没有设置默认值,后续会尝试解决,避免这种情况。 临时解决办法 后台主题设置,都保存一遍!

在查看本篇文档之前,请确保你已经正确安装 Halo,如果不了解什么是 Halo,可以查看官网:https://halo.run/(https://halo.run/) 下面介绍三种方式安装主题:推荐第三种方式,直接在应用市场插件中安装 下载安装 在 GitHub 直接下载安装 如果小伙伴网络不太好,可以参考下面的方式,从 Halo 应用市场下载 Releases · liuzhihang/halo-theme-hao(https://g

本篇文章会教你如何配置导航栏,最终效果参考如下。 感谢 Lanbin、小孙同学 等同学的贡献(语雀参与编辑)。 标题 1. 进入站点后台 2. 点击左侧面板中的主题 3. 点击上方的导航 4. 修改标题字段即可 主菜单 主菜单即网站导航栏中间部分的菜单 1. 进入站点后台 2. 点击左侧面板中的菜单 3. 点击主菜单 4. 点击右上角的新增 5. 可以通过拖拽调整缩进,从而创建子菜单 6. 填写相应表单即可 标题左侧相关链接 1. 进入

IDEA 自动折叠隐藏 getter setter 小技巧 lombok 大部分小伙伴会推荐 lombok,当然我也使用,加上 @Data、@Getter、@Setter 注解,确实很方便。 但是总有一些原因,可能在开发中并不能使用 lombok,这时候又习惯了 lombok 的清爽,可以通过对 IDEA 进行如下设置以达到同样的效果。 添加 region 操作很简单,选中自己的 get set 方法,然后使用 Command + Op

线程池 ThreadPoolExecutor 原理及源码笔记 前言 前面在学习 JUC 源码时,很多代码举例中都使用了线程池 ThreadPoolExecutor,并且在工作中也经常用到线程池,所以现在就一步一步看看,线程池的源码,了解其背后的核心原理。 介绍 什么是线程池 线程池(英语:thread pool):一种线程使用模式。线程过多会带来调度开销,进而影响缓存局部性和整体性能。而线程池维护着多个线程,等待着监督管理者分配可并发执

正经人谁写 Junit 啊! 前言 这也太敏捷了 你的单元测试呢? 测了几个功能? 代码覆盖率多少? 哦,你说这些啊,我从来不写单元测试! 惊!你这单元测试的姿势都不对,就和打王者一样,同样是玩游戏,有人躺着,有人跪着…… 来,赶紧过来跟着我看看单元测试! 项目分层 一般开发过程中,都是要对项目进行分层的,先来看看阿里巴巴 Java 开发手册中,是如何对项目进行分层的? 当然实际工作中不可能是这样的,再来看看我一般使用的分层: 单元测试

前言 近期小伙伴群里各种反转链表题目,你说这个算法,嗯~ 还挺有意思的! 我也来做一做吧! 1 反转单链表 解题思路 使用两个临时变量,分别标记反转过程中的两个链表的头。 我也就虐虐这种 Easy 的。 2 反转 m 到 n 的链表 解题思路 1. 先定位到 left 和 leftPrev 节点 2. 反转 3. 结束 3 K 个一组翻转链表 还有!一个链表翻来翻去 ……

1. 两数之和 题目 题解 暴力枚举 直接遍历出所有的可能性,一一比较。 很显然这种方式不会很快,因为双层遍历,时间复杂度为 $O(n^2)$。 哈希表 只需要将已经遍历过的值放在 Hash 表中。 K:存放 target - 当前值 V:存放当前 index 这样只需要判断是否在 Hash 表中即可。

题目 题解 - 考察的是位运算 —— 异或(^),相同为 0,不同为 1 - 1^0 = 1,1^1 = 0 - 则直接对数据所有元素执行 ^ 操作,最终的就是结果

题目 题解 方法一 - 直接用哈希表出现 3 次则从哈希表移除,最后剩下的就是结果 方法二 - 其余元素都出现三次,其中某个元素只出现一次,将每个元素都转化为二进制,则可能的结果为 4 个数都相同或者 3 个数都相同 - 同一位结果可能为 0000、1111、0001、1110 - 通过位运算得出所有该位的和,对 3 进行取模则得出结果数字该位的值

题目 题解 - 默认对所有天数填写默认值,即都抽 1 号湖泊 - 用 Map 存储湖泊编号和下雨天的对应关系 - 把所有的空闲日子(不下雨的天数)存起来,注意要使用 TreeSet,因为后面需要进行比较 - 遍历数组 - 不下雨:将 i 天存储到 TreeSet 中,等后面再选择这一天抽哪个湖泊 - 下雨:如果下雨的湖泊已经有水,则判断有水后至今期间有没有空闲日子 - 有空闲:设置那天为抽水,并移除该空闲日子,使用 TreeSet.ce

题目 题解 Map + Map Map + 二维数组

题目 题解 - 直接使用双指针,依次拼接 - 如果指针结束指向同一个数,则再加上该数

题目 题解 题解一 - 直接使用 HashSet 判断 题解二 - 对数组所有元素求异或,得到的值为那两个不同元素的异或结果 - 明确那两个数肯定不同,所以肯定有的位数异或后结果为 1 - 假如第 x 位异或的结果为 1,即所有数的 x 位异或结果为 1 - 找到 x 的最小值 - 现在数组中只有两类数:x 位为 0 的,和 x 位为 1 的,并且这两个不同的数的 x 位还不同 - 通过 & 操作,将数组氛围两类 - 最后问题拆解为 1

题目 题解 必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成 所以只能修改原数组。 题解一: 直接对满足 numsi == val 的值进行依次覆盖即可。 题解二: 元素的顺序可以改变 因为对顺序没有要求,所以可以直接使用数组尾部的值覆盖前面的值。

题目 题解 - i、j、k 可以不连续,所以不能够使用滑动窗口 - $O(n)$ ,空间复杂度为 $O(1)$ 表示只能遍历一次 - 假设 first 和 second 是有序的,且开始 first second 就会满足条件 - first third,则将 first 进行赋值为 third,因为在数组中肯定有比 second 小的数

题目 题解 只要通过遍历获得最大和第二大的数即可。

题目 题解 - 小于 0 肯定不满足条件 - 大于 0 且尾数为 0,则不满足条件 题解一: 直接转换成字符串,然后 reverse 比较一下。但是题目中有写: 进阶:你能不将整数转为字符串来解决这个问题吗? 所以肯定不能使用这种方式! 题解二: - 对数字进行反转 题解三: - 既然是回文数,那就反转一半的数字即可 - 如何知道反转到一半了 - tmp 不断减少位数,当 tmp 小于 res 时,说明反转到一半或者一半过一位了 - 总

推荐一个 Mac 终端终端工具 Warp 在此之前一直使用 iTerm2 经过各种配置,大概样子如下 Warp 可是号称是 21 世纪的终端,看看我配置之后的样子: 1. OneDark 主题 https://github.com/warpdotdev/themes/tree/main/base16 2. workflow 提前将各种常用命令配置成 workflow,双击即可使用,还可以配置占位符变量,我就先配置了 brew 的常用命令

依赖 jar 没有传递,导致找不到类文件而启动失败了 前言 最近频繁遇到找不到类文件错误。 Caused by: java.lang.NoClassDefFoundError:xxx 就这个家伙。 但是我本地启动服务是正常的,前前后后经历了 惊讶 - 疑惑 - 烦躁 - 暴躁 - 心塞 - 欣喜 在短短的小半天内,感觉心情像过了一个过山车+大摆锤,结束了,脑袋都是晕的。 ~~关键是本地是正常的!~~ 现在,请跟随我的视角,来看看这个让人

如何开启 MySQL 事务? 前言 本文主要介绍 MySQL 是如何开启一个事务的,相关资料也可以查阅官方文档。 https://dev.mysql.com/doc/refman/8.0/en/commit.html 方式 1 START TRANSACTION 或 BEGIN 开始新的事务 COMMIT 提交当前事务 ROLLBACK 回滚当前事务 这是大家熟知的一种方式,其中开启事务的方式 start transaction 和 b

为了不写接口文档,我肝了个 IDEA 插件! 前言 写代码的快乐,在于通过一顿猛如虎的操作,实现了自己设计的逻辑流程。~~(也可能并不是很快乐!)~~ 这时候,你以为就可以关机么? 还有接口文档没写呢! 哈? 开始进入无限 CV 模式,各种请求参数、必填非必填、请求返回示例! 几分钟后…… 🤬🤬🤬 我要写个 IDEA 插件,以后再也不想手写文档了! 下面,来看看我肝出来的插件吧! 功能介绍 插件名字必须得先介绍,Doc View,

IDEA 文档插件 DocView 版本更新:修改 UI 并支持 IDEA 2020.3 ! 前言 近期工作开始忙起来,各种忙,连阅读 Spring 源码都暂停了,Doc View 也暂时搁置计划,虽然想有很多功能,但是总是要慢慢来的。 也有几个小伙伴在 github 提了 Issues: - 希望支持 IDEA 2020.3 - 也有 bug 反馈说参数列表显示不全 当然就只有两个 Issues …… 也是没几个人用的原因。 下面看一

https://cdn.jsdelivr.net/gh/liuzhihang/oss/pic/wechat.jpg https://purge.jsdelivr.net/gh/liuzhihang/oss/pic/wechat.jpg style="background-image: url('https://cdn.jsdelivr.net/gh/liuzhihang/oss/pic/banner/wallhaven-oxjmy9.j

前言 相信小伙伴一定用过 @Transactional 注解,那 @Transactional 背后的秘密又知道多少呢? Spring 是如何开启事务的?又是如何进行提交事务和关闭事务的呢? 画图猜测 在开始 debug 阅读源码之前,小伙伴们应该已经知道 MySQL 是如何开启事务的(https://mp.weixin.qq.com/s/UgNvOl0RF9v7w7dOLMnglw)。 因此可以得出猜测: 那下面跟着源码一起读一读,S