记录一下常用的工具类

1.通用返回类

import lombok.Data;@Data
public class CommonResult<T> {private Integer code;private String message;private T data;//成功通用返回public static CommonResult okResult(Object data){CommonResult commonResult = new CommonResult(AppHttpCodeEnum.SUCCESS.getCode(),AppHttpCodeEnum.SUCCESS.getMsg());if(data!=null){commonResult.setData(data);}return commonResult;}//失败通用返回 需要传失败码public static CommonResult failed(AppHttpCodeEnum appHttpCodeEnum){CommonResult commonResult = new CommonResult(appHttpCodeEnum.getCode(),appHttpCodeEnum.getMsg());return commonResult;}public static CommonResult failed(Integer code, String message){CommonResult commonResult = new CommonResult(code,message);return commonResult;}public CommonResult(Integer code, String message, T data) {this.code = code;this.message = message;this.data = data;}public CommonResult(Integer code, String message) {this.code = code;this.message = message;}@Overridepublic String toString() {return "CommonResult{" +"code=" + code +", message='" + message + '\'' +", data=" + data +'}';}
}

返回类常量

package com.t2t.t2t_utils.utils_path.returnClass;public enum AppHttpCodeEnum {ERROR(100000,"未知原因"),SUCCESS(200,"操作成功"),;int code;String msg;public int getCode() {return code;}public String getMsg() {return msg;}AppHttpCodeEnum(int code, String msg) {this.code = code;this.msg = msg;}
}

2.随机生成一个 png 或者其他的文件名

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;/*** 随机生成一个 png 或者其他的文件名*/
public class PathUtils {public static String generateFilePath(String fileName){//生成日期文件夹SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");String datePath = sdf.format(new Date());//生成uuidString uuid = UUID.randomUUID().toString().replace("-", "");//获取文件后缀int index = fileName.lastIndexOf(".");String fileType = fileName.substring(index);return new StringBuilder().append(datePath).append(uuid).append(fileType).toString();}
}

3.jwt,springsecurity登录验证----> 每次请求验证请求头token

JwtUtil工具类 

import com.alibaba.fastjson.JSON;
import io.jsonwebtoken.*;
import org.springframework.stereotype.Component;import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;
import java.util.Date;
import java.util.UUID;@Component
public class JwtUtil {// 有效期private static final long JWT_EXPIRE = 24 * 60 * 60 * 1000L;  //1天// 令牌秘钥private static final String JWT_KEY = "FrDjoJR+wCJPW8wsjxHJ%iYKCdy20Z8mn";//token过期多久可以继续刷新private static final long Refresh_Token_Time = 24 * 24 * 60 * 60; //1天 已转化public static String createToken(Object data) {// 当前时间long currentTime = System.currentTimeMillis();// 过期时间long expTime = currentTime + JWT_EXPIRE;// 构建jwtJwtBuilder builder = Jwts.builder().setId(UUID.randomUUID() + "").setSubject(JSON.toJSONString(data)).setIssuer("system").setIssuedAt(new Date(currentTime)).signWith(SignatureAlgorithm.HS256, encodeSecret(JWT_KEY)).setExpiration(new Date(expTime));return builder.compact();}private static SecretKey encodeSecret(String key) {byte[] encode = Base64.getEncoder().encode(key.getBytes());SecretKeySpec aes = new SecretKeySpec(encode, 0, encode.length, "AES");return aes;}//解析public static Claims parseToken(String token) {Claims body = Jwts.parser().setSigningKey(encodeSecret(JWT_KEY)).parseClaimsJws(token).getBody();return body;}//解析重载public static <T> T parseToken(String token, Class<T> clazz) {Claims body = Jwts.parser().setSigningKey(encodeSecret(JWT_KEY)).parseClaimsJws(token).getBody();return JSON.parseObject(body.getSubject(), clazz);}public static <T> String refreshToken(String inToken, Class<T> clazz) {try {JwtUtil.parseToken(inToken);} catch (ExpiredJwtException e) {Claims claims = e.getClaims();T object = JSON.parseObject(claims.getSubject(), clazz);//判断时间是否超过某个值//过期时间Integer createTime = (Integer) claims.get("exp");//当前时间long time = new Date().getTime();Integer currentTime = (int) (time / 1000);//判断是否过期时间小于某一个值if (currentTime - createTime <= Refresh_Token_Time) {//过期时间小于一天  刷新tokenString token = JwtUtil.createToken(object);return token;}} catch (Exception e) {return null;}//token未过期 放回原来的tokenreturn inToken;}
}

拦截器

import com.alibaba.fastjson.JSON;
import com.t2t.t2t_utils.utils_path.returnClass.AppHttpCodeEnum;
import com.t2t.t2t_utils.utils_path.returnClass.CommonResult;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;@Component
@Slf4j
public class JwtValidateInterceptor implements HandlerInterceptor {@Autowiredprivate JwtUtil jwtUtil;@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {String token = request.getHeader("X-Token");System.out.println(request.getRequestURI() +" 待验证:"+token);if(token != null){try {JwtUtil.parseToken(token);log.debug(request.getRequestURI() + " 放行...");return true;} catch (Exception e) {e.printStackTrace();}}log.debug(request.getRequestURI() + " 禁止访问...");response.setContentType("application/json;charset=utf-8");response.getWriter().write(JSON.toJSONString(CommonResult.failed(AppHttpCodeEnum.JWT_ERROR)));return false;}
}

MyWebConfig

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;@Configurationpublic class MyWebConfig implements WebMvcConfigurer {@Autowiredprivate JwtValidateInterceptor jwtValidateInterceptor;
//  注册拦截器@Overridepublic void addInterceptors(InterceptorRegistry registry) {InterceptorRegistration registration = registry.addInterceptor(jwtValidateInterceptor);registration.addPathPatterns("/**").excludePathPatterns("/user/login","/user/info","/user/logout","/error","/swagger-ui/**","/swagger-resources/**","/v3/**");}
}

4.bean复制类

import org.springframework.beans.BeanUtils;import java.util.List;
import java.util.stream.Collectors;public class BeanCopyUtils {public BeanCopyUtils(){}public static <V> V copyBean(Object source,Class<V> clazz) {//目标V result=null;try {result = clazz.newInstance();BeanUtils.copyProperties(source, result);} catch (InstantiationException e) {throw new RuntimeException(e);} catch (IllegalAccessException e) {throw new RuntimeException(e);}return result;}public static <O,V> List<V> copyBeanList(List<O> list,Class<V> clazz){return list.stream().map(o -> copyBean(o,clazz)).collect(Collectors.toList());}
}

5.获取请求的ip地址

import lombok.extern.slf4j.Slf4j;import javax.servlet.http.HttpServletRequest;
import java.net.*;
import java.util.Enumeration;/***@Author: make mpy*@Description: 获取IP的方法*@Date: 2021/1/18 15:02*/
@Slf4j
public class IpUtil {private static final String LOCAL_IP = "127.0.0.1";/*** 获取IP地址** 使用Nginx等反向代理软件, 则不能通过request.getRemoteAddr()获取IP地址* 如果使用了多级反向代理的话,X-Forwarded-For的值并不止一个,而是一串IP地址,X-Forwarded-For中第一个非unknown的有效IP字符串,则为真实IP地址*/public static String getIpAddr(HttpServletRequest request) {if (request == null) {return "unknown";}String ip = request.getHeader("x-forwarded-for");if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {ip = request.getHeader("Proxy-Client-IP");}if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {ip = request.getHeader("X-Forwarded-For");}if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {ip = request.getHeader("WL-Proxy-Client-IP");}if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {ip = request.getHeader("X-Real-IP");}if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {ip = request.getRemoteAddr();}return "0:0:0:0:0:0:0:1".equals(ip) ? LOCAL_IP : ip;}public static boolean internalIp(String ip) {boolean res = false;byte[] addr = textToNumericFormatV4(ip);if (addr != null && ip != null) {res = internalIp(addr) || LOCAL_IP.equals(ip);}return res;}private static boolean internalIp(byte[] addr) {final byte b0 = addr[0];final byte b1 = addr[1];// 10.x.x.x/8final byte SECTION_1 = 0x0A;// 172.16.x.x/12final byte SECTION_2 = (byte) 0xAC;final byte SECTION_3 = (byte) 0x10;final byte SECTION_4 = (byte) 0x1F;// 192.168.x.x/16final byte SECTION_5 = (byte) 0xC0;final byte SECTION_6 = (byte) 0xA8;boolean flag = false;switch (b0) {case SECTION_1:flag = true;break;case SECTION_2:if (b1 >= SECTION_3 && b1 <= SECTION_4) {flag = true;}break;case SECTION_5:if (b1 == SECTION_6) {flag = true;}break;default:break;}return flag;}/*** 将IPv4地址转换成字节*IPv4地址* @param text* @return byte 字节*/public static byte[] textToNumericFormatV4(String text) {if (text.length() == 0) {return null;}byte[] bytes = new byte[4];String[] elements = text.split("\\.", -1);try {long l;int i;switch (elements.length) {case 1:l = Long.parseLong(elements[0]);if ((l < 0L) || (l > 4294967295L))return null;bytes[0] = (byte) (int) (l >> 24 & 0xFF);bytes[1] = (byte) (int) ((l & 0xFFFFFF) >> 16 & 0xFF);bytes[2] = (byte) (int) ((l & 0xFFFF) >> 8 & 0xFF);bytes[3] = (byte) (int) (l & 0xFF);break;case 2:l = Integer.parseInt(elements[0]);if ((l < 0L) || (l > 255L))return null;bytes[0] = (byte) (int) (l & 0xFF);l = Integer.parseInt(elements[1]);if ((l < 0L) || (l > 16777215L))return null;bytes[1] = (byte) (int) (l >> 16 & 0xFF);bytes[2] = (byte) (int) ((l & 0xFFFF) >> 8 & 0xFF);bytes[3] = (byte) (int) (l & 0xFF);break;case 3:for (i = 0; i < 2; ++i) {l = Integer.parseInt(elements[i]);if ((l < 0L) || (l > 255L))return null;bytes[i] = (byte) (int) (l & 0xFF);}l = Integer.parseInt(elements[2]);if ((l < 0L) || (l > 65535L))return null;bytes[2] = (byte) (int) (l >> 8 & 0xFF);bytes[3] = (byte) (int) (l & 0xFF);break;case 4:for (i = 0; i < 4; ++i) {l = Integer.parseInt(elements[i]);if ((l < 0L) || (l > 255L))return null;bytes[i] = (byte) (int) (l & 0xFF);}break;default:return null;}} catch (NumberFormatException e) {log.error("数字格式化异常",e);return null;}return bytes;}public static String getLocalIP() {String ip = "";if (System.getProperty("os.name").toLowerCase().startsWith("windows")) {InetAddress addr;try {addr = InetAddress.getLocalHost();ip = addr.getHostAddress();} catch (UnknownHostException e) {log.error("获取失败",e);}return ip;} else {try {Enumeration<?> e1 = (Enumeration<?>) NetworkInterface.getNetworkInterfaces();while (e1.hasMoreElements()) {NetworkInterface ni = (NetworkInterface) e1.nextElement();if (!ni.getName().equals("eth0")) {continue;} else {Enumeration<?> e2 = ni.getInetAddresses();while (e2.hasMoreElements()) {InetAddress ia = (InetAddress) e2.nextElement();if (ia instanceof Inet6Address)continue;ip = ia.getHostAddress();return ip;}break;}}} catch (SocketException e) {log.error("获取失败",e);}}return "";}
}

6.自定义日志注解

import java.lang.annotation.*;
//Type 代表可以放在类上面  Methon代表可以放在方法上
@Target({ElementType.TYPE_USE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface LogAnnotation {String module() default "";String operator() default "";
}
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;import javax.servlet.http.HttpServletRequest;
import java.lang.reflect.Method;@Component
@Aspect //切面 定义了通知和切点的关系
@Slf4j
public class LogAspect {@Autowiredprivate RabbitTemplate rabbitTemplate;@Pointcut("@annotation(com.chk.commom.aop.Log.LogAnnotation)")public void pt(){}//环绕通知@Around("pt()")public Object log(ProceedingJoinPoint point) throws Throwable {long beginTime = System.currentTimeMillis();//执行方法Object result = point.proceed();//执行时长(毫秒)long time = System.currentTimeMillis() - beginTime;//保存日志recordLog(point, time);return result;}private void recordLog(ProceedingJoinPoint joinPoint, long time) {MethodSignature signature = (MethodSignature) joinPoint.getSignature();Method method = signature.getMethod();LogAnnotation logAnnotation = method.getAnnotation(LogAnnotation.class);log.info("=====================log start================================");log.info("业务 :{}",logAnnotation.module());//请求的方法名String className = joinPoint.getTarget().getClass().getName();String methodName = signature.getName();log.info("请求的方法地址:{}",className + "." + methodName + "()");//获取request 设置IP地址HttpServletRequest request = HttpContextUtils.getHttpServletRequest();// log.info("用户ip:{}", IpUtil.getIpAddr(request)); 此处ip包在上方log.info("执行时间 : {} ms",time);log.info("=====================log end================================");}}

7.图片随机验证码生成(后端)

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Random;/*** @author 阿楠* code生成工具类*/
public class CodeUtils {/*** 生成验证码图片的宽度*/private int width = 100;/*** 生成验证码图片的高度*/private int height = 30;/*** 字符样式*/private String[] fontNames = { "宋体", "楷体", "隶书", "微软雅黑" };/*** 定义验证码图片的背景颜色为白色*/private Color bgColor = new Color(255, 255, 255);/*** 生成随机*/private Random random = new Random();/*** 定义code字符*/private String codes = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";/*** 记录随机字符串*/private String text;/*** 获取一个随意颜色* @return*/private Color randomColor() {int red = random.nextInt(150);int green = random.nextInt(150);int blue = random.nextInt(150);return new Color(red, green, blue);}/*** 获取一个随机字体** @return*/private Font randomFont() {String name = fontNames[random.nextInt(fontNames.length)];int style = random.nextInt(4);int size = random.nextInt(5) + 24;return new Font(name, style, size);}/*** 获取一个随机字符** @return*/private char randomChar() {return codes.charAt(random.nextInt(codes.length()));}/*** 创建一个空白的BufferedImage对象** @return*/private BufferedImage createImage() {BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);Graphics2D g2 = (Graphics2D) image.getGraphics();//设置验证码图片的背景颜色g2.setColor(bgColor);g2.fillRect(0, 0, width, height);return image;}public BufferedImage getImage() {BufferedImage image = createImage();Graphics2D g2 = (Graphics2D) image.getGraphics();StringBuffer sb = new StringBuffer();for (int i = 0; i < 4; i++) {String s = randomChar() + "";sb.append(s);g2.setColor(randomColor());g2.setFont(randomFont());float x = i * width * 1.0f / 4;g2.drawString(s, x, height - 8);}this.text = sb.toString();drawLine(image);return image;}/*** 绘制干扰线** @param image*/private void drawLine(BufferedImage image) {Graphics2D g2 = (Graphics2D) image.getGraphics();int num = 5;for (int i = 0; i < num; i++) {int x1 = random.nextInt(width);int y1 = random.nextInt(height);int x2 = random.nextInt(width);int y2 = random.nextInt(height);g2.setColor(randomColor());g2.setStroke(new BasicStroke(1.5f));g2.drawLine(x1, y1, x2, y2);}}public String getText() {return text;}public static void output(BufferedImage image, OutputStream out) throws IOException {ImageIO.write(image, "JPEG", out);}
}

使用方法,类似

    @GetMapping("/code")@LogAnnotation(module = "验证码")public void code(HttpServletRequest request,HttpServletResponse res) throws IOException {CodeUtils code = new CodeUtils();BufferedImage image = code.getImage();String text = code.getText();HttpSession session = request.getSession(true);session.setAttribute("code", text);System.out.println(text);
/*** 图片传输*/CodeUtils.output(image,res.getOutputStream());/***  变为 数据 传输*/
//
//        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
//        ImageIO.write(image, "jpg", byteArrayOutputStream);
//        byte[] imageBytes = byteArrayOutputStream.toByteArray();
//
//        // 将字节数组转换为Base64编码的字符串
//        String base64Image = Base64.getEncoder().encodeToString(imageBytes);
//
//        // 拼接成data:image格式
//        String dataURL = "data:image/jpeg;base64," + base64Image;
//
//
//        return dataURL;
//        System.out.println("data:image格式:" + dataURL);/***  变为 data:image 数据 传输*/}

8.非空判断类

import java.util.Collection;
import java.util.Map;public class VoidJudgeUtils {public static boolean isBlank(Object obj) {if (obj == null)return true;if (obj instanceof CharSequence)return ((CharSequence) obj).length() == 0;if (obj instanceof Collection)return ((Collection) obj).isEmpty();if (obj instanceof Map)return ((Map) obj).isEmpty();if (obj instanceof Object[]) {Object[] object = (Object[]) obj;if (object.length == 0) {return true;}boolean empty = true;for (int i = 0; i < object.length; i++) {if (!isBlank(object[i])) {empty = false;break;}}return empty;}return false;}public static boolean isNotBlank(Object obj) {return !isBlank(obj);}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/622765.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

chromium通信系统-ipcz系统(十一)-mojo binding

关于mojo binding的官方文档为mojo docs。 由于比较复杂&#xff0c;这里只做简单源码分析。 我们知道要实现rpc&#xff0c;必须实现客户端和服务端。 mojo 实现了一套领域语言&#xff0c;通过领域语言描述接口和数据&#xff0c; 再通过特有编译器编译成c代码。 这个过程会…

C语言之字符串和指针

目录 用数组实现的字符串和用指针实现的字符串 █用数组实现的字符串str █用指针实现的字符串ptr 注意 用数组和指针实现字符串的不同点 字符串数组 用数组实现的字符串的数组——二维数组 用指针实现的字符串数组——指针数组 注意 字符串和指针有着紧密的联系&#…

程序设计语言的分类

编译与解释 编译型 将源代码转换成目标代码&#xff0c;通常源代码是高级语言代码&#xff0c;目标代码是机器语言代码&#xff0c;执行编译的计算机程序称为编译器。 eg:java 好处&#xff1a;对于相同的源代码编译产生的目标代码执行速度更快&#xff0c;目标代码不需要编译…

TikTok系列算法定位还原x-ss-stub

TikTok的x系列的算法比较有名,很多粉丝也问过,之前没有深入研究,本人工作量也比较大。 我们上次说到TikTok的x-ss-stub的算法就是ccmd5标准库算的,今天要讲细致点,表面这个结论本不是直接将数据md5那么来的,是经过一系列分析来的 上图是上次截图的,这次我们分析整个定位…

node(express.js创建项目)+连接mysql数据库

1.node npm的安装 2.express的安装 全局安装:npm install express -gnpm install -g express-generator// ps: 4.0版本把generator分离出来了&#xff0c;需要单独安装3.创建express项目 express 项目名称 cd 项目名称 npm install npm start4.项目中安装数据库 npm install…

flink中的row类型详解

在Apache Flink中&#xff0c;Row 是一个通用的数据结构&#xff0c;用于表示一行数据。它是 Flink Table API 和 Flink DataSet API 中的基本数据类型之一。Row 可以看作是一个类似于元组的结构&#xff0c;其中包含按顺序排列的字段。 Row 的字段可以是各种基本数据类型&…

C语言督学营(高级阶段)

文章目录 高级阶段19.C语言语法进阶1.条件运算符、逗号运算符(1)条件运算符 / 三目运算符   ? :(2)逗号运算符   , 2.自增自减运算符3.位运算符&#xff1a;按位或、按位异或、按位取反(1)逻辑与、按位与、左移、右移(2)有符号数右移 vs 无符号数右移(3)按位与、按位或、按位…

Docker学习与应用(五)-DockerFile

1、DockerFile 1&#xff09;DockerFile介绍 dockerfile是用来构建docker镜像的文件&#xff01;命令参数脚本&#xff01; 构建步骤&#xff1a; 1. 编写一个dockerfile文件 2. docker build 构建称为一个镜像 3. docker run运行镜像 4. docker push发布镜像&#xff08;D…

LC 83. 删除排序链表中的重复元素

83. 删除排序链表中的重复元素 难度 &#xff1a; 简单 题目&#xff1a; 给定一个已排序的链表的头 head &#xff0c; 删除所有重复的元素&#xff0c;使每个元素只出现一次 。返回 已排序的链表 。 提示&#xff1a; 链表中节点数目在范围 [0, 300] 内-100 < Node.va…

蓝桥杯准备

书籍获取&#xff1a;Z-Library – 世界上最大的电子图书馆。自由访问知识和文化。 (zlibrary-east.se) 书评&#xff1a;(豆瓣) (douban.com) 一、观千曲而后晓声 别人常说蓝桥杯拿奖很简单&#xff0c;但是拿奖是一回事&#xff0c;拿什么奖又是一回事。况且&#xff0c;如果…

Docker教程

docker 安装 官方文档 wget -qO- https://get.docker.com/ | sh sudo usermod -aG docker your-user sudo usermod -aG docker ${USER} newgrp docker # 更新docker用户组 cat /etc/group | grep docker docker --version 使用非root用户管理 帮助启动类 命令 system…

vue3+ts 中实现压缩图片、blob 转 base64

压缩图片 1.npm 安装 image-compressor.js 2.引入 import ImageCompressor from image-compressor.js 3.使用 const compressImage async (file: any) > {var imageCompressor new ImageCompressor()return new Promise((resolve, reject) > {imageCompressor.comp…

寄快递有没有什么省钱的小妙招? 怎样寄快递才能省钱呢?

快递物流行业的快速崛起刺激了人们的消费欲望&#xff0c;其中典型的是每每到重大节日尤其是双十一或者双十二&#xff0c;消费市场异常火爆&#xff0c;这也使得快递行业加班加点的干也不追不上人们下单的速度。如今&#xff0c;互联网时代崛起&#xff0c;网购成为了大家最寻…

机器学习_捕捉函数的变化趋势(凸函数)

文章目录 连续性是求导的前提条件通过求导发现 y 如何随 x 而变凸函数有一个全局最低点 机器学习所关心的问题之一捕捉函数的变化趋势&#xff0c;也就是标签&#xff08;y&#xff09;是如何随着特征字段&#xff08;x&#xff09;而变化的&#xff0c;这个变化趋势是通过求导…

代码随想录day30 回溯算法最终章

51. N皇后 题目 n 皇后问题 研究的是如何将 n 个皇后放置在 nn 的棋盘上&#xff0c;并且使皇后彼此之间不能相互攻击。 给你一个整数 n &#xff0c;返回所有不同的 n 皇后问题 的解决方案。 每一种解法包含一个不同的 n 皇后问题 的棋子放置方案&#xff0c;该方案中 Q 和…

想做好项目,网工必看!

上午好&#xff0c;我是老杨。 做项目&#xff0c;贯穿一个网络工程师职业生涯的始终。不管是大项目还是小项目&#xff0c;做久了项目&#xff0c;都会形成一种自己的方法论。 项目要划分&#xff0c;无非就是新网组建&#xff0c;旧网优化&#xff0c;以及网络排障三大类。…

【已解决】Spring常见错误:类文件具有错误的版本 61.0, 应为 52.0

目录 问题复现原因分析错误依赖正确依赖 问题复现 报错内容如下&#xff1a; java: 无法访问org.springframework.web.bind.annotation.RequestMapping 错误的类文件: /D:/Java/Apache Software Foundation/apache-maven-3.6.3/maven/repository/org/springframework/spring…

ISO11898-闭环高速CAN网络 (125K~1Mbps)

ISO11898 标准的物理框图如下图 可理解为一个高速闭环 CAN 总线网络&#xff1b;CAN 闭环总线网络允许总线最大长度为 40m;最高速度为 1Mbps;可以看到总线的两端各有一个 120Ω 的电阻&#xff0c;此电阻作为阻抗匹配功能&#xff0c;以减少回波反射;节点就是不同的设备&#…

Pytorch基础知识点复习

文章目录 并行计算单卡训练多卡训练单机多卡DP多机多卡DDPDP 与 DDP 的优缺点 PyTorch的主要组成模块Pytorch的主要组成模块包括那些呢&#xff1f;Dataset和DataLoader的作用是什么&#xff0c;我们如何构建自己的Dataset和DataLoader&#xff1f;神经网络的一般构造方法&…

k8s的策略

集群调度&#xff1a; Scheduler的调度算法&#xff1a; 预算策略 过滤出合适的节点 优先策略 选择部署的节点 NodeName&#xff1a;硬策略&#xff0c;不走调度策略&#xff0c;node1 nodeSelector&#xff1a;根据节点的标签选择&#xff0c;会走一个调度算法 只要是…