0%

1. 签名

为了防止Controller接口中的数据被篡改,很多时候我们需要对Controller接口做签名

接口请求方将请求参数 + 时间戳 + 密钥拼接成一个字符串,然后通过md5等hash算法,生成一个前面sign。

然后在请求参数或者请求头中,增加sign参数,传递给API接口。

API接口的网关服务,获取到该sign值,然后用相同的请求参数 + 时间戳 + 密钥拼接成一个字符串,用相同的m5算法生成另外一个sign,对比两个sign值是否相等。

如果两个sign相等,则认为是有效请求,API接口的网关服务会将给请求转发给相应的业务系统。

如果两个sign不相等,则API接口的网关服务会直接返回签名错误。

问题来了:签名中为什么要加时间戳?

答:为了安全性考虑,防止同一次请求被反复利用,增加了密钥没破解的可能性,我们必须要对每次请求都设置一个合理的过期时间,比如:15分钟。

这样一次请求,在15分钟之内是有效的,超过15分钟,API接口的网关服务会返回超过有效期的异常提示。

阅读全文 »

1,高并发下如何保证接口的幂等性

​ 1,insert 之前先根据name 或者 code 进行 select,如果数据存在则进行 update 操作,不存在执行 insert,

​ 2, 加悲观锁,在同一事务操作过程中锁住一行数据,其他请求等待,

​ 3,加乐观锁,判断操作影响行数,如果影响 1 行其他数据操作,如果 0 行直接返回值成功。

​ 4,添加唯一索引,当出现相同请求时会抛出索引异常,

​ 5,建防止重复的表,表中字段主要包含 id 和唯一索引,插入数据之前会先走防重表,判断唯一索引是否存在。

​ 6,通过状态进行处理,例如已支付的状态是已完成。

1. insert前先select

通常情况下,在保存数据的接口中,我们为了防止产生重复数据,一般会在insert前,先根据namecode字段select一下数据。如果该数据已存在,则执行update操作,如果不存在,才执行 insert操作。

图片

阅读全文 »

1,文本转语音采用 ffmeg 工具进行转换。websocket

​ 通过pydub包模块实现文本转语音. http 请求

2,语音转文本:采用vosk模型进行语音识别,将识别结果通过 websocket 的方式返回给前端 websocket

​ 采用vosk模型进行语音识别,将识别结果通过http 请求的方式将结果返回给前端 http 请求

3, 知识图谱,读取不同 excel 表格的文件内容,然后建立对应的节点与关系。建立完成之后通过检查数据判断是否正常写入。

阅读全文 »

1, dockerfile 文件当中 copy 和 add 的区别是什么?

copy: 只进行复制文件和目录,不会解压归档文件或者从 url 进行下载。

add: 会自动解压归档文件,可以从指定 url 下载文件并添加到镜像中。

阅读全文 »

1, 线程,进程,协程

线程:程序执行中一个单一的顺序控制流程,是程序执行的最小单元,一个进程可以有一个或多个线程。

进程:是程序执行的一次过程,是临时的,有生命周期的。任何进程都可以同其他进程一起并发执行,是系统进行资源分配,调度的一个独立单位,由程序,数据和进程控制块三部分组成。

协程:在执行函数 A 时可以随时中断去执行函数B,然后中断函数 B继续执行函数 A,协程是一个线程在执行。

2,GIL 锁

全局解释器锁,同一进程加入有多个线程运行,一个线程在运行python程序时会霸占python 解释器,也就增加了一把锁。使该进程中的其他线程无法运行,等该线程运行完成之后其他线程才能运行。

3,多进程,多线程,进程池,线程池

多进程:python 提供了multiprocessing模块来支持多进程编程。

可以通过Process类来创建进程,并使用Queue、Pipe等数据结构来实现进程间通信。同时,Python中还有一些其他的并行编程库,如concurrent.futures和joblib,它们也提供了更方便的接口来实现并行计算。

进程池:创建适当的进程放入进程池,等待待处理事件,当处理完事件后进程不会销毁,仍然在进程池中等待处理其他事件,直到事件全部处理完毕.进程退出。

阅读全文 »