一种多选项的高效存取(存储、查询)解决方案

华为OD机试真题 2026.11.4. 新系统 【河流水系流量评估】 华为OD机试真题 新系统【河流水系流量评估】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题 【河流水系流量评估】多语言题解。 阅读详情

在项目开发中,如何保存多选项的值呢? 例如下图中的职业发展和兴趣爱好:

最容易想到的就是,选择了哪些选项,就把该选项值存储起来:

  • 在数据库层面设置一个VARCHAR字段,
  • 例如选择了"收入无上线、培训与发展、职业价值感",前端就传递"收入无上线、培训与发展、职业价值感",数据库就保存为"收入无上线、培训与发展、职业价值感"。

可是这样存在一个问题,我要查询那些人选择了其中的某个、某些选项,就很难实现。例如,查询那些人的兴趣爱好是"编程、篮球",查询兴趣爱好是"看书、写作"的人数有多少。

为了解决这种多选项的高效查询问题,本人设计了一种方法,可以实现快速、高效地存储和查询多选项中有某个、某些选项的所有记录。

1、设计思路

核心思路:

  1. 编码:将每个选项与特定的比特位上对应起来,选中为1,未选中为0
  2. 存储:将比特位转换为Long型(64bit,最大支持64个多选项),数据库表字段为BIGINT
  3. 查询:与(&)位运算

主要流程

  1. 编码:将多选项进行编号:

    • 例如:对职业发展的多选项进行编号为:1-收入无上限,2-培训与发展,3-职业价值感,4-行业稳定性,5-社交与人脉,6-塑造个人品牌,7-团队综合素质,8-终身学习;
    • 对兴趣爱好的多选项进行编号为:1-编程,2-听音乐唱歌,3-篮球,4-玩游戏,5-看电影,6-享美食,7-健身,8-旅游,9-看书,10-写作。
  2. 存储:

    • 前端:选择了哪些选项,就传递哪些选项的编号。例如:选择了"编程、篮球",则传递的编号串为:"1,3"
    • 后端:将编号串转换为二进制串,再转换为数字,落库
  3. 查询:前端还是只传选项编号;后端将其转换为数字;在数据库层面使用位运算中的与运算,匹配包含了参数选项的记录。

#1.1 编码:将多选项转换为数字

现以兴趣爱好为例,为其多选项定义编号: 1-编程,2-听音乐唱歌,3-篮球,4-玩游戏,5-看电影,6-享美食,7-健身,8-旅游,9-看书,10-写作

根据二进制位下标与十进制数的互转:

例1

  • 用户A勾选的兴趣爱好为:"1-编程,2-听音乐唱歌,5-看电影,6-享美食"
  • 前端传递的串为:1,2,5,6
  • 转换为二进制串:0011 0011
  • 转换规则:在有选项编号出现的位下标的位置上填充1,其他位置填充0
  • 转换为十进制后落库:51

例2

  • 用户B勾选的兴趣爱好为:"3-篮球,4-玩游戏,6-享美食,7-健身,10-写作"

  • 前端传递的串为:3,4,6,7,10

  • 转换为二进制串:0010 0110 1100

  • 转换为十进制后落库:620

#1.2查询

查询的核心思想:与(&)位运算

  • X & Y = X,则说明X的所有值为"1"的二进制位、在Y中对应的二进制位也为"1"。

  • 也就是说,Y为"1"的二进制位包含了X的所有为"1"的二进制位。从而实现了,查询条件X,在Y中存在(包含)

2、Demo运行

Step 1:在application.yml中修改数据库连接参数

Step 2:执行resources/sql.sql下的SQL文件,初始化数据

Step 3:从启动类App.java启动

Step 4:启动成功后进入前端页面:http://localhost:9898/person.html[1]

#2.1新增数据演示

必要数据,多选项进行勾选:

去数据库查看刚刚新增的记录:

#2.2查询数据演示

选择查询条件,点击“Query”进行查询:

查看运行日志,显示执行的SQL:

3、原理示例

以多选项”兴趣爱好“为例,展示存储、查询的工作原理

#3.1构造数据

AA选择了"1-编程,2-听音乐唱歌,5-看电影,6-享美食,7-健身,8-旅游"

前端传递的编号串:1,2,5,6,7,8

转换为二进制串:0000 1111 0011

转换为数字:243

BB选择了"3-篮球,4-玩游戏,8-旅游,9-看书,10-写作"

前端传递的编号串:3,4,8,9,10

转换为二进制串:0011 1000 1100

转换为数字:908

CC选择了"2-听音乐唱歌,3-篮球,5-看电影,6-享美食,7-健身,9-看书,10-写作"

前端传递的编号串:2,3,5,6,7,9,10

转换为二进制串:0011 0111 0110

转换为数字:886

DD选择了"1-编程,3-篮球,4-玩游戏,6-享美食,7-健身,8-旅游,10-写作"

前端传递的编号串:1,3,4,6,7,8,10

转换为二进制串:0010 0110 1101

转换为数字:749

EE选择了"2-听音乐唱歌,4-玩游戏,5-看电影,7-健身,8-旅游,10-写作"

前端传递的编号串:2,4,5,7,8,10

转换为二进制串:0010 1101 1010

转换为数字:730

FF选择了"1-编程,2-听音乐唱歌,3-篮球,4-玩游戏,5-看电影,7-健身"

前端传递的编号串:1,2,3,4,5,7

转换为二进制串:0000 0101 1111

转换为数字:95

GG选择了"1-编程,3-篮球,4-玩游戏,6-享美食,8-旅游,10-写作"

前端传递的编号串:1,3,4,6,8,10

转换为二进制串:0010 1010 1101

转换为数字:685

#3.2插入到数据库

DROP TABLE IF EXISTS person;
CREATE TABLE person (
    id BIGINT AUTO_INCREMENT,
    name VARCHAR(50) DEFAULT NULL COMMENT '姓名',
    gender INT DEFAULT NULL COMMENT '性别,0-女,1-男',
    address VARCHAR(128) DEFAULT NULL COMMENT '地址',
    careers BIGINT DEFAULT NULL COMMENT '职业发展多选项',
    -- 兴趣爱好多选项。可选项:1-编程,2-听音乐唱歌,3-篮球,4-玩游戏,5-看电影,6-享美食,7-健身,8-旅游,9-看书,10-写作。
    -- 例如,全选:"11 1111 1111",保存为十进制=1023,全不选:"00 0000 0000",保存为十进制=0,只选择听音乐唱歌:"0000 0010",保存为十进制=2
    -- LONG最大支持64位,最多支持64个多选项的任意选择
    interests BIGINT DEFAULT NULL COMMENT '兴趣爱好多选项',
    create_time DATETIME DEFAULT NULL,
    update_time DATETIME DEFAULT NULL,
    deleted INT DEFAULT 0 COMMENT '是否删除:0-否,1-是',
    PRIMARY KEY(id)
);

-- 将上文中构造的数据,以SQL的形式插入到数据库中,只以多选项"兴趣爱好"为例
INSERT INTO person(name, gender, address, careers, interests, create_time, update_time, deleted)
VALUES ('AA', 1, 'SH CN', 1, 243, '2022-12-12','2023-12-12', 0),
       ('BB', 1, 'SH CN', 1, 908, '2022-12-12','2023-12-12', 0),
       ('CC', 1, 'SH CN', 1, 886, '2022-12-12','2023-12-12', 0),
       ('DD', 1, 'SH CN', 1, 749, '2022-12-12','2023-12-12', 0),
       ('EE', 1, 'SH CN', 1, 730, '2022-12-12','2023-12-12', 0),
       ('FF', 1, 'SH CN', 1, 95, '2022-12-12','2023-12-12', 0),
       ('GG', 1, 'SH CN', 1, 685, '2022-12-12','2023-12-12', 0);

# 3.3查询选择了"1-编程"这个选项的记录

目标: 在多选项中查询选择了"1-编程"这个选项的记录

用户的"兴趣爱好"多选项(二进制形式)

AA: 0000 1111 0011

BB: 0011 1000 1100

CC: 0011 0111 0110

DD: 0010 0110 1101

EE: 0010 1101 1010

FF: 0000 0101 1111

GG: 0010 1010 1101

将"1-编程"进行转换

  • 转换为二进制:0000 0000 0001

  • 转换为十进制:1

查询原理: 将查询条件"0000 0000 0001"与AA~GG的二进制位进行与运算后,仍然为查询条件的记录,则是选择了"1-编程"这个选项的记录

查询过程

  • 将查询条件与AA的二进制位进行与运算:

0000 0000 0001

&

0000 1111 0011

#-------------------

0000 0000 0001  与运算结果仍为查询条件,说明这条记录包含了"1-编程"这个选项

  • 将查询条件与BB的二进制位进行与运算:

0000 0000 0001

&

0011 1000 1100

#---------------------

0000 0000 0000   与运算结果不为查询条件,说明这条记录不包含了"1-编程"这个选项

  • 其他记录运算同理

  • 最终发现只有AA、DD、FF、GG的运算结果符合条件,这四个记录就是满足"选择了1-编程这个选项的所有记录"

SQL实现

select * FROM person WHERE interests & 1 = 1;

#3.4查询选择了"2-听音乐唱歌,5-看电影"这些选项的记录

目标: 在多选项中查询选择了"2-听音乐唱歌,5-看电影"这些选项的记录

用户的"兴趣爱好"多选项(二进制形式)

AA: 0000 1111 0011

BB: 0011 1000 1100

CC: 0011 0111 0110

DD: 0010 0110 1101

EE: 0010 1101 1010

FF: 0000 0101 1111

GG: 0010 1010 1101

将"2-听音乐唱歌,5-看电影"进行转换

  • 转换为二进制:0000 0001 0010

  • 转换为十进制:18

查询原理: 将查询条件"0000 0001 0010"与AA~GG的二进制位进行与运算后,仍然为查询条件的记录,则是选择了"2-听音乐唱歌,5-看电影"这个选项的记录

查询过程

  • 将查询条件与AA的二进制位进行与运算:

0000 0001 0010

&

0000 1111 0011

#-----------------------

0000 0001 0010  与运算结果仍为查询条件,说明这条记录包含了"2-听音乐唱歌,5-看电影"这些选项

  • 将查询条件与BB的二进制位进行与运算:

0000 0001 0010

&

0011 1000 1100

#----------------------

0000 0000 0000   与运算结果不为查询条件,说明这条记录不包含了"2-听音乐唱歌,5-看电影"这些选项

  • 其他记录运算同理

  • 最终发现只有AA、CC、EE、FF的运算结果符合条件,这四个记录就是满足"选择了2-听音乐唱歌,5-看电影这些选项的所有记录"

SQL实现

本文结束。

从C到汇编:单片机汇编语言核心概念迁移指南 本文详细介绍了从C语言迁移到单片机汇编语言的核心概念与实践指南,特别适合嵌入式开发者。文章深入探讨了汇编语言在性能优化、时序控制等方面的独特优势,并提供了变量存储、函数实现、流程控制等关键概念的对应关系,帮助开发者高效掌握汇编编程技巧。 阅读详情

相关推荐

STM32F103C8T6 + GY-906红外测温:手把手教你用CubeMX和HAL库搞定IIC驱动(附完整工程)

本文详细介绍了如何使用STM32F103C8T6和GY-906红外测温传感器(基于MLX90614芯片)实现非接触式温度测量。从STM32CubeMX工程创建、HAL库驱动适配到温度数据采集与处理,提供完整的开发流程和常见问题解决方案,帮助开发者快速掌握红外测温技术。

weixin_29188043的博客 253

位标志法处理多选字段在数据库中的存储方式 查询效率与扩展性之间的权衡

位标志法是一种利用整数字段存储多选项的技术,通过位运算实现选项合并与解析。其优势在于存储高效(仅需1个整数字段)、写入便捷、判断快速,特别适用于权限、状态等固定选项场景。但存在扩展性差(最多支持64个选项)、查询效率低、维护复杂(需映射表)、无法统计频率、不支持外键约束等缺点。实现方式是通过位或运算合并选项为整数,再通过位与解析还原选项。该方法适用于选项固定的系统,但不适合频繁变动的动态选项场景。

qq_42217708的博客 422

POWER SI仿真流程

一、打开软件Power SI二、加载PCB,可以直接使用brd文件,不用再进行格式转换三、check Stackup,与原来的PCB叠层对照一遍,检查数据加载后有没有出错。四、select Nets,加载brd文件后,可能所有的网络都处于使用状态,先在右侧net manager下面右键disable all nets,再使能需要仿真的电源网络(如果要仿真的网络没有归属到电源网络,在其上右键,选classfy as power \ground nets)

lx5213的博客 1316

Spring AI + GPT-5.5 + Ollama 配置教程:Base URL、超时与流式调用

由于不同 Spring AI、Spring Boot 小版本之间仍可能存在差异,创建项目时应检查 Spring Initializr、Spring AI BOM 和官方兼容矩阵,不要直接复制旧教程中的 Starter 名称和版本号。多人项目最好隔离不同客户端,并在脱敏前提下记录最终 URL、状态码、请求耗时、请求 ID 和模型 ID。Spring AI 接入模型 API,至少要同时确认 Starter、Base URL、请求路径、API Key、模型 ID、连接超时、读取超时和流式客户端这 8 项。

2601_95893075的博客 225

Windows 11 + AMD 780M 运行 ComfyUI 完整指南:DirectML 实战方案

ComfyUI 是基于 PyTorch 的 Stable Diffusion 可视化工作流工具,其性能高度依赖 GPU 后端支持。在 Windows 平台,传统 CUDA 方案仅适配 NVIDIA 显卡,而 AMD 核显用户长期面临 ROCm 兼容性差、驱动链路断裂等系统级障碍。DirectML 作为微软原生机器学习 API,绕过 ROCm 生态断层,直接对接 DirectX 12 硬件抽象层,成为 RDNA 3 架构(如 Radeon 780M)在 Windows 11 上运行 AI 绘画的最优解。它提供

weixin_30099989的博客 724

Obsidian+llama3:终于搭建了自己的知识库

Obsidian 的 Smart Connections,超出了我原本的预期,于是结合新模型非常方便地搭建了我的个人知识库。

谢彦的技术博客 3712

InnoDB 内存结构总览:Change Buffer、AHI 与 Log Buffer

本文系统梳理InnoDB内存结构中的ChangeBuffer、Adaptive Hash Index(AHI)与LogBuffer。ChangeBuffer缓存二级索引页不在内存时的变更,减少随机IO,仅在页加载时合并;聚簇索引修改立即执行,因数据本身不可延后。AHI基于高频等值查询自动构建哈希索引,加速定位,仅支持等值操作。LogBuffer为redo log内存缓冲,配合磁盘日志实现崩溃恢复。三者均服务于性能优化,其中ChangeBuffer与AHI共享BufferPool空间,而LogBuffer独立

bksczm的博客 44

Matlab TreeBagger实战:用随机森林预测房价的5个关键步骤(附完整代码)

本文详细介绍了使用Matlab的TreeBagger工具包构建随机森林模型预测房价的完整流程。通过波士顿房价数据集实战,涵盖数据预处理、模型构建、参数调优、特征重要性分析及高级应用(如分位数回归)等5个关键步骤,并附有完整代码,帮助读者快速掌握这一强大的回归分析工具。

ol789012的博客 444

V8 机制、手写核心函数与 TypeScript 类型体操

或固定初始化(如数组先定长、对象先给全字段)保持类型与形状稳定;这些都比"换框架"更基础。只能处理纯数据(丢函数、Date、RegExp、循环引用报错)。生产级深拷贝要处理:原始值短路、循环引用、V8(Chrome / Node 的 JS 引擎)不是"解释一行跑一行"那么简单,它用。图:V8 执行流程——解释执行 + 热点优化,优化失败会 Deopt 回退。JS 内存自动管理,但"自动"不等于"不会漏"。是"固定间隔最多执行一次"。手写 Promise 是"懂异步"的试金石。是"停下后才执行最后一次",

qq_38468358的博客 330

深入解析机器人软件开发中的核心:状态机管理(FSM)—— 理论、实践与优化

状态机(FSM)是机器人软件开发中管理复杂行为逻辑的核心工具,广泛应用于导航、任务执行、故障处理等场景。本文系统探讨状态机的基础理论(定义、要素)、主流设计模式(经典FSM、分层状态机HSM、行为树BT),以及工业级实现方法(代码架构、线程安全、调试技巧)。通过移动机器人导航和机械臂任务执行的案例,分析分层状态机的实际应用,并总结常见陷阱(如状态爆炸、阻塞操作)与优化策略(异步化、事件过滤)。

郑伟强dev的专栏 292

手把手教你用LabelImg打造专属YOLO数据集:从标注到训练全攻略!

YOLO(You Only Look Once)是一种快速、高效的目标检测算法。它使用一种简洁的.txt文件格式来保存每张图片中的标注信息,适合构建自定义目标检测数据集。🔹 图像文件.jpg.png等;每张图片将对应一个同名的标签文件(.txtdog.jpg对应dog.txt;图像在训练前通常会被缩放成统一尺寸,例如 YOLOv3 默认输入为416x416。🔹 标签文件(.txt)是一个纯文本文件;每一行表示一个标注目标;字段说明类别编号,从0开始,例如:狗是0,猫是1x_center。

FJN110的博客 2464

Spring Boot 数据源与 MyBatis(-Plus) 自定义配置详解

本文详解 Spring Boot 中单数据源环境下 HikariCP 与 MyBatis-Plus 的自定义配置。通过手动声明 SqlSessionFactory,实现下划线转驼峰、日志输出、一级缓存策略等精细化控制。结合 HikariCP 核心参数调优(如最大连接数、连接生命周期),确保高性能与稳定性。适用于仅需访问单一数据库的场景,避免多数据源复杂性,兼顾性能与可维护性。

BADAO_LIUMANG_QIZHI的博客 196

uniapp - 实现免费OCR文字识别方案,用户上传图片后进行扫描识别获取图片上的文字,uniApp纯前端做图片OCR识别——无需服务器进行OCR识别插件(不需要依赖任何SDK或第三方API服务)

uniapp实现orc识别免费的插件识别不花钱,无需第三方OCR文字识别API,uniApp拍照或者选择图片免费识别,纯前端不需要服务器,Uniapp提取图片上的文字,本地ocr识别技术,uni-app图片OCR识别文本,uniapp有没有免费的ocr识别组件,uniapp前端实现文字识别,身份证识别,营业执照识别 (兼容APP、H5、小程序 不需要任何SDK)跨端无SDK方案:Uniapp实现OCR文字,离线OCR识别,uniapp tesseract.js实现文字识别,uniapp文字识别无需依赖sdk

🏆 前端领域优质创作者 4249

Java EE 进阶:8.MyBatis 操作数据库(入门)(第一弹)

Java EE 进阶:8.MyBatis 操作数据库(入门)(第一弹)

要努力去发光,而不是被照亮~ 118

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

LeetCode Hot 100 二叉树专题(二)3 题(Java)

本篇文章共 3 题:543. 二叉树的直径、102. 二叉树的层序遍历、108. 将有序数组转换为二叉搜索树。 每道题都统一按「① 题目分析 & 解题思路 → ② 常见解法(附代码)及讲解 → ③ 知识点总结」的顺序组织;代码使用 Java 编写,节点定义沿用 LeetCode 默认的 TreeNode。

2401_88612756的博客 365

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Decorator

TaskDecorator 是异步场景下"跨线程传递上下文"的标准方案,主要用于传递 MDC、用户信息、数据源路由等上下文数据,核心价值是让异步任务的日志链路不中断、业务上下文不丢失。TaskDecorator 是 Spring 提供的一个钩子接口,用于在异步任务执行前对 Runnable 进行包装,常用于跨线程传递上下文。如果你在项目中遇到具体的异步上下文传递问题,可以把代码贴出来,我帮你给出最合适的 Decorator 方案 👍。✅ 核心能力:在线程切换时,把"父线程的上下文"搬到"子线程"

wlwork66的博客 104

深度学习工具包 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")

JDK 下载安装:装完 Java 提示「不是内部或外部命令」?环境变量没配

JDK 是写 Java 程序必须装的东西。它包含运行 Java 的虚拟机(JRE)和编译 Java 的编译器(javac)——装了它,能跑、.java文件能编译成可执行程序。免费,学习和小规模生产都不花钱。

科小怪的博客 627

C++ 多态详解:作用、原理与实战用法

多态是C++面向对象的核心特性,通过虚函数实现运行期动态绑定,使同一接口在不同对象上表现出不同行为。其核心作用包括统一接口、提升可扩展性、降低耦合、支持运行时分派与批量处理。实现依赖虚函数表(vtable)和虚指针(vptr),需注意虚析构函数、对象切片等陷阱。相比编译期多态(模板),运行期多态灵活性高但有调用开销。合理结合两者,可兼顾代码的灵活性与性能,是构建可扩展、低耦合系统的关键。

2402_85743155的博客 377

java框架大全

java框架大全

qq_39326137的博客 183

Java 多态 学习笔记

多态是面向对象编程的重要特性,指同一操作作用于不同对象时产生不同行为。其核心在于“父类引用指向子类对象”,结合方法重写实现运行时动态绑定。多态使代码更灵活、可扩展,如用Person p = new Student();统一处理各类人员注册,无需修改调用逻辑。但多态无法直接调用子类特有方法,需通过instanceof判断并强制转换。编译时看左边(类型),运行时看右边(实际对象),实现解耦与维护便利。

AA_AA114514的博客 355

SecureRandom做随机源,这个Java随机字符串工具类有3个方法

本文分享一款JDK17环境下的Java随机字符串工具类,内置3个开箱即用的方法,全部采用SecureRandom加密安全随机源,不存在弱随机、可预测、取模偏差等问题。工具类支持默认62字符集随机串、纯数字随机串、自定义字符集随机串三种生成模式,支持Unicode码点级别的字符集处理,兼容Emoji等增补字符,边界处理严格,异常信息明确,适合验证码、邀请码、盐值、随机口令、短链码等场景,源码可直接复制使用。

Java后端 | AI智能体应用实战派 | 电脑技能行家 297

Java实现批量线段相交检测(跨积判定+扫描线优化与踩坑复盘)

【代码】Java实现批量线段相交检测(跨积判定+扫描线优化与踩坑复盘)

m0_64476639的博客 326

ubuntu安装hadoop系统

本文详细介绍了基于VMware克隆虚拟机搭建三节点Hadoop分布式集群的全过程:使用同一Ubuntu镜像克隆出master、worker1、worker2三台虚拟机,依次配置主机名、固定IP(如192.168.82.10/11/12)、SSH服务及免密登录,确保节点间网络互通。随后安装Java,下载配置Hadoop并分发至各节点,最终初始化启动集群,验证其存储与计算功能,实现高效的大数据环境部署。

qq_43592674的博客 326

Agent 状态栏在上下文中的具体位置

Agent状态栏以user角色消息形式追加至上下文末尾,而非修改system消息,避免破坏KVCache。此举仅为API技术实现,内容由框架自动生成,非真实用户输入,通过<agent_status>标签标识,确保模型获取最新状态且不影响缓存。该设计遵循“动态信息追加、静态信息固定”原则,实现高效、低延迟的状态传递。

lj1109053360的专栏 72

Mac上装了最新版本的Android Studio,但是没找到jdk的设置选项也没找到jbr的目录

新版Android Studio(2025.3.1+)因三项变更导致常见问题:一、JDK设置移至“DaemonJVM criteria”,新项目默认自动探测或下载JDK;二、JBR目录改名为带版本号的jbr-21等,需进入.app/Contents/查看,或通过About窗口确认运行时;三、命令行缺adb因platform-tools未加入PATH,需在SDK Manager中勾选并配置~/.zshrc中的ANDROID_HOME及PATH。重装或清理残留可解决缺失问题,切勿手动设JAVA_HOME或安装冲

Programming is a highly artistic endeavor 342
上一篇: 一款简单易用的远程日志查看器,可实时查看云服务器上的日志数据
下一篇: 如何在系统中正确判定工作日与节假日?从需求分析到技术设计与实现
ALGO阿狗
博客等级 码龄9年 64粉丝 149原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值