【Apache Doris】如何实现高并发点查?(原理+实践全析)
【Apache Doris】如何实现高并发点查?(原理+实践全析)
- 一、背景说明
- 二、原理介绍
- 三、环境信息
- 四、Jmeter初始化
- 五、参数预调
- 六、用例准备
- 七、高并发实测
- 八、影响因素
- 九、总结
本文主要分享 Apache Doris 是如何实现高并发点查的,以及如何实测单节点上万QPS。
一、背景说明
Apache Doris 是一款基于 MPP 架构的高性能、实时的分析型数据库。它可以在多个节点上并行处理查询,显著提高查询效率,且默认以列存格式引擎构建。这种格式非常适合进行数据分析,因为它可以有效地压缩数据,并且在执行查询时只需要读取相关的列。但有些高并发服务场景中,用户需要频繁获取整行数据,如果表较宽时,列存的IO也随之被放大。
Apache Doris 中 FE 是 SQL 查询的访问层服务,使用 Java 编写,分析和解析 SQL 也会导致高并发查询的高 CPU 开销,且其查询引擎和计划对于某些简单的查询(例如点查询)而言太重了。
那么,Apache Doris 是如何实现高并发查询以及如何实现高并发点查的呢?
二、原理介绍
Apache Doris 能够实现高并发查询的能力主要是通过以下几个方面:
- MPP架构
基于大规模并行处理(Massively Parallel Processing, MPP)架构设计,它可以将查询分解为多个任务,在多个节点上并行执行这些任务,使得系统可以通过增加更多的计算资源来线性扩展其查询处理能力。
- 列式存储
使用列式存储格式,这意味着对于任何给定的查询,它只需要读取涉及到的列,而不是整行数据。这减少了磁盘I/O压力,因为只有必需的数据被加载到内存中。
- 数据分片
分区和分桶裁剪在 Apache Doris 中也是实现高并发查询的重要机制。这两种技术可以帮助更有效地组织数据,提高查询效率,尤其是在面对大规模数据集时。
- 向量化查询执行
Apache Doris 实现了向量化查询处理,这意味着在执行操作时,它可以一次处理数据列的一整块,而不是逐行处理。这样可以大大提高CPU的利用率,降低每个数据点的处理开销。
- 索引和物化视图
Apache Doris 支持创建索引和物化视图来加速查询,减少扫描行数和避免了大量的现场计算,例如倒排、ZoneMap、Bloom Filter和Bitmap 等索引和预计算物化。
- 统计信息和成本基准优化
Apache Doris 会收集表和列的统计信息,并使用这些信息来优化查询计划,选择最佳的执行路径。
… 此处省略上万字
基于【背景说明】和上述内容,Apache Doris 可实现单节点上千 QPS 的并发支持。但在一些超高并发要求(例如上万 QPS)的 Data Serving 场景中,仍然存在瓶颈。
因此,Apache Doris 引入了如下几个2.0新特性 从降低 SQL 内存 IO 开销、提升点查执行效率以及降低 SQL 解析开销这三个设计点出发,进行一系列优化:
- 行式存储格式(Row Store Format)
Apache Doris 支持用户在建表时,通过 store_row_column 表属性另存一份行数据(列存+行存)。在单次检索整行数据时效率更高,减少磁盘访问次数 。
- 行存缓存(Row Cache)
Apache Doris 有针对列数据的Page Cache。但如果一行包括多列数据,这类缓存可能会被大查询给刷掉,为了增加缓存命中率、提升点查询的性能,Apache Doris 引入了行存缓存(Row Cache)。
- 点查询短路径优化(Short-Circuit)
通常而言,一个查询会在 FE 端进行SQL语句解析、生成执行计划后下发到 BE 进行计算获取结果。但对于高并发点查场景,则不适合这个长流程。
因此,Apache Doris 实现了点查询的短路径优化。当FE接收到此类查询时,会在规划器中生成轻量级的 Short-Circuit Plan,避免生成复杂的 Fragment Plan 并消除了在 MPP 查询框架下执行调度的性能开销。
- 预处理语句优化(Prepared Statement)
高并发查询中的 CPU 开销可以部分归因于 FE 层分析和解析 SQL 的 CPU 计算,为了解决这个问题,Apache Doris 在 FE 端提供了与 MySQL 协议完全兼容的预处理语句(Prepared Statement)。
通过在 Session 内存 HashMap 中缓存预先计算好的 SQL 和表达式,在后续查询时直接复用缓存对象,避免这些结构在序列化和反序列化时造成CPU热点。
基于以上一系列优化,帮助 Apache Doris 在 Data Serving 场景的性能得到进一步提升。下面就来实测一把吧。
三、环境信息
- 硬件信息
- 内存:32G
- CPU:16C
- CPU架构:X86_64
- 硬盘:SSD单盘
- 节点数:1
- 软件信息
- Doris版本:2.0.3
- Manager版本:23.10.3
- Jmeter版本:5.6
- JDK版本:1.8
- Mysql Driver版本:8.0
- 系统:CentOS
四、Jmeter初始化
本文基于Jmeter进行高并发实测。
- 安装部署
非GUI使用模式。
# 官方下载包
wget https://dlcdn.apache.org/jmeter/binaries/apache-jmeter-5.6.tgz # 解压包 tar -zvf apache-jmeter-5.6.tgz
# 解压后目录结构和本地UI模式一
上传mysql-connector包到lib目录下。
- 参数说明
命令模版和参数说明,详情可阅:
https://jmeter.apache.org/usermanual/get-started.html#non_gui
jmeter -n -t <脚本文件名>.jmx -l <本不存在的结果文件名>.jtl -e -o <存放html报告的空目录> -h 帮助
-n 非GUI模式
-t 测试脚本.jmx的路径和文件名称
-l 测试结果存放的路径和文件名称 (要确保之前没有运行过,即xxx.jtl不存在,不然报错),会自动创建
-r 启动jmeter.properties文件中指定的所有远程服务器
-e 在脚本运行结束后生成html报告
-o 用于存放html报告的目录(目录要为空,不然报错),会自动创建
五、参数预调
- fe.conf
-- 每个 FE 的最大连接数,默认值:1024
qe_max_connection=10240
- be.conf
为了增加行缓存命中率,Doris单独引入了行存缓存;行缓存复用了 Doris 中的 LRU Cache 机制来保障内存的使用。
-- 是否开启行缓存, 默认不开启
disable_storage_row_cache=false
-- 指定 Row cache 占用内存的百分比, 默认 20% 内存
row_cache_mem_limit=40%
- 表属性
建表时调整即可。
-- 必须为Unique Key表
-- 开启行存
"store_row_column" = "true"
-- 开启mow模式
"enable_unique_key_merge_on_write" = "true"
-- 开启light
schema change: "light_schema_change" = "true"
- 会话参数
-- 查看新优化器是否开启
show variables like '%enable_nereids_planner%'; -- 非必选,jdbc链接配置 useServerPrepStmts=true时,会自动走短路径优化、即不走旧优化器
-- 如:jdbc:mysql://127.0.0.1:9030/ycsb?useServerPrepStmts=true
set global experimental_enable_nereids_planner=false;
- 用户参数
-- 查看用户连接数
SHOW PROPERTY FOR 'root' LIKE '%max_user_connections%';
-- 设置连接数
SET PROPERTY FOR 'root' 'max_user_connections' = '10000';
六、用例准备
- 测试表创建
基于Star Schema Benchmark的part零件信息表调整创建,共9个字段、2个联合Key。
CREATE TABLE `row_part` (
`p_partkey` int(11) NULL,
`p_name` varchar(69) NULL,
`p_mfgr` varchar(21) NULL,
`p_category` varchar(24) NULL,
`p_brand` varchar(30) NULL,
`p_color` varchar(36) NULL,
`p_type` varchar(78) NULL,
`p_size` int(11) NULL,
`p_container` varchar(33) NULL
) ENGINE=OLAP
Unique KEY(`p_partkey`, `p_name`)
COMMENT 'OLAP'
DISTRIBUTED BY HASH(`p_partkey`, `p_name`) BUCKETS 10
PROPERTIES (
"replication_allocation" = "tag.location.default: 1",
"light_schema_change" = "true",
"store_row_column" = "true" ,
"enable_unique_key_merge_on_write" = "true"
);
- 测试表数据生成
测试表最终为3200万数据。
-- 源表为明细模型,目标表为开启了行存、mow和light_schema_change的unique模式表
-- 通过对字段+数字等方式去重快速造数
insert into row_part -- 目标测试表
select
`p_partkey`+1,
concat(`p_name`, '1'),
`p_mfgr` ,
`p_category`,
`p_brand`,
`p_color`,
`p_type`L,
`p_size`,
`p_container`
from part; -- 源表
- 测试SQL
测试SQL如下。
select * from ssb_test.row_part
where p_partkey = ? and p_name = ?
确认是否符合高并发点查条件,即该SQL是否走短路径(当前版本需要where带上所有key才可触发)。
-- 本地client查验需要先关闭新优化器
set experimental_enable_nereids_planner=false;-- ScanNode中是否有SHORT-CIRCUIT标识
explain
select * from ssb_test.row_part
where p_partkey = 5 and p_name = 'blush chiffon';
如下图所示,ScanNode中有SHORT-CIRCUIT标识,符合高并发点查条件。
- prepare参数生成
获取prepare的csv参数数据。
--
select
p_partkey,
p_name
from ssb_test.row_part
limit 3000;
导出查询结果集(通过dbeaver自身的功能导出csv数据作为prepare参数)。
导出后会在相应目录生成对应文件(需要手动去除第一行的字段名)。
上传至jmeter的home目录下。
- JMX脚本准备
可以在本地jmeter客户端配置后保存生成.jmx再上传至jmeter的home目录下。
① JDBC连接管理器
jdbc:mysql:loadbalance://fe_ip:9030/db?characterEncoding=utf8&useSSL=false&useServerPrepStmts=true;cachePrepStmts=true&prepStmtCacheSqlLimit=1024
直接影响效率的参数:
- useServerPrepStmts = true
- cachePrepStmts = true
② 线程组
主要用于控制压测的循环测试、线程数和压测时间等;本文默认设置的是100线程数压60秒。
③ CSV数据文件设置
需要注意文件名、即对应 [prepare参数生成] 的csv文件存放路径, 以及csv列对应的字段名称和分隔符的填写。
④ SQL测试脚本
选择Prepare模式随机传参,其中[Parameter values]和[Parameter types]需要和SQL中的[?]缺省值完全对齐。
七、高并发实测
Jmeter执行脚本(简易模式)。
./bin/jmeter -n -t row_part.jmx
最终随机压测结果的平均QPS为6W+/S。
压测过程中,BE的CPU大致使用50%(其中包括Jmeter进程的),内存使用率较低。
八、影响因素
- 常规配置
- 未按【参数预调】进行调整
- 未按【JMX脚本准备】进行合理设置
- 数据分区分桶太大(并行度过高)或太小(并发过小)都会影响效率
- jdbc参数
仅去除 jdbc url 中的useServerPrepStmts=true; 参数时降为3W+/S。
仅去除 jdbc url 中的cachePrepStmts=true; 参数时降为2W/S。
- 线程数
不宜过高,例如> 1W线程数时,降为2W+/S。
不宜过少,例如5个线程数时,降为1W+/S。
具体线程数设置需要根据【环境信息】进行对比调整。
- fe个数
合理范围内,1个fe可提高一定的并发量。如果多加fe、QPS都没有增长,需要定位是否存在其它影响因素。
- prepare参数分布
【prepare参数生成】过于集中、可能导致集中查某几台be影响效率,需要足够分散。
- 资源瓶颈
如果上述原因都符合预期,且CPU还相对空闲的情况下,QPS依旧无法提升,需要排查网络或IO等资源是否遇到了瓶颈。
- 其它
欢迎各位看官补充。
九、总结
Apache Doris 基于MPP架构、列存、分区分桶、向量化引擎、索引视图和基准优化等方面实现了高性能并发查询。在此基础上引入了行存、短查询路径和Prepared Statement特性实现了高并发点查询,效果俱佳。如果有相关场景的同学,欢迎实测交流。
至此,【Apache Doris】如何实现高并发点查 分享结束,查阅过程中若遇到问题欢迎留言交流。
相关文章:
![](https://img-blog.csdnimg.cn/img_convert/7212c81c5e466177c0e06cc999085da9.png)
【Apache Doris】如何实现高并发点查?(原理+实践全析)
【Apache Doris】如何实现高并发点查?(原理实践全析) 一、背景说明二、原理介绍三、环境信息四、Jmeter初始化五、参数预调六、用例准备七、高并发实测八、影响因素九、总结 本文主要分享 Apache Doris 是如何实现高并发点查的,以…...
![](https://www.ngui.cc/images/no-images.jpg)
解决SpringMVC使用MyBatis-Plus自定义MyBaits拦截器不生效的问题
自定义MyBatis拦截器 如果是SpringBoot项目引入Component注解就生效了,但是SpringMVC不行 import lombok.extern.slf4j.Slf4j; import org.apache.ibatis.executor.parameter.ParameterHandler; import org.apache.ibatis.executor.statement.StatementHandler; i…...
![](https://img-blog.csdnimg.cn/img_convert/04cca3ad62040bf203fdd0b752151d4d.png)
Swagger与RESTful API
1. Swagger简介 在现代软件开发中,RESTful API已成为应用程序间通信的一个标准。这种架构风格通过使用标准的HTTP方法来执行网络上的操作,简化了不同系统之间的交互。API(应用程序编程接口)允许不同的软件系统以一种预定义的方式…...
![](https://img-blog.csdnimg.cn/direct/4b97006f2f034a8c97b23d064699d752.png)
MySQL84 -- ERROR 1524 (HY000): Plugin ‘msql_native_password‘ is not loaded.
【问题描述】 MySQL 8.4版本,配置用户使用mysql_native_password认证插件验证用户身份,报错: 【解决方法】(Windows, MySQL 8.4) 1、修改MySQL配置文件my.ini,在[mysqld]段添加mysql_native_passwordON。 2、管理员…...
![](https://img-blog.csdnimg.cn/20210916225739194.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzU3MTU4NDk2,size_16,color_FFFFFF,t_70)
将Excel中的错误值#N/A替换成心仪的字符串,瞬间爱了……
常用表格的人都晓得,看到满屏悦动的#N/A,心情都会不好。把它替换成自己心仪的字符,瞬间就爱了。 (笔记模板由python脚本于2024年06月13日 19:32:37创建,本篇笔记适合常用Excel,喜欢数据的coder翻阅) 【学习的细节是欢悦…...
![](https://img-blog.csdnimg.cn/img_convert/49297956b0df21798d5a7bd95e802814.webp?x-oss-process=image/format,png)
AI大模型日报#0628:谷歌开源9B 27B版Gemma2、AI首次实时生成视频、讯飞星火4.0发布
导读:AI大模型日报,爬虫LLM自动生成,一文览尽每日AI大模型要点资讯!目前采用“文心一言”(ERNIE-4.0-8K-latest)生成了今日要点以及每条资讯的摘要。欢迎阅读!《AI大模型日报》今日要点…...
![](https://www.ngui.cc/images/no-images.jpg)
【随笔】提高代码学习水平(以更高的视角看事物)
最近,我感觉到自己的代码水平似乎卡在了一个瓶颈。似乎只想着数仓,Hive,Spark技术优化,但只要稍微离开这几个点,我就感到无所适从。我开始反思,或许,我应该总结一下自己的学习方法。 1.站的高&…...
游戏AI的创造思路-技术基础-深度学习(5)
继续深度学习技术的探讨,填坑不断,头秃不断~~~~~ 目录 3.5. 自编码器(AE) 3.5.1. 定义 3.5.2. 形成过程 3.5.3. 运行原理 3.5.3.1.运行原理及基本框架 3.5.3.2. 示例代码 3.5.4. 优缺点 3.5.5. 存在的问题和解决方法 3.5…...
![](https://img-blog.csdnimg.cn/direct/cd105cd5861b45d485e964e314b4d6bc.png)
基于SpringBoot养老院管理系统设计和实现(源码+LW+调试文档+讲解等)
💗博主介绍:✌全网粉丝10W,CSDN作者、博客专家、全栈领域优质创作者,博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌💗 🌟文末获取源码数据库🌟感兴趣的可以先收藏起来,还…...
![](https://img-blog.csdnimg.cn/direct/5ffdfb14380049789cb0050a37dd344b.png)
餐饮点餐的简单MySQL集合
ER图 模型图(没有进行排序,混乱) DDL和DML /* Navicat MySQL Data TransferSource Server : Mylink Source Server Version : 50726 Source Host : localhost:3306 Source Database : schooldbTarget Server Type …...
![](https://img-blog.csdnimg.cn/direct/316d434f38774f159a3e9b81616f71c4.png)
STM32驱动-ads1112
汇总一系列AD/DA的驱动程序 ads1112.c #include "ads1112.h" #include "common.h"void AD5726_Init(void) {GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOC, ENABLE );//PORTA、D时钟使能 G…...
![](https://www.ngui.cc/images/no-images.jpg)
数据结构与算法高频面试题
初级面试题及详细解答 当涉及到数据结构与算法的初级面试题时,通常涉及基本的数据结构操作、算法复杂度分析和基本算法的应用。 1. 什么是数组?数组和链表有什么区别? 解答: 数组:是一种线性数据结构,用…...
![](https://img-blog.csdnimg.cn/direct/ba9a90026153476ca777b9ab48653ec8.png)
uni-app的showModal提示框,进行删除的二次确认,可自定义确定或取消操作
实现效果: 此处为删除的二次确认示例,点击删除按钮时出现该提示,该提示写在js script中。 实现方式: 通过uni.showModal进行提示,success为确认状态下的操作自定义,此处调用后端接口进行了删除操作&#…...
![](https://img-blog.csdnimg.cn/img_convert/b8029be48d3db26cb185f7db49a81608.png)
5款提高工作效率的免费工具推荐
SimpleTex SimpleTex是一款用于创建和编辑LaTeX公式的简单工具。它能够识别图片中的复杂公式并将其转换为可编辑的数据格式。该软件提供了一个直观的界面,用户可以在编辑LaTeX代码的同时实时预览公式的效果,无需额外的编译步骤。此外,SimpleT…...
![](https://www.ngui.cc/images/no-images.jpg)
区块链的技术架构:节点、网络和数据结构
区块链技术听起来很高大上,但其实它的核心架构并不难理解。今天我们就用一些简单的例子和有趣的比喻,来聊聊区块链的技术架构:节点、网络和数据结构。 节点:区块链的“细胞” 想象一下,区块链就像是一个大型的组织&a…...
![](https://www.ngui.cc/images/no-images.jpg)
pdfmake不能设置表格边框颜色?
找到pdfmake>build>pdfmake.js中: 找到定义的“TableProcessor.prototype.drawVerticalLine”和“TableProcessor.prototype.drawHorizontalLine”两个方法: 重新定义borderColor: var borderColor this.tableNode.table.borderColor||"#…...
![](https://www.ngui.cc/images/no-images.jpg)
laravel 使用RabbitMQ作为消息中间件
先搞定环境,安装amqp扩展 确保已安装rabbitmq-c-dev。 比如 可以使用apk add rabbmit-c-dev安装 cd ~ wget http://pecl.php.net/get/amqp-1.10.2.tgz tar -zxf amqp-1.10.2.tgz cd amqp-1.10.2 phpize ./configure make && make install cd ~ rm -rf am…...
![](https://img-blog.csdnimg.cn/direct/aab17b9679b24f74a2d29f7572f69522.png)
web项目打包成可以离线跑的exe软件
目录 引言打开PyCharm安装依赖创建 Web 应用运行应用程序打包成可执行文件结语注意事项 引言 在开发桌面应用程序时,我们经常需要将网页集成到应用程序中。Python 提供了多种方法来实现这一目标,其中 pywebview 是一个轻量级的库,它允许我们…...
![](https://img-blog.csdnimg.cn/direct/971edb767400417f962d026f60d1d582.jpeg)
BFS:队列+树的宽搜
一、二叉树的层序遍历 . - 力扣(LeetCode) 该题的层序遍历和以往不同的是需要一层一层去遍历,每一次while循环都要知道在队列中节点的个数,然后用一个for循环将该层节点走完了再走下一层 class Solution { public:vector<vec…...
![](https://img-blog.csdnimg.cn/direct/c7eb519efcb645909f7e54cf7be02f69.png)
MySQL高级-SQL优化- count 优化 - 尽量使用count(*)
文章目录 1、count 优化2、count的几种用法3、count(*)4、count(id)5、count(profession)6、count(null)7、 count(1) 1、count 优化 MyISAM引擎把一个表的总行数存在了磁盘上,因此执行count(*)的时候会直接返回这个数,效率很高&a…...
![](https://www.ngui.cc/images/no-images.jpg)
python Flask methods
在 Flask 中,app.route() 装饰器用于定义 URL 路由和与之关联的视图函数。当你想指定某个 URL 可以接受哪些 HTTP 方法时,你可以使用 methods 参数。methods 是一个列表,它可以包含任何有效的 HTTP 方法。 Falsk文章中的描述: 链…...
![](https://img-blog.csdnimg.cn/direct/9e9c7b830e4b4566bfbb957eb1746b9c.png)
three.js场景三元素
three.js是一个基于WebGL的轻量级、易于使用的3D库。它极大地简化了WebGL的复杂细节,降低了学习成本,同时提高了性能。 three.js的三大核心元素: 场景(Scene) 场景是一个三维空间,是所有物品的容器。可以将…...
![](https://www.ngui.cc/images/no-images.jpg)
Spring AOP(面向切面编程)详解
Spring AOP(面向切面编程)详解 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 什么是Spring AOP? Spring AOP(…...
![](https://img-blog.csdnimg.cn/direct/c2022fcf402a48369de36203b2395d88.png)
Kafka第一篇——内部组件概念架构启动服务器zookeeper选举以及底层原理
目录 引入 ——为什么分布式系统需要用第三方软件? JMS 对比 组件 架构推演——备份实现安全可靠 , Zookeeper controller的选举 controller和broker底层通信原理 BROKER内部组件 编辑 topic创建 引入 ——为什么分布式系统需要用第三方软件&#…...
![](https://www.ngui.cc/images/no-images.jpg)
14、顺时针打印矩阵
题目: 顺时针打印矩阵 描述: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字, 例如, 如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字:1,2,3,4,8,1…...
![](https://img-blog.csdnimg.cn/direct/6b52804e15ed49f6aa22fcb8e7ed99ca.png)
毅速丨金属3D打印是制造业转型升级的重要技术
随着科技的进步,金属3D打印技术已成为制造业升级的重要驱动力。它以其独特的优势,正引领着制造业迈向新的未来。 金属3D打印技术的突破: 设计自由。金属3D打印能制造任意形状和结构的零件,为设计师提供了无限的创意空间。 快速制…...
![](https://img-blog.csdnimg.cn/direct/bf0ff7691f9b44f498210d9055b1b3ae.png)
uni-app uni-data-picker级联选择器无法使用和清除选中的值
出现问题: 使用点击右边的叉号按钮无法清除已经选择的uni-data-picker值 解决办法: 在uni-app uni-data-picker使用中,要添加v-model,v-model在官网的示例中没有体现,但若不加则无法清除。 <uni-data-picker v-m…...
![](https://img-blog.csdnimg.cn/direct/e016214b1eb24f43b83f758f146e2227.png)
构造函数的小白理解
一、实例 using System; using System.Collections; using System.Collections.Generic; using UnityEngine;//定义一个名为Question的类,用于存储问题及相关信息 [Serializable] public class Question {public string questionText;//存储题目文本字段public str…...
![](https://img-blog.csdnimg.cn/img_convert/61e20917888fdb77a12d9deceb4d9096.png)
招聘,短信与您:招聘人员完整指南
招聘人员面临的最大挑战之一就是沟通和联系候选人。为何?我们可以从以下原因开始:候选人通常被太多的招聘人员包围,试图联系他们,这使得你很难吸引他们的注意。在招聘过程的不同阶段,根据不同的工作量,让申请人保持最…...
![](https://img-blog.csdnimg.cn/direct/0151a695e28f4b85b50669d5acdd98df.png)
JAVA-矩阵置零
给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 思路: 找到0的位置,把0出现的数组的其他值夜置为0 需要额外空间方法: 1、定义两个布尔数组标记二维数组中行和列…...
![](https://img-blog.csdnimg.cn/direct/8b2c16cd5f084d8a9a6eba3c68107ed8.png)
[信号与系统]模拟域中的一阶低通滤波器和二阶滤波器
前言 不是学电子出身的,这里很多东西是问了朋友… 模拟域中的一阶低通滤波器传递函数 模拟域中的一阶低通滤波器的传递函数可以表示为: H ( s ) 1 s ω c H(s) \frac{1}{s \omega_c} H(s)sωc1 这是因为一阶低通滤波器的设计目标是允许低频信…...
![](https://img-blog.csdnimg.cn/direct/ccc5df67988049e1be13887ac83f27e0.png)
Mac环境 aab包转apks,并安装apks
一、下载下载bundletool工具 Releases google/bundletool GitHub 二、将下载bundletool.jar包、aab、keystore文件全部放到同一个目录下 例如我全部放到download目录下 转换命令行: java -jar bundletool-all-1.16.0.jar build-apks --modeuniversal --bundle…...
![](https://img-blog.csdnimg.cn/direct/163525bcfc764b4c923644dda05e5c7d.png)
银河麒麟V10 SP1.1操作系统 离线安装 nginx1.21.5、redis 服务
银河麒麟官网地址:国产操作系统、麒麟操作系统——麒麟软件官方网站 一、查看系统版本 命令:nkvers 我的是 release V10 (SP1),根据这个版本去官网找对应的rpm包 银河麒麟操作系统的rpm包必须从官方找, 要是随便找个Centos的rp…...
![](https://www.ngui.cc/images/no-images.jpg)
ios swift5 视频播放 播放视频失败 无法播放HEVC (H.265) 格式的视频 H.264格式的可以播放
文章目录 1.问题2.原因:iOS swift AVPlayerViewController无法播放HEVC (H.265) 格式的视频3.解决方法用第三方框架MobileVLCKit来播放4.用MobileVLCKit写的播放器4.1 两个oc版本的4.2 两个swiftUI版本的5.苹果是支持HEVC (H.265) 格式的视频,是硬件那边…...
![](https://img-blog.csdnimg.cn/img_convert/1e473ef201dd27dfb15b89d81db7ab3d.jpeg)
网工内推 | 网络工程师,IE认证优先,最高18k*14薪,周末双休
01 上海吾索信息科技有限公司 🔷招聘岗位:网络工程师 🔷岗位职责: 1)具备网络系统运维服务经验以及数据库实施经验,具备网络系统认证相关资质或证书; 2)掌握常用各设备的运维巡检…...
![](https://img-blog.csdnimg.cn/direct/4fc3d934863e480985de70ca2f0649bb.png)
【Qt】QMessageBox 各种对话框的默认显示效果
1. 函数原型 void about(QWidget *parent, const QString &title, const QString &text)void aboutQt(QWidget *parent, const QString &title QString())QMessageBox::StandardButton critical(QWidget *parent, const QString &title, const QString &…...
![](https://img-blog.csdnimg.cn/direct/36c0aeaeaa1446e48c3adfa607be70be.png#pic_center)
一文弄懂线性回归模型
1、引言 今天,我们将深入探讨机器学习中的三个关键概念:线性回归、代价函数和梯度下降。这些概念构成了许多机器学习算法的基础。起初,我决定不写一篇关于这些主题的文章,因为它们已经被广泛涉及。不过,我改变了主意&…...
![](https://img-blog.csdnimg.cn/direct/de466be8dde94ce8b4b09fef2bb92d30.png)
uniApp获取实时定位
通过你获取的key放到项目manifest.json里面,对应填写你所需要的key值,还有高德用户名 用户名: key值的位置: 代码: html: <view class"intList pdNone"><view class"label">详细地…...
![](https://www.ngui.cc/images/no-images.jpg)
linux的source命令
用法 source file 也可以用.空格file来代替 . file 作用 在当前bash环境下读取并执行FileName中的命令. source(或点)令通常用于重新执行刚修改的初始化文档,如 .bash_profile 和 .profile等配置文件. 简单的说就是: source命令会把file里的命令在当前shell里一…...
![](https://www.ngui.cc/images/no-images.jpg)
特种作业操作证(焊接与热切割作业)2024年理论考试题库。
1.关于隐弧排烟罩下列说法正确的是()。 A.这类排烟罩适用于焊接大而长的焊件时排除电焊烟尘和有毒气体 B.这类排烟罩对焊接区实行密闭,能最大限度地减少臭氧等有毒气体的弥散 C.利用压缩空气从主管中高速喷出时,在副管形成负压…...
![](https://img-blog.csdnimg.cn/direct/e28aa01cc2824f8e8817a62f29a76d13.png)
免交互和嵌入执行模式
目录 概念 语法格式 统计行数 赋值变量 修改密码编辑往文件里添加内容 编辑编辑引入变量 整体赋值编辑 加引号不赋值变量 expect实现免交互 免交互设置密码 免交互切换用户 嵌入执行模式 添加用户并免交互设置密码 免交互登录 传参实现ssh 练习 概念 …...
![](https://i-blog.csdnimg.cn/direct/d4b4218775d44dd9abbb0f284106f0d7.png)
Hadoop版本演变、分布式集群搭建
Hadoop版本演变历史 Hadoop发行版非常的多,有华为发行版、Intel发行版、Cloudera Hadoop(CDH)、Hortonworks Hadoop(HDP),这些发行版都是基于Apache Hadoop衍生出来的。 目前Hadoop经历了三个大的版本。 hadoop1.x:HDFSMapReduce hadoop2.x…...
![](https://www.ngui.cc/images/no-images.jpg)
【Qt C++实现绘制仪表盘】
要在Qt C中绘制仪表盘,您可以使用QChart、QSeries、QBarSeries、QPointSeries等类。以下是一个简单的示例,演示如何使用这些类创建一个绘图仪表盘: #include <QApplication> #include <QChart> #include <QChartView> #in…...
![](https://www.ngui.cc/images/no-images.jpg)
一文看懂LLaMA 2:大型多模态模型的新里程碑
一文看懂LLaMA 2:大型多模态模型的新里程碑 LLaMA 2是OpenAI继GPT-3之后推出的又一重磅模型,它不仅在文本生成方面有所突破,而且在图像处理和语音识别等领域也展现出了令人印象深刻的能力。本文将全面介绍LLaMA 2的背景、技术细节、应用场景…...
![](https://www.ngui.cc/images/no-images.jpg)
基于Spring Boot构建淘客返利平台
基于Spring Boot构建淘客返利平台 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们将讨论如何基于Spring Boot构建一个淘客返利平台。 淘客返利平台通过…...
![](https://img-blog.csdnimg.cn/direct/94f31d0ecbdf404491a41357843ea49a.png)
Qt—贪吃蛇项目(由0到1实现贪吃蛇项目)
用Qt实现一个贪吃蛇项目 一、项目介绍二、游戏大厅界面实现2.1完成游戏大厅的背景图。2.2创建一个按钮,给它设置样式,并且可以跳转到别的页面 三、难度选择界面实现四、 游戏界面实现五、在文件中写入历史战绩5.1 从文件里提取分数5.2 把贪吃蛇的长度存入…...
![](https://www.ngui.cc/images/no-images.jpg)
Java导出Excel并邮件发送
一、导出Excel 添加maven依赖 <dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.10-FINAL</version></dependency><dependency><groupId>org.apache.poi</groupI…...
![](https://img-blog.csdnimg.cn/img_convert/1749a8c86d6e38798d8e1ed9f073b8a9.png)
【课程总结】Day12:YOLO的深入了解
前言 在【课程总结】Day11(下):YOLO的入门使用一节中,我们已经了解YOLO的使用方法,使用过程非常简单,训练时只需要三行代码:引入YOLO,构建模型,训练模型;预测…...
![](https://www.ngui.cc/images/no-images.jpg)
保护隐私,释放智能:使用LangChain和Presidio构建安全的AI问答系统
保护隐私,释放智能:使用LangChain和Presidio构建安全的AI问答系统 在人工智能(AI)飞速发展的今天,AI问答系统已经成为企业与客户互动的重要工具。然而,随之而来的个人数据隐私问题也日益凸显。如何在不泄露…...
![](https://www.ngui.cc/images/no-images.jpg)
【高考志愿】自动化
目录 一、专业概述 二、课程设计 三、就业前景与方向 四、志愿填报 五、自动化专业排名 一、专业概述 高考志愿自动化专业选择,无疑是迈向现代化工业与科技发展的一把金钥匙。自动化专业,作为现代工程领域的重要支柱,融合了计算机、电子…...
![](https://www.ngui.cc/images/no-images.jpg)
linux下docker安装与镜像容器管理
linux下docker安装与镜像容器管理 原文链接:linux下docker安装与镜像容器管理 导言 ubuntu22.04-docker engine安装,以及镜像容器管理 docker非常简单介绍 docker就是一个虚拟化容器,image是镜像,就是一个dockerfile指明这个镜…...
![](https://img-blog.csdnimg.cn/img_convert/ab27b20b6d88c917eaa712fcb68ee729.png)
flask的基本使用2
上一篇我们介绍了基本使用方法 flask使用 【 1 】基本使用 from flask import Flask# 1 实例化得到对象 app Flask(__name__)# 2 注册路由--》写视图函数 app.route(/) def index():# 3 返回给前端字符串return hello worldif __name__ __main__:# 运行app,默认…...
![](https://img-blog.csdnimg.cn/direct/d17cbb2ec1814ad9a92b6e8d9f73ef65.png)
机器学习算法(三):支持向量机(SVM)的sklearn调用
文章目录 前言一 理论1 sklearn中的核函数形式二、sklearn调用1 svm.SVC() 接口说明三 、具体示例1、简单的线性SVM例子 --- 不同C值的影响(1) 数据集(2) svm sklearn调用2、高斯核函数的SVM --- 非线性分类(1) 数据集(2) 高斯核函数的SVM3、sklearn调参技术--网格搜索…...
![](https://csdnimg.cn/release/blog_editor_html/release2.3.6/ckeditor/plugins/CsdnLink/icons/icon-default.png?t=N7T8)
如何从iPhone恢复错误删除的照片
嘿,iPhone 用户!作为一名苹果专业人士,我见过相当多的“哎呀,我删除了它!”的时刻。今天,我在这里指导您完成从iPhone中恢复那些珍贵的,错误删除的照片的迷宫。坐下来,拿起你的设备&…...
![](https://img-blog.csdnimg.cn/direct/ff2c203dcbbd432c9412d73e34db2b6d.png)
提升Android Studio开发体验:使用Kelp插件实现颜色和图标预览
提升Android Studio开发体验:使用Kelp插件实现颜色和图标预览 在Android开发中,自动补全功能对于提高开发效率至关重要。然而,默认的Android Studio并不能预览颜色和图标,这使得开发者在选择资源时常常感到困惑。本文将介绍如何使…...
![](https://img-blog.csdnimg.cn/direct/a5ca0a57472b4339aeaef351a5cf5941.png#pic_center)
【ACM_2023】3D Gaussian Splatting for Real-Time Radiance Field Rendering
【ACM_2023】3D Gaussian Splatting for Real-Time Radiance Field Rendering 一、前言Abstract1 INTRODUCTION2 RELATED WORK2.1 Traditional Scene Reconstruction and Rendering2.2 Neural Rendering and Radiance Fields2.3 Point-Based Rendering and Radiance Fields 3 O…...
![](https://www.ngui.cc/images/no-images.jpg)
540°全域透明底盘“爸”气从容跨越障碍
无论孩子多大,在学业或工作上遇到的障碍,父亲总会以更宽广的视野为我们拨开云雾。为给全家人带来开挂级的开阔视野,而奇瑞舒享家配备540全域透明底盘,透明底盘+360高清全景影像,让障碍无处遁形。且可实现高清2D/3D视图切换,全方位观察车辆周围及车底的情况,一目了然;还…...
![](https://www.ngui.cc/images/no-images.jpg)
从29W降至17W!成豪华车“价格屠夫”,190ps配四驱,月销仅401
国内汽车市场,说到豪车那么德系奔驰绝对榜上有名,作为一线豪华品牌,奔驰曾经不管是口碑还是销量都非常棒,为广大车迷上市了很多经典的标杆车型,可以毫不夸张的说,曾经只要开着一辆奔驰车回村,即便是最紧凑型的A级车,也能带来很高的回头率,地位瞬间就不一样了,可是随着…...
![](https://img-blog.csdnimg.cn/direct/30f0ad7f0e4e43c388fba07027cfc845.png)
【busybox记录】【shell指令】unlink
目录 内容来源: 【GUN】【unlink】指令介绍 【busybox】【unlink】指令介绍 【linux】【unlink】指令介绍 使用示例: 删除文件 - 默认 常用组合指令: 指令不常用/组合用法还需继续挖掘: 内容来源: GUN &#x…...
![](https://www.ngui.cc/images/no-images.jpg)
解决Selenium NameError: name ‘By’ is not defined
解决Selenium NameError: name ‘By’ is not defined 文章目录 解决Selenium NameError: name By is not defined背景错误原因解决方法1. 检查导入语句2. 修正拼写和大小写3. 验证Selenium库安装4. 重启IDE或终端5. 检查环境变量 验证总结 背景 在使用Selenium进行Web自动化测…...
![](https://www.ngui.cc/images/no-images.jpg)
前端基础入门三大核心之HTML篇 —— IndexedDB详解
前端基础入门三大核心之HTML篇 —— IndexedDB详解 什么是IndexedDB?为什么选择IndexedDB? 基本概念数据库(Database)对象仓库(Object Store)索引(Index)事务(Transactio…...
![](https://www.ngui.cc/images/no-images.jpg)
分布式和集群区别
分布式 分布式的主要工作是分解任务,将职能拆解,多个人在一起做不同的事 集群 集群主要是将同一个业务,部署在多个服务器上 ,多个人在一起做同样的事...