Vue基础4

news2024/7/6 19:42:37

Vue基础4

  • 计算属性
    • 姓名案例 - 第一种用@click.keyup的方法
    • 姓名案例 - 第二种用v-model双向绑定的方法
    • 姓名案例 - 第三种使用methods方法
    • 姓名案例 - 第四种使用计算属性的方法
      • 计算属性的简写—只考虑读取,不考虑修改时候使用
  • 监视属性
    • 第一种普通写法
    • 第二种用计算属性的写法
      • 加上控制台输出
      • 没有控制台输出
    • 第三种用监视属性写
      • 监视属性
        • 监视属性第一种写法
        • 监视属性第二种写法
      • 深度监视
      • 监视属性简写
        • 监视属性第一种方式简写
        • 监视属性第二种方式简写
      • watch与computed对比
        • 姓名案例-使用监视属性写
        • 姓名案例-1s之后再显示
          • 监视属性
          • 计算属性
        • 总结:computed和watch之间的区别

计算属性

姓名案例 - 第一种用@click.keyup的方法

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>计算属性</title>
    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
</head>
<body>
<div id="app">
    <div>姓:<input type="text" @keyup="showMsg"></div>
    <div>名:<input type="text" @keyup="showTip"></div>
    <div>
        全名:
        <span class="xing">{{lastName}}</span>
        <span>-</span>
        <span class="ming">{{firstName}}</span>
    </div>
</div>
<script>
    Vue.config.productionTip=false;
    new Vue({
        el:"#app",
        data:{
          lastName:"",
          firstName:""
        },
        methods:{
            showMsg(e){
                console.log(e.target.value)
                this.lastName=e.target.value
            },
            showTip(e){
                console.log(e.target.value)
                this.firstName=e.target.value
            }
        }
    })
</script>
</body>
</html>

请添加图片描述

姓名案例 - 第二种用v-model双向绑定的方法

并限制姓的长度

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>计算属性</title>
    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
</head>
<body>
<div id="app">
    <div id="root">
        姓:<input type="text" v-model="lastName"> <br><br>
        名:<input type="text" v-model="firstName"> <br><br>
        全名:{{lastName.slice(0,3)}}-{{firstName}}
    </div>
</div>
<script>
    Vue.config.productionTip=false;
    new Vue({
        el:"#app",
        data:{
            lastName:"张",
            firstName:"三"
        },
    })
</script>
</body>
</html>

请添加图片描述
不满足插值语法的简洁要求

姓名案例 - 第三种使用methods方法

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
</head>
<body>
<div id="app">
    <div id="root">
        姓:<input type="text" v-model="lastName"> <br><br>
        名:<input type="text" v-model="firstName"> <br><br>
<!--        不使用括号调的是方法,使用括号调的是方法的返回值-->
        全名:{{fullName()}}
    </div>
</div>
<script>
    Vue.config.productionTip=false;
    new Vue({
        el:"#app",
        data:{
            lastName:"张",
            firstName:"三"
        },
        methods:{
            fullName(){
                return this.lastName+"-"+this.firstName
            }
        }
    })
</script>
</body>
</html>

请添加图片描述

姓名案例 - 第四种使用计算属性的方法

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>姓名案例-计算属性</title>
    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
</head>
<body>
<div id="app">
    姓:<input type="text" v-model="lastName"> <br><br>
    名:<input type="text" v-model="firstName"> <br><br>
    全名:{{fullName}} <br><br>
    全名:{{fullName}} <br><br>
    全名:{{fullName}} <br><br>
</div>
<script>
    Vue.config.productionTip=false;
    const vm=new Vue({
        el:"#app",
        data:{
            lastName:"张",
            firstName:"三"
        },
        computed:{
            fullName:{
                get(){
                    //get有什么作用?当有人读取fullName时,get就会被调用,且返回值就作为fullName的值
                    //get什么时候调用?1.读取fullName时候 2.所依赖的数据发生变化时候
                    console.log("get被调用了~~~~")
                    let fullname=this.lastName.slice(0,3)+"-"+this.firstName.slice(0,3)
                    return fullname
                },
                set(value){
                    //set什么时候调用?当fullName被修改时
                    //value="张-三"
                    let arr=value.split("-")
                    this.lastName=arr[0]
                    this.firstName=arr[1]
                }
            }
        }
    })
</script>
</body>
</html>

请添加图片描述
计算属性:

  1. 定义:要用的属性不存在,要通过已有属性计算得来
  2. 原理:底层借助了Object.defineproperty方法提供的getter和setter。
  3. get函数什么时候执行
    (1)初次读取的时候会执行一次
    (2)当依赖的数据发生改变时会被再次调用
  4. 优势:与methods实现相比,内部有缓存机制(复用),效率更高,调试方便
  5. 备注:
    (1)计算属性最终会出现在vm上,直接读取使用即可
    (2)如果计算属性要被修改,那必须写set函数去响应修改,且set中要引起计算时依赖的数据发生

计算属性的简写—只考虑读取,不考虑修改时候使用

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>姓名案例-计算属性的简写</title>
    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
</head>
<body>
<div id="root">
    姓:<input type="text" v-model="lastName"> <br><br>
    名: <input type="text" v-model="firstName"> <br><br>
    全名:{{fullName}}
</div>
<script>
    Vue.config.productionTip=false;
    new Vue({
        el:"#root",
        data:{
            lastName:"张",
            firstName:"三"
        },
        computed:{
            fullName(){
                console.log("get被调用了~~~")
                return this.lastName+"-"+this.firstName
            }
        }
    })
</script>
</body>
</html>

在这里插入图片描述
千万不能将fullName理解成函数调用,fullName是vm的属性

监视属性

请添加图片描述

第一种普通写法

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>监视属性</title>
    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
</head>
<body>
<div id="root">
    <h1>今天天气很{{isActive?cool:hot}}</h1>
    <button @click="toggleWeather">切换天气</button>
</div>
<script>
    Vue.config.productionTip=false;
    new Vue({
        el:"#root",
        data:{
            cool:"凉爽",
            isActive:true,
            hot:"炎热"
        },
        methods:{
            toggleWeather(){
                console.log("天气变化了,现在是:"+(this.isActive?this.hot:this.cool)+",原来是"+(this.isActive?this.cool:this.hot))
                this.isActive=!this.isActive
            }
        }

    })
</script>
</body>
</html>

第二种用计算属性的写法

加上控制台输出

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>天气案例</title>
    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
</head>
<body>
    <div id="root">
        <h1>今天天气很{{weather}}</h1>
        <button @click="toggleWeather">切换天气</button>
    </div>
<script>
    Vue.config.productionTip=false;
    new Vue({
        el:"#root",
        data:{
            isHot:true
        },
        computed:{
            weather(){
                return this.isHot?"炎热":"凉爽"
            }
        },
        methods:{
            toggleWeather(){
                console.log("天气变化了,现在是:"+(this.isHot?"凉爽":"炎热")+",原来是"+(this.isHot?"炎热":"凉爽"))
                this.isHot=!this.isHot
            }
        }
    })
</script>
</body>
</html>

没有控制台输出

在绑定事件时候,@xxx=“yyy” ,调用函数是一个语句时候,yyy可以直接写成语句

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>天气案例</title>
    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
</head>
<body>
<div id="app">
    <h1>今天天气很{{info}}</h1>
    <!-- 绑定事件的时候:@xxx="yyy"  yyy可以写一些简单的语句-->
    <button @click="isHot=!isHot">切换天气</button>
</div>
<script>
    Vue.config.productionTip=false;
    new Vue({
        el:"#app",
        data:{
            isHot:true
        },
        computed:{
            info(){
                return this.isHot?"炎热":"凉爽"
            }
        }
    })
</script>
</body>
</html>

第三种用监视属性写

监视属性

监视属性watch:

  1. 当被监视的属性变化时,回调函数自动调用,进行相关操作
  2. 监视的属性必须存在,才能进行监视!!!
  3. 监视的两种写法:
    (1)new Vue时传入watch属性
    (2)通过vm.$watch()进行监视

监视属性第一种写法

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>天气案例-监视属性</title>
  <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
</head>
<body>
  <div id="root">
    今天天气很{{weather}} <br>
    <button @click="toggleWeather">切换天气</button>
  </div>
</body>
<script>
  new Vue({
    el:"#root",
    data:{
      isHot:true
    },
    computed:{
      weather(){
        return this.isHot?"炎热":"凉爽"
      }
    },
    methods:{
      toggleWeather(){
        this.isHot=!this.isHot
      }
    },
    watch:{
      isHot:{
        immediate:true,  //初始化时候,调用handler一下
        //handler什么时候调用?在isHot发生变化时候
        handler(newValue,oldValue){
          console.log("isHot被修改了,修改后的值为:"+newValue+",修改前的值为:"+oldValue);
        }
      },
      //不仅data中的属性可以使用监视,计算属性也可以使用
      weather:{
        handler(newValue,oldValue){
          console.log("weather被修改了,修改后的值为:"+newValue+",修改前的值为:"+oldValue);
        }
      }
    }
  })
</script>
</html>

请添加图片描述

监视属性第二种写法

当创建实例时候不知道要监测谁,后续根据用户行为是否监视再进行添加

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>天气案例-监视属性</title>
  <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
</head>
<body>
  <div id="root">
    今天天气很{{weather}} <br>
    <button @click="toggleWeather">切换天气</button>
  </div>
</body>
<script>
   const vm=new Vue({
     el:"#root",
     data:{
       isHot:true
     },
     computed:{
       weather(){
         return this.isHot?"炎热":"凉爽"
       }
     },
     methods:{
       toggleWeather(){
         this.isHot=!this.isHot
       }
     }
   })
   
   vm.$watch("isHot",{
     immediate:true,
     handler(newValue,oldValue){
       console.log("isHot修改了,修改后值为:"+newValue+",修改前值为"+oldValue);
     }
   })
</script>
</html>

深度监视

深度监视:
(1)Vue中的watch默认不监测对象内部值的改变(一层)
(2)配置deep:true可以监测对象内部值改变(多层)
备注:
(1)Vue自身可以监测对象内部值的改变,但Vue提供的watch默认不可以!
(2)使用watch时根据数据的具体结构,决定是否采用深度监视

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>天气案例-深度监视</title>
  <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
</head>
<body>
  <div id="root">
    a的值是:{{numbers.a}} <br>
    <button @click="numbers.a++">点我让a+1</button>
    <hr>
    b的值是:{{numbers.b}}  <br>
    <button @click="numbers.b++">点我让b+1</button>
    
  </div>
</body>
<script>
  new Vue({
    el:"#root",
    data:{
      numbers:{
        a:1,
        b:1
      }
    },
    watch:{
      //监视多级结构中某个属性的变化
      'numbers.a':{
        handler(){
          console.log("a被改变了");
        }        
      },
      //监视多级结构中所有属性的变化
      numbers:{
        deep:true,
        handler(){
          console.log("numbers改变了");
        }
      }
    }
  })
</script>
</html>

请添加图片描述

监视属性简写

监视属性第一种方式简写

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>天气案例-监视属性</title>
  <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
</head>
<body>
  <div id="app">
    今天天气很{{weather}} <br>
    <button @click="isHot=!isHot">切换天气</button>
  </div>
</body>
<script>
  new Vue({
    el:"#app",
    data:{
      isHot:true
    },
    computed:{
      weather(){
        return this.isHot?"炎热":"凉爽"
      }
    },
    watch:{
      //监视属性中没有immediate,deep等属性,只有handler时候可以简写
      isHot(newValue,oldValue){
        console.log("isHot被修改了,修改后:"+newValue+",修改前为:"+oldValue);
      }
    }
  })
</script>
</html>

监视属性第二种方式简写

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>天气案例-监视属性</title>
  <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
</head>
<body>
  <div id="app">
    今天天气很{{weather}} <br>
    <button @click="isHot=!isHot">切换天气</button>
  </div>
</body>
<script>
  const vm=new Vue({
    el:"#app",
    data:{
      isHot:true
    },
    computed:{
      weather(){
        return this.isHot?"炎热":"凉爽"
      }
    },
  })
  vm.$watch("isHot",function(newValue,oldValue){
      //监视属性中没有immediate,deep等属性,只有handler时候可以简写
      console.log("isHot被修改了,修改后:"+newValue+",修改前为:"+oldValue);
      
  })
</script>
</html>

请添加图片描述

watch与computed对比

姓名案例-使用监视属性写

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>姓名案例-监视属性</title>
  <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
</head>
<body>
  <div id="root">
    姓:<input type="text" v-model="lastName">  <br><br>
    名:<input type="text" v-model="firstName">  <br><br>
    全名:{{fullName}}
  </div>
</body>
<script>
  new Vue({
    el:"#root",
    data:{
      lastName:"张",
      firstName:"三",
      fullName:"张-三"
    },
    watch:{
      lastName(newValue){
        this.fullName=newValue+"-"+this.firstName
      },
      firstName(newValue){
        this.fullName=this.lastName+"-"+newValue
      }
    }
  })
</script>
</html>

请添加图片描述
明显感觉计算属性写出来的方便些,但是若换成以下的例子,又会不一样了

姓名案例-1s之后再显示

监视属性
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>姓名案例-1s后显示</title>
  <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
</head>
<body>
  <div id="app">
    姓:<input type="text" v-model="lastName"> <br><br>
    名:<input type="text" v-model="firstName"> <br><br>
    全名:{{fullName}}
  </div>
</body>
<script>
  new Vue({
    el:"#app",
    data:{
      lastName:"张",
      firstName:"三",
      fullName:"张-三"
    },
    watch:{
      lastName(newValue){
        setTimeout(()=>{
          //函数为箭头函数,所以没有this,this只能往上层去找,上层是lastName,他的this是Vue,所以能执行成功。
          //且必须写成箭头函数,否则this指代的是window
          //因为定时器执行的回调是由js引擎执行的,所以写成普通函数就是this指代就是window
          this.fullName=newValue+"-"+this.firstName
        },1000)
      },
      firstName(newValue){
        setTimeout(()=>{
          this.fullName=this.lastName+"-"+newValue
        },1000)
      }
    }
  })
</script>
</html>

请添加图片描述

计算属性
computed:{
      fullName(){
        setTimeout(()=>{
          console.log(this);
          return this.lastName+"-"+this.firstName
        },1000)
      }
    }

计算属性这样写的话是实现不了的,因为return给的是箭头函数,而不是给fullName,这样的话fullName就没有返回值了,因此,这样写就是错的了。

总结:computed和watch之间的区别

  1. computed能完成的功能,watch都能完成
  2. watch能完成的功能,computed不一定能完成。例如:watch可以进行异步操作

两个重要的小原则:
1.所有被Vue管理的函数,最好写成普通函数,这样this的指向才是 vm 或 组件实例对象
2.所有不被Vue管理的函数(定时器的回调函数,ajax的回调函数,Promise的回调函数等)最好写成箭头函数,这样this的指向才是vm或组件实例对象

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

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

相关文章

【信号处理】卡尔曼(Kalman)滤波(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客 &#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜…

Java内部类分类

文章目录内部类分类局部内部类的使用匿名内部类成员内部类静态内部类一个类的内部又完整的嵌套了另一个类结构。被嵌套的类称为内部类(inner class),嵌套其他类的类称为外部类(outer class)。是我们类的第五大成员 思考:类的五大成员是哪些? - 属性、方法、构造器、代码块、内…

Windows安装Git教程(2022.11.18 Git2.38.1)

&#xff08;1&#xff09;首先前往Git官网&#xff0c;下载安装文件&#xff1a; &#xff08;2&#xff09;打开安装程序&#xff0c;把Only show new options的勾去掉&#xff0c;点击Next&#xff1a; &#xff08;3&#xff09;此处可以选用默认设置&#xff0c;也可以勾…

ProCAST一键导出有限元模型的几何拓扑和属性信息

第一次将ProCast有限元后处理中的数据导出&#xff0c;当时没有经验&#xff0c;方法比较粗暴&#xff0c;详情见文章&#xff1a;ProCast导出节点应力数据并格式化。 最近发现了一种更高效的数据导出“新姿势”&#xff0c;能够快速得到有限元模型的几何拓扑和节点属性数据&a…

电科大离散数学-2-命题逻辑-2

目录 2.7 范式 2.7.1 范式的定义 2.7.2 范式存在定理 2.8 主析取范式和主合取范式 2.8.1 极小项和极大项的定义和编码 2.8.2 极小项和极大项的性质 2.8.3 主析取范式和主合取范式的定义 2.8.4 主范式求解定理 2.8.5 真值表技术 2.8.6 范式的相互转化 2.8.7 主范式的…

[附源码]Python计算机毕业设计jspm计算机学院党员积分管理系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

Markdown 教程之如何在 Markdown 文档中添加流程图、方程式和交互式图形

您是否遇到过想要在 Markdown 文档中包含一些简单图表或方程式的场景?如果这是一次性的事情,你可以做的是使用 Power Point 或在线生成器,将图表保存为图像并将其放在你的文章中。这种方法的缺点是背景颜色可能与您的文章不匹配,并且进行更改非常耗时。 Markdown 扩展是第…

[附源码]java毕业设计柠檬电动车租赁系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

java selenium (五) 元素定位大全

页面元素定位是自动化中最重要的事情&#xff0c; selenium Webdriver 提供了很多种元素定位的方法。 测试人员应该熟练掌握各种定位方法。 使用最简单&#xff0c;最稳定的定位方法。 自动化测试步骤 在自动化测试过程中&#xff0c; 测试程序通常的操作页面元素步骤 1. 找到…

【快速上手系列】内网穿透(natapp)的快速上手和简单使用教程

【快速上手系列】内网穿透&#xff08;natapp&#xff09;的快速上手和简单使用教程 使用 1、natapp配置 网址 https://natapp.cn/ 官方文档 https://natapp.cn/article/natapp_newbie &#xff08;这个也挺言简意赅的&#x1f60e;&#xff09; 点击下载或向下划到客户端…

读写算杂志社读写算编辑部读写算杂志2022年第30期目录

课程改革 新课程理念下学生自主学习能力培养策略探究 陈璟; 1-3 新课改下初中语文教学中名著阅读教学策略探究 赵璇; 4-6 教育创新《读写算》投稿&#xff1a;cn7kantougao163.com 多媒体辅助下初中物理教学方法改革策略分析 张鹤贵; 7-9 关于互联网环境下小学美术课堂教学模式…

LVGL | 1.LVGL PC模拟器之CodeBlocks

LVGL的学习与使用 LVGL | 1.LVGL PC模拟器之CodeBlocks 1.资源 1-1.主页&#xff1a;https://lvgl.io/ 1-2.LVGL | LVGL简介之中文文档 1-3.LVGL | LVGL快速概述之中文文档 1-4.问题反馈&#xff1a;https://forum.lvgl.io/ 1-5.LVGL开源GUI零基础入门课程(韦东山监制) 教程基…

【附源码】计算机毕业设计JAVA沙县小吃点餐系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; Springboot mybatis Maven Vue 等等组成&#xff0c;B/…

通信电源专业技术交流

UPS电源 •UPS为交流不间断供电电源系统的英文缩写。• UPS系统原理&#xff1a;UPS系统由整流模块、逆变器、蓄电池、静态开关等组成。整流模块&#xff08;AC/DC&#xff09;和逆变器&#xff08;DC/AC&#xff09;都为能量变换装置&#xff0c;蓄电池为储能装置。除此还有间…

docker部署Jenkins与任务创建【七千字超详细指南】

大家好&#xff0c;我是早九晚十二&#xff0c;目前是做运维相关的工作。写博客是为了积累&#xff0c;希望大家一起进步&#xff01; 我的主页&#xff1a;早九晚十二 文章目录什么是jenkins&#xff1f;jenkins的功能依赖环境使用docker快速搭建查看版本下载jenkins镜像使用d…

搞个网站需要多少钱【网站费用】

想搞一个网站&#xff0c;我们先了解一下搞个网站需要多少钱&#xff1f;网站建设费用主要包括&#xff1a;网站搭建、服务器费用&#xff08;有些是免费的&#xff09;、域名费用以及其他杂费。对于刚成立网站我们可以选择用自助建站方案来进行搭建网站&#xff0c;因为我们自…

【freeRTOS】操作系统之五.-内存管理

\FreeRTOS\Source\portable\MemMang下提供了5中内存分配机制的实现 一、配置FreeRTOS内存大小 在FreeRTOSConfig.h头文件中宏configTOTAL_HEAP_SIZE用于配置内核可用的RAM大小。 在heap1.c, heap2.c, heap4.c源文件中&#xff0c;分配的内存实际上是用一个静态数组ucHeap来表…

阿里后端优化这么恐怖?看完这20W字Java性能实战经验手册,最少P7

学习是一种基础性的能力。然而&#xff0c;“吾生也有涯&#xff0c;而知也无涯。”&#xff0c;如果学习不注意方法&#xff0c;则会“以有涯随无涯&#xff0c;殆矣”。 学习就像吃饭睡觉一样&#xff0c;是人的一种本能&#xff0c;人人都有学习的能力。我们在刚出生的时候…

通过rpm安装MySQL8.0

前文 下载虚拟机&#xff0c;安装Linux&#xff08;Centos7发行版&#xff09;关闭SELinux服务 &#xff08;安全模块&#xff0c;容易跟其他程序冲突&#xff0c;建议关闭&#xff09;替换yum源 &#xff08;加快下载依赖速度&#xff09;安装MySQL 关闭SELinux 进入vi /ec…

代码随想录——冗余连接(并查集)

题目 树可以看成是一个连通且 无环 的 无向 图。 给定往一棵 n 个节点 (节点值 1&#xff5e;n) 的树中添加一条边后的图。添加的边的两个顶点包含在 1 到 n 中间&#xff0c;且这条附加的边不属于树中已存在的边。图的信息记录于长度为 n 的二维数组 edges &#xff0c;edges[…