数据结构奇妙旅程之二叉平衡树进阶---AVL树

꒰˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好,我是xiaoxie.希望你看完之后,有不足之处请多多谅解,让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN 如需转载还请通知˶⍤⃝˶ 个人主页:xiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 系列专栏:xiaoxie的JAVA系列专栏——CSDN博客●'ᴗ'σσணღ* 我的目标:"团团等我💪( ◡̀_◡́ ҂)" ( ⸝⸝⸝›ᴥ‹⸝⸝⸝ )欢迎各位→点赞👍 + 收藏⭐️ + 留言📝​+关注(互三必回)! 一.AVL树的概念 二叉搜索树虽可以缩短查找的效率,但如果数据有序或接近有序二叉搜索树将退化为单支树,查找元素相当于在顺 序表中搜索元素,效率低下。因此,两位俄罗斯的数学家G.M.Adelson-Velskii和E.M.Landis在1962年 发明了一种 解决上述问题的方法:当向二叉搜索树中插入新结点后,如果能保证每个结点的左右子树高度之差的绝对值不超过 1(需要对树中的结点进行调整),即可降低树的高度,从而减少平均搜索长度。 一棵AVL树或者是空树,或者是具有以下性质的二叉搜索树: 1.它的左右子树都是AVL树 2.左右子树高度之差(简称平衡因子)的绝对值不超过1(-1/0/1) 这里我们规定节点的左孩子的平衡因子为--,右孩子为++; 如果一棵二叉搜索树是高度平衡的,它就是AVL树。如果它有n个结点,其高度可保持在 ,搜索时间复杂 度O(logN)。 二.AVL树节点的定义 public class AVLTree { public static class TreeNode { public int val; public TreeNode left; public TreeNode right; public int bf;// 当前节点的平衡因子=右子树高度-左子树的高度 public TreeNode parent; public TreeNode(int val) { this.val = val; } } public TreeNode root; 当前节点的平衡因子=右子树高度-左子树的高度。但是,不是每棵树,都必须有平衡因子,这只是其中的一种实现方式,并且这只是一种表示方式。

c# WebService创建与调用

c# WebService创建与调用 文章目录 c# WebService创建与调用一、前言二、webService相关术语1.XML2. WSDL3. SOAP 三、创建四、调用4.1 添加引用的方式4.2 动态代理的方式4.3 HttpWebRequest的方式 五、扩展 一、前言 WebService,顾名思义就是基于Web的服务。它使用Web(HTTP)方式,接收和响应外部系统的某种请求。从而实现远程调用。 我们可以调用互联网上查询天气信息Web服务,然后将它嵌入到我们的程序(C/S或B/S程序)当中来,当用户从我们的网点看到天气信息时,他会认为我们为他提供了很多的信息服务,但其实我们什么也没有做,只是简单调用了一下服务器上的一段代码而已。 ISO的七层模型 : 物理层、数据链路层、网络层、传输层、表示层、会话层、应用层 Socket访问 : Socket属于传输层,它是对Tcp/ip协议的实现,包含TCP/UDP,它是所有通信协议的基础,Http协议需要Socket支持,以Socket作为基础 Socket通信特点: 开启端口,该通信是 长连接的通信 ,很容易被防火墙拦截,可以通过心跳机制来实现 ,开发难度大 传输的数据一般是字符串 ,可读性不强socket端口不便于推广性能相对于其他的通信协议是最优的 Http协议访问 : 属于应用层的协议,对Socket进行了封装 跨平台传数据不够友好对第三方应用提供的服务,希望对外暴露服务接口问题数据封装不够友好 :可以用xml封装数据希望给第三方应用提供web方式的服务 (http + xml) = web Service 二、webService相关术语 1.XML Extensible Markup Language -扩展性标记语言 XML,用于传输格式化的数据,是Web服务的基础。namespace-命名空间。xmlns=“http://itcast.cn” 使用默认命名空间。xmlns:itcast=“http://itcast.cn”使用指定名称的命名空间。 2. WSDL WebService Description Language – Web服务描述语言。 通过XML形式说明服务在什么地方-地址。通过XML形式说明服务提供什么样的方法 – 如何调用。 3. SOAP Simple Object Access Protocol –简单对象访问协议 SOAP作为一个基于XML语言的协议用于有网上传输数据。SOAP = 在HTTP的基础上+XML数据。SOAP是基于HTTP的。 SOAP的组成如下: Envelope – 必须的部分。以XML的根元素出现。Headers – 可选的。Body – 必须的。在body部分,包含要执行的服务器的方法。和发送到服务器的数据。 三、创建 新建项目,选择 “ASP.

配置Idea中的GitLab(Mac 版)

1. 首先安装git 打开mac 的终端,在Mac的终端上输入git检测是否安装git,如果没有,点击弹出的“安装”按钮。 https://git-scm.com/downloads 或者是直接输入 git 2.安装完成之后,在终端输入 git --version 查看版本信息 git --version 3、创建一个全局用户名、全局邮箱作为配置信息 git config --global user.name "your_name" git config --global user.email "your_email@youremail.com" 4、配置信息可以更改,以后想要更改使用上面指令就可以。同时可以使用git config --list指令查看Git的配置信息。 git config --list 5、Git设置成大小写敏感 Git默认对大小写不敏感,也就是说,将一个文件名某个字母做了大小写转换的修改Git是忽略这个改动的,导致在同步代码时候会出现错误,所以建议把Git设置成大小写敏感 git config core.ignorecase false 6、生成密匙 Git关联远端仓库时候需要提供公钥,本地保存私钥,每次与远端仓库交互时候,远端仓库会用公钥来验证交互者身份。使用以下指令生成密钥,如果有提示,一路点击回车。 ssh-keygen -t rsa -C “your_email@youremail.com” 生成密钥后,在本地的/Users/当前电脑用户/.ssh目录下会生成两个文件id_rsa、id_rsa.pub,id_rsa文件保存的是私钥,保存于本地,id_rsa.pub文件保存的是公钥,需要将里面内容上传到远端仓库。 7、获取密匙字符串 输入cd指令,进入当前用户目录 输入ls -a指令,查看当前用户目录下所有文件,包括隐藏文件 输入cd .ssh指令,进入.ssh目录 输入ls指令,查看.ssh目录下的文件(如果找不到在根目录输入cd ~/.ssh指令) 输入cat id_rsa.pub指令,查看id_rsa.pub文件中内容 输入ls可以看到生成的密钥: id_rsa 是私钥 id_rsa.pub 是公钥 接着,输入以下命令,复制公钥: pbcopy < id_rsa.pub 8、配置git 打开gitLab 账号, 添加密匙 9、配置Idea 9.1 在终端找到git 的位置 where git 测试一下是否生效

【动态规划】C++算法312 戳气球

作者推荐 视频算法专题 本文涉及知识点 动态规划汇总 LeetCode312 戳气球 有 n 个气球,编号为0 到 n - 1,每个气球上都标有一个数字,这些数字存在数组 nums 中。 现在要求你戳破所有的气球。戳破第 i 个气球,你可以获得 nums[i - 1] * nums[i] * nums[i + 1] 枚硬币。 这里的 i - 1 和 i + 1 代表和 i 相邻的两个气球的序号。如果 i - 1或 i + 1 超出了数组的边界,那么就当它是一个数字为 1 的气球。 求所能获得硬币的最大数量。 示例 1: 输入:nums = [3,1,5,8] 输出:167 解释: nums = [3,1,5,8] --> [3,5,8] --> [3,8] --> [8] --> [] coins = 315 + 358 + 138 + 181 = 167

MySQL 自增列解析(Auto_increment)

MySQL数据库为列提供了一种自增属性,当列被定义为自增时。Insert语句对该列即使不提供值,MySQL也会自动为该列生成递增的唯一标识,因此这个特性广泛用于主键的自动生成。 目录 一、自增列的用法1.1 基本用法1.2 自增列特性1.3 通过last_insert_id()获取自增值 二、自增计数器三、自增值生成模式3.1 传统模式3.2 连续模式3.3 交错模式 四、调整自增偏移五、监控自增值的使用比例 一、自增列的用法 自增列具有自动生成序列值,整型,单调递增这些特点,非常适合作为索引组织表的主键,新插入的数据会附加在已有的数据后面,不会出现页分裂现象,且整型的主键查找效率非常高。 1.1 基本用法 在创建表时,只需在某个整型列(tinyint,smallint, mediumint, int, bigint)上指定auto_increment,即可打开自增属性。 一张表中只能指定一个自增列,且必须建立索引,示例中 id列没有指定为索引列,建表报错(must be defined as a key): create table t2( id int auto_increment, name varchar(32)); 指定自增列为主键,创建成功: create table t ( id int primary key auto_increment, name varchar(32)); 插入数据时,即使insert语句未包含自增列,MySQL也会自动为该列生成值: insert into t(name) values('Vincent'); -- 未指定id列 select * from t; 如果指定了0或null,同样也可以生成自增值: insert into t values (0, 'Victor'), (null, 'Grace'); -- 指定0和null select * from t; 注意:由于0会触发自增,如果ID列本来保存的数据就包含0,那么在数据导出和导入过程中,数字0可能会因此触发自增而被修改,导致数据不一致。 这种情况可以打开sql_mode参数中的no_auto_value_on_zero选项(可以在会话和全局修改),打开该选项后,只有null可以触发自增,0不再触发。

解决Flutter在WEB中加载图片的跨域问题

1、环境版本 Flutter版本:3.16.9 开发IDE:android studio 2023.1.1 Patch2 受影响环境:WEB (Android、IOS、Windows等都不受影响) IDE输出的错误: The following ProgressEvent$ object was thrown resolving an image codec: [object ProgressEvent] When the exception was thrown, this was the stack: Image provider: NetworkImage("https://randomuser.me/api/portraits/med/men/62.jpg", scale: 1.0) Image key: NetworkImage("https://randomuser.me/api/portraits/med/men/62.jpg", scale: 1.0) 2、Flutter关于图片跨域问题的描述 2.1、内存、asset 和同源网络图片 如果图片在应用内存中有编码后的字节信息、或者以 asset 的方式提供、或者和应用存储在同一服务器上(也就是同源),则不需要做额外工作。图片既可以在 HTML 也可以在 CanvasKit 模式下,使用 Image.memory、 Image.asset 和 Image.network 来展示。 2.2、跨域图片 通常,可以配置内容分发网络 (CDN) 来自定义哪些域名可以访问你的内容。例如:Firebase 站点托管允许在 firebase.json 文件中, 指定一个自定义的 Access-Control-Allow-Origin 头。 如果无法从你的应用层面去配置图片服务器的 CORS,你依然可以通过另一个服务器代理请求,从而加载图片。这要求中转服务器对图片加载有充分的访问权。 此方法适用于源图片服务器公开提供了图片,却没有正确配置 CORS 头的情况。

快速上手PyWebIO:Python开发者的Web应用利器!

随着Web应用的普及,越来越多的开发者开始关注如何快速、简便地开发Web应用。 PyWebIO模块作为一个基于Python的Web应用开发工具,提供了一种简单而强大的方式来构建交互式的Web应用。 本文将介绍PyWebIO模块的常见应用场景、Python代码案例分析等内容,帮助读者更好地了解和使用这一工具。 PyWebIO模块简介 PyWebIO是一个基于Python的Web应用开发工具,旨在简化Web应用的开发流程。通过PyWebIO,开发者可以使用Python语言来构建交互式的Web应用,无需了解复杂的前端技术。 PyWebIO提供了丰富的组件和API,可以轻松实现数据的输入、展示和交互,使得开发Web应用变得更加简单和高效。 PyWebIO模块的常见应用场景 在线数据可视化 PyWebIO模块可以用于构建在线数据可视化工具,帮助用户更直观地理解数据。开发者可以使用PyWebIO提供的图表组件来展示数据。 同时通过输入框等组件实现用户交互,使得用户可以根据自己的需求对数据进行筛选和分析。 在线表单填写 PyWebIO模块可以用于构建在线表单填写工具,帮助用户快速填写表单并提交数据。 开发者可以使用PyWebIO提供的表单组件来构建各种类型的表单,包括文本框、下拉框、复选框等,从而实现用户友好的表单填写界面。 在线交互式教学 PyWebIO模块可以用于构建在线交互式教学工具,帮助教师和学生进行实时的交流和互动。 教师可以使用PyWebIO构建交互式的教学页面,展示教学内容并与学生进行实时的互动,从而提高教学效果。 在线数据分析工具 PyWebIO模块可以用于构建在线数据分析工具,帮助用户对数据进行分析和可视化。 开发者可以使用PyWebIO提供的数据展示组件和图表组件来展示数据,同时通过输入框等组件实现用户交互,使得用户可以根据自己的需求对数据进行分析和探索。 Python代码案例分析 下面我们将通过一个简单的Python代码案例来演示如何使用PyWebIO模块构建一个交互式的Web应用。 在这个案例中,我们将构建一个简单的在线计算器,用户可以输入两个数字并选择操作符进行计算。 from pywebio.input import input, input_group from pywebio.output import put_text from pywebio.session import hold def calculator(): while True: num1 = input("请输入第一个数字:", type="float") num2 = input("请输入第二个数字:", type="float") operator = input("请选择操作符(+、-、*、/):", type="text") result = 0 if operator == '+': result = num1 + num2 elif operator == '-': result = num1 - num2 elif operator == '*': result = num1 * num2 elif operator == '/': result = num1 / num2 put_text(f"

【AIGC调研系列】AIGC赋能测试用例生成的案例

基于功能需求规格说明的测试用例自动生成方法研究表明,传统的测试用例生成方法存在一些局限性,如需要额外的建模成本和缺少测试输入数据等问题[2]。这为AIGC在测试用例生成中的应用提供了背景。AIGC技术,特别是像ChatGPT这样的模型,能够理解和生成自然语言文本,这使得它们能够在没有额外建模成本的情况下,根据功能需求规格说明自动生成测试用例。 自动测试生成:一个以用例驱动的方法研究提出了一个从高层面的用例到具体测试案例自动化的解决方案[3]。这种方法考虑了从需求到测试用例的转换,这与AIGC技术的应用相吻合。AIGC可以在此过程中发挥重要作用,通过理解和分析用例来自动化地生成相应的测试用例。 基于编译支持错误跟踪的测试用例自动化生成方法展示了如何利用编译器扩展来直接从源程序中生成测试用例[5]。这种方法将测试用例和目标代码生成统一到编译器中,避免了独立的测试用例自动生成工具可能带来的接口开销。虽然这种方法主要依赖于编译器,但AIGC技术的应用可以进一步提高效率,例如通过自动生成测试用例来减少手动编码的工作量。 模型驱动的测试用例自动生成框架提供了一个从系统模型到测试用例的全自动转换过程[6]。这种方法利用MDA转换工具和脚本技术来实现测试用例的自动生成,这为AIGC技术在测试用例生成中的应用提供了参考。AIGC可以在此框架下进一步优化测试用例的生成过程,例如通过理解和分析系统模型来自动调整测试用例的设计。 AIGC赋能测试用例生成的具体实践案例包括但不限于:利用AIGC技术根据功能需求规格说明自动生成测试用例[2];结合自动化测试生成方法,从高层面的用例到具体测试案例的自动化转换[3];以及在模型驱动的测试用例自动生成框架中,通过理解和分析系统模型来优化测试用例的生成过程[6]。这些实践案例展示了AIGC技术在提高测试用例生成效率和质量方面的巨大潜力。 AIGC技术在测试用例生成中的最新进展是什么? AIGC技术在测试用例生成中的最新进展主要体现在以下几个方面: AIGC模型的应用范围扩大:随着ChatGPT等AIGC模型的出现,它们在软件开发和维护领域的应用已经得到了广泛的关注。这些模型能够产生高质量的响应,包括但不限于问答、代码总结和代码生成等活动[21]。这表明AIGC技术已经开始被应用于软件开发的各个方面,包括测试用例的生成。AIGC检测器的发展:为了应对AIGC技术可能带来的滥用问题,特别是在教育和安全关键领域,已经开发并评估了多种AIGC检测器。这些检测器主要针对自然语言数据进行评估,但对于由ChatGPT等模型生成的代码相关内容的性能尚不清楚[21]。这意味着,随着AIGC技术在软件开发领域的深入应用,对AIGC检测器的研究也在不断深入,以确保其能够有效识别和处理由AIGC技术生成的测试用例。人类检测能力的挑战:研究表明,现有的AIGC检测器在处理代码相关数据时表现不佳,与处理自然语言数据相比,其性能较低。尽管通过微调可以提高检测器在相同领域内容上的性能,但泛化能力仍然是一个挑战[21]。此外,人类对于检测由AIGC技术生成的测试用例也面临相当大的挑战[21]。这表明,虽然AIGC技术在测试用例生成方面取得了进展,但如何提高检测器的泛化能力和准确性仍然是未来研究的重点。AIGC技术的潜力和挑战:AIGC技术通过使用人工智能辅助或取代手动内容生成,基于用户输入的关键字或要求生成内容。大型模型算法的发展显著增强了AIGC的能力,使其成为一种有前景的生成工具[22]。然而,要充分利用AIGC技术支持不同的下游应用,需要分析其当前的能力和局限性,并探索如何最好地在未来应用中利用它[22]。 AIGC技术在测试用例生成中的最新进展主要包括其在软件开发领域的广泛应用、对AIGC检测器的研究和发展、以及面临的挑战和未来发展方向。尽管存在一些挑战,如检测器的泛化能力和准确性问题,但AIGC技术的潜力仍然巨大,特别是在提高软件开发效率和质量方面。 如何评估AIGC赋能的测试用例生成方法在实际项目中的效果和挑战? 评估AIGC赋能的测试用例生成方法在实际项目中的效果和挑战,需要从多个角度进行分析。首先,我们需要了解AIGC技术的基本特征及其在软件开发领域的应用潜力。根据[32]的分析,AIGC技术通过大数据训练、自然语言处理等技术特征,在辅助设计、自主生成、智能交互等方面展现出广泛的应用场景。这表明AIGC技术具有强大的信息生成和智能交互能力,为测试用例的自动生成提供了技术支持。 然而,将AIGC技术应用于测试用例生成并非没有挑战。根据[23]的研究,尽管AIGC模型如ChatGPT在软件开发领域表现出色,但其在代码相关数据上的表现仍然低于自然语言数据。这意味着在处理特定于软件开发的任务时,AIGC模型可能需要进一步的优化和调整。此外,[23]还指出,虽然细调可以提高检测器在相同领域内容上的性能,但泛化能力仍然是一个挑战。这对于测试用例生成来说是一个重要的考虑因素,因为测试用例需要覆盖多种不同的场景和需求。 从测试用例生成的角度来看,传统的手工编写测试用例方法存在效率低下、成本高昂等问题[24]。而自动化测试用例生成技术能够显著提高工作效率并降低测试成本。然而,这些方法也面临着额外建模成本和缺少测试输入数据等问题[24]。AIGC赋能的测试用例生成方法可能会通过减少这些限制来提供解决方案,例如通过自动生成测试模型和数据生成策略来快速生成不同场景下的测试用例[24]。 为了评估AIGC赋能的测试用例生成方法的效果,可以参考[29]中提出的案例研究方法。该研究通过测试用例自动生成技术验证了用例正确实施的成功率约为80%,这表明了该技术在实际项目中的应用潜力。同时,[25]和[26]的研究表明,通过改进评价机制和测试用例生成模型,可以进一步提高测试用例生成的效率和质量。 评估AIGC赋能的测试用例生成方法在实际项目中的效果和挑战时,应考虑以下几个方面: AIGC技术在软件开发领域的应用潜力及其在特定任务上的表现[32][23]。AIGC赋能的测试用例生成方法如何解决传统测试用例生成方法的局限性[24]。通过案例研究和改进评价机制等方法来评估AIGC赋能的测试用例生成方法的实际效果[29][25][26]。 AIGC赋能的测试用例生成方法在实际项目中具有潜在的优势,但也面临着技术和实施上的挑战。通过综合考虑这些因素,可以更全面地评估该方法的效果和适用性。 AIGC技术在自动化测试用例生成中遇到的主要技术障碍有哪些? AIGC技术在自动化测试用例生成中遇到的主要技术障碍主要包括以下几点: 性能差异:根据[33]的描述,现有的AIGC检测器在处理代码相关数据时,其性能相比自然语言数据表现出较低的效率。这意味着在自动化测试用例生成的过程中,这些检测器可能无法有效地识别和生成高质量的测试用例,尤其是在需要深入理解和分析代码逻辑和结构的情况下。泛化能力不足:同样地,[33]指出,尽管对特定领域内的内容进行微调可以提高检测器的性能,但其泛化能力仍然是一个挑战。这表明AIGC技术在从已知的测试用例生成新的、未见过的测试用例时可能会遇到困难,因为它们可能无法很好地适应不同的代码库和编程语言。人类检测难度大:根据[33]的研究,即使是人类也发现检测由ChatGPT生成的代码相关内容相当具有挑战性。这暗示了AIGC技术在自动化测试用例生成中的另一个障碍:即使是最先进的AIGC模型也可能产生难以区分真伪的代码内容,这对于依赖于精确代码分析的自动化测试工具来说是一个重大挑战。 AIGC技术在自动化测试用例生成中面临的主要技术障碍包括其在处理代码相关数据时的性能差异、泛化能力不足以及生成内容的可识别性问题。这些障碍限制了AIGC技术在自动化测试领域的应用潜力,需要通过进一步的研究和技术创新来克服。 在使用AIGC技术进行测试用例自动生成时,如何保证生成的测试用例的质量和准确性? 在使用AIGC技术进行测试用例自动生成时,保证生成的测试用例的质量和准确性是一个复杂但至关重要的任务。可以总结出几个关键点来确保测试用例的质量和准确性: 需求分析与规范性描述:首先,需要对功能需求进行规范性描述,包括用例模板和编写规则的设计,以保证需求表述的完整性和规范性[39]。这为测试模型的自动构建和测试数据的生成提供了可靠的分析依据。测试模型与数据生成策略:通过构建测试模型和数据生成策略,能够快速地生成不同场景下的测试用例和对应的测试数据[39]。这种方法需要读取规定格式的用例文本,并将用例文本的事件流信息转换为测试模型,进而通过深度优先搜索算法生成不同场景下的测试路径。语义分析与文本转换规则:在对文本中的条件语句进行语义分析后,利用文本转换规则将结构化语义信息转换为表达式,从而实现测试数据的生成[39]。这种方法有助于提高测试用例的准确性和覆盖率。自动化测试用例生成技术的应用:应用自动化测试用例生成技术可以显著提高工作效率,降低测试成本,并可一定程度上保证测试覆盖范围[39]。然而,需要注意的是,目前测试用例自动生成方法的相关研究也存在着一些局限性,如需要额外的建模成本,缺少测试输入数据等问题[39]。模型驱动的测试用例自动生成技术:通过模型转换算法将系统模型自动转换成测试模型,然后通过测试逻辑自动生成技术、测试数据自动生成技术和应用了最优测试用例集覆盖理论的测试用例自动生成技术实现从系统开发模型到测试用例的全过程自动生成[40]。这种方法在保证软件质量的前提下降低了测试成本。 参考资料 [1]. Evaluating AIGC Detectors on Code Content [2]. 基于功能需求规格说明的测试用例自动生成方法研究 [3]. Automatic test generation: a use case driven approach [4]. 基于功能对象的测试用例生成模型研究与实现 [5]. 基于编译支持错误跟踪的测试用例自动化生成方法 [6]. 模型驱动的测试用例自动生成框架 [7]. 测试用例自动生成方法研究与实现 [8]. 基于模型驱动的测试用例自动生成技术研究 [9]. 基于接口参数的黑箱测试用例自动生成算法 [10]. 测试用例的生成与管理 [11]. 基于输出域的测试用例自动生成方法研究 [12]. 测试用例生成算法TCBSA研究 [13]. 基于程序规则说明的自动测试用例生成 [14]. 软件测试用例自动生成算法综述 [15]. 基于场景的测试用例自动生成方法 [16]. 一种针对交互式软件的测试用例生成模型研究与实现

苹果电脑Mac笔记本听歌神器洛雪音乐+六音音源来了,详细教程,附下载地址!

写在前头 地址在文章尾部,拿windows截图说事儿,mac同理。 洛雪音乐是一款全平台资源免费听歌的软件,特别为Mac系统用户设计。 功能介绍: 海量音乐资源:洛雪音乐汇集了来自全球各地的数百万首歌曲,涵盖了各种流派和语种的音乐,满足不同用户的音乐需求。高品质音质:洛雪音乐提供高品质的音乐播放,让用户享受更加清晰、流畅的音乐体验。个性化推荐:根据用户的听歌习惯和喜好,洛雪音乐会智能推荐相似风格的歌曲,为用户带来更加个性化的音乐推荐。多平台同步:用户可以在不同设备上使用洛雪音乐,并且能够实现音乐播放进度、收藏歌曲等数据的同步,方便用户随时随地畅享音乐。歌词显示:洛雪音乐支持歌词显示功能,用户可以在听歌的同时查看歌词,更好地理解歌曲的意义和情感。智能搜索:洛雪音乐提供智能搜索功能,用户可以根据歌曲名、歌手名、专辑名等关键词快速找到自己喜欢的音乐。离线下载:用户可以将喜欢的歌曲下载到本地,实现离线播放,方便在没有网络的情况下也能畅享音乐。 使用说明 打开“设置”——点击“基本设置”——点击“自定义源管理” PS:因为操作电脑是windows,图方便所以截图的是windows的界面,不过mac上也是同理的,大家将就一下吧,李姐万岁! 最后点击“导入”,选择六音音源,直接导入即可。 导入完成后,开始随便搜歌听歌吧,起飞!!!~~~~ 注意事项 目前不要更新新版本,2.5.0配合1.0.7的六音音源足够可以起飞了,据我所知最新版有点问题。这个配合就是最好的,快去下载吧! 原文地址:洛雪音乐-2.5.0苹果电脑版/mac版-无广告,稳定版本支持六音音源2.5.0无广告官方版-2024-03-02 | 晒应用导航洛雪音乐是一款全平台资源免费听歌的软件,特别为Mac系统用户设计。https://www.shaiyy.cn/app/1703.html

YOLOv9/YOLOv8算法改进【NO.102】涨点+轻量化,亲测有效。引入二次创新模块Faster-EMA,将EMA注意力机制与FasterNet中的核心模块结合构成新模块,

前 言 YOLO算法改进系列出到这,很多朋友问改进如何选择是最佳的,下面我就根据个人多年的写作发文章以及指导发文章的经验来看,按照优先顺序进行排序讲解YOLO算法改进方法的顺序选择。具体有需求的同学可以私信我沟通: 第一,创新主干特征提取网络,将整个Backbone改进为其他的网络,比如这篇文章中的整个方法,直接将Backbone替换掉,理由是这种改进如果有效果,那么改进点就很值得写,不算是堆积木那种,也可以说是一种新的算法,所以做实验的话建议朋友们优先尝试这种改法。 第二,创新特征融合网络,这个同理第一,比如将原yolo算法PANet结构改进为Bifpn等。 第三,改进主干特征提取网络,就是类似加个注意力机制等。根据个人实验情况来说,这种改进有时候很难有较大的检测效果的提升,乱加反而降低了特征提取能力导致mAP下降,需要有技巧的添加。 第四,改进特征融合网络,理由、方法等同上。 第五,改进检测头,更换检测头这种也算个大的改进点。 第六,改进损失函数,nms、框等,要是有提升检测效果的话,算是一个小的改进点,也可以凑字数。 第七,对图像输入做改进,改进数据增强方法等。 第八,剪枝以及蒸馏等,这种用于特定的任务,比如轻量化检测等,但是这种会带来精度的下降。 ...........未完待续 一、创新改进思路或解决的问题 将FasterNet中的核心模块进行改进,通过引入EMA注意力机制的方法,当然也可以引入或者组合其他的模块构建新的网络结构,再引入到YOLOv8代码中,提高算法的检测效果,通过实验证明,改进方法在大部分数据集上是有效果的。 具体改进思路方法是在下面结构图中的FasterNet Block末尾添加上EMA注意力机制。 二、基本原理 原文代码: GitHub - JierunChen/FasterNet: [CVPR 2023] Code for PConv and FasterNet ​摘要:为了设计快速神经网络,许多工作都集中在减少浮点运算(FLOP)的数量上。然而,我们观察到FLOP的这种减少并不一定会导致类似水平的延迟减少。这主要源于低效率的每秒浮点运算(FLOPS)。为了实现更快的网络,我们重新审视了流行的运营商,并认为如此低的FLOPS主要是由于运营商的频繁内存访问,尤其是深度进化。因此,我们提出了一种新的部分卷积(PConv),通过同时减少冗余计算和内存访问,可以更有效地提取空间特征。在PConv的基础上,我们进一步提出了FasterNet,这是一种新的神经网络家族,它在各种设备上的运行速度远高于其他网络,而不会影响各种视觉任务的准确性。例如,在ImageNet-1k上,我们的小型FasterNet-T0在GPU、CPU和ARM处理器上分别比MobileViT XXS快2.8倍、3.3倍和2.4倍,同时准确率高2.9%。我们的大型FasterNet-L实现了令人印象深刻的83.5%的前1级精度,与新兴的Swin-B不相上下,同时在GPU上的参考吞吐量提高了36%,并在CPU上节省了37%的计算时间。 三、​添加方法 第一步:新增网络结构yaml # Ultralytics YOLO 🚀, AGPL-3.0 license # YOLOv8 object detection model with P3-P5 outputs. For Usage examples see https://docs.ultralytics.com/tasks/detect # Parameters nc: 80 # number of classes scales: # model compound scaling constants, i.e. 'model=yolov8n.yaml' will call yolov8.

C++ Qt开发:QNetworkAccessManager网络接口组件

Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍如何运用QNetworkAccessManager组件实现Web网页访问。 QNetworkAccessManager是Qt网络模块中的关键类,用于管理网络访问和请求。作为一个网络请求的调度中心,它为Qt应用程序提供了发送和接收各种类型的网络请求的能力,包括常见的GET、POST、PUT、DELETE等。这个模块的核心功能在于通过处理QNetworkReply和QNetworkRequest来实现与网络资源的交互。 通过QNetworkAccessManager,Qt应用程序能够轻松地与远程服务器通信,获取数据或将数据上传到服务器。这种网络请求的管理不仅是异步的,以确保不会阻塞主线程,还提供了丰富的信号和槽机制,使得开发者可以灵活地处理不同阶段的网络操作。 通常,QNetworkAccessManager会与QNetworkReply和QNetworkRequest一起使用。QNetworkRequest用于封装和配置网络请求的各种属性,例如URL、请求头等。而QNetworkReply则代表了对网络请求的响应,包含了请求返回的数据和相关信息。这三者共同协作,为Qt应用程序提供了便捷、灵活且强大的网络通信能力。 1.1 通用API函数 1.1.1 QNetworkAccessManager 要想实现网络通信首先需要新建一个网络访问管理器,以下是QNetworkAccessManager类中的一些常用函数及其描述: 函数描述QNetworkAccessManager(QObject *parent = nullptr)构造函数,创建一个QNetworkAccessManager实例。virtual ~QNetworkAccessManager()虚析构函数,释放QNetworkAccessManager实例。QNetworkReply *get(const QNetworkRequest &request)发送GET请求,并返回与请求关联的QNetworkReply对象。QNetworkReply *post(const QNetworkRequest &request, QIODevice *data)发送POST请求,并返回与请求关联的QNetworkReply对象。QNetworkReply *post(const QNetworkRequest &request, const QByteArray &data)发送POST请求,并返回与请求关联的QNetworkReply对象。QNetworkReply *put(const QNetworkRequest &request, QIODevice *data)发送PUT请求,并返回与请求关联的QNetworkReply对象。QNetworkReply *put(const QNetworkRequest &request, const QByteArray &data)发送PUT请求,并返回与请求关联的QNetworkReply对象。QNetworkReply *deleteResource(const QNetworkRequest &request)发送DELETE请求,并返回与请求关联的QNetworkReply对象。QNetworkReply *head(const QNetworkRequest &request)发送HEAD请求,并返回与请求关联的QNetworkReply对象。QNetworkReply *sendCustomRequest(const QNetworkRequest &request, const QByteArray &verb, QIODevice *data = nullptr)发送自定义请求,并返回与请求关联的QNetworkReply对象。QNetworkReply *sendCustomRequest(const QNetworkRequest &request, const QByteArray &verb, const QByteArray &data)发送自定义请求,并返回与请求关联的QNetworkReply对象。void setConfiguration(const QNetworkConfiguration &config)设置网络配置,用于定制网络行为。QNetworkConfiguration configuration() const获取当前网络配置。void clearAccessCache()清除网络访问缓存。void setCache(QAbstractNetworkCache *cache)设置网络缓存。QAbstractNetworkCache *cache() const获取当前网络缓存。void setCookieJar(QNetworkCookieJar *cookieJar)设置用于管理HTTP cookie的QNetworkCookieJar。QNetworkCookieJar *cookieJar() const获取当前的HTTP cookie管理器。 这些函数提供了QNetworkAccessManager的核心功能,使得开发者能够方便地进行各种类型的网络请求,配置网络参数,并进行相关的网络管理操作。

【HarmonyOS NEXT】WebView是否支持JSBridge注入和通信

【关键字】 WebView / JSBridge / 注入 / 通信 / H5 / HTML / javaScriptProxy 【问题描述】 WebView是否支持JSBridge注入和通信? 【解决方案】 JSBridge是一种JavaScript与Web客户端之间的通信机制。通过JSBridge,可以在WebView中通过JavaScript代码调用客户端提供的功能,也可以从客户端中调用JavaScript函数。 目前,HarmonyOS支持WebView的JSBridge注入和通信,详细信息请参见:https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-webview-0000001821001193#ZH-CN_TOPIC_0000001821001193__registerjavascriptproxy 通信方式有以下三种。 ArkTS调用H5:通过runJavaScript接口(对应Android的evaluateJavaScript接口)调用HTML中的代码,异步执行JS脚本。 H5调用ArkTS:通过javaScriptProxy接口(对应Android的addJavascriptInterface接口),将对象注册到HTML的window对象上。 ArkTS与H5双向通信:通过createWebMessagePorts、PostMessage接口(对应Android的WebMessagePort、postWebMessage接口),创建一个消息通道[port1,port2]与JS进行通信。 关于ArkWeb的更多信息请参见:https://developer.huawei.com/consumer/cn/doc/harmonyos-faqs/faqs-arkweb-kit-0000001816292321

如何关闭微软的Edge浏览器右击提示的:“使用copilot重写“的提示?

最近在使用微软的edge浏览器写文档的时候,总是不小心右击鼠标,提示 有时候挺烦人的,那怎么关闭呢? 打开edge浏览器的设置 在设置中搜索AI,并关闭AI书写的选项就好了 这样就可以获得一个干净的界面了,不收干扰。 AI现在确实越来越好了,适当的使用AI也是能提高我们的效率,但是AI应该出现在适当的位置,而不是形成干扰。右击鼠标就提示确实有点干扰了。 如果你也有一样的体验,赶紧设置把。

前端之用html做一个用户登陆界面

用户登陆界面 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>用户注册页面</title> </head> <body> <form action="https://www.baidu.com" method="post"> <table border="1px" align="center" > <thead> <tr align="center"> <td colspan="3">用户注册</td> </tr> </thead> <tbody> <tr> <td align="right">用户名</td> <td colspan="2"><input type="text"></td> </tr> <tr> <td align="right">密码</td> <td colspan="2"><input type="password"></td> </tr> <tr> <td align="right">性别</td> <td colspan="2">男<input type="radio" name="性别" value="男">女<input type="radio" name="性别" value="女" checked></td> </tr> <tr > <td align="right">爱好</td> <td colspan="2"> <input type="checkbox" name="hobby" value="打篮球">打篮球 <input type="checkbox" name="hobby" value="打羽毛球">打羽毛球 <input type="checkbox" name="

基于SpringBoot+vue的高校学生成绩管理系统

目录 一、绪论1.1 开发背景1.2 系统开发平台1.2.1 Vue简介1.2.2 IDEA简介1.2.3 MySQL简介 1.3 系统开发环境 二、需求分析2.1 系统需求分析2.2 系统数据流图 三、概要设计3.1 业务流程分析 四、详细设计4.1 系统功能结构图4.2 E-R模型4.3 数据库表设计 五、模块实现5.1 管理员主页5.2 课程表模块5.3 成绩查询模块5.4 成绩详情模块5.5 账号管理模块5.6 课程录入模块5.7 用户管理模块5.8 学生成绩查询模块 六、系统测试七、总结与展望八、源码获取 一、绪论 1.1 开发背景 当今世界经济的持续增长对科技发展产生了很大影响。计算机、网络的普及形成了一场全球范围内信息和信息技术的革命,促使着社会发生变革。信息化社会对教育发展提出了新的要求——教育信息化,在教育领域运用计算机、网络技术,促进教育改革的发展。如何在教育行业中规范化的管理信息、加速数据流通、提高信息应用水平,已成为当今教育行业亟待解决的问题。 随着教育改革的不断深化、升学率逐年提高,学校各类信息繁冗、教学人员工作量大、管理学生力度不够。尽管高校引进各种信息管理系统,但针对于学生成绩管理来说,并没起多大作用。现有的学生成绩管理系统仍存在许多不足之处,所以需要改善已有的系统,并利用改良后开发的系统为高校教务工作人员减轻工作量,提高工作效率和准确率,增强管理力度。 高校学生成绩管理系统是高校各种信息管理系统中的一种,传统的手工管理方式需要提取日常教学活动中相关记录,易发生数据统计错误、丢失数据、教师劳动强度高且效率低等问题。网络、计算机的普及很大的解决了这些问题,计算机连入网络后,各类数据在网络上快速流通,实现了数据共享,避免重复劳动,教学管理方式规范化,提高了管理效率和高校办学水平。学生成绩管理系统不但满足了高校的管理者、教师及学生对该方面的需求,极大地减少了管理成本、节约了用户时间,而且完善了学生成绩管理方面的数据存储、数据统计、信息检索、信息分析等功能。为了给高校管理学生成绩提供更优良的技术支持,提高教学质量和水平,所以需要研究和开发新的学生管理系统。 1.2 系统开发平台 1.2.1 Vue简介 Vue.js致力于构建数据驱动的Web应用开发框架,以简洁化、轻量级、数据驱动、模块友好等优势深受企业以及前端开发者的喜爱,成为前端开发人员必备的技能。Vue3.0的出现,又带动周边生态的发展,奠定了Vue在企业级开发的重要地位。 Vue是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一方面,当与现代化的工具链以及各种支持类库结合使用时,Vue 也完全能够为复杂的单页应用提供驱动。 渐进式框架做分层设计,每层都可选,不同层可以灵活接入其他方案。而当你都想用官方的实现时,会发现也早已准备好,各层之间包括配套工具都能比接入其他方案更便捷地协同工作。 1.2.2 IDEA简介 IDEA 全称IntelliJ IDEA,是用于Java语言开发的集成环境(也可用于其他语言),IntelliJ在业界被公认为最好的Java开发工具之一,尤其在智能代码助手、代码自动提示、重构、J2EE支持、Ant、JUnit、CVS整合、代码审查、 创新的GUI设计等方面的功能可以说是超常的。IDEA是JetBrains 公司的产品,IntelliJ IDEA的每个方面都专门设计用于最大限度地提高开发人员的工强大的静态代码分析和符合人体工程学的设计使开发不仅具有高效性,而且还具有令人愉悦的体验。 在IntelliJ IDEA为您的源代码编制索引之后,它通过在每个上下文中提供相关建议提供了快速而智能的体验:即时和巧妙的代码完成,动态代码分析和可靠的重构工具。 1.2.3 MySQL简介 MySQL是瑞典的MySQL AB公司开发的一个可用于各种流行操作系统平台的关系数据库系统,它具有客户机/服务器体系结构的分布式数据库管理系统。MySQL完全适用于网络,用其建造的数据库可在因特网上的任何地方访问,因此,可以和网络上任何地方的任何人共享数据库。MySQL具有功能强、使用简单、管理方便、运行速度快、可靠性高、安全保密性强等优点。MySQL用C和C++编写,它可以工作在许多平台(Unix,Linux,Windows)上,提供了针对不同编程语言(C,C++,Java等)的API函数;使用核心线程实现多线程,能够很好的支持多CPU;提供事务和非事务的存储机制;快速的基于线 程的内存分配系统;MySQL采用双重许可,用户可以在GNU许可条款下以免费软件或开放源码软件的方式使用MySQL软件,也可以从MySQL AB公司获得正式的商业许可。 除了以上特点,MySQL还有一个最大的特点,那就是在诸如UNIX这样的操作系统上,它是免费的,可从因特网上下载其服务器和客户机软件。并且还能从因特网上得到许多与其相配的第三方软件或工具。而在 Windows系统上,其客户机程序和客户机程序库是免费的[5]。 1.3 系统开发环境 本系统的开发环境需要满足以下: 网络环境:局域网。 软件环境:Windows10操作系统,IDEA开发平台,Tomcat8.5服务器,MySQL数据库。 硬件环境:内存8G,硬盘512G。 二、需求分析 2.

python超详细基础文件操作【建议收藏】

文章目录 前言发现宝藏1 文件操作1.1 文件打开与关闭1.1.1 打开文件1.1.2 关闭文件 1.2 访问模式及说明 2 文件读写2.1 写数据(write)2.2 读数据(read)2.3 读数据(readlines)2.3 读数据(readline)2.4 readlines 和 readline的区别 3 文件的相关操作3.1 文件重命名3.2 删除文件3.3 创建文件3.4 获取当前目录 4 示例4.1 目录.txt自动清洗4.2 批量修改文件夹下的文件命名4.3 检测同级目录下是否存在同名文件夹 总结 前言 为了巩固所学的知识,作者尝试着开始发布一些学习笔记类的博客,方便日后回顾。当然,如果能帮到一些萌新进行新技术的学习那也是极好的。作者菜菜一枚,文章中如果有记录错误,欢迎读者朋友们批评指正。 (博客的参考源码可以在我主页的资源里找到,如果在学习的过程中有什么疑问欢迎大家在评论区向我提出) 发现宝藏 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【宝藏入口】。 1 文件操作 1.1 文件打开与关闭 1.1.1 打开文件 在Python中,你可以使用 open() 函数来打开文件。以下是一个简单的例子: # 打开文件(默认为只读模式) file_path = 'example.txt' with open(file_path, 'r') as file: # 执行文件操作,例如读取文件内容 file_content = file.read() print(file_content) # 文件在with块结束后会自动关闭,无需显式关闭文件 在上述示例中: 'example.txt' 是文件的路径和名称,你可以根据实际情况修改为你想要打开的文件。'r' 表示只读模式。如果你想要写入文件,可以使用 'w' 模式,如果想要追加内容,可以使用 'a' 模式等。with open(.

前端网页如何在 Windows 上测试 Safari

“Windows上的Safari?”,“那不可能! Safari 无法在 Windows 上运行。当然的! 曾经可以在windows上运行,但苹果早在 2012 年就停止支持 Windows。对于想要测试 Safari 兼容性的 Web 开发人员来说,这真是太不友好了。 但。。。 Safari 使用的浏览器引擎 WebKit 仍然支持 Windows,可能是因为 iTunes 仍然支持 Windows。Apple 甚至自己制作了 WebKit 的 Windows 版本,您可以下载和使用! 还有其他一些博客文章提供了有关如何执行此操作的说明,但有点过时了。以下是截至 2022 年的完整步骤。 下载最新版本的 WebKitRequirementsWin64.zip访问 Apple 的 WebKit Buildbot 页面。您想要的版本是 WinCairo-64-bit-Release-Build。单击其中一个绿色数字。 展开 transfer-to-s3 部分。 复制并下载 S3 URL。 解压缩该zip文件后,您会在里面找到MiniBrowser.exe。但它还不会运行!返回到您在步骤 1 中下载的 WebKitRequirementsWin64.zip 文件,从 bin64 目录中获取所有文件,并将它们复制到与 MiniBrowser.exe 相同的目录中。现在你可以运行MiniBrowser.exe,你就完成了! 您现在可以从 Windows 电脑测试 Safari 浏览器的工作方式!您可以像在 Safari 浏览器中一样使用“修改照片”菜单中的 Web 检查器。不幸的是,无法激活响应式设计模式,因此您将无法测试 iOS。 MiniBrowser 和 Safari 之间的功能支持存在一些差异,因此它不是 100% 完美的。但基本的东西是一样的,所以你可以测试你的CSS布局是否正常工作,或者你的鼠标事件处理代码是否正常工作。

python--gdal:tif图像坐标/投影坐标/经纬度转换(理清i和j的顺序)

【太长不看版】 tif是一张具有地理编码信息的图像。 gdal能读出里面的基本地理编码信息,根据这6个基本的信息,可以推导出其他需要的地理信息。 trans(0) 左上像素左上角的x坐标。 trans(1) w-e像素分辨率/像素宽度。 trans(2) 行旋转(通常为零)。 trans(3) 左上像素左上角的y坐标。 trans(4) 列旋转(通常为零)。 trans(5) n-s像素分辨率/像素高度(北上图像为负值) 【详细举例版】 nXSize = dataset.RasterXSize #列数 nYSize = dataset.RasterYSize #行数 img_lons = np.zeros((nYSize, nXSize)) img_lats = np.zeros((nYSize, nXSize)) trans = dataset.GetGeoTransform() prosrs = osr.SpatialReference() prosrs.ImportFromWkt(dataset.GetProjection()) geosrs = prosrs.CloneGeogCS()。 ct = osr.CoordinateTransformation(prosrs, geosrs) for col in range(nXSize): for row in range(nYSize): px = trans[0] + col * trans[1] + row * trans[2] # lons py = trans[3] + col * trans[4] + row * trans[5] # lats coords = ct.

解码人工智能的幽默:理解其背后的误解与挑战

✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨ 🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢,在这里我会分享我的知识和经验。🎥 希望在这里,我们能一起探索IT世界的奥妙,提升我们的技能。🔮 记得先点赞👍后阅读哦~ 👏👏 📘📚 所属专栏:人工智能、话题分享 欢迎访问我的主页:Srlua小谢 获取更多信息和资源。✨✨🌙🌙 目录 解码人工智能的幽默:理解其背后的误解与挑战 人工智能的“幽默”瞬间 1. 语义理解的误区: 2. 逻辑混乱的回答: 3. 错误的常识: 4. 语境理解的困难: 5. 误解俚语: 技术原理探究 1.算法设计缺陷: 2.数据处理不当: 3.模型泛化能力不足: 4.知识表示和推理能力不足: 5.缺乏对上下文的理解: 社会影响分析 1. 信任度变化: 2. 技术发展的担忧: 3. 就业影响: 4. 教育与培训需求: 人工智能是否能改变教育方式 5. 法律和伦理问题: 6. 社会观念转变: 7. 创新与研发: 最近Claude3横空出世! 总结: 解码人工智能的幽默:理解其背后的误解与挑战 人工智能的“幽默”瞬间 人工智能(AI)在执行任务时,由于其基于算法和数据的特性,有时会产出一些出人意料或者带有幽默感的结果。 以下是一些示例: 1. 语义理解的误区: 有一次,一个智能助手被问到:“太阳晚上去哪里了?”它根据字面意思回答:“太阳晚上去了美国。”这是因为该助手在训练数据中发现了“太阳晚上在美国”这样的表述,而没有理解这只是一种比喻的说法。 一位博主最近就 po 出了一篇分析谷歌数据集的文章,发现它对 Reddit 评论的情绪判别中,错误率竟高达 30%。 就比如这个例子: 谷歌数据集把它判断为“生气”。 还有下面这条评论: 谷歌数据集将其判别为“困惑”。 网友直呼:你不懂我的梗。 人工智能秒变人工智障,这么离谱的错误它是怎么犯的? 这就得从他判别的方式入手了。谷歌数据集在给评论贴标签时,是把文字单拎出来判断的。我们可以看看下面这张图,谷歌数据集都把文字中的情绪错误地判断为愤怒。

pg数据库和mysql区别

区别一 PostgreSQL (通常称为 PG) 和 MySQL 都是广泛使用的关系型数据库管理系统 (RDBMS)。虽然它们都是用于存储和管理数据的关系数据库,但它们在一些方面有很大的区别,如下所述: 数据类型:PostgreSQL 支持更多的数据类型,如范围类型、网络地址类型、JSON 和 XML 数据类型等,而 MySQL 则不支持这些类型。 扩展性:PostgreSQL 具有很高的扩展性,可以使用自定义数据类型、函数和操作符来扩展其功能。而 MySQL 的扩展性较差,需要使用插件或存储过程来实现类似的功能。 ACID 兼容性:PostgreSQL 是完全 ACID 兼容的数据库,而 MySQL 只在特定的存储引擎 (如 InnoDB) 中支持 ACID。 多版本并发控制 (MVCC):PostgreSQL 使用 MVCC 来提供高级事务隔离级别,这意味着多个事务可以同时读取和写入数据库,而不会相互干扰。MySQL 也支持 MVCC,但其实现方式不同。 存储引擎:MySQL 支持多个存储引擎,包括 MyISAM 和 InnoDB 等。每种存储引擎都有自己的特点和优缺点。PostgreSQL 仅支持单个存储引擎。 SQL 标准兼容性:PostgreSQL 更加符合 SQL 标准,而 MySQL 在某些方面采用了自己的实现方式。 性能:在一些特定的使用场景下,MySQL 的性能可能更好。但在复杂的查询和高并发的情况下,PostgreSQL 可能表现更好。 总之,PG 和 MySQL 都是出色的关系型数据库管理系统,具有不同的特点和优劣。选择哪个取决于具体的需求和使用场景。 区别二 简介 PostgreSQL PostgreSQL是一个开源的关系型数据库管理系统,以其高度的可扩展性、ACID兼容性(支持原子性、一致性、隔离性和持久性)以及丰富的功能集而闻名。它支持多种操作系统,包括Linux、Windows、Mac OS等,而且具有强大的社区支持。 MySQL MySQL也是一个开源的关系型数据库管理系统,其特点在于速度快、易于使用以及广泛的社区支持。它最初是由瑞典的开发者创建的,后来被Sun Microsystems收购,现在隶属于Oracle。 适用场景 PostgreSQL 复杂查询和事务处理:PostgreSQL在处理复杂查询和大量事务时表现出色,适用于需要高度数据完整性和一致性的应用程序,如金融系统或企业级应用。