若依搭建 帝可得 售货机 笔记

一、搭建项目

1.后端gitee链接:

启动项目时记得修改mysql和redis的相关信息;创建项目相关数据库,并导入初始化的SQL脚本

dkd-parent: 帝可得后台管理系统 (gitee.com)

2.前端gitee链接:

启动项目时记得安装依赖:npm install

dkd-vue: 帝可得前端 (gitee.com)

二、 点位管理

2.1 需求说明:

2.2 相关数据库设计

区域表:主键id、区域名称、备注说明(BaseEntity里有该字段,无需多余创建)

合作商表:主键id、合作商名称、联系人、联系电话、分成比例·、账号、密码

点位表:主键id、点位名称、详细地址、商圈类型、区域外键、合作商外键

使用大模型进行数据库的生成:

你是一位软件工程师,帮我生成MySQL的表结构,需求如下:

1.区域表:表名tb_region,字段有id、区域名称;

2.合作商表:表名tb_partner,字段有id、合作商名称、联系人、联系电话、分成比例(int)、账号、密码;

3.点位表:表名tb_node 字段id、点位名称、详细地址、商圈类型(int);

其他要求:

1.每张表中的都有创建的时间create_time、修改时间date_time、创建人create_by、修改人update_by、备注remark这些字段;

2.每张表的主键都是自增的;

3.区域与点位是一对多的关系,合作商与点位是一对多的关系,请用字段表示出来,并建立外键的约束;

4.请为每个字段都添加上comment;

5.帮我给生成的表中插入一些北京城市相关的区域、点位、合作商的测试数据

将所生成的数据导入数据库中

对于点位管理数据的  关系字段:region_id、partner_id; 数据字典:business_type

2.3 点位管理相关代码生成

2.3.1 理论部分

2.3.2 实操部分

(1)添加点位管理菜单栏

 (2)添加商圈类型的字典类型

分别添加字典类型的字键和对应字键值;结果显示:

 (3)代码生成(分别生成3张表的信息)
  • 配置区域表:

基本信息修改:将在前缀tb删除:

字段信息根据需求进行修改:

生成信息:根据项目中的模块名,修改其生成模块名和生成包路径,最后设置上传菜单

  • 配置合作商表:

基本信息:

字段信息:

生成信息:根据项目中的模块名,修改其生成模块名和生成包路径,最后设置上传菜单

  • 配置点位表:

基本信息:

字段信息:(记得商圈类型选择商圈类型的字典类型)

生成信息:

(4)生成代码并导入文件中,注意后端的代码是导入manage模块中

2.4 区域管理的改造(自主添加)

需求分析:

在该页面无法查看到每个区域的点位数

需要对区域管理的列表显示进行改造,使其能够显示各列表的点位数

2.4.1 添加RegionVo类(在Region的基础上显示点位数量nodeCount)

@Data
public class RegionVo extends Region {

    //区域点位数量
    private Integer nodeCount;


}

 2.4.2 开启驼峰命名转换字段

记得在domain resources的mybatis-config.xml中打开驼峰命名转换字段,这样Mapper.xml中所写的字段会通过驼峰命名的方式装换类中的字段

2.4.3 修改后端代码:

修改顺序 Mapper => Service => Controller

Mapper:

     /**
     * 
     * @param region
     * @return 区域管理集合和每个区域的点位数量
     */
    public List<RegionVo> selectRegionVoList(Region region);

Mapper.xml:

    <select id="selectRegionVoList" resultType="com.dkd.manage.domain.vo.RegionVo">
        select r.*,count(n.id) as node_count from tb_region r left join tb_node n on r.id = n.region_id
        <where>
            <if test="regionName != null  and regionName != ''"> and region_name like concat('%', #{regionName}, '%')</if>
        </where>
        group by r.id
    </select>

ServiceImpl:

    @Override
    public List<RegionVo> selectRegionVoList(Region region) {
        return regionMapper.selectRegionVoList(region);
    }

因为是将区域管理的列表多显示每个区域的点位数,只需要在Controller层中修改显示区域管理的对应的方法即可:

Controller:

    /**
     * 查询区域管理列表
     */
    @PreAuthorize("@ss.hasPermi('manage:region:list')")
    @GetMapping("/list")
    public TableDataInfo list(Region region)
    {
        startPage();
        List<RegionVo> voList = regionService.selectRegionVoList(region);
        return getDataTable(voList);
    }

2.4.4 修改前端代码:

原有的代码:

修改后的代码:(在原有的代码上添加点位数) 

 2.5 合作商管理的改造

合作商生成的界面:

2.5.1 修改前端代码:

(1)加大搜索合作商名称的标签长度,使其在一条线上,并删除多余的搜索框代码

修改后的效果:

(2) 将合作商ID的label修改为序号,设置type为index和width,移动column的显示顺序

(3)在password的这个column,添加type = "password"这样明文就可以变成密文

修改前:

修改的代码:

修改后:

 

(4)在修改合作商时,设置不需要显示账号和密码

添加 v-if="form.id == null" 即可;因为修改是包含id的所以隐藏账号和密码,而新增不包含id的,所以显示添加账号和密码信息

(5)想在修改表单中显示创建的时间

显示效果:

(5)添加查看详细的操作

添加操作的查看详情的一行

编写查看合作商详情的函数

编写查询合作商详细的对话框

点击后的显示效果:

 (6)给合作商的列表添加点位数(跟刚刚进行区域管理的改造差不多)

显示效果:

(7)添加重置密码的操作,初始的密码值为:123456

因为在后端代码中添加了一个重置密码的请求,所以要修改对应api中js的代码

对应的partner.js:

// 重置合作商管理密码
export function resetPartnerPwd(id) {
  return request({
    url: '/manage/partner/resetPwd/' + id,
    method: 'put'
  })
}

view/partner/index.vue: 

重置密码仿写删除操作的函数 

(8)给操作栏设置宽度,使其在一行上

 显示效果:

2.5.2 修改后端代码:

(1)设置密码以密文的方式保存

通过观察可以发觉password为明文

 修改其添加的代码,使添加合作商的密码都显示为密文

 (2)添加重置密码对应的后端代码:
    @PreAuthorize("@ss.hasPermi('manage:partner:edit')")
    @Log(title = "合作商管理", businessType = BusinessType.UPDATE)
    @PutMapping("/resetPwd/{id}")
    public AjaxResult reset(@PathVariable("id") Long id){
        Partner partner = new Partner();
        partner.setId(id);
        partner.setPassword(SecurityUtils.encryptPassword("123456"));
        return toAjax(partnerService.updatePartner(partner));
    }

2.6 点位管理的改造:

2.6.1点位管理的基本改造

(1)改造需求

修改前的页面:

要求改造后的界面显示: 将关联的区域ID调整为所在区域 以及 将关联的合作商ID调整为合作商


开始改造 

(2)对点位管理的中所属区域部分进行修改

改造 将通过node中的区域Id 替换 获取listRegion中的区域名

同时 将所属区域为输入框 替换为 下拉框的方式

在node/index.js 中引入获取 listRegion的列表

在script部分添加

/* 查询所有条件的对象 */
const loadAllParams = reactive({
  pageNum:1,
  pageSize:10000
})

/* 查询区域列表 */
const regionList = ref([])
function getListRegion(){
  listRegion(loadAllParams).then(response=>{
    regionList.value = response.rows
  })
}

getListRegion()

 这时,通过刷新页面可以查看getListRegion()获取的信息

这样方便核对response所返回的列表值

修改搜索框中的 通过输入区域Id获取对应信息 => 通过下拉框的方式选择对应区域信息

(注释部分的代码是修改前的代码)

      <el-form-item label="关联的区域" prop="regionId">
       <!--  <el-input
          v-model="queryParams.regionId"
          placeholder="请输入关联的区域ID"
          clearable
          @keyup.enter="handleQuery"
        /> -->

        <el-select v-model="queryParams.regionId" placeholder="请选择区域" clearable style="width: 100%">
          <el-option
            v-for="item in regionList"
            :key="item.id"
            :label="item.regionName"
            :value="item.id"
          />
        </el-select>
      </el-form-item>

修改新增中的区域的输入框为下拉框 

(注释部分的代码是修改前的代码)

        <el-form-item label="所属区域" prop="regionId">
          <!-- <el-input v-model="form.regionId" placeholder="请输入关联的区域ID" /> -->
          
          <el-select v-model="form.regionId" placeholder="请选择关联的区域">
            <el-option
            v-for="item in regionList"
            :key="item.id"
            :label="item.regionName"
            :value="item.id"
          />
          </el-select>
        </el-form-item>
(3)对点位管理的中合作商部分进行修改

基本上与对点位管理的中所属区域部分进行修改差不多;

对于复用率高的代码,我们可以进行封装,我们将在api下创建page.js

/* 查询所有条件的对象 */
export const loadAllParams = reactive({
  pageNum: 1,
  pageSize: 10000,
});

如果使用的直接进行导入即可:

import {loadAllParams} from '@/api/page'

最终改造后的效果:

(4) 使用...替换详细地址中内容过长的部分,当鼠标移动到上方会显示完整的详细地址

只需要在详细地址这行上加上 show-over-tooltip属性即可

2.6.2 点位管理中的设备相关改造

我们希望能够看到每个点位的设备数,在查看详情中显示当前点位下的所有设备列表

还没有创建设备的数据库表,要根据分析先创建设备的数据库表

关联查询:对于设备数量的统计,需要执行关联查询,在mapper层封装

关联实体:对于区域和合作商的数据,采用Mybatis提供的嵌套查询功能

(1)创建Vo实体类
@Data
public class NodeVo extends Node {

    private Integer vmCount;

    private Region region;

    private Partner partner;
}
(2)mapper:
   public List<NodeVo> selectNodeVoList(Node node);
(3)Mapper.xml:
    <resultMap id="NodeVoResult" type="NodeVo">
        <result property="id"    column="id"    />
        <result property="nodeName"    column="node_name"    />
        <result property="address"    column="address"    />
        <result property="businessAreaType"    column="business_area_type"    />
        <result property="regionId"    column="region_id"    />
        <result property="partnerId"    column="partner_id"    />
        <result property="createTime"    column="create_time"    />
        <result property="updateTime"    column="update_time"    />
        <result property="createBy"    column="create_by"    />
        <result property="updateBy"    column="update_by"    />
        <result property="remark"    column="remark"    />
        <result property="vmCount" column="vm_count" />
        <association property="region" column="region_id" javaType="Region" select="com.dkd.manage.mapper.RegionMapper.selectRegionById"/>
        <association property="partner" column="partner_id" javaType="Partner" select="com.dkd.manage.mapper.PartnerMapper.selectPartnerById"/>
    </resultMap>  

    <select id="selectNodeVoList" resultMap="NodeVoResult">
        SELECT
            n.*,
            COUNT(vm.id) AS vm_count
        FROM
            tb_node n
                LEFT JOIN
            tb_vending_machine vm ON n.id = vm.node_id
        <where>
            <if test="nodeName != null  and nodeName != ''"> and n.node_name like concat('%', #{nodeName}, '%')</if>
            <if test="regionId != null "> and n.region_id = #{regionId}</if>
            <if test="partnerId != null "> and n.partner_id = #{partnerId}</if>
        </where>
        GROUP BY
            n.id;
    </select>
(4)ServiceImpl:
    @Override
    public List<NodeVo> selectNodeVoList(Node node) {
        return nodeMapper.selectNodeVoList(node);
    }
 (5)Controller:
    /**
     * 查询点位管理列表
     */
    @PreAuthorize("@ss.hasPermi('manage:node:list')")
    @GetMapping("/list")
    public TableDataInfo list(Node node)
    {
        startPage();
        List<NodeVo> voList = nodeService.selectNodeVoList(node);
        return getDataTable(voList);
    }

修改前端的代码部分:

最终展示效果:

 2.7 区域管理 通过 查看详细信息 查看 区域信息 和 点位列表

引入listNode,目的是获取相关的点位列表

import {listNode} from '@/api/manage/node'

 编写相关函数 

const nodeList = ref([]);
const regionInfoOpen = ref(false);
/* 查看详情操作按钮*/
function getRegionInfo(row){
  //查看区域信息
  reset();
  const _id = row.id
  getRegion(_id).then(response => {
    form.value = response.data;
  });
  //查看点位列表
  loadAllParams.id = row.id
  listNode(loadAllParams).then(response => {
    nodeList.value = response.rows;
    
  })
  regionInfoOpen.value = true
}

添加修改后的对话框

效果显示:

 

2.8 数据的完整性

 在区域表中进行删除,会导致将区域表下的点位数一并删除(ON DELETE CASCADE)

所以为了保证数据的完整性,我们在删除区域之前如果该区域还有点位数则无法删除。

级联操作

  • 当主表中的行被删除或更新时,可以设置外键约束来自动执行级联操作。
  • ON DELETE CASCADE:当主表的行被删除时,所有依赖于该主键的外键行也将被删除。
  • ON UPDATE CASCADE:当主表的主键值被更新时,所有依赖于该主键的外键值也会相应更新。
  • NO ACTION 或 RESTRICT:如果删除或更新主键值会导致外键违反约束,则操作将被阻止。

将ON DELETE CASCADE 和 ON UPDATE CASCADE 都改为 ON ACTION

在GlobalException中添加处理异常信息的返回 

三、人员管理

需要员工区将设备投放到各个区域

3.1 数据库设计

3.2 使用代码生成器生成代码

(1)创建人员管理的菜单 

(2)添加员工状态的字典(1:启动,0:禁用) 

 导入员工表和角色表

编辑tb_emp中的生成信息 

 

 编辑tb_role 中的生成信息 

最后是生成代码并导入项目中

3.3 人员列表改造

对所显示的主键修改label为序号,同时添加type = "index",width = "50"

将下图的区域id和角色id的输入框都修改为下拉框

角色的下拉框的数据通过获取角色列表来确定,区域框也是如此(获取列表需要考虑分页的情况,所以需要获取 loadAllParams)

import {listRole} from "@/api/manage/role";
import {listRegion} from "@/api/manage/region";
import {loadAllParams}  from "@/api/page"

 将获取到的区域列表存储到regionList,角色列表存储到roleList

const roleList = ref([]);
function getRoleList(){
  listRole(loadAllParams).then(response=>{
    roleList.value = response.rows;
  })
}

const regionList = ref([]);
function getRegionList(){
  listRegion(loadAllParams).then(response=>{
    regionList.value = response.rows;
  })
}

getRegionList()
getRoleList()

将输入框修改为下拉框的代码所示

注意:item的属性命名,要根据F12中所获取的属性字段名相一致

 <el-form-item label="所属区域" prop="regionId">
          <!-- <el-input v-model="form.regionId" placeholder="请输入所属区域Id" /> -->
          <el-select v-model="form.regionId" placeholder="请选择区域" >
            <el-option
              v-for="item in regionList"
              :key="item.id"
              :label="item.regionName"
              :value="item.id"
            ></el-option>
          </el-select>
        </el-form-item>
        <el-form-item label="角色" prop="roleId">
          <!-- <el-input v-model="form.roleId" placeholder="请输入角色id" /> -->
          <el-select v-model="form.roleId" placeholder="请选择角色">
            <el-option
              v-for="item in roleList"
              :key="item.roleId"
              :label="item.roleName"
              :value="item.roleId"
            ></el-option>
          </el-select>
        </el-form-item>

修改后端代码的添加和修改员工的代码

 

添加启动或禁用

 <el-form-item label="是否启用" prop="status">
          <el-radio-group v-model="form.status">
            <el-radio :label="0">禁用</el-radio>
            <el-radio :label="1">启用</el-radio>
          </el-radio-group>
        </el-form-item>

 

改造后的效果:

 

3.4 列表改造实现同步存储

当修改区域名称时,在人员信息所对应的区域名称没有同步发生改变

在emp的mapper中添加updateByRegionId方法

    @Update("update tb_emp set region_name = #{regionName} where region_id = #{regionId}")
    public int updateByRegionId(@Param("regionName") String regionName, @Param("regionId") Long regionId);

这样只需要在修改region的名称时进行调用empMapper.updateByRegionId方法实现数据一致

加上@Transcational保证原子性

    @Transactional(rollbackFor = Exception.class)
    @Override
    public int insertRegion(Region region)
    {
        region.setCreateTime(DateUtils.getNowDate());
        int result = regionMapper.insertRegion(region);
        empMapper.updateByRegionId(region.getRegionName(), region.getId());
        return result;
    }

四、阿里云OSS存储文件

(1)设置 AK 和 SK

  • AK(Access Key):访问密钥是公开的标识符,它唯一地标识了用户账户。它可以被认为是一个用户名,用于在请求时识别调用者。

  • SK(Secret Key):密钥是私密的,不应该公开分享或泄露。它类似于密码,用于验证发送请求的用户是否是访问密钥的合法持有者。在发送API请求时,SK通常用于生成签名,以确保请求的完整性和真实性。

以管理员的身份打开CMD命令行

配置系统变量:

set OSS_ACCESS_KEY_ID = 您的AK

set OSS_ACCESS_KEY_SECRET = 您的SK

(2)执行下面命令使其更改生效

setx OSS_ACCESS_KEY_ID = "%OSS_ACCESS_KEY_ID%"

set OSS_ACCESS_KEY_SECRET = "%OSS_ACCESS_KEY_SECRET%"

(3)执行下面命令,验证变量是否生效

echo "%OSS_ACCESS_KEY_ID%"

echo "%OSS_ACCESS_KEY_SECRET%"

(4)引入阿里云OSS的依赖并参考示例使用

五、X-File-Storage

优势:

        X-File-Storage的设计目标之一就是为了简化不同存储平台之间的迁移和集成工作。通过使用X-File-Storage,您可以在其统一的抽象层上操作文件,而不必直接与每个特定存储平台的API打交道。

        这意味着,一旦您熟悉了X-File-Storage的API和使用方式,当您需要切换或添加新的存储平台时,您只需进行一些配置上的更改,而不需要重写大量代码来适应新的存储平台。X-File-Storage已经为您处理了与各种存储平台交互的复杂性。

使用步骤:

  • X-File-Storage只需要导入自身的依赖和所使用云存储平台的依赖;
  • 填写根据X-File-Storage所提供的appllication.yml中的信息;
  • 最后通过X-File-Storage提供的代码方式实现文件上传;

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

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

相关文章

IPv4与IPv6的定义和主要区别

IPv4与IPv6的定义 IPv4&#xff0c;即互联网协议版本4&#xff08;InternetProtocolversion4&#xff09;&#xff0c;是互联网使用最为广泛的协议之一。它采用32位地址&#xff0c;以点分十进制表示&#xff0c;如192.168.1.1。 IPv6&#xff0c;即互联网协议版本6&#xff…

自动驾驶革命:商汤科技突破性大模型UniAD震撼登场

自动驾驶革命&#xff1a;商汤科技突破性大模型UniAD震撼登场&#xff01; 在人工智能的浪潮中&#xff0c;自动驾驶技术一直是科技巨头们竞相追逐的圣杯。而今&#xff0c;商汤科技联合上海人工智能实验室与武汉大学&#xff0c;以一篇名为"Planning-oriented Autonomou…

Shader每日一练(2)护盾

Shader "Custom/Shield" {Properties{_Size("Size", Range(0 , 10)) 1 // 控制噪声纹理缩放大小的参数_colorPow("colorPow", Float) 1 // 控制颜色强度的指数_colorMul("colorMul", Float) 1 // 控制颜色乘法因子_mainColor("…

政安晨:【Keras机器学习示例演绎】(五十四)—— 使用神经决策森林进行分类

目录 导言 数据集 设置 准备数据 定义数据集元数据 为训练和验证创建 tf_data.Dataset 对象 创建模型输入 输入特征编码 深度神经决策树 深度神经决策森林 实验 1&#xff1a;训练决策树模型 实验 2&#xff1a;训练森林模型 政安晨的个人主页&#xff1a;政安晨 欢…

【机器学习】独立成分分析(ICA):解锁信号的隐秘面纱

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 独立成分分析&#xff08;ICA&#xff09;&#xff1a;解锁信号的隐秘面纱引言I…

人工智能算法工程师(中级)课程3-sklearn机器学习之数据处理与代码详解

大家好&#xff0c;我是微学AI,今天给大家分享一下人工智能算法工程师(中级)课程3-sklearn机器学习之数据处理与代码详解。 Sklearn&#xff08;Scikit-learn&#xff09;是一个基于Python的开源机器学习库&#xff0c;它提供了简单有效的数据挖掘和数据分析工具。Sklearn包含了…

webstorm问题解决:无法识别 @

问题解决tsconfig.json 问题 本地的 vite.config.ts 已经配置 路径 但是&#xff0c;我用webstorm 上识别不了 解决 新增文件tsconfig.json&#xff0c;添加 baseUrl 和 paths 的配置&#xff0c;以告诉 TypeScript 和 WebStorm 如何解析路径别名 tsconfig.json {&quo…

无需构建工具,快速上手Vue2 + ElementUI

无需构建工具&#xff0c;快速上手Vue2 ElementUI 在前端开发的世界中&#xff0c;Vue.js以其轻量级和易用性赢得了开发者的青睐。而Element UI&#xff0c;作为一个基于Vue 2.0的桌面端组件库&#xff0c;提供了丰富的界面组件&#xff0c;使得构建美观且功能丰富的应用变得…

禁止使用存储过程

优质博文&#xff1a;IT-BLOG-CN 灵感来源 什么是存储过程 存储过程Stored Procedure是指为了完成特定功能的SQL语句集&#xff0c;经编译后存储在数据库中&#xff0c;用户可通过指定存储过程的名字并给定参数&#xff08;如果该存储过程带有参数&#xff09;来调用执行。 …

AndroidStudio2023.3版本avd manager模拟器无法创建

创建到最后一步的时候提示WARN - #com.android.sdklib.internal.avd.AvdManager - com.android.prefs.AndroidLocationsException: Can’t locate Android SDK installation directory for the AVD .ini file. 前提&#xff1a; 1.sdk路径没问题 2.安装了下图内容 那是什么原因…

Linux /etc/profile 详解

概述 Linux是一个多用户的操作系统。每个用户登录系统后&#xff0c;都会有一个专用的运行环境。通常每个用户默认的环境都是相同的&#xff0c;这个默认环境实际上就是一组环境变量的定义。用户可以对自己的运行环境进行定制&#xff0c;其方法就是修改相应的系统环境变量&…

原生小程序生成二维码并保存到本地

需求&#xff1a;我要在一个页面中生成一个二维码&#xff0c;并且这个二维码可以长按保存到本地或者发送给好友&#xff1b; 我这里是将生成的canvas二维码转换成图片&#xff0c;利用长按图片进行保存或转发 效果图&#xff1a; 第一步先下载对应的包&#xff1a; npm instal…

C语言笔记31 •单链表经典算法OJ题-3.反转链表•

反转链表 1.问题 给你单链表的头节点 head&#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 2.代码实现&#xff1a; //3.反转链表 #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <stdlib.h> #include <assert.h>typedef int …

LLM——langchain 与阿里 DashScop (通义千问大模型) 和 DashVector(向量数据库) 结合使用总结

文章目录 前言预览直接调用大模型使用 prompt template格式化输出使用上下文 RAG 增强检索 自定义 langchain AgentPromptTemplate 和 ChatPromptTemplate使用少量示例创建ChatPromptTemplate 前言 langchain 是一个面向大模型开发的框架&#xff0c;其中封装了很多核心组件&a…

设计模式之外观模式(Facade)

Facade设计模式&#xff0c;也称为外观模式&#xff0c;是一种结构型设计模式&#xff0c;它主要用于为子系统中的一组接口提供一个统一的高层接口&#xff0c;从而使得子系统更加容易使用。以下是关于Facade设计模式的详细介绍&#xff1a; 一、定义 Facade模式为多个复杂的…

期权专题12:期权保证金和期权盈亏

目录 1. 期权保证金 1.1 计算逻辑 1.2 代码复现 1.3 实际案例 2. 期权盈亏 2.1 价格走势 2.2 计算公式 2.2.1 卖出期权 2.2.2 买入期权 免责声明&#xff1a;本文由作者参考相关资料&#xff0c;并结合自身实践和思考独立完成&#xff0c;对全文内容的准确性、完整性或…

【Linux】管道命令

命令执行的时候有时会输出数据&#xff0c;有的命令输出的数据太繁杂了。 那么我们怎么去筛选这些信息来得到我们所想要的格式&#xff1f; 这就牵涉到管道命令的问题了&#xff08;pipe&#xff09;&#xff0c;管道命令使用的是【|】这个界定符号。另外&#xff0c;管道命令与…

Mongodb单字段索引详解

学习mongodb&#xff0c;体会mongodb的每一个使用细节&#xff0c;欢迎阅读威赞的文章。这是威赞发布的第89篇mongodb技术文章&#xff0c;欢迎浏览本专栏威赞发布的其他文章。如果您认为我的文章对您有帮助或者解决您的问题&#xff0c;欢迎在文章下面点个赞&#xff0c;或者关…

概率论期末速成(知识点+例题)

考试范围 一&#xff1a; 事件关系运算性质全概率公式、贝叶斯公式古典概型 二&#xff1a; 离散分布律连续密度函数性质 -> 解决三个问题&#xff08;求待定系数、求概率、求密度函数&#xff09;分布函数 -> 解决三个问题常用分布&#xff08;最后一节课的那几个分…

Linux 调试命令记录

查看CPU信息 cat /proc/cpuinfo 显示当前电源功耗 top 命令能够清晰的展现出系统的状态&#xff0c;而且它是实时的监控&#xff0c;按 q 退出。 uptime 与 w 这两个命令只是单纯的反映出负载&#xff0c;所表示的是过去的1分钟、5分钟和15分钟内进程队列中的平均进程数量。…