自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

立志成为一个前端、后端、测试全方位发展的程序员

分享一些学习、工作过程中的技术总结

  • 博客(217)
  • 资源 (4)
  • 收藏
  • 关注

原创 REST-assured接口测试框架详解

什么是接口测试本质上基于某种协议,发送请求给服务器,服务器返回响应数据,对响应数据进行分析,判断和我们的预期是否一致,从而验证功能是否正确。为什么做接口测试更早发现问题,降低研发成本减少回归测试人力成本与时间,快速的质量反馈更容易实现持续集成接口自动化测试流程理解业务需求分析接口测试范围接口测试用例设计接口测试框架选择,常见的如RestAssured接口测试用例编写框架与用例维护持续集成。......

2022-07-25 15:23:03 1368 2

原创 TestNG自动化测试框架详解

TestNG是一款设计测试用例执行流程的测试框架,本文从初学者的角度详细介绍此框架的使用与配置。

2022-07-19 09:58:08 5404

原创 Vue 全套教程(三),入门 Vue 必知必会

Vue 全套教程的第三部分,本部分主要讲述监视数据原理、收集表单数据、过滤器、内置指令、自定义指令等内容

2022-06-28 10:25:26 2338 4

原创 Vue 全套教程(二),入门 Vue 必知必会

Vue 全套教程的第二部分,本部分主要讲述监视属性、绑定样式、条件渲染(v-if 和 v-show)、列表过滤、列表排序等内容

2022-06-17 17:11:38 2269 3

原创 Vue 全套教程(一),入门 Vue 必知必会

Vue 全套教程的第一部分,这部分主要介绍了Vue的概念,基本指令、事件操作、MVVM模型、数据代理、计算属性等内容

2022-04-13 10:06:28 36659 8

原创 Jenkins部署Spring Boot项目详细过程

Jenkins部署Spring Boot项目文章目录Jenkins部署Spring Boot项目一、Jenkins介绍二、Jenkins安装和部署三、Jenkins汉化(可选)四、Jenkins安装插件五、Jenkins全局配置六、Jenkins新建项目七、Jenkins配置项目八、Build Now九、查看控制台输出想要通过 Jenkins 部署 Spring Boot 项目,部署的机器必须已经安装 JDK、Git、Maven。Linux安装Git:Linux安装Git详细步骤Linux配置Jav

2022-03-21 10:00:00 7137 3

原创 持续集成、持续交付、持续部署(CI/CD)详细介绍

CI/CD详细介绍文章目录CI/CD详细介绍一、集成(Integration)二、持续集成(Continuous Integration)三、持续交付(Continuous Delivery)四、持续部署(Continuous Deployment)一个完成的系统所经历的大概过程:产品设计-> 开发人员开发代码 -> 测试人员测试功能 -> 运维人员发布上线。一、集成(Integration)在实际的软件开发中,常常会有如下两种场景:现在有一个电商平台需要开发,由于电商平

2022-03-19 11:44:58 3890

原创 Linux安装Git详细步骤

Linux安装Git安装编译 Git 所需要的依赖:yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker安装编译源码所需依赖的时候,yum 自动安装了 Git,需要先卸载这个旧版的 Git:yum -y remove git下载 Linux 下 Git 的安装包,地址:https://mirrors.edge.kernel.org/pu

2022-03-16 16:37:36 7956 4

原创 git cherry-pick指令详解

git cherry-pick指令如果想要将某一分支的代码转移到另外一个分支,常见的做法是 merge 或者 rebase 指令,但是如果想要将某一分支的某次(或某些)提交转移到另外一个分支,就需要使用 cherry-pick 指令。文章目录git cherry-pick指令一、转移某次提交二、转移某些提交三、代码冲突3.1 --continue3.2 --abort3.3 --quit一、转移某次提交比如仓库中有 master、feature-new 和 feature-old 分支,如下图所示:

2022-03-03 22:13:14 3959 1

原创 Leetcode(力扣)超高频题讲解(三)

高频题(三)目录:Leetcode(力扣)超高频题讲解(一)Leetcode(力扣)超高频题讲解(二)文章目录高频题(三)一、螺旋矩阵II(59)二、螺旋矩阵(54)三、岛屿的最大面积(695)四、岛屿数量(200)五、反转链表II(92)六、用栈实现队列(232)七、用队列实现栈(225)1. 两个队列2. 一个队列八、二叉树的右视图(199)1. BFS2. DFS九、链表中倒数第K个节点(剑指Offer22)十、链表的中间节点(876)1. 奇数返回中点,偶数返回上中点2. 奇数返回中点,偶数

2022-02-08 12:01:31 530

原创 Leetcode(力扣)超高频题讲解(二)

高频题(二)目录:Leetcode(力扣)超高频题讲解(一)文章目录高频题(二)一、相交链表(160)1. 双指针2. 哈希表二、二叉树的先序、中序、后序遍历(144、94、145)1. 前序2. 后序3. 中序三、二叉树的层序遍历(102)四、二叉树的锯齿形层序遍历(103)五、买卖股票的最佳时机(121)1. 暴力解法2. 一次遍历六、有效的括号(20)七、字符串相加(415)八、合并两个有序数组(88)1. 合并后排序2. 双指针(从前往后)3. 双指针(从后往前)九、二分查找(704)十、搜索

2022-01-27 18:30:36 646

原创 Leetcode(力扣)超高频题讲解(一)

高频题(一)文章目录高频题(一)一、反转链表(206)1. 双指针迭代2. 递归二、无重复字符的最长字串(3)三、LRU缓存机制(146)1. 题目描述2. LRU算法的介绍3. 数据结构的选择4. 代码实现四、数组中的第k个最大元素(215)1. 快排变形2. 大顶堆五、K个一组翻转链表(25)六、两数之和(1)1. 一遍哈希表2. 两遍哈希表七、三数之和(15)八、环形链表II(142)1. 哈希表2. 快慢指针九、环形链表(141)1. 哈希表2. 快慢指针十、合并两个有序链表(21)1. 递归2.

2022-01-21 18:24:28 1175

原创 解决异常 java.net.URISyntaxException: Illegal character in query at index

在String型的url中包含("&"、"|"、"-")这些字符直接用HttpClient请求就会报错URISyntaxException: Illegal character。解决方式:不能直接用String代替URI来访问。必须采用%0xXX方式来替代特殊字符(转义)。但这种办法不直观。所以只能先把String转成URL,再能过URL生成URI的方法来解决问题。代码如下:String strUrl = "http://baidu.action?key2=xxxxx";URL url

2022-01-21 18:16:53 14971

原创 Elasticsearch 基本操作 ---- Java API 方式

Elasticsearch基本操作文章目录Elasticsearch基本操作一、访问ES服务器二、索引操作2.1 创建索引2.2 查看索引2.3 删除索引三、文档操作3.1 创建文档3.2 修改文档3.3 查询文档3.4 删除文档四、批量操作4.1 批量插入文档4.2 批量删除文档4.3 查询操作一、访问ES服务器1. 导入依赖<!-- elasticsearch的客户端 --><dependency> <groupId>org.elasticsearc

2021-12-20 11:22:59 1473 1

原创 Elasticsearch介绍及基本操作 ---- HTTP协议方式

Elasticsearch基本操作文章目录Elasticsearch基本操作一、概述1.1 正排索引和倒排索引二、安装程序三、HTTP操作3.1 索引操作3.1.1 创建索引3.1.2 查看索引3.1.3 删除索引3.2 文档操作3.2.1 创建文档3.2.2 查看文档3.2.3 修改文档3.2.4 删除文档3.3 多种查询方式3.3.1 条件查询3.3.2 全量查询3.3.3 分页查询3.3.4 多条件查询3.3.5 范围查询3.3.6 全文检索3.3.7 完全匹配3.3.8 聚合查询3.3.9 映射关

2021-12-18 18:16:36 2151

原创 git修改分支名称

git修改分支名称假设分支名称为oldName想要修改为 newName1. 本地分支重命名(还没有推送到远程)git branch -m oldName newName2. 远程分支重命名 (已经推送远程-假设本地分支和远程对应分支名称相同)a. 重命名远程分支对应的本地分支git branch -m oldName newNameb. 删除远程分支git push --delete origin oldNamec. 上传新命名的本地分支git push origin newN

2021-12-14 12:04:37 13503

原创 git rebase 指令的使用,对比 merge 命令

git rebase指令文章目录git rebase指令一、基本使用模拟日常开发方式一:git merge方式二:git rebase总结二、-i 参数合并commit三、补充指令一、基本使用github上新建一个项目默认有master分支(注意:现在的Github默认创建的分支是main分支)将项目clone到本地模拟日常开发A同学操作执行git log可以看出此时该项目仅有一次提交记录新增文件,执行commit、push操作刷新Github,发

2021-12-14 12:00:46 622

原创 Git从某一分支创建一个新的分支

将远程仓库的代码clone到本地git clone 将分支切换到想要创建新分支的分支git checkout 想要创建新分支的分支在当前分支创建一个新的分支git checkout -b 新分支名称将本地代码push到远程仓库git push origin 新分支名称此时远程仓库成功出现新分支......

2021-12-13 12:32:39 3878

原创 MongoDB的使用及CRUD操作

MongoDB文章目录MongoDB一、基本介绍二、增删改查操作2.1 创建文档2.2 读取文档2.2.1 读取全部文档2.2.2 匹配查询2.2.3 比较操作符2.2.4 逻辑操作符2.2.5 字段操作符2.2.6 数组操作符2.3 文档游标2.4 更新文档2.5 删除文档2.6 删除集合一、基本介绍概念MongoDB是存储JSON文档的非关系型数据库,结构如下图:一个数据库中有很多集合,一个集合中有很多文档。运行使用Docker运行MongoDB:docker run --name m

2021-11-17 21:34:21 1010 4

原创 Vue CLI 前端脚手架的使用

Vue CLI文章目录Vue CLI一、介绍二、安装2.1 环境准备2.2 安装脚手架2.3 创建脚手架项目2.4 开发步骤三、脚手架中使用Axios四、脚手架项目打包和部署4.1 打包静态资源4.2 Nginx代理静态资源一、介绍概念Vue CLI 是一个基于 Vue.js 进行快速开发的完整系统。使用 Vue 脚手架之后开发的页面将是一个完整系统 (项目)。二、安装2.1 环境准备首先下载node.js,自带npm,进行镜像配置等操作完成配置。2.2 安装脚手架# 卸载脚手架npm

2021-11-09 21:04:39 3017

原创 Linux之Shell编程详解

Shell编程文章目录Shell编程一、Shell介绍二、Shell脚本的执行方式三、Shell的变量1. Shell变量介绍2. 自定义变量四、设置环境变量五、位置参数变量六、预定义变量七、运算符八、条件判断九、流程控制1. if语句2. case语句3. for循环4. while循环十、读取输入十一、函数1. 系统函数2. 自定义函数十二、Shell工具1. cut2. sed3. awk4. sort一、Shell介绍Shell是一个可以让用户向Linux内核发送命令以便运行程序的命令行解释器

2021-10-26 22:59:19 9544 3

原创 IDEA中使用Git

IDEA中使用Git文章目录IDEA中使用Git一、基本流程1. IDEA集成Git2. 初始化本地库3. 添加到暂存区4. 提交到本地库二、拉取和推送资源三、克隆远程库到本地四、解决冲突一、基本流程1. IDEA集成Git2. 初始化本地库2.1 选择创建本地库2.2 选择本地库位置3. 添加到暂存区3.1 方式一:3.2 方式二:4. 提交到本地库4.1 选择对应选项4.2 进行详细设置4.3 查看对应的日志4.4 对本地库的文件进行修改4.5 重新add

2021-10-23 19:23:12 275

原创 抓包工具Fiddler的使用

抓包工具Fiddler的使用文章目录抓包工具Fiddler的使用一、抓包简介二、Fiddler原理三、Fiddler使用3.1 抓包3.2 删除请求3.3 过滤请求3.4 修改请求/响应3.5 自动响应3.6 弱网测试3.7 抓取HTTPS请求一、抓包简介通过抓包工具可以截取网站的请求与返回信息,帮助测试进行BUG定位与描述通过抓包工具可以修改请求信息,绕过前端页面的限制(比如前端限制账号输入只能是8位,如果直接在前端页面输入非8位的账号,前端提示错误并拦截,无法将非8位的账号提交到服务端,导致无

2021-10-14 19:56:22 345

原创 Python基本数据类型及基本运算

Python基本数据类型及基本运算文章目录Python基本数据类型及基本运算一、注释二、基本数据类型三、不同类型的转换四、对字符串的操作五、对列表的操作六、对元组的操作七、对字典的操作八、对集合的操作九、基本运算符一、注释单行注释:Python中单行注释以 # 开头,例如:# 这是一个注释多行注释:Python中多行注释用三个单引号 ''' 或者三个双引号 """ 将注释括起来,例如:'''这是多行注释,用三个单引号这是多行注释,用三个单引号 这是多行注释,用三个单引号'''"

2021-10-06 21:25:42 411

原创 Web攻击之CSRF和SSRF

文章目录WEB攻击一、CSRF1. 举例2. 漏洞防御方式2.1 验证Referer字段2.2 在请求地址中添加token并验证二、SSRF1. 举例2. 漏洞防御方式3. 二者的区别WEB攻击一、CSRF1. 举例通过对银行的网站发送请求 “http://bank.example/withdraw?account=bob&amount=1000000&for=bob2”可以使 Bob把1000000块的存款转到Bob2的账号下。黑客自己做一个网站,在网站中放入如下代码: src=“

2021-08-27 16:14:57 256

原创 HTTP的缓存控制

HTTP的缓存控制文章目录HTTP的缓存控制1. 服务器的缓存控制2. 客户端的缓存控制3. 条件请求3.1 Last-Modified / If-Modified-Since3.2 Etag / If-None-Match由于网络时延不可控,浏览器使用 HTTP 从服务器获取资源的成本较高。所以,非常有必要把“来之不易”的数据缓存起来,下次再请求的时候尽可能地复用而不必去服务器中查找。这样,就可以避免多次请求 - 应答的通信成本,节约网络带宽,也可以加快响应速度。1. 服务器的缓存控制缓存使用的流

2021-08-12 10:08:51 713

原创 HTTP协议传输大文件及断点续传的方式

HTTP传输大文件及断点续传的方式文章目录HTTP传输大文件及断点续传的方式1. 数据压缩2. 分块传输3. 范围请求及断点续传4. 多段请求1. 数据压缩通常浏览器在发送请求时都会带着 “Accept-Encoding” 头字段,里面是浏览器支持的压缩格式列表,例如 gzip、deflate、br 等,这样服务器就可以从中选择一种压缩算法,放进 “Content-Encoding” 响应头里用来标识这次传输使用的压缩算法,再把原数据压缩后发给浏览器。优缺点:数据压缩在处理文本的时候效果还是很好的

2021-08-11 12:17:33 2703

原创 HTTPS协议的加密过程

HTTPS协议的加密过程文章目录HTTPS协议的加密过程一、概述1. HTTP协议的缺点2. 什么是HTTPS协议3. HTTPS协议的四个特性二、加密技术1. 对称加密技术2. 非对称加密技术3. 对称 + 非对称加密技术4. 混合加密 + CA + Hash算法 + 数字签名4.1 CA证书颁发机构4.2 对证书的加密4.2.1 Hash算法4.2.2 数字签名三、HTTPS对网络性能的影响1. HTTPS使用成本2. HTTPS对性能的影响一、概述1. HTTP协议的缺点HTTP协议传输数据

2021-08-10 19:46:21 393

原创 分布式id之雪花算法

雪花算法文章目录雪花算法一、介绍二、计算过程一、介绍当数据库进行分库分表时,不同表的主键id默认会从1开始递增,这时就需要使用全局唯一id。雪花算法是Twitter开源的由64位bit组成的分布式ID,性能较高,按照时间递增。雪花算法的结构如下图:第一位:占用1bit,没有实际作用,序列号都是正数,所以第一个bit取值总为0。时间戳:占用41bit,精确到毫秒,总共可以容纳约69年的时间。机器id:占用10bit,其中高位5bit是数据中心ID,低位5bit是工作节点ID,做多可以容纳10

2021-08-08 11:29:03 728

原创 基于Netty实现简单的RPC框架

Netty实现RPC框架关于 Netty 的线程模型,详见博客,传送地址:详解Netty线程模型对应代码已上传到GitHub,传送地址:文章目录Netty实现RPC框架一、RPC简介二、代码实现1. 需求介绍2. 实现步骤3. 公共代码4. 服务端代码5. 客户端代码一、RPC简介RPC全称为remote procedure call,即远程过程调用。借助RPC可以做到像本地调用一样调用远程服务,是一种进程间的通信方式。比如两台服务器A和B,A服务器上部署一个应用,B服务器上部署一个应用,A服务

2021-08-02 10:42:38 371

原创 堆内存分配的并发问题

在实际的开发过程中,会经常的创建对象,作为虚拟机,必须保证线程安全。通常来讲虚拟机采用两种方式保证线程安全一、CAS + 失败重试CAS是一种乐观锁的实现方式,每次不加锁假设没有冲突的去完成某项操作,如果因为冲突导致操作失败就重试,直到成功为止。详见博客,传送地址:Java并发编程之 无锁(CAS)二、TLABTLAB是在Java堆空间的伊甸园划分出来的针对每个线程的内存空间,专门在该区域为该线程创建的对象分配内存。它的主要目的是在并发环境下进行内存分配的时候,减少线程之间对于内存空间的竞争,加速

2021-07-30 20:04:23 778

原创 ThreadLocal内存泄漏问题

ThreadLocal原理阅读本文章之前,需要先了解Java中强软弱虚的概念,传送地址:Java中强软弱虚四种引用详解文章目录ThreadLocal原理一、介绍二、快速入门三、ThreadLocal与synchronized的区别四、ThreadLocal内部结构五、ThreadLocal核心方法源码1. set方法2. get方法六、弱引用的使用1. 为什么要使用弱引用?2. 使用弱引用后是否依然存在内存泄漏?3. 线程池归还线程必须清理Map一、介绍可以解决多线程的数据安全问题,将当前线程关联

2021-07-25 09:36:53 190 1

原创 Java中强软弱虚四种引用

Java中强软弱虚四种引用详解文章目录Java中强软弱虚四种引用详解一、强引用二、软引用三、弱引用四、虚引用强、软、弱、虚四种引用的引用强度逐渐减弱一、强引用默认的引用类型(99%以上的引用都是强引用),即类似 object o = new object() 这种引用关系使用new操作符创建一个新的对象,并将其赋值给一个变量的时候,这个变量就成为指向该对象的一个强引用,这个对象成为被强引用的对象如果被强引用的对象正在被直接或间接的引用着,这个对象就永远不会被垃圾回收(即使溢出也不回

2021-07-23 09:10:34 994

原创 interrupt、interrupted 、isInterrupted 区别

interrupt、interrupted 、isInterrupted 区别文章目录interrupt、interrupted 、isInterrupted 区别一、interrupt二、interrupted三、isInterrupted一、interrupt一个线程不应该由其他线程来强制中断或停止,而是应该由线程自己自行停止。所以,Thread.stop, Thread.suspend, Thread.resume 都已经被废弃了。而 Thread.interrupt() 的作用其实也不是中断

2021-07-19 21:33:01 1000

原创 AQS源码分析

深入ReentrantLock底层原理文章目录深入ReentrantLock底层原理一、AQS简介1. 成员变量2. Node节点3. 继承关系二、获取锁源码分析1. 加锁过程中的一个问题三、锁发生竞争源码分析1. 锁重入的体现2. 竞争锁时的一个问题3. t3线程入队的情况四、解锁源码分析一、AQS简介抽象队列同步器 AbstractQueuedSynchronizer 简称AQS,它是同步器的基础组件,JUC各种锁的底层实现均依赖于AQS1. 成员变量state 表示锁状态值为0表

2021-07-19 18:19:19 939 2

原创 Netty线程模型

Netty线程模型文章目录Netty线程模型一、Reactor模型1. 单Reactor单线程2. 单Reactor多线程3. 主从Reactor多线程二、Netty线程模型一、Reactor模型Reactor模式,通过一个或多个输入同时传递给服务处理器的模式,服务器端程序处理传入的多个请求,并将它们同步分派到相应的处理线程, 因此Reactor模式也叫Dispatcher模式 。Reactor模式使用IO复用监听事件,收到事件后,分发给某个线程(进程),这点就是网络服务器高并发处理的关键。1. 单

2021-07-13 17:48:31 254

原创 Docker 安装 MySQL 8.0,详细步骤

Docker 安装 MySQL 8.0文章目录Docker 安装 MySQL 8.0一、拉取镜像二、查看镜像三、运行容器四、查看运行情况五、进入容器六、配置MySQL1. 进入MySQL2. 配置支持远程连接一、拉取镜像docker pull mysql:8.0.21二、查看镜像docker images三、运行容器docker run -p 3306:3306 --name mysql8.0 -e MYSQL_ROOT_PASSWORD=设置密码 -d mysql:8.0.21代码

2021-07-06 08:31:32 16611 5

原创 Docker 安装 Redis-5.0.12,详细步骤

Docker安装Redis-5.0.12文章目录Docker安装Redis-5.0.12一、拉取镜像二、查看镜像三、修改配置文件四、启动容器五、进入容器一、拉取镜像docker pull redis:5.0.12二、查看镜像docker images成功拉取三、修改配置文件因为 redis 默认配置你会发现只能够本地连接,不能进行远程访问,使用 Redis Desktop Manager连接都会报错,因此需要手动挂载 redis 配置文件。创建文件夹mkdir /opt/doc

2021-07-05 21:34:30 1282

原创 Netty核心组件 + 消息边界问题的解决

推荐先阅读关于NIO的文章作为预备知识,传送地址:NIO三大组件介绍及ByteBuffer的使用NIO多路复用之Selector的使用Netty核心组件文章目录Netty核心组件一、入门案例1. 概述2. 入门案例3. 流程梳理二、组件1. EventLoop2. Channel2.1 ChannelFuture2.2 CloseFuture2.3 Netty为什么使用异步3. Future & Promise3.1 JDK-Future3.2 Netty-Future3.3 Netty-P

2021-07-01 10:24:23 254

原创 NIO 零拷贝

零拷贝文章目录零拷贝一、传统IO的问题二、NIO优化1. Linux 2.1 优化(零拷贝)2. Linux 2.4 优化(零拷贝)三、零拷贝四、Netty零拷贝一、传统IO的问题将服务器中的文件内容,通过 socket 的 API,发送到客户端:File f = new File("helloword/data.txt");RandomAccessFile file = new RandomAccessFile(file, "r");//将数据从文件读取到byte数组中byte[] buf

2021-06-30 11:10:40 167

Java反编译工具 jd-gui 官方正版下载

Java反编译工具 jd-gui 官方正版下载

2021-05-12

阿里巴巴开源在线分析诊断工具Arthas(阿尔萨斯)

阿里巴巴开源在线分析诊断工具Arthas(阿尔萨斯)

2021-05-11

JDK8官方正版安装包

JDK8官方正版安装包,基于x64的win系统

2021-04-30

汇编语言第三版答案.zip

王爽《汇编语言》第三版,课后习题参考答案

2021-04-29

空空如也

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

TA关注的人

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