TDengine 可靠性保障:数据持久化与容灾备份(一)
一、引言
在数字化浪潮席卷全球的当下,数据已成为企业和组织最为关键的资产之一。无论是互联网企业记录用户的行为数据,还是金融机构存储交易信息,又或是工业领域监测设备的运行状态,数据的可靠性直接关乎到业务的正常运转、决策的准确性以及企业的竞争力。
想象一下,一家电商平台在促销活动期间,如果订单数据出现丢失或损坏,可能导致无法准确处理订单,进而引发客户投诉和业务损失;再比如,一家能源公司若不能可靠地存储和管理设备的运行数据,就难以提前发现潜在故障,可能造成生产中断,带来巨大的经济损失 。因此,确保数据在存储、传输和处理过程中的可靠性,是现代系统设计必须首要考虑的核心要素。
TDengine 作为一款高性能的时序数据库,在数据可靠性保障方面发挥着举足轻重的作用。其专注于解决物联网、工业互联网、车联网等场景下海量时序数据的存储和管理难题,通过一系列创新技术和设计理念,为数据的持久化存储与容灾备份提供了坚实可靠的解决方案,极大地降低了数据丢失的风险,保障了业务系统的连续性和稳定性。接下来,让我们深入探索 TDengine 在数据持久化与容灾备份方面的卓越特性和实现机制。
二、TDengine 简介
TDengine 是一款由涛思数据自主研发的高性能、分布式、云原生的时序数据库,专为物联网、车联网、工业互联网、金融、IT 运维等场景设计并优化。它在数据处理上有着诸多独特优势,能高效应对海量时序数据的存储和管理挑战 。
2.1 高性能
TDengine 通过创新的存储引擎设计,在数据写入和查询方面展现出卓越的性能,比通用数据库快 10 倍以上,也远超其他时序数据库。它支持每秒数百万条数据的写入和查询,还运用了异步 IO、内存映射文件和数据压缩等技术,进一步提升处理速度,减少存储空间占用。比如在一个拥有大量传感器的工业物联网场景中,传感器每秒产生大量数据,TDengine 能够快速且稳定地将这些数据写入存储,并且在查询历史数据进行设备状态分析时,能在极短时间内返回结果 。
2.2 分布式架构
TDengine 采用原生分布式设计,具备强大的水平扩展能力,可轻松添加新节点来增加存储容量和处理能力,以应对不断增长的数据量。同时,通过多副本机制,它确保了系统在部分节点故障时仍能正常运行,保障数据的完整性和可用性,满足企业对高可靠性的要求。例如,当一家车联网企业的数据量随着车辆数量的增加而急剧增长时,只需添加节点,TDengine 就能实现存储和处理能力的扩展,保证车联网系统对车辆数据的实时处理和分析不受影响 。
2.3 支持 SQL
TDengine 使用 SQL 作为数据查询语言,对于熟悉 SQL 的开发者和数据库管理员来说,几乎零学习成本,能快速上手使用。同时,它还针对时序数据的特点,对 SQL 进行了扩展,使其能够更方便地处理时序数据特有的分析操作,如时间序列的聚合、降采样、插值等,满足复杂的业务需求 。
2.4 灵活的数据模型
TDengine 支持灵活的数据模型,可以存储数字、字符串、时间戳和地理位置等不同类型的数据。通过超级表(Super Table)和子表(Subtable)的设计,它能够高效管理大量具有相同结构的数据采集点。超级表作为一种抽象的表结构,定义了一组具有相同数据结构的子表的模板,而子表则是从超级表派生出来的具体表,每个子表对应一个具体的数据采集点,这种设计使得数据的管理和查询更加便捷。例如,在一个城市的智能交通系统中,可以创建一个名为 “traffic_sensors” 的超级表,用于表示所有交通传感器的数据采集点,而每个具体的传感器对应一个子表,存储其产生的时序数据 。
2.5 应用场景
TDengine 在多个领域有着广泛的应用,在物联网领域,可用于存储和分析各种物联网设备产生的数据,如智能家居设备的运行状态数据、智能工厂中设备的生产数据等;在工业互联网中,能够帮助企业管理工业设备的运行数据,实现设备故障预测、生产效率优化等功能;在车联网中,可处理车辆行驶过程中产生的大量数据,如车速、油耗、位置等信息,为智能驾驶和车辆管理提供数据支持;在金融领域,可用于存储和分析金融交易数据、股票行情数据等,支持风险评估、投资决策等业务 。
三、数据持久化机制剖析
(一)存储模型与数据分区
TDengine 的存储模型可细分为三个关键部分,分别是时序数据、数据表元数据和数据库元数据 。
时序数据是系统运行过程中产生的核心数据,这些数据被妥善存放在 vnode 中,由 data、head 和 last 三个文件协同管理 。其中,data 文件用于存储实际的时序数据,head 文件记录着 data 文件中数据块的索引信息,这就好比图书馆的索引目录,能帮助快速定位到所需的数据块;last 文件则用于保存每一张表从内存落盘到磁盘时的碎片数据 。通过采用一个采集点一张表的模型,TDengine 确保了一个时间段的数据在存储介质上是连续存储的,这种存储方式极大地减少了随机读取操作,从而显著提升了插入和查询操作的效率 。例如,在智能工厂的设备监测场景中,每个设备产生的时序数据都独立存储,当需要查询某设备在特定时间段内的运行数据时,能够快速定位到对应的连续数据块,高效获取所需信息 。
数据表元数据包含了标签信息和 Table Schema 信息,它们被存储在 vnode 的 meta 文件中 。标签信息就像是给数据贴上的特殊 “标签”,用于标识数据的特定属性,而 Table Schema 信息则定义了表的结构,包括列的名称、数据类型等 。TDengine 支持对标签数据建立索引,这使得在查询时能够快速筛选出符合条件的数据表,实现毫秒级的查询响应 。以智能电网中的电表数据为例,每个电表的地理位置、所属区域等标签信息都存储在 meta 文件中,通过对这些标签建立索引,当需要查询某个区域内所有电表的数据时,能够迅速定位到对应的电表数据表,大大提高了查询效率 。
数据库元数据涵盖了系统节点、用户、DB、STable Schema 等关键信息,这些信息存放在 mnode 中 。mnode 就像是整个数据库的 “大脑”,负责管理和协调各个部分的工作 。与典型的 NoSQL 存储模型相比,TDengine 将标签数据与时序数据完全分离存储,这种设计有效降低了标签数据存储的冗余度,并且能够实现高效的多表之间的聚合查询 。例如,在城市交通数据管理系统中,不同类型的交通数据(如车辆行驶数据、信号灯状态数据等)可能存储在不同的表中,但通过数据库元数据的管理,能够方便地对这些数据进行聚合查询,分析城市交通的整体状况 。
在数据分区方面,TDengine 采用了独特的策略 。除了基于 vnode 的分片机制外,还对时序数据按照时间段进行细致分区 。每个数据文件都只专注于包含一个时间段的时序数据,而这个时间段的长度由 DB 的配置参数 days(在 3.0 版本中更名为 duration)决定 。这种按时间段分区的方法具有多重优势,它不仅便于高效实现数据的保留策略,只要数据文件超过规定的天数(系统配置参数 keep),就会被自动删除,还能实现大数据的冷热管理,不同的时间段可以存放于不同的路径和存储介质,从而实现多级存储 。比如,在一个长期运行的气象监测系统中,近期的气象数据可能需要频繁查询和分析,这些数据可以存储在高速存储介质中,而历史较久的数据则可以存储在成本较低的大容量存储介质中 。同时,TDengine 从 1970 年 1 月 1 日 0 时 0 分 0 秒起(EpochTime)开始,每 days 天划一个分区,对任何一个时间戳都是 “划到哪一片就算到哪一片”,这种方式使得数据的分区管理更加规范和有序 。
(二)缓存与持久化策略
TDengine 采用了独具特色的时间驱动缓存管理策略,也被称为写驱动的缓存管理机制,这种策略与传统的读驱动的数据缓存模式有着本质的区别 。在物联网和工业互联网等应用场景中,最新到达的数据往往具有更高的价值,因为它们能够实时反映设备的运行状态和系统的当前情况 。TDengine 充分认识到这一特性,将最近到达的(当前状态)数据优先保存在缓存中 。当有查询请求时,首先会在缓存中查找数据,如果缓存中存在所需数据,就能快速返回结果,大大提高了查询效率 。以智能建筑的能源管理系统为例,通过缓存最新的能源消耗数据,管理人员可以实时了解建筑内各个区域的能源使用情况,及时发现异常并采取相应的节能措施 。
在持久化存储方面,TDengine 采用数据驱动的方式让缓存中的数据写入硬盘进行持久化存储 。具体来说,当缓存中的数据量达到一定规模时,为了避免阻塞后续数据的写入,TDengine 会自动拉起落盘线程,将缓存中的数据有序地写入硬盘 。此外,TDengine 服务还会定时将 vnode 缓存中的数据写入到硬盘上,默认情况下为一个小时落一次盘,这个落盘间隔可以在配置文件 taos.cfg 中通过参数 commitTime 灵活配置 。在数据落盘时,TDengine 会打开新的预写日志文件,以确保数据的安全性和完整性,在落盘完成后则会删除老的预写日志文件,有效避免日志文件无限制地增长 。
为了充分利用时序数据的特点,TDengine 将一个 vnode 保存在持久化存储的数据切分成多个文件,每个文件只保存固定天数的数据 。这种设计不仅便于管理和维护数据,还能提高数据的读取和查询效率 。同时,TDengine 对缓存按照先进先出(FIFO)的原则进行管理,始终保证每个表的最新数据都在缓存中 。这样,在面对频繁的读写操作时,TDengine 能够快速响应,满足系统对数据实时性的要求 。例如,在车联网系统中,车辆的实时位置、速度等数据不断更新,通过合理的缓存和持久化策略,TDengine 能够高效地处理这些数据,为车辆的智能调度和交通管理提供有力支持 。
相关文章:
TDengine 可靠性保障:数据持久化与容灾备份(一)
一、引言 在数字化浪潮席卷全球的当下,数据已成为企业和组织最为关键的资产之一。无论是互联网企业记录用户的行为数据,还是金融机构存储交易信息,又或是工业领域监测设备的运行状态,数据的可靠性直接关乎到业务的正常运转、决策…...
AWTK-MVVM 如何让多个View复用一个Model记录+关于app_conf的踩坑
前言 有这么一个业务,主界面点击应用窗口进入声纳显示界面,声纳显示界面再通过按钮进入菜单界面,菜单界面有很多关于该声纳显示界面的设置项,比如量程,增益,时间显示,亮度,对比度等…...
第四节:React Hooks进阶篇-useEffect依赖项为空数组[]与不写的区别
陷阱题:闭包问题、Stale Closure举例 一、依赖项为空数组[]与不写的核心区别 行为空数组[]不写依赖项执行时机仅在组件挂载时执行一次(类似componentDidMount)组件每次渲染后都执行(类似componentDidUpdate)更新触发…...
25级总分413数学一142专业124东南大学820考研经验电子信息通信工程,真题,大纲,参考书。
我是南京理工大学的本科生,25 考研一战东大,政治 69,英一 78,数一 142,专业课(820)124,总分 413。我从 3 月正式开始备考,专业课跟着无线电论坛jenny 老师进行学习&#…...
Docker Desktop磁盘镜像位置用途解析
在设置里面的资源中有个磁盘镜像位置的配置,这个目录默认位置是:C:\Users\haitao.luo\AppData\Local\Docker\wsl\disk,这里面对应的是一个docker_data.vhdx,虚拟磁盘文件,因为是在c盘上,所以可能后面下载镜…...
android display 笔记(十)surfaceflinger与HWC的关系
在 Android 图形系统中,SurfaceFlinger 和 Hardware Composer (HWC) 是紧密协作的两个核心组件,共同负责屏幕内容的合成与显示。它们的关系可以用 “决策者与执行者” 来概括: 首先HWC中 DEVICE:指“显示设备硬件”(…...
#MES系统运维问题分析思路
一套适用于90% MES运维现场问题的排查分析思维模型,叫做: 🔍 MES系统问题分析七步法(现场实战适用) ✅ 第一步:明确问题现象(What) 问题要说清楚,“不能操作”这种模糊描…...
基于FPGA的六层电梯智能控制系统 矩阵键盘-数码管 上板仿真均验证通过
基于FPGA的六层电梯智能控制系统 前言一、整体方案二、软件设计总结 前言 本设计基于FPGA实现了一个完整的六层电梯智能控制系统,旨在解决传统电梯控制系统在别墅环境中存在的个性化控制不足、响应速度慢等问题。系统采用Verilog HDL语言编程,基于Cyclo…...
FPGA上实现SD卡连续多块读的命令
在FPGA上实现SD卡连续多块读的命令 CMD17命令一次只能读取1个块 CMD18命令一次可以连续读取多个块,直到停止命令CMD12 CMD18命令读的块数程序可任意设置 目录 前言 一、SD卡多块读命令CMD18 二、停止读命令CMD12 三、SD卡初始化SD卡连续块读操作的verilog代码 …...
AI 大语言模型 (LLM) 平台的整体概览与未来发展
📋 分析报告:AI 大语言模型 (LLM) 平台的整体概览与未来发展 自动生成的结构化分析报告 💻 整体概述:AI LLM 平台的市场现状与发展动力 随着人工智能技术的飞速发展,大语言模型(Large Language Models, L…...
【技术派部署篇】Windows本地部署技术派
一、技术派简介 技术派是一个采用 Spring Boot、MyBatis-Plus、MySQL、Redis、ElasticSearch、MongoDB、Docker、RabbitMQ 等技术栈的社区系统,其 1.0 版已正式上线。该项目的技术栈按阶段集成引入,开发者可根据自身需求选择不同版本进行学习。 二、环…...
asm汇编语言源代码之-获取环境变量
提供1个子程序: 1. 读取环境变量 GETENVSTR 具体功能及参数描述如下 GETENVSTR PROC FAR ;IN: DSPSP SEG. ; ES:BX -> ENV VAR NAME ;OUT: DS:DX -> ENV VAR VALUE; IF DX0FFFFH, NOT FOUND ; more source code at http://www.ahjoe.com/source/srcdown.aspPU…...
消失的它:揭开 CoreData 托管对象神秘的消失之谜(上)
概述 使用 CoreData 作为 App 持久存储“定海神针”的小伙伴们想必都知道,我们需要将耗时的数据库查询操作乖巧的放到后台线程中,以便让主线程负责的 UI 获得风驰电掣般地享受。 不过,如何将后台线程中查询获得的托管对象稳妥的传送至主线程…...
Python中如何用正则表达式精准匹配IP地址?
在网络编程和数据处理时,我们经常需要从文本中提取或验证IP地址。Python的正则表达式(re模块)是完成这个任务的利器。但你知道怎么写才能准确匹配各种合法的IP地址吗?今天我们就来详细探讨这个问题。 为什么需要IP正则表达式? 假设你正在分…...
初识华为防火墙
防火墙配置与应用 一、防火墙的基本概念 1.防火墙的网络区域(一般认为三个区域:trust、DMZ、untrust) (1)本地区域(安全级别 100,local)(防火墙内部区域,一般不说明此…...
十二、C++速通秘籍—静态库,动态库
上一章节: 十一、C速通秘籍—多线程-CSDN博客https://blog.csdn.net/weixin_36323170/article/details/147055932?spm1001.2014.3001.5502 本章节代码: cpp2/library CuiQingCheng/cppstudy - 码云 - 开源中国https://gitee.com/cuiqingcheng/cppst…...
我爱学算法之——滑动窗口攻克子数组和子串难题(下)
这几道题可以说是有一点难度的,但是掌握方法以后可以说非常简单了; 一、找到字符串中所有字母异位词 题目解析 题目给定了两个字符串s和p,让我们在s中找到p的异位词的字串,并且返回这些字串的索引 **异位词:**简单来说…...
leaflet 之 获取中国某个行政区的经纬度边界(latLngBounds)
思路 在json文件中获取下面的四个点 组成东北,西南两组 { “southwest”: { “lat”: 35.950, “lng”: 120.000 },//西南方 “northeast”: { “lat”: 36.200, “lng”: 120.300 }//东北方 } 最西点经度(minLng) 最东点经度(maxLng&#x…...
鸢尾花分类的6种机器学习方法综合分析与实现
鸢尾花分类的6种机器学习方法综合分析与实现 首先我们来看一下对应的实验结果。 数据准备与环境配置 在开始机器学习项目前,首先需要准备编程环境和加载数据。以下代码导入必要的库并加载鸢尾花数据集: import numpy as np import pandas as pd impo…...
基于李永乐线性代数基础的行列式的起源于理解
起源于解方程组的过程 对于解一个二元方程组,很自然的会通过加减消元,变成下面这样 对于三元方程组,也是一样: 这一大长串,是A*x1b1这个形式时,A的值 人们为了方便记忆x未知数前这一大坨相乘后相加减的数…...
MacOs java环境配置+maven环境配置踩坑实录
oracl官网下载jdk 1.8的安装包 注意可能需要注册!!! 下载链接:下载地址点击 注意晚上就不要下载了 报错400 !!! 1.点击安装嘛 2.配置环境变量 export JAVA_HOME/Library/Java/Java…...
LeetCode 3272.统计好整数的数目:枚举+排列组合+哈希表
【LetMeFly】3272.统计好整数的数目:枚举排列组合哈希表 力扣题目链接:https://leetcode.cn/problems/find-the-count-of-good-integers/ 给你两个 正 整数 n 和 k 。 如果一个整数 x 满足以下条件,那么它被称为 k 回文 整数 。 x 是一个…...
蓝桥杯嵌入式历年省赛客观题
一.第十五届客观题 第十四届省赛 十三届 十二届...
RFID 在制造业的深度应用与未来趋势
一、引言 制造业作为国民经济的核心支柱,正面临着全球供应链重构、个性化需求激增、成本压力加剧等多重挑战。RFID(射频识别)技术以其非接触式自动识别、数据实时传输、环境适应性强等特性,成为推动制造业数字化转型的关键引擎。…...
spring--声明式事务
声明式事务 1、回顾事务 要么都成功,要么都失败! 事务在项目开发中,十分重要,涉及数据的一致性问题 确保完整性和一致性 事务ACID: 原子性:事务是原子性操作,由一系列动作组成,…...
java爬虫案例
以下是一个简单的Java爬虫案例,使用了 Jsoup 和 Apache HttpClient 两个常用的库来实现网页内容的爬取和解析。这个案例会演示如何获取网页的HTML内容、解析HTML并提取所需数据。 示例:使用Jsoup爬取网页内容 1. 添加依赖 在项目中添加以下依赖ÿ…...
博途 TIA Portal之1200做主站与有意思的板子做MODBUS_RTU通讯
做为博途的硬件,1200和1500本体都不具有串口通讯功能,只能使用扩展板或是通讯模块完成。 其中1200使用CB1241或CM1241进行串口通讯,本文将使用CM1241进行演示。 1、硬件介绍 1200的PLC一台,有意思的板子(以下简单4D板)一台。 其中1200带扩展模块CM1241 RS232;4D板使…...
01_核心系统下的技术原理解析
15年前,基本上国内的核心系统被C垄断,基本上是IBM的那套东西,场景也是比价复杂,这里不再赘述,TPS太过于庞大,技术上确实比较复杂。为此我这里抛砖引玉,说下对应的支付系统: &#x…...
【力扣hot100题】(092)最长回文串
有点难度,一开始想到的两种方法都不对,花了不少时间。 先说之前的方法: ① 遍历每个点,每个点向外扩张,如果左等于右就一直扩展直到不等。 这个方法可是可以,但我没有考虑到两个相同字母也是回文串的情况…...
第一期:[特殊字符] 深入理解MyBatis[特殊字符]从JDBC到MyBatis——持久层开发的转折点[特殊字符]
前言 🌟 在软件开发的过程中,持久层(或数据访问层)是与数据库进行交互的关键部分。早期,开发者通常使用 JDBC(Java Database Connectivity)来实现与数据库的连接与操作。虽然 JDBC 在一定程度上…...
指针的进阶2
六、函数指针数组 字符指针数组 - 存放字符指针的数组 char* arr[10] 整型指针数组 - 存放整型指针的数组 int* arr[10] 函数指针数组 - 存放函数指针的数组 void my_strlen() {} int main() {//指针数组char* ch[5];int arr[10] {0};//pa是是数组指针int (*pa)[10] &…...
Java学习——day28(Java并发工具类与线程池)
文章目录 1. 并发工具类简介1.1 ExecutorService1.2 Callable 和 Future1.3 Executors 工具类1.4 线程池优势 2. 实践:线程池执行任务并收集结果示例2.1 示例代码 3. 代码详解3.1 线程池的创建3.2 定义任务列表3.3 提交任务并收集 Future3.4 获取任务执行结果3.5 关…...
2021第十二届蓝桥杯大赛软件赛省赛C/C++ 大学 B 组
记录刷题的过程、感悟、题解。 希望能帮到,那些与我一同前行的,来自远方的朋友😉 大纲: 1、空间-(题解)-字节单位转换 2、卡片-(题解)-可以不用当组合来写,思维题 3、直…...
【数据结构】之二叉树
二叉树是我们在数据结构中学到的第一个非线性结构,是后续学习更为复杂的树、图结构的基础。本文整理了二叉树的概念定义、基本操作、遍历算法、伪代码与代码实现以及实例说明,方便大家随时查找对应。 一、定义与基本术语 二叉树是一种树形结构…...
电感、互感器、变压器和磁珠综合对比——《器件手册--电感/线圈/变压器/磁珠篇》
三、电感/线圈/变压器/磁珠 名称 定义 特点...
CLIP中的Zero-Shot Learning原理
CLIP(Contrastive Language-Image Pretraining)是一种由OpenAI提出的多模态模型,它通过对比学习的方式同时学习图像和文本的表示,并且能在多种任务中进行零样本学习(Zero-Shot Learning)。CLIP模型的核心创…...
基于 Redis 实现一套动态配置中心 DCC 服务与反射基础知识讲解
目录 动态配置中心核心价值 轻量级 Redis 方案与 ZooKeeper 的对比分析 为什么选择自定义 Redis 方案? 1. 技术决策背景 一、活动降级拦截 1. 定义与作用 2. 实现原理 二、活动切量拦截 1. 定义与作用 2. 实现原理 三、两者的核心区别 四、实际应用案例 1. 电商大促…...
vue 前端遇到问题 样式不展示
vue 前端遇到问题 样式不展示 先看接口返回有数据没 如果有数据看下 是不是 输入赋值给其他 字段 没有赋值上导致报错 所以页面没展示数据...
基于 Spring Boot + Vue 的 [业务场景] 管理系统设计与实现
技术范围:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论文…...
2025蓝桥杯JavaB组
说明 博主自己水平有限,而且答案也不一定对,下面代码和思路仅作分享。我只把我考场上做了的写出来了,有什么问题欢迎评论区交流。 A:逃离高塔 思路: 由于有了去年的经验,所以一上来我就是找规律…...
HDF5文件格式:数据类型与读写功能详解
HDF5文件格式:数据类型与读写功能详解 HDF5简介 HDF5(Hierarchical Data Format version 5)是一种用于存储和管理大量科学数据的文件格式和库。它由美国国家高级计算应用中心(NCSA)开发,具有以下特点&…...
探索 Python 的 functools 模块:缓存、属性缓存与 LRU 缓存
李升伟 编译 Python 的 functools 模块是函数式编程爱好者的宝库,提供了许多工具来提升代码的效率和优雅性。本文将深入探讨三个强大的函数——cache、cached_property 和 lru_cache,它们通过存储昂贵计算的结果来优化性能。无论是加速递归算法还是简化…...
缓存与数据库一致性:从问题到解决方案全解析
一、⼀致性问题的由来:为什么会不一致? 我们先从现实例子出发,来看为什么会出现一致性问题: 📦 场景举例:电商下单业务 用户提交订单 → 服务写入数据库订单表;同时更新缓存(比如用…...
【android bluetooth 框架分析 02】【Module详解 2】【gd_shim_module 模块介绍】
1. 背景 上一章节 我们介绍了 module_t 的 大体框架 ,本节内容我们就选择 我们的 gd_shim_module 模块为例子,具体剖析一下,它里面的逻辑。 static const char GD_SHIM_MODULE[] "gd_shim_module";// system/main/shim/shim.cc …...
dbt:新一代数据转换工具
dbt(Data Build Tool)一款专为数据分析和工程师设计的开源工具,专注于 ETL/ELT 流程的数据转换(Transform)环节,帮助用户以高效、可维护的方式将原始数据转换为适合分析的数据模型。 用户只需要编写查询&am…...
Linux-内核驱动-makemenu,make modules,make uImage,杂项
动态生成设备节点设备号...
linux 内存踩踏导致的空指针问题分析纪要
1,查看日志信息打印 我们看到日志发现发包的skb模块有NULL pointer情况,我们看代码分析skb指针不可能出现是空指针,这个时候我们怀疑可能是出现了踩内存导致的空指针情况,所以我们首先需要找到系统PANIC的条件,也就是…...
【C++】 —— 笔试刷题day_14
一、乒乓球筐 题目解析 题目输入两个字符串A和B,分别代表A和B中的乒乓球,不同的大写字母就表示不同的乒乓球; 如果判断B中的所有乒乓球在A中都有,且A中每种乒乓球的数量大于等于B中的。(简单来说就是B是A的子集&#…...
在WPS中通过JavaScript宏(JSA)调用DeepSeek官方API自动识别标题级别和目录
我们希望通过AI,能够自动识别像“一”、“(一)”、“1”、“(1)” 这类常见标题序号。做一个规则,如果存在“一”时,则“一”、“(一)”、“1”分别识别为H1、H2、H3&…...
修复 WPS 编译错误:缺少:Sub或Function 且出现两个MathType加载项
问题首次出现于2025.4.12。 同时使用了Word和WPS,在里面都使用了MathType,在Microsoft的Word中,加载项能正常加载且显示,这也是我们要的效果。 而在WPS中,却出现了两个MathType,且在启动时会弹窗报错&…...