java两个实体类相同属性的复制

1、操作对象工具 MyBeanUtils

package com.nrxt.nms.mon.pt.cascade.utils;import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.BeansException;
import org.springframework.beans.FatalBeanException;
import org.springframework.util.Assert;
import org.springframework.util.ClassUtils;import java.beans.PropertyDescriptor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.*;/*** 操作对象工具*/
public class MyBeanUtils extends BeanUtils {private static final Logger logger = LoggerFactory.getLogger(BeanUtils.class);private static final String SERIAL_VERSION_UID = "serialVersionUID";private static final String INTEGER = "java.lang.Integer";private static final String STRING = "java.lang.String";/*** Copy properties.** @param source the source* @param target the target* @throws BeansException the beans exception*/public static void copyProperties(Object source, Object target) throws BeansException {copyProperties(source, target, null, (String[]) null);}private static void copyProperties(Object source, Object target, Class<?> editable, String... ignoreProperties)throws BeansException {Assert.notNull(source, "Source must not be null");Assert.notNull(target, "Target must not be null");Class<?> actualEditable = target.getClass();if (editable != null) {if (!editable.isInstance(target)) {throw new IllegalArgumentException("Target class [" + target.getClass().getName()+ "] not assignable to Editable class [" + editable.getName() + "]");}actualEditable = editable;}PropertyDescriptor[] targetPds = getPropertyDescriptors(actualEditable);List<String> ignoreList = (ignoreProperties != null ? Arrays.asList(ignoreProperties) : null);for (PropertyDescriptor targetPd : targetPds) {Method writeMethod = targetPd.getWriteMethod();if (writeMethod == null) {continue;}if (ignoreList == null || !ignoreList.contains(targetPd.getName())) {PropertyDescriptor sourcePd = getPropertyDescriptor(source.getClass(), targetPd.getName());if (sourcePd != null) {Method readMethod = sourcePd.getReadMethod();if (readMethod != null &&ClassUtils.isAssignable(writeMethod.getParameterTypes()[0], readMethod.getReturnType())) {try {if (!Modifier.isPublic(readMethod.getDeclaringClass().getModifiers())) {readMethod.setAccessible(true);}Object value = readMethod.invoke(source);// 这里判断以下value是否为空 当然这里也能进行一些特殊要求的处理 例如绑定时格式转换等等if (value != null) {if (!Modifier.isPublic(writeMethod.getDeclaringClass().getModifiers())) {writeMethod.setAccessible(true);}writeMethod.invoke(target, value);}} catch (Throwable ex) {throw new FatalBeanException("Could not copy property '" + targetPd.getName() + "' from source to target", ex);}}}}}}/*** 复制对象** @param <T>       the type parameter* @param entity    the entity* @param targetCls the target cls* @return t t*/public static <T> T copyObject(Object entity, Class<? extends T> targetCls) {// 如果entity,直接返回nullif (entity == null) {return null;}Object target = null;try {target = targetCls.newInstance();copyProperties(entity, target);} catch (InstantiationException | IllegalAccessException e) {e.printStackTrace();}return (T) target;}/*** 复制对象** @param list      the list* @param targetCls the target cls* @return list list*/public static <T> List<T> copyList(List list, Class<? extends T> targetCls) {List<T> resultList = new ArrayList();if (list != null && list.size() > 0) {for (Object entity : list) {resultList.add(copyObject(entity, targetCls));}}return resultList;}/*** java反射bean的get方法** @param objectClass the object class* @param fieldName   the field name* @return get method*/@SuppressWarnings("unchecked")public static Method getGetMethod(Class objectClass, String fieldName) {if (objectClass != null && StringUtils.isNotBlank(fieldName)) {StringBuffer sb = new StringBuffer();sb.append("get");sb.append(fieldName.substring(0, 1).toUpperCase());sb.append(fieldName.substring(1));try {return objectClass.getMethod(sb.toString());} catch (NoSuchMethodException e) {e.printStackTrace();logger.error("error:{}", e);}}return null;}/*** java反射bean的set方法** @param objectClass the object class* @param fieldName   the field name* @return set method*/@SuppressWarnings("unchecked")public static Method getSetMethod(Class objectClass, String fieldName) {try {Class[] parameterTypes = new Class[1];Field field = objectClass.getDeclaredField(fieldName);parameterTypes[0] = field.getType();StringBuffer sb = new StringBuffer();sb.append("set");sb.append(fieldName.substring(0, 1).toUpperCase());sb.append(fieldName.substring(1));Method method = objectClass.getMethod(sb.toString(), parameterTypes);return method;} catch (Exception e) {e.printStackTrace();logger.error("error:{}", e);}return null;}/*** 执行set方法** @param o         执行对象* @param fieldName 属性* @param value     值*/public static void invokeSet(Object o, String fieldName, Object value) {Method method = getSetMethod(o.getClass(), fieldName);if (method != null) {try {method.invoke(o, new Object[]{value});} catch (Exception e) {e.printStackTrace();logger.error("error:{}", e);}}}/*** Invoke set string int.** @param o         the o* @param fieldName <br>* @param value     the value* @return <br>* @throws <br>* @describe 这个函数主要用于将字符串和数字型分开 前台都是字符串 根据model类型转换 现在仅支持String int 不是这两个类型不做set函数<br>*/public static void invokeSetStringInt(Object o, String fieldName, String value) {Method method = getGetMethod(o.getClass(), fieldName);if (method != null) {String type = method.getReturnType().getName();if (INTEGER.equals(type)) {invokeSet(o, fieldName, (value == null) ? null : Integer.parseInt(value));} else if (STRING.equals(type)) {invokeSet(o, fieldName, value);} else {logger.error("set 函数不能设置Sting和int以外的函数,设置类型:" + type + ",方法:" + method.getName());}}}/*** 执行get方法** @param o         执行对象* @param fieldName 属性* @return the object*/public static Object invokeGet(Object o, String fieldName) {Method method = getGetMethod(o.getClass(), fieldName);if (method != null) {try {return method.invoke(o, new Object[0]);} catch (Exception e) {e.printStackTrace();logger.error("error:{}", e);}}return null;}/*** Invoke get string string.** @param o         the o* @param fieldName the field name* @return <br>* @throws <br>* @describe 将返回值包装成String 如果是空则仍然保持空  <br>*/public static String invokeGetString(Object o, String fieldName) {Object obj = invokeGet(o, fieldName);return (obj == null) ? null : String.valueOf(obj);}/*** Merger obj object.** @param <T>      项目域对象如果为空,则直接返回产品域对象                 项目域对象字段属性为空,则使用产品域覆盖项目域字段* @param parent   产品域对象* @param son      项目域对象* @param refClass class对象* @return the object*/public static <T> Object mergerObj(T parent, T son, Class<?> refClass) {logger.debug(">>>>>>>>>>>>>>>>>>>mergerObj");logger.debug("Product object:" + parent);logger.debug("Project object:" + son);Object obj = null;try {obj = refClass.newInstance();if (parent == null) {obj = son;} else if (son == null) {obj = parent;} else {for (Field field : refClass.getDeclaredFields()) {String fieldName = field.getName();if (SERIAL_VERSION_UID.equalsIgnoreCase(fieldName)) {continue;}Object value = invokeGet(son, fieldName);if (value == null) {value = invokeGet(parent, fieldName);}invokeSet(obj, fieldName, value);}}} catch (Exception e) {e.printStackTrace();logger.error("error:{}", e);;}logger.debug("Page object:" + obj);return obj;}/*** Merger obj object.** @param <T>            the type parameter* @param parent         the parent* @param son            the son* @param refClassParent the ref class parent* @param refClassSon    the ref class son* @return the object*/public static <T> Object mergerObj(T parent, T son, Class<?> refClassParent, Class<?> refClassSon) {return mergerObj(parent, son, refClassParent, refClassSon, null);}/*** Merger obj object.** @param <T>            父对象为空,则直接返回子对象                       子对象为空,则将子对象域父对象相同的字段拷贝给obj                       父对象与子对象都不为空,现将子对象的值拷贝给obj,在将子对象与父对象相同的字段拷贝给obj,                       <p/>                       例如:比如指标与业务视图字段合并,则指标为父对象、业务视图字段为子对象                       <p/>                       变量命名有问题* @param parent         父对象* @param son            子对象* @param refClassParent 父class对象* @param refClassSon    子class对象* @param prefix         前缀* @return the object*/public static <T> Object mergerObj(T parent, T son, Class<?> refClassParent, Class<?> refClassSon, String prefix) {logger.debug(">>>>>>>>>>>>>>>>>>>mergerObj");logger.debug("Parent object:" + parent);logger.debug("Son object:" + son);Map<String, String> publicFieldMap = new HashMap<String, String>(16);Object obj = null;try {/*** 比较父class对象与子class对象,找出字段相同的字段*/for (Field pField : refClassParent.getDeclaredFields()) {String pFieldName = pField.getName();for (Field sField : refClassSon.getDeclaredFields()) {String sFieldName = sField.getName();if (sFieldName.equals(pFieldName)) {publicFieldMap.put(pFieldName, sFieldName);break;} else if (prefix != null && sFieldName.equals(prefix + pFieldName)) {publicFieldMap.put(pFieldName, sFieldName);break;}}}obj = refClassSon.newInstance();//父对象为空,直接返回父对象给objif (parent == null) {obj = son;} else//子对象为空,将父对象中与子对象中相同字段的值复制给objif (son == null) {for (Map.Entry<String, String> entry : publicFieldMap.entrySet()) {String pFieldName = entry.getKey();String sFieldName = entry.getValue();if (SERIAL_VERSION_UID.equalsIgnoreCase(sFieldName)) {continue;}Object value = invokeGet(parent, sFieldName);invokeSet(obj, sFieldName, value);}} else {//先将子对象拷贝给objfor (Field field : refClassSon.getDeclaredFields()) {String fieldName = field.getName();if (SERIAL_VERSION_UID.equalsIgnoreCase(fieldName)) {continue;}Object value = invokeGet(son, fieldName);invokeSet(obj, fieldName, value);}//将相同字段的值拷贝给objfor (Map.Entry<String, String> entry : publicFieldMap.entrySet()) {String pFieldName = entry.getKey();String sFieldName = entry.getValue();if (SERIAL_VERSION_UID.equalsIgnoreCase(sFieldName)) {continue;}Object value = invokeGet(son, sFieldName);if (null == value || "".equals(value)) {value = invokeGet(parent, pFieldName);}invokeSet(obj, sFieldName, value);}}} catch (Exception e) {e.printStackTrace();logger.error("error:{}", e);;}logger.debug("Merge object:" + obj);return obj;}/*** Division obj t.** @param <T>      the type parameter* @param parent   父对象* @param son      子对象* @param newSon   新的子对象* @param refClass class对象* @return T t*/public static <T> T divisionObj(T parent, T son, T newSon, Class<?> refClass) {logger.debug(">>>>>>>>>>>>>>>>>>>divisionObj");logger.debug("Product object:" + parent);logger.debug("Project object:" + son);logger.debug("Page object:" + newSon);for (Field field : refClass.getDeclaredFields()) {String filedName = field.getName();if (SERIAL_VERSION_UID.equalsIgnoreCase(filedName)) {continue;}/*项目域不存在,则说明该元素只是项目化没有修改,表里面不存在*/Object valueSon = (son == null) ? null : invokeGet(son, filedName);/*子对象的对应的属性为空,则继承与产品域的属性,如果没有修改则继续继承*/if (valueSon == null) {Object valueNewSon = invokeGet(newSon, filedName);Object valueParent = invokeGet(parent, filedName);if (valueParent != null && valueParent.equals(valueNewSon)) {invokeSet(newSon, filedName, null);}}}logger.debug("New object:" + newSon);return newSon;}/*** 比较产品域对象、项目域对象、页面对象,返回最后需要插入数据库中的对象** @param <T>           the type parameter* @param parent        父对象* @param son           子对象* @param newSon        新的子对象* @param refClass      class对象* @param excludeFields 不需要比较字段的列表* @return T t*/public static <T> T divisionObj(T parent, T son, T newSon, Class<?> refClass, String... excludeFields) {logger.debug(">>>>>>>>>>>>>>>>>>>divisionObj");logger.debug("Product object:" + parent);logger.debug("Project object:" + son);logger.debug("Page object:" + newSon);logger.debug("ExcludeFields:" + excludeFields);for (Field field : refClass.getDeclaredFields()) {String filedName = field.getName();if (SERIAL_VERSION_UID.equalsIgnoreCase(filedName)) {continue;}//排除不需要比较的字段if (Arrays.asList(excludeFields).contains(filedName)) {continue;}/*项目域不存在,则说明该元素只是项目化没有修改,表里面不存在*/Object valueSon = (son == null) ? null : invokeGet(son, filedName);/*子对象的对应的属性为空,则继承与产品域的属性,如果没有修改则继续继承*/if (valueSon == null) {Object valueNewSon = invokeGet(newSon, filedName);Object valueParent = invokeGet(parent, filedName);if (valueParent != null && valueParent.equals(valueNewSon)) {invokeSet(newSon, filedName, null);}}}logger.debug("New object:" + newSon);return newSon;}/*** 应用场景,产品域字段列表跟项目域字段列表合并,* 以keyName作为主键,* 相同的keyName,则使用项目域的覆盖产品域的** @param <T>        the type parameter* @param parentList 父域列表* @param sonList    子域列表* @param keyName    主键* @return list list*/public static <T> List<T> mergerList(List<T> parentList, List<T> sonList, String keyName) {logger.debug(">>>>>>>>>>>>>>>>>>>mergerObj");logger.debug("Product object list:" + parentList);logger.debug("Project object list:" + sonList);logger.debug("keyName :" + keyName);List<T> resultList = new ArrayList<T>();Map<Object, T> map = new HashMap<Object, T>(16);if (parentList == null) {resultList.addAll(sonList);return resultList;}if (sonList == null) {resultList.addAll(parentList);return resultList;}resultList.addAll(parentList);for (T obj : parentList) {Object keyFieldName = invokeGet(obj, keyName);map.put(keyFieldName, obj);}int size = sonList.size();for (int i = 0; i < size; i++) {Object keyFieldName = invokeGet(sonList.get(i), keyName);if (map.containsKey(keyFieldName)) {resultList.remove(map.get(keyFieldName));resultList.add(i, sonList.get(i));} else {resultList.add(sonList.get(i));}}logger.debug("Page object list:" + sonList);return resultList;}/*** Get all field name string [ ].** @param <T>      the type parameter* @param refClass <br>* @return <br>* @throws <br>* @describe 返回dto的所有属性字段名称 返回其中所有字段(除serialVersionUID之外) 可以用于设置值  <br>*/public static <T> String[] getAllFieldName(Class<?> refClass) {Field[] allField = refClass.getDeclaredFields();List<String> allFieldList = new ArrayList<String>();for (int i = 0, j = 0; i < allField.length; i++) {String filedName = allField[i].getName();if (!SERIAL_VERSION_UID.equalsIgnoreCase(filedName)) {allFieldList.add(filedName);}}return allFieldList.toArray(new String[allFieldList.size()]);}/*** Get all field field [ ].** @param <T>      the type parameter* @param refClass <br>* @return <br>* @throws <br>* @describe 返回dto的所有Field字段 返回其中所有字段(除serialVersionUID之外) 可以用于设置值  <br>*/public static <T> Field[] getAllField(Class<?> refClass) {Field[] allField = refClass.getDeclaredFields();List<Field> allFieldList = new ArrayList<Field>();for (int i = 0, j = 0; i < allField.length; i++) {if (!SERIAL_VERSION_UID.equalsIgnoreCase(allField[i].getName())) {allFieldList.add(allField[i]);}}return allFieldList.toArray(new Field[allFieldList.size()]);}/*** 获取指定字段名称查找在class中的对应的Field对象(包括查找父类)** @param clazz     指定的class* @param fieldName 字段名称* @return Field对象 class field*/public static Field getClassField(Class clazz, String fieldName) {if (Object.class.getName().equals(clazz.getName())) {return null;}Field[] declaredFields = clazz.getDeclaredFields();for (Field field : declaredFields) {if (field.getName().equals(fieldName)) {return field;}}Class superClass = clazz.getSuperclass();if (superClass != null) {// 简单的递归一下return getClassField(superClass, fieldName);}return null;}/*** 求ls对ls2的差集,即ls中有,但ls2中没有的** @param ls  the ls* @param ls2 the ls 2* @return list list*/public static List diff(List ls, List ls2) {List list = new ArrayList(Arrays.asList(new Object[ls.size()]));Collections.copy(list, ls);list.removeAll(ls2);return list;}/*** 求2个集合的交集** @param ls  the ls* @param ls2 the ls 2* @return list list*/public static List intersect(List ls, List ls2) {List list = new ArrayList(Arrays.asList(new Object[ls.size()]));Collections.copy(list, ls);list.retainAll(ls2);return list;}/*** 求2个集合的并集** @param ls  the ls* @param ls2 the ls 2* @return list list*/public static List union(List ls, List ls2) {List list = new ArrayList(Arrays.asList(new Object[ls.size()]));//将ls的值拷贝一份到list中Collections.copy(list, ls);list.removeAll(ls2);list.addAll(ls2);return list;}
}

2、实体类 

  • NmsAppDO
package com.nrxt.nms.mon.pt.cascade.entity;import lombok.Data;import javax.persistence.Column;@Data
public class NmsAppDO {@Column(name = "CI_ID")String ciId;@Column(name = "CI_NAME")String ciName;@Column(name = "APPID")String appId;@Column(name = "BGCODE")String bgCode;@Column(name = "PROVID")String provId;@Column(name = "APPRATE")String appRate;@Column(name = "CLOUDFLAG")String cloudFlag;@Column(name = "OM_APP")String omApp;@Column(name = "SHORT_NAME")String shortName;@Column(name = "PUSH_TYPE")String pushType;@Column(name = "NETREGION")String netregion;@Column(name = "REPAIR_STATE")String repairState;@Column(name = "RUN_USER_TEL")String runUserTel;@Column(name = "SYSTEM_TYPE")String systemType;@Column(name = "IS_MONITOR")String isMonitor;@Column(name = "IS_APPFUNCINST")String isAppfuncinst;@Column(name = "IS_APMSERVICE")String isApmservice;@Column(name = "RUN_STATUS")String runStatus;@Overridepublic String toString() {return String.format("BGCODE=%s,CI_ID=%s,APPID=%s", bgCode, ciId, appId);}
}
  • NmsAppMonitorDO 
package com.nrxt.nms.mon.pt.cascade.entity;import com.nrxt.nms.mon.pt.cascade.utils.DateUtils;
import lombok.Data;import javax.persistence.Column;@Data
public class NmsAppMonitorDO {public NmsAppMonitorDO(){this.monitorStatus = "0";this.deletedFlag = "N";this.createdAt = DateUtils.getLocalDateTime();this.updatedAt = DateUtils.getLocalDateTime();}@Column(name = "CI_ID")private String ciId;@Column(name = "APP_ID")private String appId;@Column(name = "APP_NAME")private String ciName;@Column(name = "APP_SHORT_NAME")private String shortName;@Column(name = "APP_RATE")private String appRate;@Column(name = "PUSH_TYPE")private String pushType;@Column(name = "NETREGION")private String netregion;@Column(name = "RUN_STATUS")private String runStatus;@Column(name = "MONITOR_STATUS")private String monitorStatus;@Column(name = "DELETED_FLAG")private String deletedFlag;@Column(name = "CREATED_AT")private String createdAt;@Column(name = "UPDATED_AT")private String updatedAt;@Column(name = "TOTAL")private Integer total;}

3、工具类使用

List<NmsAppMonitorDO> nmsAppMonitorDOList = MyBeanUtils.copyList(nmsAppDOList,NmsAppMonitorDO.class);

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

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

相关文章

017集——圆弧(ARC)转多段线(lwpolyline)——cad vba 中按一定精度拟合加点实现

在国土资源管理项目中&#xff0c;我们经常会遇到CAD转gis数据实现入库&#xff0c;而cad中的arc圆弧转为gis数据只能转出弧的顶点坐标&#xff0c;导致图形变形失真。若一个一个对弧进行手工增加点转为多段线&#xff0c;耗时耗力&#xff0c;效率极其低下。这里给出解决方案&…

C#(C Sharp)学习笔记_字符串的常用操作方法【十一】

文章目录 索引字符串( Index )遍历字符串( for )拆分字符串( Split )替代字符串( Replace )提取字符串( Substring )插入字符串( Insert )移除字符串( Remove ) 索引字符串( Index ) 当我们要查看字符串中的某个字符时&#xff0c;我们可以使用索引功能。 string ax "我…

继承杂谈。

内容一览 前言继承的概念及定义继承的意义继承关系及访问限定符父类和子类对象之间的转化继承后的作用域继承与有元继承与静态成员多继承继承和组合的区别&#xff1a;继承的总结和反思 前言 面向对象的三大特性&#xff1a;封装继承和多态&#xff0c;这三种特性优者很紧密地联…

【Prometheus】PromQL

数据类型 即时向量&#xff08;instant vector&#xff09; node_cpu_seconds_total{instance"ahoj-dev-ubuntu-virtualbox",mode"idle"} 区间向量&#xff08;range vector&#xff09; node_cpu_seconds_total{instance"ahoj-dev-ubuntu-virtu…

手拉手RocketMQ基础

消息中间件的对比 消息中间件 ActiveMQ RabbitMQ RocketMQ kafka 开发语言 java erlang java scala 单击吞吐量 万级 万级 10万级 10万级 时效性 ms us ms ms 可用性 高(主从架构) 高(主从架构) 非常高(主从架构) 非常高(主从架构) 消息中间件: activ…

MetaGPT部分源码解读

Action SerializationMixin&#xff1a; Pydantic在序列化一个对象时&#xff0c;会将其序列化为其最顶层父类的形式&#xff0c;而不是它实际子类的形式。这意味着&#xff0c;如果你有一个父类和一个继承自该父类的子类&#xff0c;当你将子类的实例序列化时&#xff0c;得到…

HTTP常见报错响应码

HTTP 响应状态代码指示特定 HTTP 请求是否已成功完成。响应分为五类&#xff1a; 信息响应成功响应重定向客户端错误服务器错误 1 、信息响应 100 Continue 这个临时响应表明&#xff0c;迄今为止的所有内容都是可行的&#xff0c;客户端应该继续请求&#xff0c;如果已经完 …

云上攻防-云产品篇堡垒机场景JumpServer绿盟SASTeleport麒麟齐治

知识点 1、云产品-堡垒机-产品介绍&攻击事件 2、云产品-堡垒机-安全漏洞&影响产品 章节点&#xff1a; 云场景攻防&#xff1a;公有云&#xff0c;私有云&#xff0c;混合云&#xff0c;虚拟化集群&#xff0c;云桌面等 云厂商攻防&#xff1a;阿里云&#xff0c;腾讯…

k8a 对外服务(ingress)详解(定义,暴露,代理,重写,)

目录 一、 对外服务 service策略的作用 外部访问方案 适用场景和限制 ingress如何实现对外服务 ingress 概念 定义 组成 工作原理 总结 二、 部署 nginx-ingress-controller 创建 ingress-controller pod及相关资源 创建目录&#xff1a; 下载配置文件 修改 集群…

CSS拖曳盒子案例

让我为大家带来一个小案例吧&#xff01; <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title><style>* {margin: 0;padding: 0;}.box1 {width: 100px;height: 100px;background-color: black;margin-bot…

iMazing3 2024详细解析数据备份与恢复备份

iMazing 3的备份功能支持增量备份&#xff08;类似苹果电脑里的Time Machine功能&#xff09;&#xff0c;意思是第一次把移动设备的数据全部备份下来&#xff0c;之后的备份就只针对数据有变化的那部分&#xff0c;这样可以节省大量的时间和存储空间&#xff0c;不会让使用者为…

LeetCode59:螺旋矩阵Ⅱ

题目描述 给你一个正整数 n &#xff0c;生成一个包含 1 到 n2 所有元素&#xff0c;且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。 示例 1&#xff1a; 输入&#xff1a;n 3 输出&#xff1a;[[1,2,3],[8,9,4],[7,6,5]] 代码 class Solution { public:vector…

00-ESP-IDF 环境配置指南

ESP-IDF 环境配置指南 ESP-IDF安装 1.首先我们在浏览器搜索esp-idf&#xff0c;点击第一个选项 2.点击右边栏的安装 3.我们选择手动安装选择需要的系统版本 4.点击链接 5.这里我们选择一个版本&#xff0c;建议不要选择最新的&#xff0c;安装出现问题在网上不好找到解决办…

蓝桥杯备战刷题-滑动窗口

今天给大家带来的是滑动窗口的类型题&#xff0c;都是十分经典的。 1&#xff0c;无重复字符的最长子串 看例三&#xff0c;我们顺便来说一下子串和子序列的含义 子串是从字符串里面抽出来的一部分&#xff0c;不可以有间隔&#xff0c;顺序也不能打乱。 子序列也是从字符串里…

Vue+SpringBoot打造个人健康管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 健康档案模块2.2 体检档案模块2.3 健康咨询模块 三、系统展示四、核心代码4.1 查询健康档案4.2 新增健康档案4.3 查询体检档案4.4 新增体检档案4.5 新增健康咨询 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpri…

【周总结周末日常】

周总结 完成任务开发并且与前端联调通过 完成已开发功能的冒烟测试 修复测试中出现的一些数据显示问题 2024/3/10 晴 温度适宜 这周天气比上周好多了&#xff0c;最起码见到好几次太阳 周六在世纪公园溜达一会儿&#xff0c;偶尔呼吸下大自然&#xff0c;挺棒的…

[2023年]-hadoop面试真题(二)

[2023年]-hadoop面试真题(一) &#xff08;北京&#xff09; Maptask的个数由什么决定?&#xff08;北京&#xff09; 如何判定一个job的map和reduce的数量 ?&#xff08;北京&#xff09; MR中Shuffle过程 ?&#xff08;北京&#xff09; MR中处理数据流程 ?&#xff08;…

c++深拷贝和浅拷贝的区别

在 C 中&#xff0c;深拷贝&#xff08;deep copy&#xff09;和浅拷贝&#xff08;shallow copy&#xff09;是与对象拷贝相关的概念 浅拷贝&#xff08;Shallow Copy&#xff09;&#xff1a; 浅拷贝是指将一个对象的值复制到另一个对象&#xff0c;但如果对象中包含指针成…

【QT】创建第一个QT程序

下面的前7个可以先不看&#xff0c;直接从8开始看 1. 创建Qt程序 一个Qt程序的组成部分&#xff1a;应用程序类&#xff0c;窗口类应用程序类个数&#xff1a;有且只有一个QApplication a;如何查看类对应的模块&#xff1a;光标移动到类上&#xff0c;F1qmake模块的名字 2. …

Redis的主从、哨兵、集群模式的概念及搭建步骤

主从复制 主从模式也叫主从复制&#xff0c;主是主服务器&#xff0c;从是从服务器&#xff0c;主服务器&#xff08;master &#xff09;的数据如果更新了 也会同步到从服务器&#xff08;slave&#xff09;&#xff0c;一个主服务器可以搭配很多个从服务器&#xff0c;主服务…