当前位置: 首页 > news >正文

分布式锁: Redis和ZooKeeper两种分布式锁对比


在分布式系统中,分布式锁是协调多节点共享资源访问的核心机制。RedisZooKeeper 是两种常用的分布式锁实现方案,但两者的设计理念、适用场景和优缺点存在显著差异。本文将从 一致性模型、性能、可靠性、实现原理 等维度进行对比,并提供技术选型建议。


一、核心设计理念对比

特性RedisZooKeeper
数据模型内存数据库(Key-Value)分布式协调服务(树形节点)
一致性模型AP(高可用性 + 分区容忍性)CP(强一致性 + 分区容忍性)
锁的实现机制基于 SETNX + Lua 脚本基于临时顺序节点(Ephemeral Sequential)
锁释放方式依赖过期时间或客户端显式释放客户端断开时自动释放(临时节点特性)
典型场景高并发、允许短暂锁失效强一致性、高可靠性场景

二、实现原理对比

1. Redis 分布式锁

核心步骤
  1. 加锁
    使用 SET key unique_value NX PX expire_time 原子命令,若 Key 不存在则设置值并定义过期时间。
  2. 解锁
    通过 Lua 脚本原子性验证 unique_value 后删除 Key。
  3. 自动续期(如 Redisson):
    后台线程(看门狗)定期检查并延长锁的过期时间。
优点
  • 高性能:基于内存操作,TPS 可达 10W+。
  • 简单易用:原生支持或通过客户端库(如 Redisson)快速集成。
  • 灵活性:支持多种锁类型(可重入锁、公平锁、红锁等)。
缺点
  • 弱一致性风险
    • 主从异步复制可能导致锁丢失(如主节点宕机且锁未同步到从节点)。
    • RedLock 算法可缓解,但无法完全避免时钟漂移、网络分区等问题。
  • 依赖过期时间:若业务执行时间超出锁过期时间,可能导致锁失效。

2. ZooKeeper 分布式锁

核心步骤
  1. 创建临时顺序节点
    客户端在锁对应的 ZNode 下创建临时顺序节点(如 /lock/resource_00000001)。
  2. 判断最小节点
    检查当前节点是否是最小序号节点,若是则获取锁;否则监听前一个节点的删除事件。
  3. 释放锁
    客户端断开连接时,临时节点自动删除,触发后续节点获取锁。
优点
  • 强一致性:基于 ZAB 协议,所有操作全局有序,保证锁的互斥性。
  • 自动释放:客户端崩溃或网络断开时,临时节点自动删除,避免死锁。
  • 无过期时间风险:无需依赖超时机制,适合长时间任务。
缺点
  • 性能较低:写操作需集群多数节点确认,TPS 通常在 1W 以下。
  • 客户端复杂性:需处理连接管理、Watch 事件重注册等问题。
  • 脑裂问题:极端情况下,ZooKeeper 集群可能出现脑裂(概率极低)。

三、关键维度对比

1. 一致性保障

  • Redis
    • 主从异步复制下存在锁丢失风险(即使使用 RedLock,也无法完全避免时钟问题)。
    • 适合对锁的短暂失效有一定容忍度的场景(如秒杀库存扣减)。
  • ZooKeeper
    • 基于 ZAB 协议保证强一致性,所有客户端看到的锁状态一致。
    • 适合对锁可靠性要求极高的场景(如金融交易、分布式事务)。

2. 性能

  • Redis
    • 内存操作 + 单线程模型,吞吐量高,适合高并发场景。
  • ZooKeeper
    • 写操作需集群多数节点持久化,延迟较高(通常 1-10ms),不适合高频锁竞争。

3. 容错性与高可用

  • Redis
    • 集群模式下通过分片和主从复制实现高可用,但主从切换可能丢锁。
    • RedLock 需多个独立 Redis 实例,运维成本高。
  • ZooKeeper
    • 集群基于 ZAB 协议,宕机节点数小于半数时仍可用。
    • 数据持久化到磁盘,重启后状态不丢失。

4. 使用复杂度

  • Redis
    • 原生命令简单,但需处理锁续期、误删等问题(Redisson 等库已封装)。
  • ZooKeeper
    • 需理解临时节点、Watch 机制,客户端需处理会话超时和重连。

四、典型应用场景

1. Redis 适用场景

  • 高并发读/写:如电商秒杀、优惠券发放。
  • 允许锁短暂失效:结合业务幂等性补偿(如订单重复提交检测)。
  • 已有 Redis 基础设施:减少运维复杂度。
示例
// Redisson 实现秒杀锁
RLock lock = redisson.getLock("seckill:" + itemId);
if (lock.tryLock(0, 30, TimeUnit.SECONDS)) {try {// 扣减库存} finally {lock.unlock();}
}

2. ZooKeeper 适用场景

  • 强一致性要求:如分布式事务协调、主节点选举。
  • 长事务处理:如批量数据处理任务,避免锁超时。
  • 系统关键路径:如支付系统、银行核心交易。
示例
// Curator 实现分布式锁
InterProcessMutex lock = new InterProcessMutex(client, "/transaction/lock");
if (lock.acquire(10, TimeUnit.SECONDS)) {try {// 执行事务} finally {lock.release();}
}

五、选型建议

场景推荐方案理由
高频短期锁(如秒杀)Redis + Redisson高性能、低延迟,结合业务幂等性可容忍偶发锁失效。
低频长期锁(如主节点选举)ZooKeeper强一致性、自动释放,避免锁超时风险。
高可靠性金融交易ZooKeeper数据一致性优先,可接受性能损耗。
多数据中心部署Redis (RedLock)ZooKeeper 跨数据中心延迟高,Redis 分片部署更灵活。
已有技术栈兼容性根据现状选择若已使用 Redis 集群,优先 Redis;若已有 ZooKeeper(如 Kafka 集群),选 ZK。

六、总结

  • Redis 分布式锁
    优势在于性能和简单性,适合高并发、允许短暂不一致的场景;风险在于主从切换和时钟问题,需结合业务设计补偿机制。

  • ZooKeeper 分布式锁
    优势在于强一致性和可靠性,适合关键业务场景;代价是性能和复杂度,需权衡吞吐量需求。

最终建议

  • 若系统要求 高性能 + 最终一致性,选择 Redis(配合 Redisson)。
  • 若系统要求 强一致性 + 高可靠,选择 ZooKeeper(配合 Curator)。
  • 在混合场景中,可针对不同业务模块选择不同锁方案(如核心交易用 ZooKeeper,库存扣减用 Redis)。

相关文章:

分布式锁: Redis和ZooKeeper两种分布式锁对比

在分布式系统中,分布式锁是协调多节点共享资源访问的核心机制。Redis 和 ZooKeeper 是两种常用的分布式锁实现方案,但两者的设计理念、适用场景和优缺点存在显著差异。本文将从 一致性模型、性能、可靠性、实现原理 等维度进行对比,并提供技术…...

笔试强训:Day5

一、笨小猴&#xff08;哈希数学&#xff09; 笨小猴_牛客题霸_牛客网 #include <iostream> #include <cmath> using namespace std; string s; bool isprime(int x){//试除法if(x2) return true;if(x<2||x%20) return false;int nsqrt(x);for(int i3;i<n;i…...

Flask框架搭建

1、安装Flask 打开终端运行以下命令&#xff1a; pip install Flask 2、创建项目目录 在Windows上&#xff1a; venv\Scripts\activate 执行 3、创建 app.py 文件 可以在windows终端上创建app.py文件 &#xff08;1&#xff09;终端中创建 使用echo命令 echo "fr…...

【Kubernetes】单Master集群部署(第二篇)

目录 前言 一、实验环境 二、操作系统初始化配置 三、部署 docker引擎 四、部署 etcd 集群 4.1 准备签发证书环境 4.2 准备cfssl证书生成工具 4.3 生成Etcd证书 4.4 启动etcd服务 4.5 检查群集状态 五、部署 Master 组件 5.1 准备软件包 5.2 创建用于生成CA证书、…...

JavaScript性能优化实战(10):前端框架性能优化深度解析

引言 React、Vue、Angular等框架虽然提供了强大的抽象和开发效率,但不恰当的使用方式会导致严重的性能问题,针对这些问题,本文将深入探讨前端框架性能优化的核心技术和最佳实践。 React性能优化核心技术 React通过虚拟DOM和高效的渲染机制提供了出色的性能,但当应用规模…...

vue3中预览Excel文件

1.前言 有时候项目中需要预览Excel文件&#xff0c;特别是对于.xls格式的Excel文件许多插件都不支持&#xff0c;经过尝试&#xff0c;最终有三种方案可以实现.xlsx和.xls格式的Excel文件的预览&#xff0c;各有优缺点 2.luckyexcel插件 2.1说明 该插件优点在于能保留源文件…...

VsCode和AI的前端使用体验:分别使用了Copilot、通义灵码、iflyCode和Trae

1、前言 大杂烩~每次开发一行代码&#xff0c;各个AI争先恐后抢着提供帮助 备注&#xff1a;四款插件都需要先去官网注册账号&#xff0c;安装好之后有个账号验证。 2、插件详解 2.1、AI分析的答案 GitHub Copilot 定位&#xff1a;老牌 AI 代码补全工具&#xff0c;深度集成…...

【问题排查】easyexcel日志打印Empty row!

问题原因 日志打印​​I/O 操作开销​&#xff08;如 Log4j 的 FileAppender&#xff09;会阻塞业务线程&#xff0c;直到日志写入完成&#xff0c;导致接口响应变慢 问题描述 在线上环境&#xff0c;客户反馈导入一个不到1MB的excel文件&#xff0c;耗时将近5分钟。 问题排…...

若依框架SpringBoot从Mysql替换集成人大金仓(KingBase)数据库

一、安装人大金仓数据库 1、下载 前往人大金仓数据库下载自己想要的版本&#xff08;建议下载Mysql兼容版&#xff09;人大金仓官网&#xff0c;点击服务与支持&#xff0c;点击安装包下载 点击软件版本&#xff0c;选择数据库 选择合适的版本&#xff0c;点击下载&#xff0…...

Graph Representation Learning【图最短路径优化/Node2vec/Deepwalk】

文章目录 Q1&#xff1a;网络性质&#xff1a;1.数据读取与邻接表构建&#xff1a;2.基本特征和连通性&#xff1a; 算法思路&#xff1a;1. 广度优先搜索&#xff08;BFS&#xff09;标记前驱:2. 回溯生成所有最短路径: 实验结果&#xff1a;复杂度分析&#xff1a; Q2&#x…...

ZYNQ Overlay硬件库使用指南:用Python玩转FPGA加速

在传统的FPGA开发中,硬件设计需要掌握Verilog/VHDL等硬件描述语言,这对软件开发者而言门槛较高。Xilinx的PYNQ框架通过Overlay硬件库彻底改变了这一现状——开发者只需调用Python API即可控制FPGA的硬件模块,实现硬件加速与灵活配置。本文将深入探讨ZYNQ Overlay的核心概念、…...

Git基础使用方法与命令总结

Git 是一个分布式版本控制系统&#xff0c;用于跟踪代码或文件的修改历史。以下是 Git 的基础使用方法和常用命令&#xff0c;适合快速上手&#xff1a; 1. 安装与配置 安装 Git 下载地址&#xff1a;https://git-scm.com/downloads&#xff08;支持 Windows/macOS/Linux&…...

rust语言,与c,go语言一样也是编译成二进制文件吗?

是的&#xff0c;Rust 和 C、Go 一样&#xff0c;默认情况下会将代码编译成二进制可执行文件&#xff08;如 ELF、PE、Mach-O 等格式&#xff09;&#xff0c;但它们的编译过程和运行时特性有所不同&#xff1a; 1. Rust&#xff08;类似 C&#xff0c;直接编译为机器码&#x…...

从银行排队到零钱支付:用“钱包经济学”重构Java缓存认知

"当你的系统还在频繁访问数据库银行时&#xff0c;聪明的开发者早已学会用钱包零钱策略实现毫秒级响应——本文将用理财思维拆解缓存设计精髓&#xff0c;教你如何让代码学会小额快付的架构艺术。" 【缓存】作为程序员必须理解的概念之一&#xff0c;让我们用 ‌「钱…...

Json rpc 2.0比起传统Json在通信中的优势

JSON-RPC 2.0 相较于直接使用传统 JSON 进行通信&#xff0c;在协议规范性、开发效率、通信性能等方面具有显著优势。以下是核心差异点及技术价值分析&#xff1a; 一、结构化通信协议&#xff0c;降低开发成本 传统 JSON 通信需要开发者自定义数据结构和处理逻辑&#xff0c;…...

无缝部署您的应用程序:将 Jenkins Pipelines 与 ArgoCD 集成

在 DevOps 领域&#xff0c;自动化是主要目标之一。这包括自动化软件部署方式。与其依赖某人在部署软件的机器上进行 rsync/FTP/编写软件&#xff0c;不如使用 CI/CD 的概念。 CI&#xff0c;即持续集成&#xff0c;是通过代码提交创建工件的步骤。这可以是 Docker 镜像&#…...

网络安全-等级保护(等保) 2-5-1 GB/T 25070—2019 附录B (资料性附录)第三级系统安全保护环境设计示例

################################################################################ 文档标记说明&#xff1a; 淡蓝色&#xff1a;时间顺序标记。 橙色&#xff1a;为网络安全标准要点。 引用斜体&#xff1a;为非本文件内容&#xff0c;个人注解说明。 加粗标记&#xff1a…...

精准掌控张力动态,重构卷对卷工艺设计

一、MapleSim Web Handling Library仿真和虚拟调试解决方案 在柔性材料加工领域&#xff0c;卷对卷&#xff08;Roll-to-Roll&#xff09;工艺的效率与质量直接决定了产品竞争力。如何在高动态生产场景中实现张力稳定、减少断裂风险、优化加工速度&#xff0c;是行业长期面临的…...

怎么使用python进行PostgreSQL 数据库连接?

使用Python连接PostgreSQL数据库 在Python中连接PostgreSQL数据库&#xff0c;最常用的库是psycopg2。以下是详细的使用指南&#xff1a; 安装psycopg2 首先需要安装psycopg2库&#xff1a; pip install psycopg2 # 或者使用二进制版本&#xff08;安装更快&#xff09; pi…...

SQL Server权限设置的几种方法

SQL Server 的权限设置是数据库安全管理的核心&#xff0c;正确配置权限可以有效防止数据泄露、误操作和恶意篡改。下面详细介绍 SQL Server 权限设置的方法&#xff0c;涵盖从登录名创建到用户授权的完整流程。 一、权限设置的基本概念 SQL Server 的权限体系主要包括以下几…...

Neo4j(一) - Neo4j安装教程(Windows)

文章目录 前言一、JDK与Neo4j版本对应关系二、JDK11安装及配置1. JDK11下载2. 解压3. 配置环境变量3.1 打开系统属性设置3.2 新建系统环境变量3.3 编辑 PATH 环境变量3.4 验证环境变量是否配置成功 三、Neo4j安装&#xff08;Windows&#xff09;1. 下载并解压Neo4j安装包1.1 下…...

idea启用lombok

有lombok的项目在用idea打开的时候会提示启用lombok&#xff0c;但是。。。不小心就落下了...

uniapp婚纱预约小程序

uniapp婚纱预约小程序&#xff0c;这套设计bug很多&#xff0c;是一个半成品&#xff0c;一个客户让我修改&#xff0c;很多问题&#xff0c;页面显示不了&#xff0c;评论不能用&#xff0c;注册不能用&#xff0c;缺少表&#xff0c;最后稍微改一下&#xff0c;但是也有小问题…...

基于OpenCV的SIFT特征匹配指纹识别

文章目录 引言一、概述二、关键代码解析1. SIFT特征提取与匹配2. 指纹身份识别3. 姓名映射 三、使用示例四、技术分析五、完整代码六、总结 引言 指纹识别是生物特征识别技术中最常用的方法之一。本文将介绍如何使用Python和OpenCV实现一个简单的指纹识别系统&#xff0c;该系…...

Vue3 加快页面加载速度 使用CDN外部库的加载 提升页面打开速度 服务器分发

介绍 CDN&#xff08;内容分发网络&#xff09;通过全球分布的边缘节点&#xff0c;让用户从最近的服务器获取资源&#xff0c;减少网络延迟&#xff0c;显著提升JS、CSS等静态文件的加载速度。公共库&#xff08;如Vue、React、Axios&#xff09;托管在CDN上&#xff0c;减少…...

C++23:ranges::iota、ranges::shift_left和ranges::shift_right详解

文章目录 引言ranges::iota定义与功能使用场景代码示例 ranges::shift_left定义与功能使用场景代码示例 ranges::shift_right定义与功能使用场景代码示例 总结 引言 C23作为C编程语言的一个重要版本&#xff0c;为开发者带来了许多新的特性和改进。其中&#xff0c;ranges::io…...

Spring 框架中适配器模式的五大典型应用场景

Spring 框架中适配器模式的应用场景 在 Spring 框架中&#xff0c;适配器模式&#xff08;Adapter Pattern&#xff09;被广泛应用于将不同组件的接口转化为统一接口&#xff0c;从而实现组件间的无缝协作。以下是几个典型的应用场景&#xff1a; 1. HandlerAdapter - MVC 请…...

【Unity】 HTFramework框架(六十五)ScrollList滚动数据列表

更新日期&#xff1a;2025年5月16日。 Github 仓库&#xff1a;https://github.com/SaiTingHu/HTFramework Gitee 仓库&#xff1a;https://gitee.com/SaiTingHu/HTFramework 索引 一、ScrollList滚动数据列表二、使用ScrollList1.快捷创建ScrollList2.ScrollList的属性3.自定义…...

Android SwitchButton 使用详解:一个实际项目的完美实践

Android SwitchButton 使用详解&#xff1a;一个实际项目的完美实践 引言 在最近开发的 Android 项目中&#xff0c;我遇到了一个需要自定义样式开关控件的需求。经过多方比较&#xff0c;最终选择了功能强大且高度可定制的 SwitchButton 控件。本文将基于实际项目中的使用案…...

【C++ 基础数论】质数判断

质数判断 质数&#xff1a;对于所有大于 1 的自然数而言&#xff0c;如果该数除 1 和自身以外没有其它因数 / 约数&#xff0c;则该数被称为为质数&#xff0c;质数也叫素数。 如何判定一个数是否为质数呢&#xff1f; 一个简单的方法是 试除法 &#xff1a; 对于一个数 n&…...

【数据结构】手撕AVL树(万字详解)

目录 AVL树的概念为啥要有AVL树&#xff1f;概念 AVL树节点的定义AVL树的插入AVL树的旋转左单旋右单旋左右双旋右左双旋 AVL树的查找AVL树的验证end AVL树的概念 为啥要有AVL树&#xff1f; 在上一章节的二叉搜索树中&#xff0c;我们在插入节点的操作中。有可能一直往一边插…...

Chrome代理IP配置教程常见方式附问题解答

在网络隐私保护和跨境业务场景中&#xff0c;为浏览器配置代理IP已成为刚需。无论是访问地域限制内容、保障数据安全&#xff0c;还是管理多账号业务&#xff0c;掌握Chrome代理配置技巧都至关重要。本文详解三种主流代理设置方式&#xff0c;助你快速实现精准流量管控。 方式一…...

SpringBoot + Shiro + JWT 实现认证与授权完整方案实现

SpringBoot Shiro JWT 实现认证与授权完整方案 下面博主将详细介绍如何使用 SpringBoot 整合 Shiro 和 JWT 实现安全的认证授权系统&#xff0c;包含核心代码实现和最佳实践。 一、技术栈组成 技术组件- 作用版本要求SpringBoot基础框架2.7.xApache Shiro认证和授权核心1.…...

深入解析VPN技术原理:安全网络的护航者

在当今信息化迅速发展的时代&#xff0c;虚拟私人网络&#xff08;VPN&#xff09;技术成为了我们在互联网时代保护隐私和数据安全的重要工具。VPN通过为用户与网络之间建立一条加密的安全通道&#xff0c;确保了通讯的私密性与完整性。本文将深入解析VPN的技术原理、工作机制以…...

OceanBase 的系统变量、配置项和用户变量有何差异

在继续阅读本文之前&#xff0c;大家不妨先思考一下&#xff0c;数据库中“系统变量”、“用户变量”以及“配置项”这三者之间有何不同。如果感到有些模糊&#xff0c;那么本文将是您理清这些概念的好帮手。 很多用户在使用OceanBase数据库中的“配置项”和“系统变量”&#…...

ReinboT:通过强化学习增强机器人视觉-语言操控能力

25年5月来自浙大和西湖大学的论文“ReinboT: Amplifying Robot Visual-Language Manipulation with Reinforcement Learning”。 视觉-语言-动作 (VLA) 模型通过模仿学习在一般机器人决策任务中展现出巨大潜力。然而&#xff0c;训练数据的质量参差不齐通常会限制这些模型的性…...

MySQL联表查询:多表关联与嵌套查询指南

引言 各位数据库爱好者们好&#xff01;今天我们要挑战MySQL查询技能的高阶关卡——复杂查询 &#x1f680;。在真实业务场景中&#xff0c;数据往往分散在多个表中&#xff0c;就像拼图的各个碎片&#xff0c;只有掌握了多表查询的"拼图技巧"&#xff0c;才能将它们…...

QBasic 一款古老的编程语言在现代学习中的价值(附程序)

QBasic&#xff08;Quick Beginner’s All-purpose Symbolic Instruction Code&#xff09;是微软公司于 1991 年推出的一款简单易学的编程语言&#xff0c;作为BASIC语言的变种&#xff0c;它曾广泛应用于教育领域和初学者编程入门。尽管在当今Python、Java等现代编程语言主导…...

基于Backtrader库的均线策略实现与回测

本文将通过Python语言和强大的Backtrader库,详细介绍如何实现一个基于均线的简单交易策略,并进行历史数据的回测。将一步步构建这个策略,从数据获取、策略定义到回测结果分析,帮助你深入理解并掌握这一过程。 一、环境配置与库安装 1.1 安装必要的Python库 确保你已经安…...

Elasticsearch 分词与字段类型(keyword vs. text)面试题

Elasticsearch 分词与字段类型(keyword vs. text)面试题 🔍 目录 基础概念底层存储查询影响多字段聚合与排序分词器实战排查总结基础概念 💡 问题1:Elasticsearch 中的 keyword 和 text 类型有什么区别? 👉 查看参考答案 对比项keywordtext分词(Analysis)❌ 不进…...

Java 后端给前端传Long值,精度丢失的问题与解决

为什么后端 Long 类型 ID 要转为 String&#xff1f; 在前后端分离的开发中&#xff0c;Java 后端通常使用 Long 类型作为主键 ID&#xff08;如雪花算法生成的 ID&#xff09;。但如果直接将 Long 返回给前端&#xff0c;可能会导致前端精度丢失的问题&#xff0c;特别是在 J…...

【C++】 —— 笔试刷题day_29

一、排序子序列 题目解析 一个数组的连续子序列&#xff0c;如果这个子序列是非递增或者非递减的&#xff1b;这个连续的子序列就是排序子序列。 现在给定一个数组&#xff0c;然后然我们判断这个子序列可以划分成多少个排序子序列。 例如&#xff1a;1 2 3 2 2 1 可以划分成 …...

高光谱遥感图像处理之数据分类的fcm算法

基于模糊C均值聚类&#xff08;FCM&#xff09;的高光谱遥感图像分类MATLAB实现示例 %% FCM高光谱图像分类示例 clc; clear; close all;%% 数据加载与预处理 % 加载示例数据&#xff08;此处使用公开数据集Indian Pines的简化版&#xff09; load(indian_pines.mat); % 包含变…...

衡量 5G 和未来网络的安全性

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 抽象 在当今日益互联和快节奏的数字生态系统中&#xff0c;移动网络&#xff08;如 5G&#xff09;和未来几代&#xff08;如 6G&#xff09;发挥着关键作用&#xff0c;必须被视为关键基础设施。确保其…...

【Vite】前端开发服务器的配置

定义一些开发服务器的行为和代理规则 服务器的基本配置 server: {host: true, // 监听所有网络地址port: 8081, // 使用8081端口open: true, // 启动时自动打开浏览器cors: true // 启用CORS跨域支持 } 代理配置 proxy: {/api: {target: https://…...

文章记单词 | 第85篇(六级)

一&#xff0c;单词释义 verb /vɜːrb/- n. 动词wave /weɪv/- v. 挥手&#xff1b;波动&#xff1b;挥舞 /n. 波浪&#xff1b;波&#xff1b;挥手add /d/- v. 增加&#xff1b;添加&#xff1b;补充说liberal /ˈlɪbərəl/- adj. 自由的&#xff1b;开明的&#xff1b;慷…...

通过实例讲解螺旋模型

目录 一、螺旋模型的核心概念 二、螺旋模型在电子商城系统开发中的应用示例 第 1 次螺旋:项目启动与风险初探...

(面试)Android各版本新特性

Android 6.0 (Marshmallow, API 23) 运行时权限管理&#xff1a;用户可在应用运行时动态授予或拒绝权限&#xff0c;取代安装时统一授权4。Doze模式与应用待机&#xff1a;优化后台耗电&#xff0c;延长设备续航5。指纹识别支持&#xff1a;原生API支持指纹身份验证。 Android…...

如何有效的开展接口自动化测试?

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 一、简介 接口自动化测试是指使用自动化测试工具和脚本对软件系统中的接口进行测试的过程。其目的是在软件开发过程中&#xff0c;通过对接口的自动化测试来提高测…...

当 PyIceberg 和 DuckDB 遇见 AWS S3 Tables:打造 Serverless 数据湖“开源梦幻组合”

引言 在一些大数据分析场景比如电商大数据营销中&#xff0c;我们需要快速分析存储海量用户行为数据&#xff08;如浏览、加购、下单&#xff09;&#xff0c;以进行用户行为分析&#xff0c;优化营销策略。传统方法依赖 Spark/Presto 集群或 Redshift 查询 S3 上的 Parquet/O…...