HarmonyOS NEXT:保存应用数据

用户首选项使用

用户首选项的特点

数据体积小、访问频率高、有加载速度要求的数据如用户偏好设置、用户字体大小、应用的配置参数。

用户搜选项(Preferences)提供了轻量级配置数据的持久化能力,支持订阅数据变化的通知能力。不支持分布式同步。

基于Key-Value的数据结构,Key是不重复的关键字,Value是数据值。

Preferences是一种非关系型数据库,不遵循数据库的ACID特性,数据见毫无关系。

用户首选项存储在内存中,存储数据量过大会导致应用占用内存过多。如果需要持久化存储,可以调用Flush接口。

不支持数据加密。

用户首选项使用场景

应用配置参数、用户偏好设置,如应用字体大小个性化调整、主题颜色等。

用户首选项机制原理

用户首选项实际通过持久化文件的形式存储在应用沙箱目录中,ArkTS提供交互接口。每个持久化文件唯一关联一个实例。

用户程序通过UIAbilityContext来获得Preferences实例。 因为一个程序可以有多个UIAbility,所以可以获得多个Preferences实例。

用户首选项主要API

preferences.getPreferencesSync10+

getPreferencesSync(context: Context, options: Options): Preferences

获取Preferences实例,此为同步接口。

参数:

参数名类型必填说明
contextContext

应用上下文。

FA模型的应用Context定义见Context。

Stage模型的应用Context定义见Context。

optionsOptions与Preferences实例相关的配置选项。

返回值:

类型说明
Preferences返回Preferences实例。

示例代码: 

import { UIAbility } from '@kit.AbilityKit';
import { window } from '@kit.ArkUI';let dataPreferences: preferences.Preferences | null = null;class EntryAbility extends UIAbility {onWindowStageCreate(windowStage: window.WindowStage) {let options: preferences.Options = { name: 'myStore' };dataPreferences = preferences.getPreferencesSync(this.context, options);}
}
putSync10+

putSync(key: string, value: ValueType): void

将数据写入缓存的Preferences实例中,可通过flush将Preferences实例持久化,此为同步接口。

参数:

参数名类型必填说明
keystring要修改的存储的Key,不能为空。
valueValueType存储的新值。

示例代码: 

dataPreferences.putSync('startup', 'auto');
// 当字符串有特殊字符时,需要将字符串转为Uint8Array类型再存储
let uInt8Array1 = new util.TextEncoder().encodeInto("~!@#¥%……&*()——+?");
dataPreferences.putSync('uInt8', uInt8Array1);
hasSync10+

hasSync(key: string): boolean

检查缓存的Preferences实例中是否包含名为给定Key的存储键值对,此为同步接口。

参数:

参数名类型必填说明
keystring要检查的存储key名称,不能为空。

返回值:

类型说明
boolean返回Preferences实例是否包含给定key的存储键值对,true表示存在,false表示不存在。

示例代码: 

let isExist: boolean = dataPreferences.hasSync('startup');
if (isExist) {console.info("The key 'startup' is contained.");
} else {console.info("The key 'startup' dose not contain.");
}
getSync10+

getSync(key: string, defValue: ValueType): ValueType

从缓存的Preferences实例中获取键对应的值,如果值为null或者非默认值类型,返回默认数据defValue,此为同步接口。

参数:

参数名类型必填说明
keystring要获取的存储Key名称,不能为空。
defValueValueType默认返回值。

返回值:

类型说明
ValueType返回键对应的值。

示例代码: 

let value: preferences.ValueType = dataPreferences.getSync('startup', 'default');
deleteSync10+

deleteSync(key: string): void

从缓存的Preferences实例中删除名为给定Key的存储键值对,可通过flush将Preferences实例持久化,此为同步接口。

参数:

参数名类型必填说明
keystring要删除的存储key名称,不能为空。

示例代码: 

dataPreferences.deleteSync('startup');
flush

flush(callback: AsyncCallback<void>): void

将缓存的Preferences实例中的数据异步存储到用户首选项的持久化文件中,使用callback异步回调。

参数:

参数名类型必填说明
callbackAsyncCallback<void>

示例代码: 

import { BusinessError } from '@kit.BasicServicesKit';dataPreferences.flush((err: BusinessError) => {if (err) {console.error("Failed to flush. code =" + err.code + ", message =" + err.message);return;}console.info("Succeeded in flushing.");
})
let promise = dataPreferences.flush();
promise.then(() => {console.info("Succeeded in flushing.");
}).catch((err: BusinessError) => {console.error("Failed to flush. code =" + err.code + ", message =" + err.message);
})
on('change')

on(type: 'change', callback: Callback<string>): void

订阅数据变更,订阅的Key的值发生变更后,在执行flush方法后,触发callback回调。

当调用removePreferencesFromCache或者deletePreferences后,订阅的数据变更会主动取消订阅,在重新getPreferences后需要重新订阅数据变更。

参数:

参数名类型必填说明
typestring事件类型,固定值'change',表示数据变更。
callbackCallback<string>回调函数。

示例代码:

let observer = (key: string) => {console.info('The key' + key + 'changed.');
}
dataPreferences.on('change', observer);
// 数据产生变更,由'auto'变为'manual'
dataPreferences.put('startup', 'manual', (err: BusinessError) => {if (err) {console.error(`Failed to put the value of 'startup'. Code:${err.code},message:${err.message}`);return;}console.info("Succeeded in putting the value of 'startup'.");if (dataPreferences !== null) {dataPreferences.flush((err: BusinessError) => {if (err) {console.error(`Failed to flush. Code:${err.code}, message:${err.message}`);return;}console.info('Succeeded in flushing.');})}
})
on('dataChange')12+

on(type: 'dataChange', keys: Array<string>, callback: Callback<Record<string, ValueType>>): void

精确订阅数据变更,只有被订阅的key值发生变更后,在执行flush方法后,触发callback回调。

参数:

参数名类型必填说明
typestring事件类型,固定值'dataChange',表示精确的数据变更。
keysArray<string>需要订阅的key集合。
callbackCallback<Record<string, ValueType>>回调函数。回调支持返回多个键值对,其中键为发生变更的订阅key,值为变更后的数据:支持number、string、boolean、Array<number>、Array<string>、Array<boolean>、Uint8Array、object类型。
import { BusinessError } from '@kit.BasicServicesKit';let observer = (data: Record<string, preferences.ValueType>) => {for (const keyValue of Object.entries(data)) {console.info(`observer : ${keyValue}`)}console.info("The observer called.")
}
let keys = ['name', 'age']
dataPreferences.on('dataChange', keys, observer);
dataPreferences.putSync('name', 'xiaohong');
dataPreferences.putSync('weight', 125);
dataPreferences.flush((err: BusinessError) => {if (err) {console.error("Failed to flush. Cause: " + err);return;}console.info("Succeeded in flushing.");
})
off('change')

off(type: 'change', callback?: Callback<string>): void

取消订阅数据变更。

参数:

参数名类型必填说明
typestring事件类型,固定值'change',表示数据变更。
callbackCallback<string>

示例代码:

import { BusinessError } from '@kit.BasicServicesKit';let observer = (key: string) => {console.info("The key " + key + " changed.");
}
dataPreferences.on('change', observer);
dataPreferences.putSync('startup', 'auto');
dataPreferences.flush((err: BusinessError) => {if (err) {console.error("Failed to flush. Cause: " + err);return;}console.info("Succeeded in flushing.");
})
dataPreferences.off('change', observer);
preferences.deletePreferences10+

deletePreferences(context: Context, options: Options, callback: AsyncCallback<void>): void

从缓存中移出指定的Preferences实例,若Preferences实例有对应的持久化文件,则同时删除其持久化文件。使用callback异步回调。

调用该接口后,不建议再使用旧的Preferences实例进行数据操作,否则会出现数据一致性问题,应将Preferences实例置为null,系统将会统一回收。

不支持该接口与preference其他接口并发调用。

参数:

参数名类型必填说明
contextContext

应用上下文。

FA模型的应用Context定义见Context。

Stage模型的应用Context定义见Context。

optionsOptions与Preferences实例相关的配置选项。
callbackAsyncCallback<void>回调函数。当移除成功,err为undefined,否则为错误对象。

示例代码:

import { UIAbility } from '@kit.AbilityKit';
import { BusinessError } from '@kit.BasicServicesKit';
import { window } from '@kit.ArkUI';class EntryAbility extends UIAbility {onWindowStageCreate(windowStage: window.WindowStage) {let options: preferences.Options = { name: 'myStore' };preferences.deletePreferences(this.context, options, (err: BusinessError) => {if (err) {console.error("Failed to delete preferences. code =" + err.code + ", message =" + err.message);return;}console.info("Succeeded in deleting preferences.");})}
}

 用户首选项开发流程

 1. 导入模块

import { preferences } from '@kit.ArkData';

2. 获取preferences实例

import { UIAbility } from '@kit.AbilityKit';
import { window } from '@kit.ArkUI';let dataPreferences: preferences.Preferences | null = null;class EntryAbility extends UIAbility {onWindowStageCreate(windowStage: window.WindowStage) {let options: preferences.Options = { name: 'myStore' };dataPreferences = preferences.getPreferencesSync(this.context, options);}
}

3. 保存数据

dataPreferences.putSync('startup', 'auto');

4. 读取数据

dataPreferences.getSync('startup', 'default');

5. 数据持久化

import { BusinessError } from '@kit.BasicServicesKit';dataPreferences.flush((err: BusinessError) => {if (err) {console.error("Failed to flush. code =" + err.code + ", message =" + err.message);return;}console.info("Succeeded in flushing.");
})

用户首选项开发实践

用户首选项开发实践文档华为开发者学堂https://developer.huawei.com/consumer/cn/training/course/slightMooc/C101717498132814493

关系型数据库使用 

关系型数据库简介

关系型数据库基于SQLite组件,适用于存储包含复杂关系数据的场景。关系型数据库对应用提供通用的操作接口,底层使用SQLite作为持久化存储引擎,支持SQLite具有的数据库特性,包括但不限于事务、索引、视图、触发器、外键、参数化查询和预编译SQL语句。

 关系型数据库主要API

relationalStore.getRdbStore

getRdbStore(context: Context, config: StoreConfig, callback: AsyncCallback<RdbStore>): void

获得一个相关的RdbStore,操作关系型数据库,用户可以根据自己的需求配置RdbStore的参数,然后通过RdbStore调用相关接口可以执行相关的数据操作,使用callback异步回调。

当用非加密方式打开一个已有的加密数据库时,会返回错误码14800011,表示数据库损坏。此时用加密方式可以正常打开该数据库。

getRdbStore目前不支持多线程并发操作。

参数:

参数名类型必填说明
contextContext

应用的上下文。

FA模型的应用Context定义见Context。

Stage模型的应用Context定义见Context。

configStoreConfig与此RDB存储相关的数据库配置。
callbackAsyncCallback<RdbStore>指定callback回调函数,返回RdbStore对象。
示例代码:
import { UIAbility } from '@kit.AbilityKit';
import { window } from '@kit.ArkUI';
import { BusinessError } from '@kit.BasicServicesKit';let store: relationalStore.RdbStore | undefined = undefined;class EntryAbility extends UIAbility {onWindowStageCreate(windowStage: window.WindowStage) {const STORE_CONFIG: relationalStore.StoreConfig = {name: "RdbTest.db",securityLevel: relationalStore.SecurityLevel.S1};relationalStore.getRdbStore(this.context, STORE_CONFIG, (err: BusinessError, rdbStore: relationalStore.RdbStore) => {store = rdbStore;if (err) {console.error(`Get RdbStore failed, code is ${err.code},message is ${err.message}`);return;}console.info('Get RdbStore successfully.');})}
}
executeSql10+

executeSql(sql: string, callback: AsyncCallback<void>):void

执行包含指定参数但不返回值的SQL语句,语句中的各种表达式和操作符之间的关系操作符号不超过1000个,使用callback异步回调。

此接口不支持执行查询、附加数据库和事务操作,可以使用querySql、query、attach、beginTransaction、commit等接口代替。

不支持分号分隔的多条语句。

参数:

参数名类型必填说明
sqlstring指定要执行的SQL语句。
callbackAsyncCallback<void>指定callback回调函数。

示例代码:

const SQL_DELETE_TABLE = "DELETE FROM test WHERE name = 'zhangsan'"if(store != undefined) {(store as relationalStore.RdbStore).executeSql(SQL_DELETE_TABLE, (err) => {if (err) {console.error(`ExecuteSql failed, code is ${err.code},message is ${err.message}`);return;}console.info('Delete table done.');})
}
insert

insert(table: string, values: ValuesBucket, callback: AsyncCallback<number>):void

向目标表中插入一行数据,使用callback异步回调。由于共享内存大小限制为2Mb,因此单条数据的大小需小于2Mb,否则会查询失败。

参数:

参数名类型必填说明
tablestring指定的目标表名。
valuesValuesBucket表示要插入到表中的数据行。
callbackAsyncCallback<number>指定callback回调函数。如果操作成功,返回行ID;否则返回-1。

 示例代码:

let value1 = "Lisa";
let value2 = 18;
let value3 = 100.5;
let value4 = new Uint8Array([1, 2, 3, 4, 5]);// 以下三种方式可用
const valueBucket1: relationalStore.ValuesBucket = {'NAME': value1,'AGE': value2,'SALARY': value3,'CODES': value4,
};
const valueBucket2: relationalStore.ValuesBucket = {NAME: value1,AGE: value2,SALARY: value3,CODES: value4,
};
const valueBucket3: relationalStore.ValuesBucket = {"NAME": value1,"AGE": value2,"SALARY": value3,"CODES": value4,
};if(store != undefined) {(store as relationalStore.RdbStore).insert("EMPLOYEE", valueBucket1, (err: BusinessError, rowId: number) => {if (err) {console.error(`Insert is failed, code is ${err.code},message is ${err.message}`);return;}console.info(`Insert is successful, rowId = ${rowId}`);})
}
update

update(values: ValuesBucket, predicates: RdbPredicates, callback: AsyncCallback<number>):void

根据RdbPredicates的指定实例对象更新数据库中的数据,使用callback异步回调。由于共享内存大小限制为2Mb,因此单条数据的大小需小于2Mb,否则会查询失败。

参数:

参数名类型必填说明
valuesValuesBucketvalues指示数据库中要更新的数据行。键值对与数据库表的列名相关联。
predicatesRdbPredicatesRdbPredicates的实例对象指定的更新条件。
callbackAsyncCallback<number>指定的callback回调方法。返回受影响的行数。

 示例代码:

let value1 = "Rose";
let value2 = 22;
let value3 = 200.5;
let value4 = new Uint8Array([1, 2, 3, 4, 5]);// 以下三种方式可用
const valueBucket1: relationalStore.ValuesBucket = {'NAME': value1,'AGE': value2,'SALARY': value3,'CODES': value4,
};
const valueBucket2: relationalStore.ValuesBucket = {NAME: value1,AGE: value2,SALARY: value3,CODES: value4,
};
const valueBucket3: relationalStore.ValuesBucket = {"NAME": value1,"AGE": value2,"SALARY": value3,"CODES": value4,
};let predicates = new relationalStore.RdbPredicates("EMPLOYEE");
predicates.equalTo("NAME", "Lisa");
if(store != undefined) {(store as relationalStore.RdbStore).update(valueBucket1, predicates,(err, rows) => {if (err) {console.error(`Updated failed, code is ${err.code},message is ${err.message}`);return;}console.info(`Updated row count: ${rows}`);})
}

delete

delete(predicates: RdbPredicates, callback: AsyncCallback<number>):void

根据RdbPredicates的指定实例对象从数据库中删除数据,使用callback异步回调。

参数:

参数名类型必填说明
predicatesRdbPredicatesRdbPredicates的实例对象指定的删除条件。
callbackAsyncCallback<number>指定callback回调函数。返回受影响的行数。

 示例代码:

let predicates = new relationalStore.RdbPredicates("EMPLOYEE");
predicates.equalTo("NAME", "Lisa");
if(store != undefined) {(store as relationalStore.RdbStore).delete(predicates, (err, rows) => {if (err) {console.error(`Delete failed, code is ${err.code},message is ${err.message}`);return;}console.info(`Delete rows: ${rows}`);})
}
query10+

query(predicates: RdbPredicates, callback: AsyncCallback<ResultSet>):void

根据指定条件查询数据库中的数据,使用callback异步回调。由于共享内存大小限制为2Mb,因此单条数据的大小需小于2Mb,否则会查询失败。

参数:

参数名类型必填说明
predicatesRdbPredicatesRdbPredicates的实例对象指定的查询条件。
callbackAsyncCallback<ResultSet>指定callback回调函数。如果操作成功,则返回ResultSet对象。
let predicates = new relationalStore.RdbPredicates("EMPLOYEE");
predicates.equalTo("NAME", "Rose");
if(store != undefined) {(store as relationalStore.RdbStore).query(predicates, (err, resultSet) => {if (err) {console.error(`Query failed, code is ${err.code},message is ${err.message}`);return;}console.info(`ResultSet column names: ${resultSet.columnNames}, column count: ${resultSet.columnCount}`);// resultSet是一个数据集合的游标,默认指向第-1个记录,有效的数据从0开始。while (resultSet.goToNextRow()) {const id = resultSet.getLong(resultSet.getColumnIndex("ID"));const name = resultSet.getString(resultSet.getColumnIndex("NAME"));const age = resultSet.getLong(resultSet.getColumnIndex("AGE"));const salary = resultSet.getDouble(resultSet.getColumnIndex("SALARY"));console.info(`id=${id}, name=${name}, age=${age}, salary=${salary}`);}// 释放数据集的内存,若不释放可能会引起fd泄露与内存泄露resultSet.close();})
}
relationalStore.deleteRdbStore10+

deleteRdbStore(context: Context, config: StoreConfig, callback: AsyncCallback<void>): void

使用指定的数据库文件配置删除数据库,使用callback异步回调。

删除成功后,建议将数据库对象置为null。若数据库文件处于公共沙箱目录下,则删除数据库时必须使用该接口,当存在多个进程操作同一个数据库的情况,建议向其他进程发送数据库删除通知使其感知并处理。建立数据库时,若在StoreConfig中配置了自定义路径,则必须调用此接口进行删库。 

参数:

参数名类型必填说明
contextContext

应用的上下文。

FA模型的应用Context定义见Context。

Stage模型的应用Context定义见Context。

configStoreConfig与此RDB存储相关的数据库配置。
callbackAsyncCallback<void>指定callback回调函数。

示例代码:

import { UIAbility } from '@kit.AbilityKit';
import { window } from '@kit.ArkUI';
import { BusinessError } from '@kit.BasicServicesKit';let store: relationalStore.RdbStore | undefined = undefined;class EntryAbility extends UIAbility {onWindowStageCreate(windowStage: window.WindowStage){const STORE_CONFIG: relationalStore.StoreConfig = {name: "RdbTest.db",securityLevel: relationalStore.SecurityLevel.S1};relationalStore.deleteRdbStore(this.context, STORE_CONFIG, (err: BusinessError) => {if (err) {console.error(`Delete RdbStore failed, code is ${err.code},message is ${err.message}`);return;}store = undefined;console.info('Delete RdbStore successfully.');})}
}
备份数据库
if (store !== undefined) {// "Backup.db"为备份数据库文件名,默认在RdbStore同路径下备份。也可指定路径:customDir + "backup.db"(store as relationalStore.RdbStore).backup("Backup.db", (err: BusinessError) => {if (err) {console.error(`Failed to backup RdbStore. Code:${err.code}, message:${err.message}`);return;}console.info(`Succeeded in backing up RdbStore.`);})
}
从备份数据库中恢复数据
if (store !== undefined) {(store as relationalStore.RdbStore).restore("Backup.db", (err: BusinessError) => {if (err) {console.error(`Failed to restore RdbStore. Code:${err.code}, message:${err.message}`);return;}console.info(`Succeeded in restoring RdbStore.`);})
}

关系型数据库开发实践 

关系型数据库开发实践华为开发者学堂https://developer.huawei.com/consumer/cn/training/course/slightMooc/C101717498132814493 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/68812.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

win10部署本地deepseek-r1,chatbox,deepseek联网(谷歌网页插件Page Assist)

win10部署本地deepseek-r1&#xff0c;chatbox&#xff0c;deepseek联网&#xff08;谷歌网页插件Page Assist&#xff09; 前言一、本地部署DeepSeek-r1step1 安装ollamastep2 下载deepseek-r1step2.1 找到模型deepseek-r1step2.2 cmd里粘贴 后按回车&#xff0c;进行下载 ste…

5.3.2 软件设计原则

文章目录 抽象模块化信息隐蔽与独立性衡量 软件设计原则&#xff1a;抽象、模块化、信息隐蔽。 抽象 抽象是抽出事物本质的共同特性。过程抽象是指将一个明确定义功能的操作当作单个实体看待。数据抽象是对数据的类型、操作、取值范围进行定义&#xff0c;然后通过这些操作对数…

4-图像梯度计算

文章目录 4.图像梯度计算(1)Sobel算子(2)梯度计算方法(3)Scharr与Laplacian算子4.图像梯度计算 (1)Sobel算子 图像梯度-Sobel算子 Sobel算子是一种经典的图像边缘检测算子,广泛应用于图像处理和计算机视觉领域。以下是关于Sobel算子的详细介绍: 基本原理 Sobel算子…

图漾相机-ROS2-SDK-Ubuntu版本编译(新版本)

文章目录 前言1.Camport ROS2 SDK 介绍1.1 Camport ROS2 SDK源文件介绍1.2 Camport ROS2 SDK工作流程1.2.1 包含头文件1.2.2 2 初始化 ROS 2 节点1.2.3 创建节点对象1.2.4 创建发布者对象并实现发布逻辑1.2.5 启动 ROS 2 1.3 ROS2 SDK环境配置与编译1.3.1 Ubuntu 20.04 下ROS2 …

海外问卷调查渠道查:企业经营的利器

一、海外问卷调查的基本概念 市场&#xff1a;市场主要由需求者和供给者组成的一种经济关系&#xff0c;主要是商品和服务的交换的一种方式和手段&#xff0c;市场类型按不同标准来划分。按地域划分&#xff0c;则分为国内市场和国际市场&#xff0c;按照产品类型划分&#xf…

向上调整算法(详解)c++

算法流程&#xff1a; 与⽗结点的权值作⽐较&#xff0c;如果⽐它⼤&#xff0c;就与⽗亲交换&#xff1b; 交换完之后&#xff0c;重复 1 操作&#xff0c;直到⽐⽗亲⼩&#xff0c;或者换到根节点的位置 这里为什么插入85完后合法&#xff1f; 我们插入一个85&#xff0c;…

LeetCode题练习与总结:根据二叉树创建字符串--606

一、题目描述 给你二叉树的根节点 root &#xff0c;请你采用前序遍历的方式&#xff0c;将二叉树转化为一个由括号和整数组成的字符串&#xff0c;返回构造出的字符串。 空节点使用一对空括号对 "()" 表示&#xff0c;转化后需要省略所有不影响字符串与原始二叉树…

人工智能入门课【手写自注意力机制】

原理 自注意力&#xff08;Self-Attention&#xff09;是一种强大的机制&#xff0c;广泛应用于自然语言处理、计算机视觉等领域&#xff0c;尤其是在Transformer架构中发挥了关键作用。它的核心思想是让模型能够动态地关注输入序列中不同位置之间的关系&#xff0c;从而更好地…

gentoo 中更改$PS1

现象&#xff1a;gentoo linux Xfce桌面&#xff0c;Terminal 终端&#xff0c;当进入很深的目录时&#xff0c;终端提示符会很长&#xff0c;不方便。如下图所示&#xff1a; 故需要修改$PS1 gentoo 默认的 PS1 在 /etc/bash/bashrc .d/10-gentoo-color.bash中定义&a…

安全防护前置

就业概述 网络安全工程师/安全运维工程师/安全工程师 安全架构师/安全专员/研究院&#xff08;数学要好&#xff09; 厂商工程师&#xff08;售前/售后&#xff09; 系统集成工程师&#xff08;所有计算机知识都要会一点&#xff09; 学习目标 前言 网络安全事件 蠕虫病毒--&…

【自然语言处理(NLP)】深度学习架构:Transformer 原理及代码实现

文章目录 介绍Transformer核心组件架构图编码器&#xff08;Encoder&#xff09;解码器&#xff08;Decoder&#xff09; 优点应用代码实现导包基于位置的前馈网络残差连接后进行层规范化编码器 Block编码器解码器 Block解码器训练预测 个人主页&#xff1a;道友老李 欢迎加入社…

mysqldump+-binlog增量备份

注意&#xff1a;二进制文件删除必须使用help purge 不可用rm -f 会崩 一、概念 增量备份&#xff1a;仅备份上次备份以后变化的数据 差异备份&#xff1a;仅备份上次完全备份以后变化的数据 完全备份&#xff1a;顾名思义&#xff0c;将数据完全备份 其中&#xff0c;…

cf集合***

当周cf集合&#xff0c;我也不知道是不是当周的了&#xff0c;麻了&#xff0c;下下周争取写到e补f C. Kevin and Puzzle&#xff08;999&#xff09; 题解&#xff1a;一眼动态规划&#xff0c;但是具体这个状态应该如何传递呢&#xff1f; 关键点&#xff1a;撒谎的人不相…

大模型概述(方便不懂技术的人入门)

1 大模型的价值 LLM模型对人类的作用&#xff0c;就是一个百科全书级的助手。有多么地百科全书&#xff0c;则用参数的量来描述&#xff0c; 一般地&#xff0c;大模型的参数越多&#xff0c;则该模型越好。例如&#xff0c;GPT-3有1750亿个参数&#xff0c;GPT-4可能有超过1万…

Linux-CentOS的yum源

1、什么是yum yum是CentOS的软件仓库管理工具。 2、yum的仓库 2.1、yum的远程仓库源 2.1.1、国内仓库 国内较知名的网络源(aliyun源&#xff0c;163源&#xff0c;sohu源&#xff0c;知名大学开源镜像等) 阿里源:https://opsx.alibaba.com/mirror 网易源:http://mirrors.1…

简单易懂的倒排索引详解

文章目录 简单易懂的倒排索引详解一、引言 简单易懂的倒排索引详解二、倒排索引的基本结构三、倒排索引的构建过程四、使用示例1、Mapper函数2、Reducer函数 五、总结 简单易懂的倒排索引详解 一、引言 倒排索引是一种广泛应用于搜索引擎和大数据处理中的数据结构&#xff0c;…

Deepseek智能AI--国产之光

以下是以每个核心问题为独立章节的高质量技术博客整理&#xff0c;采用学术级论述框架并增强可视化呈现&#xff1a; 大型语言模型深度解密&#xff1a;从哲学思辨到系统工程 目录 当服务器关闭&#xff1a;AI的终极告解与技术隐喻情感计算&#xff1a;图灵测试未触及的认知深…

如何用ChatGPT批量生成seo原创文章?TXT格式文章能否批量生成!

如何用ChatGPT批量生成文章&#xff1f;这套自动化方案或许适合你 在内容创作领域&#xff0c;效率与质量的天平往往难以平衡——直到AI写作技术出现。近期观察到&#xff0c;越来越多的创作者开始借助ChatGPT等AI模型实现批量文章生成&#xff0c;但如何系统化地运用这项技术…

【回溯+剪枝】组合问题!

文章目录 77. 组合解题思路&#xff1a;回溯剪枝优化 77. 组合 77. 组合 ​ 给定两个整数 n 和 k&#xff0c;返回范围 [1, n] 中所有可能的 k 个数的组合。 ​ 你可以按 任何顺序 返回答案。 示例 1&#xff1a; 输入&#xff1a;n 4, k 2 输出&#xff1a; [[2,4],[3,…

04树 + 堆 + 优先队列 + 图(D1_树(D7_B+树(B+)))

目录 一、基本介绍 二、重要概念 非叶节点 叶节点 三、阶数 四、基本操作 等值查询(query) 范围查询(rangeQuery) 更新(update) 插入(insert) 删除(remove) 五、知识小结 一、基本介绍 B树是一种树数据结构&#xff0c;通常用于数据库和操作系统的文件系统中。 B树…