返回分类信息(带层级)

news2024/11/17 12:36:46

文章目录

    • 1.前端展示分类管理信息
        • 1.目前项目架构
        • 2.启动前后端项目
          • 1.启动mysql容器
          • 2.启动后端 renren-fast
          • 3.启动前端
            • 1.界面
            • 2.用户名密码都是admin
        • 3.创建分类管理菜单
          • 1.菜单管理 -> 新增 -> 新增目录
          • 2.刷新
          • 3.能够新增菜单的原因是前端脚手架与renren-fast后端脚手架通信,这个菜单的表是 sys_menu
          • 4.新增分类管理菜单
          • 5.关于这个分类管理的路由解析
            • 1.由于设置的菜单路由是commodity/category,所以点击这个菜单就会查找前端项目的renren-fast-vue\src\views\modules\commodity\category.vue
            • 2.一般这个菜单路由是对应于后端的一个controller的前缀
            • 3.而后端controller的前缀是根据表来自动生成的
            • 4.总结:代码生成器会根据一个表来生成一个controller,一个前端菜单界面
          • 6.将生成的commodity文件夹下面的两个文件放到前端项目的modules下
          • 7.分析category.vue
            • 1.找到向后端发送请求的位置
            • 2.进入adornUrl
            • 3.进入baseUrl
            • 4.浏览器测试请求一下
            • 5.注销掉这个url,自己写一个
            • 6.启动后端的sunliving-commodity模块
            • 7.再次点击分类管理菜单,发现出现跨域错误
          • 8.跨域问题解决
            • 1.复制renren-fast模块的src/main/java/io/renren/config/CorsConfig.java
            • 2.粘贴到sunliving-commodity模块下
            • 3.重启后端sunliving-commodity
            • 4.再次点击分类管理
    • 2.使用树形菜单展示分类(初级)
        • 1.思路分析
        • 2.首先返回所有记录(没有层级)
          • 1.com/sun/sunliving/commodity/service/CategoryService.java 新增方法
          • 2.com/sun/sunliving/commodity/service/impl/CategoryServiceImpl.java 新增方法和属性
          • 3.com/sun/sunliving/commodity/controller/CategoryController.java 新增方法
          • 4.postman测试 http://localhost:9091/commodity/category/list/tree
        • 3.关于com/sun/common/utils/R.java 工具类的解析
        • 4.com/sun/sunliving/commodity/entity/CategoryEntity.java 新增字段
    • 3.流式计算streamAPI
        • 1.基本介绍
        • 2.环境搭建
        • 3.filter 过滤
          • 1.过滤,只要集合中id大于2的
          • 2.结果
          • 3.分析
        • 4.map 映射
          • 1.映射,将person过滤出的节点的cat属性赋值
          • 2.结果
          • 3.分析
        • 5.sorted 排序
          • 1.排序,按照person节点的id降序排列
          • 2.结果
          • 3.分析
        • 6.常用api
          • 1.limt 过滤前两个节点然后遍历输出
          • 2.count 统计节点个数
    • 4.完成后端返回带层级的记录
        • 1.com/sun/sunliving/commodity/service/impl/CategoryServiceImpl.java 修改listTree方法
        • 2.com/sun/sunliving/commodity/service/impl/CategoryServiceImpl.java 新增方法,获取节点的所有子节点
        • 3.启动项目完成测试
          • 1.启动mysql容器
          • 2.启动前端
          • 3.启动后端renren-fast和sunliving-commodity
          • 4.启动renren-fast报错数据库连接失败
          • 5.由于代码根本没改,所以判断是数据库的问题,查了一下ip原来是101,结果变成100了
          • 6.修改一下连接url即可
          • 7.postman测试 http://localhost:9091/commodity/category/list/tree
          • 8.提交代码
    • 5.前端展示分类信息
        • 1.集成树形控件
          • 1.进入 Element-ui [树形控件](https://element.eleme.cn/#/zh-CN/component/tree)
          • 2.首先将category.vue备份,然后新创建一个
          • 3.将第一行复制到模板位置
          • 4.将其余的复制到script位置
          • 5.打开前端页面查看
        • 2.根据返回数据修改category.vue
        • 3.前端查看效果

1.前端展示分类管理信息

1.目前项目架构

image-20240409194234179

2.启动前后端项目
1.启动mysql容器

image-20240409195159308

2.启动后端 renren-fast

image-20240409195142084

3.启动前端
1.界面

image-20240409195316185

2.用户名密码都是admin
3.创建分类管理菜单
1.菜单管理 -> 新增 -> 新增目录

image-20240409195934957

2.刷新

image-20240409200027158

3.能够新增菜单的原因是前端脚手架与renren-fast后端脚手架通信,这个菜单的表是 sys_menu

image-20240409200813608

4.新增分类管理菜单

image-20240409201722422

image-20240409201745986

5.关于这个分类管理的路由解析
1.由于设置的菜单路由是commodity/category,所以点击这个菜单就会查找前端项目的renren-fast-vue\src\views\modules\commodity\category.vue
2.一般这个菜单路由是对应于后端的一个controller的前缀
3.而后端controller的前缀是根据表来自动生成的

比如表是commodity_category就会生成commodity/category

4.总结:代码生成器会根据一个表来生成一个controller,一个前端菜单界面

image-20240409210710023

6.将生成的commodity文件夹下面的两个文件放到前端项目的modules下

image-20240409213158099

7.分析category.vue
1.找到向后端发送请求的位置

image-20240410112840231

2.进入adornUrl
  • 目前肯定是开发环境,经过全局搜索,发现没有开启代理,所以走的是window.SITE_CONFIG.baseUrl

image-20240410113554678

image-20240410115537994

3.进入baseUrl
  • 可以查看到baseUrl是http://localhost:8080/renren-fast

image-20240410115654166

image-20240410115746397

4.浏览器测试请求一下
  • 完全匹配

image-20240410115832357

image-20240410115857616

5.注销掉这个url,自己写一个
  • 请求sunliving-commodity的服务端口在9091,来展示数据

image-20240410120209410

6.启动后端的sunliving-commodity模块

image-20240410120407070

7.再次点击分类管理菜单,发现出现跨域错误

image-20240410120445112

8.跨域问题解决
1.复制renren-fast模块的src/main/java/io/renren/config/CorsConfig.java

image-20240410132008917

2.粘贴到sunliving-commodity模块下
3.重启后端sunliving-commodity

image-20240410132328344

4.再次点击分类管理

image-20240410132551777

2.使用树形菜单展示分类(初级)

1.思路分析

image-20240410133930594

2.首先返回所有记录(没有层级)
1.com/sun/sunliving/commodity/service/CategoryService.java 新增方法
    /**
     * 查询所有分类及其子分类,以树形结构组装
     *
     * @return
     */
    List<CategoryEntity> listTree();
2.com/sun/sunliving/commodity/service/impl/CategoryServiceImpl.java 新增方法和属性
    @Resource
    private CategoryDao categoryDao; // 注入 CategoryDao的代理对象

    @Override
    public List<CategoryEntity> listTree() {
        // 先查询所有记录
        List<CategoryEntity> categoryEntities = categoryDao.selectList(null);
        return categoryEntities;
    }
3.com/sun/sunliving/commodity/controller/CategoryController.java 新增方法
    /**
     * 查询所有分类及其子分类,以树形结构组装
     *
     * @return
     */
    @RequestMapping("/list/tree")
    public R listTree(){
        return R.ok().put("data", categoryService.listTree());
    }
4.postman测试 http://localhost:9091/commodity/category/list/tree

image-20240410141258328

3.关于com/sun/common/utils/R.java 工具类的解析
/**
 * Copyright (c) 2016-2019 人人开源 All rights reserved.
 * <p>
 * https://www.renren.io
 * <p>
 * 版权所有,侵权必究!
 */

package com.sun.common.utils;

import org.apache.http.HttpStatus;

import java.util.HashMap;
import java.util.Map;

/**
 * 返回数据
 *
 * @author Mark sunlightcs@gmail.com
 */
public class R extends HashMap<String, Object> {
    private static final long serialVersionUID = 1L;

    /**
     * 无参构造方法,初始化 code 为 0,msg 为 success
     */
    public R() {
        put("code", 0);
        put("msg", "success");
    }

    /**
     * 返回一个错误的 R 对象
     * @return 返回一个code:500, msg:未知异常,请联系管理员的R对象
     */
    public static R error() {
        return error(HttpStatus.SC_INTERNAL_SERVER_ERROR, "未知异常,请联系管理员");
    }

    /**
     * 返回一个错误的 R 对象
     * @param msg
     * @return 返回一个code:500, msg:msg的R对象
     */
    public static R error(String msg) {
        return error(HttpStatus.SC_INTERNAL_SERVER_ERROR, msg);
    }

    /**
     * 返回一个错误的 R 对象
     * @param code 错误码
     * @param msg 错误信息
     * @return 返回一个code:code, msg:msg的R对象
     */
    public static R error(int code, String msg) {
        R r = new R();
        r.put("code", code);
        r.put("msg", msg);
        return r;
    }
    /**
	 * 返回一个正确的 R 对象
	 * @param msg 错误信息
	 * @return 返回一个code:code, msg:msg的R对象
	 */
    public static R ok(String msg) {
        R r = new R();
        r.put("msg", msg);
        return r;
    }

    /**
	 * 返回一个正确的 R 对象
	 * @param map
	 * @return 返回一个code:0, msg:success的R对象
	 */
    public static R ok(Map<String, Object> map) {
        R r = new R();
        r.putAll(map);
        return r;
    }

    /**
     * 返回一个正确的 R 对象
     * @return 返回一个code:0, msg:success的R对象
     */
    public static R ok() {
        return new R();
    }

    /**
     * 重写 put 方法,给父类的HashMap来赋值,然后返回自身对象,方便链式调用,
     * 简称父类key-value赋值,return this
     * @param key
     * @param value
     * @return
     */
    @Override
    public R put(String key, Object value) {
        super.put(key, value);
        return this;
    }
}

4.com/sun/sunliving/commodity/entity/CategoryEntity.java 新增字段
  • 新增一个字段,表示每条记录后面都跟着多条子记录
	/**
	 * 每一条记录后都有一些子记录
	 */
	@TableField(exist = false) // 表示数据库中没有这个字段
	private List<CategoryEntity> childrenCategories;

3.流式计算streamAPI

1.基本介绍

image-20240410144813510

2.环境搭建
package com.sun.streamAPI;

import java.util.Arrays;
import java.util.List;

/**
 * Description:
 *
 * @Author sun
 * @Create 2024/4/10 15:27
 * @Version 1.0
 */
public class testStream {
    public static void main(String[] args) {
        // 创建几个person对象
        Person person1 = new Person(1, "张三", 18);
        Person person2 = new Person(2, "李四", 19);
        Person person3 = new Person(3, "王五", 20);
        Person person4 = new Person(4, "赵六", 21);
        Person person5 = new Person(5, "孙七", 22);
        // 将其放到集合中
        List<Person> personList = Arrays.asList(person1, person2, person3, person4, person5);
        // 输出
        for (Person person : personList) {
            System.out.println(person);
        }
    }
}
class Cat {
    private Integer id;
    private String name;
    private String color;

    public Cat(Integer id, String name, String color) {
        this.id = id;
        this.name = name;
        this.color = color;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }

    @Override
    public String toString() {
        return "Cat{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", color='" + color + '\'' +
                '}';
    }
}
class Person {
    private Integer id;
    private String name;
    private Integer age;
    private Cat cat;

    public Person(Integer id, String name, Integer age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public Cat getCat() {
        return cat;
    }

    public void setCat(Cat cat) {
        this.cat = cat;
    }

    @Override
    public String toString() {
        return "Person{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                ", cat=" + cat +
                '}';
    }
}

image-20240410153833731

3.filter 过滤
1.过滤,只要集合中id大于2的
        // 过滤,只要集合中id大于2的节点
        List<Person> collect = personList.stream().filter(person -> {
            return person.getId() > 2;
        }).collect(Collectors.toList());
        System.out.println(collect);
2.结果

image-20240410155317070

3.分析
  • 首先使用personList.stream()将list转换成流对象
  • 然后调用filter()方法进行过滤
  • 使用person -> {过滤条件},其中person为需要过滤的节点
  • 使用return person.getId() > 2 作为过滤条件,意为只要person节点大于2的
  • 最后调用collect(Collectors.toList())方法,将过滤后的结果收集到一个新的集合中
  • 注意:只有过滤操作时原来的list不发生变化
4.map 映射
1.映射,将person过滤出的节点的cat属性赋值
        // 过滤,只要集合中id大于2的节点
        List<Person> collect = personList.stream().filter(person -> {
            return person.getId() > 2;
        }).map(person -> {
            // 映射一下,将person过滤出的节点的cat属性赋值
            // 1.创建cat节点
            Cat cat = new Cat(person.getId() + 100, "cat", "red");
            // 2.为person节点设置cat属性
            person.setCat(cat);
            // 3.返回处理后的person节点
            return person;
        }).collect(Collectors.toList());

        System.out.println("处理后的:list => " + collect);
        System.out.println("处理前的:list => " + personList);
2.结果

image-20240410161447693

3.分析
  • 在过滤的基础上调用map(person -> {映射逻辑})方法对过滤后的person节点进行处理
  • 首先创建了一个Cat节点Cat cat = new Cat(person.getId() + 100, “cat”, “red”)
  • 然后为person节点设置cat属性person.setCat(cat)
  • 最后将映射后的person节点返回return person
  • 继续调用collect(Collectors.toList())将结果收集到一个新的集合中
  • 注意:映射操作后原来的list也会发生变化
5.sorted 排序
1.排序,按照person节点的id降序排列
        // 过滤,只要集合中id大于2的节点
        List<Person> collect = personList.stream().filter(person -> {
            return person.getId() > 2;
        }).map(person -> {
            // 映射一下,将person过滤出的节点的cat属性赋值
            // 1.创建cat节点
            Cat cat = new Cat(person.getId() + 100, "cat", "red");
            // 2.为person节点设置cat属性
            person.setCat(cat);
            // 3.返回处理后的person节点
            return person;
        }).sorted((p1, p2) -> {
            // 按照person节点的id降序排列
            return p2.getId() - p1.getId();
        }).collect(Collectors.toList());

        System.out.println("处理后的:list => " + collect);
        System.out.println("处理前的:list => " + personList);
2.结果

image-20240410163033414

3.分析
  • 调用 sorted((p1, p2) -> {排序方式}) 进行排序操作
  • return p2.getId() - p1.getId() 表示对节点进行降序排列
  • return p1.getId() - p2.getId() 表示对节点进行升序排列
6.常用api
1.limt 过滤前两个节点然后遍历输出
        // 过滤前两个节点然后遍历输出
        personList.stream().limit(2).forEach(person -> {
            System.out.println(person);
        });

2.count 统计节点个数
  • 注意:如果是filter或者是limit后使用的count,那么统计的就是filter或者是limit后的数量
        // 统计集合的节点个数
        long count = personList.stream().count();
        System.out.println("count=" + count);

image-20240410164029384

4.完成后端返回带层级的记录

1.com/sun/sunliving/commodity/service/impl/CategoryServiceImpl.java 修改listTree方法
    @Override
    public List<CategoryEntity> listTree() {
        // 先查询所有记录,放到list中
        List<CategoryEntity> categoryEntities = categoryDao.selectList(null);
        // 使用streamapi + 递归处理分级菜单
        List<CategoryEntity> collect = categoryEntities.stream().filter(categoryEntity -> {
            // 过滤一级菜单
            return categoryEntity.getParentId() == 0;
        }).map(categoryEntity -> {
            // 递归处理分级菜单
            categoryEntity.setChildrenCategories(getChildrenCategories(categoryEntity, categoryEntities));
            return categoryEntity;
        }).sorted((category1, category2) -> {
            // 按照sort字段进行升序排列
            return (category1.getSort() == null ? 0 : category1.getSort()) -
                    (category2.getSort() == null ? 0 : category2.getSort());
        }).collect(Collectors.toList());
        return collect;
    }

2.com/sun/sunliving/commodity/service/impl/CategoryServiceImpl.java 新增方法,获取节点的所有子节点
    // 递归获取一个节点的所有子节点
    public List<CategoryEntity> getChildrenCategories(CategoryEntity root, List<CategoryEntity> all) {
        List<CategoryEntity> collect = all.stream().filter(categoryEntity -> {
            // 过滤出一级节点的所有子节点
            return categoryEntity.getParentId() == root.getId();
        }).map(categoryEntity -> {
            // 递归设置每个子节点的子节点
            categoryEntity.setChildrenCategories(getChildrenCategories(categoryEntity, all));
            return categoryEntity;
        }).sorted((category1, category2) -> {
            // 按照sort字段进行升序排列
            return (category1.getSort() == null ? 0 : category1.getSort()) -
                    (category2.getSort() == null ? 0 : category2.getSort());
        }).collect(Collectors.toList());
        return collect;
    }
3.启动项目完成测试
1.启动mysql容器

image-20240410210122491

2.启动前端
3.启动后端renren-fast和sunliving-commodity
4.启动renren-fast报错数据库连接失败

image-20240410210322627

5.由于代码根本没改,所以判断是数据库的问题,查了一下ip原来是101,结果变成100了

image-20240410210431683

6.修改一下连接url即可
7.postman测试 http://localhost:9091/commodity/category/list/tree

image-20240410210845276

8.提交代码

image-20240410215203011

5.前端展示分类信息

1.集成树形控件
1.进入 Element-ui 树形控件

image-20240410212840796

2.首先将category.vue备份,然后新创建一个

image-20240410213049292

3.将第一行复制到模板位置

image-20240410213127929

image-20240410213146805

4.将其余的复制到script位置

image-20240410213226022

5.打开前端页面查看

image-20240410213808569

2.根据返回数据修改category.vue
<template>
  <el-tree :data="data" :props="defaultProps" @node-click="handleNodeClick"></el-tree>
</template>

<script>
export default {
  data() {
    return {
      data: '',
      defaultProps: {
        children: 'childrenCategories',
        label: 'name'
      }
    };
  },
  methods: {
    handleNodeClick(data) {
      console.log(data);
    },
    // 获取分类列表(带层级)
    getCategories() {
      this.$http({
        url: 'http://localhost:9091/commodity/category/list/tree',
        method: 'get'
      }).then(({data}) => { // 解构了data
        this.data = data.data;
      })
    }
  },
  created() { // 生命周期钩子,初始化时调用
    this.getCategories()
  }
};
</script>

<style scoped>

</style>

3.前端查看效果

image-20240411102607802

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

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

相关文章

3D 生成重建010-SyncDreamer从单视图生成一致性的多视图

3D 生成重建010-SyncDreamer从单视图生成一致性的多视图 文章目录 0论文工作1论文方法2 效果 0论文工作 在zero123中&#xff0c;首先探索了给2d图像扩散模型注3d空间感知能力。可以将原图输入模型&#xff0c;通过相机位置的相对偏移生成对应的新视图。 这篇论文就是在zero1…

Python大数据分析——Logistic回归模型

Logistic回归模型 概念理论分析模型评估混淆矩阵ROC曲线KS曲线 函数示例 概念 之前的回归的变量是连续的数值变量&#xff1b;而Logistics回归是二元离散值&#xff0c;用来解决二分类问题。 理论分析 上式中的hβ(X)也被称为Loqistic回归模型&#xff0c;它是将线性回归模型…

win平台c语言引入开源库的问题与解决,以引入cJSON库为例

目录 遇到的问题 开源依赖库引入的问题 问题的解决 生成dll文件 方式一 方式二 在VsCode中如何使用开源库 文件放置位置 配置文件进行配置 引入头文件 结束 许久不写博客&#xff0c;五一还在加班&#xff0c;就浅浅写一篇吧。 最近除了做物联网平台,还对网关二次开…

HCIP-Datacom-ARST必选题库_OSPF【道题】

某工程师利用2台路由器进行IPv6测试&#xff0c;他想要通过运行OSPFv3实现IPv6网络的互联互通。关于R1需要进行的OSPPv3相关配置&#xff0c;正确的有? [R1] router id 10.1.1.1A [R1-Giqabi tEthernet0/0/1] ospfv3 1 area 0 [R1-ospfv3-11 router-id 10.1.1.1 [R1-ospfv3…

Linux-线程概念

1. 线程概念 线程&#xff1a;轻量级进程&#xff0c;在进程内部执行&#xff0c;是OS调度的基本单位&#xff1b;进程内部线程共用同一个地址空间&#xff0c;同一个页表&#xff0c;以及内存中的代码和数据&#xff0c;这些资源对于线程来说都是共享的资源 进程&#xff1a;…

五一 大项目--docker-compose编排lnmp完成wordpress

Docker 中的 Nginx 服务为什么要启用 HTTPS 一安装容器 1 安装docker-20.10.17 2 安装所需的依赖 sudo yum install -y yum-utils device-mapper-persistent-data lvm23 添加Docker官方仓库 sudo yum-config-manager --add-repo https://download.docker.com/linux/centos…

如何将手写数学公式识别?识别工具在这里

如何将手写数学公式识别&#xff1f;在日常学习中&#xff0c;将手写数学公式识别出来可以极大地提高我们的学习效率。通过这一技术&#xff0c;我们能够快速、准确地将手写公式转化为可编辑的文本&#xff0c;省去了繁琐的输入过程。这不仅节约了时间&#xff0c;还减少了因输…

【论文阅读笔记】jTrans(ISSTA 22)

个人博客地址 [ISSTA 22] jTrans&#xff08;个人阅读笔记&#xff09; 论文&#xff1a;《jTrans: Jump-Aware Transformer for Binary Code Similarity》 仓库&#xff1a;https://github.com/vul337/jTrans 提出的问题 二进制代码相似性检测&#xff08;BCSD&#xff0…

OpenCV 入门(六) —— Android 下的人脸识别

OpenCV 入门系列&#xff1a; OpenCV 入门&#xff08;一&#xff09;—— OpenCV 基础 OpenCV 入门&#xff08;二&#xff09;—— 车牌定位 OpenCV 入门&#xff08;三&#xff09;—— 车牌筛选 OpenCV 入门&#xff08;四&#xff09;—— 车牌号识别 OpenCV 入门&#xf…

【数据分析】 JupyterNotebook安装及使用简介

各位大佬好 &#xff0c;这里是阿川的博客 &#xff0c; 祝您变得更强 个人主页&#xff1a;在线OJ的阿川 大佬的支持和鼓励&#xff0c;将是我成长路上最大的动力 阿川水平有限&#xff0c;如有错误&#xff0c;欢迎大佬指正 在数据分析中&#xff0c;一般用Pycharm编辑代…

【软考】模拟考卷错题本2024-05-11

1 设计模式- 适配器模式 基本上上述的图解已经涵盖了绝大多数主流的设计模式和其特点。理解记忆下即可&#xff0c;这里对下午的考题也有帮助的。 2 计算机组成原理 cpu 访问速度 这个真的是憨憨咯~看到内存就选内存&#xff0c;题目都没审好。这里的速度比cpu内部的要比外部的…

C++入门系列-析构函数

&#x1f308;个人主页&#xff1a;羽晨同学 &#x1f4ab;个人格言:“成为自己未来的主人~” 析构函数 概念 析构函数&#xff0c;与构造函数功能相反&#xff0c;析构函数不是完成对对象本身的销毁&#xff0c;局部对象销毁工作是由编译器完成的&#xff0c;而对象在销…

【Linux】-网络请求和下载、端口[6]

目录 一、网络请求和下载 1、ping命令 2、wget命令 3、curl命令 二、端口 1、虚拟端口 2、查看端口占用 一、网络请求和下载 1、ping命令 可以通过ping命令&#xff0c;检查指定的网络服务器是否可联通状态 语法&#xff1a;ping [ -c num ] ip或主机名 选项&…

怎么做自己的网站

现如今&#xff0c;拥有自己的网站已经成为现代生活中的一种标志。无论是个人博客、在线商店还是企业官网&#xff0c;都可以通过拥有一个网站来展示自己的个性、产品或服务。在这篇文章中&#xff0c;我将分享如何创建和管理自己的网站。 首先&#xff0c;你需要选择一个合适的…

OGG几何内核开发-BRepAlgoAPI_Fuse与BRep_Builder.MakeCompound比较

最近在与同事讨论BRepAlgoAPI_Fuse与BRep_Builder.MakeCompound有什么区别。 一、从直觉上来说&#xff0c;BRepAlgoAPI_Fuse会对两个实体相交处理&#xff0c;相交的部分会重新的生成相关的曲面。而BRep_Builder.MakeCompound仅仅是把两个实体组合成一个新的实体&#xff0c;…

30%参数达到92%的表现,大模型稀疏化方法显神通

当我还是一位懵懂少年的时候&#xff0c;总认为“任务难度”&#xff0c;“参数规模”和“准确率”是一个不可兼顾的三角&#xff0c;比如当我想要挑战更难的任务&#xff0c;追求获得更高的准确率&#xff0c;那必然就要在更大的模型参数量上进行妥协。然而&#xff0c;真的是…

使用 Docker 部署 VS Code in The Browser

1&#xff09;介绍 GitHub&#xff1a;https://github.com/coder/code-server 在日常学习工作中&#xff0c;Vscode 已成为我们首选的代码编辑器。然而&#xff0c;其局限性在于当我们从家到公司移动时&#xff0c;难以保持连续的编码体验。针对这一痛点&#xff0c;虽然市面上…

OpenCV的视频 I/O 的标志(77)

返回:OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 上一篇:OpenCV 下一篇 :OpenCV系列文章目录&#xff08;持续更新中......&#xff09; ​ 枚举 枚举 cv::VideoCaptureAPIs { cv::CAP_ANY 0, cv::CAP_VFW 200, cv::CAP_V4L 200, cv::CAP_V4L2 …

基于51单片机的二氧化碳检测及调节系统仿真

基于51单片机的二氧化碳检测及调节系统 &#xff08;仿真&#xff0b;程序&#xff09; 功能介绍 具体功能&#xff1a; 1.二氧化碳传感器测得二氧化碳数据后经过单片机处理。 2.LCD1602实时显示&#xff0c;第一行显示测得的浓度值&#xff0c;第二行显示报警阈值。 3.测…

【gpedit.msc】组策略编辑器的安装,针对windows家庭版,没有此功能

创建一个记事本文件然后放入以下内容 echo offpushd "%~dp0"dir /b %systemroot%\Windows\servicing\Packages\Microsoft-Windows-GroupPolicy-ClientExtensions-Package~3*.mum >gp.txtdir /b %systemroot%\servicing\Packages\Microsoft-Windows-GroupPolicy-…