[Java]Java后端程序员开发经常使用的方法函数(持续更新)

文章目录

  • 简述
  • 数据库(MySQL)
    • 查询所有字段
    • 查询所有字段并逗号隔开(id,name.code)
    • 增加或者减少指定的天数
    • 查询指定年份的数据
    • 数据库表新增信息
    • 用 EXISTS 或 NOT EXISTS 代替 IN 或 NOT IN
    • 7位设备编码补零生成
    • 查询相同id下,最新的一条数据
  • Spring Boot
    • 常用注解
      • 数据库事务注解
    • 常用实体补充
      • long自动转字符串
    • 枚举类
    • 常用函数
      • **流处理-list转map**
      • **list转map**
      • list排序
      • 时间类型
        • 获取当天的开始时间
        • 获取当天的结束时间
      • 数据校验函数
        • 验证手机号码与座机号码
    • 实体通用字段
    • Optional判空
    • 测试类
      • 普通测试类
    • 实体注解
    • 自定义字段,不作为数据库表字段使用
    • 雪花算法主键
    • 时间格式转换实体字段
    • xml文件特殊符号替换符
    • 数据提交验证
    • 递归处理树形结构
      • 树形实体
    • MyBatis-Plus
      • 查询条件
        • 区间
        • 大于小于
      • xml自定义查询
        • in(foreach)
        • if
        • where
      • 自定义查询的分页查询
    • Swagger
      • 常用注释
    • Hutool 工具
  • 历史问题
    • Mybatis-plus 逻辑删除字段无效
      • 问题描述:
      • 解决方法:
      • 错误案例
    • Invalid bound statement (not found)
      • 问题描述
      • 解决方法
      • 错误原因

简述

身为一个后端程序员,当然不可能把所有的东西都背诵下来,正所谓好记性不如烂笔头,我都会把自己经常使用的一些方法记录起来,方便在开发过程中使用。

数据库(MySQL)

查询所有字段

SELECTCOLUMN_NAME,column_comment 
FROMINFORMATION_SCHEMA.COLUMNS 
WHEREtable_name = '你的表名'

查询所有字段并逗号隔开(id,name.code)

SELECTgroup_concat( COLUMN_NAME SEPARATOR ',' ) AS t_info 
FROMinformation_schema.COLUMNS 
WHEREtable_name = '表名称' AND table_schema = '数据库名称';

增加或者减少指定的天数

UPDATE `equipment_monitor_locations`  set create_time = DATE_ADD(`create_time`,INTERVAL 1 DAY)UPDATE `equipment_monitor_locations`  set create_time = DATE_SUB(`create_time`,INTERVAL 1 DAY)

查询指定年份的数据

SELECT id, sensor_code FROM user WHERE YEAR(upload_time) = #{year}

数据库表新增信息

增加默认删除状态ALTER TABLE `sys_menu`ADD `deleted` tinyint(1) DEFAULT '0' COMMENT '删除状态(0:正常 1:删除)';台账表格基础操作时间信息ALTER TABLE `name`ADD create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',ADD update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间';台账表格基础操作人员信息ALTER TABLE `name`ADD create_person VARCHAR(255) NOT NULL COMMENT '创建人员',ADD create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',ADD update_person VARCHAR(255) NOT NULL COMMENT '更新人员',ADD update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',ADD changes_person VARCHAR(255) NOT NULL COMMENT '变更人员',ADD changes_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '变更时间',ADD delete_person VARCHAR(255) NOT NULL COMMENT '删除人员',ADD delete_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '删除时间';改变人员ALTER TABLE `name`ADD change_person VARCHAR(255) NOT NULL COMMENT '更变人员',ADD change_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更变时间';ALTER TABLE `name`ADD created_person VARCHAR(255) NOT NULL COMMENT '创建人员',ADD created_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间'ADD updated_person VARCHAR(255) NOT NULL COMMENT '更新人员',ADD updated_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间'ADD deleted_person VARCHAR(255) NOT NULL COMMENT '删除人员',ADD deleted_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '删除时间';

case

( CASE WHEN ( pmc.manoeuvre_change_state = 1 ) THEN pmc.id ELSE NULL END ) AS num

用 EXISTS 或 NOT EXISTS 代替 IN 或 NOT IN

select *  from test1 where EXISTS (select * from test2  where id2 = id1 )select *  FROM test1  where NOT EXISTS (select * from test2  where id2 = id1 )

7位设备编码补零生成

        SELECT( CASE WHEN sum.count < 10000000 THEN LPAD( sum.count, 7, '0' ) ELSE sum.count END ) AS sum_code_numFROM( SELECT COUNT(id) AS `count` FROM `device_info`) AS sum

查询相同id下,最新的一条数据

SELECT a.*
FROM alarm_dispose a
INNER JOIN (SELECT alarm_id, MAX(alarm_time) as max_alarm_time, MAX(id) AS idFROM alarm_disposeGROUP BY alarm_id
) b ON a.alarm_id = b.alarm_id AND a.alarm_time = b.max_alarm_time AND a.id = b.id;
SELECT a.*
FROM alarm_dispose a
INNER JOIN (SELECT alarm_id, MAX(alarm_time) as max_alarm_timeFROM alarm_disposeGROUP BY alarm_id
) b ON a.alarm_id = b.alarm_id AND a.alarm_time = b.max_alarm_time
WHERE a.id = (SELECT MAX(id)FROM alarm_dispose cWHERE c.alarm_id = a.alarm_id AND c.alarm_time = a.alarm_time
);

Spring Boot

常用注解

数据库事务注解

@Transactional(rollbackFor = Exception.class)

常用实体补充

    import com.fasterxml.jackson.annotation.JsonFormat;import org.springframework.format.annotation.DateTimeFormat;@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")@ApiModelProperty("创建时间")private Date createTime;@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")@ApiModelProperty("更新时间")private Date updateTime;

long自动转字符串

import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
@JsonSerialize(using = ToStringSerializer.class)

枚举类


import lombok.AllArgsConstructor;
import lombok.Getter;/*** 预警类别** @author dpe*/
@AllArgsConstructor
@Getter
public enum AlarmGradeEnum {/*** 一级预警*/ONE(1,"一级预警"),/*** 二级预警*/TWO(2,"二级预警"),/*** 三级预警*/THREE(3,"三级预警");private final Integer code;private final String name;public static Integer getCode(String name) {for (AlarmGradeEnum record : AlarmGradeEnum.values()) {if (record.name.equals(name)) {return record.code;}}return null;}public static String getName(Integer code) {for (AlarmGradeEnum record : AlarmGradeEnum.values()) {if (record.code.equals(code)) {return record.name;}}return null;}public static AlarmGradeEnum get(Integer code) {for (AlarmGradeEnum record : AlarmGradeEnum.values()) {if (record.code.equals(code)) {return record;}}return null;}
}

常用函数

    /*** 生成随机整数** @param min 最小区间* @param max 最大区间* @return 随机整数*/public int generatingRandomInt(int min, int max) {double randomValue = min + (max - min + 1) * Math.random();return (int) randomValue;}

流处理-list转map

    public Map<String, User> convertListToMap(List<User> userList) {if (deviceInfoList == null) {return new HashMap<>(); // 返回空Map,或者抛出异常,取决于你的需求}Map<String, User> userMap = userList.stream().filter(user -> user.getCode() != null) // 判空过滤.collect(Collectors.toMap(User::getTermigetCodenalNo, user -> user));return userMap;}

list转map

        List<SysMenu> sysMenuList = menuMapper.selectList(null);HashMap<Long, List<SysMenu>> map = new HashMap<>();for (SysMenu item:sysMenuList){Long parentId = item.getParentId();List<SysMenu> sysMenuMapList = new ArrayList<>();if(map.containsKey(parentId)){sysMenuMapList = map.get(parentId);}sysMenuMapList.add(item);map.put(parentId, sysMenuMapList);}

list排序

自然正序

Comparator.naturalOrder()

自然倒叙

Comparator.reverseOrder()
// 根据list中的一个字段,对集合重新排序(不能处理空值)
List<User> newList = list.stream().sorted(Comparator.comparing(User::getAge)).collect(Collectors.toList());// 使用 nullsLast() 方法,将空值排在最后:
newList = newList.stream().sorted(Comparator.comparing(User::getAge, Comparator.nullsLast(Comparator.naturalOrder()))).collect(Collectors.toList());// 使用 nullsFirst() 方法,将空值排在最前:
newList = newList.stream().sorted(Comparator.comparing(User::getAge, Comparator.nullsFirst(Comparator.naturalOrder()))).collect(Collectors.toList());

时间类型

获取当天的开始时间
DateTime beginOfDay = DateUtil.beginOfDay(new Date());
获取当天的结束时间
DateTime endOfDay = DateUtil.endOfDay(new Date());

数据校验函数

验证手机号码与座机号码
    /*** 验证手机号码与座机号码** @param phone 号码* @return 正确/错误*/public static boolean phoneVerification(String phone) {// 验证手机号码String mobilePattern = "^1(3[0-9]|4[5-9]|5[0-35-9]|66|7[0-8]|8[0-9]|9[0-35-9])\\d{8}$";Pattern patternMobile = Pattern.compile(mobilePattern);Matcher matcherMobile = patternMobile.matcher(phone);boolean phoneNum = matcherMobile.matches();// 验证座机号码String telephonePattern = "^(0[1-9]\\d{1,2}-?)?([2-9]\\d{6,7})$";Pattern patternTelephone = Pattern.compile(telephonePattern);Matcher matcherTelephone = patternTelephone.matcher(phone);boolean matcher = matcherTelephone.matches();// 验证座机号码(不带区号)String telephonePatternShort = "^(0[1-9]\\d{1,2}-?)?([2-9]\\d{6,7})|(\\d{7,8})$";Pattern patternTelephoneShort = Pattern.compile(telephonePatternShort);Matcher matcherTelephoneShort = patternTelephoneShort.matcher(phone);boolean matcherShort = matcherTelephoneShort.matches();return phoneNum || matcher || matcherShort;}

实体通用字段

@ApiModelProperty(value = "删除状态(0:正常 1:删除)")private Integer deleted;

Optional判空

Optional<SosInfo> sosInfoOptional = sosInfoRepository.findById(id);
SosInfo sosInfo = sosInfoOptional.orElse(null);
Optional<DeviceInfo> deviceInfoOptional = deviceInfoRepository.findById(id);
if (deviceInfoOptional.isPresent()) {DeviceInfo deviceInfo = deviceInfoOptional.get();
}

测试类

普通测试类

import org.junit.Test;/*** @author fir*/
public class DataServiceTest {@Testpublic void a(){System.out.println("asdasda");}
}

实体注解

自定义字段,不作为数据库表字段使用

@TableField(exist = false)

雪花算法主键

    @JsonSerialize(using= ToStringSerializer.class)@TableId(value = "role_id", type = IdType.ASSIGN_ID)

时间格式转换实体字段

import com.fasterxml.jackson.annotation.JsonFormat;import org.springframework.format.annotation.DateTimeFormat;    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")

xml文件特殊符号替换符

  &lt; < 小于号 &gt; > 大于号 &amp; & 和 &apos; ' 单引号 &quot; " 双引号

数据提交验证

@ApiOperation("添加数据")@PostMapping("/insertData")public AjaxResult insertData(@Validated Demo demo){return AjaxResult.success(iDemoService.insertData(demo));}

实体中

// 字符串类型,表示不能超过5个字符(abcde)Length(max = 5,message = "名称 不能超过 5 个字符")@ApiModelProperty(value = "名称")@ExcelProperty(index = 1)private String name;数值类型,表示不能大于1(<=1)@Range(max = 1, message = "状态 不能超过 1 个字符")@ApiModelProperty(value = "状态(0:未上报,1:已上报,2:变更中)")private Integer state;

对于
reason longtext COMMENT ‘内容’
字段长度应为

@Length(max = 65535, message = "内容 不能超过 65535 个字符")@ApiModelProperty(value = "内容")private String reason;

递归处理树形结构

树形实体

package com.lnsoft.mmbdf.yjglpt.project.dto.mt;import com.fasterxml.jackson.databind.annotation.JsonSerialize;import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;import io.swagger.annotations.ApiModelProperty;import lombok.AllArgsConstructor;import lombok.Builder;import lombok.Data;import lombok.NoArgsConstructor;import java.util.List;/*** 级联选择器对象* @author fir*/@Data@Builder@AllArgsConstructor@NoArgsConstructorpublic class TreeIntegerDTO {@JsonSerialize(using= ToStringSerializer.class)@ApiModelProperty(value = "数值")private Long value;@ApiModelProperty(value = "标签")private String label;@ApiModelProperty(value = "可用数值")private Object num;@ApiModelProperty(value = "状态")private Object state;@ApiModelProperty(value = "是否禁用: 是-true 否-false")private Boolean disabled;@ApiModelProperty(value = "子列表")private List<TreeIntegerDTO> children;}

MyBatis-Plus

查询条件

lqwList.and((qw) -> qw.eq(ManoeuvreVideo::getType, 0).or().eq(ManoeuvreVideo::getType, 1));
区间
 lqw.between(ManoeuvreVideo::getTime, start, end);
大于小于
// 大于lqw.gt(ManoeuvreVideo::getTime, time);// 大于等于lqw.ge(ManoeuvreVideo::getTime, time);// 小于lqw.lt(ManoeuvreVideo::getTime, time);// 小于等于lqw.le(ManoeuvreVideo::getTime, time);

xml自定义查询

in(foreach)
codeIN <foreach collection="list" index="index" item="item" open="(" separator="," close=")">#{item}</foreach>/*** 装备演练-地市演练次数查看** @return 地市演练次数*/List<PjManoeuvreStatisticsOrgManoeuvre> getStatistics(List<String> list);
if
<if test="type != null and type != ''">t.type = #{type}
</if><if test="state != null and state.size > 0">AND t.state IN<foreach item="state" index="index" collection="state" open="(" separator="," close=")">#{state}</foreach>
</if><if test="array != null and array.length >0">
<if test="list != null and list.size() > 0">
where
<where><if test="type != null and type != ''">t.type = #{type}</if>
</where>
like concat('%', #{menuName}, '%')

自定义查询的分页查询

// 逻辑层中PageInfo<User> resultInfo;Page<User> page = new Page<>(pageNum, pageSize);Page<User> userPage = userMapper.getList(page);resultInfo = new PageInfo<>(userPage.getTotal(), pageNum, userPage.getRecords());// deo层中Page<User> getList(Page<User> page);// xml中<select id="getList" resultType="com.fir.test.dto.mt.User">SELECT name,codeFROM `user`</select>

Swagger

常用注释

@ApiImplicitParams({@ApiImplicitParam(name = "weightJson", value = "指标权重(Json)格式", dataTypeClass = String.class),@ApiImplicitParam(name = "pageNum", value = "页码", defaultValue = "1", dataTypeClass = Integer.class, required = true),@ApiImplicitParam(name = "pageSize", value = "页数量", defaultValue = "10", dataTypeClass = Integer.class, required = true)})

Hutool 工具

手机号码校验
boolean isMobile = Validator.isMobile("18866661234");
1
身份证号校验
boolean isIdCardNumber = Validator.isCitizenId("43312220160113802X");
1
邮箱校验
boolean isEmail = Validator.isEmail("random@example.com");
1
统一社会信用代码校验
boolean isCreditCode = Validator.isCreditCode("91440300701234567A");
1
车牌号码校验
boolean isPlateNumber = Validator.isPlateNumber("粤B12345");
1
车架号校验
boolean isCarVin = Validator.isCarVin("LFV2A21J9D4112345");

历史问题

Mybatis-plus 逻辑删除字段无效

问题描述:

<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>3.0.6</version></dependency>

增加yml配置后仍然无效

mybatis-plus:global-config:db-config:logic-delete-field: deleted # 此版本无该配置项logic-delete-value: 1logic-not-delete-value: 0

实体中一下配置均无效

@TableLogic@ApiModelProperty(value = "删除状态(0:正常 1:删除)")private Integer deleted;
	@TableLogic(value = "0", delval = "1")	@ApiModelProperty(value = "删除状态(0:正常 1:删除)")	private Integer deleted;

解决方法:

实体

@TableLogic
@ApiModelProperty(value = "删除状态(0:正常 1:删除)")
private Integer deleted;

配置类

import com.baomidou.mybatisplus.core.MybatisConfiguration;
import com.baomidou.mybatisplus.core.config.GlobalConfig;
import com.baomidou.mybatisplus.core.injector.DefaultSqlInjector;
import com.baomidou.mybatisplus.core.injector.ISqlInjector;
import com.baomidou.mybatisplus.extension.injector.LogicSqlInjector;
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.type.JdbcType;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternResolver;
import org.springframework.transaction.annotation.EnableTransactionManagement;import javax.sql.DataSource;
import java.io.IOException;/*** @author dpe* @date 2022/02/10 16:34**/
@Slf4j
@Configuration
public class MybatisPlusConfig {/*** 分页插件* @return bean*/@Beanpublic PaginationInterceptor paginationInterceptor() {return new PaginationInterceptor();}/*** 逻辑删除** @return 注入器*/@Beanpublic ISqlInjector sqlInjector(){return new LogicSqlInjector();}
}

错误案例

更多的人推荐,但这种配置是无效的

/*** 逻辑删除** @return 注入器*/@Beanpublic ISqlInjector sqlInjector(){return new DefaultSqlInjector();}

Invalid bound statement (not found)

问题描述

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.fir.mybatis.imapper.core.UserMapper.getUser

解决方法

mybatis:config-location: classpath:mybatis-config.xmlmapper-locations: classpath:/mapper/*.xmlmybatis-plus:configuration:map-underscore-to-camel-case: trueauto-mapping-behavior: fulllog-impl: org.apache.ibatis.logging.stdout.StdOutImpl#  mapper-locations: classpath*:mapper/*.xml 去掉该条配置

错误原因

在低版本中配置逻辑删除,有修改配置的方法,但在尝试无效之后,没有及时的清理无用的配置,导致问题出现
临时记录

"fileName": "20231220测试视频.mp4","staticResourcesId": 158253

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

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

相关文章

FOC之反park变化推导笔记

FOC之反park变化推导笔记 Vd和Vq是Id和Iq电流经过PID控制器后得到的电压值。 至于为什么PID出来就是电压值&#xff0c;因为Ud和Uq的公式中有id和iq&#xff0c;两者之间有关系&#xff0c;具体的我给出两个链接。 https://blog.csdn.net/lanmanck/article/details/105551779 …

excel里如何将数据分组转置?

这个表格怎样转换为下表&#xff1f;按照国家来分组&#xff0c;把不同年份对应的不同序列值进行转置&#xff1f;&#xff1f; 这演示用数据透视表就完成这个数据转换。 1.创建数据透视表 选中数据中任意单元格&#xff0c;点击插入选项卡&#xff0c;数据透视表&#xff0c;…

202472读书笔记|《首先你要快乐,其次都是其次》——快乐至上,允许一切发生

202472读书笔记|《首先你要快乐&#xff0c;其次都是其次》——快乐至上&#xff0c;允许一切发生 《首先你要快乐&#xff0c;其次都是其次》作者林小仙&#xff0c;挺轻松的小漫画&#xff0c;清新的文字。 生而为人&#xff0c;我很抱歉&#xff0c;大可不必。 生活已经很难…

【正点原子Linux连载】 第四十五章 SATA硬盘驱动实验摘自【正点原子】ATK-DLRK3568嵌入式Linux驱动开发指南

1&#xff09;实验平台&#xff1a;正点原子ATK-DLRK3568开发板 2&#xff09;平台购买地址&#xff1a;https://detail.tmall.com/item.htm?id731866264428 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/docs/boards/xiaoxitongban 第四十…

【MySQL精通之路】SQL优化(1)-查询优化(2)-范围查询优化

主博客&#xff1a; 【MySQL精通之路】SQL优化(1)-查询优化-CSDN博客 上一篇&#xff1a; 【MySQL精通之路】SQL优化(1)-查询优化(1)-WHERE子句-CSDN博客 下一篇&#xff1a; 【MySQL精通之路】SQL优化(1)-查询优化(3)-索引合并-CSDN博客 目录 1.单列索引的范围访问方法 …

快速搭建SpringMvc项目

一、什么是springMvc 1、介绍 Spring Web MVC是基于Servlet API构建的原始Web框架&#xff0c;从一开始就包含在Spring Framework中。正式名称“Spring Web MVC”来自其源模块的名称&#xff08; spring-webmvc &#xff09;&#xff0c;但它通常被称为“Spring MVC”。 在控制…

JS片段:如何将文本复制到剪贴板

在构建网站时&#xff0c;一个非常普遍的需求是能够通过单击按钮将文本复制到剪贴板。在现代浏览器中&#xff0c;使用navigator.clipboardAPI 访问系统剪切板&#xff0c;利用clipboard.writeText复制到剪贴板&#xff0c;再通过clipboard.readText获取剪贴板内容即可实现。 …

GitLab的原理及应用详解(一)

本系列文章简介&#xff1a; 随着软件开发的不断进步和发展&#xff0c;版本控制系统成为了现代软件开发过程中不可或缺的一部分。而GitLab作为其中一种流行的版本控制工具&#xff0c;在软件开发领域享有广泛的应用。GitLab不仅提供了强大的版本控制功能&#xff0c;还集成了项…

springboot集成redis实现消息的订阅与发布

&#xff08;十九&#xff09;springboot实战——springboot集成redis实现消息的订阅与发布_springboot redis消息订阅-CSDN博客 https://blog.csdn.net/yprufeng/article/details/136151115 package com.yundi.atp.config;import org.springframework.context.annotation.Bea…

Linux x86_64 UEFI 启动

文章目录 前言一、UEFI二、Disk device compatibility2.1 GPT 磁盘分区表2.1.1 简介2.1.2 Linux 2.2 ESP&#xff08;EFI&#xff09; 文件系统2.2.1 简介2.2.2 LinuxLinux Kernel EFI Boot Stub 三、UEFI GPT grub23.1 简介3.2 引导方式 3.3 BOOTX64.EFI3.4 shimx64.efi3.5 …

DEV--C++小游戏(吃星星(1.2))

目录 吃星星&#xff08;1.2&#xff09; 该版本简介更新说明 分部代码 头文件命名空间变量 结构体 角色结构体 星星结构体 打印地图结构体 函数 函数声明 单人模式游戏函数 双人模式游戏函数 开始游戏函数 清屏函数 定点输出函数 隐藏光标函数 输入函数 单人…

wordpress子目录建站

在WordPress中建立在子目录的网站&#xff0c;你需要修改wp-config.php文件中的常量定义&#xff0c;使其指向正确的子目录路径。以下是修改步骤&#xff1a; 将WordPress安装包上传到你的子目录中。 解压缩安装包&#xff0c;如果你是通过FTP工具上传的&#xff0c;请确保上传…

React hooks - useReducer

useReducer 用法使用使用 Immer 更简单的编写 reducer 注意事项 用法 可同时更新多个状态&#xff0c;且能把对状态的修改从组件中独立出来&#xff0c;状态更新逻辑较复杂时可以考虑使用。代码逻辑更清晰&#xff0c;代码行为易预测&#xff1a;组件负责发出行为&#xff0c;…

通过Web网管切换到命令行界面【华为路由器】

一、注意事项 1.当前操作系统用户需要具有管理权限 2.设备仅呼出telnet客户端&#xff0c;设备仅发起telnet连接&#xff0c;不包括管理 3.不支持通过url地址或地址、端口的映射环境访问CLI控制台 二、准备条件 1.浏览器切换 CLI控制台只能使用IE浏览器&#xff0c;先把浏…

STM32自己从零开始实操02:输入部分原理图

一、触摸按键 1.1指路 项目需求&#xff1a; 4个触摸按键&#xff0c;主控芯片 TTP224N-BSBN&#xff08;嘉立创&#xff0c;封装 TSSOP-16&#xff09;&#xff0c;接入到 STM32 的 PE0&#xff0c;PE1&#xff0c;PE2&#xff0c;PE3。 1.2走路 1.2.1数据手册重要信息提…

SQL Server基础学习笔记

一. 什么是SQL Server&#xff1f; SQL Server是由微软公司开发的关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;它提供了存储、检索、处理和分析数据的功能。作为一种强大的数据库解决方案&#xff0c;SQL Server被广泛应用于企业级应用程序、Web应用程序、…

K8s之ku-be admin部署安装

目录 一、环境配置 1、机器部署 2、部署大致流程 二、实验环境配置 1、所有节点关闭防火墙核心防护以及关闭swap交换 2、所有节点安装docker 3、所有节点安装kubeadm&#xff0c;kubelet和kubectl 4、部署K8s集群 5、设定kubectl 6、所有节点部署网络插件flannel 7、…

netstat命令检查端口是否监听

要使用netstat命令检查端口是否监听&#xff0c;可以使用以下命令&#xff1a; netstat -tuln | grep <port>netstat -tuln 是一个常用的网络命令&#xff0c;用于显示系统的网络连接情况。这个命令的参数含义解释如下&#xff1a; -t 表示显示 TCP 协议的连接-u 表示显…

使用TensorFlow Lite Micro流程记录(带源码)

文章目录 0 关于tflite micro1 克隆仓库2 编译静态库3 模型转换4 编写工程5 编写demo5.1 进行算子注册 5.2 推理过程6 debug记录6.1 缺少算子 6.2 注册表太小6.3 段错误6.4 进一步减小库体积 7 实际部署 0 关于tflite micro 关于tflite micro在这里接不做过多介绍了&#xff0c…

2831. 找出最长等值子数组 Medium

给你一个下标从 0 开始的整数数组 nums 和一个整数 k 。 如果子数组中所有元素都相等&#xff0c;则认为子数组是一个 等值子数组 。注意&#xff0c;空数组是 等值子数组 。 从 nums 中删除最多 k 个元素后&#xff0c;返回可能的最长等值子数组的长度。 子数组 是数组中一…