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

SpringBoot实战1

SpringBoot实战1


一、开发环境,环境搭建-----创建项目

通过传统的Maven工程进行创建SpringBoot项目
在这里插入图片描述

(1)导入SpringBoot项目开发所需要的依赖

一个父依赖:(工件ID为:spring-boot-starter-parent

<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.4.4</version>
</parent>

开发相关依赖

Web依赖:spring-boot-starter-web

<!--引入Web的依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>

Mybatis依赖:mybatis-spring-boot-starter

<!--引入Mybatis的依赖--><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>3.0.4</version></dependency>

MySQL的驱动依赖:mysql-connector-j

<!--引入MySQL的驱动依赖--><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId></dependency>

lombok工具依赖:

<!--lombok依赖--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><scope>provided</scope></dependency>

(2)创建基本的项目架构

Controller,Service,Mapper,POJO,utils

(3)在resources目录下加入application.yml的SpringBoot项目配置文件,在其中加入Jdbc的相关配置

spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/big_event?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTCusername: rootpassword: ****

(4)完成SQL配置,连接数据库,同时创建数据库表

(5)添加SpringBoot的启动类:(项目名)XxxApplication

加上@SpringBootApplication注解确定为启动类

@SpringBootApplication
public class BigEventApplication
{public static void main( String[] args) {SpringApplication.run(BigEventApplication.class, args);}
}

二、注册功能实现

localhost:8080/user/register

Controller层加上@RestController—>@ResponseBody可以自动将返回值转为JSON格式

通过Post的方式提交数据

@RestController
@RequestMapping("/user")
public class UserController {@Autowiredprivate UserService userService;@PostMapping("/register")public Result register(String username, String password){// TODO: 查询用户是否存在User user=userService.findByUserName(username);if (user!=null){return Result.error("用户已存在");}else {// TODO: 用户不存在的话就开始注册用户userService.register(username,password);return Result.success();}}
}

编写对应的业务层 ,数据层的操作

public interface UserService {// 注册void register(String username, String password) ;// 根据用户名查询用户User findByUserName(String username);
}
@Service
public class UserServiceImpl implements UserService {@Autowiredprivate UserMapper userMapper;@Overridepublic void register(String username, String password) {// TODO: 对于用于的密码进行MD5加密处理String md5Password = Md5Util.getMD5String(password);userMapper.add(username,md5Password);}@Overridepublic User findByUserName(String username) {User user =userMapper.findByUserName(username);return user;}
}
@Mapper
public interface UserMapper {// TODO: 必须加入创建时间,更新时间通过sql自带的now()函数@Insert("insert into user(username,password,create_time,update_time)" +" values(#{username},#{password},now(),now())")void add(String username, String password);@Select("select * from user where username=#{username}")User findByUserName(String username);
}

参数校验框架(Spring Validation)

在注册的时候注意加上:对注册接口的参数进行合法性校验

使用步骤:

1、引入对应的依赖:spring-boot-starter-validation

<!-- 添加validation依赖用于参数的校验 -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId>
</dependency>

2、在参数前面加上@Pattern注解(@Pattern(regexp=“正则表达式(注意Java中单斜杠不行需转成\\)”))

public Result register(@Pattern(regexp = "^\\S{5,16}$") String username,@Pattern(regexp = "^\\S{5,16}$") String password)

3、在对应的Controller类上加上@Validated

@Validated
public class UserController

注意:如果遇到参数校验失败的情况的话

4、通过全局异常处理器中处理参数校验失败

@RestControllerAdvice//表示该类是一个全局异常处理类

@ExceptionHandler(Exception.class)//表示该方法可以处理所有异常

//  TODO: 全局异常处理
@RestControllerAdvice
public class GlobalExceptionHandler {// TODO: 捕获所有异常@ExceptionHandler(Exception.class)public Result handleException(Exception e) {e.printStackTrace();return Result.error(StringUtils.hasLength(e.getMessage())?e.getMessage():"参数校验失败");}
}

三、登录功能实现

1、在数据表中查询用户

2、判断查询到的用户是否存在

3、用户存在判断密码是否正确

//TODO: 登录
@PostMapping("/login")
public Result login(@Pattern(regexp = "^\\S{5,16}$") String username,@Pattern(regexp = "^\\S{5,16}$") String password) {// TODO: 查询用户是否存在User loginUser = userService.findByUserName(username);// TODO: 判断用户是否存在if(loginUser==null){return Result.error("用户不存在");}// TODO: 判断密码是否正确else{if(Md5Util.getMD5String(password).equals(loginUser.getPassword())){// 登录成功return Result.success("jwt token令牌");}else {return Result.error("密码错误");}}
}

登录认证:

通过令牌技术承载业务的数据,减少后续请求查询数据库的次数,1、防止篡改,2、保证信息的合法性和有效性

JWT令牌:JSON Web Token(通信双方通过JSON数据格式安全的传输信息)
在这里插入图片描述

JWT组成—通过Base64的编码格式进行编码

1、Header头部:记录令牌的类型,签名算法(用于加密算法)

2、Payload有效载荷:携带一些自定义的信息,默认信息–不能存放私密数据

3、Signature签名:防止Token被篡改,确保安全性


JWT-生成:

引入JWT的依赖

<!-- 添加JWT依赖 -->
<dependency><groupId>com.auth0</groupId><artifactId>java-jwt</artifactId><version>4.4.0</version>
</dependency>

在单元测试中生成jwt令牌

public class JwtTest {@Testpublic void testGen(){Map<String, Object> claims =new HashMap<>();claims.put("id",1);claims.put("username","admin");//生成jwt代码String token = JWT.create().withClaim("user", claims)//添加自定义信息(载荷).withExpiresAt(new Date(System.currentTimeMillis() + 1000 * 60 * 60 * 12))//设置过期时间为12小时.sign(Algorithm.HMAC256("geshihua"));//指定算法,配置密钥System.out.println(token);}
}

jwt令牌的验证:

注意:

1、校验jwt的签名密钥要和生成jwt令牌的签名密钥吻合

2、jwt令牌解析验证报错的话那么说明对应的jwt令牌被篡改了,或者生成的jwt令牌过期失效了

//TODO:jwt令牌的验证
@Test
public void testParse(){//定义一个字符串模拟用户传递过来的TokenString token ="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9" +".eyJ1c2VyIjp7ImlkIjoxLCJ1c2VybmFtZSI6ImFkbWluIn0sImV4cCI6MTc0NDMyMTkyNX0" +".wfaRNJPOvVz6sU7rsyxnyzSKdezmhyhwslp4eUW2O4g";//调用API验证TokenJWTVerifier jwtVerifier = JWT.require(Algorithm.HMAC256("geshihua")).build();//解析Token,生成一个解析后的jwt对象DecodedJWT decodedJWT = jwtVerifier.verify(token);Map<String, Claim> claims = decodedJWT.getClaims();System.out.println(claims.get("user"));
}

将JWT令牌纳入登录验证中(登录成功了之后将相关的信息存储到Token中

// 登录成功
Map<String,Object> claims=new HashMap<>();
claims.put("id",loginUser.getId());
claims.put("username",loginUser.getUsername());
String token = JwtUtil.genToken(claims);
return Result.success(token);

在其他的业务接口中解析验证Token–原理

@GetMapping("/list")
public Result list(@RequestHeader(name = "Authorization") String token, HttpServletResponse response) {//验证Tokentry {Map<String, Object> claims = JwtUtil.parseToken(token);} catch (Exception e) {response.setStatus(401);return Result.error("请先登录");}return Result.success("获取到对应的文章信息了!!!");
}

通过拦截器Interceptor多个接口都需要同样的操作可以用拦截器进行实现
在这里插入图片描述

完成对应的验证操作,只有通过验证的才可以进行相关的业务操作

1、先创建一个登录校验的拦截器(LoginInterceptor)–》需要在拦截器这个类上面加一个注解@Component(用于Bean对象注册)

拦截器实现HanderInterceptor接口==>实现preHandle方法(意味在请求的Controller方法(请求访问服务器)之前进行调用)

@Component
public class LoginInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {//在这个拦截器中验证Token---》通过请求头中携带的的tokenString token = request.getHeader("Authorization");//解析Tokentry {Map<String, Object> claims = JwtUtil.parseToken(token);//TODO:如果解析成功,则放行return true;} catch (Exception e) {response.setStatus(401);//TODO:如果解析失败,则返回错误信息,并且拦截return false;}}
}

2、添加Interceptor拦截器到WebMvcConfig配置类中–》配置类需要通过注解@Component将配置类注册到Spring的IOC容器中去

(1)WebMvcConfig配置类需要实现WebMvcConfigurer接口

(2)配置类中将登录拦截器的Bean自动注入进来

@Autowired
private LoginInterceptor loginInterceptor;

(3)实现对应的接口方法–》用于添加对应的登录拦截器addInterceptors

@Configuration//TODO:配置类也需要注册到spring的IOC容器中
public class WebConfig implements WebMvcConfigurer {@Autowiredprivate LoginInterceptor loginInterceptor;//TODO:用于拦截器注册public void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(loginInterceptor)//TODO: 放行登录和注册接口,不进行拦截.excludePathPatterns("/user/login","/user/register");}
}

三、获取用户的详细信息(在进行此业务请求的时候需要再请求头中携带对象的token信息—Authorization)

根据用户名查询数据表中的用户信息(用户名的信息通过请求头中的token----Authorization获取得到)

@RequestHeader(name = "Authorization")String token

通过上面的 参数得到token携带的信息–》用户名的username,id

// TODO: 获取用户详细信息
@GetMapping("/userInfo")
public Result<User> userInfo(@RequestHeader(name = "Authorization")String token){//根据用户名查询用户信息---》用户名是通过token解析出来的Map<String, Object> map = JwtUtil.parseToken(token);String username = (String) map.get("username");User user = userService.findByUserName(username);return Result.success(user);
}

注意:对于数据表中存在有下划线的字段的时候在进行查询的时候不会自动转化为对应的驼峰命名导致查询不到对应的信息

解决方式一:

在配置文件中开启驼峰映射

mybatis:configuration:map-underscore-to-camel-case: true # 开启下划线转驼峰命名 自动将数据表中有下划线字段的转换为驼峰明明形式的

解决方式二:

在写SQL语句的时候对于有下划线的字段采取起别名的方式:

@Select("select id, username, password, nickname, email, user_pic as userPic, create_time as createTime, update_time as updateTime from user where username=#{username}")

相关文章:

SpringBoot实战1

SpringBoot实战1 一、开发环境&#xff0c;环境搭建-----创建项目 通过传统的Maven工程进行创建SpringBoot项目 &#xff08;1&#xff09;导入SpringBoot项目开发所需要的依赖 一个父依赖&#xff1a;&#xff08;工件ID为&#xff1a;spring-boot-starter-parent&#xf…...

GSO-YOLO:基于全局稳定性优化的建筑工地目标检测算法解析

论文地址:https://arxiv.org/pdf/2407.00906 1. 论文概述 《GSO-YOLO: Global Stability Optimization YOLO for Construction Site Detection》提出了一种针对建筑工地复杂场景优化的目标检测模型。通过融合全局优化模块(GOM)​、稳定捕捉模块(SCM)​和创新的AIoU损失函…...

解读json.loads函数参数

json.loads()函数是解码JSON字符串为Python对象的核心工具。本文将深入探讨json.loads()函数的各个参数。 一、基本功能与输入类型 1. 功能概述 json.loads(s, *, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=N…...

2025.04.10-拼多多春招笔试第一题

📌 点击直达笔试专栏 👉《大厂笔试突围》 💻 春秋招笔试突围在线OJ 👉 笔试突围OJ 01. 神奇公园的福娃占卜 问题描述 LYA在一个神奇的公园里发现了一条特殊的小径,小径上排列着一群可爱的福娃玩偶。这条小径有 n n...

【学习笔记】CPU 的“超线程”是什么?

1. 什么是超线程&#xff1f; 超线程&#xff08;Hyper-Threading&#xff09;是Intel的技术&#xff0c;让一个物理CPU核心模拟出两个逻辑核心。 效果&#xff1a;4核CPU在系统中显示为8线程。 本质&#xff1a;通过复用空闲的硬件单元&#xff08;如ALU、FPU&#xff09;&a…...

Docker Harbor

下载Harbor安装包 wget https://github.com/goharbor/harbor/releases/download/v2.5.0/harbor-offline-installer-v2.5.0.tgz 解压安装包 tar xvf harbor-offline-installer-v2.5.0.tgz cd harbor 配置harbor vi harbor.yml hostname: registry.example.com # Harbor …...

天梯集训笔记整理

1.着色问题 直接标注哪些行和列是被标注过的&#xff0c;安全格子的数量就是未标注的行*列 #include <bits/stdc.h> using namespace std;const int N 1e510; int hang[N],lie[N];int main(){int n,m;cin>>n>>m;int q;cin>>q;while(q--){int x,y;ci…...

C语言复习笔记--指针(4)

在经过前几篇的复习后我们已经了解了大部分指针的类型,今天让我们继续复习指针的其他内容吧. 函数指针变量 函数指针变量的创建 什么是函数指针变量呢&#xff1f;函数指针变量应该是⽤来存放函数地址的&#xff0c;未来通过地址能够调⽤函数的。 那么函数是否有地址呢&#x…...

008二分答案+贪心判断——算法备赛

二分答案贪心判断 有些问题&#xff0c;从已知信息推出答案&#xff0c;细节太多&#xff0c;过程繁杂&#xff0c;不易解答。 从猜答案出发&#xff0c;贪心地判断该答案是否合法是个不错的思路&#xff0c;这要求所有可能的答案是单调的&#xff08;例&#xff1a;x满足条件…...

Netty之内存池的原理和实战

深入理解Netty的内存池机制及其应用实践 在高性能网络编程中&#xff0c;内存管理对于系统的稳定性和性能至关重要。Netty作为一个高效的网络通信框架&#xff0c;通过引入内存池机制有效地解决了内存分配和回收频繁带来的性能瓶颈和内存碎片问题。本文将深入探讨Netty内存池的…...

Elasticsearch 向量数据库,原生支持 Google Cloud Vertex AI 平台

作者&#xff1a;来自 Elastic Valerio Arvizzigno Elasticsearch 将作为第一个第三方原生语义对齐引擎&#xff0c;支持 Google Cloud 的 Vertex AI 平台和 Google 的 Gemini 模型。这使得联合用户能够基于企业数据构建完全可定制的生成式 AI 体验&#xff0c;并借助 Elastics…...

《算法笔记》3.1小节——入门模拟->简单模拟

1001 害死人不偿命的(3n1)猜想 #include <iostream> using namespace std;int main() {int n,count0;cin>>n;while(n!1){if(n%20) n/2;else n(3*n1)/2;count1;}std::cout <<count;return 0; }1032 挖掘机技术哪家强 #include <iostream> using namespa…...

每日一题(小白)暴力娱乐篇24

由题已知这是一个匹配题目&#xff0c;题目已经说了三阶幻方是给定的&#xff0c;经过镜像和旋转&#xff0c;镜像*2旋转*4&#xff1b; 总共八种方案&#xff0c;然后接收每次的数据去匹配&#xff08;跳过0&#xff09;&#xff0c;如果匹配就输出匹配的数组&#xff0c;如果…...

C++:函数模板类模板

程序员Amin &#x1f648;作者简介&#xff1a;练习时长两年半&#xff0c;全栈up主 &#x1f649;个人主页&#xff1a;程序员Amin &#x1f64a; P   S : 点赞是免费的&#xff0c;却可以让写博客的作者开心好久好久&#x1f60e; &#x1f4da;系列专栏&#xff1a;Java全…...

第18章:基于Global Context Vision Transformers(GCTx_unet)网络实现的oct图像中的黄斑水肿和裂孔分割

1. 网络概述 GCTx-UNET是基于传统UNet架构的改进版本&#xff0c;主要引入了以下几个关键创新&#xff1a; GCT模块&#xff1a;全局上下文变换器(Global Context Transformer)模块 多尺度特征融合&#xff1a;增强的特征提取能力 改进的跳跃连接&#xff1a;优化编码器与解…...

深入理解 Spring 的 MethodParameter 类

MethodParameter 是 Spring 框架中一个非常重要的类&#xff0c;它封装了方法参数&#xff08;或返回类型&#xff09;的元数据信息。这个类在 Spring MVC、AOP、数据绑定等多个模块中都有广泛应用。 核心功能 MethodParameter 主要提供以下功能&#xff1a; 获取参数类型信息…...

Docker部署HivisionIDPhotos1分钟生成标准尺寸证件照实操指南

文章目录 前言1. 安装Docker2. 本地部署HivisionIDPhotos3. 简单使用介绍4. 公网远程访问制作照片4.1 内网穿透工具安装4.2 创建远程连接公网地址 5. 配置固定公网地址 前言 相信大部分人办驾照、护照或者工作证时都得跑去照相馆&#xff0c;不仅费时还担心个人信息泄露。好消…...

python多线程+异步编程让你的程序运行更快

多线程简介 多线程是Python中实现并发编程的重要方式之一&#xff0c;它允许程序在同一时间内执行多个任务。在某些环境中使用多线程可以加快我们代码的执行速度&#xff0c;例如我们通过爬虫获得了一个图片的url数组&#xff0c;但是如果我们一个一个存储很明显会非常缓慢&…...

HDCP(五)

HDCP 2.2 测试用例设计详解 基于HDCP 2.2 CTS v1.1规范及协议核心机制&#xff0c;以下从正常流程与异常场景两大方向拆解测试用例设计要点&#xff0c;覆盖认证、密钥管理、拓扑验证等关键环节&#xff1a; 1. 正常流程测试 1.1 单设备认证 • 测试目标&#xff1a;验证源设…...

datagrip如何连接数据库

datagrip连接数据库的步骤 2025版本 想要链接数据库是需要一个jar包的&#xff0c;所以将上面进行删除之后&#xff0c;需要下载一个jar包 那么这个时候需要链接上传一个mysql链接的jar包 选择核心驱动类 上述操作完成之后&#xff0c;然后点击apply再点击ok即可 如下图说明my…...

Spring Boot 自动配置与启动原理全解析

下面分两部分系统讲解&#xff1a; 第一部分&#xff1a;Spring Boot 自动配置原理&#xff08;核心是自动装配&#xff09; 一、Spring Boot 的自动配置是干嘛的&#xff1f; 传统 Spring 开发时&#xff0c;你要写一堆 XML 或配置类&#xff0c;非常麻烦。Spring Boot 引入…...

python 基础:句子缩写

n int(input()) for _ in range(n):words input().split()result ""for word in words:result word[0].upper()print(result)知识点讲解 input()函数 用于从标准输入&#xff08;通常是键盘&#xff09;读取用户输入的内容。它返回的是字符串类型。例如在代码中…...

QML 中 Z 轴顺序(z 属性)

在 QML 中&#xff0c;z 属性用于控制元素的堆叠顺序&#xff08;Z 轴顺序&#xff09;&#xff0c;决定元素在视觉上的前后层次关系。 基本概念 默认行为&#xff1a; 所有元素的默认 z 值为 0 同层级元素后声明的会覆盖先声明的 父元素的 z 值会影响所有子元素 核心规则…...

Redis快的原因

1、基于内存实现 Redis将所有数据存储在内存中&#xff0c;因此它可以非常快速地读取和写入数据&#xff0c;而无需像传统数据库那样将数据从磁盘读取和写入磁盘&#xff0c;这样也就不受I/O限制。 2、I/O多路复用 多路指的是多个socket连接&#xff1b;复用指的是复用一个线…...

蓝桥杯c ++笔记(含算法 贪心+动态规划+dp+进制转化+便利等)

蓝桥杯 #include <iostream> #include <vector> #include <algorithm> #include <string> using namespace std; //常使用的头文件动态规划 小蓝在黑板上连续写下从 11 到 20232023 之间所有的整数&#xff0c;得到了一个数字序列&#xff1a; S12345…...

每日算法-250410

今天分享两道 LeetCode 题目&#xff0c;它们都可以巧妙地利用二分查找来解决。 275. H 指数 II 问题描述 思路&#xff1a;二分查找 H 指数的定义是&#xff1a;一个科学家有 h 篇论文分别被引用了至少 h 次。 题目给定的 citations 数组是升序排列的。这为我们使用二分查找…...

swagger + Document

swagger 虽然有了api接口&#xff0c;对于复杂接口返回值说明&#xff0c;文档还是不能少。如果是一个人做的还简单一点&#xff0c;现在都搞前后端分离&#xff0c;谁知道你要取那个值呢...

线程同步与互斥(下)

线程同步与互斥&#xff08;中&#xff09;https://blog.csdn.net/Small_entreprene/article/details/147003513?fromshareblogdetail&sharetypeblogdetail&sharerId147003513&sharereferPC&sharesourceSmall_entreprene&sharefromfrom_link我们学习了互斥…...

MySQL 优化教程:让你的数据库飞起来

文章目录 前言一、数据库设计优化1. 合理设计表结构2. 范式化与反范式化3. 合理使用索引 二、查询优化1. 避免使用 SELECT *2. 优化 WHERE 子句3. 优化 JOIN 操作 三、服务器配置优化1. 调整内存分配2. 调整并发参数3. 优化磁盘 I/O 四、监控与分析1. 使用 EXPLAIN 分析查询语句…...

SD + Contronet,扩散模型V1.5+约束条件后续优化:保存Canny边缘图,便于视觉理解——stable diffusion项目学习笔记

目录 前言 背景与需求 代码改进方案 运行过程&#xff1a; 1、Run​编辑 2、过程&#xff1a; 3、过程时间线&#xff1a; 4、最终效果展示&#xff1a; 总结与展望 前言 机器学习缺点之一&#xff1a;即不可解释性。最近&#xff0c;我在使用stable diffusion v1.5 Co…...

位掩码、哈希表、异或运算、杨辉三角、素数查找、前缀和

1、位掩码 对二进制数操作的方法&#xff0c;&#xff08;mask1<<n&#xff09;,将数mask的第n位置为1&#xff0c;其它位置为0&#xff0c;即1000...2^n&#xff0c;当n较小时&#xff0c;可以用于解决类似于0/1背包的问题&#xff0c;要么是0&#xff0c;要么是1&…...

安装OpenJDK1.8 17 (macos M芯片)

安装OpenJDK 1.8 下载完后&#xff0c;解压&#xff0c;打开 环境变量的配置文件即可 vim ~/.zshrc #export JAVA_HOME/Users/xxxxx/jdk-21.jdk/Contents/Home #export JAVA_HOME/Users/xxxxx/jdk-17.jdk/Contents/Home #export JAVA_HOME/Users/xxxxx/jdk-11.jdk/Contents…...

Spring Boot 自动加载流程详解

前言 Spring Boot 是一个基于约定优于配置理念的框架&#xff0c;它通过自动加载机制大大简化了开发者的配置工作。本文将深入探讨 Spring Boot 的自动加载流程&#xff0c;并结合源码和 Mermaid 图表进行详细解析。 一、Spring Boot 自动加载的核心机制 Spring Boot 的自动加…...

2025 年“认证杯”数学中国数学建模网络挑战赛 C题 化工厂生产流程的预测和控制

流水线上也有每个位置的温度、压力、流量等诸多参数。只有参数处于正常范 围时&#xff0c;最终的产物才是合格的。这些参数很容易受到外部随机因素的干扰&#xff0c;所 以需要实时调控。但由于参数众多&#xff0c;测量困难&#xff0c;很多参数想要及时调整并不容 易&#x…...

Richardson-Lucy (RL) 反卷积算法 —— 通过不断迭代更新图像估计值

文章目录 一、RL反卷积算法&#xff08;1&#xff09;主要特点&#xff08;2&#xff09;基本原理&#xff08;3&#xff09;关键步骤&#xff08;4&#xff09;优化算法 二、项目实战&#xff08;1&#xff09;RL 反卷积&#xff08;2&#xff09;优化&#xff1a;RL 反卷积 …...

2025.04.10-拼多多春招笔试第四题

📌 点击直达笔试专栏 👉《大厂笔试突围》 💻 春秋招笔试突围在线OJ 👉 笔试突围OJ 04. 优惠券最优分配问题 问题描述 LYA是一家电商平台的运营经理,负责促销活动的策划。现在平台上有 n n n...

------------------V2024-2信息收集完结------------------

第二部分信息收集完结撒花*★,*:.☆(&#xffe3;▽&#xffe3;)/$:*.★* 。 进入开发部分&#xff0c;工具要求&#xff1a;phpstorm Adobe Navicat16 小皮 准备完毕 php开发起飞起飞~~~~~...

Java Lambda与方法引用:函数式编程的颠覆性实践

在Java 8引入Lambda表达式和方法引用后&#xff0c;函数式编程范式彻底改变了Java开发者的编码习惯。本文将通过实战案例和深度性能分析&#xff0c;揭示如何在新项目中优雅运用这些特性&#xff0c;同时提供传统代码与函数式代码的对比优化方案。 文章目录 一、Lambda表达式&a…...

2025年常见渗透测试面试题- PHP考察(题目+回答)

网络安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 PHP考察 php的LFI&#xff0c;本地包含漏洞原理是什么&#xff1f;写一段带有漏洞的代码。手工的话如何发掘&am…...

【在校课堂笔记】南山 - 第 10 节课 总结

- 第 92 篇 - Date: 2025 - 04 - 10 Author: 郑龙浩/仟墨 【Python 在校课堂笔记】 南山 - 第 10 节课 文章目录 南山 - 第 10 节课一 in –> 存在性测试 - 基础介绍二 in –> 例题 - 火车票 - 使用 in 优化**问题**【代码 - 以前的代码】【代码 - 使用存在性测试 in】 …...

GaussDB ECPG与Oracle Pro_C深度对比:嵌入式SQL开发者的迁移指南

GaussDB ECPG与Oracle Pro*C深度对比&#xff1a;嵌入式SQL开发者的迁移指南 一、体系架构差异 关键组件对比表 二、语法兼容性分析 核心语法差异对比 c /* Pro*C示例 */ EXEC SQL SELECT empno INTO :emp_id FROM employees WHERE ename :name;/* ECPG等效实现 */ EXEC…...

debian系统中文输入法失效解决

在 Debian 9.6 上无法切换中文输入法的问题通常与输入法框架&#xff08;如 Fcitx 或 IBus&#xff09;的配置或依赖缺失有关。以下是详细的解决步骤&#xff1a; 1. 安装中文语言包 确保系统已安装中文语言支持&#xff1a; sudo apt update sudo apt install locales sudo…...

2025年危化品安全管理人员备考指南|智能题库+核心考点解析

作为危化品生产单位安全管理人员&#xff08;主要负责人&#xff09;&#xff0c;考试内容主要涵盖三大模块&#xff1a; 法律法规体系 《安全生产法》修订要点&#xff08;2023版&#xff09; 危险化学品重大危险源辨识标准&#xff08;GB 18218&#xff09; 最新《化工过…...

我为女儿开发了一个游戏网站

大家好&#xff0c;我是星河。 自从协助妻子为女儿开发了算数射击游戏后&#xff0c;星河就一直有个想法&#xff1a;为女儿打造一个专属的学习游戏网站。之前的射击游戏虽然有趣&#xff0c;但缺乏难度分级&#xff0c;无法根据女儿的学习进度灵活调整。而且&#xff0c;仅仅…...

SpringBoot企业级开发之【用户模块-更新用户基本信息】

接口文档&#xff1a; 开发前我们先看一下接口文档&#xff1a; 这是实现的预想结果&#xff1a; 实现思路&#xff1a; 设计一下我们的实现思路 拿起家伙实操&#xff1a; 1.controller 定义一个方法去修改用户&#xff1a; 注意&#xff01;是【put请求】 //更改用户信…...

循环神经网络 - 长短期记忆网络的门控机制

长短期记忆网络&#xff08;LSTM&#xff09;的门控机制是其核心设计&#xff0c;用来解决普通 RNN 在长程依赖中遇到的梯度消失与信息混淆问题。为了更进一步理解长短期记忆网络&#xff0c;本文我们来深入分析一下其门控机制。 一、理解长短期记忆网络的“三个门” 所谓门控…...

AutoKeras 处理图像回归预测

AutoKeras 是一个自动机器学习库&#xff0c;在处理图像回归预测问题时&#xff0c;它可以自动选择最佳的模型架构和超参数&#xff0c;从而简化深度学习模型的构建过程。 AutoKeras 主要用于分类和回归任务&#xff0c;它同样可以进行图像数据的回归预测。 步骤 1: 安装 Auto…...

批量清空图片的相机参数、地理位置等敏感元数据

我们在使用相机或者手机拍摄照片的时候&#xff0c;照片中都会带有一些敏感元数据信息&#xff0c;比如说相机的型号&#xff0c;参数&#xff0c;拍摄的时间地点等等。这些信息虽说不是那么引人注意&#xff0c;但是在某些时候他是非常隐私非常重要的。如果我们将这些信息泄露…...

驱动-字符设备驱动框架

简要了解 字符设备驱动框架 整个流程 文章目录 基本知识&#xff1a;实际应用效果说明 参考资料字符设备驱动框架基本结构关键数据结构 - 文件操作结构体(file_operations)struct module *ownerssize_t (*read) (struct file *, char __user *, size_t, loff_t *);ssize_t (*wr…...

RK3588芯片NPU的使用:Windows11 Docker中运行PPOCRv4例子

本文的目标 本文将在RKNN Docker环境中练习PPOCR示例&#xff0c;并通过adb工具部署到RK3588开发板。 开发环境说明 主机系统&#xff1a;Windows11目标设备&#xff1a;搭载RK3588芯片的安卓开发板核心工具&#xff1a;包含rknn-toolkit2、rknn_model_zoo等工具的Docker镜像…...