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

Mybatis加密解密查询操作(sql前),where要传入加密后的字段时遇到的问题

项目场景:

提示:这里简述项目相关背景:

例如:Mybatis加密解密查询操作(sql前),where要传入加密后的字段时遇到的问题


问题描述

提示:这里描述项目中遇到的问题:

例如:数据传输过程中数据不时出现丢失的情况,偶尔会丢失一部分数据
APP 中接收数据代码:

public Object intercept(Invocation invocation) throws Throwable {ParameterHandler parameterHandler = (ParameterHandler) invocation.getTarget();// 获取传入的参数对象Object parameterObject = parameterHandler.getParameterObject();if (parameterObject instanceof Map) {Map<?, ?> paramMap = (Map<?, ?>) parameterObject;for (Map.Entry<?, ?> entry : paramMap.entrySet()) {Object key = entry.getKey();Object value = entry.getValue();// 对于带有 @Sensitive 注解的字段,进行加密处理if (value != null && !value.toString().isEmpty()) {  // 判空和空字符串检查// 反射检查该字段是否标记了 @Sensitive 注解if (isSensitiveField(value)) {String encryptedValue = SensitiveDataUtils.encrypt(value.toString(), SM4_KEY);((Map<Object, Object>) paramMap).put(key, encryptedValue);}}}} else {// 处理非 Map 类型的参数(如单个对象查询)encryptSensitiveFields(parameterObject);}// 执行原始逻辑return invocation.proceed();}
这个方法有问题啊

原因分析:

提示:这里填写问题的分析:

是的,这个 intercept 方法存在几个潜在问题,可能导致在处理加密字段时出现错误。以下是详细的分析和改进建议:

  1. parameterObject 为 Map 类型时的处理
    在你当前的代码中,如果 parameterObject 是 Map 类型,会迭代其中的 key-value 对并检查每个 value 是否标记了 @Sensitive 注解,进而进行加密处理。这里有几个潜在问题:

value 可能是复杂对象:目前的判断条件是 if (value != null && !value.toString().isEmpty()),但是 value 可能是一个复杂对象(例如 User 对象),而不是一个简单的 String 类型。在这种情况下,直接使用 value.toString() 可能并不能反映实际字段的内容。

isSensitiveField 反射问题:你尝试通过反射检查 value 是否包含 @Sensitive 注解,但是 value 很可能是一个普通的 Java 对象(如 AdminUserDO),直接传给 isSensitiveField 可能会导致反射错误。

  1. parameterObject 不是 Map 类型时的处理
    如果 parameterObject 不是 Map 类型,你使用 encryptSensitiveFields(parameterObject) 来处理加密。该方法会检查对象中的字段并加密被 @Sensitive 注解标记的字段。问题在于,你并没有考虑 parameterObject 可能是一个嵌套对象,或者该对象的类型可能没有适当的 getter 方法,导致反射出错。

  2. 改进建议
    我们需要确保在处理 Map 类型和非 Map 类型的参数时,都能正确处理嵌套对象和字段加密。


解决方案:

提示:这里填写该问题的具体解决方案:

package cn.iocoder.yudao.framework.mybatis.core.handler;import cn.iocoder.yudao.framework.annotation.Sensitive;
import cn.iocoder.yudao.framework.mybatis.core.util.SensitiveDataUtils;
import org.apache.ibatis.executor.parameter.ParameterHandler;
import org.apache.ibatis.plugin.*;import java.lang.reflect.Field;
import java.sql.PreparedStatement;
import java.util.Map;import static cn.iocoder.yudao.framework.mybatis.core.util.SensitiveDataUtils.SM4_KEY;@Intercepts({@Signature(type = ParameterHandler.class, method = "setParameters", args = {PreparedStatement.class})
})
public class SensitiveDataEncryptInterceptor implements Interceptor {@Overridepublic Object intercept(Invocation invocation) throws Throwable {ParameterHandler parameterHandler = (ParameterHandler) invocation.getTarget();// 获取传入的参数对象Object parameterObject = parameterHandler.getParameterObject();// 如果是 Map 类型的参数if (parameterObject instanceof Map) {Map<?, ?> paramMap = (Map<?, ?>) parameterObject;for (Map.Entry<?, ?> entry : paramMap.entrySet()) {Object key = entry.getKey();Object value = entry.getValue();// 判断 value 是否为带有 @Sensitive 注解的字段,进行加密处理if (value != null) {// 对 value 进行加密String encryptedValue = encryptSensitiveValue(value);// 如果字段需要加密,替换 Map 中的值if (encryptedValue != null) {// 强制转换为 Map<Object, Object> 来避免类型问题((Map<Object, Object>) paramMap).put(key, encryptedValue);}}}} else {// 如果不是 Map 类型,处理对象的字段加密encryptSensitiveFields(parameterObject);}// 执行原始逻辑return invocation.proceed();}private String encryptSensitiveValue(Object value) throws Exception {if (value instanceof String && isSensitiveField(value)) {// 对象字段加密处理return SensitiveDataUtils.encrypt(value.toString(), SM4_KEY);}return null;}private boolean isSensitiveField(Object value) {// 判断该对象字段是否带有 @Sensitive 注解Class<?> clazz = value.getClass();for (Field field : clazz.getDeclaredFields()) {if (field.isAnnotationPresent(Sensitive.class)) {return true;  // 该字段带有 @Sensitive 注解}}return false;}private void encryptSensitiveFields(Object parameterObject) throws Exception {// 遍历对象的字段,检查是否带有 @Sensitive 注解Field[] fields = parameterObject.getClass().getDeclaredFields();for (Field field : fields) {if (field.isAnnotationPresent(Sensitive.class)) {field.setAccessible(true);Object value = field.get(parameterObject);if (value != null) {String encryptedValue = SensitiveDataUtils.encrypt(value.toString(), SM4_KEY);field.set(parameterObject, encryptedValue);}}}}
}

主要改进点:

encryptSensitiveValue 方法:

这个方法首先检查传入的 value 是否是需要加密的字段,如果是,则进行加密。
通过调用 isSensitiveField(value) 来判断是否需要加密,而不直接依赖 value.toString()。

isSensitiveField 方法:

通过反射检查 value 对象是否包含带有 @Sensitive 注解的字段。之前可能存在错误的反射逻辑,这里是基于对象字段的反射检查。

encryptSensitiveFields 方法:

遍历 parameterObject 的字段,并加密带有 @Sensitive 注解的字段。处理对象字段时,直接通过反射获取字段并进行加密。
其他注意事项:
确保 SensitiveDataUtils.encrypt 方法能够正确处理所有类型的 value,尤其是对于非 String 类型的对象,可能需要进一步优化加密处理。
如果 parameterObject 是一个复杂的对象,确保该对象的所有字段都可以通过反射访问(即字段为 public 或者使用了 setAccessible(true))。
这样修改后,应该能够有效避免反射错误并正确处理加密逻辑。

相关文章:

Mybatis加密解密查询操作(sql前),where要传入加密后的字段时遇到的问题

项目场景&#xff1a; 提示&#xff1a;这里简述项目相关背景&#xff1a; 例如&#xff1a;Mybatis加密解密查询操作&#xff08;sql前&#xff09;&#xff0c;where要传入加密后的字段时遇到的问题 问题描述 提示&#xff1a;这里描述项目中遇到的问题&#xff1a; 例如…...

Netdevops入门基础学习03

1、数据类型 在Python中解释器会自动识别数据类型&#xff0c;但是在C语言中需要手动指定&#xff08;故Python简单易学&#xff09; 字符串&#xff1a; str&#xff08;string&#xff09; 在Python中加了引号的都是字符串整数&#xff1a; int (integer)浮点数&#xff1a; …...

什么是自然语言处理

01.什么是自然语言处理 自然语言处理(Natural Language Processing,简称NLP)是一门跨学科领域,它结合了计算机科学、人工智能、语言学、心理学等多个学科的知识,旨在使计算机能够理解、解释、处理和生成人类语言。自然语言处理的目标是缩小人类语言和计算机之间的差距,使…...

网络安全怎么学习

当我们谈论网络安全时&#xff0c;我们正在讨论的是保护我们的在线空间&#xff0c;这是我们所有人的共享责任。网络安全涉及保护我们的信息&#xff0c;防止被未经授权的人访问、披露、破坏或修改。 一、网络安全的基本概念 网络安全是一种保护&#xff1a;它涉及保护我们的设…...

网络多层的协议详述

网络层 1&#xff09;地址管理&#xff1a;制定一系列的规则&#xff0c;通过地址&#xff0c;在网络上描述出一个设备的位置 2&#xff09;路由选择&#xff1a;网络环境比较复杂&#xff0c;从一个节点到另一个节点&#xff0c;存在很多条不同的路径&#xff0c;需要规划出…...

【C#】方法参数的修饰符ref 与 out

在 C# 中&#xff0c;ref 和 out 是方法参数的修饰符&#xff0c;用于将参数 按引用传递&#xff0c;而不是按值传递。这允许方法修改调用者传递的变量的值。尽管它们的行为类似&#xff0c;但有重要的区别和适用场景。 1. ref 的含义与使用 含义 引用传递&#xff1a; 参数通…...

hpe服务器更新阵列卡firmware

背景 操作系统&#xff1a;RHEL7.8 hpe服务器经常出现硬盘断开&#xff0c;阵列卡重启问题&#xff0c;导致系统hang住。只能手动硬重启。 I/O error&#xff0c;dev sda smartpqi 0000:5c:00:0: resettiong scsi 1:1:0:1 smartpqi 0000:5c:00:0: reset of scsi 1:1:0:1:…...

arcgisPro相接多个面要素转出为完整独立线要素

1、使用【面转线】工具&#xff0c;并取消勾选“识别和存储面邻域信息”&#xff0c;如下&#xff1a; 2、得到的线要素&#xff0c;如下&#xff1a;...

【机器学习】【集成学习——决策树、随机森林】从零起步:掌握决策树、随机森林与GBDT的机器学习之旅

这里写目录标题 一、引言机器学习中集成学习的重要性 二、决策树 (Decision Tree)2.1 基本概念2.2 组成元素2.3 工作原理分裂准则 2.4 决策树的构建过程2.5 决策树的优缺点&#xff08;1&#xff09;决策树的优点&#xff08;2&#xff09;决策树的缺点&#xff08;3&#xff0…...

YOLOv8目标检测——详细记录使用ONNX Runtime进行推理部署C++/Python实现

概述 在之前博客中有介绍YOLOv8从环境安装到训练的完整过程&#xff0c;本节主要介绍ONNX Runtime的原理以及使用其进行推理加速&#xff0c;使用Python、C两种编程语言来实现。 https://blog.csdn.net/MariLN/article/details/143924548?spm1001.2014.3001.5501 1. ONNX Ru…...

联合物种分布模型(JSDM)与Hmsc包:群落生态学数据分析与预测技术

联合物种分布模型&#xff08;Joint Species Distribution Modelling&#xff0c;JSDM&#xff09;在生态学领域&#xff0c;特别是群落生态学中发展最为迅速&#xff0c;它在分析和解读群落生态数据的革命性和独特视角使其受到广大国内外学者的关注。在学界不同研究团队研发出…...

蓝桥杯——竞赛省赛国赛题分享

目录 一.[蓝桥杯 2013 省 AB] 错误票据 代码如下&#xff1a; 二.[蓝桥杯 2024 省 Java B] 报数游戏 代码如下&#xff1a; 讲解&#xff1a; 三.[蓝桥杯 2014 国 C] 拼接平方数 代码如下&#xff1a; 四.三步问题&#xff08;递归&#xff0c;上台阶&#xff09; 代码…...

【ubuntu18.04】ubuntu18.04挂在硬盘出现 Wrong diagnostic page; asked for 1 got 8解决方案

错误日志 [ 8754.700227] usb 2-3: new full-speed USB device number 3 using xhci_hcd [ 8754.867389] usb 2-3: New USB device found, idVendor0e0f, idProduct0002, bcdDevice 1.00 [ 8754.867421] usb 2-3: New USB device strings: Mfr1, Product2, SerialNumber0 [ 87…...

Hive其一,简介、体系结构和内嵌模式、本地模式的安装

目录 一、Hive简介 二、体系结构 三、安装 1、内嵌模式 2、测试内嵌模式 3、本地模式--最常使用的模式 一、Hive简介 Hive 是一个框架&#xff0c;可以通过编写sql的方式&#xff0c;自动的编译为MR任务的一个工具。 在这个世界上&#xff0c;会写SQL的人远远大于会写ja…...

如何在 Ubuntu 上安装 NodeBB 并使用 Nginx 反向代理

简介 NodeBB 是一款基于 Node.js 的开源论坛软件&#xff0c;为在线社区提供了现代化和响应式的解决方案。在 Ubuntu Linux 上运行的 NodeBB 利用了操作系统的强大性和灵活性&#xff0c;以提供高性能和可扩展性。它结合了 MongoDB 或 Redis 进行数据库管理&#xff0c;使其能…...

Linux脚本语言学习--下

4.Bash的变量 4.1.用户自定义变量 4.1.1.什么是变量 变量是计算机内存的单元&#xff0c;其中存放的值可以改变。当Shell脚本需要保存一些信息的时候&#xff0c;如一个文件名或是一个数字&#xff0c;就把他存放在一个变量中。每个变量有一个名字&#xff0c;所以很容易引用…...

基于Spring Boot的医院质控上报系统

一、系统背景与意义 医院质控上报系统旨在通过信息化手段&#xff0c;实现医院质量控制的标准化、流程化和自动化管理。该系统能够帮助医院实时监控医疗质量数据&#xff0c;及时发现和处理潜在的质量问题&#xff0c;从而确保医疗服务的安全性和有效性。同时&#xff0c;系统…...

React 第十七节 useMemo用法详解

概述 useMemo 是React 中的一个HOOK&#xff0c;用于根据依赖在每次渲染时候缓存计算结果&#xff1b; 大白话就是&#xff0c;只有依赖项发生变化时候&#xff0c;才会重新渲染为新计算的值&#xff0c;否则就还是取原来的值&#xff0c;有点类似 vue 中的 computed 计算属性…...

大模型呼入机器人系统如何建设?

大模型呼入机器人系统如何建设&#xff1f; 作者&#xff1a;开源呼叫中心系统 FreeIPCC, Github地址&#xff1a;https://github.com/lihaiya/freeipcc 大模型呼叫中心呼入机器人系统的建设是一个涉及多个环节和领域的综合性工程。以下是一个详细的步骤指南&#xff0c;涵盖了…...

【Java 学习】详细讲解---包和导包、Scanner类、输入源

1. 包 1.1 什么是包&#xff1f; 举个例子&#xff0c;你和你的同学有不同的家庭&#xff0c;你们都有自己的爸爸妈妈&#xff0c;都有自己的家。在自己的家中你们可以按照自己爱好摆放东西&#xff0c;都互不干扰。但是&#xff0c;假如你们的家都在一起&#xff0c;你们就不…...

java开发入门学习四-运算符

运算符 运算符&#xff1a; 运算法是一种特殊的符号&#xff0c;标识数据的运算&#xff0c;赋值等 根据分类 算数运算符 和前端运算法的方式是一致的&#xff0c;这里简单的描述% -- %: 取余 &#xff1a;增加 --&#xff1a; 减少 class Computed {public static voi…...

2009 ~ 2019 年 408【操作系统】大题解析

2009 年 讲解视频推荐&#xff1a;【BOK408真题讲解-2009年&#xff08;催更就退网版&#xff09;】 1. 同步与互斥&#xff08;7’&#xff09; 三个进程 P1, P2, P3 互斥使用一个包含 N&#xff08;N > 0&#xff09;个单元的缓冲区。P1 每次用 produce() 生成一个正整数…...

RestTemplate实时接收Chunked编码传输的HTTP Response

学习调用AI接口的时候&#xff0c;流式响应都是使用的 Transfer-Encoding: chunked&#xff0c;图方便想用RestTemplate&#xff0c;但是平时用到的都是直接返回响应对象的类型。使用bing搜索到一种方式&#xff0c;使用下面的代码来读取&#xff0c;于是掉这个坑里了&#xff…...

Java设计模式 —— 【结构型模式】适配器模式(类的适配器、对象适配器、接口适配器)详解

文章目录 基本介绍一、类的适配器二、对象适配器三、接口适配器总结 基本介绍 生活中有很多例子&#xff1a; 不同国家的插座接口不同&#xff0c;需要转换器&#xff1b;家用电源220V&#xff0c;手机只接受5V充电&#xff0c;需要转换器&#xff1b;读卡器&#xff0c;拓展…...

RabbitMQ 消息持久化/镜像队列/lazy对时延影响

测试背景&#xff1a; 不同条件下RabbitMQ不同队列类型的生产时延测试&#xff1a; 测试环境&#xff1a; 机型&#xff1a;rabbimtq.2u4g.cluster 背景流量&#xff1a;1000 TPS 测试条件&#xff1a; 消息大小 4k&#xff0c;消息条数为1000条&#xff0c;时延取值为平均…...

SQL在线格式化 - 加菲工具

SQL在线格式化 打开网站 加菲工具 选择“SQL 在线格式化” 或者直接访问 https://www.orcc.online/tools/sql 输入sql&#xff0c;点击上方的格式化按钮即可 输入框得到格式化后的sql结果...

【vue】在页面右下角添加悬浮按钮组件

效果图&#xff1a; 如上图所示&#xff0c;需要在页面的左下角添加一个悬浮按钮&#xff0c;鼠标放上去时候展示更多详细按钮&#xff0c;点击触发相应方法。 <div class"floating-component"><!-- 悬浮内容 --><el-tooltip placement"left&qu…...

MyBatis-Plus中isNull与SQL语法详解:处理空值的正确姿势

目录 前言1. 探讨2. 基本知识3. 总结 前言 &#x1f91f; 找工作&#xff0c;来万码优才&#xff1a;&#x1f449; #小程序://万码优才/r6rqmzDaXpYkJZF 基本的Java知识推荐阅读&#xff1a; java框架 零基础从入门到精通的学习路线 附开源项目面经等&#xff08;超全&#x…...

C语言(指针练习2)

编写函数,要求用指针做形参&#xff0c;分别实现以下功能&#xff1a; &#xff08;1&#xff09;求一个字符串长度 &#xff08;2&#xff09;在一个字符 串中统计大写字母的个数 &#xff08;3&#xff09;在一个字符串中统计数字字符的个数 #include <stdio.h>int str…...

ES6学习Symbol(五)

这里写目录标题 一、概述二、代码 一、概述 ES6引入了一种新的原始数据类型Symbol&#xff0c;表示独一无二的值。 它是 JavaScript 语言的第七种数据类型&#xff0c;前六种是&#xff1a; undefined 、 null 、布尔值&#xff08;Boolean&#xff09;、字符串&#xff08;St…...

简易分页制作

简易分页功能实现 分页是一种常见的前端功能&#xff0c;特别是在需要展示大量数据时。它通过将数据分割成多个页面&#xff0c;帮助用户更容易浏览并提高页面加载性能。本文将介绍一个简易分页的实现思路及其代码实现&#xff0c;旨在帮助开发者快速理解并实现分页功能。 功…...

概率论得学习和整理27:关于离散的数组 随机变量数组的均值,方差的求法3种公式,思考和细节。

目录 1 例子1&#xff1a;最典型的&#xff0c;最简单的数组的均值&#xff0c;方差的求法 2 例子1的问题&#xff1a;例子1只是1个特例&#xff0c;而不是普遍情况。 2.1 例子1各种默认假设&#xff0c;导致了求均值和方差的特殊性&#xff0c;特别简单。 2.2 我觉得 加权…...

arXiv-2024 | NavAgent:基于多尺度城市街道视图融合的无人机视觉语言导航

作者&#xff1a;Youzhi Liu, Fanglong Yao*, Yuanchang Yue, Guangluan Xu, Xian Sun, Kun Fu 单位&#xff1a;中国科学院大学电子电气与通信工程学院&#xff0c;中国科学院空天信息创新研究院网络信息系统技术重点实验室 原文链接&#xff1a;NavAgent: Multi-scale Urba…...

WPF 布局控件

wpf 布局控件有很多&#xff0c;常用的有&#xff1a;Grid, UniformGrid, Border, StackPanel, WrapPanel, DockPanel。 1. Grid Grid 经常作为控件的 Content 使用&#xff0c;常作为 Windows, UserControl 等 UI 元素的根节点。它用来展示一个 n 行 n 列的排版。 因此就有…...

在Mac电脑上安装adb环境

当你在命令行输入 adb version 或adb devices, 报错&#xff1a;zsh: command not found: adb &#xff0c;那么说明你的 Mac 上没有安装 ADB&#xff08;Android Debug Bridge&#xff09;&#xff0c;或者它没有添加到你的路径中。你可以按照以下步骤安装和配置 ADB&#xff…...

方正畅享全媒体新闻采编系统 reportCenter.do SQL注入漏洞复现

0x01 产品简介 方正畅享全媒体新闻生产系统是以内容资产为核心的智能化融合媒体业务平台,融合了报、网、端、微、自媒体分发平台等全渠道内容。该平台由协调指挥调度、数据资源聚合、融合生产、全渠道发布、智能传播分析、融合考核等多个平台组成,贯穿新闻生产策、采、编、发…...

Linux SHELL脚本中的常用命令

一.设置主机名称 1.文件的方式 [rootlocalhost 桌面]# vim /etc/hostname [rootlocalhost 桌面]# cat /etc/hostname shell.aaa.org 修改完毕文件后在当前的shell中是不生效的 如果需要看到效果&#xff0c;关闭当前shell后重新开启新的shell 2.通过命令更改主机名 [rootl…...

Go语言启动独立进程

文章目录 问题解决方案1. **将 npc.exe 启动为独立的进程**2. **修改 exec.Command 函数**示例代码解释为什么这样有效注意 问题 在你当前的代码中&#xff0c;调用 exec.Command("XXX.exe") 启动 XXX.exe 程序时&#xff0c;这个程序是由 Go 程序直接启动的。如果 …...

STM32中ADC模数转换器

一、ADC简介 ADC模拟-数字转换器 ADC可以将引脚连续变化的模拟电压转换为内存中存储的数字变量&#xff0c;建立模拟电路到数字电路的桥梁 12位逐次逼近型ADC&#xff0c;1us转换时间 输入电压范围&#xff1a; 0~3.3V&#xff0c;转换结果范围&#xff1a;0~4095 18个输入…...

为什么要用单例模式?

‌单例模式是一种创建型设计模式&#xff0c;用于确保某个类只有一个实例&#xff0c;并提供一个全局访问点&#xff0c;使得其他类可以轻松访问该实例‌。 使用单例模式的主要原因包括以下几点&#xff1a;‌ ‌确保唯一性‌&#xff1a;在某些情况下&#xff0c;我们需要确…...

线性表查找:Python 实现与性能分析

引言 在数据处理领域&#xff0c;查找操作是一项基础且关键的任务。线性表作为一种常见的数据结构&#xff0c;其查找算法的效率直接影响程序的性能。本文将深入探讨线性表查找的原理、Python 实现以及性能分析&#xff0c;为你揭示如何在 Python 中高效地进行线性表查找。 一…...

QT3学习之进阶理解信号和槽:如何自定义一个类信号,供其它类调用槽函数

下面是QWidget源码&#xff0c;定义了两个事件 /*!This event handler can be reimplemented in a subclass to receivewidget enter events.An event is sent to the widget when the mouse cursor enters thewidget.\sa leaveEvent(), mouseMoveEvent(), event() */void QWi…...

(Image Signal Processor)ISP简介

文章目录 ISP功能简介ISP的主要功能ISP的主要模块1. **黑电平校正&#xff08;Black Level Correction, BLC&#xff09;**2. **噪声去除&#xff08;Denoise&#xff09;**3. **色彩校正&#xff08;Color Correction Matrix, CCM&#xff09;**4. **自动曝光&#xff08;Auto…...

upload-labs靶场保姆级攻略

第一关&#xff1a;删除前端js校验 写一个一句话木马&#xff0c;命名为1.php 一句话木马 浏览上传 我们发现不可以上传&#xff0c;右键检查&#xff0c;依次点击 找到return checkFile()删掉&#xff0c;再上传 去看一下是否已经写入进去一句话木马 页面什么也没有&#xff…...

02、10个富士胶片模拟的设置

二色彩 1、色彩的加减控制全局的饱和度增减&#xff1b; 2、色彩效果只提升暖色系饱和度&#xff1b; 3、FX蓝色大幅度提升蓝色系饱和度&#xff1b; 4、三个参数都不改变颜色的色相。 2.1 色彩 色彩调整的是拍摄画面整体的色彩饱和程度 2.2色彩效果 调整的是画面中暖色…...

大模型呼出机器人详解

大模型呼出机器人详解 原作者&#xff1a;开源呼叫中心FreeIPCC&#xff0c;其Github&#xff1a;https://github.com/lihaiya/freeipcc 大模型呼出机器人是基于大规模深度学习模型构建的智能化客服系统&#xff0c;它能够处理海量数据并学习其中的规律&#xff0c;从而实现高…...

计算机基础知识——数据结构与算法(三)(山东省大数据职称考试)

大数据分析应用-初级 第一部分 基础知识 一、大数据法律法规、政策文件、相关标准 二、计算机基础知识 三、信息化基础知识 四、密码学 五、大数据安全 六、数据库系统 七、数据仓库. 第二部分 专业知识 一、大数据技术与应用 二、大数据分析模型 三、数据科学 数据结构与算法…...

【Unity功能集】TextureShop纹理工坊(三)图层(下)

项目源码&#xff1a;在终章发布 索引 图层渲染绘画区域图层Shader 编辑器编辑模式新建图层设置当前图层上、下移动图层删除图层图层快照 图层 在PS中&#xff0c;图层的概念贯穿始终&#xff08;了解PS图层&#xff09;&#xff0c;他可以称作PS最基础也是最强大的特性之一。…...

基于 SSM 框架 Vue 电脑测评系统:引领电脑评测新方向

4系统概要设计 4.1概述 本系统采用B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式&#xff0c;是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在任何时间、任何地点使用。系统工作原理图如图4-1所示&#xff1a; 图4-1系统工作原理…...

Android笔记【19】

具体示例 run: val result someObject.run {// 这里可以使用 thisthis.someMethod() }let: val result someObject?.let {// 这里使用 itit.someMethod() }with: val result with(someObject) {// 这里使用 thissomeMethod() }apply: val obj SomeClass().apply {// 这里使…...