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

Amazon Dynamo学习总结

目录

一、Amazon Dynamo的问世

二、Amazon Dynamo主要技术概要

三、数据划分算法

四、数据复制

五、版本控制

六、故障处理

七、成员和故障检测


一、Amazon Dynamo的问世

Amazon Dynamo是由亚马逊在2007年开发的一种高度可扩展和分布式的键值存储系统,旨在解决公司面临的大规模、任务关键型服务的需求。其起源于亚马逊早期在运营电子商务业务时遇到的挑战,传统的关系型数据库无法满足其大规模、高可用性和分布式存储的需求。因此,亚马逊的工程团队开始寻找一种新的存储解决方案。Amazon Dynamo采用了分布式架构和键值存储模型,实现了高度的可扩展性、灵活性和可定制性,成为许多大型互联网公司处理大规模数据存储和访问的首选解决方案之一。

二、Amazon Dynamo主要技术概要

Amazon Dynamo是亚马逊公司基于分布式环境下的数据存储需求所开发的一套高度可靠、高性能的分布式存储系统。其设计和实现基于一系列关键技术,这些技术使得Dynamo能够在面对大规模的数据存储和处理时保持高可用性、一致性和可扩展性。其中包括数据划分、数据复制、数据读写操作、版本控制、故障处理以及成员和故障检测等关键技术,具体可见以下表格:

技术描述作用
数据划分利用一致性哈希算法将数据划分成多个分区,实现数据的分布式存储和处理,提高可扩展性和性能。分布数据以实现增量可扩展性。
数据复制将每个分区中的数据复制到多个节点上,提高容错性和可用性。使用NWR机制确定复制数量和一致性要求。提高系统的容错性和可用性,确保数据的一致性。
数据读写操作使用get和put操作实现数据的读取和写入,保证数据的一致性和可靠性。在写入时使用NWR机制确定写入的副本数,在读取时使用R参数指定读取的副本数。确保数据的一致性和可靠性。
版本控制使用向量时钟解决多副本之间的冲突,记录每个数据项的更新历史,帮助判断不同副本之间的数据版本关系。解决多副本冲突,确保数据的一致性。
故障处理采用暗示移交处理暂时性节点故障,将数据暂存于其他节点,故障恢复后将数据传递给正确节点。对于永久性故障,使用反熵机制确保副本一致性。处理节点故障,确保数据的一致性和可用性。
成员和故障检测使用Gossip协议进行成员和故障检测,定期通信维护成员列表,监测节点状态变化,保持系统稳定性和可用性。检测节点状态变化,保持系统稳定性和可用性。

三、数据划分算法

在一致性哈希算法的基础上,Dynamo引入了虚拟节点的概念作为其分区方案的变体。在传统的一致性哈希算法中,每个节点只负责环中一个点的区域,这可能导致负载分布不均匀以及忽略了节点性能的异质性。因此,Dynamo将每个节点分配到环中的多个点,即虚拟节点。

具体来说,当一个新节点加入系统时,它会被分配多个虚拟节点,每个虚拟节点在环上占据不同的位置。这些虚拟节点的数量可以根据节点的容量和性能来调整。当节点不可用时,其负载将被均匀地分布到其他可用节点上,从而保持系统的稳定性和可用性。而当节点再次可用或新节点加入系统时,负载将会平均地分布到所有可用节点上,确保了系统的负载均衡。

虚拟节点的引入使得Dynamo能够更好地适应节点动态变化、负载均衡和异质性的情况,从而提高了系统的稳定性和可扩展性。通过调整节点负责的虚拟节点数量,可以更灵活地适应不同的物理基础架构和节点容量,进一步优化系统的性能和资源利用率。

如上图所示为一致性哈希采取的环形存储,箭头表示key计算出的值得分布。A,B,C是三个不同的节点,策略1是随机计算T个值并存储,策略2是随机计算并等分存储,而策略3则是有规律的计算并存储。Dynamo通过测试发现策略3相对来说有着最佳的负载均衡率,而策略2最差。具体测试结果如下图所示:

四、数据复制

在Dynamo中,为了实现高可用性和持久性,数据被复制到多个主机上。每个数据项都会在N个主机上进行复制,其中N是根据系统配置的参数确定的。每个数据项都被分配给一个协调器节点,该节点负责管理其范围内的数据复制。除了在本地存储数据之外,协调器还会将数据复制到环上N-1个顺时针后续节点上。这样,每个节点负责管理它和它的第N个前身之间的环的区域。

负责存储特定密钥的节点列表称为首选节点列表。为了应对节点故障,首选列表包含了N个以上的节点。需要注意的是,由于使用了虚拟节点,特定密钥的前N个后续位置可能由少于N个不同的物理节点拥有。为了解决这个问题,首选列表会跳过环中的位置,以确保列表中包含的节点是不同的物理节点。五、数据读写操作

  • 对于PUT操作,协调员首先生成新的数据版本和向量时钟分量,然后将新数据保存到本地。接着,协调员将写入请求发送给首选列表中的所有节点,并在收到足够数量的确认后向用户返回成功。
  • 对于GET操作,协调员向首选列表中的所有节点请求数据版本,等待足够数量的回复后,通过向量时钟处理有因果关系的数据版本,并将存在冲突的数据版本返回给用户。

在这个过程中,协调员起着关键的作用,通常是首选列表中的前N个节点中的第一个。如果请求是通过负载平衡器收到的,请求可能会被路由到环上的任何随机节点。在这种情况下,如果接收到请求的节点不是首选列表中的前N个节点之一,它将不会协调处理请求,而是将请求转发到首选列表中的第一个节点。

在Amazon Dynamo中,为了确保副本的一致性,采用了一种类似仲裁系统的一致性协议。这个协议涉及两个配置参数R和W,它们分别代表执行一次读取操作和写入操作所需的最少投票者数量。具体来说:

  • R(Read Quorum):R参数表示执行一次读取操作所需的最少投票者数量。当客户端发起读取操作时,需要至少从R个副本中读取数据。只有当至少从R个副本中读取到数据时,读取操作才被视为成功。

  • W(Write Quorum):W参数表示执行一次写入操作所需的最少投票者数量。当客户端发起写入操作时,需要向至少W个副本写入数据。只有当至少有W个副本成功写入数据后,写入操作才被视为成功。

在设置R和W时,必须满足R + W > N的条件,其中N是系统中总副本的数量。这个条件确保了一致性协议的正确执行。通过设置R和W参数,可以灵活地平衡一致性和可用性之间的关系。增加R和W的值可以提高一致性,但可能会增加操作的延迟,因为需要等待更多的节点响应。相反,减少R和W的值可以降低延迟,但可能会降低一致性。因此,在实际应用中,需要根据系统的需求和性能目标来选择适当的R和W值。

五、版本控制

在Dynamo中,向量时钟被用来捕捉同一对象的不同版本之间的因果关系。向量时钟实际上是一个(node, counter)对列表,与每个对象的每个版本相关联。通过检查向量时钟,我们可以确定一个对象的两个版本是平行分支还是有因果顺序。如果第一个时钟对象上的计数器在第二个时钟对象上小于或等于其他所有节点的计数器,那么第一个版本是第二个版本的祖先,可以被忽略。否则,这两个变化被认为是冲突的,并需要进行语义上的协调。

在Dynamo中,当客户端更新一个对象时,它必须指定要更新的版本(这是通过传递从早期读操作中获得的上下文对象来指定的,其中包含向量时钟信息)。当处理读请求时,如果Dynamo访问到多个无法语法协调的分支,它将返回分支叶子上的所有对象,以及它们对应的上下文版本信息。使用此上下文的更新操作将被认为是对前述不同版本更新操作的语义上的协调,其分支已收缩到一个新版本上。

为了说明使用向量时钟,考虑上图所示的例子:

  • 客户端写入一个新的对象。节点(比如说Sx),它处理对这个key的写:序列号递增,并用它来创建数据的向量时钟。该系统现在有对象D1和其相关的时钟[(Sx,1)]。
  • 客户端更新该对象。假定也由同样的节点处理这个要求。现在该系统有对象D2和其相关的时钟[(Sx,2)]。D2继承自D1,因此覆盖D1,但是其他节点中或许存在还没有看到D2版本的副本。
  • 让我们假设,同样的客户端更新这个对象但不同的服务器(比如Sy)处理了该请求。目前该系统具有数据D3及其相关的时钟[(Sx,2),(Sy,1)]。
  • 接下来假设不同的客户端读取D2,然后尝试更新它,并且另一个服务器节点(如Sz)进行写操作。该系统现在具有D4(D2的子孙),其版本时钟[(Sx,2),(Sz,1)]。
  • 一个对D1或D2有所了解的节点可以决定,在收到D4和它的时钟时,新的数据将覆盖D1和D2,可以被垃圾收集。一个对D3有所了解的节点,在接收D4时将会发现,它们之间不存在因果关系。换句话说,D3和D4都有更新操作,但都未在对方的变化中反映出来。这两个版本的数据都必须保持并提交给客户端(在读时)进行语义协调。
  • 现在假定一些客户端同时读取到D3和D4(上下文将会反映出这两个值是由read操作发现的)。读的上下文包含有D3和D4时钟的概要信息,即[(Sx,2),(Sy,1),(Sz,1)]的时钟总结。如果客户端执行协调,且由节点Sx来协调这个写操作,Sx将更新其时钟的序列号。D5的新数据将有以下时钟:[(Sx,3),(Sy,1),(Sz,1)]。

六、故障处理

故障处理在Dynamo中是一个关键的组成部分,用于处理临时性和永久性的节点故障。

对于临时性节点故障,Dynamo采用了暗示移交的机制。当一个节点出现暂时性故障时,例如由于网络中断或节点故障,Dynamo会将数据暂时存储在其他节点上,而不是立即将其丢弃。这些节点被称为“暗示”节点,它们临时承担了故障节点的数据负载。一旦故障节点恢复正常,暗示节点会将暂存的数据传递回故障节点,以确保数据的完整性和一致性。

对于永久性节点故障,Dynamo使用反熵机制来确保副本之间的一致性。这种机制涉及到周期性地比较和同步不同副本之间的数据。通过使用反熵机制,Dynamo可以快速检测到数据不一致的情况,并采取相应的措施来修复数据,从而确保系统的稳定性和可用性。

七、成员和故障检测

成员和故障检测在Dynamo中是通过Gossip协议实现的。Gossip协议是一种去中心化的通信协议,用于在分布式系统中进行成员和故障检测。Dynamo中的每个节点都定期与其他节点进行通信,交换有关成员状态和故障信息的信息。通过这种定期的通信,节点可以维护一个成员列表,并监测节点状态的变化。

具体而言,每个节点会周期性地向一组其他节点发送消息,告知它们自己的状态和可用性情况,并接收其他节点发送的类似信息。这些消息在整个系统中通过网络传播,并且被节点逐步接收和处理。通过这种方式,每个节点可以获取关于整个系统状态的信息,并且及时检测到其他节点的加入、离开或故障。

使用Gossip协议进行成员和故障检测具有以下优点:

  1. 去中心化:没有单一的中心节点负责管理成员和故障检测,而是每个节点都参与其中,从而提高了系统的稳定性和可用性。

  2. 实时性:节点之间定期通信,信息可以快速传播,从而及时检测到节点状态的变化。

  3. 容错性:即使部分节点无法正常工作,也不会影响整个系统的运行,因为其他节点仍然可以通过Gossip协议进行通信和检测。

通过使用Gossip协议,Dynamo可以确保成员列表的及时更新和节点状态的实时监测,从而保持系统的稳定性和可用性。

推荐阅读:

重读 Amazon Dynamo 论文有感 - 知乎

https://www.cnblogs.com/xybaby/p/13944662.html

Amazon Dynamo论文解读 — Dynamo数据划分算法 - CodeAntenna

《Dynamo》论文笔记 | 水木今山的博客

Dynamo:亚马逊的高可用键值存储_dynamo文件系统,使用哪个技术实现了版本控制-CSDN博客

分布式存储系统学习笔记(三)—分布式键值系统(1)—Amazon Dynamo_amazon s3 dynamo 哈希-CSDN博客

阅读笔记(十六)高可用KV数据存储Dynamo实现细节《Dynamo: Amazon’s Highly Available Key-value Store》_亚马逊 kv数据库-CSDN博客

相关文章:

Amazon Dynamo学习总结

目录 一、Amazon Dynamo的问世 二、Amazon Dynamo主要技术概要 三、数据划分算法 四、数据复制 五、版本控制 六、故障处理 七、成员和故障检测 一、Amazon Dynamo的问世 Amazon Dynamo是由亚马逊在2007年开发的一种高度可扩展和分布式的键值存储系统,旨在解…...

appium抓包总结

appium抓包总结 背景:有些app通过抓包工具charles等抓不到接口数据,应为这一类抓包工具只能抓到应用层的数据包,而某些app的接口是走的传输层协议,所以此时只能通过AppIUM工具来进行抓包。 1、Appium 是什么? Appium…...

arcgis各种版本下载

arcgic 下载!!! ArcGIS是一款地理信息系统软件,由美国Esri公司开发。它提供了一系列完整的GIS功能,包括地图制作、空间数据管理、空间分析、空间信息整合、发布与共享等。ArcGIS是一个可扩展的GIS平台,提供…...

第五篇:MySQL常见数据类型

MySQL中的数据类型有很多,主要分为三类:数值类型、字符串类型、日期时间类型 三个表格都在此网盘中,需要者可移步自取,如果觉得有帮助希望点个赞~ MySQL常见数据类型表 数值类型 (注:decimal类型举例,如1…...

Oracle用BETWEEN AND查某年的数据可能会丢失条数

随便找一张有日期(字段类型为DATE)的表即可测试。 假设存在这样一张表HOLIDAY,里面存储的是某些国家(表字段为COUNTRY_CODE)某些年的法定假日日期(表字段为HOLIDAY_DATE)。 我想查中国在2023年和2024年的法定假日日期。 BETWEEN AND 首先想…...

Nuscenes数据集点云数据如何转换到图像上

零、概要 注意:该文章是手写ai自动驾驶,Nuscenes数据集的笔记。 首先,学习需要使用到 nuScenes 数据集。python 工具需要使用到 nuscenes-devkit、pyquaternion from nuscenes.nuscenes import NuScenes from pyquaternion import Quatern…...

【C语言期末】商品管理系统

本文资源:https://download.csdn.net/download/weixin_47040861/88820155 1.题目要求 商品管理系统 商品信息包括:包括编号、类别、名称、价格、折扣比例、生产时间 、存货数量等要求:1、信息首先保存在文件中,然后打开文件进行…...

单片机学习笔记---串口通信(2)

目录 串口内部结构 串口相关寄存器 串口控制寄存器SCON SM0和SM1 SM2 REN TB8和RB8 TI和RI 电源控制寄存器PCON SMOD 串口工作方式 方式0 方式0输出: 方式0输入 方式1 方式1输出。 方式1输入 方式2和方式3 方式2和方式3输出: 方式2和…...

【Java】乐观锁有哪些常见实现方式?

Java中的乐观锁主要有两种常见的实现方式: CAS(Compare and Swap):这是实现乐观锁的核心算法。CAS操作包含三个参数:内存地址V、旧的预期值A和要修改的新值B。执行CAS操作时,会先比较内存地址V中的值是否等…...

Javaweb之SpringBootWeb案例之登录校验功能的详细解析

2. 登录校验 2.1 问题分析 我们已经完成了基础登录功能的开发与测试,在我们登录成功后就可以进入到后台管理系统中进行数据的操作。 但是当我们在浏览器中新的页面上输入地址:http://localhost:9528/#/system/dept,发现没有登录仍然可以进…...

CSS之盒模型

盒模型概念 浏览器盒模型(Box Model)是CSS中的基本概念,它描述了元素在布局过程中如何占据空间。盒模型由内容(content)、内边距(padding)、边框(border)、和外边距&…...

博客系统-SpringBoot版本

相比于之前使用Servlet来完成的博客系统,SpringBoot版本的博客系统功能更完善,使用到的技术更接近企业级,快来看看吧~ 目录 1.项目介绍 2.数据库准备 3.实体化类 4.返回格式 5.登录和注册功能 6.登出(注销)功能…...

详细分析Redis中数值乱码的根本原因以及解决方式

目录 前言1. 问题所示2. 原理分析3. 拓展 前言 对于这方面的相关知识推荐阅读: Redis框架从入门到学精(全)Java关于RedisTemplate的使用分析 附代码java框架 零基础从入门到精通的学习路线 附开源项目面经等(超全) …...

网络专栏目录

大家好我是苏麟 , 这是网络专栏目录 . 图解网络 资料来源 : 小林coding 小林官方网站 : 小林coding (xiaolincoding.com) 图解网络目录 基础篇 基础篇 TCP/IP网络模型有几层? : TCP/IP网络模型 键入网址到页面显示,期间发生了什么? : 键入网址到页面显示,期间发生了什么 现阶…...

【Python网络编程之Ping命令的实现】

🚀 作者 :“码上有前” 🚀 文章简介 :Python开发技术 🚀 欢迎小伙伴们 点赞👍、收藏⭐、留言💬 Python网络编程之Ping命令的实现 代码见资源,效果图如下一、实验要求二、协议原理2…...

OpenHarmony轻量级驱动开发

OpenHarmony轻量级驱动开发 思维导图: https://download.csdn.net/download/lanlingxueyu/88817155 GPlO(General-purpose input/output)即通用型输入输出 描述 GPlO(General-purpose input/output)即通用型输入输出。通俗地说,GPlO口就是一些引脚可以通过它们输出高低…...

C语言如何输⼊字符数组?

一、问题 在程序中,scanf()函数可以输⼊任意类型的数据,gets()函数只能输⼊字符串等,但是如何更好地输⼊字符数组呢? 二、解答 我们知道如何使⽤格式输⼊函数 scanf(),那么可以使⽤%c 格式符逐个输⼊字符。这样输⼊有…...

人脸追踪案例及机器学习认识

1.人脸追踪机器人初制 用程序控制舵机运动的方法与机械臂项目完全相同。 由于摄像头的安装方式为上下倒转安装,我们在编写程序读取图像时需使用 flip 函数将 图像上下翻转。 现在,只需要使用哈尔特征检测得到人脸在图像中的位置,再指示舵机运…...

鸿蒙开发理论之页面和自定义组件生命周期

1、自定义组件和页面的关系 页面:即应用的UI页面。可以由一个或者多个自定义组件组成,Entry装饰的自定义组件为页面的入口组件,即页面的根节点,一个页面有且仅能有一个Entry。只有被Entry装饰的组件才可以调用页面的生命周期。自…...

docker-compose部署gitlab和jenkins

通过docker-compose部署gitlab和jenkins,方便后续工作 注意: gitlab占用资源较多,最好系统内存在8G以上,CPU4核心以上,否则gitlab有可能报错无法启动。docker版本用最新版本,低版本的docker可能会导致doc…...

Pytorch 复习总结 1

Pytorch 复习总结,仅供笔者使用,参考教材: 《动手学深度学习》 本文主要内容为:Pytorch 张量的常见运算、线性代数、高等数学、概率论。 Pytorch 张量的常见运算、线性代数、高等数学、概率论 部分 见 Pytorch 复习总结 1&…...

谷歌免费开放模糊测试框架OSS-Fuzz(物联网、车联网、供应链安全、C/C++)

目录 模糊测试的智能化和自动化 模糊测试不能代替安全设计原则 AI驱动的漏洞修补...

华为配置内部人员接入WLAN网络示例(802.1X认证)

配置内部人员接入WLAN网络示例(802.1X认证) 组网图形 图1 配置802.1X认证组网图 业务需求组网需求数据规划配置思路配置注意事项操作步骤配置文件 业务需求 用户接入WLAN网络,使用802.1X客户端进行认证,输入正确的用户名和密…...

EXCEL中如何调出“数据分析”的菜单

今天发现,原来WPS还是和EXCEL比,还是少了“数据分析”这个日常基本做统计的菜单,只好用EXCEL了,但奇怪发现我的EXCEL中没发现这个菜单,然后查了下,才发现,要用如下的方法打开: 1&…...

基于Qt的人脸识别项目(功能:颜值检测,口罩检测,表情检测,性别检测,年龄预测等)

完整代码链接在文章末尾 效果展示 代码讲解(待更新) qt图片文件上传 #include <QtWidgets> #include <QFileDialog>...

书生谱语-大语言模型测试demo

课程内容简介 通用环境配置 开发机 InterStudio 配置公钥 在本地机器上打开 Power Shell 终端。在终端中&#xff0c;运行以下命令来生成 SSH 密钥对&#xff1a; ssh-keygen -t rsa您将被提示选择密钥文件的保存位置&#xff0c;默认情况下是在 ~/.ssh/ 目录中。按 Enter …...

2024-02-12 Unity 编辑器开发之编辑器拓展3 —— EditorGUI

文章目录 1 GUILayout2 EditorGUI 介绍3 文本、层级、标签、颜色拾取3.1 LabelField3.2 LayerField3.3 TagField3.4 ColorField3.5 代码示例 4 枚举选择、整数选择、按下按钮4.1 EnumPopup / EnumFlagsField4.2 IntPopup4.3 DropdownButton4.4 代码示例 5 对象关联、各类型输入…...

shell脚本编译与解析

文章目录 shell变量全局变量&#xff08;环境变量&#xff09;局部变量设置PATH 环境变量修改变量属性 启动文件环境变量持久化 ./和. 的区别脚本编写判断 和循环命令行参数传入参数循环读取命令行参数获取用户输入 处理选项处理简单选项处理带值选项 重定向显示并且同时输出到…...

第64讲个人中心用户操作菜单实现

静态页面 <!-- 用户操作菜单开始 --><view class"user_menu"><!-- 订单管理开始 --><view class"order_wrap"><view class"order_title">我的订单</view><view class"order_content"><n…...

线性代数的本质——1 向量

向量是线性代数中最为基础的概念。 何为向量&#xff1f; 从物理上看&#xff0c; 向量就是既有大小又有方向的量&#xff0c;只要这两者一定&#xff0c;就可以在空间中随便移动。 从计算机应用的角度看&#xff0c;向量和列表很接近&#xff0c;可以用来描述某对象的几个不同…...

工业以太网交换机引领现代工厂自动化新潮流

随着科技的飞速发展&#xff0c;现代工厂正迎来一场前所未有的自动化变革&#xff0c;而工业以太网交换机的崭新角色正是这场变革的关键组成部分。本文将深入探讨工业以太网交换机与现代工厂自动化的紧密集成&#xff0c;探讨这一集成如何推动工业生产的智能化、效率提升以及未…...

Linux第46步_通过“添加自定义菜单”来学习menuconfig图形化配置原理

通过“添加自定义菜单”来学习menuconfig图形化配置原理&#xff0c;将来移植linux要用到。 自定义菜单要求如下: ①、在主界面中添加一个名为“My test menu”&#xff0c;此菜单内部有一个配置项。 ②、配置项为“MY TESTCONFIG”&#xff0c;此配置项处于菜单“My test m…...

推荐高端资源素材图库下载平台整站源码

推荐高端图库素材下载站的响应式模板和完整的整站源码&#xff0c;适用于娱乐网资源网。该模板支持移动端&#xff0c;并集成了支付宝接口。 演示地 址 &#xff1a; runruncode.com/tupiao/19692.html 页面设计精美&#xff0c;不亚于大型网站的美工水准&#xff0c;并且用户…...

Redis实现:每个进程每30秒执行一次任务

前言 项目中要实现每一进程每30秒执行一次 代码实现: public class DistributedScheduler {private final RRedisClient redisson;private final String processKeyPrefix; // 例如 "process_"public DistributedScheduler(RRedisClient redisson) {this.redisson…...

【AI之路】使用RWKV-Runner启动大模型,彻底实现大模型自由

文章目录 前言一、RWKV-Runner是什么&#xff1f;RWKV-Runner是一个大语言模型的启动平台RWKV-Runner官方功能介绍 二、使用步骤1. 下载文件 总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; ChatGPT的横空出世&#xff0c;打开了AI的大门&#xff…...

Dockerfile和.gitlab-ci.yml文件模板

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…...

Linux--基础开发工具篇(2)(vim)(配置白名单sudo)

目录 前言 1. vim 1.1vim的基本概念 1.2vim的基本操作 1.3vim命令模式命令集 1.4vim底行命令 1.5 异常问题 1.6 批量注释和批量去注释 1.7解决普通用户无法sudo的问题 1.8简单vim配置 前言 在前面我们学习了yum&#xff0c;也就是Linux系统的应用商店 Linux--基础开…...

Learn LaTeX 017 - LaTex Multicolumn 分栏

在科学排版中进行分栏操作&#xff0c;能够有效的利用页面中的空间&#xff0c;避免空白位置的浪费。 好的分栏设计能对你的排版增色不少&#xff01; https://www.ixigua.com/7298100920137548288?id7307237715659981346&logTag949adb699806392430bb...

Android 9.0 禁用adb install 安装app功能

1.前言 在9.0的系统产品定制化开发中,在进行一些定制开发中,对于一些app需要通过属性来控制禁止安装,比如adb install也不允许安装,所以就需要 熟悉adb install的安装流程,然后来禁用adb install安装功能,接下来分析下adb 下的安装流程 2.禁用adb install 安装app功能的…...

华为第二批难题五:AI技术提升六面体网格生成自动化问题

有CAE开发商问及OCCT几何内核的网格方面的技术问题。其实&#xff0c;OCCT几何内核的现有网格生成能力比较弱。 HybridOctree_Hex的源代码&#xff0c;还没有仔细去学习。 “HybridOctree_Hex”的开发者说&#xff1a;六面体网格主要是用在数值模拟领域的&#xff0c;比如汽车…...

【FFmpeg】ffplay 命令行参数 ⑤ ( 设置音频滤镜 -af 参数 | 设置统计信息 -stats 参数 | 设置同步时钟类型 -sync 参数 )

文章目录 一、ffplay 命令行参数 - 音频滤镜1、设置音频滤镜 -af 参数2、常用的 音频滤镜 参数3、音频滤镜链 示例 二、ffplay 命令行参数 - 统计信息1、设置统计信息 -stats 参数2、关闭统计信息 -nostats 参数 三、ffplay 命令行参数 - 同步时钟类型1、设置同步时钟类型 -syn…...

vscode开发FPGA(0)--windows平台搭建

一、从官网下载安装VScode Download Visual Studio Code - Mac, Linux, Windows 二、安装配置插件 1. 安装Chinese&#xff08;simplified&#xff09;中文汉化包 2.安装Verilog-HDL/systemVerilog插件(支持verilog语法) 3.配置CTags Support插件(支持代码跳转) 1)在github下…...

Java String源码剖析+面试题整理

由于字符串操作是计算机程序中最常见的操作之一&#xff0c;在面试中也是经常出现。本文从基本用法出发逐步深入剖析String的结构和性质&#xff0c;并结合面试题来帮助理解。 String基本用法 在Java中String的创建可以直接像基本类型一样定义&#xff0c;也可以new一个 Str…...

探索未来:集成存储器计算(IMC)与深度神经网络(DNN)的机遇与挑战

开篇部分&#xff1a;人工智能、深度神经网络与内存计算的交汇 在当今数字化时代&#xff0c;人工智能&#xff08;AI&#xff09;已经成为科技领域的一股强大力量&#xff0c;而深度神经网络&#xff08;DNN&#xff09;则是AI的核心引擎之一。DNN是一种模仿人类神经系统运作…...

[C/C++] -- CMake使用

CMake&#xff08;Cross-platform Make&#xff09;是一个开源的跨平台构建工具&#xff0c;用于自动生成用于不同操作系统和编译器的构建脚本。它可以简化项目的构建过程&#xff0c;使得开发人员能够更方便地管理代码、依赖项和构建设置。 CMake 使用一个名为 CMakeLists.tx…...

笔记本选购配置参数详解

笔记本电脑的选购是一个技术活&#xff0c;涉及到众多的配置参数。本文将为您详细解析笔记本电脑的主要配置参数&#xff0c;帮助您在选购时做出明智的决策。 1. 处理器&#xff08;CPU&#xff09; 处理器是笔记本电脑的核心组件&#xff0c;负责执行计算任务…...

临睡之际的生死思索与生命哲学的启示

在人类生存体验中&#xff0c;有一种独特而深邃的感受——当人们准备进入梦乡时&#xff0c;会担忧第二天醒来是否还能感知到生命的律动。这种“入睡即未知”的心理状态&#xff0c;既是生命无常的深刻体现&#xff0c;也是对个体生命价值、生活态度及人生哲学的一种深度拷问。…...

QT学习(五)C++函数重载

一、 函数重载 在同一个作用域内&#xff0c;可以声明几个功能类似的同名函数&#xff0c; 这些同名函数的形式参数&#xff08;指参数的个数、类型或者顺序&#xff09;必须不同。您不能仅通过返回类型的不同来 重载函数。 下面的实例中&#xff0c;同名函数 print() 被用…...

微服务OAuth 2.1扩展额外信息到JWT并解析(Spring Security 6)

文章目录 一、简介二、重写UserDetailsService三、Controller解析JWT获取用户信息四、后记 一、简介 VersionJava17SpringCloud2023.0.0SpringBoot3.2.1Spring Authorization Server1.2.1Spring Security6.2.1mysql8.2.0 Spring Authorization Server 使用JWT时&#xff0c;前…...

Python@setter用法介绍

Pythonsetter是Python编程语言中的一个关键属性&#xff0c;它简化了Python开发者的编程过程&#xff0c;提高了编程效率。 一、Pythonsetter是什么 Pythonsetter是Python语言中的一个属性&#xff0c;它允许程序员设置Python中的类成员变量。在Python中&#xff0c;属性&…...