编辑
2024-11-21
学习
00

vu3学习

编辑
2022-11-30
学习
00

数据库建表的15个小技巧

前言

对于后端开发同学来说,访问数据库,是代码中必不可少的一个环节。

系统中收集到用户的核心数据,为了安全性,我们一般会存储到数据库,比如:mysql,oracle等。

后端开发的日常工作,需要不断的建库和建表,来满足业务需求。

通常情况下,建库的频率比建表要低很多,所以,我们这篇文章主要讨论建表相关的内容。

如果我们在建表的时候不注意细节,等后面系统上线之后,表的维护成本变得非常高,而且很容易踩坑。

今天就跟大家一起聊聊,数据库建表的15个小技巧,希望对你会有所帮助。

img

编辑
2022-11-29
教程
00

不蒜子(busuanzi统计不显示的根本原因及解决办法)

1.概述

我使用的 Hexo 博客遇到了的 busuanzi 访问量统计不显示问题,搜索了csdn,知乎,githubstackoverflow,等等也没找到解决办法,直到我发现了大佬的文章(链接见文章末尾)。

经过一番研究发现是 busuanzi 代码的一处问题和 live2d看板娘插件的一处问题凑在一起导致的。

今天在写博客之前先搜了一下“busuanzi live2d”,发现搜出来一堆结果,我还以为我白研究了..结果点进去一看,第一页结果里没有一个指出了问题的根本原因,而且修复方法基本上都是删 feature 或者换组件,但实际上只要知道问题的根本原因就可以在不妨碍正常功能运作的前提下进行修复。

编辑
2022-11-18
学习
00

幂等性

1.幂等的数学概念

如果在一元运算中,x 为某集合中的任意数,如果满足 f(x) = f(f(x)) ,那么该 f 运算具有幂等性。

绝对值运算 abs(a) = abs(abs(a)) 就是幂等性函数

如果在二元运算中,x 为某集合中的任意数,如果满足 f(x,x) = x,前提是 f 运算的两个参数均为 x,那么我们称 f 运算也有幂等性。

求大值函数 max(x,x) = x 就是幂等性函数

2.幂等概述

2.1幂等业务场景分析

生产环境经常出现过重复的数据?在排查问题的时候,数据又是正常的。这个是何解呢?怎么会出现这种情况,而且还很难排查问题。

原因 :产生重复数据或数据不一致(假定程序业务代码没问题),绝大部分就是发生了重复的请求,重复请求是指同一个请求因为某些原因被多次提交。导致这个情况会有几种场景:(本质上:多次请求)

1)微服务场景,在我们传统应用架构中调用接口,要么成功,要么失败。但是在微服务架构下,会有第三个情况【未知】,也就是超时。如果超时了,微服务框架会进行重试。 2)用户交互的时候多次点击。如:快速点击按钮多次。 3)MQ消息中间件,消息重复消费。 4)第三方平台的接口(如:支付成功回调接口),因为异常也会导致多次异步回调。 5)其他中间件/应用服务根据自身的特性,也有可能进行重试。

2.2接口幂等

接口的幂等性实际上就是 接口可重复调用,在调用方多次调用的情况下,接口最终得到的结果是一致的。更准确的讲:多次调用对系统的产生的影响是一样的,即对资源的作用是一样的,但是返回值允许不同。

2.3幂等业务场景举例

场景1:支付场景

1.一个订单创建接口,第一次调用超时了,然后调用方重试了一次 2.在订单创建时,我们需要去扣减库存,这时接口发生了超时,调用方重试了一次 3.当这笔订单开始支付,在支付请求发出之后,在服务端发生了扣钱操作,接口响应超时了,调用方重试了一次 4.一个订单状态更新接口,调用方连续发送了两个消息,一个是已创建,一个是已付款。但是你先接收到已付款,然后又接收到了已创建 5.在支付完成订单之后,需要发送一条短信,当一台机器接收到短信发送的消息之后,处理较慢。消息中间件又把消息投递给另外一台机器处理

场景2:一键三连

小破站有一个一键三连的功能,长按可以对up主进行激励,每个人对每个视频只有一个一键三连的机会。就算再喜欢某个视频,多次操作,也只能有一键三连一次。

场景3:统计DAU/MAU

DAU/MAU,又叫日活/月活,是用于反映网站、互联网应用或网络游戏的运营情况的统计指标。所以一个用户当天或者当月登录多次(或者达到某种活跃用户判断机制多次),也只能看作一个活跃用户,不能重复计算。

2.4CRUD与幂等

有些接口可以天然的实现幂等性,比如查询接口,对于查询来说,查询一次和多次,对于系统来说,没有任何影响,查出的结果也是一样,而其他功能,例如:增加、更新、删除都要保证幂等性。 以user表举例

1、查询,select * from user where xxx,不会对数据产生任何变化,具备幂等性

2、新增,insert into user(userid, name) values(1, 'a')

如 userid 为唯一主键,即重复操作上面的业务,只会插入一条用户数据,具备幂等性

如 userid 不是主键,可以重复,那上面业务多次操作,数据都会新增多条,不具备幂等性

3、修改,区分直接赋值和计算赋值

直接赋值,update user set point = 20 where userid = 1,不管执行多少次,point都一样,具备幂等性

计算赋值,update user set point = point + 20 where userid = 1,每次操作 point 数据都不一样,不具备幂等性

4、删除,delete from user where userid = 1,多次操作,结果一样,具备幂等性

因此,我们可以得出,没有唯一主键约束的数据,和修改计算赋值数据的操作都不具备幂等性

编辑
2022-11-16
学习
00

首先,先看SpringBoot的主配置类:

@SpringBootApplication public class StartEurekaApplication { public static void main(String[] args) { SpringApplication.run(StartEurekaApplication.class, args); } }

点进@SpringBootApplication来看,发现@SpringBootApplication是一个组合注解。

@Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited @SpringBootConfiguration @EnableAutoConfiguration @ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class), @Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) }) public @interface SpringBootApplication { }

首先我们先来看 @SpringBootConfiguration:

@Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Configuration public @interface SpringBootConfiguration { }

可以看到这个注解除了元注解以外,就只有一个@Configuration,那也就是说这个注解相当于@Configuration,所以这两个注解作用是一样的,它让我们能够去注册一些额外的Bean,并且导入一些额外的配置。