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

【外卖系统】分类管理业务

公共字段自动填充

需求分析

对于之前的开发中,有创建时间、创建人、修改时间、修改人等字段,在其他功能中也会有出现,属于公共字段,对于这些公共字段最好是在某个地方统一处理以简化开发,使用Mybatis Plus提供的公共字段自动填充功能

代码实现

  • 在实体类的属性上加入@TableField注解,指定自动填充的策略
  • 按照框架要求编写元数据对象处理器,在此类中统一为公共字段赋值,此类需要实现MetaObjectHandler接口

修改步骤

  • 先在实体类中的公共字段加上自动填充的注释
 private Integer status;@TableField(fill = FieldFill.INSERT)//插入时填充字段private LocalDateTime createTime;@TableField(fill = FieldFill.INSERT_UPDATE)//插入和更新时填充字段private LocalDateTime updateTime;@TableField(fill = FieldFill.INSERT)//插入时填充字段private Long createUser;@TableField(fill = FieldFill.INSERT_UPDATE)//插入和更新时填充字段private Long updateUser;
  • 修改控制类中的一些代码

在这里插入图片描述在这里插入图片描述

将这些属性的值统一的在insertFill方法中实现。

package com.springboot.reggie.common;import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;import java.time.LocalDateTime;@Component
@Slf4j
/*** 自定义元数据处理器*//*** 插入操作,自动填充* @param metaObject*/public  class MyMetaObjecthandler implements MetaObjectHandler {@Overridepublic void insertFill(MetaObject metaObject) {log.info("公共字段自动填充[insert]...");log.info(metaObject.toString());metaObject.setValue("createTime", LocalDateTime.now());metaObject.setValue("updateTime",LocalDateTime.now());metaObject.setValue("createUser",new Long(1));metaObject.setValue("updateUser",new Long(1));}
/*** 更新操作,自动填充* @param metaObject*/@Overridepublic void updateFill(MetaObject metaObject) {log.info("公共字段自动填充[update]...");log.info(metaObject.toString());metaObject.setValue("updateTime",LocalDateTime.now());metaObject.setValue("updateUser",new Long(1));}
}

问题:自动填充时设置的用户id是固定值,目的是要动态获取当前登录用户的id
解决办法:使用ThreadLocal(用户登录成功,我们将用户id存在了HttpSession中,但是在MyMetaObjectHandler类中是不能获取HttpSession对象的)

关于ThreadLocal

客户端每次发送的http请求,对于的服务端都会分配一个新的线程来处理
LoginCheckFilter中的doFilter方法、EmployeeController中的update方法、MyMetaObjectHandlerupdateFill方法都属于相同的一个线程
即一次请求,对应的线程id都是相同的,所以可以得到相同的值

package com.springboot.reggie.common;
/*** 基于ThreadLocal封装工具类 用于保存和获取当前登录用户的id*/public class BaseContext {private static ThreadLocal<Long>/*用户id是Long型*/ threadLocal = new ThreadLocal<>();/***设置值* @param  id*/public static  void setCurrentId(Long id)//设置成静态的 因为这是工具方法{threadLocal.set(id);}/*** 获取值* @return  id*/public static Long getCurrentId(){return threadLocal.get();}
}
package com.springboot.reggie.controller;import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.springboot.reggie.common.R;
import com.springboot.reggie.entity.Employee;
import com.springboot.reggie.service.EmployeeService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.DigestUtils;
import org.springframework.web.bind.annotation.*;import javax.servlet.http.HttpServletRequest;
import java.time.LocalDateTime;@Slf4j
@RestController
@RequestMapping("/employee")
public class EmployeeController {@Autowiredprivate EmployeeService employeeService;/*** 员工登录* @param request* @param employee* @return*/@PostMapping("/login")public R<Employee> login(HttpServletRequest request,@RequestBody Employee employee){//1、将页面提交的密码password进行md5加密处理String password = employee.getPassword();password = DigestUtils.md5DigestAsHex(password.getBytes());//2、根据页面提交的用户名username查询数据库LambdaQueryWrapper<Employee> queryWrapper = new LambdaQueryWrapper<>();queryWrapper.eq(Employee::getUsername,employee.getUsername());Employee emp = employeeService.getOne(queryWrapper);//3、如果没有查询到则返回登录失败结果if(emp == null){return R.error("登录失败");}//4、密码比对,如果不一致则返回登录失败结果if(!emp.getPassword().equals(password)){return R.error("登录失败");}//5、查看员工状态,如果为已禁用状态,则返回员工已禁用结果if(emp.getStatus() == 0){return R.error("账号已禁用");}//6、登录成功,将员工id存入Session并返回登录成功结果request.getSession().setAttribute("employee",emp.getId());return R.success(emp);}/*** 员工退出* @param request* @return*/@PostMapping("/logout")public R<String> logout(HttpServletRequest request){//清理Session中保存的当前登录员工的idrequest.getSession().removeAttribute("employee");return R.success("退出成功");}/*** 新增员工* @param employee* @return*/@PostMappingpublic R<String> save(HttpServletRequest request,@RequestBody Employee employee){log.info("新增员工,员工信息:{}",employee.toString());//设置初始密码123456,需要进行md5加密处理employee.setPassword(DigestUtils.md5DigestAsHex("123456".getBytes()));// employee.setCreateTime(LocalDateTime.now());//employee.setUpdateTime(LocalDateTime.now());//获得当前登录用户的id//Long empId = (Long) request.getSession().getAttribute("employee");//employee.setCreateUser(empId);//employee.setUpdateUser(empId);employeeService.save(employee);return R.success("新增员工成功");}/*** 员工信息分页查询* @param page* @param pageSize* @param name* @return*/@GetMapping("/page")public R<Page> page(int page,int pageSize,String name){log.info("page = {},pageSize = {},name = {}" ,page,pageSize,name);//构造分页构造器Page pageInfo = new Page(page,pageSize);//构造条件构造器LambdaQueryWrapper<Employee> queryWrapper = new LambdaQueryWrapper();//添加过滤条件queryWrapper.like(StringUtils.isNotEmpty(name),Employee::getName,name);//添加排序条件queryWrapper.orderByDesc(Employee::getUpdateTime);//执行查询employeeService.page(pageInfo,queryWrapper);return R.success(pageInfo);}/*** 根据id修改员工信息* @param employee* @return*/@PutMappingpublic R<String> update(HttpServletRequest request,@RequestBody Employee employee){log.info(employee.toString());//Long empId = (Long)request.getSession().getAttribute("employee");// employee.setUpdateTime(LocalDateTime.now());//employee.setUpdateUser(empId);employeeService.updateById(employee);return R.success("员工信息修改成功");}/*** 根据id查询员工信息* @param id* @return*/@GetMapping("/{id}")public R<Employee> getById(@PathVariable Long id){log.info("根据id查询员工信息...");Employee employee = employeeService.getById(id);if(employee != null){return R.success(employee);}return R.error("没有查询到对应员工信息");}
}

解决一下之前“玄学报错”的问题:原因是启动类中少了@ServletComponentScan

下面是引用的某ai的回答,没系统学过springboot,这些东西也不懂,之后还得学。。还有比较长的路要走。

@ServletComponentScan是一个Spring Boot注解,用于扫描和注册Servlet、Filter和Servlet监听器。
在传统的Java Web应用程序中,我们需要在web.xml文件中配置Servlet、Filter和Servlet监听器。但是,使用Spring Boot时,可以使用注解来代替web.xml的配置。
@ServletComponentScan注解可以在Spring Boot的主配置类上使用,它会自动扫描指定包及其子包下的所有Servlet、Filter和Servlet监听器,并将它们注册到Servlet容器中。
使用@ServletComponentScan注解的步骤如下:
在Spring Boot的主配置类上添加@ServletComponentScan注解。
在指定的包及其子包下创建Servlet、Filter和Servlet监听器。
在创建的Servlet、Filter和Servlet监听器类上使用@WebServlet、@WebFilter和@WebListener等注解进行配置。
通过使用@ServletComponentScan注解,Servlet、Filter和Servlet监听器就可以通过注解的方式进行配置和注册,而不需要再手动编写web.xml文件。
需要注意的是,@ServletComponentScan注解只在使用嵌入式Servlet容器(如Tomcat)时有效,对于外部部署的WAR包,它不会生效。
总结:@ServletComponentScan是一个Spring Boot注解,用于自动扫描和注册Servlet、Filter和Servlet监听器,简化了配置和注册的过程。

新增分类

需求分析

菜品分类和套餐分类,添加菜品时选择菜品分类,添加套餐时选择套餐分类。
通过前端和设计的数据库看:
在这里插入图片描述在这里插入图片描述

代码设计

实体类

package com.springboot.reggie.entity;import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
import java.time.LocalDateTime;/*** 分类*/
@Data
public class Category implements Serializable {private static final long serialVersionUID = 1L;private Long id;//类型 1 菜品分类 2 套餐分类private Integer type;//分类名称private String name;//顺序private Integer sort;//创建时间@TableField(fill = FieldFill.INSERT)private LocalDateTime createTime;//更新时间@TableField(fill = FieldFill.INSERT_UPDATE)private LocalDateTime updateTime;//创建人@TableField(fill = FieldFill.INSERT)private Long createUser;//修改人@TableField(fill = FieldFill.INSERT_UPDATE)private Long updateUser;}
  • 页面发送ajax请求,将新增分类窗口输入的数据以json形式提交到服务端
  • 服务端Controller接收页面提交的数据并调用Service将数据进行保存
  • Service调用Mapper操作数据,保存数据
    在这里插入图片描述

通过前端发送给后台的请求发现新增菜品和新增套餐分类请求的服务端地址和提交的json数据结构相同,所以服务端只需要提供一个方法统一处理。

添加淮扬菜成功
在这里插入图片描述代码不放了

分类信息分页查询

package com.springboot.reggie.controller;import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.springboot.reggie.common.R;
import com.springboot.reggie.entity.Category;
import com.springboot.reggie.service.CategoryService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;/*** 分类管理*/
@RestController
@RequestMapping("/category")
@Slf4j
public class CategoryController {@Autowiredprivate CategoryService categoryService;/*** 新增分类* @param category* @return*/@PostMappingpublic R<String> save(@RequestBody Category category){log.info("category{}",category);categoryService.save(category);return R.success("新增分类成功");}/*** 分页查询* @param page* @param pageSize* @return*/@GetMapping("/page")public R<Page> page(int page,int pageSize){//分页构造器Page<Category> pageInfo = new Page<>(page,pageSize);//条件构造器LambdaQueryWrapper<Category> queryWrapper = new LambdaQueryWrapper<>();//添加排序条件 根据sort进行排序queryWrapper.orderByAsc(Category::getSort);//进行分页查询categoryService.page(pageInfo,queryWrapper);return R.success(pageInfo);// return null;}
}

删除分类

在这里插入图片描述
在这里插入图片描述

  • 页面发送ajax请求,将参数id提交到服务端
  • 服务端Controller接受页面提交的数据并调用Service删除数据
  • Service调用Mapper操作数据库

简单删除

在这里插入图片描述

 /***删除分类 根据id删除分类* @param id* @return*/@DeleteMappingpublic R<String> delete(Long id){log.info("删除分类,id为:{}",id);categoryService.removeById(id);return  R.success("删除分类成功...");//return null;}

在这里插入图片描述

完善删除功能

上述的删除只是简单的直接删除菜品或者是套餐,但是没有检查删除的分类是否关联了菜品或者套餐需要进行完善。
准备好实体类(菜品和菜单)

尝试删除“湘菜”,湘菜是关联了套餐的,删除失败。
在这里插入图片描述添加一个无关联的菜品或者套餐,然后再删除,之前一直是报错,原因是没有添加@Autowired注解。

@Autowired是Spring框架中的一个注解,用于自动装配(自动注入)对象的依赖关系。在Spring容器中,使用@Autowired注解可以实现自动装配,即根据指定的类型,自动在容器中查找匹配的bean,并将其注入到目标对象中。
@Autowired可以用在构造方法、成员变量、方法以及参数上。当用在构造方法上时,Spring会自动在容器中查找匹配的bean,并将其作为参数传入构造方法中。当用在成员变量上时,Spring会自动在容器中查找匹配的bean,并将其注入到成员变量中。当用在方法上时,Spring会自动在容器中查找匹配的bean,并将其作为方法的参数传入。当用在方法参数上时,Spring会自动在容器中查找匹配的bean,并将其作为方法参数传入。
使用@Autowired注解可以简化代码,减少手动配置的工作量。它可以减少了因为对象之间的依赖关系而需要手动创建对象和设置依赖关系的繁琐工作。同时,它也增加了代码的可读性和可维护性,使得代码更加清晰和简洁。
需要注意的是,使用@Autowired注解时,需要先确保Spring容器中存在匹配的bean。如果存在多个匹配的bean,可以使用@Qualifier注解或者通过指定名称的方式来指定具体要注入的bean。如果没有找到匹配的bean,会抛出异常。

在这里插入图片描述

package com.springboot.reggie.controller;import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.springboot.reggie.common.R;
import com.springboot.reggie.entity.Category;
import com.springboot.reggie.service.CategoryService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;import java.util.List;/*** 分类管理*/
@RestController
@RequestMapping("/category")
@Slf4j
public class CategoryController {@Autowiredprivate CategoryService categoryService;public Long id;/*** 新增分类* @param category* @return*/@PostMappingpublic R<String> save(@RequestBody Category category){log.info("category{}",category);categoryService.save(category);return R.success("新增分类成功");}/*** 分页查询* @param page* @param pageSize* @return*/@GetMapping("/page")public R<Page> page(int page,int pageSize){//分页构造器Page<Category> pageInfo = new Page<>(page,pageSize);//条件构造器LambdaQueryWrapper<Category> queryWrapper = new LambdaQueryWrapper<>();//添加排序条件 根据sort进行排序queryWrapper.orderByAsc(Category::getSort);//进行分页查询categoryService.page(pageInfo,queryWrapper);return R.success(pageInfo);// return null;}/***删除分类 根据id删除分类* @param id* @return*/@DeleteMapping()// @RequestParampublic R<String> delete(Long id){//this.ids = ids;log.info("删除分类,id为:{}",id);categoryService.remove(id);return  R.success("删除分类成功...");//return null;}}
package com.springboot.reggie.service.impl;import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.springboot.reggie.common.CustomException;
import com.springboot.reggie.entity.Category;import com.springboot.reggie.entity.Dish;
import com.springboot.reggie.entity.Setmeal;
import com.springboot.reggie.mapper.CategoryMapper;import com.springboot.reggie.service.CategoryService;import com.springboot.reggie.service.DishService;
import com.springboot.reggie.service.SetmealService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;@Service
public class CategoryServiceImpl extends ServiceImpl<CategoryMapper,Category> implements CategoryService{@Autowiredprivate DishService dishService;//录入菜品分类@Autowiredprivate SetmealService setmealService;//录入套餐分类/*** 根据id删除分类 删除之前需要进行判断* @param id*/@Overridepublic void remove (Long id){//调用框架中的查询方法LambdaQueryWrapper<Dish> dishLambdaQueryWrapper = new LambdaQueryWrapper<>();//添加查询条件 根据分类id进行查询dishLambdaQueryWrapper.eq(Dish::getCategoryId,id);//统计当前分类下关联了几个菜品int count = dishService.count(dishLambdaQueryWrapper);//如果当前分类下关联的菜品个数大于0 说明有菜品关联 不能删//查询当前分类是否关联了菜品 如果已关联 抛出一个业务异常if(count>0){throw new CustomException("当前分类下关联了菜品,不能删除!");}//查询当前分类是否关联了套餐 如果已关联 抛出一个业务异常LambdaQueryWrapper<Setmeal> setmealLambdaQueryWrapper = new LambdaQueryWrapper<>();//添加查询条件 根据分类id进行查询setmealLambdaQueryWrapper.eq(Setmeal::getCategoryId,id);int cnt = setmealService.count(setmealLambdaQueryWrapper);//如果当前分类下关联的菜品个数大于0 说明有套餐关联 不能删if(cnt>0){throw new CustomException("当前分类下关联了套餐,不能删除!");}//正常删除分类super.removeById(id);}}

修改分类

需求分析

点击修改按钮,弹出修改窗口,在修改窗口回显分类信息并进行修改,最后点击确定按钮完成修改操作

代码

 /*** 根据id修改分类信息* @param category* @return*/@PutMappingpublic R<String> update(@RequestBody  Category category){log.info("修改分类信息:{}",category);categoryService.updateById(category);return R.success("修改分类信息成功...");}

在这里插入图片描述

相关文章:

【外卖系统】分类管理业务

公共字段自动填充 需求分析 对于之前的开发中&#xff0c;有创建时间、创建人、修改时间、修改人等字段&#xff0c;在其他功能中也会有出现&#xff0c;属于公共字段&#xff0c;对于这些公共字段最好是在某个地方统一处理以简化开发&#xff0c;使用Mybatis Plus提供的公共…...

es报错[FORBIDDEN/12/index read-only / allow delete (api)]

报错 [FORBIDDEN/12/index read-only / allow delete (api)] es磁盘满了 postman请求 put 请求 http://loclahost:9200/_settings {"settings": {"index": {"blocks": {"read_only_allow_delete": "false"}}} }...

关于网络通信安全协议的一些知识(ssl,tls,CA,https)

首先了解一下http协议的变迁。 http1.0默认短连接&#xff0c;1.1默认长连接并且可以管道传输&#xff0c;但是存在队头阻塞问题&#xff1b; https就是在tcp和http之间加了SSL/TLS层。 http2也是安全的&#xff0c;改进是hpack二进制和编码压缩减小体积&#xff0c;stream没有…...

Generative Diffusion Prior for Unified Image Restoration and Enhancement 论文阅读笔记

这是CVPR2023的一篇用diffusion先验做图像修复和图像增强的论文 之前有一篇工作做了diffusion先验&#xff08;Bahjat Kawar, Michael Elad, Stefano Ermon, and Jiaming Song, “Denoising diffusion restoration models,” arXiv preprint arXiv:2201.11793, 2022. 2, 4, 6,…...

GAMES101 笔记 Lecture13 光线追踪1

目录 Why Ray Tracing?(为什么需要光线追踪&#xff1f;)Basic Ray Tracing Algorithm(基础的光线追踪算法)Ray Casting(光线的投射)Generating Eye Rays(生成Eye Rays) Recursive(Whitted-Styled) Ray Tracing Ray-Surface Intersection(光线和平面的交点)Ray Rquation(射线方…...

【多模态】21、BARON | 通过引入大量 regions 来提升模型开放词汇目标检测能力

文章目录 一、背景二、方法2.1 主要过程2.2 Forming Bag of Regions2.3 Representing Bag of Regions2.4 Aligning bag of regions 三、效果 论文&#xff1a;Aligning Bag of Regions for Open-Vocabulary Object Detection 代码&#xff1a;https://github.com/wusize/ovdet…...

2023“Java 基础 - 中级 - 高级”面试集结,已奉上我的膝盖

Java 基础&#xff08;对象线程字符接口变量异常方法&#xff09; 面向对象和面向过程的区别&#xff1f; Java 语言有哪些特点&#xff1f; 关于 JVM JDK 和 JRE 最详细通俗的解答 Oracle JDK 和 OpenJDK 的对比 Java 和 C的区别&#xff1f; 什么是 Java 程序的主类&…...

开源项目-erp企业资源管理系统(毕设)

哈喽,大家好,今天给大家带来一个开源项目-erp企业资源管理系统,项目通过ssh+oracle技术实现。 系统主要有基础数据,人事管理,采购管理,销售管理,库存管理,权限管理模块 登录 主页 基础数据 基础数据有商品类型,商品,供应商,客户,仓库管理功能...

Leetcode刷题---C语言实现初阶数据结构---单链表

1 删除链表中等于给定值 val 的所有节点 删除链表中等于给定值 val 的所有节点 给你一个链表的头节点head和一个整数val&#xff0c;请你删除链表中所有满足Node.valval的节点&#xff0c;并返回新的头节点 输入&#xff1a;head [1,2,6,3,4,5,6], val 6 输出&#xff1a;[…...

opencv hand openpose

使用opencv c 来调用caffemodel 使用opencv 得dnn 模块调用 caffemodel得程序&#xff0c;图片自己输入就行&#xff0c;不做过多得解释&#xff0c;看代码清单。 定义手指关节点 const int POSE_PAIRS[20][2] { {0,1}, {1,2}, {2,3}, {3,4}, // thumb {0,5}, {5,6}, {6,7}…...

flutter fl_chart 柱状图 柱条数量较多 实现左右滑动 固定y轴

一、引入插件 pub.dev&#xff1a;fl_chart package - All Versions 根据项目版本&#xff0c;安装可适配的 fl_chart 版本 二、官网柱状图示例 github参数配置&#xff1a;&#xff08;x轴、y轴、边框、柱条数据、tooltip等&#xff09; https://github.com/imaNNeo/fl_c…...

CAN学习笔记1:计算机网络

计算机网络 1 概述 计算机网络就是把多种形式的计算机用通信线路连接起来&#xff0c;并使其能够互相进行交换的系统。实际上&#xff0c;计算机网络包括了计算机、各种硬件、各种软件、组成网络的体系结构、网络传输介质和网络通信计数。因此&#xff0c;计算机网络是计算机…...

NAND flash的坏块

NAND flash的坏块 1.为什么会出现坏块 由于NAND Flash的工艺不能保证NAND的Memory Array&#xff08;由NAND cell组成的阵列&#xff09;在其生命周期中保持性能的可靠&#xff08;电荷可能由于其他异常原因没有被锁起来。因此&#xff0c;在NAND的生产中及使用过程中会产生坏…...

代码随想录算法训练营第二十五天 | 读PDF复习环节3

读PDF复习环节3 本博客的内容只是做一个大概的记录&#xff0c;整个PDF看下来&#xff0c;内容上是不如代码随想录网站上的文章全面的&#xff0c;并且PDF中有些地方的描述&#xff0c;是很让我疑惑的&#xff0c;在困扰我很久后&#xff0c;无意间发现&#xff0c;其网站上的讲…...

18.Netty源码之ByteBuf 详解

highlight: arduino-light ByteBuf 是 Netty 的数据容器&#xff0c;所有网络通信中字节流的传输都是通过 ByteBuf 完成的。 然而 JDK NIO 包中已经提供了类似的 ByteBuffer 类&#xff0c;为什么 Netty 还要去重复造轮子呢&#xff1f;本节课我会详细地讲解 ByteBuf。 JDK NIO…...

#P0999. [NOIP2008普及组] 排座椅

题目描述 上课的时候总会有一些同学和前后左右的人交头接耳&#xff0c;这是令小学班主任十分头疼的一件事情。不过&#xff0c;班主任小雪发现了一些有趣的现象&#xff0c;当同学们的座次确定下来之后&#xff0c;只有有限的 DD 对同学上课时会交头接耳。 同学们在教室中坐…...

Sentinel 容灾中心的使用

Sentinel 容灾中心的使用 往期文章 Nacos环境搭建Nacos注册中心的使用Nacos配置中心的使用 熔断/限流结果 Jar 生产者 spring-cloud-alibaba&#xff1a;2021.0.4.0 spring-boot&#xff1a;2.6.8 spring-cloud-loadbalancer&#xff1a;3.1.3 sentinel&#xff1a;2021.0…...

深度学习中简易FC和CNN搭建

TensorFlow是由谷歌开发的PyTorch是由Facebook人工智能研究院&#xff08;Facebook AI Research&#xff09;开发的 Torch和cuda版本的对应&#xff0c;手动安装较好 全连接FC(Batch*Num) 搭建建议网络&#xff1a; from torch import nnclass Mnist_NN(nn.Module):def __i…...

【多模态】20、OVR-CNN | 使用 caption 来实现开放词汇目标检测

文章目录 一、背景二、方法2.1 学习 视觉-语义 空间2.2 学习开放词汇目标检测 三、效果 论文&#xff1a;Open-Vocabulary Object Detection Using Captions 代码&#xff1a;https://github.com/alirezazareian/ovr-cnn 出处&#xff1a;CVPR2021 Oral 一、背景 目标检测数…...

网络编程 IO多路复用 [select版] (TCP网络聊天室)

//head.h 头文件 //TcpGrpSer.c 服务器端 //TcpGrpUsr.c 客户端 select函数 功能&#xff1a;阻塞函数&#xff0c;让内核去监测集合中的文件描述符是否准备就绪&#xff0c;若准备就绪则解除阻塞。 原型&#xff1a; #include <sys/select.…...

数学建模学习(7):单目标和多目标规划

优化问题描述 优化 优化算法是指在满足一定条件下,在众多方案中或者参数中最优方案,或者参数值,以使得某个或者多个功能指标达到最优,或使得系统的某些性能指标达到最大值或者最小值 线性规划 线性规划是指目标函数和约束都是线性的情况 [x,fval]linprog(f,A,b,Aeq,Beq,LB,U…...

Element UI如何自定义样式

简介 Element UI是一套非常完善的前端组件库&#xff0c;但是如何个性化定制其中的组件样式呢&#xff1f;今天我们就来聊一聊这个 举例 就拿最常见的按钮el-button来举例&#xff0c;一般来说默认是蓝底白字。效果图如下 可是我们想个性化定制&#xff0c;让他成为粉底红字应…...

protobuf入门实践2

如何在proto中定义一个rpc服务? syntax "proto3"; //声明protobuf的版本package fixbug; //声明了代码所在的包 &#xff08;对于C来说就是namespace)//下面的选项&#xff0c;表示生成service服务类和rpc方法描述&#xff0c; 默认是不生成的 option cc_generi…...

adb shell使用总结

文章目录 日志记录系统概览adb 使用方式 adb命令日志过滤按照告警等级进行过滤按照tag进行过滤根据告警等级和tag进行联合过滤屏蔽系统和其他App干扰&#xff0c;仅仅关注App自身日志 查看“当前页面”Activity文件传输截屏和录屏安装、卸载App启动activity其他 日志记录系统概…...

UG NX二次开发(C++)-Tag的含义、Tag类型与其他的转换

文章目录 1、前言2、Tag号的含义3、tag_t转换为int3、TaggedObject与Tag转换3.1 TaggedObject定义3.2 TaggedObject获取Tag3.3 根据Tag获取TaggedObject4.Tag与double类型的转换1、前言 在UG NX中,每个对象对应一个tag号,C++中,其类型是tag_t,一般是5位或者6位的int数字,…...

Informer 论文学习笔记

论文&#xff1a;《Informer: Beyond Efficient Transformer for Long Sequence Time-Series Forecasting》 代码&#xff1a;https://github.com/zhouhaoyi/Informer2020 地址&#xff1a;https://arxiv.org/abs/2012.07436v3 特点&#xff1a; 实现时间与空间复杂度为 O ( …...

c语言位段知识详解

本篇文章带来位段相关知识详细讲解&#xff01; 如果您觉得文章不错&#xff0c;期待你的一键三连哦&#xff0c;你的鼓励是我创作的动力之源&#xff0c;让我们一起加油&#xff0c;一起奔跑&#xff0c;让我们顶峰相见&#xff01;&#xff01;&#xff01; 目录 一.什么是…...

FFmpeg aresample_swr_opts的解析

ffmpeg option的解析 aresample_swr_opts是AVFilterGraph中的option。 static const AVOption filtergraph_options[] {{ "thread_type", "Allowed thread types", OFFSET(thread_type), AV_OPT_TYPE_FLAGS,{ .i64 AVFILTER_THREAD_SLICE }, 0, INT_MA…...

CAN学习笔记3:STM32 CAN控制器介绍

STM32 CAN控制器 1 概述 STM32 CAN控制器&#xff08;bxCAN&#xff09;&#xff0c;支持CAN 2.0A 和 CAN 2.0B Active版本协议。CAN 2.0A 只能处理标准数据帧且扩展帧的内容会识别错误&#xff0c;而CAN 2.0B Active 可以处理标准数据帧和扩展数据帧。 2 bxCAN 特性 波特率…...

软工导论知识框架(二)结构化的需求分析

本章节涉及很多重要图表的制作&#xff0c;如ER图、数据流图、状态转换图、数据字典的书写等&#xff0c;对初学者来说比较生僻&#xff0c;本贴只介绍基础的轮廓&#xff0c;后面会有单独的帖子详解各图表如何绘制。 一.结构化的软件开发方法&#xff1a;结构化的分析、设计、…...

做网站优化公司/关键词网站

Linux I2C程序框架通常包括以下几个部分: 包含I2C相关头文件:在程序中使用I2C功能时,需要包含Linux内核中的I2C相关头文件。通常包括"i2c-dev.h"和"i2c-io.h"。 打开I2C设备文件:使用Linux的"open()"函数打开I2C设备文件。I2C设备文件通常位…...

微信平台的微网站怎么做/在线培训平台有哪些

Linux下C语言访问Oracle数据库Demo[日期&#xff1a;2011-01-13] 来源&#xff1a;Linux社区 作者&#xff1a;dadlyduke前提条件1. Linux环境已经存在&#xff0c;安装好了Oracle本demo 运行环境本地环境 RedHat LINUX AS 4 ,ORACLE 10G本地数据库sid orcl,ip:127.0.0.1,用户名…...

广州专业网站建设报价/怎么做网络广告

1、一个基类的引用类型变量可以“指向”其子类的对象&#xff1b; 2、一个基类的引用不可以访问其子类对象新增加的成员&#xff08;属性和方法&#xff09;&#xff1b; 3、可以使用引用变量instanceof类名来判断该引用型变量所“指向”的对象是否属于该类或该类的子类&#x…...

大丰区城乡和住房建设局网站/推广怎么推

http://www.cnblogs.com/TankXiao/archive/2013/01/08/2818542.html#code4xxHTTP状态码&#xff0c;我都是现查现用。 我以前记得几个常用的状态码&#xff0c;比如200&#xff0c;302&#xff0c;304&#xff0c;404&#xff0c; 503。 一般来说我也只需要了解这些常用的状态码…...

淄博企业网站建设有限公司/seo托管服务

一、关于Nginx的负载均衡 在服务器集群中&#xff0c;Nginx起到一个代理服务器的角色&#xff08;即反向代理&#xff09;&#xff0c;为了避免单独一个服务器压力过大&#xff0c;将来自用户的请求转发给不同的服务器。 二、Nginx负载均衡策略 负载均衡用于从“upstream”模…...

泉州市建设工程质量监督站网站/关键词优化seo外包

图片替换主要是指将文字替换成图片的技术&#xff0c;即在html语句中使用文字&#xff0c;浏览器显示时用对应的图片显示。其意义在于便于做网站优化&#xff08;SEO&#xff09;&#xff0c;因为文字才是搜索引擎寻找的主要对象。 https://www.cnblogs.com/wmhuang/p/image_ch…...