Vue基础超详细

news2025/1/19 14:35:02

目录

一、Vue的简介

1、什么是vue

 2、vue 的特性(数据驱动视图、双向数据绑定)

 3、MVVM及其工作原理

 二、Vue的基本实用

1、基本使用步骤

 2、配置Vue的调试工具

3、指令与过滤器

3.1内容渲染指令

 4、属性绑定指令

 5、使用Javascript表达式

 6、事件绑定指令

详细用法可以搜索:click、input、keyip的区别

7、事件对象

 8、事件修饰符

 9、按键修饰符

10、双向数据绑定指令

11、v-model的修饰符

12、条件渲染指令

 12.1 v-if配套指令

​编辑

 13、列表渲染指令 v-for

三、插件下载样式提示:

​编辑

四、案例演示

品牌列表案例1.0(不含过滤器)

注:过滤器在Vue3.0中没有了

查看一些label的for属性

品牌列表案例2.0(含过滤器)


一、Vue的简介

1、什么是vue

 2、vue 的特性(数据驱动视图、双向数据绑定)

 

 

 3、MVVM及其工作原理

 

 

 

 二、Vue的基本实用

1、基本使用步骤

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
    <!-- 希望Vue能够控制下面这个div,帮我们在把数据填充到div内部 -->
    <div id="app">{{username}}</div>

    <!-- 导入Vue的库文件 ,在window全局就有了Vue这个构造函数-->
    <script src="./lib/vue-2.6.12.js"></script>

    <!-- 创建Vue的实例对象 -->
    <script>
        // 创建Vue的实例对象
        const vm = new Vue({
            // el(element)属性是固定的写法,表示当前vm实例要控制界面上的哪个区域,接收的值是一个选择器
            el:'#app',
            // data对象就是要渲染到页面上的数据
            data:{
                username: 'lisi'
            }
        })
    </script>
</body>
</html>

 2、配置Vue的调试工具

详细安装看另外文档(Edge版本)

3、指令与过滤器

3.1内容渲染指令

 

 

 

 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
    <!-- 希望Vue能够控制下面这个div,帮我们在把数据填充到div内部 -->
    <div id="app">
        <p v-text="username"></p>
        <!-- 缺点v-text标签会覆盖元素内部原有的内容 -->
        <p v-text="gender">性别:</p>
        <!-- 分割线 -->
        <hr>
        <p>姓名: {{username}}</p>
        <p>性别: {{gender}}</p>
        <!-- 分割线 -->
        <hr>
        <div v-text="info"></div>
        <div>{{info}}</div>
        <!-- v-html可以把带有标签的字符串渲染成真正的字符串 -->
        <div v-html="info"></div>
        
    </div>

    <!-- 导入Vue的库文件 ,在window全局就有了Vue这个构造函数-->
    <script src="./lib/vue-2.6.12.js"></script>

    <!-- 创建Vue的实例对象 -->
    <script>
        // 创建Vue的实例对象
        const vm = new Vue({
            // el(element)属性是固定的写法,表示当前vm实例要控制界面上的哪个区域,接收的值是一个选择器
            el:'#app',
            // data对象就是要渲染到页面上的数据
            data:{
                username: 'zhangsan',
                gender:'女',
                info: '<h4 style="color:red;font-weight:bold;">欢迎大家来学习Vue.js</h4>'
            }
        })
    </script>
</body>
</html>

 4、属性绑定指令

如果需要为元素的属性动态绑定属性值,则需要用到v-bind属性绑定指令(简写形式的是直接打冒号:)

 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
    <!-- 希望Vue能够控制下面这个div,帮我们在把数据填充到div内部 -->
    <div id="app">
        <!--  v-bind:placeholder或者 :placeholder -->
        <!-- 使用v-bind指令,为input的placeholder动态绑定属性值 -->
        <input type="text" v-bind:placeholder="tips">
        <!-- 简写形式 -->
        <input type="text" :placeholder="tips">
        <hr>
        <!-- 使用v-bind指令,为img的src动态绑定属性值 -->
        <img v-bind:src="photo" alt="" style="width:150px">
        <!-- 简写形式 -->
        <img :src="photo" alt="" style="width:150px">
    </div>

    <!-- 导入Vue的库文件 ,在window全局就有了Vue这个构造函数-->
    <script src="./lib/vue-2.6.12.js"></script>

    <!-- 创建Vue的实例对象 -->
    <script>
        // 创建Vue的实例对象
        const vm = new Vue({
            // el(element)属性是固定的写法,表示当前vm实例要控制界面上的哪个区域,接收的值是一个选择器
            el:'#app',
            // data对象就是要渲染到页面上的数据
            data:{
                tips:'请输入用户名',
                photo:'https://v2.cn.vuejs.org/images/logo.svg'
            }
        })
    </script>
</body>
</html>

 

 5、使用Javascript表达式

<div>1 + 2 的结果是:{{1+2}}</div>
<div>{{tips}}反转的结果是:{{tips.split('').reverse().join('')}}</div>
<div v-bind:title="'box'+index">这是一个div</div>

 6、事件绑定指令

  <!-- 在绑定事件处理函数的时候,可以使用()传递参数 -->

        <!-- v-on:的指令可以被简写为@ -->

        <!-- 简写形式把v-on:简写为@符号 -->

详细用法可以搜索:click、input、keyip的区别

v-on:click

v-on:input

v-on:keyup:@keyup是一些按键松开的操作,比如
@keyup.enter表示按下回车键松开后触发
@keyup.left表示鼠标左键按下松开后触发
@keyup.right表示鼠标按下右键松开后触发
@keyup.delete表示按下删除键松开后触发

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
    <!-- 希望Vue能够控制下面这个div,帮我们在把数据填充到div内部 -->
    <div id="app">
        <p>count的值是{{count}}</p>
        <!-- 在绑定事件处理函数的时候,可以使用()传递参数 -->
        <!-- v-on:的指令可以被简写为@ -->
        <!-- 简写形式把v-on:简写为@符号 -->
        <button v-on:click="add(2)">+1</button>
        <button @click="add(2)">+1</button>
        <!-- 如果事件处理函数中的代码足够简单,只有一行代码,则可以简写到行内 -->
        <button @click="count += 1">+1</button>

        <button v-on:click="sub">-1</button>
        <button @click="sub">-1</button>


    </div>

    <!-- 导入Vue的库文件 ,在window全局就有了Vue这个构造函数-->
    <script src="./lib/vue-2.6.12.js"></script>

    <!-- 创建Vue的实例对象 -->
    <script>
        // 创建Vue的实例对象
        const vm = new Vue({
            // el(element)属性是固定的写法,表示当前vm实例要控制界面上的哪个区域,接收的值是一个选择器
            el:'#app',
            // data对象就是要渲染到页面上的数据
            data:{
                count:0
            },
            // methods的作用,就是定义事件的处理函数
            methods:{
                add:function(n){
                    console.log("ok")
                    // 打印的话可以看到count字段
                    console.log(vm)
                    console.log(this)
                    // true
                    console.log(vm==this)
                    // vm.count++
                    // this.count++
                    this.count+=n
                },
                // 简写
                sub(){
                    console.log("delete")
                    this.count--
                }
                
            }
        })
    </script>
</body>
</html>

7、事件对象

$event的应用场景:如果默认的事件对象e被覆盖了,则可以手动传递一个$event

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
    <!-- 希望Vue能够控制下面这个div,帮我们在把数据填充到div内部 -->
    <div id="app">
        <p>count 的值是:{{count}}</p>
        <!-- 如果count是偶数,则按钮背景变成红色,否则,取消背景颜色 -->
        <!-- vue提供了内置变量,名字叫做$event,它就是原生DOM的事件对象e -->
        <!-- 不传参数默认e -->
        <!-- <button @click="add">+N</button> -->
        <button @click="add(1,$event)">+N</button>
    </div>

    <!-- 导入Vue的库文件 ,在window全局就有了Vue这个构造函数-->
    <script src="./lib/vue-2.6.12.js"></script>

    <!-- 创建Vue的实例对象 -->
    <script>
        // 创建Vue的实例对象
        const vm = new Vue({
            // el(element)属性是固定的写法,表示当前vm实例要控制界面上的哪个区域,接收的值是一个选择器
            el:'#app',
            // data对象就是要渲染到页面上的数据
            data:{
                count:0
            },
            methods:{
                // 没有传参打e默认传整个事件
                add(n,e){
                    this.count+=n
                    console.log(e)

                    // 判断this.count的值是否为偶数
                    if(this.count%2===0){
                        // 偶数
                        e.target.style.backgroundColor = 'red'
                    }else{
                        e.target.style.backgroundColor = ''

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

 8、事件修饰符

 9、按键修饰符

 清空

 clearInput(e){
     e.target.value=''
     console.log("触发了clearInput方法")
  }

10、双向数据绑定指令

v-bind是属于单向绑定

v-model属于双向绑定

看代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
    <!-- 希望Vue能够控制下面这个div,帮我们在把数据填充到div内部 -->
    <div id="app">
        <p>用户的名字是:{{username}}</p>
        <input type="text" v-model="username">
        <hr>
        <!--这个不能实时更新 属于单项绑定 -->
        <input type="text" :value="username">
        <hr>
        <!-- v-model只能和表单属性使用 比如:input输入框 、textarea文字框、select -->
        <!-- <div v-model="username"></div> -->
        <p>{{city}}</p>
        <select v-model="city">
            <option value="请选择城市">请选择城市</option>
            <option value="北京">北京</option>
            <option value="上海">上海</option>
            <option value="广州">广州</option>

        </select>
    </div>

    <!-- 导入Vue的库文件 ,在window全局就有了Vue这个构造函数-->
    <script src="./lib/vue-2.6.12.js"></script>

    <!-- 创建Vue的实例对象 -->
    <script>
        // 创建Vue的实例对象
        const vm = new Vue({
            // el(element)属性是固定的写法,表示当前vm实例要控制界面上的哪个区域,接收的值是一个选择器
            el:'#app',
            // data对象就是要渲染到页面上的数据
            data:{
                username: 'lisi',
                city:'请选择城市'
            }
        })
    </script>
</body>
</html>

11、v-model的修饰符

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
    <!-- 希望Vue能够控制下面这个div,帮我们在把数据填充到div内部 -->
    <div id="app">
        <!-- input输入的字符串 -->
        <input type="text" v-model="n1"> + <input type="text" v-model="n2"> = <span>{{n1 + n2}}</span>
        <!-- 正确写法 -->
        <input type="text" v-model.number="n1"> + <input type="text" v-model.number="n2"> = <span>{{n1 + n2}}</span>
        <hr>
                <!-- 去除前后的空格 -->
        <input type="text" v-model.trim="username">
        <button @click="showName">获取用户名</button>
        <hr>
        <input type="text" v-model="username">
    </div>

    <!-- 导入Vue的库文件 ,在window全局就有了Vue这个构造函数-->
    <script src="./lib/vue-2.6.12.js"></script>

    <!-- 创建Vue的实例对象 -->
    <script>
        // 创建Vue的实例对象
        const vm = new Vue({
            // el(element)属性是固定的写法,表示当前vm实例要控制界面上的哪个区域,接收的值是一个选择器
            el:'#app',
            // data对象就是要渲染到页面上的数据
            data:{
                username: 'lisi',
                n1: 1,
                n2: 2
            },
            methods: {
                showName(){
                    // console.log('用户名是:"${this.username}"')
                    // 这里是反引号在数字1旁边
                    console.log(`用户名是:"${this.username}"`)

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

12、条件渲染指令

 

 

 12.1 v-if配套指令

 13、列表渲染指令 v-for

 

 unshift() 方法可向数组的开头添加一个或更多元素,并返回新的长度。

 将新项添加到数组末尾,请使用 push() 方法。

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <!-- 在页面中声明一个将要被 vue 所控制的 DOM 区域 -->
  <div id="app">

    <!-- 添加用户的区域 -->
    <div>
      <input type="text" v-model="name">
      <button @click="addNewUser">添加</button>
    </div>

    <!-- 用户列表区域 -->
    <ul>
      <li v-for="(user, index) in userlist" :key="user.id">
        <input type="checkbox" />
        姓名:{{user.name}}
      </li>
    </ul>
  </div>

  <script src="./lib/vue-2.6.12.js"></script>
  <script>
    const vm = new Vue({
      el: '#app',
      data: {
        // 用户列表
        userlist: [
          { id: 1, name: 'zs' },
          { id: 2, name: 'ls' }
        ],
        // 输入的用户名
        name: '',
        // 下一个可用的 id 值
        nextId: 3
      },
      methods: {
        // 点击了添加按钮
        addNewUser() {
          // unshift() 方法可向数组的开头添加一个或更多元素,并返回新的长度。
          // 将新项添加到数组末尾,请使用 push() 方法。
          this.userlist.push({ id: this.nextId, name: this.name })
          this.name = ''
          this.nextId++
        }
      },
    })
  </script>
</body>

</html>

三、插件下载样式提示:

 vue提示

四、案例演示

品牌列表案例1.0(不含过滤器)

注:过滤器在Vue3.0中没有了

 

 

查看一些label的for属性

     <!-- label根据id,所以id要不一样 -->
     <!-- 使用v-if结合 v-else实现按需渲染 -->
 <label class="custom-control-label" :for="'cb'+item.id" v-if="item.status">已启用</label>
  <label class="custom-control-label" :for="'cb'+item.id" v-else>已禁用</label>

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <!-- 导入 bootstrap 的样式表 -->
    <!-- https://v4.bootcss.com/docs/components/forms/#switches -->
    <link rel="stylesheet" href="./lib/bootstrap.css" />
    
    <style>
      :root {
        font-size: 13px;
      }

      body {
        padding: 8px;
      }
    </style>
  </head>
  <body>
    <div id="app">
      <!-- 卡片区域 -->
      <div class="card">
        <h5 class="card-header">添加品牌</h5>
        <div class="card-body">
          <!-- 添加品牌的表单 -->
          <!-- from表单元素有submit事件 得阻止表单的提交行为 不然点击button就会刷新网页 -->
          <form class="form-inline" @submit.prevent="add">
            <div class="input-group mb-2 mr-sm-2">
              <div class="input-group-prepend">
                <div class="input-group-text">品牌名称</div>
              </div>
              <!-- 文本输入框 -->
              <input type="text" class="form-control" placeholder="请输入品牌名称"
              v-model.trim="brand" />
            </div>

            <!-- 提交表单的按钮 -->
            <button type="submit" class="btn btn-primary mb-2" >添加品牌</button>
          </form>
        </div>
      </div>

      <!-- 品牌列表 -->
      <table class="table table-bordered table-striped mt-2">
        <thead>
          <tr>
            <th>#</th>
            <th>品牌名称</th>
            <th>状态</th>
            <th>创建时间</th>
            <th>操作</th>
          </tr>
        </thead>
        <!-- 表格的主体区域 -->
        <tbody>
          <!-- TODO:循环渲染表格的每一行数据 -->
          <tr v-for="item in list" :key="item.id">
            <td>{{item.id}}</td>
            <td>{{item.name}}</td>
            <td>
              <div class="custom-control custom-switch">
                <!-- 使用v-model 可以实现双向绑定-->
                <input type="checkbox" class="custom-control-input" :id="'cb'+item.id" 
                v-model="item.status">
                <!-- label根据id,所以id要不一样 -->
                <!-- 使用v-if结合 v-else实现按需渲染 -->
                <label class="custom-control-label" :for="'cb'+item.id" v-if="item.status">已启用</label>
                <label class="custom-control-label" :for="'cb'+item.id" v-else>已禁用</label>


              </div>
            </td>
            <td>{{item.time}}</td>
            <td>
              <a href="javascript:;" @click="remove(item.id)">删除</a>
            </td>
          </tr>
        </tbody>
      </table>
    </div>
    <script src="./lib/vue-2.6.12.js"></script>
    <script>
      const vm = new Vue({
        el:'#app',
        data:{
          // 用户输入的品牌的名称
          brand:'',
          // nextId 是下一个,可用的id
          nextId: 4,
          // 品牌列表的数据
          list:[
            {id:1,name:'宝马',status:true,time:new Date()},
            {id:2,name:'奔驰',status:false,time:new Date()},
            {id:3,name:'奥迪',status:true,time:new Date()},

          ]
        },
        methods: {
          remove(id){
            console.log(id)
             this.list= this.list.filter(item=>item.id !==id)
            
          },
        //   组织表单的默认提交行为后,触发add方法
          add(){
            // 如果判断到brand的值为空字符串,则return出去
            if(this.brand==='') return alert("必须填写品牌名称")

            // 如果没有被return出去,应该执行添加的逻辑
            // 1.先把要添加的品牌对象,整理出来
            // 2.往this.list数组中push步骤1中得到的对象
            // 3.清空this.brand;让nextId 自增+1
          const obj={
            id:this.nextId,
            name:this.brand,
            status:true,
            time:new Date()
          }
          // unshift() 方法可向数组的开头添加一个或更多元素,并返回新的长度。
          // 将新项添加到数组末尾,请使用 push() 方法。
          this.list.push(obj)
          this.brand=''
          this.nextId++
          
          console.log(this.brand)
          }
        },
      })
    </script>
  </body>
</html>

品牌列表案例2.0(含过滤器)

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

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

相关文章

“ 念旧真的是一件很无趣的事 “

想要的都拥有 得不到的都释然 My Jinji音频&#xff1a;00:0006:40 | 01 | 想通就释然 想不通就茫然 每天不停的循环 | 02 | 终于理解你曾经说的 “有些人不能做朋友” 现在我和你一样惨 | 03 | 村上春树说过&#xff1a; “如果一直想见谁 肯定迟早会见到” 但是他还…

android入门之创建service

1. 前言 Service意为&#xff1a;服务&#xff0c;是一种运行时用户不可见的活动机制。可以理解为它是一个没有布局的Activity。 典型的场景&#xff1a;音乐后台播放、后台下载。 Service不同于子线程&#xff0c;Service是运行在主线程中的&#xff0c;因此不能进行耗时操作。…

电线电缆行业MES系统,帮助企业快速应对订单变化,减少资金占用

电线电缆行业生产管理现状 电线电缆行业是典型的重资产行业&#xff0c;原材料成本高、产品价值高、资金占用大、产品规格型号多达数万种&#xff0c;BOM管理繁杂&#xff0c;现场管理粗放&#xff0c;订单经常会合并或拆分生产&#xff0c;对排程要求高。 1、计划制定不准确…

无分类编址CIDR

无分类编址CIDR 构成超网 将多个子网聚合成一个较大的子网&#xff0c;叫做构成超网&#xff0c;或路由聚合。 方法&#xff1a;将网络前缀缩短&#xff08;所有网络地址取交集&#xff09;。 例题 某路由表中有转发接口相同的4条路由表项&#xff0c;其目的网络地址分别为…

Unicode编码的理解

1、Unicode 这个单词可以拆解为两部分&#xff0c;一个是Uni ,即英文单词unique的意思&#xff0c;也就是唯一的意思。code就是编码的意思。 GBK编码的理解_sgmcy的博客-CSDN博客 在上节博客里面&#xff0c;介绍了ASCII编码、ASCII编码表的扩展以及我们国家汉字的GBK编码。 …

详解OpenCV的椭圆曲线点坐标近似计算函数ellipse2Poly()

详解OpenCV的椭圆曲线点坐标近似计算函数ellipse2Poly() 函数ellipse2Poly()可用于近似计算椭圆曲线的像素坐标。 而前面介绍过的函数ellipse()则是直接在图像中绘制椭圆&#xff0c;详情见 https://www.hhai.cc/thread-174-1-1.html 函数ellipse2Poly()的C原型如下&#xff…

【Shell】find文件查找

语法格式 find [路径] [选项] [操作]选项参数对照表 常用选项 -name 查找/etc目录下以conf结尾的文件ind /etc -nam -iname 查找当前目录下文件名为aa的文件,不区分大小写 find . -iname aa -user 查找文件属主为hdfs的所有文件find . -user hdfs -group 查找文件属组为yarn的…

虹科方案 | 解决连接到IEEE 1588高可用性网络的SCADA系统的NTP同步参考问题

目前&#xff0c;各个行业都在朝着以太网融合的趋势发展&#xff0c;近年来也出现了一些可用于增强标准以太网弹性的技术创新&#xff0c;并被用作运营&#xff08;OT&#xff09;和信息技术&#xff08;IT)的通用链路层。电气等具有高可用性和严格时序要求的关键领域推动了这些…

1362:家庭问题(family)

1362&#xff1a;家庭问题(family) 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 6732 通过数: 3529 【题目描述】 有n个人&#xff0c;编号为1,2,……n&#xff0c;另外还知道存在K个关系。一个关系的表达为二元组&#xff08;α&#xff0c;β&#xff09;形式…

GBK编码的理解

1、我们学程序的时候&#xff0c;所熟知的ASCII码&#xff0c;就是一种编码方式 计算机底层&#xff0c;就只认识0和1. 举个例子&#xff0c;以3bit为例&#xff1a; 所以&#xff0c;如果是000的话&#xff0c;可以对应数字0 如果是001的话&#xff0c;可以对应数字1 。。…

非零基础自学Golang 第13章 并发与通道 13.4 select 13.5 小结

非零基础自学Golang 文章目录非零基础自学Golang第13章 并发与通道13.4 select13.4.1 select作用13.4.2 超时13.4.3 死锁13.5 小结第13章 并发与通道 13.4 select Go语言中&#xff0c;通过关键字select可以监听channel上的数据流动。 select的用法和switch非常相似&#xf…

Python中的基本数据类型

文章目录前言一、字符串类型字符串表示方法二、数字类型1. 整数2.浮点数3.复数三、布尔类型总结前言 我们一般在电脑中存储的数据有多种数据类型。比如下图这张员工工资表&#xff1a; 表中员工姓名可以用字符串类型存储&#xff08;比如"李世民"、“侯君集”&#…

Hadoop学习----HDFS

文件系统 文件系统&#xff1a;是一种存储和组织数据的方法&#xff0c;实现数据的存储、分级组织、访问和获取等操作&#xff0c;使得用户对文件访问和查找变得容易。文件系统使用树形目录的抽象逻辑概念代替了硬盘等物理设备使用数据块的概念&#xff0c;用户不必关心数据底…

实验三 进程的互斥与同步

文章目录一、 实验目的二、 实验原理三、实验内容四、我的代码内容和现象1、philosopher12、philosopher2这个程序不会发生死锁&#xff0c;因为五、课后习题&#xff1a;1.什么是死锁&#xff1f;产生死锁的原因和必要条件是什么&#xff1f;2.实验中给出的伪代码流程&#xf…

Problem Set 3

1Lagrange Duality Formulate the Lagrange dual problem of the following linear programming prob-lem min cT rs.t.Ax 二b where a ∈R is variable,c ∈ R"&#xff0c;A ∈Rkn, b ∈ Rk. 解&#xff1a;设拉格朗日函数为L(x,λ)cTxλT(Ax−b)\mathcal{L}(x,\lambda)…

第十七章 webpack5项目搭建Vue-Cli(开发模式)

step1–创建项目目录 创建一个目录用来搭建vue-cli的项目 mkdir vue-cli cd vue-clistep2–初始化项目 初始化项目&#xff0c;生成一个package.json文件 npm init -ystep3–编写vue-cli的开发模式配置 新建目录 / |-config | |--webpack.dev.js | |--webpack.prod.js我…

USB TO SPI(上海同旺电子)调试器调试25LC020A

所需设备&#xff1a; 1、USB TO SPI(上海同旺电子)&#xff1b; 2、25LC020A 2Kb 2.5V SPI Serial EEPROM; Microchip 25LC020A 是一款 2 Kb 串行 EEPROM&#xff0c;采用行业标准串行外设接口 (SPI) 兼容串行总线。 该器件被组织为一个 256 x 8 位块&#xff0c;并针对消…

Java安全--CC7

在学CC7的时候我有这么几个疑问 1.为什么要两个LazyMap 2.hashCode那一步怎么计算的 3.为什么要remove yy 4.为什么put两个 我们可以先看一下CC7的链子是怎么走的: 其实分析链子还是从命令执行走到readObject比较好理解&#xff0c;虽然比较麻烦&#xff0c;比较繁琐&#xff0…

机器人机械臂运动学——逆运动学解算

1.情景概述 假设最一般的情况&#xff0c;我们的机械臂有六个自由度&#xff0c;那么从初始状态想要变化到目标的状态&#xff0c;一般情况下我们至少需要进行六次的变换&#xff0c;而这六次变换的矩阵参数隐含在整体的变换矩阵中。 根据之前的知识&#xff0c;左上角的3*3代表…

m基于隐马尔科夫模型(HMM)的手机用户行为预测(MMUB)算法matlab仿真

目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 隐马尔可夫模型&#xff08;Hidden Markov Model&#xff0c;HMM&#xff09;是一种统计模型&#xff0c;广泛应用在语音识别&#xff0c;词性自动标注&#xff0c;音字转换&#xff0c;概率文法…