当前位置: 首页 > news >正文

Android Studio开发 SharedPreferences 详解

文章目录

  • SharedPreferences 详解
    • 基本概念
    • 获取 SharedPreferences 实例
      • 1. Context.getSharedPreferences()
      • 2. Activity.getPreferences()
      • 3. PreferenceManager.getDefaultSharedPreferences()
    • 存储模式
    • 写入数据
      • apply() vs commit()
    • 读取数据
    • 监听数据变化
    • 最佳实践
    • 高级用法
      • 存储字符串集合 (API 11+)
      • 使用 EncryptedSharedPreferences (API 23+)
  • SQLite 基本语法详解
    • 1. 数据类型
    • 2. 数据库操作
      • 创建数据库
      • 删除数据库
    • 3. 表操作
      • 创建表
      • 删除表
      • 修改表
    • 4. 数据操作
      • 插入数据
      • 查询数据
      • 更新数据
      • 删除数据
    • 5. 高级查询
      • 排序
      • 限制结果
      • 分组
      • 连接查询
    • 6. 约束
    • 7. 索引
      • 创建索引
      • 删除索引
    • 8. 视图
      • 创建视图
      • 删除视图
    • 9. 事务
    • 10. Android 中的 SQLite 使用
    • 总结

在这里插入图片描述

SharedPreferences 详解

SharedPreferences 是 Android 提供的一种轻量级数据存储方式,用于存储简单的键值对数据。它适合保存应用的配置信息、用户偏好设置等小量数据。

基本概念

SharedPreferences 以 XML 文件的形式存储在设备的 /data/data/<package_name>/shared_prefs/ 目录下,具有以下特点:

  • 只能存储基本数据类型:boolean, float, int, long, string 和 string set
  • 数据以键值对形式存储
  • 线程安全
  • 不支持多进程共享(除非使用 MODE_MULTI_PROCESS,但已废弃)

获取 SharedPreferences 实例

有三种方式获取 SharedPreferences 对象:

1. Context.getSharedPreferences()

// 指定文件名和模式
SharedPreferences sharedPref = context.getSharedPreferences("my_preferences", Context.MODE_PRIVATE);

2. Activity.getPreferences()

// 使用 Activity 类名作为文件名,只适用于当前 Activity
SharedPreferences sharedPref = activity.getPreferences(Context.MODE_PRIVATE);

3. PreferenceManager.getDefaultSharedPreferences()

// 获取默认的 SharedPreferences 文件 (包名_preferences.xml)
SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(context);

存储模式

  • MODE_PRIVATE:默认模式,只有当前应用可以访问
  • MODE_WORLD_READABLEMODE_WORLD_WRITEABLE:已在 API 17 废弃
  • MODE_MULTI_PROCESS:已在 API 23 废弃

写入数据

要写入数据,需要使用 SharedPreferences.Editor:

SharedPreferences.Editor editor = sharedPref.edit();
editor.putString("key_string", "Hello World");
editor.putInt("key_int", 123);
editor.putBoolean("key_boolean", true);
editor.apply(); // 异步提交
// 或 editor.commit(); // 同步提交,返回boolean表示成功与否

apply() vs commit()

  • apply():异步写入磁盘,无返回值,更高效
  • commit():同步写入磁盘,返回 boolean 表示成功与否,会阻塞 UI 线程

读取数据

String stringValue = sharedPref.getString("key_string", "default_value");
int intValue = sharedPref.getInt("key_int", 0);
boolean booleanValue = sharedPref.getBoolean("key_boolean", false);

监听数据变化

可以注册监听器来监听数据变化:

SharedPreferences.OnSharedPreferenceChangeListener listener = new SharedPreferences.OnSharedPreferenceChangeListener() {@Overridepublic void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {// 处理特定key的变化}};sharedPref.registerOnSharedPreferenceChangeListener(listener);// 记得在适当时候取消注册
sharedPref.unregisterOnSharedPreferenceChangeListener(listener);

最佳实践

  1. 不要存储大量数据:SharedPreferences 不适合存储大量数据,考虑 SQLite 或其他方式
  2. 避免存储复杂对象:只能存储基本数据类型
  3. 合理使用 apply():大多数情况下使用 apply() 而非 commit()
  4. 注意性能:频繁读写可能影响性能
  5. 合理命名文件:对于不同模块使用不同的 SharedPreferences 文件

高级用法

存储字符串集合 (API 11+)

// 写入
Set<String> stringSet = new HashSet<>();
stringSet.add("value1");
stringSet.add("value2");
editor.putStringSet("key_set", stringSet);// 读取
Set<String> retrievedSet = sharedPref.getStringSet("key_set", new HashSet<String>());

使用 EncryptedSharedPreferences (API 23+)

对于敏感数据,可以使用加密的 SharedPreferences:

String masterKeyAlias = MasterKeys.getOrCreate(MasterKeys.AES256_GCM_SPEC);SharedPreferences sharedPreferences = EncryptedSharedPreferences.create("secret_shared_prefs",masterKeyAlias,context,EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM
);

SharedPreferences 是 Android 开发中最常用的数据存储方式之一,合理使用可以方便地管理应用的配置和用户偏好设置。


SQLite 基本语法详解

SQLite 是一个轻量级的关系型数据库,被广泛用于移动应用和嵌入式系统中。以下是 SQLite 的基本语法详解。

1. 数据类型

SQLite 支持以下基本数据类型:

  • NULL - 空值
  • INTEGER - 整数
  • REAL - 浮点数
  • TEXT - 文本字符串
  • BLOB - 二进制数据

2. 数据库操作

创建数据库

-- 创建或打开数据库(通常在代码中完成)
-- Android中通过SQLiteOpenHelper类实现

删除数据库

-- 删除数据库文件(通常在代码中完成)
-- Android中使用context.deleteDatabase("database_name.db")

3. 表操作

创建表

CREATE TABLE table_name (column1 datatype PRIMARY KEY,column2 datatype NOT NULL,column3 datatype DEFAULT default_value,column4 datatype CHECK(condition),...
);

示例:

CREATE TABLE users (id INTEGER PRIMARY KEY AUTOINCREMENT,name TEXT NOT NULL,age INTEGER,email TEXT UNIQUE,created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

删除表

DROP TABLE table_name;

修改表

-- 添加列
ALTER TABLE table_name ADD COLUMN column_name datatype;-- 重命名表
ALTER TABLE old_table_name RENAME TO new_table_name;

4. 数据操作

插入数据

INSERT INTO table_name (column1, column2, ...) 
VALUES (value1, value2, ...);

示例:

INSERT INTO users (name, age, email) 
VALUES ('张三', 25, 'zhangsan@example.com');

查询数据

基本查询:

SELECT column1, column2, ... FROM table_name;
SELECT * FROM table_name;  -- 查询所有列

条件查询:

SELECT * FROM table_name WHERE condition;

示例:

SELECT * FROM users WHERE age > 20;
SELECT name, email FROM users WHERE age BETWEEN 20 AND 30;

更新数据

UPDATE table_name 
SET column1 = value1, column2 = value2, ...
WHERE condition;

示例:

UPDATE users 
SET age = 26, email = 'new_email@example.com' 
WHERE id = 1;

删除数据

DELETE FROM table_name WHERE condition;

示例:

DELETE FROM users WHERE id = 5;

5. 高级查询

排序

SELECT * FROM table_name ORDER BY column1 ASC, column2 DESC;

限制结果

SELECT * FROM table_name LIMIT number OFFSET start;
-- 或简写为
SELECT * FROM table_name LIMIT start, number;

分组

SELECT column1, COUNT(*) 
FROM table_name 
GROUP BY column1;

连接查询

-- 内连接
SELECT a.column1, b.column2 
FROM table1 a 
INNER JOIN table2 b ON a.id = b.table1_id;-- 左外连接
SELECT a.column1, b.column2 
FROM table1 a 
LEFT JOIN table2 b ON a.id = b.table1_id;

6. 约束

SQLite 支持以下约束:

  • PRIMARY KEY - 主键
  • UNIQUE - 唯一值
  • NOT NULL - 非空
  • CHECK - 检查条件
  • DEFAULT - 默认值
  • FOREIGN KEY - 外键

7. 索引

创建索引

CREATE INDEX index_name ON table_name (column1, column2, ...);

删除索引

DROP INDEX index_name;

8. 视图

创建视图

CREATE VIEW view_name AS
SELECT column1, column2, ...
FROM table_name
WHERE condition;

删除视图

DROP VIEW view_name;

9. 事务

BEGIN TRANSACTION;
-- SQL语句
COMMIT;
-- 或 ROLLBACK; 回滚

10. Android 中的 SQLite 使用

在 Android 中,通常通过 SQLiteOpenHelper 类来操作 SQLite 数据库:

public class DatabaseHelper extends SQLiteOpenHelper {private static final String DATABASE_NAME = "my_database.db";private static final int DATABASE_VERSION = 1;public DatabaseHelper(Context context) {super(context, DATABASE_NAME, null, DATABASE_VERSION);}@Overridepublic void onCreate(SQLiteDatabase db) {db.execSQL("CREATE TABLE users (" +"id INTEGER PRIMARY KEY AUTOINCREMENT," +"name TEXT NOT NULL," +"age INTEGER);");}@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {db.execSQL("DROP TABLE IF EXISTS users");onCreate(db);}
}

使用示例:

DatabaseHelper dbHelper = new DatabaseHelper(context);
SQLiteDatabase db = dbHelper.getWritableDatabase();// 插入数据
ContentValues values = new ContentValues();
values.put("name", "李四");
values.put("age", 30);
long newRowId = db.insert("users", null, values);// 查询数据
Cursor cursor = db.query("users", null, null, null, null, null, null);
while (cursor.moveToNext()) {String name = cursor.getString(cursor.getColumnIndex("name"));int age = cursor.getInt(cursor.getColumnIndex("age"));// 处理数据
}
cursor.close();db.close();

总结

SQLite 提供了完整的 SQL 功能,但比大型数据库系统更轻量。掌握这些基本语法后,您可以在 Android 应用中有效地存储和管理结构化数据。

相关文章:

Android Studio开发 SharedPreferences 详解

文章目录 SharedPreferences 详解基本概念获取 SharedPreferences 实例1. Context.getSharedPreferences()2. Activity.getPreferences()3. PreferenceManager.getDefaultSharedPreferences() 存储模式写入数据apply() vs commit() 读取数据监听数据变化最佳实践高级用法存储字…...

Qt基础006(事件)

文章目录 消息对话框QMessageBox快捷键开发基础 事件事件处理过程事件过滤器 消息对话框QMessageBox QMessageBox 是 Qt 框架中用于显示消息框的一个类&#xff0c;它常用于向用户显示信息、询问问题或者报告错 误。以下是 QMessageBox 的一些主要用途&#xff1a; 显示信息…...

Mediatek Android13 设置Launcher

概述: 本章将围绕Launcher讲述两种修改默认Launcher的情况。 一:完全覆盖 第一种方法和预置apk类似,区别在于增加LOCAL_OVERRIDES_PACKAGES说明,该方法会完全覆盖系统默认的Launcher。 关于如何预置apk,可见另一篇文章: Mediatek Android13 预置APP-CSDN博客 修改A…...

【Linux网络】构建基于UDP的简单聊天室系统

&#x1f4e2;博客主页&#xff1a;https://blog.csdn.net/2301_779549673 &#x1f4e2;博客仓库&#xff1a;https://gitee.com/JohnKingW/linux_test/tree/master/lesson &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01; &…...

【微知】git reset --soft --hard以及不加的区别?

背景 在 Git 里&#xff0c;git reset 是用来将当前的 HEAD 复位到指定状态的命令。--soft、--hard 是它的两个常用选项&#xff0c;本文简单介绍他们的区别&#xff0c;以及不添加选项时的默认情况。 在 Git 里&#xff0c;HEAD 是一个重要的引用&#xff0c;它指向当前所在的…...

制作一个简单的操作系统7

实模式下到保护模式下并打印 运行效果: 完整代码: 【免费】制作一个简单的操作系统7的源代码资源-CSDN文库https://download.csdn.net/download/farsight_2098/90670296 从零开始写操作系统引导程序:实模式到保护模式的跨越 引言 操作系统的启动过程是计算机系统中最神…...

2025企微CRM系统功能对比:会话存档、客户画像与数据分析如何重构客户运营?

一、企微CRM管理系统&#xff1a;从“连接工具”到“智能中枢” 随着企业微信生态的成熟&#xff0c;企微CRM管理软件已从简单的客户沟通渠道&#xff0c;升级为融合数据、策略与服务的核心平台。2025年&#xff0c;企业对企微CRM系统的需求聚焦于三大能力&#xff1a;会话存档…...

【JAVA】十三、基础知识“接口”精细讲解!(二)(新手友好版~)

哈喽大家好呀qvq&#xff0c;这里是乎里陈&#xff0c;接口这一知识点博主分为三篇博客为大家进行讲解&#xff0c;今天为大家讲解第二篇java中实现多个接口&#xff0c;接口间的继承&#xff0c;抽象类和接口的区别知识点&#xff0c;更适合新手宝宝们阅读~更多内容持续更新中…...

小白工具视频转MPG, 功能丰富齐全,无需下载软件,在线使用,超实用

在视频格式转换需求日益多样的今天&#xff0c;小白工具网的在线视频转 MPG 功能https://www.xiaobaitool.net/videos/convert-to-mpg/ &#xff09;脱颖而出&#xff0c;凭借其出色特性&#xff0c;成为众多用户处理视频格式转换的优质选择。 从格式兼容性来看&#xff0c;它支…...

#define RFOREACH(var, arr) for (ARR2IDX(arr) var=(arr).size(); var-->0; )

这个宏的定义&#xff1a; #define RFOREACH(var, arr) for (ARR2IDX(arr) var (arr).size(); var-- > 0; )是用来 反向遍历一个容器&#xff08;比如 vector&#xff09; 的&#xff0c;非常紧凑而且聪明的写法。 逐步解释一下&#xff1a; 假设你有一个容器&#xff0c…...

MYSQL—两阶段提交

binlog 和 redo log&#xff1a; 有binlog了为什么还要有redo log&#xff1a; 历史原因&#xff0c;MyISAM不支持崩溃恢复&#xff0c;而InnoDB在加入MySQL前就已经支持崩溃恢复了InnoDB使用的是WAL技术&#xff0c;事务提交后&#xff0c;写完内存和日志&#xff0c;就算事…...

Qt之moveToThread

文章目录 前言一、基本概念1.1 什么是线程亲和性&#xff1f;1.2 moveToThread 的作用 二、使用场景三、使用方法四、使用示例五、注意事项六、常见问题总结 前言 moveToThread 是 Qt 中用于管理对象线程亲和性&#xff08;Thread Affinity&#xff09;的核心方法。它的作用是…...

Nacos 2.0.2 在 CentOS 7 上开启权限认证(含 Docker Compose 配置与接口示例)

介绍如何在 Nacos 2.0.2 CentOS 7 环境中开启权限认证&#xff0c;包括 解压部署 和 Docker Compose 部署 两种方式&#xff0c;提供客户端 Spring Boot 项目的接入配置和nacos接口验证示例。 环境说明 操作系统&#xff1a;CentOS 7Nacos 版本&#xff1a;2.0.2部署方式&…...

Oracle--SQL事务操作与管理流程

前言&#xff1a;本博客仅作记录学习使用&#xff0c;部分图片出自网络&#xff0c;如有侵犯您的权益&#xff0c;请联系删除 数据库系统的并发控制以事务为单位进行&#xff0c;通过内部锁定机制限制事务对共享资源的访问&#xff0c;确保数据并行性和一致性。事务是由一系列语…...

Qt -对象树

博客主页&#xff1a;【夜泉_ly】 本文专栏&#xff1a;【暂无】 欢迎点赞&#x1f44d;收藏⭐关注❤️ 目录 前言构造QObject::QObjectQObjectPrivate::setParent_helper 析构提醒 #mermaid-svg-FTUpJmKG24FY3dZY {font-family:"trebuchet ms",verdana,arial,sans-s…...

Unity 带碰撞的粒子效果

碰撞效果&#xff1a;粒子接触角色碰撞体弹起&#xff0c;粒子接触地面弹起。 粒子效果&#xff1a;粒子自行加速度下落&#xff0c;并且在接触碰撞体弹起时产生一个小的旋转。 *注意使用此效果时&#xff0c;自行判断是否需要调整碰撞层级。 以下为角色身高为1.7m时&#x…...

扩散模型(Diffusion Models)

扩散模型&#xff08;Diffusion Models&#xff09;是近年来在生成式人工智能领域崛起的一种重要方法&#xff0c;尤其在图像、音频和视频生成任务中表现突出。其核心思想是通过逐步添加和去除噪声的过程来学习数据分布&#xff0c;从而生成高质量样本。 ​​核心原理​​ 扩散…...

JSP服务器端表单验证

JSP服务器端表单验证 一、引言 在Web开发中&#xff0c;表单验证是保障数据合法性的重要环节。《Web编程技术》第五次实验要求&#xff0c;详细讲解如何基于JSP内置对象实现服务器端表单验证&#xff0c;包括表单设计、验证逻辑、交互反馈等核心功能。最终实现&#xff1a;输…...

Anaconda、conda和PyCharm在Python开发中各自扮演的角色

Anaconda、conda和PyCharm在Python开发中各自扮演不同角色&#xff0c;它们的核心用处、区别及相互关系如下&#xff1a; 一、Anaconda与conda的用处及区别 1. Anaconda - 定义&#xff1a;Anaconda是一个开源的Python和R语言发行版&#xff0c;专为数据科学、机器学习等场景…...

【数据结构 · 初阶】- 堆的实现

目录 一.初始化 二.插入 三.删除&#xff08;堆顶、根&#xff09; 四.整体代码 Heap.h Test.c Heap.c 我们使用顺序结构实现完全二叉树&#xff0c;也就是堆的实现 以前学的数据结构只是单纯的存储数据。堆除了存储数据&#xff0c;还有其他的价值——排序。是一个功能…...

Ubuntu与OpenHarmony OS 5.0显示系统架构比较

1. 总体架构对比 1.1 Ubuntu显示架构 Ubuntu采用传统Linux显示栈架构&#xff0c;自顶向下可分为&#xff1a; 应用层&#xff1a;GNOME桌面环境和应用程序显示服务器层&#xff1a;X11或Wayland图形栈中间层&#xff1a;Mesa, DRM/KMS硬件层&#xff1a;GPU驱动和硬件 1.2 …...

一键配置多用户VNC远程桌面:自动化脚本详解

在当今远程工作盛行的时代,高效且安全地管理多用户远程桌面访问变得至关重要。本文将介绍一个强大的自动化脚本,该脚本能够快速创建用户并配置VNC远程桌面环境,大大简化了系统管理员的工作。 一、背景介绍 在Linux系统中,手动配置VNC服务器通常需要执行多个步骤,包括创建…...

Qt进阶开发:鼠标及键盘事件

文章目录 一、Qt中事件的概念二、Qt中事件处理方式三、重新实现部件的事件处理函数3.1 常用事件处理函数3.2 自定义控件处理鼠标和绘图事件3.3 常用事件处理函数说明四、重写notify()函数五、QApplication对象上安装事件过滤器六、重写event()事件七、在对象上安装事件过滤器八…...

鸿蒙生态新利器:华为ArkUI-X混合开发框架深度解析

鸿蒙生态新利器&#xff1a;华为ArkUI-X混合开发框架深度解析 作者&#xff1a;王老汉 | 鸿蒙生态开发者 | 2025年4月 &#x1f4e2; 前言&#xff1a;开发者们的新机遇 各位鸿蒙开发者朋友们&#xff0c;是否还在为多平台开发重复造轮子而苦恼&#xff1f;今天给大家介绍一位…...

VSCode 用于JAVA开发的环境配置,JDK为1.8版本时的配置

插件安装 JAVA开发在VSCode中&#xff0c;需要安装JAVA的必要开发。当前安装只需要安装 “Language Support for Java(TM) by Red Hat”插件即可 安装此插件后&#xff0c;会自动安装包含如下插件&#xff0c;不再需要单独安装 Project Manager for Java Test Runner for J…...

Git Flow分支模型

经典分支模型(Git Flow) 由 Vincent Driessen 提出的 Git Flow 模型,是管理 main(或 master)和 dev 分支的经典方案: main 用于生产发布,保持稳定; dev 用于日常开发,合并功能分支(feature/*); 功能开发在 feature 分支进行,完成后合并回 dev; 预发布分支(rele…...

机器人进阶---视觉算法(六)傅里叶变换在图像处理中怎么用

傅里叶变换在图像处理中怎么用 傅里叶变换的基本原理应用场景Python代码示例逐行解释总结傅里叶变换在图像处理中是一种重要的工具,它将图像从空间域转换到频域,从而可以对图像的频率特性进行分析和处理。傅里叶变换在图像滤波、图像增强、图像压缩和图像分析等方面都有广泛应…...

Linux-skywalking部署步骤并且添加探针

skywalking部署步骤 上传skywalking安装包并解压将skywalking安装包apache-skywalking-apm-10.1.0.tar.gz上传到服务器/data目录下 用解压命令解压 cd /data tar -xvf apache-skywalking-apm-10.1.0.tar.gz 解压后重名目录 mv apache-skywalking-apm-bin skywalking 上传…...

开启报名!火山引擎 x PICO-全国大学生物联网设计竞赛赛题发布

全国大学生物联网设计竞赛&#xff08;以下简称“竞赛”&#xff09;是教育部高等学校计算机类专业教学指导委员会创办的物联网领域唯一的学科竞赛&#xff0c;是以学科竞赛推动专业建设、培养大学生创新能力为目标&#xff0c;面向高校大学生举办的全国性赛事。自 2014 年开始…...

【遥感科普】光谱分辨率是什么?

光谱分辨率是指传感器或光谱仪器在电磁波谱中区分相邻波长或频率的能力。它反映了设备对光谱细节的捕捉能力&#xff0c;通常用波长间隔&#xff08;如纳米&#xff0c;nm&#xff09;或波数&#xff08;cm⁻&#xff09;表示。例如&#xff0c;若光谱分辨率为10 nm&#xff0c…...

Trae国内版怎么用?Trae IDE 内置 MCP 市场配置使用指南

近日&#xff0c;字节跳动旗下Trae IDE发布了全新版本&#xff0c;新版本中&#xff0c;Trae IDE 的自定义智能体能力让 AI 能够基于开发者需求灵活调度多维度的工具和资源&#xff0c;从而为任务提供全方位的支持&#xff0c;只需一下即可召唤智能体&#xff0c;这个过程中&am…...

Javase 基础入门 —— 02 基本数据类型

本系列为笔者学习Javase的课堂笔记&#xff0c;视频资源为B站黑马程序员出品的《黑马程序员JavaAI智能辅助编程全套视频教程&#xff0c;java零基础入门到大牛一套通关》&#xff0c;章节分布参考视频教程&#xff0c;为同样学习Javase系列课程的同学们提供参考。 01 注释 单…...

模型 螃蟹效应

系列文章分享模型&#xff0c;了解更多&#x1f449; 模型_思维模型目录。个体互钳&#xff0c;团队难行。 1 螃蟹效应的应用 1.1 教育行业—优秀教师遭集体举报 行业背景&#xff1a;某市重点中学推行绩效改革&#xff0c;将班级升学率与教师奖金直接挂钩&#xff0c;打破原…...

597页PPT丨流程合集:流程梳理方法、流程现状分析,流程管理规范及应用,流程绩效的管理,流程实施与优化,流程责任人的角色认知等

流程梳理是通过系统化分析优化业务流程的管理方法&#xff0c;其核心包含四大步骤&#xff1a;①目标确认&#xff0c;明确业务痛点和改进方向&#xff1b;②现状分析&#xff0c;通过流程图、价值流图还原现有流程全貌&#xff0c;识别冗余环节和瓶颈节点&#xff1b;③优化设…...

Kotlin集合全解析:List和Map高频操作手册

Kotlin 中 Map 和 List 常用功能总结 List 常用功能 创建 List val immutableList listOf(1, 2, 3) // 不可变列表 val mutableList mutableListOf("a", "b", "c") // 可变列表 val emptyList emptyList<String>() // 空列表基本…...

【springsecurity oauth2授权中心】自定义登录页和授权确认页 P2

上一篇跑通了springsecurity oauth2的授权中心授权流程&#xff0c;这篇来将内置的登录页和授权确认页自定义一下 引入Thymeleaf 在模块authorization-server下的pom.xml里引入模板引擎 <dependency><groupId>org.springframework.boot</groupId><arti…...

Springboot整合MyBatisplus和快速入门

MyBatisPlus MyBatis-Plus &#xff08;简称 MP&#xff09;是一个 MyBatis的增强工具&#xff0c;在 MyBatis 的基础上只做增强不做改变&#xff0c;为简化开发、提高效率而生。 MyBatisPlus的官方网址: MyBatis-Plus &#x1f680; 为简化开发而生 快速入门 导入起步依赖…...

Vue2-基础使用模板

data和el的第一种写法 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>VUE</title><script type"text/javascript" src"../js/vue.js"></script> </head&g…...

Vue2-指令语法

v-bind和v-model <a v-bind:href"url">笔记1</a> <a :href"url">笔记2</a><input type"text" v-model:value"name"/> <input type"text" v-model"name"/>data(){return {ur…...

Cesium学习笔记——坐标系统及坐标转换

前言 在Cesium的学习中&#xff0c;学会读文档十分重要&#xff01;&#xff01;&#xff01;在这里附上Cesium中英文文档1.117。 在Cesium中&#xff0c;一共有四种比较重要的坐标系&#xff0c;分别是地理坐标系&#xff0c;地心地固坐标系&#xff0c;东-北-上局部坐标系和屏…...

【AI微信小程序开发】大转盘小程序项目代码:自设转盘选项和概率(含完整前端+后端代码)

系列文章目录 【AI微信小程序开发】AI减脂菜谱小程序项目代码:根据用户身高/体重等信息定制菜谱(含完整前端+后端代码)【AI微信小程序开发】AI菜谱推荐小程序项目代码:根据剩余食材智能生成菜谱(含完整前端+后端代码)【AI微信小程序开发】图片工具小程序项目代码:图片压…...

C语言文件操作完全手册:读写·定位·实战

1.什么是文件 1.1文件的概念 文件&#xff08;File&#xff09;是计算机中用于持久化存储数据的基本单位。它可以存储文本、图片、音频、程序代码等各种信息&#xff0c;并在程序运行结束后仍然保留数据。 1.2文件名 一个文件要有一个唯一的文件标识&#xff0c;以便用户识别…...

网络协议之详解(Detailed Explanation of Network Protocol)

NFS、FTP、SMB、WebDav、DLNA协议 大家好&#xff01;今天来和大家聊聊让很多人都感到困惑的 NFS、FTP、SMB、WebDav、DLNA 这几种协议。相信不少人在面对它们的时候&#xff0c;常常是一头雾水&#xff0c;傻傻分不清。别担心&#xff0c;看完这篇文章&#xff0c;你就会对它…...

VICP(Velocity-based ICP):通过运动校准实现精准姿态估计

在三维点云配准的领域&#xff0c;经典的ICP&#xff08;Iterative Closest Point&#xff09;算法已经成为广泛使用的方法&#xff0c;尤其是在处理静态环境中的点云配准时&#xff0c;效果非常好。然而&#xff0c;随着动态场景的出现&#xff0c;物体运动和传感器的变动引发…...

典籍知识问答典籍查询界面前端界面设计效果实现

根据组内负责前端界面设计的同学的界面设计&#xff0c;进行典籍查询前端界面的实现 1.实现效果 2.前端代码 ClassicView.vue <template> <div class"classics"> <img className"back" alt"Back" src"https://c.animaapp…...

Megatron - LM 重要文件解析 - /tools/preprocess_data.py

preprocess_data.py 的主要功能。这是 Megatron-LM 的数据预处理脚本&#xff0c;主要用于将原始文本数据转换为模型训练所需的格式。 核心功能&#xff1a; 1. 数据预处理流程&#xff1a; 输入&#xff1a;原始文本文件&#xff08;JSON格式&#xff09; 处理&#xff1a…...

探索RTOS在电力控制系统中的应用价值

电力控制系统对实时性、可靠性和高效性有着严苛要求&#xff0c;实时操作系统&#xff08;RTOS&#xff09;凭借其独特性能优势&#xff0c;在其中扮演关键角色。本文深入剖析RTOS在电力控制系统中的重要作用&#xff0c;探讨其应用前景&#xff0c;助力推动电力行业智能化、现…...

第5章-1 优化服务器设置

上一篇&#xff1a;《第4章-5 linux 网络管理》&#xff0c;接着服务器设置 本章我们将解释如何为MySQL服务器创建合适的配置文件。这是一个迂回的旅程&#xff0c;有许多兴趣点和可以俯瞰风景的短途旅程。这些短途旅程是必要的。确定合适配置的最短路径并不是从研究配置选项并…...

进阶篇 第 4 篇:驾驭季节性波动 - SARIMA 模型实战

进阶篇 第 4 篇&#xff1a;驾驭季节性波动 - SARIMA 模型实战 (图片来源: Pixabay on Pexels) 在上一篇中&#xff0c;我们深入探索了经典的 ARIMA(p,d,q) 模型。它通过整合自回归 (AR)、差分 (I) 和移动平均 (MA) 提供了一个强大的框架来对&#xff08;处理后&#xff09;平…...

Android调用springboot接口上传大字段,偶现接口超时的优化

介绍 最近有个功能&#xff0c;Android通过okhttp上传实体类&#xff0c;实体类包含一个大字段&#xff0c;上传的字符串长度达到300k&#xff0c;偶现接口超时的情况&#xff0c;大概100次有5次&#xff0c;看日志发现数据并没有到达接口&#xff0c;可能在网络传输中就超时了…...