自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(147)
  • 资源 (1)
  • 收藏
  • 关注

原创 @Autowired VS @Resource

说白了就是降低对 Spring 的依赖度(PS:虽然我也不觉得退休前可能会换掉Spring)。既然人家官方都推荐了,就按着推荐的来吧(PS:不废脑细胞和时间去比较咧~感觉也没啥实际用处)。首先,两者都是通过注解来实现依赖注入。

2023-06-07 10:35:19 75

原创 Python版【行列转换】的小工具

Python文件为 matrix_transform.py,具体代码如下:"""矩阵转换(即对源文件中的行列进行转换后,将结果保存到新的文件中),目前支持两种文件格式:txt 和 excel"""import osimport numpy as npimport pandas as pddef transformTxt(input, output): """将txt中的内容进行行列转换 使用示例: * 将 /Users/suns/demo/input.txt 文

2023-06-01 13:33:33 21

原创 docker-compose重新启动Mysql报错changing ownership of ‘/var/lib/mysql/mysql.sock‘: No such file or direct

docker docker-compose mysql chown: changing ownership of '/var/lib/mysql/mysql.sock': No such file or directory

2023-01-29 13:22:38 827 4

原创 如何计算单元测试的覆盖率

单元测试,计算语句覆盖率、分支覆盖率、条件覆盖率、分支条件覆盖率、路径覆盖率

2023-01-11 14:52:40 1872

原创 如何在 Gitlab上 修改项目的默认分支

gitlab 修改 项目的 默认分支

2022-12-05 11:09:06 1963

原创 鹿蜀:一个基于日常开发任务体现开发人员工作状况的系统

为了能够更方便、更直观的让Boss,让同伴,让自己了解到自己近期的工作情况,我拉了一个小队,利用农闲的时间,结合已有的项目管理系统中的数据,开发了一个新系统,名叫 “鹿蜀”。所谓行动就是版本迭代,每个版本迭代都会有一个负责人和一个行动代号。用来展示行动中的开发任务,测试任务,以及出现的Bug。用来展示行动中的每个人的开发任务,以及产出的Bug数量。按月/季度统计,这个月/季度所有的开发任务,测试任务,以及产出了多少个Bug。按月/季度统计,每个开发在这个时间段内,所有的开发任务以及产出的Bug。基于

2022-12-05 10:55:06 292

原创 SELECT ... FOR UPDATE 到底是锁表还是锁行?

对于 SELECT …FOR UPDATE 我们知道除了有查询的功能外,还会对查询结果进行加锁,而且是悲观锁。OK,数据都准备好了!让我们通过下边三个场景来简单说明下 FOR UPDATE 到底是「行锁」还是「表锁」。由于 name 不是主键也没加索引,所以是表锁,所有数据此时都不能 update。只锁定 code=007 的数据,行锁,此时除该条数据以外都允许 update。只锁定 id=1 的数据,行锁,此时除该条数据以外都允许 update。WHERE 中使用带索引的字段。WHERE 中使用主键。

2022-09-26 16:24:54 1195 1

原创 Pod 健康检查和服务可用性检查

K8s 对 Pod 的健康检查是通过三类探针来实现的:LivenessProbe、ReadinessProbe、StartupProbe,其中以 LivenessProbe、ReadinessProbe这个两个探针最为主要。其实,这里有一个问题开始对我是有一些困扰的,那就是:到底 K8s 是通过什么东西(组件)来启动探针,进而对 Pod 进行定期的健康检查呢?答案是:kubelet。

2022-09-26 10:30:54 1055

原创 当 resources.limits.cpu 遇到 livenessProbe,进而导致 Pod 不断重启

K8资源管理,resources.limits.cpu,livenessProbe,Pod不断重启

2022-09-22 16:15:33 863

原创 当 K8s资源管理 与 JVM参数(Xms、Xmx)相遇

K8s 资源管理 JVM Xms Xmx

2022-09-21 16:24:52 1753

原创 K8s 之 ReadinessProbe(就绪探针)使用的迷惑

K8s ReadinessProbe 就绪探针 Springcloud

2022-09-20 11:13:58 770

原创 《深入理解JAVA虚拟机(第2版)》—— 学习笔记2

本章主要内容是 运行时数据区、HotSpot虚拟机对象、对象访问定位等。

2022-09-02 11:32:34 279

原创 《深入理解JAVA虚拟机(第2版)》—— 学习笔记1

主要摘录了本书第一章的关键(我个人比较关心的:>)内容。

2022-08-30 10:53:20 151

原创 JVM HotSpot 之 内存结构演进过程

这样就造成了各个 JVM 厂家,对自家的 JVM 中的。又分为三个部分,Eden、From Survivor、To Survivor,他们占据新生代空间的比例为 8:1:1(可调节)。在 1.8 中,内存结构主要由三大块组成:堆内存、元空间、栈。是 HotSpot 的专属概念,例如: JRockit(Oracle)、J9(IBM) 中就没有。通过上边表格我们可以看出来,1.6、1.7、1.8 这三个版本,变化最大的是。不同的 JVM 版本,方法区中存储的数据略有不同(详见上图)。类似(接口 = 方法区;..

2022-08-25 18:43:32 178

原创 Junit4 之 assertThat

assertThat 是Hamcrest单元测试框架提供的方法。Hamcrest提供了对多种语言的支持。

2022-08-18 09:40:21 291 2

原创 Mockito 之 verify 使用方法

校验 BetaService.sayHello 中的 AlphaService.eat 方法被调用的时候,作为参数的 EatInfo 对象中属性 food 值为 “饺子”, 属性 address 值为 “你家”校验在 BetaService.sayHello 中方法的调用顺序是 alphaService.init、alphaService.say、alphaService.eat。校验 BetaService.sayHello 中调用了 AlphaService.init 的次数。......

2022-08-17 14:04:14 3418

原创 Mockito 如何 mock 静态方法

当 mockito 进化到了 3.4.0 版本以后,也开始对静态方法 mock 进行了支持(主要是通过 mockito-inline 包)。当多个单元测试都使用了同一个 static mock 对象,且使用完成后都没有进行 close。此时,若这几个单元测试用一起执行,第一个单元测试占用了 static mock 对象,第二个单元测试就没有办法再占用了。如果你的很多单元测试中都用到了 mockStatic(HTTPClient.class),且觉得在每个单元测试当中都写一遍 mockStatic()…...

2022-08-17 10:18:55 17666 2

原创 单元测试编写规范

为了统一司内的单元测试编写风格,且让大家无需考虑不重要的事情(无脑按着条条框框执行就好了),专注于写单元测试。基于司内的具体情况,制定了一套简单的《单元测试编写规范》,在这里进行分享,希望能给大家提供一些思路。........................

2022-08-05 09:50:32 1155

原创 Java 诊断工具之 Arthas

Arthas 是 Alibaba 开源的 Java 诊断工具。Ta 可以动态跟踪 Java 代码,实时监控 JVM 状态,可以在不中断程序执行的情况下轻松完成 JVM 相关问题排查工作。支持 JDK 6+,支持 Linux/Mac/Windows。

2022-08-04 13:47:29 373

原创 K8s 之 节点亲和性的调度策略(NodeAffinity)

NodeAffinity是Node(节点)亲和性的调度策略,用于替换掉NodeSelector的调度策略。

2022-07-20 11:31:54 919

原创 kubectl 常用命令

进入 POD 容器kubectl --namespace=${namespace} exec -it ${pod_name} -c ${container_name} -- sh 例如:kubectl --namespace=test exec -it annoroad-alpha-c9bbf5794-29fjt -c annoroad-alpha --sh或kubectl --namespace=${namespace} exec -it ${pod_name} --contai.

2022-07-20 10:45:24 281

原创 Ribbon 实例检查策略(健康检查)

通过对接口com.netflix.loadbalancer.IPing的实现,如下图/***@Authorcab5*@Date27自定义ribbon的对微服务的健康检查try{}}}主要逻辑是通过调用微服务的/actuator/info接口,判断返回的状态码是否为200。这里的/actuator/info接口是微服务引入spring-boot-starter-actuator得到的。/***@Authorcab5。......

2022-07-19 13:36:32 330

原创 int 整数相乘溢出的问题

int 整数相乘溢出问题

2022-06-27 14:08:20 1451

原创 com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException, message: Unrecognized 的解决办法

最近在将 fastjson 用 jackson 进行替换的过程当中,出现了 “com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException, message: Unrecognized” 的问题。该问题出现的原因是由于 JSON 里面包含了实体没有的字段而导致了反序列化的失败,如下图:如果我们把 content 中的 gender 字段去掉,就能正常运行了,如下图:这里有两个解决方案,如下:将 ObjectMapper 的 Deseria

2022-06-22 15:10:05 1679

原创 一次解决 Could not get a resource from the pool 问题的经历

背景近期,有用户反馈在使用系统的时候经常报错,具体后台报错信息如下图:通过图中的报错信息,我们可以判断:应该是无法从池里获取连接了。可是,一直都运行的好好的,怎么突然就不能获取连接了呢?解决首先,我们先排除掉「密码错误」的可能性。因为如果是密码错误的话,那从开始的时候就不可能正常运行的。然后,考虑到本身业务场景不存在同一时刻产生大量并发子占满所有连接的情况,所以也排除掉了大并发造成等待超时的情况。经查,服务重启后,该问题就消失了,但是运行一段儿时间后,问题又再度出现。由此猜测,是不是业务使用

2022-05-25 17:58:25 1759

原创 MySQL中的 索引、聚簇索引、非聚簇索引、回表、索引覆盖、索引下推 都是啥?

背景本文是将网络上搜集到一些相关知识进行汇总,按着自己的理解和方式进行了重新的编辑。1、MySQL 的索引针对 MySQL 的索引,主要有以下几条:它是一棵 B+Tree每一个 B+Tree 的节点都是一个「数据页」每一个「数据页」默认会占用 16KB 的磁盘空间索引是在存储引擎层实现的,所以并没有统一的索引标准,即不同存储引擎的索引的工作方式并不一样在一棵 B+Tree 上会有很多数据页,上边我们也看到了每一个「数据页」会占用一定的磁盘空间,所以,如果大量的创建索引,势必会导致磁盘空间

2022-05-10 15:51:18 612

原创 如何使用自定义注解进行参数校验

背景在日常的开发工作过程中,我们用的比较多的参数校验注解有 @NotBlank、@NotBlank、@NotEmpty、@Min、@Max 等等。这些注解只实现了一些基本校验,但是实际工作当中有很多参数的校验要比这个复杂的多(例如:校验输入参数是否符合身份证的规则)。当我们面对这些复杂校验的时候,这些基本的注解就无能为力了。通常的解决方案如果工作中真遇到上述的情况,我们该怎么办呢?通常的做法是将复杂的校验逻辑写在业务代码中,如下:public class AccountController {

2022-04-22 15:40:09 1314 2

原创 位运算符 与(&)、或(|)、异或(^) 总结

如上图,最终总结为以下 3 点:与(&)都为 1 结果为 1,其他都为 0或(|)只有存在 1 个 1则结果为 1,其他都为 0异或(^)相同则结果为 0,不同则结果为 1

2022-04-14 19:26:00 246

原创 Spring Boot 版本号说明

大家可以通过 https://spring.io/projects/spring-boot#learn 查看到当前 Spring Boot 的官方版本号,如下:对上边的截图,我的理解是:由两个部分组成,一个是用来标识版本的 「版本号」,另外一个是该版本当前的 「发布状态」(即发布计划)。我们以图中的 2.6.6 CURRENT GA 和 3.0.0-SNAPSHOT SNAPSHOT 来进一步说明哪部分是 「版本号」,哪部分是 「发布状态」,如下图:下面分别说下 「版本号」 和 「发布状态」(发布

2022-04-02 17:28:03 8280 2

原创 OpenAPI 响应码设计方案

一、前言起初的想法是基于自己制定的规则整一套的状态码体系,可是后来发现,因为这套规则是自己制定的,应用范围非常有限,不具有通用性,会对新接触的人产生一定的理解和学习成本。而后,得到网上一些建议的启发,想到可以结合已得到大众认可且都熟悉的「HTTP状态码」来建立状态码体系。二、设计方案该状态码体系,主要分为以下两个部分组成:HTTP状态码(HTTP Status Code)这部分就是 Http Response 中的 status。主要用来标识与业务无关的情况,例如:参数校验错误(400)、请求

2022-03-31 13:56:47 527

原创 采用 Map+Function 重构我们的 if-else

大家应该都有过写 if-else 的经历。如果遇到判断条件较多的情况,那代码可能就会很长了,影响了可读性,不方便修改,可维护性也差。如果要进一步优化的话,我们可以采用策略模式来进行重构。虽然策略模式在一定程度上提升了可维护性。但是,也有弊端,那就是需要写更多的类。除了策略模式以外,还可以采用什么方案能对 if-else 进行优化呢?下面,向大家隆重推荐 Map + Function 的方式。if-else 方式首选,先让我们看下最初使用 if-else 是个啥样,如下: public voi

2022-02-09 10:22:28 443

原创 kubectl create 与 kubectl apply 的区别

一、背景在我们想要创建一个K8s资源的时候,既可以使用 create,又可以使用 apply,两者之间到底有什么不同呢?二、区别kubectl createcreate 顾名思义就是创建新资源。这里我们需要注意的是,如果再次运行相同的命令,就会抛出错误,因为资源名称在名称空间中应该是唯一的。第 1 次执行 kubectl create -f pod.xml 命令,正常结束,如下:kubectl create -f pod.xmlpod/my-pod created第 2 次执行 kubec

2022-01-14 09:25:56 3553 4

原创 log4j和log4j2的区别

前言最近由于 log4j2 的漏洞问题,让我对 log4j 和 log4j2 的区别有了一些认识,这里做个简单的记录。首先引用官网的一段原文,如下:End of Life On August 5, 2015 the Logging Services Project ManagementCommittee announced that Log4j 1.x had reached end of life. Forcomplete text of the announcement please see

2021-12-29 11:16:11 1007

原创 IDEA 使用过程中报错: java: -source 1.5 中不支持 lambda 表达式 (请使用 -source 8 或更高版本以启用 lambda 表达式)

问题产生的原因是 JDK 版本太低,我们可以通过以下三个步骤来检查 JDK 的版本并进行调整,如下:检查 IDEA 中 JDK 的设置检查项目中 JDK 的设置检查模块中 JDK 的设置

2021-12-07 15:50:32 2023

原创 kubectl delete 批量删除指定状态的 Pod

kubectl get pods -n ${namespace} | grep ${status} | awk '{print $1}' | xargs kubectl delete pod -n dev --force --grace-period=0${namespace} 命名空间${status} 指定的状态例如,批量删除 namespace 为 my 下的所有 Evicted 的 Pods,如下:kubectl get pods -n my | grep Evicted | awk

2021-11-22 10:24:52 3758 1

原创 简单描述 MySQL 的 IOPS、QPS、TPS含义

1、IOPS英文全称是 Input/Output operations Per Second,既每秒处理 I/O 的请求次数。IOPS 是指存储每秒可接受多少次主机发出的访问,主机的一次 IO 需要多次访问存储才可以完成,这里提到磁盘读写能力,比如它每秒读 100M,写 50M.这个说明的是数据吞吐量,而 IOPS 指的则是每秒处理 I/O 的请求次数.详细展开来说请求次数就是读 80M 的文件是一次I/O请求,写1K的的数据也是一次I/O请求,那么 IOPS 的数值越高自然在一定时间内能接受的相应请求就

2021-11-05 15:37:52 4605

原创 关于 Dockerfile 中 COPY 文件的问题

一、问题通常我们会在 Dockerfile 文件所在的文件夹下执行 docker build 命令创建镜像,如下:docker build -t ${image_name} .通过此方式创建镜像的时候,需要注意的是如果在 Dockerfile 中使用 COPY 命令,那只能 COPY 与 Dockerfile 文件处于同一目录下的文件或者或者文件夹。如果我们要 COPY 不与 Dockerfile 文件处于同一目录下的文件或者或者文件夹在会报错,如下:COPY failed: stat xxx

2021-10-26 18:26:28 10859

原创 基于 screw maven 插件一键生成数据库文档

一、screw 是什么screw 是一个简洁好用的数据库表结构文档的生成工具,支持 MySQL、Oracle、PostgreSQL 等主流的关系数据库。仓库地址是:https://github.com/pingfangushi/screwscrew 生成的文档有 HTML、Word、Markdown 三种格式,如下:HTML:Word:Markdown:二、screw 快速入门本文的内容是基于 screw 的 maven 插件(screw-maven-plugin)来生成数据库

2021-10-18 10:49:30 845

原创 基于微信支付、退款的一个取消预约的方案

一、前提本方案是基于 「微信非付款码支付」 进行设计的。二、业务场景首先,大家先大概了解下「预约」和「取消预约」两个流程。预约取消预约三、遇到的问题试想如下场景:用户预约,拉起微信支付后选择支付,但是在支付回调通知前,用户又发起了取消。此时该如何实现取消逻辑呢?此时,订单的状态处于 “待支付”,是允许取消还是不允许取消呢?首先,说下 “不允许取消” 这种情况在业务上是不可能成立的,为什么这么说呢?因为,只有那些处于 “支付中” 状态的订单不允许取消才合理,而我们只有 “待支付”、

2021-10-13 17:22:55 282

原创 浅谈 Elasticsearch 全文搜索

说起全文搜索,我将分为两个部分来讲下,一个是索引的创建,然后才是搜索。一、创建索引针对不同的字段类型,索引创建的方式也不尽相同,这里主要讲下 text 和 keyword 的两种字段类型区别,如下图:类型是否分词描述text是声明为 text 的字段,在被写入 ES 的时候,首选需要对该字段的值进行分词,然后为分词后的结果(你、好、中、国)一一创建对应的索引。keyword否声明为 keyword 的字段,在被写入 ES 的时候,不需要进行分词,直接为该字段的值(

2021-10-13 09:58:30 304

Spring Batch 参考文档

Spring Batch 参考文档

2022-05-12

空空如也

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

TA关注的人

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