什么是幂等性?
一.幂等性
什么是幂等性?
在计算机科学和数学领域中,” 幂等性 “虽然源于相同的概念,但其应用和具体含义有所不同
在数学中:幂等性是一个代数性质,描述的是一个操作或函数在多次应用后结果不变的特性
在分布式系统中:幂等性是一个重要的设计原则,它描述的是对某一资源发起一次请求和多次请求,其产生的效果都是相同的,不会因操作次数的增加而改变资源的最终状态
幂等性主要解决什么问题?
幂等性的提出主要解决分布式系统中重复提交问题,比如:像不法分子通过提交重复订单恶意刷单;由于网络波动,系统卡顿,用户多次点击支付按钮,导致重复支付;如果这些问题不能有效的解决,会对系统正常运行带来干扰,也可能带来严重的经济损失
为了解决这一系列问题,目前提出了三种行之有效的解决方案
1.数据库约束:利用数据库的唯一索引,主键等特性,保证数据的唯一性。数据库会对这种重复数据插入进行拦截,避免因为重复操作而导致数据冗余或错误
2.乐观锁:常用于数据库操作中,在更新数据时,会根据预先设置的乐观锁状态来判断是否被其他操作修改过,如果状态符合预期,则进行更新,反之,需重新进行处理,以保证数据一致性和操作的幂等性
3.唯一序列号:在进行操作时,为每个请求分配一个唯一的序列号。操作时判断与该序列号相等则执行
通过一个简单的订单系统来展示如何实现这三种方案
场景描述
假设我们有一个订单系统,用户可以提交订单,我们需要保证以下幂等性:
1.用户不能重复提交相同的订单
2.在更新订单状态时,避免并发冲突
3.通过唯一序列号确保操作的幂等性
1.利用数据库约束实现幂等性
通过在数据库中设置唯一索引或主键约束,确保数据的唯一性,当重复数据尝试插入时,数据库会抛出异常,从而阻止重复操作
数据库设计
CREATE TABLE orders(order_id INT AUTO_INCREMENT PRIMARY KEY,user_id INT NOT NULL,order_number VARCHAR(50) NOT NULL UNIQUE, --唯一订单号amount DECIMAL(10,2) NOT NULL,status VARCHAR(20) DEFAULT 'PENDING',created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
Java代码实现
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;//定义数据库连接和配置
public class OrderService{private static final string DB_URL = "jdbc:mysql://localhost:3306/your_database";private static final String USER = "your_username";//数据库用户名private static final String PASS = "your_password";//数据库密码//创建订单的方法
public void createOrder(String orderNumber,int userId,double amount){//使用参数化查询;(?,?,?)占位符预防SQL注入攻击;插入订单需要提供订单号,用户ID以及订单金额String sql = "INSERT INTO orders(order_number,user_id,amount) VALUES(?,?,?)";try(Connection conn = DriverManager.getConnection(DB_URL,USER,PASS);PreparedStatement pstmt = conn.prepareStatement(sql)){//将方法参数绑定到SQL语句的占位符中pstmt.setString(1,orderNumber);pstmt.setString(1,orderNumber);pstmt.setDouble(3,amount);//调用executeUpdate()方法执行插入操作pstmt.executeUpdate();System.out.println("订单创建成功!");}catch(SQLException e){if(e.getErrorCode() == 1062){ //禁止插入重复数据System.out.println("订单已存在,无法重新创建!");}else{System。out.println("数据库错误:" + e.getMessage());}}}
//主方法创建实例,调用createOrder方法两次,第一次正常插入订单,第二次尝试插入相同订单号
public static void main(String[] args){OrderService service = new OrderService();service.createOrder("ORDER123",1,100.0);service.createOrder("ORDER123",1,100.0); //重复提交
}
}}
在数据表设计中
order_number字段被设置为唯一,如果没有设置唯一性约束,这段代码就无法正确实现幂等性
结果:
- 第一次提交成功
- 第二次提交时,数据库会抛出唯一性约束错误,阻止重复插入
2.利用乐观锁实现幂等性
在数据库中增加一个版本号字段(如version),每次更新数据时,检查版本号是否与预期一致,如果一致,则更新数据并递增版本号
数据库设计(为了实现乐观锁,数据表中需要有一个版本号字段 version)
ALTER TABLE orders ADD COLUMN version INT DEFAULT 1;
Java代码实现
public void updateOrderStatus(String orderNumber,String newStatus){//将订单的状态更新为newStatus,并递增版本号,只有当订单号匹配且版本号匹配,才会执行该操作 String sql = "UPDATE orders SET status = ?,version = version + 1 WHERE order_number = ? AND version = ?"; String querySql = "SELECT version FROM orders WHERE order_number = ?";try(Connection conn = DriverManager.getConnection(DB_URL,USER,PASS)){}//查询当前订单的版本号PreparedStatement queryStmt = conn.prepareStatement(querySql)queryStmt.setString(1,orderNumber);ResultSet rs = queryStmt.executeQuery();if(rs.next()){int currentVersion = rs.getInt("version");//使用PreparedStatement执行更新操作try (PreparedStatement updateStmt = conn.prepareStatement(sql)) {updateStmt.setString(1, newStatus); //新的订单状态updateStmt.setString(2, orderNumber); //订单号updateStmt.setInt(3, currentVersion); //当前版本号//调用executeUpdate()方法执行更新操作int rowsAffected = updateStmt.executeUpdate();if (rowsAffected == 0) {System.out.println("订单状态更新失败,数据已被其他操作修改!");} else {System.out.println("订单状态更新成功!");}}} else {System.out.println("订单不存在!");}}} catch (SQLException e) {System.out.println("数据库错误:" + e.getMessage());}
}
//创建OrderService实例,调用updateOrderStatus方法两次,模拟并发更新
public static void main(String[] args) {OrderService service = new OrderService();service.updateOrderStatus("ORDER123", "COMPLETED");service.updateOrderStatus("ORDER123", "CANCELLED"); // 并发更新
}...
结果:
第一次调用:
- 查询到当前版本号(假设为1)
- 更新成功,版本号递增为2
- 打印:“订单状态更新成功!”
第二次调用:
- 查询到当前版本号(现在是2)
- 尝试更新时,版本号不匹配(预期版本号为1,实际版本号为2)
- 打印:“订单状态更新失败,数据已被其他操作修改!”
3.利用唯一序列号实现幂等性
为每个请求分配一个唯一的序列号(如UUID),并利用数据库的NOT EXISTS条件,在执行操作时,检查该系列号是否已存在,如果存在,则跳过操作
数据库设计(为了实现幂等性,需要设计两个表)
1.订单表:(存储订单的基本信息)
CREATE TABLE orders (order_id INT AUTO_INCREMENT PRIMARY KEY,order_number VARCHAR(50) NOT NULL UNIQUE,--order_number是订单的唯一标识status VARCHAR(20) DEFAULT 'PENDING',created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
2.操作记录表(用于记录对订单的操作)
CREATE TABLE order_operations (operation_id VARCHAR(50) PRIMARY KEY,--唯一标识,使用UUID生成order_id INT NOT NULL,operation_type VARCHAR(20) NOT NULL,created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
Java代码实现
import java.util.UUID;public void processOrderOperation(String orderNumber, String operationType) {String operationId = UUID.randomUUID().toString(); // 生成唯一序列号//将操作记录插入到order_operations表中 String sql = "INSERT INTO order_operations (operation_id, order_id, operation_type) "+ "SELECT ?, (SELECT order_id FROM orders WHERE order_number = ?), ? "+ "WHERE NOT EXISTS (SELECT 1 FROM order_operations WHERE operation_id = ?)"; //使用WHERE NOT EXISTS子句,检查是否已经存在相同的operation_id//建立数据库连接并执行SQL语句 try (Connection conn = DriverManager.getConnection(DB_URL, USER, PASS);PreparedStatement pstmt = conn.prepareStatement(sql)) {pstmt.setString(1, operationId);pstmt.setString(2, orderNumber);pstmt.setString(3, operationType);pstmt.setString(4, operationId);int rowsAffected = pstmt.executeUpdate();if (rowsAffected > 0) {System.out.println("操作成功执行!");} else {System.out.println("操作已被处理,跳过重复执行!");}} catch (SQLException e) {System.out.println("数据库错误:" + e.getMessage());}
}
//创建OrderService实例,调用processOrderOperation方法两次,模拟重复操作
public static void main(String[] args) {OrderService service = new OrderService();service.processOrderOperation("ORDER123", "PAYMENT");service.processOrderOperation("ORDER123", "PAYMENT"); // 重复操作
}
结果:
第一次调用:
- 生成一个新的operation_id
- 插入操作记录成功,打印“操作成功执行!”
第二次调用
- 生成一个新的operation_id
- 由于幂等性检查(WHERE NOT EXISTS),不会重复插入操作记录,打印“操作已被处理,跳过重复执行!
幂等性保证:即使多次调用该方法,最终结果与调用一次相同,满足幂等性要求
相关文章:
什么是幂等性?
一.幂等性 什么是幂等性? 在计算机科学和数学领域中,” 幂等性 “虽然源于相同的概念,但其应用和具体含义有所不同 在数学中:幂等性是一个代数性质,描述的是一个操作或函数在多次应用后结果不变的特性 在分布式系统…...
2025/2/19机试准备
1.%c不忽略空格( ) 2.启示 #include <stdio.h> #include <string.h> int main(){char str[100]{0};int x,y;int n1,n2,n3;int i;while(scanf("%s",str)!EOF){istrlen(str);if(i%30){//12446-2n1i/3;n3i/3;n2i/32;}else if(i%31){…...
【wrk】wrk 压测工具入门
1. 简介 wrk 是我无意间发现的一款简单好用的 HTTP 接口性能测试工具,目前在 Github 上已经有 38k 的 star 数了! ⭐ Github地址:https://github.com/wg/wrk 2. 安装 环境要求: windows10 平台安装过 ubuntu 等 Linux 子系统 …...
12.1 Android中协程的基本使用
文章目录 前言1、导入依赖2、使用协程获取服务器中的数据2.1 定义请求回调结果的数据类2.2 网络请求 3、网络回调结构4、通过ViewModel处理网络请求数据 前言 在使用协程的时候一直没有一个具体的概念,只知道协程能够使得异步操作等同于同步操作,且不会…...
华为 eNSP:MSTP
一、MSTP是什么 MSTP是多业务传送平台(Multi-Service Transport Platform)的缩写,它是一种基于SDH(同步数字体系)技术的传输网络技术,用于同时实现TDM、ATM、以太网等多种业务的接入、处理和传送。 MSTP技…...
HMSC联合物种分布模型在群落生态学中的贝叶斯统计分析应用
联合物种分布模型(Joint Species Distribution Modelling,JSDM)在生态学领域,特别是群落生态学中发展最为迅速,它在分析和解读群落生态数据的革命性和独特视角使其受到广大国内外学者的关注。在学界不同研究团队研发出…...
LangChain大模型应用开发:消息管理与聊天历史存储
介绍 大家好,博主又来给大家分享知识了。今天要给大家分享的是LangChain中的消息管理与聊天历史存储。 在LangChain里,消息管理可精细区分用户、助手、系统等不同角色消息,有序调度处理,让交互更顺畅。而聊天历史存储则赋予模型 …...
flink-cdc同步数据到doris中
1 创建数据库和表 1.1 数据库脚本 -- 创建数据库eayc create database if not exists ods_eayc; -- 创建数据表2 数据同步 2.1 flnk-cdc 参考Flink CDC实时同步MySQL到Doris Flink CDC 概述 2.1.1 最简单的单表同步 从下面的yml脚本可以看到,并没有doris中创建…...
轻量级在线ETL数据集成工具架构设计与技术实现深度剖析
在当今数字化时代,企业面临着海量异构数据的整合挑战。ETL(Extract, Transform, Load)工具作为数据集成的核心,负责将分散在不同数据源中的数据进行抽取、转换和加载,以构建统一的数据视图。本文将深入剖析一款基于诺依框架开发的在线ETL数据集成工具,重点阐述其架构设计…...
【Linux专栏】find命令+同步 实验
Linux & Oracle相关文档,希望互相学习,共同进步 风123456789~-CSDN博客 1.实验背景 需要把一个目录中所有文件,按照目录把某个时间点之前的同步到一个盘中,之后的同步备份到另一个盘中,实现不同时间段的备份。 本次实现目标:把common文件夹中 2025年之后的含文件夹…...
15-最后一个单词的长度
给你一个字符串 s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。 单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。 方法一:使用字符串分割 可以使用字符串的 split 方法将字符串按空格分割…...
DeepSeek和ChatGPT的全面对比
一、模型基础架构对比(2023技术版本) 维度DeepSeekChatGPT模型家族LLAMA架构改进GPT-4优化版本参数量级开放7B/35B/120B闭源175B位置编码RoPE NTK扩展ALiBiAttention机制FlashAttention-3FlashAttention-2激活函数SwiGLU ProGeGLU训练框架DeepSpeedMeg…...
LlamaFactory可视化模型微调-Deepseek模型微调+CUDA Toolkit+cuDNN安装
LlamaFactory https://llamafactory.readthedocs.io/zh-cn/latest/ 安装 必须保证版本匹配,否则到训练时,找不到gpu cuda。 否则需要重装。下面图片仅供参考。因为cuda12.8装了没法用,重新搞12.6 cudacudnnpytorch12.69.612.6最新…...
什么是网关,网关的作用是什么?网络安全零基础入门到精通实战教程!
1. 什么是网关 网关又称网间连接器、协议转换器,也就是网段(局域网、广域网)关卡,不同网段中的主机不能直接通信,需要通过关卡才能进行互访,比如IP地址为192.168.31.9(子网掩码:255.255.255.0)和192.168.7.13(子网掩码…...
Linux基础25-C语言之分支结构Ⅱ【入门级】
用if语句实现分支结构 单分支:if… 语法: //语法1:舍弃{} if(条件表达式);单语句; //语法2:必须保留{} if(条件表达式) {单语句或者复合语句; }流程图 功能 若表达式值为真(非0),则执行表达式…...
实战开发coze应用-姓氏头像生成器(上)
欢迎关注【AI技术开发者】 上次,我们开发了一个对话形式的头像生成器智能体(Agents),广受大家欢迎。 同时也接收到一些用户的反馈,生成前无法看到头像样式、初次使用不会用等等。 对此,我准备使用Coze开…...
企业内部知识库:安全协作打造企业智慧运营基石
内容概要 作为企业智慧运营的核心载体,企业内部知识库通过结构化的信息聚合与动态化的知识流动,为组织提供了从数据沉淀到价值转化的系统性框架。其底层架构以权限管理为核心,依托数据加密技术构建多层级访问控制机制,确保敏感信…...
uniapp 滚动尺
scale组件代码(部分class样式使用到了uview1.0的样式) <template><view><view class"scale"><view class"pointer u-flex-col u-col-center"><u-icon name"arrow-down-fill" size"26&qu…...
vue3之echarts3D圆柱
vue3之echarts3D圆柱 效果: 版本 "echarts": "^5.1.2" 核心代码: <template><div ref"charts" class"charts"></div><svg><linearGradient id"labColor" x1"0&q…...
SQL 优化工具使用之 explain 详解
一、导读 对于大部分开发人员来说,平常接触的无非就是增删改查这些基本操作,创建存储过程,视图等等都是 DBA 该干的活,但是想要把这些基本操作写的近乎完美也是一件难事。 而 explain 显示了 MySQL 如何使用索引来处理 select 语…...
SpringBoot启动失败之application.yml缩进没写好
修改前: spring前面空格了 报错输出:Failed to configure a DataSource: ‘url’ attribute is not specified and no embedded datasource could be configured. Reason: Failed to determine a suitable driver class Action: Consider the follow…...
基于SpringBoot+vue粮油商城小程序系统
粮油商城小程序为用户提供方便快捷的在线购物体验,包括大米、面粉、食用油、调味品等各种粮油产品的选购,用户可以浏览商品详情、对比价格、下单支付等操作。同时,商城还提供优惠活动、积分兑换等福利,让用户享受到更多实惠和便利…...
【JavaEE进阶】Spring MVC(3)
欢迎关注个人主页:逸狼 创造不易,可以点点赞吗 如有错误,欢迎指出~ 返回响应 返回静态页面 //RestController Controller RequestMapping("/response") public class ResponseController {RequestMapping("/returnHtmlPage&…...
案例-17.文件上传-阿里云OSS-入门
一.文件上传 我们在OSS页面中找到SDK下载,点击SDK示例,找到帮助文档。 点击JAVA并安装 在安装SDK中找到在Maven项目中加入依赖项(推荐方式) 将其中的依赖复制到pom文件中去。 <dependency><groupId>com.aliyun.oss</groupId><ar…...
java数据结构_优先级队列(堆)_6.2
3. 常用接口 3.1 PriorityQueue的特性 Java集合框架中提供了PriorityQueue和PriorityBlockingQueue两种类型的优先级队列,PriorityQueue的线性不安全的,PriorityBlockingQueue是线程安全的,这里主要介绍PriorityQueueu。 关于PriorityQueue…...
如何维护和保养直线模组?
直线模组是一种常见的传动机构,被广泛应用到各种各样的设备中,如激光焊接、激光切割、涂胶机、喷涂机、小型数控机床等设备。其保养与维护对于其使用寿命和性能至关重要,为了维护和保养直线模组并确保其使用寿命,可以采取以下措施…...
DeepSeek 助力 Vue 开发:打造丝滑的表单验证(Form Validation)
前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 Deep…...
java连接redis
1.使用 1.创建java工程 2.引入依赖 <dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>5.2.0</version> </dependency> 3. //1.获取jedis对象,把所有对redis的操作都封装到…...
DeepSeek掀起推理服务器新风暴,AI应用迎来变革转折点?
AI 浪潮下,推理服务器崭露头角 在科技飞速发展的当下,AI 是耀眼明星,席卷各行业,深刻改变生活与工作模式,从语音助手到医疗诊断、金融风险预测,AI 无处不在。其发展分数据收集整理、模型训练、推理应用三个…...
宏块划分的原理
宏块划分并不是物理上的划分,而是逻辑上的划分。 宏块的划分是编码器在处理视频帧时的一种逻辑操作,用于将视频帧分解为更小的编码单元,以便后续的预测、变换、量化和编码等操作。视频帧的物理存储方式(如 YUV 数据的存储顺序)并不会因为宏块的划分而发生改变。 接下来,…...
分享8款AI生成PPT的工具!含测评
随着人工智能技术的飞速进步,制作PPT变得愈发便捷,仅需输入主题指令,便能在瞬间获得一份完整的演示文稿。尤其在制作篇幅较长的PPT时,手动编写每一页内容并设计格式和排版,不仅效率低下,而且耗时耗力。 本…...
【NLP算法面经】字节跳动算法岗四面详细面经(★附面题总结★)
【NLP算法面经】字节跳动算法岗四面详细面经(★附面题总结★) 🌟 嗨,你好,我是 青松 ! 🌈 自小刺头深草里,而今渐觉出蓬蒿。 NLP Github 项目推荐: 【AI 藏经阁】&#…...
[AI相关]Unity的C#代码如何简写
是一个某培训机构的飞行棋教学源码 不知道,是否有人想知道怎么可以简写 (这个问AI,DeepSeek也应该找不到答案的) 静态变量 属性引用 单例 注入 一些UnityEvent特性就不说了。。。 IL 注入 运算符号改写...
DeepSeek模型快速部署教程-搭建自己的DeepSeek
前言:在人工智能技术飞速发展的今天,深度学习模型已成为推动各行各业智能化转型的核心驱动力。DeepSeek 作为一款领先的 AI 模型,凭借其高效的性能和灵活的部署方式,受到了广泛关注。无论是自然语言处理、图像识别,还是…...
TaskBuilder创建客户信息文件夹
数据模型创建好之后,我们就可以进行前后端功能的开发了。首先,我们需要创建好客户信息文件夹,以便专门存放与客户信息管理有关的前端文件,操作步骤如下: 点击销售管理示例项目“前端文件”右侧的加号按钮: …...
javaSE学习笔记22-线程(thread)-线程通信、线程池
线程通信 应用场景:生产者和消费者问题 假设仓库中只能存放一件产品,生产者将生产出来的产品放入仓库,消费者将仓库中产品取走消费 如果仓库中没有产品,则生产者将产品放入仓库,否则停止生产并等待,…...
解决 WSL Ubuntu 中 /etc/resolv.conf 自动重置问题
解决 WSL Ubuntu 中 /etc/resolv.conf 自动重置问题 前言问题描述问题原因尝试过的命令及分析解决方案:修改 wsl.conf 禁用自动生成总结 前言 在使用 Windows Subsystem for Linux (WSL) 的 Ubuntu 子系统时,你可能会遇到 /etc/resolv.conf 文件被自动重…...
使用mybatis -基本的增删改查
目录 项目准备 项目步骤 具体细节 1 主配置文件的处理 2 Test 测试类 3 在 loginMapper 接口中书写 对 数据库操作的方法 4 实体类 pojo 、entity 要和 数据库对应的表的字段 一一对应 5 在 loginMapper.xml 映射文件 书写 具体实现 loginMapper 接口中方法的sql 语句…...
通过API 调用本地部署 deepseek-r1 模型
如何本地部署 deepseek 请参考(windows 部署安装 大模型 DeepSeek-R1) 那么实际使用中需要开启API模式,这样可以无拘无束地通过API集成的方式,集成到各种第三方系统和应用当中。 上遍文章是基于Ollama框架运行了deepSeek R1模型…...
模型量化初始知识
背景 PyTorch对量化的支持目前有如下三种方式: Post Training Dynamic Quantization,模型训练完毕后的动态量化; Post Training Static Quantization,模型训练完毕后的静态量化; QAT(Quantization Aware T…...
成熟开发者需具备的能力
精业务 • 指深入理解和熟悉所开发软件的业务逻辑和需求。 • 开发者需要明确软件要解决的问题、面向的用户群体以及核心功能等。 • 精业务有助于开发者更好地设计系统架构、编写符合业务需求的代码,并能根据业务变化灵活调整开发计划。 懂原理 • 指掌握编程的基…...
java练习(32)
ps:题目来自力扣 环形链表 给你一个链表的头节点 head ,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表…...
linux配置网络安全服务图
系统安全防范: 1:用户与口令安全。避免使用脆弱口令,连续多次登录失败将禁止再次登录。 2:对象访问的安全性。对文件,目录和进程等对象的访问采用强制访问控制(MAC)来实现,不同的用…...
PTA:使用指针方式求一个给定的m×n矩阵各行元素之和
本题要求编写程序,使用指针方式求一个给定的mn矩阵各行元素之和。(例如:scanf("%d", *(matrix i) j); // 使用指针方式访问二维数组元素) 输入格式: 输入第一行给出两个正整数m和n(1<m<6, 1<n&…...
一.AI大模型开发-初识机器学习
机器学习基本概念 前言 本文主要介绍了深度学习基础,包括机器学习、深度学习的概念,机器学习的两种典型任务分类任务和回归任务,机器学习中的基础名词解释以及模型训练的基本流程等。 一.认识机器学习 1.人工智能和机器学习 人工智能&am…...
【DeepSeek服务器部署全攻略】Linux服务器部署DeepSeek R1模型、实现API调用、搭建Web页面以及专属知识库
DeepSeek R1模型的Linux服务器搭建、API访问及Web页面搭建 1,引言2,安装Ollama工具3,下载DeepSeek R1 模型4,DeepSeek命令行对话5,DeepSeek API接口远程调用6,DeepSeek结合Web-ui实现图形化界面远程访问6.1…...
利用多线程加速ESMC-6B模型API调用以及403Forbidden问题的解决
前言 只对之前这篇文章进行了补充 403 Forbidden问题的解决 这几天用了一下ESMC-6B的API,发现被403 forbidden了 排查问题查来查去,发现需要翻墙才可以访问(怎么又被针对了) 于是就需要在服务器上面接入VPN,想了想…...
zyNo.25
SSRF漏洞 在了解ssrf漏洞前先了解curl命令的使用 1.curl命令的使用 基本格式:curl<参数值>请求地址 get请求:curl http://127.0.0.1 post请求:curl -X POST -d "a1&b2" http://127.0.0.1/(其中,使用-X参…...
golang中数组和slice的区别及使用
来自于《go语言中文文档》的学习及自我分析 数组和切片的区别 golang中有两个很相似的数据结构:数组(Array)和slice。数组和slice实际有各自的优缺点和区别,这里列出最主要的区别 功能点数组slice概念是同一种数据类型的固定长…...
撕碎QT面具(7):container控件被spacer挤扁,无法进行控件添加的处理方案。
调节容器控件最小大小,然后把内部设计好后,对容器使用水平布局或垂直布局。这样容器的控件就不会被挤扁。...