你好,我是征哥,今天分享接口限流。 如果没有接口限流,可能会导致服务器负载不平衡,暴力破解密码,恶意请请求,导致服务器额外费用,拒绝服务攻击等。 因此做好接口限流很有必要。 怎么做接口限流呢?...常见的接口限流算法有 4 种: 1、固定窗口计数器 比如说每小时限制请求 10 次,超过 10 次的直接丢弃。它有个缺点,就是有时会超过 10 次,最多达到 2 倍。...4、令牌桶算法 令牌以固定速率生成。生成的令牌放入令牌桶中存放,如果令牌桶满了则多余的令牌会直接丢弃,当请求到达时,会尝试从令牌桶中取令牌,取到了令牌的请求可以执行。...[3] 需要一个 redis 来保存计数器: import aioredis import uvicorn from fastapi import Depends, FastAPI from fastapi_limiter...最后的话 本文分享了常见的接口限流技术。
子依赖 就是嵌套依赖,和嵌套 Pydantic Model 差不多意思 可以根据需求创建多层嵌套的依赖关系 比如上图,E 依赖 C、D,C、D 又依赖 B,B 又依赖 A........def query_extractor(q: Optional[str] = None): return q 就是个普通函数,接收一个 q 参数,类型 str,直接返回 q 第二层依赖 from fastapi...import Cookie, Depends, FastAPI from typing import Optional # 1、第一层依赖 def query_extractor(q: Optional...: 2021/9/25 10:26 上午 # file: 27_sub_depend.py """ from typing import Optional import uvicorn from fastapi...import Cookie, Depends, FastAPI app = FastAPI() # 1、第一层依赖 def query_extractor(q: Optional[str] =
Swagger(接口文档实时动态生成工具 一、Swagger 简介 出现背景 Open API Swagger 简介 二、Springfox 三、Swagger 用法 1.编写SpringBoot...很多人员会抱怨别人写的接口文档不规范,不及时更新。 当时自己写的时候确实最烦去写接口文档。这种痛苦只有亲身经历才会牢记于心。 如果接口文档可以实时动态生成就不会出现上面问题。...-- 接口文档可以实时动态生成工具Swagger --> io.springfox springfox-swagger2...3)添加自定义的NotIncludeSwagger 注解 在不需要生成接口文档的方法上面添加@NotIncludeSwagger 注解后,该方法将不会被Swagger 进行生成在接口文档中。..., 后端人员只需要引入Swagger和UI的坐标并在启动类添加@EnableSwagger2注解, 前端人员只需要访问 UI页面就可以实时的动态的知晓最新的接口信息, 减少人员沟通, 提升开发效率
规范既是为了接口可读性,也是方便同事间的协作。 说明:这个规范更多是针对算法工程师,对于后端开发工程师,接口开发规范还需要依次做进一步的细化。...0x01 接口设计基础原则 ---- 在说明接口开发规范之前,先说几个基础的原则: 接口统一使用UTF8编码; 接口的输入输出统一使用JSON的格式,除非特别说明; 接口统一使用POST传输数据,为了简单起见...,我们不区分post,put之类的区别; 图像统一使用Base64编码进行传输; 函数名统一使用下划线连接,类名则统一使用驼峰命名; 接口和实现分离,接口只干接口的事情,就是定义输入输出,还有参数类型转换等...0x02 命名及字段规范 ---- 接口命名规范,样例: 接口的名字是接口的门面,可读性的因素,名字格式: /object/action 其中object是操作对象,是一个名词,如上面的watermark...接口入口文件main.py,输入输出参数配置文件main_settings.py。
该工具主要用于协助规范FastAPI项目的目录及代码风格等,工具目标: 【工具重于规范】规范FastAPI后端接口项目开发; 提升后端开发效率,减少重复工作; 增加不同项目间共享模块开发的可能性。...功能介绍 项目初始化 添加模块 生成Python文件 代码风格检测 替代git clone命令的clone命令,并生成标准化的目录路径 2....clone git@git.ibbd.net:gf/iot-warning.git # 代码规范审查 # 审查当前目录 fas check # 审查指定目录 fas check app # 在当前目录生成...FastAPI项目开发 编码风格遵循PEP8,接口风格参考RESTFul。...4.1 基于FastAPI的大中型项目应该具备 函数的参数和返回值必须要有明确的参数类型定义。 模块应该使用路由进行组织,模块内紧外松。 接口必须要有单元测试,部署时可以执行单元测试来验证。
fastapi 官网介绍如下: FastAPI framework, high performance, easy to learn, fast to code, ready for production...文件 from fastapi import FastAPI app = FastAPI() @app.get("/") def read_root(): return {"Hello":...例如增加put请求: from fastapi import FastAPI from pydantic import BaseModel app = FastAPI() class Item(BaseModel...: item_id} 登录http://127.0.0.1:8000/redoc,备份Api文档,可以实时看到文档变化: 调试 登录http://127.0.0.1:8000/docs,点击对应的接口下的...Try it out,就可以调试接口: 性能 官方对性能解释如下: Independent TechEmpower benchmarks show FastAPI applications running
(十九)处理错误 FastAPI 学习之路(二十)接口文档配置相关 FastAPI 学习之路(二十一)请求体 - 更新数据 FastAPI 学习之路(二十二) FastAPI 学习之路(二十三)...前言 我们之前分享类作为依赖的注入,这次分享子依赖项。...正文 FastAPI 支持创建含子依赖项的依赖项。并且,可以按需声明任意深度的子依赖项嵌套层级。 FastAPI 负责处理解析不同深度的子依赖项。...read_items(query__extractor: str = Depends(query__extractor)): return query__extractor 我们去看下接口请求...,FastAPI 在处理同一请求时,只调用一次该子依赖项。
前言 我们要实现一个人脸识别的功能,人脸识别的都是调用本地的图片,所以我们搭建一个接口服务来提供图片的上传。...接口 一般接口 接口使用FastAPI框架 https://fastapi.tiangolo.com/zh/#_4 注意 该框架需要Python 3.6 及更高版本 环境变量中添加 KEY VALUE...q=somequery 这样我们的接口服务就搭建好了。...对接的接口文档地址 http://127.0.0.1:8000/docs 静态文件 from fastapi.staticfiles import StaticFiles app.mount("/web...接口对接人脸识别 # -*- coding:utf-8 -*- import uuid import uvicorn import os from fastapi import FastAPI, File
这次我们看下一些配置 正文 我们都知道,fastApi给我们提供了接口文档,在我们的实际开发中,我们会有很多的接口,有些接口需要分组,比如我们对于登录注册相关的模块,可以统一放在登录,...tags=["login"]) def regin(username: str,password:str): return {"name": username} 我们看下,接口文档...我们来看下,如何对接口增加一个简单的描述 from fastapi import FastAPI app = FastAPI() @app.post("/login/", tags=["login"]...", tags=["login"]) def regin(username: str,password:str): return {"name": username} 我们看下接口...欢迎关注雷子说测试开发,后续将会持续为大家分享更多的技术知识 如果你有问题可以留言或者加我微信:952943386。2021,一起牛转钱坤,一起牛逼。
最长递增子序列和子数组不同的是,子数组要求是连续的,子序列只要下标是递增的就可以,这里严格递增的意思是不能有相等的元素,必须一直递增状态表示:以 i 位置为结尾的所有的子序列中最长递增子序列的长度状态转移方程...摆动序列状态表示:由于这道题有上升和下降两种状态,所以可以定义两个状态表示f[i] :以 i 位置为结尾的所有子序列中,最后一个状态处于上升状态的最长摆动子序列的长度g[i] :以 i 位置为结尾的所有子序列中...最长数对链使用动态规划时需要确定之前的状态,但是这道题如果直接进行表示的话,下一个位置选在哪里是不能确定的,所以需要提前排好顺序,然后就变成了最长递增子序列的问题,此时只要 pairs[i][0] 的元素大于上一个...最长定差子序列1218....又由于哈希表不能存储重复元素的特性,后续存储的 b 会把之前的覆盖掉,之后找到的 b 就是距离 a 最近的还可以优化的是,既然 b 都可以放到哈希表中了,那么 a 也可以放到哈希表中,之后直接在哈希表中做动态规划在动态规划之前
RandomAccess 接口 public interface RandomAccess { } 查看源码我们发现实际上 RandomAccess 接口中什么都没有定义。...所以,在我看来 RandomAccess 接口不过是一个标识罢了。标识什么?标识实现这个接口的类具有随机访问功能。...list, key); else return Collections.iteratorBinarySearch(list, key); } ArrayList 实现了 RandomAccess 接口...,ArrayList 实现了 RandomAccess 接口,就表明了他具有快速随机访问功能。...RandomAccess 接口只是标识,并不是说 ArrayList 实现 RandomAccess 接口才具有快速随机访问功能的!
字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。...动态规划五部曲分析如下: 确定dp数组(dp table)以及下标的含义 dp[i][j] 表示以下标i-1为结尾的字符串s,和以下标j-1为结尾的字符串t,相同子序列的长度为dp[i][j]。...s,那么s 就是 t 的子序列。...所以s是t 的子序列,返回true。...true; return false; } }; 时间复杂度:O(n * m) 空间复杂度:O(n * m) 总结 这道题目算是编辑距离的入门题目(毕竟这里只是涉及到减法),也是动态规划解决的经典题型
个人主页:敲上瘾-CSDN博客 动态规划 基础dp:基础dp——动态规划-CSDN博客 多状态dp:多状态dp——动态规划-CSDN博客 一、解题技巧 区分子数组(子串)与子序列: 子数组(子串...用动态规划做子数组类的题时,对于状态表示我们可以直接设: dp[i]为以i元素结尾的子数组的... ......后面就根据具体的题目要求填写,可能是子数组的和或者子数组的积等等,无论如何都可以以i元素结尾的子数组为研究对象去思考问题,如果解决不了就尝试增加状态,但研究对象不要改变。...状态转移方程: 以i位置结尾的子数组我们可以分为两种: nums[i]单独构成一个子数组 nums[i]和以i-1结尾的最大和子数组组合成的子数组。...所以当nums[i]小于0时我们需要知道以i-1结尾的子数组的最小积。 所以状态表示为: f[i]表示:以i位置结尾的子数组的最大乘积。 g[i]表示:以i位置结尾的子数组的最小乘积。
回文子串 题目链接:https://leetcode-cn.com/problems/palindromic-substrings/ 给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。...具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。...示例 1: 输入:"abc" 输出:3 解释:三个回文子串: "a", "b", "c" 示例 2: 输入:"aaa" 输出:6 解释:6个回文子串: "a", "a", "a", "aa", "aa"...时间复杂度:O(n^3) 动态规划 动规五部曲: 确定dp数组(dp table)以及下标的含义 布尔类型的dp[i][j]:表示区间范围[i,j] (注意是左闭右闭)的子串是否是回文子串,如果是dp[...} } } return result; } }; 时间复杂度:O(n^2) 空间复杂度:O(n^2) 双指针法 动态规划的空间复杂度是偏高的
最长湍流子数组 题目链接: 978....最长湍流子数组 - 力扣(LeetCode) https://leetcode.cn/problems/longest-turbulent-subarray/description/ 2....算法原理 状态表示:以某一个位置为结尾或者以某一个位置为起点 f[i]表示:以i位置为结尾的所有子数组中,最后一个位置呈上升状态下的最长湍流子数组的长度 g[i]表示:以i位置为结尾的所有子数组中...,最后一个位置呈下降状态下的最长湍流子数组的长度 2....代码 动态规划的固定四步骤:1. 创建一个dp表 2.
Comparable 和 Comparator 的区别 Comparable 接口实际上是出自java.lang包,它有一个 compareTo(Object obj)方法用来排序。...Comparator接口实际上是出自 java.util 包,它有一个compare(Object obj1, Object obj2)方法用来排序。..., -1, 3, 3, 4, 7] 定制排序后: [7, 4, 3, 3, -1, -5, -7, -9] 重写 compareTo 方法实现按年龄来排序 person对象没有实现Comparable接口...前面一个例子的String类已经默认实现了Comparable接口,详细可以查看String类的API文档,另外其他。像Integer类等都已经实现了Comparable接口,所以不需要另外实现了。...比较 HashSet、LinkedHashSet 和 TreeSet 三者的异同 1、HashSet 是 Set 接口的主要实现类 ,HashSet 的底层是 HashMap,线程不安全的,可以存储 null
RandomAccess 接口 public interface RandomAccess { } 查看源码我们发现实际上 RandomAccess 接口中什么都没有定义。...所以,在我看来 RandomAccess 接口不过是一个标识罢了。标识什么? 标识实现这个接口的类具有随机访问功能。...list, key); else return Collections.iteratorBinarySearch(list, key); } ArrayList 实现了 RandomAccess 接口...,ArrayList 实现了 RandomAccess 接口,就表明了他具有快速随机访问功能。...RandomAccess 接口只是标识,并不是说 ArrayList 实现 RandomAccess 接口才具有快速随机访问功能的!
对于一个字符串,其子串是指连续的一段子字符串,而子序列是可以非连续的一段子字符串。...最长回文子串 和 最长回文子序列(Longest Palindromic Subsequence)是指任意一个字符串,它说包含的长度最长的回文子串和回文子序列。...例如:字符串 “ABCDDCEFA”,它的 最长回文子串 即 “CDDC”,最长回文子序列 即 “ACDDCA”。 二、最长回文子串 1....思路 首先这类问题通过穷举的办法,判断是否是回文子串并再筛选出最长的,效率是很差的。我们使用 动态规划 的策略来求解它。...思路 子序列的问题将比子串更复杂,因为它是可以不连续的,这样如果穷举的话,问题规模将会变得非常大,我们依旧是选择使用 动态规划 来解决。
最长湍流子数组 978....i 个位置为结尾时处于下降状态的最长数组长度,上升也是一样的道理,需要在第 i - 1 位置处于下降状态,就是 g[i - 1] + 1,相等时等于 1 即可 初始化:由于 1 个元素也可以称为湍急子数组...环绕字符串中唯一的子字符串 467....环绕字符串中唯一的子字符串 状态表示:dp[i] 表示以 i 位置为结尾时,有多少子串出现 状态转移方程: 和上一题其实差不多,可以分为长度为 1 和长度大于 1 的,只需要判断是否是连续的,前一个是“...,这就可能出现多次,例如“cac” 相同的子串只能统计一次,并且可以发现,以同一个字符结尾的子串只需要统计最长的即可,短的情况就包含在了长的情况,所以可以额外定义一个 hash 表来存储最终的答案,最后只需返回
刚好今天在FastAPI交流群看到了解决方案 demo.zip大小:322.2K 已经过安全软件检测无毒,请您放心下载。