【KWDB 创作者计划】_本地化部署与使用KWDB 深度实践
引言
KWDB 是一款面向 AIoT 场景的分布式多模数据库,由开放原子开源基金会孵化及运营。它能在同一实例同时建立时序库和关系库,融合处理多模数据,具备强大的数据处理能力,可实现千万级设备接入、百万级数据秒级写入、亿级数据秒级读取。
此外,它还具有稳定安全、高可用、易运维的特点,为开发者提供通用连接接口,方便与第三方工具集成,降低开发学习难度;为运维管理人员提供安装部署、升级等便捷操作,降低运维成本。其典型应用场景广泛,涉及物联网、能源电力、交通车联网等多个行业,致力于为企业数智化建设提供数据支持 。
KWDB官网:浪潮 KaiwuDB 分布式多模数据库—多模一库,快人一步
本文将详细介绍 KWDB 在本地的部署和使用方法,帮助开发者快速上手。
目录
引言
一、部署前的准备
(一)硬件要求
(二)操作系统支持
(三)软件依赖
(四)端口要求
二、获取安装包
三、开始部署
(一)配置 deploy.cfg 文件
(二)赋予 deploy.sh 脚本权限
(三)执行单机部署安装命令
(四)启动 KWDB 节点
(五)查看 KWDB 节点状态
(六)配置 KWDB 开机自启动
四、KWDB 的使用
(一)使用 KaiwuDB 开发者中心连接 KWDB
(二)使用 KaiwuDB JDBC 连接 KWDB(适合 Java 开发者)
一、部署前的准备
(一)硬件要求
- CPU 和内存:建议不低于 4 核 8G。实际部署时,可根据业务规模和性能要求灵活规划硬件资源。例如,对于小型项目或测试环境,4 核 8G 的配置足以满足基本需求;但对于大型生产环境,若有大量数据处理任务,可能需要更高配置的 CPU 和更大容量的内存,如 8 核 16G 甚至更高。
- 磁盘:推荐使用 SSD 或者 NVMe 设备,这类存储设备读写速度快,能显著提升数据库性能。尽量避免使用 NFS、CIFS、CEPH 等共享存储,因为共享存储在数据传输和并发访问时可能会出现性能瓶颈。磁盘必须能够实现 500 IOPS 和 30 MB/s 处理效率。
- 文件系统:建议使用 ext4 文件系统,ext4 文件系统具有较好的稳定性和性能,对 KWDB 的支持较为友好。
(二)操作系统支持
KWDB 支持在多种服务器操作系统上进行安装部署,具体如下:
操作系统 | 版本 | 架构 |
CentOS | 7.x 及以上 | x86_64 |
Ubuntu | 18.04 及以上 | x86_64 |
Debian | 10 及以上 | x86_64 |
需注意,如使用上述未提及的操作系统,可能会存在兼容性问题,若遇到问题可及时与 KWDB 官方团队联系解决
(三)软件依赖
安装时,KWDB 会自动对依赖进行检查。若缺少依赖,安装将退出并提示缺失信息。若目标机器不能联网,需在能联网的机器上根据目标机器的操作系统下载好所有依赖文件,再复制到目标机器上进行安装
不同操作系统及安装包的依赖略有不同,以下是常见依赖及说明:
依赖 | 版本 | 说明 |
GEOS | v3.3.8+ | 可选依赖,若涉及地理空间数据处理等相关功能时可能需要 |
xz-libs | v5.2.0+ | 必要依赖 |
squashfs-tools | any | 必要依赖 |
squashfuse | any | 可选依赖,用于特定的文件系统相关功能 |
(四)端口要求
在安装部署前,需确保目标机器的以下端口未被占用且未被防火墙拦截
在安装部署时,也可修改 deploy.cfg 文件中的端口配置参数
端口号 | 说明 |
8080 | 数据库 Web 服务端口,用于通过 Web 界面访问和管理数据库相关操作 |
26257 | 数据库服务端口、节点监听端口和对外连接端口,数据库服务进程监听此端口进行数据交互 |
二、获取安装包
访问 KWDB 的 Gitee 仓库(https://gitee.com/kwdb/kwdb/releases/tag/V2.2.0),根据系统环境下载对应的 DEB 或 RPM 安装包。
例如,如果你的操作系统是基于 Debian 或 Ubuntu 的,应选择 DEB 安装包;若是基于 CentOS 等 Red Hat 系的操作系统,则选择 RPM 安装包。将下载好的安装包复制到待安装 KWDB 的目标机器上,然后解压缩安装包。
解压命令为:
tar -zxvf <package_name>
我这里使用的是 CentOS 7.9,所以解压命令是这样的
tar -zxvf KWDB-2.2.0-kylinV10_2403-aarch64-rpms.tar.gz
解压后生成的目录包含以下重要文件:
- add_user.sh:安装、启动 KWDB 后,用于为 KWDB 数据库创建用户。
- deploy.cfg:安装部署配置文件,可在此配置部署节点的 IP 地址、端口等关键信息。
- deploy.sh:安装部署脚本,具备安装、卸载、启动、状态获取、关停和重启等多种操作功能。
- packages 目录:存放 DEB、RPM 和镜像包。
- utils 目录:存放工具类脚本,方便执行一些辅助操作。
- monitoring 目录:存放 Prometheus 配置文件、Grafana Dashboard 模板等文件,用于数据库监控和可视化展示相关配置。
三、开始部署
(一)配置 deploy.cfg 文件
登录待部署节点,进入安装包解压后的目录,编辑 deploy.cfg 配置文件。
默认情况下,deploy.cfg 配置文件中包含集群配置参数,对于本地单点部署,需删除或注释 (cluster) 集群配置项。以下是配置文件示例及参数说明:
secure_mode=ymanagement_user=kaiwudbrest_port=8080kaiwudb_port=26257data_root=/var/lib/kaiwudbnode_addr=192.168.64.128ssh_user=admin
- secure_mode:是否开启安全模式,默认开启。开启安全模式后,KWDB 生成 TLS 安全证书,作为客户端或应用程序连接数据库的凭证。生成的客户端相关证书存放在 /etc/kaiwudb/certs 目录。若你的使用场景对安全性要求较高,如涉及敏感数据存储和传输,建议保持开启状态;若在测试环境,对安全要求相对较低,也可选择关闭。
- management_user:KWDB 的管理用户,默认为 kaiwudb。安装部署后,KWDB 会创建相应的管理用户以及和管理用户同名的用户组。你可以根据实际需求修改为自定义的管理用户名,但要注意用户名的规范性,避免使用特殊字符。
- rest_port:KWDB Web 服务端口,默认为 8080。若该端口已被占用,可修改为其他未被占用的端口,修改后在通过 Web 界面访问数据库时,需使用修改后的端口号。
- kaiwudb_port:KWDB 服务端口,默认为 26257。同样,若此端口被占用,需进行修改,并确保修改后的端口未被其他服务占用且已在防火墙中开放。
- data_root:数据目录,默认为 /var/lib/kaiwudb。数据目录用于存储数据库的数据文件,可根据磁盘空间和数据管理需求,修改为其他合适的目录,如 /data/kaiwudb。修改目录后,需确保该目录有足够的磁盘空间,且部署用户对该目录有读写权限。
- node_addr:本地节点对外提供服务的 IP 地址,监听地址为 0.0.0.0,端口为 KWDB 服务端口。如果你的机器有多个 IP 地址,需确保填写的 IP 地址是对外提供服务的正确 IP。若在本地测试环境,可填写 127.0.0.1。
- ssh_user:执行 SSH 操作时使用的用户,用于一些远程操作或节点间通信相关的功能(在本地部署中,此参数作用相对较小,但仍需确保填写正确的用户名)。
(二)赋予 deploy.sh 脚本权限
为 deploy.sh 脚本添加运行权限,执行命令:
chmod +x./deploy.sh
(三)执行单机部署安装命令
执行单机部署安装命令:
./deploy.sh install --single
执行成功后,控制台将输出:
INSTALL COMPLETED: KaiwuDB has been installed successfuly!
(四)启动 KWDB 节点
安装完成后,启动 KWDB 节点,执行命令:
./deploy.sh start
执行成功后,控制台输出:
START COMPLETED: KaiwuDB has started successfuly!
在某些操作系统(如 KylinOS)中,系统可能会提示输入用户密码。此时,无需输入密码,直接按回车键确认即可。
(五)查看 KWDB 节点状态
可通过以下两种方式查看 KWDB 节点状态:
使用 deploy.sh 脚本查看:
./deploy.sh status
使用 systemctl 命令查看(前提是系统支持 systemctl 管理服务):
systemctl status kaiwudb
若节点正常运行,将显示相应的运行状态信息。
(六)配置 KWDB 开机自启动
为方便使用,可配置 KWDB 开机自启动,这样在系统重启后,KWDB 会自动启动。执行命令:
systemctl enable kaiwudb
四、KWDB 的使用
(一)使用 KaiwuDB 开发者中心连接 KWDB
KaiwuDB 开发者中心是专门为 KWDB 数据库系统量身定制的可视化管理工具,操作便捷,即使是数据库新手也能轻松上手。其功能涵盖数据库连接、数据库管理、模式管理、表管理等多个方面。
依然是从gitee去下载v2.2.0 · KWDB/kwdb - Gitee.com
安装 KaiwuDB 开发者中心
- 支持操作系统:
- Windows 7 及以上 64 位系统
- Mac 操作系统(macOS)
不同操作系统版本的界面略有差异,但功能完全相同。
安装步骤:
从kwdb 发行版 - Gitee.com下载安装包并解压缩。解压后的文件目录中,双击运行 KaiwuDB Developer Center.exe 应用程序(Windows 系统)或对应的可执行文件(Mac 系统),即可完成安装。
连接 KWDB 数据库
- 在首次建立连接或软件中的所有连接都被删除后,软件启动后会自动弹出新建连接向导,引导用户建立连接。其他情况下,如需创建连接,可选择以下任一操作:
单击工具栏或数据库导航区工具栏中的新建连接按钮。
在菜单栏中,单击数据库,然后从下拉菜单中选择新建连接。
以首次建立连接为例,具体连接步骤如下:
- 在创建新连接窗口,选择 KaiwuDB 驱动,单击下一步
- 在常规页签,设置主机(填写部署 KWDB 时配置的 node_addr 对应的 IP 地址,若本地部署且使用默认配置,一般为 127.0.0.1)、端口(填写部署时配置的 kaiwudb_port,默认为 26257)、数据库(默认数据库名称,可根据实际创建的数据库名称修改)、用户(填写部署时配置的 management_user,默认为 kaiwudb)和密码(首次使用默认无密码,若开启安全模式且设置了密码,需填写正确密码)
- (可选)勾选显示非缺省的数据库,可显示所有数据库。默认情况下,只显示指定连接的数据库
- (可选)单击测试链接,检查连接是否成功。连接成功后,将显示相应成功信息
- 单击确定,数据库导航区将自动更新,显示已连接的数据库
(二)使用 KaiwuDB JDBC 连接 KWDB(适合 Java 开发者)
Java 数据库连接(Java Database Connectivity,JDBC)是 Java 应用程序访问数据库的标准 API。KWDB 提供了 JDBC 驱动程序 KaiwuDB JDBC,支持 Java 应用程序与 KWDB 数据库交互,执行查询、插入、更新和删除等操作。
安装 KaiwuDB JDBC
- 安装 Java(1.8 及以上版本),可从 Oracle 官方网站(Overview of JDK Installation)获取安装指南并下载安装包进行安装。
- 安装 Maven(3.6 及以上版本),参考 Apache Maven 官方网站(Installation – Maven)的安装教程进行安装。
- 安装 KWDB 数据库,并按照上述部署步骤配置好数据库认证方式,创建数据库。
- 从kwdb 发行版 - Gitee.com获取 KaiwuDB JDBC 驱动包。
- 运行以下命令,将 KaiwuDB JDBC 安装到本地 Maven 仓库中:
mvn install:install-file "-Dfile=../kaiwudb-jdbc.2.0.4.jar" "-DgroupId=com.kaiwudb" "-DartifactId=kaiwudb-jdbc" "-Dversion=2.0.4" "-Dpackaging=jar"
- 在项目的 pom.xml 中添加依赖,将 KaiwuDB JDBC 引入到 Java 应用程序中:
<dependency><groupId>com.kaiwudb</groupId><artifactId>kaiwudb-jdbc</artifactId><version>2.0.4</version></dependency>
连接 KWDB 数据库
用户需编写 Java 程序代码来连接数据库。Java 程序代码需要包含以下关键内容:
- 加载驱动:使用 KWDB 前必须先加载 KWDB 数据库驱动程序类,加载方式如下:
Class.forName("com.kaiwudb.jdbc.Driver");
- 建立连接:通过 DriverManager.getConnection () 方法与 KWDB 数据库建立连接。KWDB 支持以下连接方式:
Connection conn = DriverManager.getConnection(url);Connection conn = DriverManager.getConnection(url, props);Connection conn = DriverManager.getConnection(url, user, password);
其中,url 为数据库连接地址,格式一般为 jdbc:kaiwudb:// 主机地址:端口号 / 数据库名称;props 为包含连接属性的 Properties 对象;user 为数据库用户名;password 为数据库密码。
通过以上详细的本地部署和使用教程,相信开发者们能够快速将 KWDB 应用到实际项目中,充分发挥其在数据存储、管理与分析方面的强大优势,助力项目高效运行和业务快速发展。
后续我会继续更新更多关于KWDB在实际应用中的文章
敬请期待
本文完
相关文章:
【KWDB 创作者计划】_本地化部署与使用KWDB 深度实践
引言 KWDB 是一款面向 AIoT 场景的分布式多模数据库,由开放原子开源基金会孵化及运营。它能在同一实例同时建立时序库和关系库,融合处理多模数据,具备强大的数据处理能力,可实现千万级设备接入、百万级数据秒级写入、亿级数据秒级…...
基于XC7V690T的在轨抗单粒子翻转系统设计
本文介绍一种基于XC7V690T 的在轨抗单粒子翻转系统架构;其硬件架构主要由XC7V690TSRAM 型FPGA芯片、AX500反熔丝型FPGA 芯片以及多片FLASH 组成;软件架构主要包括AX500反熔丝型FPGA对XC7V690T进行配置管理及监控管理,对XC7V690T进行在轨重构管理,XC7V690T通过调用内部SEMIP核实…...
机器学习 Day13 Boosting集成学习方法: Adaboosting和GBDT
大多数优化算法可以分解为三个主要部分: 模型函数:如何组合特征进行预测(如线性加法) 损失函数:衡量预测与真实值的差距(如交叉熵、平方损失) 优化方法:如何最小化损失函数&#x…...
Floyd算法求解最短路径问题——从零开始的图论讲解(3)
目录 前言 Djikstra算法的缺陷 为什么无法解决负权图 模拟流程 什么是Floyd算法 Floyd算法的核心思想 状态表示 状态转移方程 边界设置 代码实现 逻辑解释 举例说明 Floyd算法的特点 结尾 前言 这是笔者图论系列的第三篇博客 第一篇: 图的概念,图的存储,图的…...
spark和hadoop的区别与联系
区别 1. 数据处理模型 Hadoop:主要依赖 MapReduce 模型,计算分 Map(映射)和 Reduce(归约)两个阶段,中间结果常需写入磁盘,磁盘 I/O 操作频繁,数据处理速度相对受限&#…...
XMLXXE 安全无回显方案OOB 盲注DTD 外部实体黑白盒挖掘
# 详细点: XML 被设计为传输和存储数据, XML 文档结构包括 XML 声明、 DTD 文档类型定义(可 选)、文档元素,其焦点是数据的内容,其把数据从 HTML 分离,是独立于软件和硬件的 信息传输…...
C# .NET如何自动实现依赖注入(DI)
为解决重复性的工作,自动实现依赖注入(DI) 示例代码如下 namespace DialysisSOPSystem.Infrastructure {public static class ServiceCollectionExtensions{/// <summary>/// 批量注入服务/// </summary>/// <param name&qu…...
FastGPT Docker Compose本地部署与硅基流动免费AI接口集成指南
本文参考:https://doc.tryfastgpt.ai/docs/development/ 一、背景与技术优势 FastGPT是基于LLM的知识库问答系统,支持自定义数据训练与多模型接入。硅基流动(SiliconFlow)作为AI基础设施平台,提供高性能大模型推理引…...
AI对话高效输入指令攻略(三):使用大忌——“AI味”
免责声明: 1.本文所提供的所有 AI 使用示例及提示词,仅用于学术写作技巧交流与 AI 功能探索测试,无任何唆使或鼓励利用 AI 抄袭作业、学术造假的意图。 2.文章中提及的内容旨在帮助读者提升与 AI 交互的能力,合理运用 AI 辅助学…...
算法 | 成长优化算法(Growth Optimizer,GO)原理,公式,应用,算法改进研究综述,matlab代码
===================================================== github:https://github.com/MichaelBeechan CSDN:https://blog.csdn.net/u011344545 ===================================================== 成长优化算法 一、算法原理二、核心公式三、应用领域四、算法改进研究五…...
生产环境问题排查:日志分析与性能瓶颈定位(一)
引言 在当今数字化时代,各类应用系统如潮水般涌现,支撑着我们生活和工作的方方面面。从日常使用的电商平台、社交网络,到企业内部复杂的业务系统,它们的稳定运行和高效性能至关重要。而在生产环境中,日志分析与性能瓶…...
go语言的八股文
1.go语言触发异常的场景有哪些 运行时错误 1.空指针解引用:尝试访问一个未初始化的指针指向的内存,会导致程序崩溃并触发异常。 2.数组越界访问:试图访问数组中不存在的索引,比如数组长度为5,却尝试访问索引为10的元素…...
Office文件内容提取 | 获取Word文件内容 |Javascript提取PDF文字内容 |PPT文档文字内容提取
关于Office系列文件文字内容的提取 本文主要通过接口的方式获取Office文件和PDF、OFD文件的文字内容。适用于需要获取Word、OFD、PDF、PPT等文件内容的提取实现。例如在线文字统计以及论文文字内容的提取。 一、提取Word及WPS文档的文字内容。 支持以下文件格式: …...
组态软件工业化自动领域的可视化配置利器
组态软件是工业自动化领域的可视化配置利器,在工业生产中发挥着至关重要的作用,以下从定义、特点、功能、应用场景、市场现状及发展趋势等方面进行详细介绍: 定义 组态软件,又称组态监控系统软件,是用于数据采集和过程…...
Ansys electronics安装多版本simulink打开s-function冲突解决方法
安装了Ansys Electronics 2022 R1和2024 R1,想通过simplorer和simulink中的S-function进行联合仿真,结果注册表一直是2024 R1,修改方法如下: 1. WINR打开cmd,注意要用管理员权限打开 2. 输入 "D:\ANSYS\AnsysE…...
ubuntu--安装双系统
教程 BIOS设置 启动盘生成和ubuntu安装 boot option #1设置USB为第一启动项 rufus下载 官网: 链接 点击“链接”下面的按钮,即可下载。(注意查看自己的电脑是x64还是x84) 网盘下载: 链接...
快速搭建 Cpolar 内网穿透(Mac 系统)
1、Cpolar快速入门教程(官方) 链接地址:Cpolar 快速入门 2、官方教程详解 本地安装homebrew /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"这个是从 git 上拉取的&#x…...
【pytorch】torch.nn.Unfold操作
说明 一个代码里涉及到了unfold的操作,看了半天官网都没整明白维度怎么变化的,参考这个链接搞明白了: https://blog.csdn.net/ViatorSun/article/details/119940759 https://zhuanlan.zhihu.com/p/361140988 维度计算 输入( N,…...
使用PyTorch实现图像增广与模型训练实战
本文通过完整代码示例演示如何利用PyTorch和torchvision实现常用图像增广方法,并在CIFAR-10数据集上训练ResNet-18模型。我们将从基础图像变换到复杂数据增强策略逐步讲解,最终实现一个完整的训练流程。 一、图像增广基础操作 1.1 准备工作 #matplotli…...
PyTorch实现糖尿病预测的CNN模型:从数据加载到模型部署全解析【N折交叉验证、文末免费下载】
本文将详细介绍如何使用PyTorch框架构建一个卷积神经网络(CNN)来预测糖尿病,包含完整的代码实现、技术细节和可视化分析。 1. 项目概述 本项目使用经典的Pima Indians Diabetes数据集,通过5折交叉验证训练一个1D CNN模型,最终实现糖尿病预测…...
红队专题-漏洞挖掘-代码审计-反序列化
漏洞挖掘-代码审计-反序列化 加固/防御命令执行相关日志Tools-JNDIExploitJNDI Java Naming and Directory Interface Java命名目录接口注入原理payload参数渗透测试-php命令执行-RCE+Struts2拿webshell普通权限 命令执行 拿 webshellCMD echo 写入一句话 php文件菜刀连接Strut…...
【2025软考高级架构师】——计算机系统基础(7)
摘要 本文主要介绍了计算机系统的组成,包括硬件和软件两大部分。硬件由处理器、存储器、总线、接口和外部设备等组成,软件则涵盖系统软件和应用软件。文章还详细阐述了冯诺依曼计算机的组成结构,包括 CPU、主存储器、外存等,并解…...
【网络原理】TCP协议如何实现可靠传输(确认应答和超时重传机制)
目录 一. TCP协议 二. 确定应答 三. 超时重传 一. TCP协议 1)端口号 源端口号:发送方端口号目的端口号:接收方端口号 16位(2字节)端口号,可以表示的范围(0~65535) 源端口和目的…...
Java synchroinzed和ReentrantLock
synchronized —— JVM亲儿子的暗黑兵法 核心思想:“锁即对象,对象即锁!” 底层三板斧 对象头里的锁密码 每个Java对象头里藏了两个骚东西: Mark Word:32/64位的比特修罗场,存哈希码、GC年龄࿰…...
【Linux】vim配置----超详细
目录 一、插件管理器准备 二、目录准备 三、安装插件 一、插件管理器准备 Vim-plug 是一个Vim插件管理器,利用异步并行可以快速地安装、更新和卸载插件。它的安装和配置都非常简单,而且在操作过程中会给出很多易读的反馈信息,是一个自由、…...
驱动开发硬核特训 · Day 15:电源管理核心知识与实战解析
在嵌入式系统中,电源管理(Power Management)并不是“可选项”,而是实际部署中影响系统稳定性、功耗、安全性的重要一环。今天我们将以 Linux 电源管理框架 为基础,从理论结构、内核架构,再到典型驱动实战&a…...
如何使用人工智能大模型,免费快速写工作计划?
如何使用人工智能大模型,免费快速写工作计划? 具体视频教程https://edu.csdn.net/learn/40406/666579...
延长(暂停)Windows更新
延长(暂停)Windows更新 因为不关闭更新有时候就会出现驱动或者软硬件不兼容,导致蓝屏出现。 注:为什么选择延长更新而不是用软件暂停更新,因为使用软件暂停更新会出现一下问题,比如微软商店打不开等等 键…...
QT实现串口透传的功能
在一些产品的开发的时候,需要将一个串口的数据发送给另外一个串口进行转发。 具体的代码如下: #include "mainwindow.h" #include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::Ma…...
分布类相关的可视化图像
目录 一、直方图(Histogram) 1.定义 2.特点 3.局限性 4.类型 5.应用场景 6.使用Python实现 二、密度图(Density Plot) 1.定义 2.特点 3.局限性 4.类型 5.应用场景 6.使用Python实现 三、箱线图(Box Plo…...
【android bluetooth 框架分析 02】【Module详解 12】【 BidiQueue、BidiQueueEnd、Queue介绍】
1. BidiQueue 和 BidiQueueEnd 蓝牙协议栈里面有很多 BidiQueue ,本节就专门来梳理这块内容。 2. BidiQueue 介绍 BidiQueue,是 Host 与 Controller 层通信的中枢之一, acl_queue_、sco_queue_、iso_queue_ 都是 BidiQueue 类型。让我们一起看一下这个…...
c++通讯录管理系统
通讯录是一个可以记录亲人,好友的信息工具。 功能包括: 1,添加联系人:向通讯录添加新人,包括(姓名,性别年龄,联系电话,家庭住址) 2,显示联系人…...
React 打包
路由懒加载 原本的加载方式 #使用lazy()函数声明的路由页面 使用Suspense组件进行加载 使用CDN优化...
day1 python训练营
变量与输出 print(1,2,3,sep\n,endsep用来区分两个变量,end会紧跟最后一个变量) print(1,2,3,sepaaa,endsep用来区分两个变量,3后面不会再输出aaa) 格式化字符串 变量名值 print(f"变量名{变量名}") 变量的基础运算 ,-*,/ 注意*不要忘写。比如2j就不…...
C语言状态字与库函数详解:概念辨析与应用实践
C语言状态字与库函数详解:概念辨析与应用实践 一、状态字与库函数的核心概念区分 在C语言系统编程中,"状态字"和"库函数"是两个经常被混淆但本质完全不同的概念,理解它们的区别是掌握系统编程的基础。 1. 状态字&…...
软件测试笔记(测试的概念、测试和开发模型介绍、BUG介绍)
软件测试笔记 认识测试 软件测试是啥? 说白了,就是检查软件的功能和效果是不是用户真正想要的东西。比如用户说“我要一个能自动算账的软件”,测试就是看这个软件到底能不能准确算账、有没有漏掉功能。 软件测试定义:软件测试就…...
Python多进程同步全解析:从竞争条件到锁、信号量的实战应用
1. 进程同步的必要性 在多进程编程中,当多个进程需要访问共享资源时,会出现竞争条件问题。例如火车票售卖系统中,如果多个售票窗口同时读取和修改剩余票数,可能导致数据不一致。 1.1 竞争条件示例 from multiprocessing import…...
Vue3 + TypeScript,关于item[key]的报错处理方法
处理方法1:// ts-ignore 注释忽略报错 处理方法2:item 设置为 any 类型...
Spring源码中关于抽象方法且是个空实现这样设计的思考
Spring源码抽象方法且空实现设计思想 在Spring源码中onRefresh()就是一个抽象方法且空实现,而refreshBeanFactory()方法就是一个抽象方法。 那么Spring源码中onRefresh方法定义了一个抽象方法且是个空实现,为什么这样设置,好处是什么。为…...
Pandas数据可视化
在当今这个数据驱动的时代,数据可视化已经成为数据分析不可或缺的一部分。通过图形化的方式展示数据,我们能够更直观地理解数据的分布、趋势和关系,从而做出更加精准的决策。Pandas,作为Python中最为流行的数据处理库,…...
string类(详解)
【本节目标】 1. 为什么要学习string类 2. 标准库中的string类 3. string类的模拟实现 4. 扩展阅读 1. 为什么学习string类? 1.1 C语言中的字符串 C 语言中,字符串是以 \0 结尾的一些字符的集合,为了操作方便, C 标准库中提供…...
零基础上手Python数据分析 (19):Matplotlib 高级图表定制 - 精雕细琢,让你的图表脱颖而出!
写在前面 —— 超越默认样式,掌握 Matplotlib 精细控制,打造专业级可视化图表 上一篇博客,我们学习了 Matplotlib 的基础绘图功能,掌握了如何绘制常见的折线图、柱状图、散点图和饼图,并进行了基本的图表元素定制,例如添加标题、标签、图例等。 这些基础技能已经能让我…...
【上位机——MFC】MFC入门
MFC库中相关类简介 CObject MFC类库中绝大部分类的父类,提供了MFC类库中一些基本的机制。 对运行时类信息的支持。对动态创建的支持。对序列化的支持。 CWinApp 应用程序类,封装了应用程序、线程等信息。 CDocument 文档类,管理数据 F…...
ASP.NET Core 最小 API:极简开发,高效构建(下)
在上篇文章 ASP.NET Core 最小 API:极简开发,高效构建(上) 中我们添加了 API 代码并且测试,本篇继续补充相关内容。 一、使用 MapGroup API 示例应用代码每次设置终结点时都会重复 todoitems URL 前缀。 API 通常具有…...
【leetcode100】一和零
1、题目描述 给你一个二进制字符串数组 strs 和两个整数 m 和 n 。 请你找出并返回 strs 的最大子集的长度,该子集中 最多 有 m 个 0 和 n 个 1 。 如果 x 的所有元素也是 y 的元素,集合 x 是集合 y 的 子集 。 示例 1: 输入:…...
代码随想录算法训练营第五十三天 | 105.有向图的完全可达性 106.岛屿的周长
105.有向图的完全可达性 题目链接:101. 孤岛的总面积 文章讲解:代码随想录 视频讲解:图论:岛屿问题再出新花样 | 深搜优先搜索 | 卡码网:101.孤岛总面积_哔哩哔哩_bilibili 思路: 1.确认递归函数&…...
在 Debian 10.x 安装和配置 Samba
1. 更新系统 sudo apt update sudo apt upgrade -y2. 安装 Samba sudo apt install samba -y3. 配置 Samba 备份默认配置文件 sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.bak编辑配置文件 sudo nano /etc/samba/smb.conf示例配置(共享目录) …...
Python中的短路运算
近期在学习python的过程中遇到此问题,遂总结记录 在”and“逻辑判定布尔类型时: 若判定对象均为True,则输出最后一个判别为True的对象 若判定对象的数据类型中有布尔类型,且最终结果为False,则输出布尔类型False 若判定对象的…...
Java8-遍历list取出两个字段重新组成list集合
在Java 8中,可以使用Stream API遍历List并提取两个字段重新组合成新的List。 以下是几种常见方法: 方法1:使用自定义类 定义一个包含目标字段的类:public class FieldHolder {private final String field1;private final int field2;public FieldHolder(String field1, i…...
【C++ 程序设计】实战:C++ 实践练习题(31~40)
目录 31. 数列:s 1 + 2 + 3 + … + n 32. 数列:s 1 - 2 - 3 - … - n 33. 数列:s 1 + 2 - 3 + … - n 34. 数列:s 1 - 2 + 3 - … &#…...