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

spark-Join Key 的基数/rand函数

在数据处理中,Join Key 的基数 是指 Join Key 的唯一值的数量(也称为 Distinct Key Count)。它表示某个字段(即 Join Key)在数据集中有多少个不同的值。

1. Join Key 基数的意义

  • 高基数:Join Key 的唯一值数量较多,例如用户 ID、订单号等字段,每个值通常是唯一的。
  • 低基数:Join Key 的唯一值数量较少,例如性别(只有 “男” 和 “女” 两种值)、国家(通常只有几十到几百个值)。

Join Key 的基数直接影响 Join 操作的性能和数据分布,尤其是在分布式计算框架(如 Spark)中,基数的大小会影响数据的分区和 Shuffle 的效率。

2. Join Key 基数的计算

假设有一个数据表 orders,包含以下字段:

order_id | user_id | country1     |   101   |   US2     |   102   |   US3     |   103   |   UK4     |   101   |   US5     |   104   |   CA
计算基数的步骤
  1. 选择 Join Key 字段:假设我们选择 user_id 作为 Join Key。
  2. 统计唯一值数量
    • user_id 的唯一值为 {101, 102, 103, 104}
    • 基数为 4(即有 4 个不同的用户 ID)。

3. Join Key 基数对 Join 的影响

3.1 高基数的 Join Key
  • 定义:Join Key 的唯一值数量较多,接近数据集的总行数。例如订单号、用户 ID 等。
  • 特点
    • 数据分布通常较均匀,因为每个分区中 Join Key 的值都可能不同。
    • Shuffle 的数据量较大,但不会出现数据倾斜问题。
  • 适用 Join 类型
    • Sort-Merge Join:更适合高基数的 Join Key,因为数据分布均匀,排序和合并效率较高。
    • Broadcast Join:如果其中一个数据集较小,也可以使用广播机制避免 Shuffle。
3.2 低基数的 Join Key
  • 定义:Join Key 的唯一值数量较少,远小于数据集的总行数。例如性别(只有 “男” 和 “女” 两种值)。
  • 特点
    • 数据分布容易不均匀(数据倾斜),因为某些分区可能包含大量相同的 Join Key。
    • Shuffle 的数据量可能较小,但由于数据倾斜,某些分区的计算时间会显著增加。
  • 适用 Join 类型
    • Broadcast Join:如果其中一个数据集较小,广播机制可以避免数据倾斜。
    • Shuffle Hash Join:适合低基数的 Join Key,但需要注意数据倾斜问题。

4. Join Key 基数的实际应用场景

场景 1:高基数 Join Key
  • 示例
    • 表 A:user_id(100 万行,100 万个唯一值)。
    • 表 B:user_id(10 万行,10 万个唯一值)。
  • 分析
    • user_id 是高基数字段,数据分布均匀。
    • Spark 可以选择 Sort-Merge JoinBroadcast Join(如果表 B 较小)。
场景 2:低基数 Join Key
  • 示例
    • 表 A:country(100 万行,只有 3 个唯一值:US、UK、CA)。
    • 表 B:country(10 万行,只有 3 个唯一值:US、UK、CA)。
  • 分析
    • country 是低基数字段,数据分布可能不均匀(例如 US 的数据量远大于 UK 和 CA)。
    • Spark 可能选择 Shuffle Hash Join,但需要解决数据倾斜问题。

5. 如何优化基数对 Join 的影响

5.1 高基数 Join Key
  • 优化策略
    • 如果数据量较大且 Join Key 基数高,确保数据分区均匀,避免分区过多或过少。
    • 如果其中一个数据集较小,可以使用 Broadcast Join 避免 Shuffle。
5.2 低基数 Join Key
  • 优化策略
    1. 处理数据倾斜
      • 使用随机前缀对 Join Key 进行打散:
        val df1 = df1.withColumn("key", concat(col("country"), lit("_"), rand()))
        
- `RAND()`- 生成一个介于 `[0, 1)` 的随机浮点数。- 每行都会生成一个新的随机数。
- `FLOOR(RAND() * 10)`- 将随机数放大到 `[0, 10)` 的范围,并取整,生成一个随机整数(09)。- 这个整数作为随机前缀的一部分。
SELECT *,CONCAT(country, '_', CAST(FLOOR(RAND() * 10) AS STRING)) AS key
FROM df1
 - 在 Join 后去除随机前缀,恢复原始数据。
  1. 使用 Broadcast Join
    • 如果其中一个数据集较小,可以广播小表,避免 Shuffle 和数据倾斜。
  2. 分区优化
    • 调整分区数,使得每个分区的数据量尽量均匀。

6. 总结

Join Key 基数定义特点适用 Join 类型优化策略
高基数唯一值数量较多,接近总行数数据分布均匀,Shuffle 数据量大,但不会出现数据倾斜Sort-Merge Join、Broadcast Join确保分区均匀,使用 Broadcast Join(如果小表较小)。
低基数唯一值数量较少,远小于总行数数据分布不均匀,容易出现数据倾斜Shuffle Hash Join、Broadcast Join处理数据倾斜(随机前缀打散、分区优化),使用 Broadcast Join(如果小表较小)。

7. 实际案例*

案例 1:用户订单分析
  • 场景:将用户表(user_id)与订单表(user_id)进行 Join。
  • 分析
    • user_id 是高基数字段,数据分布均匀。
    • 如果用户表较小,可以使用 Broadcast Join
    • 如果用户表较大,使用 Sort-Merge Join
案例 2:国家销售额分析
  • 场景:将销售表(country)与国家表(country)进行 Join。
  • 分析
    • country 是低基数字段,数据分布可能不均匀(如 US 数据量远大于其他国家)。
    • 可能出现数据倾斜问题,需要通过随机前缀或 Broadcast Join 优化。

6、 RAND() 生成随机数的原理

1.1 RAND() 的工作机制
  • 定义:RAND() 是 SQL 中用于生成随机数的函数,返回一个介于 [0, 1) 的浮点数
  • 随机数生成原理:
    • RAND() 使用伪随机数生成器(PRNG,Pseudo-Random Number Generator),基于一定的算法和种子(Seed)生成随机数。
    • 如果不指定种子,RAND() 每次调用都会基于系统当前状态(如时间戳)生成一个新的随机数。
    • 如果指定种子(如 RAND(seed)),则每次调用会生成相同的随机数序列。
1.2 RAND() 在多个表中的表现
  • 无种子情况下
    • 每次调用 RAND() 都会生成一个新的随机数
    • 在不同表中调用 RAND() 时,生成的随机数通常不同,因为它们基于各自的计算环境(如时间戳)。
  • 指定种子情况下
    • 如果在多个表中使用相同的种子(如 RAND(42)),则生成的随机数序列会相同
    • 这种情况下,可以确保不同表中的随机数一致。

2. 生成随机数不一致,导致关联不上解决方案

2.1 使用固定种子
  • 原理
    • 在多个表中使用相同的种子(如 RAND(42)),确保随机数生成逻辑一致。
    • 这样可以保证 country 的随机前缀在两个表中一致。
  • 实现
    SELECT CONCAT(country, '_', CAST(FLOOR(RAND(42) * 10) AS STRING)) AS key
    FROM tableA;SELECT CONCAT(country, '_', CAST(FLOOR(RAND(42) * 10) AS STRING)) AS key
    FROM tableB;
    
  • 效果
    • 表 A 和表 B 中的 country 值生成的随机前缀一致(如 US_7),确保 Join Key 匹配。
2.2 使用哈希函数
  • 原理
    • 使用哈希函数(如 MD5SHA)对 country 进行处理,生成一个固定的随机前缀。
    • 哈希函数的结果是确定性的,同样的输入会生成相同的输出。
  • 实现
    SELECT CONCAT(country, '_', CAST(FLOOR(ABS(HASH(country)) % 10) AS STRING)) AS key
    FROM tableA;SELECT CONCAT(country, '_', CAST(FLOOR(ABS(HASH(country)) % 10) AS STRING)) AS key
    FROM tableB;
    
  • 效果
    • 表 A 和表 B 中的 country 值生成的哈希前缀一致(如 US_7),确保 Join Key 匹配。
3.3 使用分组 ID 或预处理
  • 原理
    • 在数据预处理阶段,为每个 country 分配一个固定的分组 ID(如 US -> 0UK -> 1),然后在 Join Key 中使用分组 ID。
  • 实现
    • 在数据预处理阶段:
      SELECT country,ROW_NUMBER() OVER (ORDER BY country) AS group_id
      FROM tableA;
      
    • 在 Join Key 中使用 group_id
      SELECT CONCAT(country, '_', group_id) AS key
      FROM tableA;SELECT CONCAT(country, '_', group_id) AS key
      FROM tableB;
      
  • 效果
    • 表 A 和表 B 中的 country 值生成的分组 ID 一致,确保 Join Key 匹配。
3.4 扩大随机数范围
  • 原理
    • 增加随机数的范围(如 RAND() * 100),减少随机前缀重复的概率。
    • 虽然不能完全解决随机数不一致的问题,但可以缓解数据倾斜问题。
  • 实现
    SELECT CONCAT(country, '_', CAST(FLOOR(RAND() * 100) AS STRING)) AS key
    FROM tableA;SELECT CONCAT(country, '_', CAST(FLOOR(RAND() * 100) AS STRING)) AS key
    FROM tableB;
    

4. 推荐方案

4.1 如果需要随机前缀一致性
  • 使用固定种子(如 RAND(42))或哈希函数(如 HASH(country))生成随机前缀,确保 Join Key 在多个表中一致。
4.2 如果需要减少数据倾斜
  • 扩大随机数范围(如 RAND() * 100),减少随机前缀重复的概率。
  • 或者在数据预处理阶段对 Join Key 进行分组。

5. 总结

方法是否解决随机前缀一致性问题是否解决数据倾斜问题适用场景
固定种子(RAND(seed))确保多个表的 Join Key 一致。
哈希函数(HASH)部分解决确保一致性,同时减少倾斜。
分组 ID需要预处理,适合复杂场景。
扩大随机数范围部分解决适合倾斜问题较轻的场景。

相关文章:

spark-Join Key 的基数/rand函数

在数据处理中,Join Key 的基数 是指 Join Key 的唯一值的数量(也称为 Distinct Key Count)。它表示某个字段(即 Join Key)在数据集中有多少个不同的值。 1. Join Key 基数的意义 高基数:Join Key 的唯一值…...

【Oracle认证】MySQL 8.0 OCP 认证考试英文版(MySQL30 周年版)

文章目录 1、MySQL OCP考试介绍2、考试注册流程3、考试复习题库 Oracle 为庆祝 MySQL 30 周年,截止到2025.07.31 之前。所有人均可以免费考取原价245美元 (约1500)的MySQL OCP 认证。 1、MySQL OCP考试介绍 OCP考试 OCP认证是Oracle公司推…...

不同环境下运行脚本如何解决pythonpath问题

目录 问题背景: 方法一:在 Dockerfile 中设置 PYTHONPATH: 方法二: 本地脚本内动态地设置 sys.path,以确保 Python 程序在运行时能够找到项目中的模块 注意: 问题背景: 脚本在windows环境定义 然后因为…...

照片to谷歌地球/奥维地图使用指南

软件介绍 照片to谷歌地球/奥维地图是一款由WTSolutions开发的跨平台图片处理工具,能够将带有GPS信息的照片导入Google Earth(谷歌地球)或奥维地图。该软件支持Windows、Mac、iOS、Linux和Android系统,无需下载安装,直…...

visual studio 2015 安装闪退问题

参考链接: VS2012安装时启动界面一闪而过问题解决办法 visual studio 2015 安装闪退问题...

Kubernetes 使用 containerd 实现 GPU 支持及 GPU Operator 部署指南

目录 Kubernetes 使用 containerd 实现 GPU 支持及 GPU Operator 部署指南 一、为什么 containerd 是趋势? 二、目标 三、前提条件 四、方式一:containerd nvidia-container-toolkit(基础方式) 1️⃣ 安装 NVIDIA Containe…...

【typenum】 1 说明文件(README.md)

Typenum Typenum 是一个用于在编译时计算类型级数字的 Rust 库。目前支持位、无符号整数和有符号整数。 Typenum 仅依赖 libcore,因此适用于任何平台! 导入方式 虽然 typenum 分为多个模块,但它们都通过 crate 根目录重新导出&#xff0c…...

Axure疑难杂症:统计分析页面引入Echarts示例动态效果

亲爱的小伙伴,在您浏览之前,烦请关注一下,在此深表感谢! Axure产品经理精品视频课已登录CSDN可点击学习https://edu.csdn.net/course/detail/40420 课程主题:统计分析页面引入Echarts示例动态效果 主要内容:echart示例引入、大小调整、数据导入 应用场景:统计分析页面…...

PyQt5基本窗口控件(QWidget)

QWidget 基础窗口控件QWidget类是所有用户界面对象的基类,所有的窗口和控件都直 接或间接继承自QWidget类。 窗口控件(Widget,简称“控件”)是在PyQt中建立界面的主要元素。在PyQt 中把没有嵌入到其他控件中的控件称为窗口&…...

双目视觉系统中,极线校正(Epipolar Rectification)与单应性矩阵/多平面单应性模型

在双目视觉系统中,极线校正(Epipolar Rectification)的目标是使左右图像的对应点位于同一水平线上,从而简化立体匹配的搜索过程。标准的双目相机标定和校正流程,其核心原理与单应性矩阵的应用方式如下: 1. …...

【部署】win10的wsl环境下调试dify的api后端服务

回到目录 标题:win10的wsl环境下,远程调试dify的api后端服务 0. 上一篇讲解web前端服务的启动方法,本篇内容是vscode的调试模式启动api后端服务。文章4000字左右,阅读时间15-20分钟。 dify官方运行环境要求较低2U4G&#xff0c…...

学习黑客了解Python3的“HTTPServer“

5 分钟深入浅出理解Python3的"HTTPServer"模块 🌐 大家好!今天我们将探索Python3中的HTTPServer模块——一个简单却强大的工具,它允许你快速创建web服务器。在网络安全学习、渗透测试和CTF挑战中,这个模块常被用来搭建…...

结合 ECharts / Ant Design Blazor 构建高性能实时仪表盘

📊 结合 ECharts / Ant Design Blazor 构建高性能实时仪表盘 文章目录 📊 结合 ECharts / Ant Design Blazor 构建高性能实时仪表盘一、前言 🔍二、技术选型 🧰三、项目配置与架构 🏗️🌐 系统整体架构流程…...

刘强东杀入自动驾驶!京东注册“Joyrobotaxi”商标

又一个互联网大佬杀入汽车赛道!这一次,是京东的刘强东。5月6日,京东集团旗下公司一口气申请注册了多个名为"Joyrobotaxi"的商标,国际分类涵盖运输工具、科学仪器等核心领域。这一动作被业界普遍解读为:京东要…...

JavaScript基础-switch分支流程控制

在JavaScript编程中,switch语句提供了一种清晰、简洁的方式来实现多路分支选择。相比于多个if...else if语句,switch语句可以使代码更加易读和易于维护,尤其是在需要根据单个变量或表达式的值进行不同路径选择时尤为有用。本文将详细介绍swit…...

MySQL:视图

目录 一、什么是视图 二、视图的创建和使用 三、修改数据 (1)修改真实表 (2)修改视图 四、删除视图 五、视图的优点 一、什么是视图 视图是一个虚拟的表,它是基于一个或多个基本表或其他视图的查询结果集。视…...

05 mysql之DDL

一、SQL的四个分类 我们通常可以将 SQL 分为四类,分别是: DDL(数据定义语言)、DML(数据操作语言)、 DCL(数据控制语言)和 TCL(事务控制语言)。 DDL 用于创建…...

各国GDP变化趋势网页特效(实用动态图表)完整实例

https://download.csdn.net/download/YUJIANYUE/90803109...

【部署】win10的wsl环境下启动dify的web前端服务

回到目录 标题:win10的wsl环境下启动dify的web前端服务 0. 官网安装指引 官网有详细的源代码部署说明,参考: https://docs.dify.ai/en/getting-started/install-self-hosted/local-source-code 1. 安装nodejs 1.1. 下载和解压文件 参考:https://no…...

Veins同时打开SUMO和OMNeT++的GUI界面

进入 Veins 工程目录(即包含 sumo-launchd.py 的目录),打开终端设置 SUMO_HOME 环境变量(指向你安装的 SUMO 路径): export SUMO\_HOME/home/veins/src/sumo-1.11.0编译 Veins 工程(包含 OMNeT…...

模型 启动效应

系列文章分享模型,了解更多👉 模型_思维模型目录。刺激先行激活,后续认知更顺畅。 1 启动效应的应用 1.1 求职面试中对面试官的影响 背景:一家知名公司在招聘过程中发现,面试官对候选人的评价往往受到多种因素的影响…...

Android 使用Paging3 实现列表分页加载、下拉刷新、错误重试、筛选功能

Android 使用Paging3 实现列表加载 Paging3是Android Jetpack组件库中的分页加载库,它可以帮助开发者轻松实现列表数据的分页加载功能。本文将逐步讲解如何使用Paging3库实现一个带有加载更多、下拉刷新、错误重试、筛选功能的列表页面。 最终效果如下 加载更多、…...

SpringBoot2集成xxl-job详解

官方教程 搭建调度中心 Github Gitee 注:版本3.x开始要求Jdk17;版本2.x及以下支持Jdk1.8。如对Jdk版本有诉求,可选择接入不同版本 clone源代码执行xxl-job\doc\db\tables_xxl_job.sql # # XXL-JOB v2.4.1 # Copyright (c) 2015-present, x…...

洛图报告中的 FSHD 是什么?—— 解密九天画芯推动的三色光源显示技术

目录 一、洛图报告新焦点:FSHD 为何成为显示产业重要突破方向? (一)洛图报告核心结论:从技术突围到产业重构 二、技术解析:FSHD 如何重构显示底层逻辑? (一)物理架构…...

关于数据库查询速度优化

本人接手了一个关于项目没有任何文档信息的代码,代码也没有相关文档说明信息!所以在做数据库查询优化的时候不敢改动。 原因1: 老板需要我做一个首页的统计查询。明明才几十万条数据,而且我加了筛选条件为什么会这么慢&#xff…...

两数相加(2)

2. 两数相加 - 力扣(LeetCode) 解法: class Solution { public:ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {ListNode * dummy new ListNode(0);int carry 0;ListNode * head dummy;while (l1 ! nullptr || l2 ! nullptr ||…...

车载学习(6)——CAPL(1)一些基础知识

1.一些CAPL的知识 CAPL通讯访问编程语言(Commmunication Access Programming language) CAPL的用途 ECU的仿真实现(报文的收发、数据的处理)实现总线日志纪录的控制实现总线数据自动化分析实现ECU功能的自动化测试实现ECU报文发…...

C++笔记-set和map的使用(包含multiset和multimap的讲解)

1.序列式容器和关联式容器 前面我们已经接触过STL中的部分容器如:string、vector、list、deque、array、forward_list等,这些容器统称为序列式容器,因为逻辑结构为线性序列的数据结构,两个位置存储的值之间一般没有紧密的关联关系&#xff0…...

GLPK(GNU线性规划工具包)介绍

GLPK全称为GNU Linear Programming Kit(GNU线性规划工具包),可从 https://sourceforge.net/projects/winglpk/ 下载源码及二进制库,最新版本为4.65。也可从 https://ftp.gnu.org/gnu/glpk/ 下载,仅包含源码,最新版本为5.0。 GLPK是…...

技嘉主板BIOS升级

截图可能不同的BIOS长的不一样,但大概相同,BIOS不下错,逐个版本升级就没问题 准备工作 准备工作一个fat32格式的U盘,用来存放BIOS确认主板型号 和当前BIOS版本 方式1:去系统信息里面 方式2: 去BIOS设置…...

自定义类型:结构体进阶

一、结构体类型的声明 前⾯我们在学习操作符和初阶结构体的时候,已经学习了结构体的知识,这⾥稍微复习⼀下。 1.1结构体的回顾 结构是⼀些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。 1.2结构的声明 struct tag…...

linux perf top分析系统性能

1,看到内核宏是否支持perf功能 perf top -g 查看linux 内核宏定义 CONFIG_PERF_EVENTS=y CONFIG_HAVE_PERF_EVENTS=y CONFIG_FRAME_POINTER=y # 确保帧指针支持以捕获完整堆栈 2,使用perf top -g 报错 Access to performance monitoring and observability operations is l…...

串口屏调试 1.0

http://wiki.tjc1688.com 先把商家的链接贴过来 淘晶驰T1系列3.2寸串口屏tft液晶屏显示屏HMI触摸屏超12864液晶屏 这是主包的型号 打开这个玩意 有十个基本的功能区 新建工程 在界面的右边,指令一定要写在page前面,这里的波特率等等什么的都可以…...

Python面向对象编程:初识类与对象

面向对象编程(OOP)是Python编程中最重要的范式之一。本文将从零开始介绍Python中类和对象的基本概念,帮助初学者快速掌握面向对象编程的核心思想。 一、什么是面向对象编程? 面向对象编程(Object-Oriented Programming)是一种以"对象"为核心…...

局域网常用的测速工具,Iperf3使用教程

目录 下载方式 Windows Linux 使用方法:测试局域网带宽 步骤一:服务端准备 步骤二:客户端发起连接 步骤三:查看结果 参数说明 1. Iperf常用参数(测试够用) 2. 通用参数(Server端和Cli…...

[架构之美]linux常见故障问题解决方案(十九)

[架构之美]linux下常见故障问题解决方案 一,文本文件忙 问题一:rootwh-VMware-Virtual-Platform:/home/hail# cp /root/containerd/bin/* /usr/bin/ cp: 无法创建普通文件 ‘/usr/bin/containerd’: 文本文件忙 在Linux系统中遇到“文本文件忙”错误时…...

Java与Go语言对比教程

Java vs. Go:程序员的双节棍与瑞士军刀之战 🎯 先看一张灵魂对比图 🤖 Java老大哥 🚀 Go小钢炮 出生年份 1995(中年稳健) 2009(年轻活力&…...

计算机大类专业数据结构下半期实验练习题

1068: 图的按录入顺序深度优先搜索 #include"iostream" using namespace std; #include"cstring" int visited[100]; char s[100]; int a[100][100]; int n; void dfs(int k,int n) {if(visited[k]0){visited[k]1;cout<<s[k];for(int i0;i<n;i){i…...

Android 关闭Activity切换过渡动画

Android 9.0以前关闭过渡动画效果只需要把开发者模式中过渡动画缩放设为0就可以。也就是把def_window_transition_scale改为0% frameworks/base/packages/SettingsProvider/res/values/defaults.xml <fraction name"def_window_transition_scale">100%<…...

iperf3的介绍与舒勇

在 CentOS 7 中使用 iperf3 进行网络性能测试&#xff0c;分为客户端和服务器两部分。以下是使用步骤&#xff1a; 1. 安装 iperf3 首先&#xff0c;你需要在 CentOS 7 上安装 iperf3。可以通过以下命令进行安装&#xff1a; sudo yum install epel-release sudo yum install…...

Python 包管理新选择:uv

在 Python 中,uv 是由 Astral 公司开发的 Rust 高性能包管理工具,旨在替代传统 pip 并提供更快的依赖管理、Python 版本控制等功能。 https://github.com/astral-sh/uv 在 github 上已有 53k star 一、uv 的核心优势 极速性能:比 pip 快 10-100 倍。多版本 Python 管理:支…...

从需求到用例的AI路径:准确率与挑战

用工作流生成测试用例和自动化测试脚本&#xff01; 引言&#xff1a;用例的黄金起点 在软件工程中&#xff0c;“测试用例”是连接需求理解与质量保障之间的关键桥梁。一份高质量的测试用例&#xff0c;不仅是验证功能实现是否符合需求的工具&#xff0c;更是产品风险感知、用…...

JavaSE核心知识点02面向对象编程02-06(泛型)

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点睡觉 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 文章目录 JavaSE核心知识点02面向对象编程02-06&#…...

xml与注解的区别

功能xml配置注解定义bean bean标签 id属性 class属性 Component Controller Service Repository ComponentScan 设置依赖注入 setter注入&#xff08;set方法&#xff09; 构造器注入&#xff08;构造方法&#xff09; Autowired Qualifier Value 配置第三方bean bean标签 静…...

进阶 DFS 学习笔记

字数&#xff1a;12017字。 文章盗的图注明了出处&#xff0c;全部出自 y 总的算法提高课。 不知道为啥这个时候才开始学这个东西&#xff0c;好像是很多同龄人都已经学完了。 进阶 DFS 具体来说好几个东西&#xff0c;所以可能内容有一些些多。 默认 DFS 和 BFS 已经掌握了…...

计算机设计大赛山东省赛区软件开发赛道线上答辩复盘

流程回顾&#xff1a; 1.抽签顺序&#xff1a; 抽签顺序并不一定代表是最终顺序&#xff0c;要注意看通知不要遗漏。 2.答辩形式&#xff1a; 线上答辩&#xff0c;加入腾讯会议&#xff0c;进会议时自己的备注是作品编号&#xff0c;等轮到自己组答辩时主持人会把人拉进来…...

第7次课 栈A

课堂学习 栈&#xff08;stack&#xff09; 是一种遵循先入后出逻辑的线性数据结构。 我们可以将栈类比为桌面上的一摞盘子&#xff0c;如果想取出底部的盘子&#xff0c;则需要先将上面的盘子依次移走。我们将盘子替换为各种类型的元素&#xff08;如整数、字符、对象等&…...

TXT编码转换工具iconv

iconv.exe是实现TXT编码转换的命令行工具&#xff0c;支持几百种编码格式的转换&#xff0c;利用它可以在自主开发程序上实现TXT文档编码的自动转换。 一、命令参数格式 Usage: iconv [-c] [-s] [-f fromcode] [-t tocode] [file ...] or: iconv -l 二、转换的示例 将UTF-8…...

基于Spring Boot + Vue的高校心理教育辅导系统

一、项目背景介绍 随着高校对学生心理健康教育的重视&#xff0c;传统的人工心理辅导与测评模式已经难以满足广大师生的个性化需求。为了提高心理服务的效率、便捷度和覆盖范围&#xff0c;本项目开发了一个高校心理教育辅导系统&#xff0c;集成心理评测、辅导预约、留言交流…...

关于甲骨文(oracle cloud)丢失MFA的解决方案

前两年&#xff0c;申请了一个招商的多币种信用卡&#xff0c;然后就从网上撸了一个oracle的免费1h1g的服务器。 用了一段时间&#xff0c;人家要启用MFA验证。 啥叫MFA验证&#xff0c;类似与短信验证吧&#xff0c;就是绑定一个手机&#xff0c;然后下载一个app&#xff0c;每…...