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

MySQL颠覆版系列————MySQL新特性(开启数据库的新纪元)上篇

文章目录

  • 前言
  • 一、窗口函数(Window Functions)
    • 1.1 窗口函数概念
    • 1.2 常见的窗口函数
  • 二、公用表表达式(Common Table Expressions, CTEs)
    • 2.1 公用表表达式的概念
    • 2.2 常见的公用表表达式
  • 三、JSON增强
    • 3.1 JSON增强的概念
    • 3.2 常见的JSON增强
  • 四、Invisible Indexes
    • 4.1 Invisible Indexes的概念
    • 4.2 常见的Invisible Indexes
  • 献给读者


在这里插入图片描述
在这里插入图片描述


前言

在这个信息爆炸的时代,数据已经成为我们生活中不可或缺的一部分。无论你是社交媒体的重度使用者、企业中的数据分析员,还是软件开发工程师,都不可避免地与各种各样的数据库打交道。而在众多的关系型数据库管理系统(RDBMS)中,MySQL以其开源性、易用性和强大的功能脱颖而出,成为了最受欢迎的选择之一。

但你知道吗?MySQL不仅仅是一个传统的数据库系统;它一直在进化,不断地引入令人兴奋的新特性和改进,以适应日益增长的数据需求和技术挑战。想象一下,就像一艘宇宙飞船,在浩瀚的数据星空中航行,每一次升级都是对引擎的一次优化,让它飞得更快、更远。而MySQL 8.x版本系列就像是给这艘飞船装上了超级推进器,准备带你进入一个全新的探索之旅。

从过去到现在
回顾历史,MySQL自1995年首次发布以来,已经走过了漫长的路程。最初,它的目标是提供一个快速、可靠且易于使用的数据库解决方案。随着时间的发展,MySQL逐渐成长为支持全球数百万应用的核心技术之一。然而,随着互联网的发展和大数据时代的到来,传统的关系型数据库面临着前所未有的挑战。用户需要处理更大规模的数据集,执行更加复杂的查询操作,并确保数据的安全性和一致性。面对这些需求,MySQL没有停滞不前,而是选择了拥抱变化,不断创新。

迈向未来
那么,MySQL是如何应对这些挑战的呢?答案在于其不断推出的创新特性。例如,MySQL 8.0引入了窗口函数(Window Functions),这一功能让开发者能够以前所未有的方式分析数据。你可以轻松地计算排名、移动平均值或累计总和,而无需编写复杂的子查询。这就像是为你的SQL工具箱添加了一把瑞士军刀,让你在处理复杂业务逻辑时游刃有余。

不仅如此,MySQL还增强了对JSON的支持。在当今的世界里,非结构化数据越来越普遍,无论是日志文件、社交媒体帖子还是物联网设备生成的信息,都可以方便地存储和查询。通过使用JSON数据类型和相关函数,你可以高效地管理和检索半结构化数据,为应用程序带来更大的灵活性。

此外,MySQL 8.x还带来了许多其他激动人心的功能,比如公用表表达式(Common Table Expressions, CTEs)、持久化的全局变量设置、角色管理以及资源管理等。每一个新特性都是为了帮助你更好地管理和利用数据,提升工作效率的同时也保障了系统的稳定性和安全性。

探索之旅
在这篇博客文章中,我们将一起深入探讨MySQL 8.x版本中的一些关键新特性。我们将揭开它们背后的秘密,了解如何将这些强大的工具应用到实际工作中去。无论是想要提高查询性能,还是寻求更高级别的安全措施,亦或是希望简化日常维护任务,你都能在这里找到答案。

让我们开始这段奇妙的旅程吧!准备好迎接那些改变游戏规则的技术,学习如何充分利用MySQL提供的最新功能来解决现实世界中的问题。记住,最好的还在后面——因为正如科技界常说的那样,“唯一不变的就是变化本身”。而MySQL正是这场变革中最耀眼的明星之一,引领着我们走向一个充满无限可能的未来。所以,系好安全带,打开你的想象力,跟我们一起踏上这条通往数据巅峰的道路吧!

MySQL不断演进,引入了许多新特性和改进。截至2025年初,MySQL的最新稳定版本中包含了一系列增强功能和新增特性。本文我们将详细介绍MySQL中的一些重要新属性和功能。

一、窗口函数(Window Functions)

从MySQL 8.0开始支持窗口函数,这极大地增强了SQL查询的能力,允许执行复杂的分析操作,如排名、移动平均等,而无需使用子查询或连接。在SQL查询中,窗口函数(Window Functions)提供了一种强大的方式来执行复杂的分析操作。与聚合函数不同,窗口函数不会将行分组为单一的输出行;相反,它们允许我们在不减少原始行数的情况下对数据集进行计算。这种特性使得窗口函数非常适合于需要在结果集中保留所有记录的同时执行排序、排名或累计计算的任务。

1.1 窗口函数概念

窗口函数的核心在于“窗口”,即一个逻辑分区或子集,定义了函数应用的数据范围。每个窗口由三个主要部分组成:

  1. PARTITION BY:类似于GROUP BY,但它不会减少结果集中的行数。它用于定义窗口内的逻辑分区。
  2. ORDER BY:指定窗口内数据的排序顺序。
  3. 窗口框架:定义了窗口的具体范围,如当前行之前的所有行、之后的所有行或者两者之间的任意组合。

1.2 常见的窗口函数

  1. 排名函数
  • ROW_NUMBER(): 为窗口内的每一行分配唯一的序号。
  • RANK(): 根据指定的排序条件给每一行分配排名,相同的值会有相同的排名,但会跳过后续的排名。
  • DENSE_RANK(): 类似于RANK(),但是不会跳过后续的排名。
SELECT employee_id, department, salary,ROW_NUMBER() OVER (PARTITION BY department ORDER BY salary DESC) AS row_num,RANK() OVER (PARTITION BY department ORDER BY salary DESC) AS rank,DENSE_RANK() OVER (PARTITION BY department ORDER BY salary DESC) AS dense_rank
FROM employees;

此查询返回每个部门内按薪资降序排列的员工信息,并附带每种排名类型的数值。

  1. 聚合函数作为窗口函数
    除了排名函数外,常见的聚合函数也可以用作窗口函数,如SUM(), AVG(), COUNT(), MIN(), MAX()等。这些函数可以用来计算累积和、移动平均等。
SELECT date,sales,SUM(sales) OVER (ORDER BY date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS cumulative_sales
FROM daily_sales;

这段代码计算了每天的累计销售额。

  1. NTILE()
    NTILE(n)将结果集划分为n个大致相等的部分,并为每一行分配相应的桶编号。这对于划分数据集特别有用。
SELECT customer_id,purchase_amount,NTILE(4) OVER (ORDER BY purchase_amount DESC) AS quartile
FROM purchases;

二、公用表表达式(Common Table Expressions, CTEs)

公用表表达式(Common Table Expressions,简称CTEs)是SQL中一种非常有用的工具,它提供了一种清晰且可读的方式来定义临时结果集,这些结果集可以在后续的SELECT, INSERT, UPDATE, DELETE语句中引用。CTEs特别适用于需要多次引用相同子查询的情况,或者用于递归查询。

2.1 公用表表达式的概念

  1. 定义
    一个CTE由两部分组成:CTE名称和相应的查询定义。其语法结构如下:
WITH cte_name AS (SELECT column1, column2, ...FROM table_nameWHERE conditions
)
SELECT * FROM cte_name;
  1. 使用场景
  • 简化复杂查询:通过将复杂的查询分解为多个逻辑部分,使整个查询更加易读。
  • 递归查询:处理具有层次结构的数据,如组织结构图、分类树等。
  • 提高代码重用性:避免在同一查询中重复编写相同的子查询。

2.2 常见的公用表表达式

假设我们有一个员工表employees,包含字段employee_id, name, manager_id。我们的目标是从这个表中获取每个员工的名字及其直接经理的名字。

WITH EmployeeCTE AS (SELECT e1.employee_id AS emp_id, e1.name AS emp_name, e2.name AS manager_nameFROM employees e1LEFT JOIN employees e2 ON e1.manager_id = e2.employee_id
)
SELECT * FROM EmployeeCTE;

在这个例子中,EmployeeCTE作为一个临时的结果集,包含了员工及其对应经理的信息。这使得最终的SELECT语句变得非常简洁明了。

三、JSON增强

随着数据类型的多样化,非结构化数据如JSON(JavaScript Object Notation)在现代应用程序中变得越来越重要。MySQL从5.7版本开始支持JSON数据类型,并且在后续的版本中不断增强了对JSON的支持,使得存储、查询和操作JSON数据变得更加高效和便捷。

3.1 JSON增强的概念

在MySQL中,JSON是一种专门用于存储JSON文档的数据类型。与传统的文本存储方式不同,JSON字段不仅能够保持数据的结构完整性,还能利用MySQL提供的内置函数进行高效的查询和修改。

3.2 常见的JSON增强

MySQL提供了丰富的内置函数来处理JSON数据,包括但不限于:

  • 创建和解析JSON:如JSON_OBJECT(), JSON_ARRAY(), JSON_EXTRACT()
  • 修改JSON:如JSON_SET(), JSON_INSERT(), JSON_REPLACE(), JSON_REMOVE()
  • 检查JSON值:如JSON_CONTAINS(), JSON_CONTAINS_PATH()
  • 获取JSON属性:如JSON_KEYS()
INSERT INTO users (name, profile) VALUES ('John Doe', JSON_OBJECT('age', 30, 'email', 'john@example.com'));SELECT JSON_EXTRACT(profile, '$.email') AS email FROM users WHERE name = 'John Doe';

四、Invisible Indexes

在数据库管理中,索引是优化查询性能的关键工具。然而,并非所有的索引都对查询计划有积极的影响。有时候,某些索引可能会导致不必要的开销或干扰优化器的选择,尤其是在进行大规模的数据库重构或者性能调优时。MySQL从8.0版本开始引入了一个非常有用的功能——不可见索引(Invisible Indexes),它允许数据库管理员测试删除索引的影响而不实际移除它们。

4.1 Invisible Indexes的概念

不可见索引是一种特殊的索引类型,它不会被查询优化器考虑用于执行计划。这意味着虽然索引仍然存在于数据库中并且占用存储空间,但它不会影响查询的执行方式。这对于评估索引对查询性能的实际影响特别有用,因为它提供了一种无需永久删除索引来测试其重要性的方法。

4.2 常见的Invisible Indexes

在创建索引时,可以通过指定INVISIBLE关键字将其设为不可见:

CREATE INDEX idx_last_name ON employees (last_name) INVISIBLE;

修改现有索引的可见性

ALTER TABLE employees MODIFY INDEX idx_last_name INVISIBLE;-- 或者将其变回可见
ALTER TABLE employees MODIFY INDEX idx_last_name VISIBLE;

查看索引状态

SELECT table_schema, table_name, index_name, is_visible 
FROM information_schema.statistics 
WHERE table_schema = 'your_database' AND table_name = 'employees';

献给读者


💯 计算机技术的世界浩瀚无垠,充满了无限的可能性和挑战,它不仅是代码与算法的交织,更是梦想与现实的桥梁。无论前方的道路多么崎岖不平,希望你始终能保持那份初心,专注于技术的探索与创新,用每一次的努力和进步书写属于自己的辉煌篇章。

🏰在这个快速发展的数字时代,愿我们都能成为推动科技前行的中坚力量,不忘为何出发,牢记心中那份对技术执着追求的热情。继续前行吧,未来属于那些为之努力奋斗的人们。


亲,码字不易,动动小手,欢迎 点赞 ➕ 收藏,如 🈶 问题请留言(评论),博主看见后一定及时给您答复,💌💌💌


相关文章:

MySQL颠覆版系列————MySQL新特性(开启数据库的新纪元)上篇

文章目录 前言一、窗口函数(Window Functions)1.1 窗口函数概念1.2 常见的窗口函数 二、公用表表达式(Common Table Expressions, CTEs)2.1 公用表表达式的概念2.2 常见的公用表表达式 三、JSON增强3.1 JSON增强的概念3.2 常见的J…...

5.安全相关(双手启动、安全触边传感器)

一、关于双手启动按钮的使用规范 本文介绍双手启动按钮的使用。概括来讲: 双手按下之间的时间差间隔应该在0.5-2秒之间。一旦释放任何一个按钮,启动信号输出结束。只有两个按钮都被释放之后,才能再次触发双手启动信号。如果某按钮被按下超过…...

国产达梦(DM)数据库的安装(Linux系统)

目录 一、安装前的准备工作 1.1 导包 1.2 创建用户和组 1.3 修改文件打开最大数 1.4 目录规划 1.5 修改目录权限 二、安装DM8 2.1 挂载镜像 2.2 命令行安装 2.3 配置环境变量 2.4 启动图形化界面 三、配置实例 四、注册服务 五、启动 停止 查看状态 六、数据库客…...

mapper.xml中 “http://mybatis.org/dtd/mybatis-3-mapper.dtd“> 报错的解决方法

我用mybatisx自动生成代码,但是mapepr.xml中的 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">报错,如下图,圈起来的部分是之前的报错,现在已经解决,所以没有爆红: 解决方法:…...

01_JavaScript

目录 一、js介绍、能做什么 --了解 二、JavaScript的组成-重点 三、JavaScript代码的书写位置 行内JS 内嵌 JS 外链 JS 四、JS 中的注释 单行 多行 五、变量(重点) 定义变量及赋值 变量的命名规则和命名规范 六、数据类型(重…...

数组作为哈希表的妙用:寻找缺失的第一个正数

数组作为哈希表的妙用:寻找缺失的第一个正数 大家好,我是Echo_Wish,今天我们来探讨一个经典的算法问题——“缺失的第一个正数”。听起来可能有点简单,但它实际上是一个非常有意思且富有挑战性的题目,在面试中常常会碰…...

JAVA学习*Object类

Object类 Object类是所有类的父类 类中有一些方法(都需要掌握) toString()方法 在学习类的对象的时候有介绍过了,当我们重新给此方法就会打印类与对象的信息 equals()方法 在Java中的比较, 如果左右两侧是基本类型变量&#…...

《论语别裁》第02章 为政(03)星辰知多少

第二个问题说到“北辰”。我们中国文化发达得最早的是天文。过去我们把天体分成二十八宿和三垣——紫微、少微、太微,类似于我们现在讲天文的经纬度。经纬度是西方的划分法。曾经有位天文学家主张,我们自己重新划过,不照西方的度数划&#xf…...

git_version_control_proper_practice

git_version_control_proper_practice version control,版本控制的方法之一就是打tag 因为多人协作的项目团队,commit很多,所以需要给重要的commit打tag,方便checkout,检出这个tag 参考行业的实践方式。如图git、linux…...

playwright-go实战:自动化登录测试

1.新建项目 打开Goland新建项目playwright-go-demo 项目初始化完成后打开终端输入命令: #安装项目依赖 go get -u github.com/playwright-community/playwright-go #安装浏览器 go run github.com/playwright-community/playwright-go/cmd/playwrightlatest insta…...

手机扫描仪 含PDF转word功能+OCR识别110种语言

TapScanner Premium 是一款功能强大的手机扫描仪应用,支持 PDF 合并、分割以及转换为 Word 文档格式,还具备 OCR 识别功能,可识别 110 种语言。汉化中文且已激活全部功能,可免费使用。 该应用操作简洁,扫描文档、收据…...

数据可视化在商业智能中的应用:从数据到洞察的桥梁

数据可视化在商业智能中的应用:从数据到洞察的桥梁 大家好,我是Echo_Wish。今天,我们来探讨一个数据领域的热门话题——数据可视化在商业智能中的应用。在数据驱动的时代,如何从海量的数字和信息中提炼出有价值的洞察,成为了企业决策的关键。而数据可视化,正是将枯燥的数…...

【HarmonyOS Next的奇幻大冒险】DevEco Studio的AI助手CodeGenie挺好用

遇到些问题在官网搜不出答案,CodeGenie都给解决了! 不过我的问题可能比较初级,往后再看看它的能力怎么样 下面的截图是关于其中一个问题的对话。可见CodeGenie干脆利索,并且给出了相关知识点在官网上的参考信息链接,大…...

替代-UX设计师

初创公司如何在没有设计师的情况下 打造实用的用户体验 一个常见的捷径是使用预构建的组件库,如谷歌的 Material UI它们为你提供了构建块,但它们并没有为你考虑整个用户流程你仍然需要弄清楚所有这些是如何组合在一起的但是,很多时候&#x…...

ISIS-1 ISIS概述

前面几章我们介绍了OSPF的基础工作原理以及怎样交互LSA形成LSDB链路状态数据库的 这一章我们来介绍另一个链路状态路由协议,ISIS路由协议 一、概述 ISIS(Intermediate System to Intermediate System,中间系统到中间系统)是由ISO(International Organization for Standardiza…...

电脑上不了网普通用户排除方法

1:首先通过电脑的运行/CMD/ipconfig /all 命令查看电脑的ip地址是否正常如图: 2:在命令行中运行:ping 127.0.0.1 如图则正常,否则要重新安装网卡驱动 程序。 3:用ping命令,ping一下同网段的电…...

Qt 控件概述 QLCDNumber 和 Progressbar

目录 QLCDNumber 进度条 定时器进度条的实现 通过stylesheet来改变进度条颜色​ QLCDNumber LCD数字显示器 实现一个定时器 QLCDNumber 进度条 定时器进度条的实现 为什在Widget.h种头文件并没有包含QTimer这个头文件,却还可以申明一个TImer指针呢?…...

2025.03.21首板涨停股票分析

目录 1 涨停原因分析2 交易建议 1 涨停原因分析 2 交易建议...

数据库的DDL操作

目录 一、创建数据库 (1)字符集和校验集 二、操作数据库 (1)查看数据库 (2)显示创建语句 (3)修改数据库 (4)删除数据库 三、数据库的备份与恢复 四、…...

Docker 部署 Graylog 日志管理系统

Docker 部署 Graylog 日志管理系统 前言一、准备工作二、Docker Compose 配置三、启动 Graylog 服务四、访问 Graylog Web 界面总结 前言 Graylog 是一个开源的日志管理平台,专为实时日志收集、分析和可视化设计。它支持强大的搜索功能,并且与 Elastics…...

特征工程自动化(FeatureTools实战)

目录 特征工程自动化(FeatureTools实战)1. 引言2. 项目背景与意义2.1 特征工程的重要性2.2 自动化特征工程的优势2.3 工业级数据处理需求3. 数据集生成与介绍3.1 数据集构成3.2 数据生成方法4. 自动化特征工程理论基础4.1 特征工程的基本概念4.2 FeatureTools库简介4.3 关键公…...

Linux:xxx is not in the sudoers file. This incident will be reported.

报错 xxx is not in the sudoers file. This incident will be reported.解决方式 切换到root用户下操作 # 1、修改/etc/sudoers文件为可修改,默认是只读的 ls -lh /etc/sudoers -r--r----- 1 root root 4.3K Dec 1 01:45 /etc/sudoerschmod uw /etc/sudoersls…...

fastapi+playwright爬取google搜索1-3页的关键词返回json

1,playwright无头 2,代理池随机获取代理ip 3,随机浏览行为,随机页面滚动 4,启用stealth模式 5,随机延时搜索 from fastapi import FastAPI, HTTPException from fastapi.responses import JSONResponse import asyncio from concurrent.futures import ThreadPool…...

论文阅读笔记:Denoising Diffusion Probabilistic Models (3)

论文阅读笔记:Denoising Diffusion Probabilistic Models (1) 论文阅读笔记:Denoising Diffusion Probabilistic Models (2) 论文阅读笔记:Denoising Diffusion Probabilistic Models (3) 4、损失函数逐项分析 可以看出 L L L总共分为了3项…...

FlauBERT:面向法语的无监督语言模型预训练

摘要 语言模型已成为在许多不同自然语言处理(NLP)任务中取得最先进成果的关键步骤。利用当今可用的大量未标注文本,它们提供了一种有效的方式来预训练连续词表示,这些表示可以在下游任务中进行微调,并在句子级别上进行…...

JavaScript严格模式

文章主要介绍JavaScript严格模式,包括启用原因、方式以及需避开的常见陷阱,助力开发者写出更健壮代码。 1. 启用原因:将普通JavaScript中的“静默错误”变为抛出错误,有助于编写健壮代码;修复阻碍JavaScript引擎优化的…...

文件上传的小点总结(1)

2.文件类型绕过 问题插入:BP无法拦截本地流量 ①插件限制 不代理的地址列表通常写有localhost和127.0.0.1,把本地的全都删掉,然后应用保存。 ②浏览器限制 Firefox浏览器设置:检查浏览器代理配置和proxy listeners都没问题后&…...

2024年数维杯数学建模B题生物质和煤共热解问题的研究解题全过程论文及程序

2024年数维杯数学建模 B题 生物质和煤共热解问题的研究 原题再现: 随着全球能源需求的不断增长和对可再生能源的追求,生物质和煤共热解作为一种潜在的能源转化技术备受关注。生物质是指可再生能源,源自植物和动物的有机物质,而煤…...

@maptalks/gl-layers中的VectorTileLayer的Symbol样式文档

maptalks/gl-layers中的VectorTileLayer的Symbol样式文档 矢量的Symbol样式分为以下几个大类: marker样式属性,定义了图标相关样式属性 text样式属性,定义了文字相关样式属性 line样式属性,定义了线相关的样式属性 polygon样式属…...

OpenCV旋转估计(3)帮助构建一个最大生成树(Maximum Spanning Tree)函数findMaxSpanningTree()

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 cv::detail::findMaxSpanningTree 是 OpenCV 中用于图像拼接工作流的一个函数,它帮助构建一个最大生成树(Maximum Spanni…...

OpenCV HighGUI 模块使用指南(Python 版)

用户让我编写一个 HighGUI 模块的使用指南,包括函数的使用和应用场景的实现。首先,我需要回顾 HighGUI 模块的主要功能:图像显示、视频捕获、鼠标和键盘事件。然后,按照用户提供的结构,整理每个部分的函数详解、代码示…...

SPI 机制与 Spring Boot AutoConfiguration 对比解析

一、架构效率革命性提升 1.1 类加载效率跃升 Spring Boot 2.7引入的AutoConfiguration.imports采用清单式配置加载,对比传统SPI机制: 传统SPI扫描路径:META-INF/services/** Spring Boot新方案:META-INF/spring/org.springfram…...

算法基础篇(1)(蓝桥杯常考点)

算法基础篇 前言 算法内容还有搜索,数据结构(进阶),动态规划和图论 数学那个的话大家也知道比较难,放在最后讲 这期包含的内容可以看目录 模拟那个算法的话就是题说什么写什么,就不再分入目录中了 注意事…...

【蓝桥杯速成】| 10.回溯切割

前面两篇内容我们都是在做有关回溯问题的组合应用 今天的题目主题是:回溯法在切割问题的应用 题目一:分割回文串 问题描述 131. 分割回文串 - 力扣(LeetCode) 给你一个字符串 s,请你将 s 分割成一些 子串&#xff…...

【Spring】深入理解 Spring 事务管理

文章目录 一、事务的基本概念​原子性(Atomicity)一致性(Consistency)隔离性(Isolation)持久性(Durability) 二、Spring 事务管理的优势​简化事务管理代码提供多种事务管理方式整合…...

java学习笔记6

按住shift键,选择开始的一位和最后结束的一位来全选 面向对象特征之二:继承性(inheritance) 面向对象特征之二:继承性1.继承性的理解 > 生活上:财产的继承、颜值的继承 > 代码层面:> 自上而下:定义了一个类A,在定义另一个类B时&…...

人工智能在现代科技中的应用和未来发展趋势

人工智能(Artificial Intelligence,AI)是一种模拟人类智能思维和行为的技术,已经在现代科技中得到广泛应用。以下是人工智能在现代科技中的应用和未来发展趋势: 应用: 机器学习:机器学习是人工…...

第二十一章:模板与继承_《C++ Templates》notes

模板与继承 重点和难点编译与测试说明第一部分:多选题 (10题)第二部分:设计题 (5题)答案与详解多选题答案:设计题参考答案 测试说明 重点和难点 21.1 空基类优化(EBCO) 知识点 空基类优化(Empty Base Cla…...

STC89C52单片机学习——第35节: [16-1] AD/DA

写这个文章是用来学习的,记录一下我的学习过程。希望我能一直坚持下去,我只是一个小白,只是想好好学习,我知道这会很难,但我还是想去做! 本文写于:2025.03.23 51单片机学习——第35节: [16-1] AD/DA 前言开发板说明引用解答和科普一、AD问题…...

算法-最大公约数

1、约数: 1.1 试除法求约数 原理:只需要遍历最小的约数即可,较大的那个可以直接算出来。 import java.util.*; public class Main {static Scanner sc new Scanner(System.in);public static void main(String[] args) {int t sc.nextIn…...

在 SaaS 应用上构建 BI 能力的实战之路

SaaS 产品在持续运营过程中积累了大量数据,这些数据不仅是数字的记录,更是洞察市场趋势、优化产品功能、提升用户体验的宝贵资源。 因此,大部分的 SaaS 产品在发展到一定阶段后,都会开始构建自己的报表模块或分析模块,…...

代码随想录刷题day51|(二叉树篇)654.最大二叉树

一、二叉树基础知识 详见:代码随想录刷题day34|(二叉树篇)二叉树的递归遍历-CSDN博客 二、递归思路 递归三部曲 构造树一般采用前序遍历,因为先构造中间节点,然后递归构造左子树和右子树; 1.递归函数参数…...

深入理解 C++11 智能指针:独占、共享与弱引用的完美管理

文章目录 std::unique_ptr(独占式智能指针)std::shared_ptr(共享式智能指针)std::weak_ptr(弱引用智能指针)示例展示:智能指针的原理内存泄漏**什么是内存泄漏,内存泄漏的危害****如…...

1.2 编译器结构

编译器具有模块化的高层结构。还可以将模块化进一步细化。编译器可以看成多个阶段构成的流水线结构。 一种没有优化的编译器结构 更复杂的编译器结构...

文件操作助手

文件操作助手 在我们实现一个大型项目时,往往会有一个公共模块,这个公共模块是公用的,里面可能会包含文件操作助手、字符串操作助手、时间戳操作助手… 而我们今天就来实现一个文件操作助手,里面包含的功能有: 判断…...

线段树与扫描线 —— 详解算法思想及其C++实现

目录 一、线段树(Segment Tree) 基本概念 结构 操作 示例代码 二、扫描线(Sweep Line) 基本概念 应用场景 示例代码(矩形面积并集) 三、总结 一、线段树(Segment Tree) 基本…...

Leetcode 刷题笔记1 图论part04

leetcode 110 字符串接龙 def judge(s1, s2):count 0for i in range(len(s1)):if s1[i] ! s2[i]:count 1return count 1if __name__ __main__:n int(input())begin_str, end_str map(str, input().split())if begin_str end_str:print(0)exit()strlist []for _ in ran…...

快速入手:Nacos融合SpringCloud成为注册配置中心

快速入手:Nacos融合SpringCloud成为注册配置中心 前言安装Nacos项目搭建添加配置启动类添加注解运行项目服务调用RestTemplate 模式FeignClient 模式 前言 Spring Cloud是一系列框架的集合,提供了微服务架构下的各种解决方案,如服务治理、配…...

others-rustdesk远程

title: others-rustdesk远程 categories: Others tags: [others, 远程] date: 2025-03-19 10:19:34 comments: false mathjax: true toc: true others-rustdesk远程, 替代 todesk 的解决方案 前篇 官方 服务器 - https://rustdesk.com/docs/zh-cn/self-host/rustdesk-server-o…...

go:前后端分离

1.前端代码 新建一个前端文件夹,在该文件夹下新建一个.html文件,写入自己的html代码。 前端搞定。 2.后端代码 其核心是挂载路由接受前端传来的数据核心代码如下: func main() { // 服务运行提示 fmt.Println("go web server is runn…...