Java与鸿蒙数据存储深度整合:6种高效方案全面解析

第一章:Java与鸿蒙数据存储整合概述

在现代移动应用开发中,跨平台数据管理能力成为提升用户体验和系统性能的关键。随着华为鸿蒙操作系统(HarmonyOS)的持续演进,Java作为广泛应用于Android生态的编程语言,其与鸿蒙系统在数据存储层面的整合变得尤为重要。尽管鸿蒙原生推荐使用ArkTS进行开发,但在已有Java技术栈的企业迁移场景中,通过适配层实现Java与鸿蒙分布式数据管理服务的协同,已成为一种可行的技术路径。

数据存储模型的兼容性设计

鸿蒙系统提供了多种数据存储方案,包括轻量级数据存储(Preferences)、关系型数据库(RDB)以及分布式数据服务(Distributed Data Service)。Java端可通过JNI或RESTful桥接方式访问这些能力。例如,在使用Preferences时,Java可通过封装后的Native接口写入键值对:

// 通过JNI调用鸿蒙Preferences API保存用户设置
public void saveSetting(String key, String value) {
    nativeSaveToPreferences(key, value); // 原生方法映射至鸿蒙侧实现
}
该方法需在C++层对接OHOS::NativePreferences接口,确保类型映射与线程安全。

跨设备数据同步机制

鸿蒙的分布式能力允许数据在可信设备间自动同步。Java应用若需参与此生态,必须注册到统一的设备信任链中,并遵循以下流程:
  1. 调用Account Manager获取用户分布式ID
  2. 通过DeviceManager发现周边可信设备
  3. 使用DistributedDataManager注册数据监听回调
存储方式适用场景Java接入方式
Preferences配置信息存储JNI桥接
RDB结构化数据管理Socket代理服务
Distributed Data多端实时同步REST API封装
graph TD A[Java App] --> B(JNI Bridge) B --> C{HarmonyOS Data Service} C --> D[Preferences] C --> E[RDB] C --> F[Distributed KV Store]

第二章:基于Preferences的轻量级数据存储方案

2.1 Preferences机制原理与适用场景分析

Preferences是一种轻量级的数据存储机制,常用于保存应用的配置参数或用户偏好设置。其核心原理是通过键值对(Key-Value)形式将数据持久化到本地文件系统,支持快速读写操作。
数据结构与API设计
以Java为例,Preferences API提供层级化的节点结构,便于组织管理:
Preferences prefs = Preferences.userNodeForPackage(MyApp.class);
prefs.put("username", "alice");
prefs.putInt("retry_count", 3);
String user = prefs.get("username", "default");
上述代码中,userNodeForPackage获取用户专属节点,put和get实现字符串存储,getInt支持类型化读取,默认值机制增强容错性。
适用场景对比
场景是否推荐原因
用户主题设置✅ 推荐小数据、频繁读取、低写入延迟
缓存大量网络数据❌ 不推荐容量限制,非高效批量访问

2.2 Java侧实现配置项持久化操作实践

在Java应用中,配置项的持久化是保障系统可维护性和动态调整能力的关键环节。通过合理的抽象与封装,可以实现配置数据的统一管理。
基于Properties文件的持久化方案
使用标准的java.util.Properties类结合文件流操作,可将配置写入本地文件系统。
Properties props = new Properties();
props.setProperty("server.port", "8080");
try (FileOutputStream fos = new FileOutputStream("config.properties")) {
    props.store(fos, "Application Configuration");
}
上述代码将键值对写入config.properties文件,store方法第二个参数为文件注释。该方式适用于静态配置存储,具备良好的可读性与跨平台支持。
持久化策略对比
  • 文件存储:简单易用,适合小型应用
  • 数据库存储:支持复杂查询与事务,适用于分布式环境
  • 远程配置中心:如Nacos、Apollo,提供热更新与版本控制

2.3 鸿蒙端读写Preferences的API调用详解

在鸿蒙应用开发中,`Preferences` 提供轻量级数据持久化能力,适用于保存用户配置、状态标志等简单键值对数据。
获取Preferences实例
通过 `context` 获取 `PreferencesHelper` 实例,需指定文件名:

import PreferencesHelper from '@ohos.data.preferences';

const PREFERENCES_NAME = 'user_settings';
let preferences;

async function initPreferences(context) {
  const prefHelper = await PreferencesHelper.getPreferences(context, PREFERENCES_NAME);
  preferences = prefHelper;
}
`getPreferences()` 异步返回 `Preferences` 实例,后续操作需等待初始化完成。
数据读写操作
支持基本类型读写,如字符串、布尔值、数字等:

// 写入数据
await preferences.put('username', 'alice');
await preferences.put('isLoggedIn', true);

// 读取数据
const name = await preferences.get('username', 'default');
const loggedIn = await preferences.get('isLoggedIn', false);
`put(key, value)` 将数据写入缓存,`get(key, defaultValue)` 获取值或返回默认值。所有操作均为异步,需使用 `await` 确保执行顺序。

2.4 跨设备同步中的性能优化策略

数据同步机制
跨设备同步的核心在于高效的数据变更捕获与传输。采用增量同步替代全量同步,可显著减少网络负载。通过维护本地变更日志(Change Log),仅上传自上次同步后的差异数据。
  • 使用时间戳或版本向量识别变更
  • 客户端缓存元信息以减少重复请求
  • 服务端支持范围查询与分页响应
网络传输优化
type SyncRequest struct {
    DeviceID   string    `json:"device_id"`
    LastSync   int64     `json:"last_sync"`  // 上次同步时间戳
    Changes    []Change  `json:"changes"`    // 增量变更列表
}
该结构体用于封装增量同步请求。LastSync字段帮助服务端筛选变更记录,避免全表扫描;批量提交Changes降低通信往返次数。
资源调度策略
利用设备空闲时段执行同步任务,结合电池状态与网络类型动态调整频率,平衡实时性与能耗。

2.5 典型应用场景与代码示例解析

实时数据同步机制
在分布式系统中,配置中心常用于实现服务实例间的实时配置同步。当配置发生变更时,客户端通过长轮询或WebSocket机制即时获取最新配置。
// Go语言实现的配置监听示例
watcher := configClient.NewWatcher("/app/config")
for {
    select {
    case event := <-watcher.Events():
        if event.Type == config.Update {
            log.Printf("配置更新: %s = %s", event.Key, event.Value)
            reloadAppConfig(event.Value) // 重新加载业务逻辑
        }
    }
}
上述代码通过事件监听模式捕获配置变化,event.Type判断操作类型,reloadAppConfig触发本地配置热更新,避免重启服务。
多环境配置管理
使用标签(tag)或命名空间隔离开发、测试、生产环境配置,通过统一接口按需拉取,提升运维安全性与灵活性。

第三章:关系型数据库SQLite深度集成

3.1 SQLite在鸿蒙系统中的架构适配解析

鸿蒙系统采用分布式架构设计,SQLite作为轻量级嵌入式数据库,在此环境中需适配多设备协同与安全隔离需求。
运行模式调整
SQLite默认单进程模式被扩展为支持多实例隔离运行,每个应用沙箱内独立部署数据库实例,保障数据安全性。
接口封装层优化
通过新增HAL(硬件抽象层)接口,SQLite的文件I/O操作被重定向至鸿蒙的分布式文件系统(DFinder),实现跨设备数据访问透明化。

// 示例:自定义VFS模块注册
sqlite3_vfs_register(&harmony_vfs, 1);
该代码注册了适配鸿蒙VFS(虚拟文件系统)的模块,harmony_vfs封装了对DFinder的调用,使SQLite可无缝读写分布式存储路径。
  • 支持ACID特性的本地事务处理
  • 增强WAL模式以适应低时延场景
  • 集成HAP包内的自动数据库版本管理

3.2 Java层通过JDBC模拟实现数据交互

在Java应用中,JDBC(Java Database Connectivity)是实现数据库交互的核心API。通过加载数据库驱动、建立连接、执行SQL语句并处理结果集,可完成完整的数据操作流程。
基本连接流程
  • 加载驱动类:Class.forName("com.mysql.cj.jdbc.Driver")
  • 获取连接:DriverManager.getConnection(url, user, password)
  • 创建Statement对象执行查询或更新
  • 处理ResultSet结果集
代码示例

// 建立数据库连接并查询用户信息
String url = "jdbc:mysql://localhost:3306/testdb";
Connection conn = DriverManager.getConnection(url, "root", "password");
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT id, name FROM users");

while (rs.next()) {
    System.out.println("ID: " + rs.getInt("id") + ", Name: " + rs.getString("name"));
}
上述代码中,getConnection 方法通过URL定位数据库实例,executeQuery 返回只读结果集,逐行遍历使用 rs.getXXX(column) 获取字段值,体现了JDBC标准的数据提取机制。

3.3 多线程环境下的数据库访问安全设计

在多线程应用中,多个线程并发访问数据库可能引发数据竞争、脏读或更新丢失等问题。为确保数据一致性与完整性,必须采用合理的同步机制与连接管理策略。
连接池与线程安全
使用数据库连接池(如HikariCP)可有效管理连接生命周期,避免频繁创建销毁连接。每个线程应持有独立的数据库连接,防止共享连接导致的状态混乱。
事务隔离与锁机制
通过设置合适的事务隔离级别(如可重复读),结合行级锁或乐观锁,可减少并发冲突。以下示例展示Go中使用互斥锁保护共享数据库句柄:

var mu sync.Mutex
db, _ := sql.Open("mysql", dsn)

func SafeQuery(id int) *sql.Row {
    mu.Lock()
    defer mu.Unlock()
    return db.QueryRow("SELECT * FROM users WHERE id = ?", id)
}
上述代码通过sync.Mutex确保同一时间仅一个线程执行查询,防止连接状态竞争。但粒度较粗,适用于低并发场景。高并发下推荐使用连接池配合无状态操作。

第四章:分布式数据管理与跨平台协同

4.1 分布式数据服务DDS核心机制剖析

数据同步机制
分布式数据服务(DDS)通过多节点间的数据副本同步保障一致性。其核心采用基于Gossip协议的增量状态传播,周期性地将本地变更扩散至集群。
// 示例:Gossip消息传播逻辑
func (n *Node) Gossip(state map[string]Version) {
    peer := n.RandomPeer()
    diff := ComputeDelta(n.LocalState, state)
    if len(diff) > 0 {
        peer.SendSync(diff) // 发送差异数据
    }
}
上述代码实现节点间状态比对与差异推送,Version标识数据版本,ComputeDelta计算本地与远端状态差异,仅传输变更部分,降低网络开销。
一致性模型
DDS支持最终一致性与读写多数派确认(Quorum R/W),通过可调一致性级别平衡性能与数据安全。配置如下:
一致性等级写要求读要求
最终一致w=1r=1
强一致w=N/2+1r=N/2+1

4.2 Java应用接入鸿蒙分布式数据库实践

在Java应用中接入鸿蒙分布式数据库,需引入HMS Core的Distributed Data Service(DDS)SDK。首先,在项目中配置依赖并申请必要权限。
初始化数据库实例

// 获取分布式数据库实例
KvManagerFactory kvManagerFactory = KvManagerFactory.getInstance();
KvManagerConfig config = new KvManagerConfig(context);
KvManager kvManager = kvManagerFactory.createKvManager(config);
上述代码创建了一个分布式键值管理器,context为应用上下文,用于定位用户数据空间。
数据同步机制
通过KvStore实现跨设备数据同步:
  • 使用SINGLE_VERSION模式确保数据一致性
  • 注册KvStoreObserver监听远程变更
  • 调用sync()方法触发手动同步
参数说明
deviceA本地设备节点
deviceB目标同步设备

4.3 数据一致性与冲突解决策略实现

在分布式系统中,数据一致性保障依赖于合理的同步机制与冲突解决策略。当多个节点并发修改同一数据时,必须引入版本控制和协调算法来避免数据错乱。
基于向量时钟的冲突检测
使用向量时钟记录事件发生顺序,可精确判断数据更新是否存在因果关系:
// 向量时钟结构
type VectorClock map[string]int

func (vc VectorClock) LessThan(other VectorClock) bool {
    equal := true
    for k, v := range other {
        if vc[k] > v {
            return false
        }
        if vc[k] != v {
            equal = false
        }
    }
    return !equal
}
该实现通过比较各节点时钟值判断事件先后,若无法确定顺序,则标记为冲突需后续处理。
常见解决策略对比
策略适用场景优势
最后写入优先低冲突频率实现简单
客户端合并结构化数据保留用户意图
CRDTs高并发环境无锁自动收敛

4.4 跨终端设备的数据共享实战案例

在现代应用开发中,跨终端数据同步已成为核心需求。以一款笔记应用为例,用户在手机端创建笔记后,需在平板和PC端实时查看更新。
数据同步机制
采用基于WebSocket的实时通信与后端数据库变更日志(Change Feed)结合的方式,确保各终端及时获取最新数据。

// WebSocket监听服务端推送
socket.on('note-updated', (data) => {
  const { id, content, timestamp } = data;
  // 本地状态更新前校验时间戳,避免覆盖新版本
  if (timestamp > localNotes[id]?.version) {
    localNotes[id] = { content, version: timestamp };
  }
});
上述代码实现接收服务端推送的笔记更新事件,并通过时间戳比较防止本地数据被旧版本覆盖,保障一致性。
设备间冲突处理策略
  • 采用最后写入胜出(LWW)策略,结合设备时钟同步校准
  • 关键操作生成操作日志,支持增量同步与离线补传

第五章:未来趋势与生态融合展望

云原生与边缘计算的深度协同
随着物联网设备数量激增,边缘节点对实时性处理的需求推动了云原生架构向边缘延伸。Kubernetes 的轻量化发行版如 K3s 已广泛部署于边缘服务器,实现统一编排。
  • 边缘侧容器化运行时提升资源利用率
  • 服务网格(如 Istio)支持跨云-边的服务发现与流量治理
  • OpenYurt 和 KubeEdge 提供原生边缘管理能力
AI 驱动的自动化运维演进
AIOps 正在重构 DevOps 流程。通过机器学习模型分析日志、指标和链路数据,可实现故障预测与自愈。某金融企业采用 Prometheus + LSTM 模型,将磁盘故障预测准确率提升至 92%。

# 示例:使用 PyTorch 构建简易指标异常检测模型
import torch.nn as nn

class AnomalyLSTM(nn.Module):
    def __init__(self, input_size=1, hidden_layer_size=50):
        super().__init__()
        self.hidden_layer_size = hidden_layer_size
        self.lstm = nn.LSTM(input_size, hidden_layer_size)
        self.linear = nn.Linear(hidden_layer_size, 1)
多运行时架构的普及
微服务不再局限于单一语言运行时。Dapr 等多运行时中间件通过 sidecar 模式提供状态管理、事件发布等分布式能力,降低跨语言服务集成复杂度。
特性Dapr传统微服务框架
跨语言支持✅ 原生支持受限于 SDK 实现
服务间通信基于 gRPC/HTTP 统一抽象需手动集成
[Service A] → (Sidecar) ⇄ Message Broker ⇄ (Sidecar) → [Service B] ↘ (State Store Client) → Redis/ETCD
SpringBoot+Vue+Mysql社区医院信息平台(源码+文档) SpringBoot+Vue+Mysql学生宿舍信息管理系统 WEB端软件项目(源码+文档) 项目包含:①完整源码(后端+管理后台+用户前台);②数据库脚本文件;③万字论文文档;④开题报告;⑤答辩PPT;⑥项目运行视频教程。 项目架构: B/S 架构、MVC 分层设计 技术栈: Java、MySQL、SpringBoot、MyBatis-Plus、Token 权限校验、管理后台 Vue+ElementUI+ECharts、用户前台 Layui+jQuery、Maven 构建。 一、角色设计 学生用户: 注册登录、浏览宿舍信息、查询宿舍安排、在线报修、缴费查询、失物招领、桶装水预订、评论交流、收藏等。 商家用户: 注册登录、桶装水品牌与商品信息维护、预订订单查看与处理。 维修人员: 注册登录、查看待处理报修、接单维修、填写报修处理结果与进度反馈。 管理员: 学生管理、班级管理、宿舍信息管理、宿舍安排管理、报修处理管理、缴费信息管理、卫生检查与文明宿舍管理、失物招领管理、桶装水与商家管理、维修人员管理、公告资讯与轮播图管理等。 二、前台功能模块(学生端) 1. 首页展示:轮播图、宿舍公告、最新动态推荐、常用服务快速入口 2. 宿舍信息模块:宿舍列表、楼栋与房间条件筛选、宿舍详情查看、我的宿舍安排查询 3. 在线报修模块:在线提交宿舍设施报修申请、上传故障描述、查看报修进度与维修处理结果 4. 缴费模块:水电等缴费记录查询、缴费状态查看 5. 卫生检查与文明宿舍:宿舍卫生检查结果公示、文明宿舍展示 6. 失物招领模块:失物信息发布、招领信息发布、详情查看、评论互动 7. 桶装水预订:桶装水品牌与商品浏览、在线预订、我的预订记录查询 8. 假期留宿:假期留校申请提交、申请记录查询 9. 评论与收藏:信息评论、查看他人评论、评论回复互动、收藏感兴趣的内容 10. 个人中心... 立即下载

相关推荐

数据挖掘实战:决策树 + 聚类 + 关联规则,零 Key 离线可跑(Python 源码)

数据挖掘实战包。用 Python 标准库实现 CART 风格决策树、K-Means 聚类与 Apriori 关联规则,在虚构「星河便利店」会员表和购物篮上跑通分类、分群与购物篮分析,并给出准确率、轮廓系数、支持度/置信度/提升度。零第三方依赖、零 API Key 即可离线跑通。含 4 个样例、离线冒烟、中文 README(含「使用方法」)。均为作者原创可运行源码。MIT。作者 blog.youkuaiyun.com/mtl1994

Java应用如何无缝迁移到鸿蒙系统?深度剖析底层兼容机制

掌握Java鸿蒙应用升级方案,实现旧有Java应用向鸿蒙系统的平滑迁移。依托底层兼容机制,支持无需重写的快速适配,适用于企业级应用改造与跨平台部署。兼顾性能优化与系统融合,大幅提升迁移效率,值得收藏。

Instrulink的博客 1407

产业园区如何高效对接企业技术需求与高校科研成果?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

为什么你的Java应用无法适配鸿蒙?这4个坑90%开发者都踩过

掌握Java鸿蒙应用升级方案,避开四大常见适配难题。针对系统兼容、API调用、权限配置和组件迁移提供具体解决方法,适用于传统Java应用向鸿蒙生态平滑过渡。提升适配效率,降低改造成本,值得收藏。

ProceShoal的博客 1091

国央企创新负责人如何快速掌握本地科技资源分布与匹配情况?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

国央企创新负责人如何实现科技成果的精准识别与高效筛选?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

【鸿蒙+Java跨端协同终极方案】:打造无感切换体验的7个关键技术

解决跨端协同难题,详解Java鸿蒙分布式能力集成的7大关键技术。涵盖设备发现、数据同步、任务流转等场景,实现应用无感切换与高效协同。适用于智能家居、多屏互动等应用,提升用户体验,值得收藏。

SimSolve的博客 975

从零构建智能ai语音助手:ESP32s3+Python+大语言模型实战指南

本文详细介绍了基于ESP32S3硬件和Python后端的智能语音助手系统开发指南。系统采用ESP32S3采集语音,通过WebSocket实时传输到Python后端处理,利用大语言模型实现自然语言理解和意图识别,再通过TTS合成语音返回。文章从系统架构、工作流程、技术实现(包括OPUS编码、WebSocket通信、ESP32音频处理)等方面进行了详细讲解,并提供了分阶段学习路线和常见问题解决方案。该项目展示了物联网技术与AI技术的融合应用,相比传统语音系统具有更高的灵活性和智能性,为开发者提供了完整的实现方案

Despacito0o的博客 2630

【Elasticsearch】集群配置深度解析与实践

基于Kafka+ElasticSearch+MongoDB+Redis+XXL-Job日志分析系统(学习)配置即权限:从传统开源 RBAC 框架到 SPARK 的六层数据护盾,告别改权限就要改代码的魔咒。c++&MFC 用boost.asio库写的串口功能,包含发送、异步接收、打开、重连、关闭功能。Windows下NVM保姆级指南:安装、切换版本、指定路径+淘宝镜像配置,一次搞定!第2集:技术选型的智慧:Flask vs FastAPI,GLM-4 vs GPT。

guojuan0525的博客 416

基于LabVIEW控制仪器检测与监控 --普源示波器DS1102Z-E

LabVIEW 控制普源示波器 代码实现与解释

s0101100的博客 4233

VMware 15 虚拟机安装Ubuntu 18.04

这几年在自动化、计算机之间游来游去,最近又要做机器学习相关的课题,14年做的虚拟机实在不堪重用了,OK,我们重新开始。 VMware的安装就不再赘述了,目前最新版本是15.0.2,官方下载地址: https://my.vmware.com/en/web/vmware/info/slug/desktop_end_user_computing/vmware_workstation_pro/15_0...

略懂 2万+

全栈食谱应用实战:微服务、云原生与AI Agent的整合架构

微服务架构通过将单一应用拆分为一组小型、独立的服务,实现了业务解耦与独立部署,是构建复杂、可扩展后端系统的核心范式。其技术价值在于提升了开发效率、系统弹性与可维护性。结合云原生技术,如Docker容器化与Kubernetes编排,能够实现服务的自动化部署、弹性伸缩与高效运维。这一技术组合广泛应用于电商、社交、内容平台等需要快速迭代和高可用的场景。本文聚焦于一个具体的**全栈食谱应用**,深入探讨如何将微服务、云原生与前沿的**AI Agent**技术栈进行工程化整合,为开发者构建现代化、智能化应用提供从架构

weixin_33907511的博客 479

ADS入门学习笔记——低噪声放大器(2)

1、输入匹配网络; 2、输出匹配网络;

weixin_42126696的博客 4990

APP开发教程有什么作用?三大系统教程下载核心价值指南

APP开发教程助力开发者攻克多系统适配难题 在移动互联网时代,APP开发教程为开发者提供全周期支持,涵盖Android、HarmonyOS和iOS三大系统。教程能降低入门门槛,帮助构建知识框架;提供最新技术动态,突破进阶瓶颈;通过实操案例缩短开发周期;解决多端适配问题;规避常见开发风险。针对不同系统,教程各有侧重:Android教程攻克设备兼容性,HarmonyOS教程掌握分布式技术,iOS教程契合生态规范。开发者可通过分阶段学习、针对性突破和跨系统融合,高效提升开发能力,把握行业机遇。

2601_94870834的博客 950

大模型量化技术全解析:从INT8到GPTQ/AWQ,降低部署成本实战指南

模型量化是一种通过降低神经网络权重和激活值的数据精度(如从FP16降至INT8/INT4),从而大幅减少模型内存占用和计算开销的核心模型压缩技术。其原理基于线性变换,将高精度浮点数映射到低精度整数表示,在硬件层面能利用专用低精度计算单元实现显著加速。这项技术的核心价值在于解决了大模型(如千亿参数LLM)部署时面临的高昂显存成本和推理延迟问题,使其能在消费级GPU和边缘设备上高效运行。当前,后训练量化(PTQ)因其无需重新训练的特性成为主流,衍生出GPTQ、AWQ、SmoothQuant等多种方法,广泛应用于

weixin_33804582的博客 630

Python之achatbot包语法、参数和实际应用案例

本书是一本PyTorch深度学习实战指南,分为基础(前6章)和进阶(后5章)两大部分。基础部分涵盖张量运算、神经网络、数据预处理及CNN等核心内容;进阶部分则深入图像、文本、音频建模技术,重点解析Transformer架构及大语言模型开发。全书采用"理论+实践"模式,适合从零基础到进阶的PyTorch学习者。

王国平的博客 632

UNIX下C语言编程与实践14-UNIX 文件系统格式化:磁盘分区与文件系统创建原理

基于Kafka+ElasticSearch+MongoDB+Redis+XXL-Job日志分析系统(学习)配置即权限:从传统开源 RBAC 框架到 SPARK 的六层数据护盾,告别改权限就要改代码的魔咒。c++&MFC 用boost.asio库写的串口功能,包含发送、异步接收、打开、重连、关闭功能。Windows下NVM保姆级指南:安装、切换版本、指定路径+淘宝镜像配置,一次搞定!第2集:技术选型的智慧:Flask vs FastAPI,GLM-4 vs GPT。

AA_vvt1s的博客 414

【007】C++编程必知:原码、补码、反码的全面解读

计算机存储的是数据的补码。原码:计算机中对数字的二进制定点表示方法。比如123的原码是0111 1011。无符号数:原码=反码=补码。有符号数:要分正数和负数,正数的最高位为0,负数的最高位为1。其中,正数的原码、反码、补码都是相同的;负数的反码等于原码的符号数(最高位)不变,其他位取反;补码等于反码+1。比如:-123的原码是1111 1011,反码为1000 0100,补码为1000 0101。原码、补码和反码都是用于计算机表示有符号整数的方法。

Lion_Long的博客 2920

音乐练习记录应用HarmonyOS ArkTS API 24 Stack 配合 Column 实现的进度条和柱状图组件,展示了在缺乏专用图表库时如何利用基础布局组件构建数据可视化效果

在移动互联网与智能穿戴设备高度普及的今天,"习惯养成"已经从一个模糊的自我管理理念,演变为一个可量化、可追踪、可视化的数字化产品赛道。越来越多的人希望借助手中的智能终端,把"早起、冥想、阅读、运动"这些抽象的自律行为,转化为一条条清晰的数据曲线和一张张可触摸的打卡卡片。而鸿蒙生态(HarmonyOS)凭借其跨设备协同、分布式软总线以及声明式 UI 开发框架 ArkUI,为这类注重"轻量化交互 + 即时反馈"的生活方式类应用提供了极为理想的生长土壤。本应用正是一款面向"晨间场景"深度打磨的习惯追踪工具。它聚焦

2301_79516720的博客 243

微信电脑版本不会自动下载图片吗?——没有找到解决方法。——只会默认下载doc等文件,图片不行,需要自己另存为——有什么办法解决吗?

微信电脑版本不会自动下载图片吗?——没有找到解决方法。——只会默认下载doc等文件,图片不行,需要自己另存为——有什么办法解决吗?此外,用户还可以选择将接收到的图片、视频和文件保存到指定的文件夹中。‌用户可以在微信设置中调整这一设置。

qq_15963745的博客 5088

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

【愚公系列】《数据可视化分析与实践》014-数据源(数据源介绍)

💎【数据源管理:打破数据孤岛的关键】 DataEase作为高效数据可视化工具,其核心功能围绕统一数据源管理展开,支持OLTP数据库(MySQL/Oracle)、OLAP系统(ClickHouse/Doris)、数据湖(Redshift)、API及本地文件(Excel/CSV)等多元数据接入。重点聚焦三大典型场景: 1️⃣ 本地文件:零门槛快速分析Excel/CSV数据 2️⃣ MySQL:连接主流业务数据库实现实时运营分析 3️⃣ API:动态集成外部JSON/XML数据源 通过集中配置连接信息,Data

愚公智库 7万+

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Spring Boot 缓存技术

基于Kafka+ElasticSearch+MongoDB+Redis+XXL-Job日志分析系统(学习)配置即权限:从传统开源 RBAC 框架到 SPARK 的六层数据护盾,告别改权限就要改代码的魔咒。c++&MFC 用boost.asio库写的串口功能,包含发送、异步接收、打开、重连、关闭功能。Windows下NVM保姆级指南:安装、切换版本、指定路径+淘宝镜像配置,一次搞定!第2集:技术选型的智慧:Flask vs FastAPI,GLM-4 vs GPT。

AA_ptpt5的博客 237

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Spring Boot 集成 Redis 全方位详解

基于Kafka+ElasticSearch+MongoDB+Redis+XXL-Job日志分析系统(学习)配置即权限:从传统开源 RBAC 框架到 SPARK 的六层数据护盾,告别改权限就要改代码的魔咒。c++&MFC 用boost.asio库写的串口功能,包含发送、异步接收、打开、重连、关闭功能。Windows下NVM保姆级指南:安装、切换版本、指定路径+淘宝镜像配置,一次搞定!第2集:技术选型的智慧:Flask vs FastAPI,GLM-4 vs GPT。

slngX_357zp的博客 338

【愚公系列】《移动端AI应用开发》044-基于DeepSeek的Android、iOS端应用插件开发实战(DeepSeek集成与数据传输)

文章摘要 本文介绍了如何基于DeepSeek API开发跨平台(Android/iOS)应用插件,重点围绕API集成与数据传输展开。通过代码示例演示了端到端数据流实现(请求构建、处理与响应解析)及会话状态管理方案(加密存储、SQLite数据库操作)。内容涵盖: DeepSeek API集成:封装请求模块,处理自然语言交互 数据流设计:从用户输入到API响应的高效传输逻辑 安全存储:采用Fernet加密和SQLite实现用户数据持久化 会话管理:通过唯一会话ID追踪上下文状态 适用于需要为移动应用添加智能功能

愚公智库 7177

SQLite 简介

基于Kafka+ElasticSearch+MongoDB+Redis+XXL-Job日志分析系统(学习)配置即权限:从传统开源 RBAC 框架到 SPARK 的六层数据护盾,告别改权限就要改代码的魔咒。c++&MFC 用boost.asio库写的串口功能,包含发送、异步接收、打开、重连、关闭功能。Windows下NVM保姆级指南:安装、切换版本、指定路径+淘宝镜像配置,一次搞定!第2集:技术选型的智慧:Flask vs FastAPI,GLM-4 vs GPT。

slngX_1wv5a的博客 290

springboot校园超市助购系统26449-计算机课程/毕业设计

系统开发按照软件工程的标准流程进行。需求分析阶段确定普通用户、商家用户、骑手用户、管理员这四个角色的功能界限以及交互关系。架构设计阶段采用前后端分离模式,后端用springboot框架搭建RESTful API接口,前端用微信小程序原生框架开发用户界面。根据需求分析结果创建关系型数据库,用MySQL存储用户的个人信息、商品信息、订单信息等主要业务数据。系统实现阶段将用户认证、商品管理、购物车、订单处理、配送追踪、售后管理等各个功能模块的编码任务分别完成。

Biye_Design的博客 179
上一篇: 智能超表面开发秘籍:9个必须掌握的Python编程模块与性能优化技巧
下一篇: Java鸿蒙应用国际化从入门到精通(专家级配置方案曝光)
AlgoFun
博客等级 码龄1年 144粉丝 1993原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值