OceanBase 4.3.3 AP 解析:应用 RoaringBitmaps 类型处理海量数据的判重和基数统计
对于大数据开发人员而言,处理海量数据的判重操作和基数统计是常见需求,而 RoaringBitmap类型及其相关函数是当前非常高效的一种解决方案,许多大数据库产品已支持RoaringBitmap类型。OceanBase 4.3.3版本,作为专为OLAP场景设计的正式发布(GA)版,也具备这一功能。本文重点阐述 RoaringBitmap 的原理、应用场景,并提供 OceanBase 中 RoaringBitmap 的应用示例。
RoaringBitmap 诞生背景简介
海量数据的判重和基数统计需求,难度是数据量大且性能要尽可能好。技术方案的关键就是数据结构及其算法,数据结构也决定了其算法能力空间。
基础的数据结构就是常用的数据类型,如数值、字符串、时间等。假设要业务数据数值化存储,使用整型存储(无符号),其表达的值域是 [0, 232-1],一共 4294967296 个数。如果记录不重复且记录数满配,单就这一列会占用存储空间16GB。这个判重方法有遍历、排序加二分查找、BloomFilter 等。
所以后来有些场景会用Bitmap(位图)存储这个数据,每个位(bit)对应一行记录的状态(0表示不存在,1表示存在)。如果记录不重复且记录数满配,这个位图结构最大存储空间是512MB。针对位图的判重效率就非常高。
Bitmap 结构下在海量数据(40亿+)的前提下,即使有大量数据重复也不会增加存储空间和降低判重效率。位图支持与运算(求交集)、或运算(求并集)。但是如果记录数不多且重复值很高的情况下(学术界称之为稀疏矩阵),Bitmap 存储就有点浪费内存空间(固定 512MB)。于是学术界有提出稀疏位图(或叫压缩位图)概念,Roaring Bitmap 就是稀疏位图的实现方案中目前认为最好的方案,并且已经被多个数据库产品支持。比如说 PostgreSQL 、AnalyticDB、PolarDB、Doris、ClickHouse、OceanBase (列举的不一定全) 。
Roaring Bitmap 原理简介
32 位地址空间容量下的数据值如果全用 Bitmap 存储,碰到稀疏矩阵数据,为 0 的位会很多,很浪费存储空间。RoaringBitmap 对这个 32 位使用做了一些改进,分为高 16 位和低 16 位。高 16 位做为记录的索引 KEY,低 16 位作为记录的值 VALUE。所以高 16 位有多少不同的记录,就有多少个KEY,最多记录数 216个。有的文章也把每个记录称之位一个 HASH Bucket(桶),每个 Bucket 的大小就是低 16 位存储的记录数。
低 16 位的数据结构分为三类。如果记录数少于 4096 个,就使用 16 位的 Short Int 稀疏数组。名为数组,实际上是链表结构,以节省空间。如果记录数超过 4096 个,就开始使用 16 位的 Bitmap 存储。如果碰到连续的数据,则使用 Run Length Coding(简称 RLE)存储一个开始和结束的整型值。
Roaring Bitmap (后简称 rb
)也支持两个 rb
集合求并集、交集、差集、计算基数、排序等。这些操作是 SQL 运算逻辑的基础。
OceanBase RoaringBitmap 类型和函数
OB 4.3.2 开始支持数据类型 roaringbitmap
,以及相关函数。函数列表如下:
函数类型 | 函数名称 | 函数作用 |
---|---|---|
位图构造函数 | rb_build_empty | 构建一个空的位图数据。值为0x0100 。 |
rb_build_varbinary | Varbinary 为 OceanBase 私有格式,是由 version 信息、type 信息、data 等部分组成的二进制格式。 | |
rb_from_string | 通过特定格式的字符串来构建位图数据。字符串格式为需要构建的位图数据的每一个元素,并通过逗号隔开,如 1,2,3,4。 | |
位图基数计算函数 | rb_cardinality | 返回输入位图数据的基数。 |
rb_and_cardinality rb_or_cardinality rb_andnot_cardinality | 返回两个位图数据做与计算后,得到的新位图数据的基数。 | |
rb_and_null2empty_cardinality rb_or_null2empty_cardinality rb_andnot_null2empty_cardinality | 返回两个位图数据做与计算后,得到的新位图数据的基数。 | |
rb_xor_cardinality | 返回两个位图数据做与计算后,得到的新位图数据的基数。 | |
位图运算函数 | rb_and rb_and_null2empty | 计算两个位图数据的交集。 |
rb_or rb_or_null2empty | 计算两个位图数据的并集。 | |
rb_xor | 提供两个位图数据的异或运算。 | |
rb_andnot rb_andnot_null2empty | 提供两个位图数据的与非运算。 | |
位图判断函数 | rb_is_empty | 判断输入的位图数据是否为空。 |
位图输出函数 | rb_to_varbinary | 用于以 varbinary 的形式输出位图数据。 |
rb_to_string | 以字符串的形式依次输出位图数据的每一个元素,并以逗号隔开。其中元素的输出格式为 UINT64,输出的最大元素个数为 1000000。 | |
位图聚合函数 | rb_build_agg | 将数值列聚合为位图数据。 |
rb_or_agg | 将位图列的多行数据进行或运算,并聚合为位图数据。 | |
rb_and_agg | 将位图列的多行数据进行与运算,并聚合为位图数据。 |
OB Roaring Bitmap 示例
下面以用户行为分析在 OB 的例子来演示这一功能。
首先构造基础数据 用户标签表。
-- 用户属性表:共有100万个用户,每个用户有64个属性 --
create table t_user_tag (
uid int8,
tag int,
mod_time timestamp,
primary key (tag,uid)
); DELIMITER //CREATE PROCEDURE insert_user_tag(IN min_uid BIGINT, IN max_uid BIGINT)
BEGINDECLARE uid BIGINT UNSIGNED;SET uid = min_uid;WHILE uid <= max_uid DO-- Loop to generate 64 random tags for each userINSERT IGNORE INTO t_user_tagSELECT uid, mod( rand(unix_timestamp())*1000000,1999), current_timestamp() from table(generator(64)); SET uid = uid + 1; -- Move to the next UIDEND WHILE;
END //DELIMITER ;call insert_user_tag(1,250000);
call insert_user_tag(250001,500000);
call insert_user_tag(500001,750000);
call insert_user_tag(750001,1000000);
然后生成标签和用户对应索引表,使用 roaringbitmap
类型。
create table t_tag_userbit ( tag int primary key, userbit roaringbitmap,mod_time timestamp
); insert /*+ enable_parallel_dml parallel(3) */ into t_tag_userbit
select tag,rb_build_agg(uid),current_timestamp() from t_user_tag group by tag order by tag;
抽查几笔数据看看 roaringbitmap
类型的数据特征。
select * from t_tag_userbit where tag in (1,11,111,1111);
这里看到的是 dbeaver 工具格式化后的结果,实际 rb
列是二进制数据。
如果是在命令行 mysql
或obclient
下,默认这个数据展示可能是乱码,可以在命令行下加一个参数 --binary-as-hex
,使用十六进制展示 binary 类型数据。
obclient -h127.1 -P2881 -uroot@obmysql -p test --binary-as-hex
下面是一些 roaringbitmap
类型相关的函数演示。
比如格式化显示和查看基数。
select tag, rb_to_string(userbit),rb_cardinality(userbit), mod_time
from t_tag_userbit where tag in (1382, 1406,10257);
计算同时满足两个tag
标签场景的的用户数。
select rb_cardinality(rb_and_agg(userbit)) from t_tag_userbit where tag in (1990,1998) ;
更新标签用户索引表。
update t_tag_userbit set userbit = rb_or(userbit, rb_from_string('61,71,73,74,85')) where tag = 1998;
看一下 SQL 执行计划。
obclient [test]> explain select rb_cardinality(rb_and_agg(userbit)) from t_tag_userbit where tag in (1002,1990,1998) ;
+-----------------------------------------------------------------------------------------------------+
| Query Plan |
+-----------------------------------------------------------------------------------------------------+
| ======================================================== |
| |ID|OPERATOR |NAME |EST.ROWS|EST.TIME(us)| |
| -------------------------------------------------------- |
| |0 |SCALAR GROUP BY| |1 |14 | |
| |1 |└─TABLE GET |t_tag_userbit|3 |14 | |
| ======================================================== |
| Outputs & filters: |
| ------------------------------------- |
| 0 - output([rb_cardinality(T_FUN_SYS_RB_AND_AGG(t_tag_userbit.userbit))]), filter(nil), rowset=16 |
| group(nil), agg_func([T_FUN_SYS_RB_AND_AGG(t_tag_userbit.userbit)]) |
| 1 - output([t_tag_userbit.userbit]), filter(nil), rowset=16 |
| access([t_tag_userbit.userbit]), partitions(p0) |
| is_index_back=false, is_global_index=false, |
| range_key([t_tag_userbit.tag]), range[1002 ; 1002], [1990 ; 1990], [1998 ; 1998], |
| range_cond([t_tag_userbit.tag IN (1002, 1990, 1998)]) |
+-----------------------------------------------------------------------------------------------------+
15 rows in set (0.041 sec)
从执行计划看 SQL 引擎有跟 RB 有关的算子 :T_FUN_SYS_RB_AND_AGG
。
更多阅读
OB 有了 roaringbitmap
类型,就也可以像 ClickHouse 一样可以用于类似海量数据用户标签画像等业务场景。
OceanBase V4.3 现已支持 365天 免费试用,点击立即开启 >>
相关文章:
OceanBase 4.3.3 AP 解析:应用 RoaringBitmaps 类型处理海量数据的判重和基数统计
对于大数据开发人员而言,处理海量数据的判重操作和基数统计是常见需求,而 RoaringBitmap类型及其相关函数是当前非常高效的一种解决方案,许多大数据库产品已支持RoaringBitmap类型。OceanBase 4.3.3版本,作为专为OLAP场景设计的正…...
点亮STM32最小系统板LED灯
对于如何点亮板载LED灯只需要掌握如何初始化GPIO引脚,并改变GPIO引脚的电平即可实现点亮或者熄灭LED。 Led_INFO led_info {0}; led_info 是一个结构体变量,类型为 Led_INFO,用于存储LED的状态信息。这里初始化为 {0},表示所有成…...
分区表的应用场景与优化实践
当表的数据量非常大,达到几千万甚至上亿行时,全表扫描会很慢,这时候分区可以帮助缩小扫描范围。比如,在一个电商系统中,订单表可能按月份分区,这样查询某个月的订单时,只需要扫描对应的分区,而不是整个表。或者在日志系统中,按天分区,方便归档和删除旧日志。 另外,如…...
如何高效参与 GitHub 知名项目开发并成为核心贡献者
参与知名 GitHub 项目开发不仅能提升你的编程能力,还能积累开源贡献经验,甚至为求职加分。以下是详细步骤: 1. 选择合适的 GitHub 项目 (1) 确定兴趣方向 后端开发:Spring、Spring Boot、Netty前端开发:React、Vue、…...
AIGC 新势力:探秘海螺 AI 与蓝耘 MaaS 平台的协同创新之旅
探秘海螺AI:多模态架构下的认知智能新引擎 在人工智能持续进阶的进程中,海螺AI作为一款前沿的多功能AI工具,正凭借其独特的多模态架构崭露头角。它由上海稀宇科技有限公司(MiniMax)精心打造,依托自研的万亿…...
银河麒麟桌面版包管理器(三)
以下内容摘自《银河麒麟操作系统进阶应用》一书 麒麟系统软件源配置 使用官方内置源时,无须任何操作。仅在使用其他镜像源(Mirror)时,需要修改/etc/apt/sources.list文件,根据不同版本,将原始sources.lis…...
在 .NET 9.0 Web API 中实现 Scalar 接口文档及JWT集成
示例代码:https://download.csdn.net/download/hefeng_aspnet/90408075 介绍 随着 .NET 9 的发布,微软宣布他们将不再为任何 .NET API 项目提供默认的 Swagger gen UI。以前,当我们创建 .NET API 项目时,微软会自动添加 Swagger…...
XSS跨站脚本攻击漏洞(Cross Site Scripting)
前提概要 本文章主要用于分享XSS跨站脚本攻击漏洞基础学习,以下是对XSS跨站脚本攻击漏洞的一些个人解析,请大家结合参考其他文章中的相关信息进行归纳和补充。 XSS跨站脚本攻击漏洞描述 跨站脚本攻击(XSS)漏洞是一种常见且危害较…...
Android:蓝牙设置配套设备配对
一、概述 在搭载 Android 8.0(API 级别 26)及更高版本的设备上,配套设备配对会代表您的应用对附近的设备执行蓝牙或 Wi-Fi 扫描,而不需要 ACCESS_FINE_LOCATION 权限。这有助于最大限度地保护用户隐私。使用此方法执行配套设备&am…...
MFC中CString类型是如何怎么转std::string的
文章目录 一、转换方法总结二、详细步骤1. Unicode 项目(CStringW → std::string)2. 多字节项目(CStringA → std::string) 三、注意事项四、总结更多信息(知识点存在重复,可跳过)方法 1:项目使用 Unicode…...
使用vscode搭建pywebview集成vue项目示例
文章目录 前言环境准备项目源码下载一、项目说明1 目录结构2 前端项目3 后端项目获取python安装包(选择对应版本及系统) 三、调试与生成可执行文件1 本地调试2 打包应用 四、核心代码说明1、package.json2、vite.config.ts设置3、main.py后端入口文件说明 参考文档 前言 本节我…...
JAVASCRIPT 基础 DOM元素,MAP方法,获取输入值
从输入框获取数据的一般写法是: javascript const w parseFloat(document.getElementById("weight").value); const h parseFloat(document.getElementById("height").value); 而从弹窗获取数据一般写法是: javascript const w …...
VLAN间通信
目录 第一步:配vlan 第二步:配置核心vlanif,MAC地址信息。 第三步:ospf协议 三层交换机(汇聚层): 对于交换机、路由器、防火墙等网络设备而言,接口类型一般存在两种:二层接口,三…...
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)星辰知多少
第二个问题说到“北辰”。我们中国文化发达得最早的是天文。过去我们把天体分成二十八宿和三垣——紫微、少微、太微,类似于我们现在讲天文的经纬度。经纬度是西方的划分法。曾经有位天文学家主张,我们自己重新划过,不照西方的度数划…...
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 分割成一些 子串ÿ…...
【Spring】深入理解 Spring 事务管理
文章目录 一、事务的基本概念原子性(Atomicity)一致性(Consistency)隔离性(Isolation)持久性(Durability) 二、Spring 事务管理的优势简化事务管理代码提供多种事务管理方式整合…...
java学习笔记6
按住shift键,选择开始的一位和最后结束的一位来全选 面向对象特征之二:继承性(inheritance) 面向对象特征之二:继承性1.继承性的理解 > 生活上:财产的继承、颜值的继承 > 代码层面:> 自上而下:定义了一个类A,在定义另一个类B时&…...
人工智能在现代科技中的应用和未来发展趋势
人工智能(Artificial Intelligence,AI)是一种模拟人类智能思维和行为的技术,已经在现代科技中得到广泛应用。以下是人工智能在现代科技中的应用和未来发展趋势: 应用: 机器学习:机器学习是人工…...