- 博客(40)
- 资源 (2)
- 收藏
- 关注
原创 清理测试数据用truncate还是delete
比如我有一张订单表,关联订单行,在测试过程中,我创建了一个订单,结果多出了几条不是我创建的订单行数据。原因是我清理测试数据时,为了方便使用truncate清理了order表,但是没有清理order_entry,order表的自增主键重置了,所以恰好新的订单ID就跟旧的订单行产生了关联。truncate会导致自增主键重置,有利有弊,好处是清理的彻底,坏处是你最好把它的关联边表一并清理,否则就可能会发生上面这这种问题,给你的测试带来阻碍。但是对于不存在关联的表,还是可以大胆使用truncate清理的。
2024-07-04 16:00:11 381
原创 浅析vue3自定义指令
这里还有一个隐藏的细节,就是vue只是约定了变量的名字,而没有约定变量的内容。注意:由于自定义指令就是一个js对象,所以定义的时候不必使用vXXX这种命名,只要导入的时候确保vXXX这种命名即可。上面这几种形式都会被当成自定义指令来注册,只是它不是一个完整的实现,因此使用的时候没有任何效果,但也不会报错。此外,我们应该注意到自定义指令,本质上就是一个js对象,因此我们完全可以将其独立到一个js文件中管理。所以为了尽量避免混淆,我们应该尽量避免,给非自定义指令的变量使用 v 开头的驼峰式命名。
2024-05-12 09:30:29 250
原创 企业微信会话存档:大文件拉取、加密、上传
解决的办法,就是使用分片上传,这个要看各家云存储对分片上传的支持了。这个问题之所以没有在测试环境复现,是因为测试环境都是拿的一些小文件测试,结果在线上运行一段时间后,就发现,下载下来的文件显然比真实文件小很多。如果文件很大,比如几个G,那很容易就OOM,为啥之前没有OOM呢,因为第一个问题导致文件内容只有最后一个分片的大小,所以这个问题被隐藏了。在之前的那篇文章结尾,我说发现了系统另外一个隐含的bug:企业微信会话存档拉取媒体文件是分片拉取,我的处理方式有问题导致,保存的永远是最后一个分片。
2024-02-06 16:27:35 684
原创 企业微信会话存档sdk报错:A fatal error has been detected by the Java Runtime Environment
注意我这里加了一个标记sdkDestroyed,一旦捕获到了WxErrorException,getMediaFile这个方法其实已经销毁了sdk,就不要重复销毁,否则还是会有这个问题。知道问题的原因,就好解决了。首先你得好好review一下你的代码,到底哪里重复销毁了相同的sdk,或者前面销毁了sdk,后面又尝试去用。所以我的处理流程是,先拉取消息,然后使用拉取消息的sdk拉取媒体文件,然后就遇到了本文说的这个问题。我们不卖关子,问题的原因就是,你使用了已经被销毁的sdk,或者重复销毁一个sdk。
2023-12-29 16:48:35 854 1
原创 SpringBoot实现枚举类型参数认证
SpringBoot的validation没有提供对枚举值的支持,这里教大家如何自定义校验注解,实现对枚举值的校验
2023-12-28 19:17:36 869
原创 RESTFul API的缺点有哪些
RESTFul API是一种广泛使用的Web服务设计风格,它以资源为中心,通过HTTP方法来操作这些资源。然而,尽管RESTFul架构风格在许多情况下都非常有用,但在实际应用中,我们也发现了一些不足之处。本文将详细阐述这些问题,并提供一些例子来说明。
2023-11-16 17:39:41 373
原创 放下对各种XO的执念,你才能获得愉悦
当使用DTO、VO让你感到痛苦,那么果断放弃吧。不要对这些命令持有执念,懂的设计中的取舍,才能让编程变得愉悦。
2023-07-20 18:26:56 159
原创 如何正确的定义缩写
在日常工作中,我们经常遇到缩写。比如OA(Office Automation)、HR(Human Resources)。开发过程中,我们也经常需要使用缩写,比如包名、字段名等。缩写不仅能简化书写,还能统一沟通语言,提高沟通效率。好的缩写,不仅要去书写简单,而且见名知义。但是缩写本身并没有固定的规则和规范,我查阅了大量的常见缩写,从中总结了一些“规律”。希望这些规律可以帮助大家更好的定义和读懂缩写。
2023-07-16 11:00:26 288
原创 修改接口参数名和在Swagger中的展示名
有时定义接口参数时,需要让前端用另一个名字来传参。还需要修改参数在swagger文档中的名字。这篇文章将教你如何做。
2023-07-14 16:22:42 2399
原创 ping - 连通性测试
本文将介绍Linux系统中的ping命令,其作用是测试网络连接的质量和稳定性。通过使用ping命令,可以检测目标主机的IP地址是否能够被访问,并测量网络延迟和丢包率。
2023-07-10 17:43:52 3321
原创 原来屎代码也有它的道理
但是我们并不能直接在afterPropertiesSet方法里面给userService2赋值,因为afterPropertiesSet是实例方法,不要再实例方法里面设置静态成员。的确,它是对的,工具类缺失不需要实例化成员,因此我们缺失不需要声明一个public的构造方法。所以无论是构造方法还是实例方法, 都是不建议来设置静态成员的——道理都是一样,都是为了防止某个实例的行为,影响全部实例。意思就是不要再构造函数中对静态成员初始化,应为静态成员是属于类的,在构造方法中对静态成员初始化,可能会影响所有实例。
2023-07-07 18:20:34 152
原创 form-data和x-www-form-urlencoded的区别和延伸
form-data和x-www-form-urlencoded,它们完整的表示是multipart/form-data和application/x-www-form-urlencoded。为了方便,我们下面就用form-data和x-www-form-urlencoded表示。两者的区别,可谓是老生常谈,随便百度一下,也是有大堆资料。好了,闲话少叙,我们进入正题。
2023-04-20 01:30:31 13886 5
原创 一种简单且通用的后端api接口相关命名规范
我在项目中比较重视api接口的命名规范,好的命名不仅能方便前后端联调,而且代码维护也是很方便的。不幸的是,很多工作几年的老程序员在命名这个事情上也是一塌糊涂。想整理一个规范出来,能够方便开发人员去落实,这个规范一定要简单,不同能力水平的开发人员都能很容易理解和使用。
2022-11-29 17:33:22 4536
原创 fastjson、jackson、gson用法一览
文章目录1 准备2 序列化2.1 fastjson2.2 jackson2.3 json3. 反序列化3.1 字符串反序列为Json对象3.1.1 fastjson3.1.2 jackson3.1.2 gson3.2 字符串反序列为Java对象3.2.1 fastjson3.2.2 jackson3.2.3 jackson3.3 字符串反序列化成json数组3.3.1 fastjson3.3.2 jackson3.3.3 gson3.4 字符串反序列化成List3.4.1 fastjson3.4.2 jac
2022-05-13 21:11:28 682
原创 PPT画四分之一圆或扇形
最近在都是里学习PPT,见到下面的效果。很好奇这里面的“四分之一圆”是怎么画出来的。其实很简单。首先,点击插入-形状,在基本图形里面,找到不完整圆它的初始形状实现下面这样的。看到没,这里有两个黄色的小点,用来调整扇形的角度。然后,拖动黄点,调整扇形的角度这样就得到了“四分之一圆”。不过因为是手动拖的,可能不一定是严格的90度。我没发现可以直接设置角度的地方。我的方法是放出参考线,将图形放大,借助参考线比较,如果有误差就微调。在视图-参考线中,勾选参考线放大图形
2022-04-08 08:35:50 7265 2
原创 Sublime Text3,你的效率神器
文章目录前言代码片段批量替换多行游标前言开发中用到编辑器很多,写项目我主要用idea和vs code,但是平时写一些代码片段,或者做一些文本编辑的工作,我习惯使用Sublime Text,主要还是因为它足够轻量。所以,为了轻量,我也不会给它添加什么插件。下面说一下,我平时用Sublime Text提高工作效率的几个场景。代码片段平时在工作时,如果需要要写一些简单的代码片段,或者做一些代码测试,尤其是js代码,我经常在Sublime Text中进行。它支持多种编程语言的代码高亮,主要还是流畅啊,
2022-04-06 07:54:08 999 2
原创 JavaScript 关于数值的那些冷知识
数值类型ES6引入了bigint类型,所以现在数值有两种类型:number和bigint。bigint类型用Bigint函数定义(不带new),或者在数字后面加上字母n。let a = Bigint(1);let b = 1n;
2022-04-04 22:21:49 1185
原创 JavaScript 基本类型和引用类型区别
基本概念JS有以下这些数据类型:undefined、null、string、boolean、number、symbol、bigint、object。其中,前面 7 个被称为基本类型,又叫原始类型(Primitive Type);object,被称为引用类型(Reference Type),或叫做对象类型(Object Type)。区别基本类型在栈中存储,而引用类型对象部分在堆中存储,栈中存储的对象的引用地址。let str = 'hello world';let num = 123;let
2022-04-04 14:43:09 1053
原创 JavaScript 类型转换详解
喜欢博主的文章,欢迎关注、点赞👍、收藏⭐️、留言📝支持,谢谢大家类型转换类型转换就是将值由一种类型转换成另一种类型,比如我们用字符串和数值做算术运算时,字符串就会转成数值。'10' - 5; // 5或者使用alert输出值时,值会被转成字符串:alert(10); // 10被转成了字符串'10'上面的转换称之为隐式转换。类型转换也可以强制发生,一般是调用对应的包装类方法。Number('10'); // 返回数值类型的10String(10); // 返回字符.
2022-04-03 20:18:14 991
原创 MySQL查询视图View报错
项目场景:在mysql客户端workbench中查询视图View报错。问题描述View references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them原因分析:执行查询之前没有选中数据库,或者没有use。解决方案:选中具体的数据库,或者use数据库,在查询就没问题了。...
2022-04-01 14:51:21 9580 2
原创 JavaScript 判断是否为数字的几种方式
js判断是否为数字方式很多:typeof、instanceof、Number.isNumberparseInt、parseFloatisNaN、isFinite正则表达式本片文章就介绍一下这些方式的区别和用法。1. typeof、instanceof、Number.isInteger使用typeof判断对象是不是基本类型number,比如:let num = 1;typeof num === 'number'; // true使用instanceof判断对象是不是包装类Number
2022-04-01 00:15:54 111912 13
原创 Java 保留两位的几种方式
没啥技术含量,就是单纯记一下笔记。1. String.formatString.format("%.2f", 33.3333); // 33.332. DecimalFormat.formatDecimalFormat df = new DecimalFormat("#.00");System.out.println(df.format(33.3333)); // 33.333. BigDecimal.setScaleBigDecimal bd= new BigDecimal(33.333
2022-03-28 20:20:50 1193
原创 Java lambda表达式实现List转Map
将List分组转成Map是日常开发中常见的需求,我们就来总结一下常见的几种写法。有如下代码:@Dataclass Person { private String uuid; private String name; private String gender; private int age; public Person(String name, String gender, int age) { this.uuid = UUID.random
2022-03-27 11:04:57 11921 2
原创 JavaScript for、for..in、for..of、forEach的区别
JS中循环语句众多,你是否也有用的时候突然不知道用哪个的经历。今天就来总结一下,让大家不在困惑。1. for 我很“low”但也很强大for是最基础的循环语句,语法想必不用多说。for只管循环,取值的工作是用户自己决定的。所以for可以拿来循环数组,也可以拿来循环对象。遍历数组:let arr = [1, 2, 3];for (let i=0; i<arr.length; i++) { console.log(arr[i]);}// Output:// 1// 2// 3遍历
2022-03-26 23:59:41 2570
原创 JavaScript Object.prototype.toString为什么可以检测对象类型?
在我的另一篇文章《js typeof、instanceof区别一次给你讲明白》中讲过可以使用Object.prototype.toString判断对象类型,而且是相比于typeof和instanceof更严谨的方式。老实说,当时只知道可以这么用,为什么可以这么用,其中什么原理,我是一概不知。这几天正好梳理原型相关的知识,碰到了这块内容,顺藤摸瓜竟然找到了答案,这里跟大家分享一下。初始Object.prototype.toString想找到原因,首先至少得搞清楚这个方法的定义和作用,我选择查询MDN,
2022-03-25 22:03:13 1486
原创 nodejs.ER_DIVISION_BY_ZEROError: Division by 0问题解决
遇到这个问题是在nodejs环境,不过这个问题是mysql的问题。mysql有个配置项:ERROR_FOR_DIVISION_BY_ZERO。如果有这个配置项,那么再执行update、insert语句时,分母就不能为0,否则就会报除零异常。但是有个特例,就是如果分子为null,那么null / 0不会报错,因为mysql中有null的运算结果都是null。可以通过下面的语句查看自己的mysql是否有个这个配置项:select @@global.sql_mode;// STRICT_TRANS_TA
2022-03-25 20:11:02 3177
原创 JavaScript运算符||、&&、空值合并、?.的区别和用法
文章目录1. `||`和`&&`运算符2. ??空值合并运算符3. ?.可选链4. 总结||、&&是JS一直就有的运算符,虽然是逻辑运算符,但是我们经常拿来用于取值和赋值操作。而??和?.运算符是ES6加进来的,??叫做“空值合并运算符”,?.叫做“链式运算符”,接下来我们逐一介绍。1. ||和&&运算符一个是逻辑或“”,一个是逻辑“与”。你可不要被它的名字蒙蔽了:它们虽然叫逻辑运算符,但是他们跟C和Java这些强类型语言的逻辑运算符可不同,它们最显著的
2022-03-24 20:37:20 2656 1
原创 JavaScript 原型(prototype)、原型链、原型继承全解析
文章目录1. 什么是原型,为啥要有原型2. prototype、\__proto__、[[Prototype]]3. 原型链4. 使用`__proto__`实现继承5. ES6的面向对象6. 结语JS的原型可谓是老生常谈的一个问题,网上的资料也是一搜一大把。为什么还想写一篇文章呢?主要还是因为网上大多数文章要么一上来就是一张原型链的图,直接劝退;或者简单的罗列知识点;亦或是站在一个很高的高度上去解释原型,把它说的非常玄乎。一般人学习新知识都是由难到易、由浅入深的,我想用这种感觉和大家聊聊JS的原型。也算
2022-03-21 01:05:16 1093
原创 Excel函数不生效的一种情况
今天朋友一个有意思的问题,我使用excel的if函数和concat函数,死活不生效。我有点无语,我确定我的函数语法没有问题,毕竟是非常简单的函数。仔细看了一会,我发现不管我函数怎么输,都是原样输出。于是我看了一下单元格的格式,为“文本”。我才是它搞的鬼,把单元格格式改成常规后,果然生效了。切记,不要将公式的单元格设置成文本类型。...
2022-03-15 18:24:42 9008 1
原创 JavaScript typeof和instanceof区别详解
开发过程中,我们经常要判断一个变量的类型,那你知道js中有多少方式判断变量类型呢?1. typeoftypeof 用于基本类型的判断,js有7中基本类型,他们分别是:string、number、boolean、undefined、null、symbol、bigint。它们分别使用typeof 判断的结果是:typeof 'hello'; // stringtypeof 123; // numbertypeof true; // booleantypeof undefined;
2022-03-14 17:09:25 1411
原创 JavaScript 自动装箱和自动拆箱
1. 基本类型和包装类要说自动装箱和拆箱,得先看看js有哪些基本类型和对应的包装类型。js有五种基本类型:undefined、null、string、boolean、number。其中undefined和null是不存在包装类的,因为包装类的目的是为了给基本类型提供属性和方法,而undefined和null都是空的概念,也不存在什么有意义的方法。string、boolean、number它们的包装类分别是String、Boolean、Number。2. 装箱和拆箱装箱就是调用对应包装类的构造方法:
2022-03-04 14:07:04 353
原创 解决:Error: Can‘t find Python executable “python“, you can set the PYTHON env variable
我是在安装sharp这个库的时候报这个错,开始一脸蒙蔽,各种百度,这里把解决办法记录一下。使用管理员打开cmdnpm install --global --production windows-build-tools安装成功后会显示success,我是因为装过了,所以显示上面的样子。配置环境变量在环境变量Path中配置路径:C:\Users{user}.windows-build-tools上面的路径是python的安装路径。在cmd中查看python版本:python -V
2021-12-09 00:40:01 1039 2
转载 RunScriptError: Run “C:\Windows\system32\cmd.exe /d /s /c node-gyp rebuild“
原文
2021-12-08 21:14:07 543
原创 JavaScript Symbol的用法
1. Symbol是什么Symbol是ES6 引入了一种新的原始数据类型,表示独一无二的值。它是 JavaScript 语言的第七种数据类型,前六种是:undefined、null、布尔值(Boolean)、字符串(String)、数值(Number)、对象(Object)。2. Symbol 语法Symbol([description]) // description为Symbol的描述,不影响Symbol的唯一3. Symbol的特点独一无二,Symbol('a')和Symbol('a
2021-09-09 15:21:02 2571
翻译 node mysql 使用连接池
创建连接池var mysql = require('mysql');var pool = mysql.createPool({ connectionLimit : 10, host : 'example.org', user : 'bob', password : 'secret', database : 'my_db'}); pool.query('SELECT 1 + 1 AS solution',
2021-09-09 10:28:40 1409
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人