返回分類信息(帶層級)

文章目錄

    • 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 新增方法和屬性
    @Resourceprivate CategoryDao categoryDao; // 注入 CategoryDao的代理對象@Overridepublic 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*/@Overridepublic 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;}@Overridepublic 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;}@Overridepublic 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方法
    @Overridepublic 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}) => { // 解構了datathis.data = data.data;})}},created() { // 生命周期鉤子,初始化時調用this.getCategories()}
};
</script><style scoped></style>
3.前端查看效果

image-20240411102607802

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/10470.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/10470.shtml
英文地址,請注明出處:http://en.pswp.cn/web/10470.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

全面理解BDD(行為驅動開發):轉變思維方式,提升軟件質量

在傳統的軟件開發流程中&#xff0c;開發人員和測試人員的工作通常是相互獨立的。開發人員負責編寫代碼&#xff0c;測試人員負責找出代碼中的問題。然而&#xff0c;這種方法可能導致溝通不足&#xff0c;而且會浪費時間和資源。為了解決這些問題&#xff0c;出現了一種新的開…

Mask2former代碼詳解

1.整體流程 Mask2former流程如圖所示&#xff0c;對于輸入圖片&#xff0c;首先經過Resnet等骨干網絡獲得多層級特征&#xff0c;對于獲得的多層級特征&#xff0c;一個方向經過pixel decoder(基于DetrTransformerEncoderLayer)得到per-pixel embedding,另外一個方向經過transf…

matlab的imclose()詳解

J imclose(I,SE) J imclose(I,nhood) 說明 J imclose(I,SE) 使用結構元素 SE 對灰度或二值圖像 I 執行形態學閉運算。形態學閉運算是先膨脹后腐蝕&#xff0c;這兩種運算使用相同的結構元素。 J imclose(I,nhood) 對圖像 I 執行閉運算&#xff0c;其中 nhood 是由指定結…

mac監聽 linux服務器性能可視化(Grafana+Promethus+Node_exporter)

Grafana和promethus(普羅米修斯)的安裝和使用 監控系統的Prometheus類似于一個注冊中心&#xff0c;我們可以只需要配置一個Prometheus,而在其他服務器&#xff0c;只需要安裝node_exporter,它們的數據流轉就是通過exporter采集數據信息&#xff0c;然后告訴prometheus它的位置…

分布式鏈路追蹤 Zipkin+Sleuth(8)

項目的源碼地址 Spring Cloud Alibaba 工程搭建&#xff08;1&#xff09; Spring Cloud Alibaba 工程搭建連接數據庫&#xff08;2&#xff09; Spring Cloud Alibaba 集成 nacos 以及整合 Ribbon 與 Feign 實現負載調用&#xff08;3&#xff09; Spring Cloud Alibaba Ribbo…

CUDA專項

1、講講shared memory bank conflict的發生場景&#xff1f;以及你能想到哪些解決方案&#xff1f; CUDA中的共享內存&#xff08;Shared Memory&#xff09;是GPU上的一種快速內存&#xff0c;通常用于在CUDA線程&#xff08;Thread&#xff09;之間共享數據。然而&#xff0…

BUUCTF[PWN]

BUUCTF[PWN] 題目&#xff1a;warmup_csaw_2016 地址&#xff1a;warmup_csaw_2016ida打開&#xff0c;進main函數&#xff1a;gets函數的棧溢出&#xff1a;給出了sub_40060D函數的地址直接&#xff0c;溢出到sub_40060D的地址即可&#xff1a; from pwn import *p remote…

[Cmake Qt]找不到文件ui_xx.h的問題?有關Qt工程的問題,看這篇文章就行了。

前言 最近在開發一個組件&#xff0c;但是這個東西是以dll的形式發布的界面庫&#xff0c;所以在開發的時候就需要上層調用。 如果你是很懂CMake的話&#xff0c;ui_xx.h的文件目錄在 ${CMAKE_CURRENT_BINARY_DIR} 下 然后除了有關這個ui_xx.h&#xff0c;還有一些別的可以簡…

Verlog-流水燈-FPGA

Verlog-流水燈-FPGA 引言&#xff1a; ? 隨著電子技術的飛速發展&#xff0c;現場可編程門陣列&#xff08;FPGA&#xff09;已成為電子設計自動化&#xff08;EDA&#xff09;領域中不可或缺的組件。FPGA以其高度的靈活性和可定制性&#xff0c;廣泛應用于通信、圖像處理、工…

go-zero整合asynq實現分布式定時任務

本教程基于go-zero微服務入門教程&#xff0c;項目工程結構同上一個教程。 go-zero微服務入門教程&#xff08;點擊進入&#xff09; 本教程主要實現go-zero整合asynq實現分布式定時任務。 本文源碼&#xff1a;https://gitee.com/songfayuan/go-zero-demo &#xff08;教程源…

外賣點餐單店+多店自由切換小程序源碼系統全功能版 帶完整的安裝代碼包以及搭建部署教程

近年來&#xff0c;外賣市場持續火爆&#xff0c;但許多餐飲商家在接入外賣平臺時面臨著諸多困擾。高昂的平臺費用、復雜的操作流程以及數據安全隱患等問題&#xff0c;讓商家們倍感壓力。為了解決這些問題&#xff0c;小編給大家分享一款集單店與多店管理于一體的外賣點餐系統…

ACM實訓沖刺第四天

【碎碎念】最近的任務有點繁重&#xff0c;所以考慮到實際情況&#xff0c;視頻學習決定放置一段時間&#xff0c;重點是學校的實訓練習題&#xff0c;對于我而言&#xff0c;目標不是優秀/良好&#xff0c;綜合考慮我的實際情況&#xff0c;保佑我及格、順利通過就可&#xff…

通過自建鏡像方式搭建RabbitMQ集群

通過自建鏡像方式搭建RabbitMQ集群 1. 應用準備1.1 應用目錄結構1.2 配置文件1.2.1 .erlang.cookie1.2.2 hosts1.2.3 rabbitmq.conf1.2.4 rabbitmq-env.conf 2. 編寫DockerFile2.1 將所有本地文件拷貝到工作目錄2.2 拷貝文件到源目錄&增加執行權限2.3 安裝Erlang & rab…

Leedcode題目:移除鏈表元素

題目&#xff1a; 這個題目就是要我們將我們的鏈表中的值是val的節點刪除。 我們題目提供的接口是 傳入了指向一個鏈表的第一個節點的指針&#xff0c;和我們要刪除的元素的值val&#xff0c;不只要刪除第一個&#xff0c; 思路 我們這里可以創建一個新的鏈表&#xff0c;…

【C++】學習筆記——模板進階

文章目錄 十一、模板進階1. 非類型模板參數2. 按需實例化3. 模板的特化類模板的特化 4. 模板的分離編譯 未完待續 十一、模板進階 1. 非類型模板參數 模板參數分為類型形參和非類型形參 。類型形參即&#xff1a;出現在模板參數列表中&#xff0c;跟在class或者typename之類的…

掌握SEO優化的關鍵:提升網站排名的秘籍(如何提高網站seo排名)

你是否曾經在搜索引擎上搜索過一個關鍵詞&#xff0c;然后點擊了排在前幾位的網站&#xff1f;如果是&#xff0c;那么你已經體會到了SEO&#xff08;搜索引擎優化&#xff09;的威力。SEO是一項關鍵的網絡營銷策略&#xff0c;它能夠讓你的網站在搜索引擎中獲得更高的排名&…

Apache ECharts

Apache ECharts介紹&#xff1a; Apache ECharts 是一款基于 Javascript 的數據可視化圖表庫&#xff0c;提供直觀&#xff0c;生動&#xff0c;可交互&#xff0c;可個性化定制的數據可視化圖表。 官網地址&#xff1a;https://echarts.apache.org/zh/index.html Apache ECh…

Stable Diffusion寫真完整教程

前言 最近自己對AI非常癡迷&#xff0c;并且今后也會一直在這個領域深耕&#xff0c;所以就想著先入門&#xff0c;因此花時間研究了一番&#xff0c;還好&#xff0c;出了點小成果&#xff0c;接下來給大家匯報一下。 AI繪畫 提到AI繪畫&#xff0c;大家可能立馬會想到made…

A-loam建圖算法

A-LOAM構建3d點云地圖并實時轉存二維柵格地圖 A-loam算法。源代碼用的是velodyne雷達話題&#xff0c;但是現在用rslidar來處理。所以也會遇到另外一個包來轉換相關的數據。 git clone https://github.com/HKUST-Aerial-Robotics/A-LOAM.githttps://github.com/HViktorTsoi/r…

重慶市工程技術生態環境專業職稱申報條件

重慶市工程技術生態環境專業職稱申報條件鏈接重慶市人力資源和社會保障局 重慶市生態環境局關于印發重慶市工程技術生態環境專業職稱申報條件的通知_重慶市人力資源和社會保障局類別基本條件業績成果備注工程師具備博士學位&#xff1b;或具備碩士學位或第二學士學位&#xff0…