Java开发中的------修改密码+忘记密码
目录
1.修改密码
客户端响应
前端vue
后端
controller层
ServiceImpl实现层
2.忘记密码
客户端响应
后端
controller层
serviceImpl实现层
本章需要准备:springcloud项目,依赖,数据库....
数据库SQL
SET FOREIGN_KEY_CHECKS=0;-- ----------------------------
-- Table structure for mbs_member
-- ----------------------------
DROP TABLE IF EXISTS `mbs_member`;
CREATE TABLE `mbs_member` (`id` int NOT NULL AUTO_INCREMENT COMMENT '会员客户ID',`username` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '账号',`password` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '密码',`pw_salt` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '盐值列',`status` int DEFAULT NULL COMMENT '账号状态(帐号启用状态:0->启用;1->禁用)',`id_type` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '(身份证,护照,军官证,台胞证,港澳台来往内地通行证)',`path_front` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '正面',`path_reverse` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '反面',`name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '客户名字',`contact_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '联系人',`contact_phone` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '联系电话',`contact_address` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '联系地址',`license_no` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '驾照号',`sex` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '性别',`phone_num` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '电话',`address` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '地址',`email` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '邮箱',`member_level_id` int DEFAULT NULL COMMENT '会员级别(普通,金卡,白金,钻石)',`Account_Balance` double DEFAULT '0' COMMENT '账户余额',`integration` int DEFAULT '0' COMMENT '积分',`growth` double DEFAULT NULL COMMENT '成长值',`history_integration` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '历史积分数量(只加不减)',`open_id` int DEFAULT NULL COMMENT '微信返回ID',`token` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '登录验证token',`id_card` varchar(18) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '证件编号',`head_pic` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '头像',PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=89 DEFAULT CHARSET=utf8;-- ----------------------------
-- Records of mbs_member
-- ----------------------------
INSERT INTO `mbs_member` VALUES ('71', 'zhanghaojie', 'f5455390512559851fdffdc9dc71e1debe7261c41509579a3cb8d8085b86bee95d3808d9345e79790a2b2a153effe2615b1b4302694018d0d369f13a4a6e5005', '8efbe27a-4', '0', '1', null, null, '小浩杰', null, null, null, '410100123457', null, '15136204889', null, '222222@qq.com', '1', '11240', '5610', '3760', '2260', null, null, null, 'https://wangzherongyao.oss-cn-beijing.aliyuncs.com/upload/files/1605770604552-7c5b7014-09cb-4d0a.jpg');
INSERT INTO `mbs_member` VALUES ('78', 'test111', '111591072d3b1a693158b77a16df045daf87fca20ea7fc00c32411b6ace2d2c7ac0a70777619883fac37417ca9a09593465c51e7ab56cfb2b1debc174e2ffb3a', 'fcba1cda-2ce7-4d49-9658-976ff2b5aa9d', '0', '1', null, null, 'test111', null, null, null, '511621200011011212', null, '18398591677', null, '1111@11.cc', '3', '94620.96000000002', '1000', '65790.4', '0', null, null, '51162******212', 'https://qy002-bookstore.oss-cn-hangzhou.aliyuncs.com/staff_headicon/9ddb6b4b-8332-47a6-84ae-d5b9234e5065bg5.jpg');
INSERT INTO `mbs_member` VALUES ('88', 'cjj', '836bac861900ae9df5bf390ede7c2a45c1287f346139d3d3576300be822e1f17746c95d622955cc292427748dc12959447a28ba46ce13eb3c41fdcab09956161', 'c5546504-f2a1-4494-a738-8297e786acee', '0', '1', null, null, '成JJ', null, null, null, null, null, '13645678922', null, null, '1', '200', '50', '10500', '500', null, null, null, 'https://qy002-bookstore.oss-cn-hangzhou.aliyuncs.com/staff_headicon/29727801-0855-484d-bf5d-c6f69e8a72ad111.jpg');
1.修改密码
客户端响应
前端vue
<template><div class="surechange"><head_><h1>修改密码</h1></head_><div class="inp"><label for="oldpw">旧密码</label><inputtype="text"placeholder="请输入旧密码"id="oldpw"v-model="oldpw"@blur="checkpw"/></div><div class="inp"><label for="newpwd">新密码</label><inputv-model="newpw":type="flas ? tests : pass"placeholder="请输入新密码"id="newpwd"/><van-icon@click="eye_active":class="flas ? 'eye_active' : ''"name="eye-o"size="0.36rem"/></div><div class="inp"><label for="sure">确认</label><input:type="flas2 ? tests : pass"v-model="surepw"placeholder="再次输入新密码"id="sure"/><van-icon@click="eye_active2":class="flas2 ? 'eye_active' : ''"name="eye-o"size="0.36rem"/></div><div class="submit"><button@click="submit":disabled="submitdisplay":class="[submitcolor == true ? 'submit_active' : '']">确认修改</button></div></div> </template><script>//导入请求 import{changePwd,backPwd,checkPwd} from "../../request/userinfo/userinfo" import head_ from '../jingtai_/header' export default {props: {},data() {return {oldpw: "",newpw: "",surepw: "",flas: false,pass: "password",tests: "text",flas2: false,submitdisplay: true,submitcolor: false,regpw: /^[\w]{6,16}$/,};},methods: {//校验密码checkpw(){checkPwd({oldpw: this.oldpw}).then((res) => {if (res.code == 200) {if(!res.data){this.$toast.fail("请输入正确的密码!");this.oldpw='';}}else {this.$toast.fail("出错了!");}});},eye_active() {this.flas = !this.flas;},eye_active2() {this.flas2 = !this.flas2;},submit() {if (this.regpw.test(this.newpw) == false) {this.$toast.fail("6~16位,包含大小写字母和数字的组合");} else if (this.newpw != this.surepw) {this.$toast.fail("两次密码输入不一致");} else {changePwd({ password: this.newpw }).then((res) => {if (res.code == 200 && res.data) {this.$toast.success("修改成功");window.localStorage.removeItem("token");this.$router.push("/login");} else {this.$toast.success("修改失败");}});}},},updated() {if (this.oldpw != "" && this.newpw != "" && this.surepw != "") {this.submitdisplay = false;this.submitcolor = true;} else {this.submitcolor = false;this.submitdisplay = true;}},components: {head_}, }; </script><style scoped lang="less"> .surechange {padding: 0 0.24rem;.title {display: flex;align-items: center;height: 0.88rem;span {flex: 1;text-align: center;font-size: 0.34rem;font-weight: bolder;}}.inp {display: flex;justify-content: space-between;align-items: center;margin-top: 0.29rem;position: relative;label {font-size: 0.26rem;font-weight: bolder;}input {width: 5.48rem;height: 0.66rem;font-size: 0.22rem;padding-left: 0.19rem;border: 2px solid #e4e4e4;border-radius: 0.04rem;&::placeholder {color: #999;}}.van-icon-eye-o {position: absolute;top: 0.2rem;right: 0.19rem;}.eye_active {color: #2094ff;}}.submit {margin-top: 2.27rem;text-align: center;button {width: 5rem;height: 1rem;color: #999;background: #f2f2f2;font-size: 0.34rem;text-align: center;line-height: 1rem;border: none;outline: none;}.submit_active {background: #43a5ff;color: #fff;}} } </style>
// 检验密码 export function checkPwd(data){return req({url:'/member/queryByPassword?password='+data.oldpw,method:'get',data:data}) }// 修改密码 export function changePwd(data){// console.log(data)return req({url:'/member/alterPassword?pass='+data.password,method:'post',data:data}) }// 找回密码 export function backPwd(data){// console.log(data)return req({url:'/mbs/client/BackPwd',method:'post',data:data})}
后端
实体类
package com.fifth.entity;import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data;import java.io.Serializable;/*** 客户信息表** @TableName mbs_member*/ @TableName("mbs_member") @Data @ApiModel("客户信息实体类") public class Member implements Serializable {/*** 会员客户ID*/@ApiModelProperty("会员客户ID")@TableId(type = IdType.AUTO)private Integer id;/*** 账号*/@ApiModelProperty("账号")private String username;/*** 密码*/@ApiModelProperty("密码")private String password;/*** 盐值列*/@ApiModelProperty("盐值列")private String pwSalt;/*** 账号状态(帐号启用状态:0->启用;1->禁用)*/@ApiModelProperty("账号状态(帐号启用状态:0->启用;1->禁用)")private Integer status;/*** (身份证,护照,军官证,台胞证,港澳台来往内地通行证)*/@ApiModelProperty("(身份证,护照,军官证,台胞证,港澳台来往内地通行证)")private String idType;/*** 正面*/@ApiModelProperty("正面")private String pathFront;/*** 反面*/@ApiModelProperty("反面")private String pathReverse;/*** 客户名字*/@ApiModelProperty("客户名字")private String name;/*** 联系人*/@ApiModelProperty("联系人")private String contactName;/*** 联系电话*/@ApiModelProperty("联系电话")private String contactPhone;/*** 联系地址*/@ApiModelProperty("联系地址")private String contactAddress;/*** 驾照号*/@ApiModelProperty("驾照号")private String licenseNo;/*** 性别*/@ApiModelProperty("性别")private String sex;/*** 电话*/@ApiModelProperty("电话")private String phoneNum;/*** 地址*/@ApiModelProperty("地址")private String address;/*** 邮箱*/@ApiModelProperty("邮箱")private String email;/*** 会员级别(普通,金卡,白金,钻石)*/@ApiModelProperty("会员级别(普通,金卡,白金,钻石)")private Integer memberLevelId;/*** 账户余额*/@ApiModelProperty("账户余额")private Double accountBalance;/*** 积分*/@ApiModelProperty("积分")private Integer integration;/*** 成长值*/@ApiModelProperty("成长值")private Double growth;/*** 历史积分数量(只加不减)*/@ApiModelProperty("历史积分数量(只加不减)")private String historyIntegration;/*** 微信返回ID*/@ApiModelProperty("微信返回ID")private Integer openId;/*** 登录验证token*/@ApiModelProperty("登录验证token")private String token;/*** 证件编号*/@ApiModelProperty("证件编号")private String idCard;/*** 头像*/@ApiModelProperty("头像")private String headPic;}
controller层
@RestController @RequestMapping("member") @Api(tags = "客户管理--会员管理") public class MemberController {@Autowiredprivate MemberService memberService;//判断修改密码中输入的旧密码@GetMapping("queryByPassword")@ApiOperation("修改密码-旧密码判断")public Result<Boolean> queryByPassword(@RequestParam String password,@RequestParam String token) {return memberService.queryByPassword(password,token);}//确认修改密码@PostMapping("/alterPassword")@ApiOperation("修改密码-确认事件")public Result<Boolean> alterPassword(@RequestParam String pass, @RequestParam String token) {return memberService.alterPassword(pass, token);} }
Service层
public interface MemberService {//修改密码-旧密码判断Result<Boolean> queryByPassword(String password, String token);//修改密码-确认事件Result<Boolean> alterPassword(String pass, String token); }
ServiceImpl实现层
@Service public class MemberServiceImpl implements MemberService {@Autowiredprivate MemberDao memberDao;@Autowiredprivate StringRedisTemplate redisTemplate;//修改密码-旧密码判断/*** 根据密码和用户令牌查询用户信息* @param password 用户输入的旧密码* @param token 用户令牌,用于从Redis中获取用户信息* @return 返回Result对象,包含查询结果和消息*/@Overridepublic Result<Boolean> queryByPassword(String password, String token) {// 从Redis中根据用户令牌获取用户信息String userInfoJson = redisTemplate.opsForValue().get("sso:member:" + token);if (userInfoJson == null) {// 未找到该令牌对应的用户信息return new Result<>(500, "令牌不存在", null);}// 将用户信息JSON转换成Member对象Member member = JSON.parseObject(userInfoJson, Member.class);if (member == null || member.getId() == null) {// Redis中存储的用户信息无效return new Result<>(500, "用户信息无效", null);}// 查询数据库该用户的真实密码Member member1 = memberDao.selectById(member.getId());if (member1 == null || member1.getPassword() == null || member1.getPwSalt() == null) {// 数据库中用户信息无效return new Result<>(500, "用户信息无效", null);}// 加密后的密码Md5Hash md5Hash = new Md5Hash(password, member1.getPwSalt());// 检查用户输入的旧密码是否与数据库中的密码匹配if (member1.getPassword().equals(md5Hash.toString())) {// 密码正确,返回结果为成功return new Result<>(200, "密码正确", true);} else {// 密码不正确,返回结果为失败return new Result<>(500, "旧密码错误", false);}}//修改密码-确认事件@Overridepublic Result<Boolean> alterPassword(String pass, String token) {//1.获取当前登录用户的缓存信息String s = redisTemplate.opsForValue().get("sso:member:" + token);Member member = JSON.parseObject(s,Member.class);//2.修改用户密码,进行加密并更新到数据库String newPassword = new Md5Hash(pass, member.getPwSalt()).toString();member.setPassword(newPassword);int i = memberDao.updateById(member);if (i > 0) {return new Result<>(200, "修改成功", true);}return new Result<>(500, "修改密码未知错误", false);}}
dao层
@Mapper public interface MemberDao extends BaseMapper<Member> {}
修改密码完成
2.忘记密码
客户端响应
前端vue......(在上面"修改密码 "前端vue里)
后端
MemberRegisterVo.java
@Data @ApiModel("会员短信注册信息接收") public class MemberRegisterVo {private String confirmPassword;private String password;private String phoneNum;//验证码private String verifyCode;}
controller层
@RestController @RequestMapping("member") @Api(tags = "客户管理--会员管理") public class MemberController {@Autowiredprivate MemberService memberService;@GetMapping("/queryByUserName")@ApiOperation("根据会员电话(相当于用户名)查询会员")public Result<Boolean> queryByUserName(@RequestParam String userName) {return memberService.queryByUserName(userName);}@PostMapping("/backPassword")@ApiOperation("密码找回")public Result<String> backPassword(@RequestBody MemberRegisterVo memberRegisterVo, @RequestParam String token) {return memberService.backPassword(memberRegisterVo,token);}}
service层
public interface MemberService {//根据会员电话查询会员信息Member getByPhoneNum(String num);//密码找回Result<String> backPassword(MemberRegisterVo memberRegisterVo,String token);}
serviceImpl实现层
@Service public class MemberServiceImpl implements MemberService {@Autowiredprivate MemberDao memberDao;@Autowiredprivate StringRedisTemplate redisTemplate;//根据会员电话查询信息@Overridepublic Result<Boolean> queryByUserName(String userName) {QueryWrapper<Member> wrapper = new QueryWrapper<>();//会员手机号wrapper.eq("phone_num", userName);Member member = memberDao.selectOne(wrapper);if (member != null) {return new Result<>(200,"成功",true);}return new Result<>(200,"成功",false);}//密码找回@Overridepublic Result<String> backPassword(MemberRegisterVo memberRegisterVo,String token) {//1.获取当前登录用户的缓存信息String s = redisTemplate.opsForValue().get("sso:member:" + token);Member member = JSON.parseObject(s,Member.class);//1.校验验证码输入是否正确String verifyCode = memberRegisterVo.getVerifyCode();//获取redis中的验证码String code = redisTemplate.opsForValue().get("code");if (!code.equals(verifyCode)) {return new Result<>(200, "验证码错误", "1");}//用户密码加密String password = memberRegisterVo.getPassword();Md5Hash md5password = new Md5Hash(password, member.getPwSalt());member.setPassword(md5password.toString());int i = memberDao.updateById(member);if (i > 0) {//清除验证码redisTemplate.delete("code");return new Result<>(200, "成功", "0");}return new Result<>(200, "失败", null);}}
dao层
@Mapper public interface MemberDao extends BaseMapper<Member> {}
相关文章:

Java开发中的------修改密码+忘记密码
目录 1.修改密码 客户端响应 前端vue 后端 controller层 ServiceImpl实现层 2.忘记密码 客户端响应 后端 controller层 serviceImpl实现层 本章需要准备:springcloud项目,依赖,数据库.... 数据库SQL SET FOREIGN_KEY_CHECKS0;-- -…...

ffmpeg安装
简介 FFmpeg是一个开源的音视频处理库,它提供了一系列的工具和API,可以用于处理音视频文件。你可以使用FFmpeg的命令行工具来执行各种音视频处理操作,比如转码、剪辑、合并等。FFmpeg的命令格式通常是:ffmpeg [全局选项] {[输入文…...

Mac电脑目录
System(系统)Applications(应用程序)应用程序目录,默认所有的GUI应用程序都安装在这里User(用户)存放用户的个人资料和配置。每个用户有自己的单独目录Library(资料库)系…...

一起学算法(栈篇)
1.栈的概念 1.栈的定义 栈是仅限在表尾进行插入和删除的线性表,栈又被称为先进后出的线性表,简称“LIFO” 我们这次用数组作为我们栈的底层数据结构,代码会放到结尾供大家参考使用 2.栈顶的定义 栈是一个线性表,我们允许插入…...

Ubuntu开机自启服务systemd.service配置教程(Ubuntu服务)(Linux服务)upstart
文章目录 为什么要将程序配置成服务?1. 自动启动2. 后台运行3. 定时重启4. 简化管理5. 整合系统 版本支持1. Ubuntu 14.04及更早版本:使用upstart作为默认的init系统/etc/rc.local旧版本新版本 2. Ubuntu 15.04到16.04版本:默认使用systemd作…...
大数据课程E4——Flume的Channel
文章作者邮箱:yugongshiye@sina.cn 地址:广东惠州 ▲ 本章节目的 ⚪ 了解Channel的作用和配置; ⚪ 掌握Channel的使用方法; ⚪ 掌握Channel的File Channel; ⚪ 掌握Channel的JDBC Channel; ⚪ 掌握Channel的Spillable Memory Channel; 一、Memory Ch…...
es6中的Map和Set数据结构
Map Map对象可以用于保存键值对 1.创建 一个Map对象 const map new Map() 2.Map的一些方法 set(key,value):通过键值对向Map对象中添加元素get(key):通过建拿到对应的值size:返回Map对象中所包含的键值对的个数has(key):判断Map对象中是否有对应的key,返回一个…...

MyBatis 框架基本的增删改查
提示:写代码要严谨 文章目录 前言前期准备MyBatis CRUD操作流程增加功能删除功能修改功能查询功能#{} 占位符${} 占位符两种占位符的区别❗ 映射文件总结❗ mapper 代理方式实现CRUDmapper代理开发规范增加功能删除功能修改功能查询功能 前言 提示:myba…...
Javascript--JSON
什么是 JSON? JavaScript中的JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,用于存储和表示结构化的数据。JSON使用键值对的方式组织数据,并支持基本数据类型(字符串、数字、布尔值、数组和对象&…...
Rust: error: failed to run custom build command for `openssl-sys v0.9.71`
error: failed to run custom build command for openssl-sys v0.9.71 解决 windows : openssl 不要选Light版 设置环境变量 cmd: set OPENSSL_DIR“C:\Program Files\OpenSSL-Win64” OPENSSL_DIR:C:\Program Files\OpenSSL-Win64 linux:…...

Excel修改日期格式,改变日期的筛选方式
我们有两列日期数据: 左边这一列筛选会显示: 右边这一列筛选会显示: 修改格式,将【日期1】改为【日期2】 将【日期1】的格式修改为文本格式即可 修改格式,将【日期2】改为【日期1】 选中日期2,点击【数据…...

【RabbitMQ(day2)】默认(直连)交换机的应用
文章目录 一、第一种模型(Hello World)二、第二种模型(work queue)自动确认机制的后果和公平分配 三、阐述默认交换机 这篇博客是以下资料学后的总结: 不良人的RabbitMQ的教学视频 官方启动教程 RabbitMQ中文文档 一、…...

谷粒商城第八天-商品服务之品牌管理的整体实现(直接使用逆向生成的代码;含oss文件上传)
目录 一、总述 二、前端部分 2.1 创建好品牌管理菜单 2.2 复制组件 编辑2.3 复制api 编辑 2.4 查看效果 编辑2.5 需要优化的地方 2.6 具体优化实现 2.6.1 优化一:将表格的状态列(这里是是否显示列)修改为开关ÿ…...

阿里云率先荣获容器集群稳定性先进级认证
7 月 25 日,由中国信通院发起的“2023 稳保体系”评估结果在可信云大会现场公布,阿里云容器服务 ACK 成为首批通过“云服务稳定运行能力-容器集群稳定性”评估的产品,并荣获“先进级”认证。 云原生技术正在激活应用构建新范式,构…...
【SpringBoot笔记37】SpringBoot基于@ServerEndpoint、@OnMessage等注解的方式集成WebSocket
这篇文章,主要介绍SpringBoot基于@ServerEndpoint、@OnMessage等注解的方式集成WebSocket。 目录 一、基于注解集成WebSocket 1.1、WebSocket常见注解 1.2、创建WebSocket服务端 1.3、配置ServerEndpointExpor...

PyTorch(安装及卸载)
目录 1. 安装 2. 卸载 参考文献 为什么用PyTorch:简单来说,19年之前tensorflow是大哥,19年tensorflow和PyTorch双龙并行,20年之后PyTorch一往无前。宗旨,哪个用的人多用哪个。 1. 安装 1. 先打开Anaconda Prompt&…...

webScoket
webScoket是什么? 支持端对端通讯可以由客户端发起,也可以有服务端发起用于消息通知、直播间讨论区、聊天室、协同编辑等 做一个简单的webScoket 客户端配置: 1、新建一个页面叫web-scoket.html <!DOCTYPE html> <html lang"…...

【C语言初阶(20)】调试练习题
文章目录 前言实例1实例2 前言 在我们开始调试之前,应该有个明确的思路;程序是如何完成工作的、变量到达某个步骤时的值应该是什么、出现的问题大概会在什么位置。这些东西在调试之前都需要先确认下来,不然自己都不知道自己在调试个什么东西…...

MicroPython ESP32网页实时更新DHT11数据显示
MicroPython ESP32网页实时更新DHT11数据显示 📌相关篇《MicroPython ESP32 读取DHT11温湿度传感器数据》📍《【Micropython esp32/8266】网页点灯控制示例》 ✨本例综合以上两篇文章内容实现:在本地网页中显示DHT11温度传感器数据。可以做到…...

JavaWeb之HTML基础篇(一)
系列文章目录 HTML基础篇(一) 文章目录 系列文章目录HTML基础篇(一)[TOC](文章目录) 前言一、HTML简介1.1介绍1.2HTML文件的书写规范1.3 HTML标签介绍1.4 HTML常见的标签 二、CSS的简介2.1css技术介绍2.2 CSS与HTML结合的三种方式…...
day52 ResNet18 CBAM
在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件
今天呢,博主的学习进度也是步入了Java Mybatis 框架,目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学,希望能对大家有所帮助,也特别欢迎大家指点不足之处,小生很乐意接受正确的建议&…...

高等数学(下)题型笔记(八)空间解析几何与向量代数
目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍
文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结: 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析: 实际业务去理解体会统一注…...

浪潮交换机配置track检测实现高速公路收费网络主备切换NQA
浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求,本次涉及的主要是收费汇聚交换机的配置,浪潮网络设备在高速项目很少,通…...
Java数值运算常见陷阱与规避方法
整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...
BLEU评分:机器翻译质量评估的黄金标准
BLEU评分:机器翻译质量评估的黄金标准 1. 引言 在自然语言处理(NLP)领域,衡量一个机器翻译模型的性能至关重要。BLEU (Bilingual Evaluation Understudy) 作为一种自动化评估指标,自2002年由IBM的Kishore Papineni等人提出以来,…...
从面试角度回答Android中ContentProvider启动原理
Android中ContentProvider原理的面试角度解析,分为已启动和未启动两种场景: 一、ContentProvider已启动的情况 1. 核心流程 触发条件:当其他组件(如Activity、Service)通过ContentR…...
安卓基础(Java 和 Gradle 版本)
1. 设置项目的 JDK 版本 方法1:通过 Project Structure File → Project Structure... (或按 CtrlAltShiftS) 左侧选择 SDK Location 在 Gradle Settings 部分,设置 Gradle JDK 方法2:通过 Settings File → Settings... (或 CtrlAltS)…...
WEB3全栈开发——面试专业技能点P7前端与链上集成
一、Next.js技术栈 ✅ 概念介绍 Next.js 是一个基于 React 的 服务端渲染(SSR)与静态网站生成(SSG) 框架,由 Vercel 开发。它简化了构建生产级 React 应用的过程,并内置了很多特性: ✅ 文件系…...