完成商品属性分组和商品属性关联维护

文章目录

    • 1.前端页面搭建
        • 1.复制attrgroup-attr-relation.vue到src/views/modules/commodity下
        • 2.加入超链接和引入组件 src/views/modules/commodity/attrgroup.vue
          • 1.加入超链接
          • 2.引入组件
        • 3.数据池加入变量
        • 4.使用组件
          • 1.引用组件
          • 2.添加方法
          • 3.测试,点击关联,会输出当前的id
        • 5.修改请求,将attrgroup-attr-relation.vue的请求修改成环境变量 + 资源路径的形式
        • 6.解析
          • 1.点击关联按钮,会将这行的id传到relationAttrHandle方法中
          • 2.这个方法,首先显示对话框,然后调用组件的init方法
          • 3.init方法向后端发送请求,返回当前属性组已经关联的商品属性(基本属性)的数据
    • 2.第六次部署
        • 1.后端部署
          • 1.由于只修改了sunliving-commodity模块,所以不需要区分多环境
          • 2.将sunliving-commodity模块设置成prod
          • 3.maven打包
          • 4.target目录测试jar包执行
          • 5.ctrl + c 退出,部署到服务器
        • 2.前端部署
          • 1.由于所有请求都是环境变量 + 资源路径,所以不需区分多环境
          • 2.根目录npm run build
          • 3.nvm切换到node16,dist目录下执行serve,模拟线上环境
          • 4.验证码没出来503服务不可用,原因是Nacos将这些服务下线了,全部上线即可,然后重启前端
          • 5.测试无误
          • 6.将dist目录下的文件部署到服务器
          • 7.测试无误
    • 2.点击关联按钮,可以看到该组关联的所有商品属性
        • 1.后端 sunliving-commodity 模块
          • 1.分析资源路径写法
          • 2.AttrService.java 新增方法 根据属性组id获取关联的属性
          • 3.AttrServiceImpl.java 实现方法
          • 4.AttrgroupController.java 根据路径参数传来的组id得到关联的所有属性信息
          • 5.测试
        • 2.前端 attrgroup-attr-relation.vue
          • 1.接受数据
          • 2.测试
    • 3.删除某个商品属性分组关联的商品属性,支持批量删除
        • 1.梳理表之间的关系
        • 2.后端 sunliving-commodity模块
          • 1.AttrAttrgroupRelationDao.java 新增批量删除方法
          • 2.AttrAttrgroupRelationDao.xml 实现批量删除
          • 3.AttrService.java 新增批量删除方法
          • 4.AttrServiceImpl.java 实现批量删除
        • 2.分析前端请求
          • 1.AttrgroupController.java 编写接口
          • 2.后端测试
          • 3.前端测试
    • 4.查询某个商品的属性分组可以关联的商品属性(支持分页)
        • 思路分析图
        • 1.分析前端请求 attrgroup-attr-relation.vue
          • 1.点击新建关联
          • 2.调用getDataList方法
          • 3.发送请求,携带attrGroupId
        • 2.后端 sunliving-commodity 模块(先不分页)
          • 1.AttrService.java 添加方法 根据属性组id获取可以关联的属性
          • 2.AttrServiceImpl.java 实现方法
          • 3.AttrgroupController.java 编写接口
          • 4.测试并分析结果
            • 1.请求携带属性组参数为1,此时返回了一个可关联的属性
            • 2.首先从属性组表中查找id为1的categoryId为301
            • 3.然后从属性表中查找是基本属性的,并且categoryId为301的发现有12,14,21符合要求
            • 4.最后从关联表中查询是否属性id已经存在,发现12,21已经被关联,所以最终只返回id为14的属性
        • 3.后端 sunliving-commodity 模块(支持分页,包含分页模板!!!)
          • 1.AttrService.java 添加方法 根据属性组id获取可以关联的属性,并且分页
          • 2.AttrServiceImpl.java 实现方法(也相当于分页模板)
          • 3.分页结果工具类 PageUtils
          • 4.测试
    • 5.新建属性和属性组之间的关联(支持批量添加)
        • 1.分析前端请求 attrgroup-attr-relation.vue
          • 1.点击确认新增
          • 2.调用submitAddRealtion方法
          • 3.可以得到新增的基本属性的数据
          • 4.可以看到,将attrId和attrGroupId组成的js对象数组传递给了后端
        • 2.后端 sunliving-commodity 模块
          • 1.直接写controller即可
          • 2.测试

1.前端页面搭建

1.复制attrgroup-attr-relation.vue到src/views/modules/commodity下

image-20240420191436885

2.加入超链接和引入组件 src/views/modules/commodity/attrgroup.vue
1.加入超链接
<el-button type="text" size="small" @click="relationAttrHandle(scope.row.id)">关联</el-button>

image-20240420191725103

2.引入组件

image-20240420191824864

image-20240420191924712

3.数据池加入变量

image-20240420192031989

4.使用组件
1.引用组件

image-20240420192335584

2.添加方法
    //处理分组与属性的关联
    relationAttrHandle(groupId) {
      this.relationVisible = true;
      console.log(groupId)
      this.$nextTick(() => {
        this.$refs.relationUpdate.init(groupId);
      });
    }
3.测试,点击关联,会输出当前的id

image-20240420192637334

5.修改请求,将attrgroup-attr-relation.vue的请求修改成环境变量 + 资源路径的形式

image-20240420193149940

6.解析
1.点击关联按钮,会将这行的id传到relationAttrHandle方法中

image-20240420193344565

2.这个方法,首先显示对话框,然后调用组件的init方法

image-20240420193457781

image-20240420193444289

3.init方法向后端发送请求,返回当前属性组已经关联的商品属性(基本属性)的数据

image-20240420193605313

2.第六次部署

1.后端部署
1.由于只修改了sunliving-commodity模块,所以不需要区分多环境
2.将sunliving-commodity模块设置成prod

image-20240420221008545

3.maven打包

image-20240420221121004

4.target目录测试jar包执行

image-20240420221435283

5.ctrl + c 退出,部署到服务器

image-20240420222026383

2.前端部署
1.由于所有请求都是环境变量 + 资源路径,所以不需区分多环境
2.根目录npm run build

image-20240420222320588

3.nvm切换到node16,dist目录下执行serve,模拟线上环境

image-20240420222417756

4.验证码没出来503服务不可用,原因是Nacos将这些服务下线了,全部上线即可,然后重启前端
5.测试无误

image-20240420223140403

6.将dist目录下的文件部署到服务器
7.测试无误

image-20240420223800354

2.点击关联按钮,可以看到该组关联的所有商品属性

1.后端 sunliving-commodity 模块
1.分析资源路径写法

image-20240420195227841

2.AttrService.java 新增方法 根据属性组id获取关联的属性
    /**
     * 根据属性组id获取关联的属性
     * @param attrgroupId
     * @return
     */
    List<AttrEntity> getRelationAttr(Long attrgroupId);
3.AttrServiceImpl.java 实现方法
    @Override
    public List<AttrEntity> getRelationAttr(Long attrgroupId) {
        // 根据attrgroupId查询出所有的关联属性
        List<AttrAttrgroupRelationEntity> relationEntities = attrAttrgroupRelationService.list(new QueryWrapper<AttrAttrgroupRelationEntity>()
                .eq("attr_group_id", attrgroupId));
        // 如果relationEntities为空,直接返回null
        if (relationEntities.isEmpty()) {
            return null;
        }
        // 使用stream api获取所有的attrId
        List<Long> attrIds = relationEntities.stream().map(AttrAttrgroupRelationEntity::getAttrId).collect(Collectors.toList());
        // 根据attrIds查询出所有的attr
        return attrDao.selectBatchIds(attrIds);
    }
4.AttrgroupController.java 根据路径参数传来的组id得到关联的所有属性信息
    /**
     * 获取属性分组关联的属性
     */
    @RequestMapping("/{attrGroupId}/attr/relation")
    // @RequiresPermissions("commodity:attrgroup:list")
    public R attrRelation(@PathVariable("attrGroupId") Long attrGroupId) {
        // 根据attrGroupId查询关联的属性
        List<AttrEntity> relationAttr = attrService.getRelationAttr(attrGroupId);
        return R.ok().put("data", relationAttr);
    }
5.测试

image-20240421103920387

2.前端 attrgroup-attr-relation.vue
1.接受数据

image-20240421104247043

2.测试

image-20240421104308822

3.删除某个商品属性分组关联的商品属性,支持批量删除

1.梳理表之间的关系

image-20240421105334938

2.后端 sunliving-commodity模块
1.AttrAttrgroupRelationDao.java 新增批量删除方法
	// 批量删除关联关系
    void deleteBatchRelation(@Param("entities") List<AttrAttrgroupRelationEntity> entities);
2.AttrAttrgroupRelationDao.xml 实现批量删除
    <delete id="deleteBatchRelation">
        delete
        from `commodity_attr_attrgroup_relation`
        where
        <foreach collection="entities" item="item" separator="or">
            (attr_id = #{item.attrId} and attr_group_id = #{item.attrGroupId})
        </foreach>
    </delete>
3.AttrService.java 新增批量删除方法
    /**
     * 批量删除关联关系
     * @param entities
     */
    void deleteRelation(List<AttrAttrgroupRelationEntity> entities);
4.AttrServiceImpl.java 实现批量删除
    @Override
    public void deleteRelation(List<AttrAttrgroupRelationEntity> entities) {
        // 批量删除关联关系,这里的entities只有attrId和attrGroupId
        attrAttrgroupRelationDao.deleteBatchRelation(entities);
    }
2.分析前端请求
  • 可以看到传入的是AttrAttrgroupRelationEntity类型的数组

image-20240421113329188

1.AttrgroupController.java 编写接口
    /**
     * 移除关联
     * @param entities
     * @return
     */
    @RequestMapping("/attr/relation/delete")
    public R deleteRelation(@RequestBody AttrAttrgroupRelationEntity[] entities) {
        attrService.deleteRelation(Arrays.asList(entities));
        return R.ok();
    }
2.后端测试

image-20240421113717396

image-20240421113725441

image-20240421113735608

3.前端测试

image-20240421115951190

4.查询某个商品的属性分组可以关联的商品属性(支持分页)

思路分析图

image-20240421143850042

1.分析前端请求 attrgroup-attr-relation.vue
1.点击新建关联

image-20240421140022831

2.调用getDataList方法

image-20240421140032641

3.发送请求,携带attrGroupId

image-20240421140116761

2.后端 sunliving-commodity 模块(先不分页)
1.AttrService.java 添加方法 根据属性组id获取可以关联的属性
    /**
     * 根据属性组id获取可以关联的属性
     * @param attrGroupId
     * @return
     */
    List<AttrEntity> getAttrRelation(Long attrGroupId);
2.AttrServiceImpl.java 实现方法
    @Override
    public List<AttrEntity> getAttrRelation(Long attrGroupId) {
        // 1. 根据属性组id,在属性组表中查询出对应的categoryId
        Long categoryId = attrgroupDao.selectById(attrGroupId).getCategoryId();
        // 2.根据这个id去属性表中查询出所有的属性
        List<AttrEntity> allAttr = attrDao.selectList(new QueryWrapper<AttrEntity>().eq("category_id", categoryId));
        // 3.查询关联表的所有数据,不加条件
        List<AttrAttrgroupRelationEntity> relationEntities = attrAttrgroupRelationService.list();
        // 4.获取所有的attrId
        List<Long> attrIds = relationEntities.stream().
                map(AttrAttrgroupRelationEntity::getAttrId).collect(Collectors.toList());
        // 5.过滤出没有关联的属性,并且attrType为1
        List<AttrEntity> noRelationAttr = allAttr.stream().filter(attrEntity -> {
            return !attrIds.contains(attrEntity.getAttrId()) && attrEntity.getAttrType() == 1;
        }).collect(Collectors.toList());

        return noRelationAttr;
    }
3.AttrgroupController.java 编写接口
    /**
     * 根据属性组id获取可以关联的属性
     *
     * @param attrGroupId
     * @return
     */
    @RequestMapping("{attrGroupId}/noattr/relation")
    public R noattrRelation(@PathVariable("attrGroupId") Long attrGroupId) {
        List<AttrEntity> attrRelation = attrService.getAttrRelation(attrGroupId);
        return R.ok().put("page", attrRelation);
    }
4.测试并分析结果
1.请求携带属性组参数为1,此时返回了一个可关联的属性

image-20240421143748163

2.首先从属性组表中查找id为1的categoryId为301

image-20240421144053620

3.然后从属性表中查找是基本属性的,并且categoryId为301的发现有12,14,21符合要求

image-20240421144153571

4.最后从关联表中查询是否属性id已经存在,发现12,21已经被关联,所以最终只返回id为14的属性

image-20240421144240296

3.后端 sunliving-commodity 模块(支持分页,包含分页模板!!!)
1.AttrService.java 添加方法 根据属性组id获取可以关联的属性,并且分页
    /**
     * 根据属性组id获取可以关联的属性,并且分页
     * @param params
     * @param attrGroupId
     * @return
     */
    PageUtils  queryPageAttrRelation(Map<String, Object> params, Long attrGroupId);
2.AttrServiceImpl.java 实现方法(也相当于分页模板)
  • 前端传入的参数一般为
    • key:查询的key
    • page:当前页
    • limit:页面大小
  • 进行分页查询的步骤
    • 获取关键字和分页参数
    • 使用QueryWrapper构建查询条件
    • 创建Page对象,传入page和limit
    • 对Page对象进行处理
    • 处理后,使用PageUtils封装返回结果
    @Override
    public PageUtils queryPageAttrRelation(Map<String, Object> params, Long attrGroupId) {
        // 1.获取关键字和分页参数
        String key = (String) params.get("key");
        int currentPage = Integer.parseInt(params.getOrDefault("page", "1").toString());
        int pageSize = Integer.parseInt(params.getOrDefault("limit", "10").toString());

        // 2.构建基本查询条件,根据key进行查询
        QueryWrapper<AttrEntity> queryWrapper = new QueryWrapper<>();
        if (StringUtils.isNotBlank(key)) {
            queryWrapper.and(wrapper ->
                    wrapper.eq("attr_id", key).or().like("attr_name", key)
            );
        }

        // 3.获取已关联的属性ID
        Set<Long> relatedAttrIds = attrAttrgroupRelationService.list().stream()
                .map(AttrAttrgroupRelationEntity::getAttrId)
                .collect(Collectors.toSet());

        // 4.排除已关联的属性ID
        if (!relatedAttrIds.isEmpty()) {
            queryWrapper.notIn("attr_id", relatedAttrIds);
        }

        // 5.附加查询条件,根据attrGroupId查询出对应的categoryId
        if (attrGroupId != null) {
            Long categoryId = attrgroupDao.selectById(attrGroupId).getCategoryId();
            if (categoryId != null) {
                queryWrapper.eq("category_id", categoryId);
                queryWrapper.eq("attr_type", 1);  // 只包括类型为1的属性
            }
        }

        // 6.执行分页查询
        Page<AttrEntity> page = new Page<>(currentPage, pageSize);
        IPage<AttrEntity> attrPage = attrDao.selectPage(page, queryWrapper);

        // 7.使用PageUtils封装返回结果
        return new PageUtils(attrPage);
    }
3.分页结果工具类 PageUtils
/**
 * 分页工具类
 *
 * @author Mark sunlightcs@gmail.com
 */
public class PageUtils implements Serializable {
	private static final long serialVersionUID = 1L;
	/**
	 * 总记录数
	 */
	private int totalCount;
	/**
	 * 每页记录数
	 */
	private int pageSize;
	/**
	 * 总页数
	 */
	private int totalPage;
	/**
	 * 当前页数
	 */
	private int currPage;
	/**
	 * 列表数据
	 */
	private List<?> list;
	
	/**
	 * 分页
	 * @param list        列表数据
	 * @param totalCount  总记录数
	 * @param pageSize    每页记录数
	 * @param currPage    当前页数
	 */
	public PageUtils(List<?> list, int totalCount, int pageSize, int currPage) {
		this.list = list;
		this.totalCount = totalCount;
		this.pageSize = pageSize;
		this.currPage = currPage;
		this.totalPage = (int)Math.ceil((double)totalCount/pageSize);
	}

	/**
	 * 分页
	 */
	public PageUtils(IPage<?> page) {
		this.list = page.getRecords();
		this.totalCount = (int)page.getTotal();
		this.pageSize = (int)page.getSize();
		this.currPage = (int)page.getCurrent();
		this.totalPage = (int)page.getPages();
	}

	public int getTotalCount() {
		return totalCount;
	}

	public void setTotalCount(int totalCount) {
		this.totalCount = totalCount;
	}

	public int getPageSize() {
		return pageSize;
	}

	public void setPageSize(int pageSize) {
		this.pageSize = pageSize;
	}

	public int getTotalPage() {
		return totalPage;
	}

	public void setTotalPage(int totalPage) {
		this.totalPage = totalPage;
	}

	public int getCurrPage() {
		return currPage;
	}

	public void setCurrPage(int currPage) {
		this.currPage = currPage;
	}

	public List<?> getList() {
		return list;
	}

	public void setList(List<?> list) {
		this.list = list;
	}
	
}

4.测试

image-20240421163852974

image-20240421185521692

5.新建属性和属性组之间的关联(支持批量添加)

1.分析前端请求 attrgroup-attr-relation.vue
1.点击确认新增

image-20240421190533084

2.调用submitAddRealtion方法

image-20240421190711525

3.可以得到新增的基本属性的数据

image-20240421190704860

4.可以看到,将attrId和attrGroupId组成的js对象数组传递给了后端

image-20240421190908128

2.后端 sunliving-commodity 模块
1.直接写controller即可
    /**
     * 批量增加关联
     *
     * @param entities
     * @return
     */
    @RequestMapping("/attr/relation")
    public R relation(@RequestBody AttrAttrgroupRelationEntity[] entities) {
        attrAttrgroupRelationService.saveBatch(Arrays.asList(entities));
        return R.ok();
    }
2.测试

image-20240421191825365

image-20240421191831778

image-20240421191836262

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【笔记】Qt 按钮控件介绍(QPushButton,QCheckBox,QToolButton)

文章目录 QAbstractButton 抽象类(父类)QAbstractButton 类中的属性QAbstractButton 类中的函数QAbstractButton 类中的信号QAbstractButton 类中的槽 QPushButton 类(标准按钮)QPushButton 类中的属性QPushButton 类中的函数、槽 QCheckBox 类(复选按钮)QCheckBox 类的属性QCh…

【全部更新完毕】2024电工杯A题数学建模详细思路代码文章分享

A 题&#xff1a;园区微电网风光储协调优化配置 摘要 在全球范围内&#xff0c;气候变化和环境污染问题日益严重&#xff0c;减少碳排放和实现可持续发展成为各国的共同目标。新能源&#xff0c;尤其是风能和光伏发电&#xff0c;因其清洁、可再生的特性&#xff0c;正在全球范…

国产化服务器设计 原理图:905-多路PCIe的阵列计算全国产化服务器

多路PCIe的阵列计算全国产化服务器 多路PCIe的阵列计算全国产化服务器以国产化处理器&#xff08;海光、飞腾ARM、算能RSIC V&#xff09;为主板&#xff0c;扩展6-8路PCIe3.0X4计算卡&#xff1b; 计算卡为全国产化的AI处理卡&#xff08;瑞星微ARM&#xff0c;算能AI&#x…

C++语言学习(五)—— 类与对象(一)

目录 一、类类型的定义 二、类成员的访问控制 2.1 什么是"类内"和"类外" 2.2 对于访问控制属性的说明 三、类类型的使用 3.1 进行抽象 3.2 声明类 3.3 实现类 3.4 使用类 四、构造函数的引入 五、析构函数的引入 六、重载构造函数的引入 6.1 …

权限维持--windows

隐藏文件 ①文件属性隐藏 如何排查&#xff1a; 使用dir命令无法看到有特殊属性的文件需使用/a ②真隐藏 相当于给原本的文件增加系统文件属性、存档文件属性、只读文集属性、隐藏文件属性 如何排查&#xff1a; 取消受保护的操作系统文件 ③利用ADS隐藏 使用数据流 echo &…

我把PostgreSQL最核心的插件撸干净了!!!

作者&#xff1a;IT邦德 中国DBA联盟(ACDU)成员&#xff0c;10余年DBA工作经验&#xff0c; Oracle、PostgreSQL ACE CSDN博客专家及B站知名UP主&#xff0c;全网粉丝10万 擅长主流Oracle、MySQL、PG、高斯及Greenplum备份恢复&#xff0c; 安装迁移&#xff0c;性能优化、故障…

USB抓包工具:bushound安装及使用

一、环境搭建 下载busbound6.01安装包&#xff0c;安装完成&#xff0c;重启电脑。 二、工具配置 按照下图配置工具&#xff1a; 使能自动识别新设备 2. 设置抓取数据的容量 三、抓包 回到capture选项卡&#xff0c;在页面的右下角有个run的按钮&#xff0c;点击使能&…

Multi-Attention Transformer for Naturalistic Driving Action Recognition

标题&#xff1a;用于自然驾驶行为识别的多注意力Transformer 源文链接&#xff1a;https://openaccess.thecvf.com/content/CVPR2023W/AICity/papers/Dong_Multi-Attention_Transformer_for_Naturalistic_Driving_Action_Recognition_CVPRW_2023_paper.pdfhttps://openaccess…

快速幂算法6

eg: n10&#xff0c;10%20, 10/25, 5%21,4* 5/22, 2%20,4*256 0/20, 1024 递归算法 #include<iostream> using namespace std; long long quick_pow(int b,int e) {if(b0)return 0;if(e0)return 1;if(e%20){int tempquick_pow(b,e/2);return temp*temp;}if(e%2!0)…

MATLAB modem.qammod和randint函数

实在是受不了MATLAB改函数了 试图找到如何修改代码&#xff0c;诶嘿&#xff0c;失败了&#xff0c;那我就自己写一下吧 randint函数 %% P pre-MMSE clear all;clc % 参数设置 N_frame 100; %帧数 N_packet 1000; % 分组数 b 2; % 每符号比特数 M 2 ^ b; % 调制阶数 mod…

Flutter笔记:Widgets Easier组件库-使用隐私守卫

Flutter笔记 Widgets Easier组件库&#xff1a;使用隐私守卫 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https:…

local dimming(局部调光)介绍

文章目录 1. 什么是local dimming2. 工作原理3. 类型4. 优点5. 缺点和局限7. 技术发展趋势 1. 什么是local dimming local dimming&#xff08;局部调光&#xff09;是电视和显示器中用于提升画面对比度和画质的背光技术。其基本原理是将背光源&#xff08;通常是LED&#xff…

【3dmax笔记】001:3dmax2020下载及安装教程

一、3dmax2020安装教程 1、双击运行exe文件&#xff0c;提取安装程序到指定文件夹&#xff1b; 2、提取完成&#xff0c;安装程序启动&#xff0c;点击安装 3、点击接受许可协议&#xff1b; 4、设置安装位置&#xff0c;点击安装&#xff1b; 5、等待产品安装&#xff1b; 6、…

C++:vector基础讲解

hello&#xff0c;各位小伙伴&#xff0c;本篇文章跟大家一起学习《C&#xff1a;vector基础讲解》&#xff0c;感谢大家对我上一篇的支持&#xff0c;如有什么问题&#xff0c;还请多多指教 &#xff01; 如果本篇文章对你有帮助&#xff0c;还请各位点点赞&#xff01;&#…

【C++】牛客——OR64 求和

✨题目链接&#xff1a; OR64 求和 ✨题目描述 输入两个整数 n 和 m&#xff0c;从数列1&#xff0c;2&#xff0c;3.......n 中随意取几个数,使其和等于 m ,要求将其中所有的可能组合列出来 ✨输入描述: 每个测试输入包含2个整数,n和m ✨输出描述: 按每个组合的字典序排列…

如何使用 CapSolver 扩展找到 Google reCAPTCHA 站点密钥?

网站安全性在当今至关重要&#xff0c;Google reCAPTCHA 作为防止垃圾邮件和滥用行为的前线防御系统起着关键作用。reCAPTCHA 站点密钥是确保网站交互由人类驱动的唯一标识符。了解如何找到这个密钥对于网站管理员和开发人员来说至关重要。 什么是 reCAPTCHA 站点密钥 reCAPT…

做抖音小店需要清楚的5个核心点!

大家好&#xff0c;我是喷火龙。 不管你是在做抖音小店&#xff0c;还是在做其他的电商平台&#xff0c;如果已经做了一段时间了&#xff0c;但还是没有拿到什么结果&#xff0c;我所指的结果不是什么大结果&#xff0c;而是连温饱都解决不了&#xff0c;甚至说还在亏钱。 有…

翻转列表-力扣

题目 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[5,4,3,2,1]示例 2&#xff1a; 输入&#xff1a;head [1,2] 输出&#xff1a;[2,1]示例 3&#xff1a; …

鸿蒙开发配置官方地图

一共需要配置 p12 p7b cer csr 四个文件 p12文件配置 注意创建文件名必须是.p12 到AGC创建项目 AppGallery Connect 添加自己的项目名称 我没有开启 暂时不需要 看个人需求 下载刚创建的cer证书 回到我的项目中 点击刚创建的项目 点击这里 四个文件齐全了 "metadata&qu…

【数据结构】哈夫曼树和哈夫曼编码

一、哈夫曼树 1.1 哈夫曼树的概念 给定一个序列&#xff0c;将序列中的所有元素作为叶子节点构建一棵二叉树&#xff0c;并使这棵树的带权路径长度最小&#xff0c;那么我们就得到了一棵哈夫曼树&#xff08;又称最优二叉树&#xff09; 接下来是名词解释&#xff1a; 权&a…