Vue 核心(一)

news2025/2/25 13:27:44

文章目录

  • Vue 核心(一)
    • 一、 Vue 简介
      • 1、 概述
      • 2、 学前准备
      • 3、 第一个程序
    • 二、 模板语法
    • 三、 数据绑定
    • 四、 MVVM 模型
    • 五、 数据代理
      • 1、 defineProperty
      • 2、 理解数据代理
      • 3、 Vue中的数据代理
    • 六、 事件处理
      • 1、 事件的基本使用
      • 2、 键盘事件
    • 七、 计算属性与监视属性
      • 1、 计算属性的语法
      • 2、 计算属性的简写
      • 3、 监视属性
      • 4、 深度监视
      • 5、 监视属性简写

Vue 核心(一)

一、 Vue 简介

1、 概述

Vue是一套用于构建用户界面渐进式 JavaScript 框架。

渐进式:Vue 可以自底向上逐层的应用。

  • 简单应用:只需一个轻量小巧的核心库
  • 复杂应用:可以引入各式各样的 Vue 插件

如果说是JQuery是手工作坊,那么Vue.js就像是一座工厂,虽然Vue.js做的任何事情JQuery都可以做,但无论是代码量还是流程规范性都是前者较优。

Vue 的特点:

  1. 采用组件化模式,提供代码复用率、且让代码更好维护
  2. 声明式编码,让编码人员无需操作 DOM,提高开发效率
  3. 使用虚拟 DOM + 优秀的 Diff 算法,尽量复用 DOM 节点

官方网站地址:https://cn.vuejs.org/

我们在最开始学习时会通过script标签来直接引入 Vue;后期会使用脚手架来安装 Vue

2、 学前准备

学习 Vue 之前需要掌握的 JS 基础知识:

  • ES6语法规范
  • ES6模块化
  • 包管理器
  • 原型、原型链
  • 数组常用方法
  • axios
  • promise

3、 第一个程序

我们首先在资源下载处安装我们的 Vue.js ,然后在 HTML 文件中引入:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>初始Vue</title>
<!--    引入Vue-->
    <script src="../js/vue.js"></script>
</head>
<body>
<div id="root">
    <h1>Hello World</h1>
</div>
</body>
</html>

在提示中,要求我们安装 Dev 开发者工具:

VueDevTools

同时,我们还需要进行一些配置,来关闭生产提示:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>初始Vue</title>
<!--    引入Vue-->
    <script src="../js/vue.js"></script>
</head>
<body>
<div id="root">
    <h1>Hello World</h1>
</div>
<script type="text/javascript">
    Vue.config.productionTip = false;  // 阻止 Vue 在启动时生成生产提示
</script>
</body>
</html>

我们总共进行了三件事情:

  1. 下载开发版本的 Vue
  2. 安装了 Vue 开发者调试工具
  3. 关闭生产提示

小案例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>初始Vue</title>
<!--    引入Vue-->
    <script src="../js/vue.js"></script>
</head>
<!--
初始 Vue:
	1. 想让 Vue 工作,就必须创建一个 Vue 实例,且要传入一个配置对象;
	2. root 容器里的代码依然符合 HTML 代码,只不过混入了模板变量;
	3. root 容器里的代码被称为【Vue 模板】
-->
<body>
<div id="root">
    <h1>Hello , {{name}}</h1>  <!-- 使用插值语法插入 -->
    <p>{{name}}现在已经{{age}}岁了</p>
</div>

<script type="text/javascript">
    Vue.config.productionTip = false;  // 阻止 Vue 在启动时生成生产提示
    // 创建 Vue 实例
    new Vue({
        el: "#root", // el 用于指定当前 Vue 实例为那个容器服务,值通常为 CSS 选择器字符串
        data: {
            name: "steve",
            age: 18
        },  // data 用来存储数据,传入容器中,数据供 el 所指定的容器去使用,值暂时写成一个对象
    });

</script>

</body>
</html>

注意:

  1. 一个 Vue 实例不能解析多个容器,一个容器也不能对应多个 Vue 实例。Vue 实例和容器只能是一一对应的关系
  2. 模板标签里面必须写成 js 表达式
    • js 表达式:一个表达式会生成一个值,可以放在任何一个需要值得地方
    • js 代码:控制代码的走向,但是不会生成值
  3. 一旦 data 中的数据发生改变,那么模板中用到该数据的地方也会自动更新

二、 模板语法

模板语法有两大类:

  1. 插值语法
    • 功能:用于解析标签体内容
    • 写法:{{xxx}},xxx 是 js 表达式,且可以直接读取到 data 中的所有属性
  2. 指令语法
    • 功能:用于解析标签(包括:标签属性、标签体内容、绑定事件……)
    • 举例:v-bind:href=“xxx”,或者简写为 :href=“xxx”,xxx 同样需要写 js 表达式,且可以直接读取到 data 中的所有属性
    • 备注:Vue 中的很多指令,且形式都是:v-???,此处只是举一个例子
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>模板语法</title>
  <script src="../js/vue.js"></script>
</head>
<body>
<div id="root">
  <h1>模板语法</h1>
  <h3>hello, {{name}}</h3>
  <hr>
    
  <h1>指令语法</h1>
  <a v-bind:href="url.toUpperCase()">个人博客网站</a>
  <a :href="url">和上面那行的作用是一样的</a>
<!-- v-bind: ===> : (简写形式)-->
</div>

<script type="text/javascript">
  Vue.config.productionTip = false;
  new Vue({
    el: "#root",
    data: {
      name: "steve",
      url: "https://www.steve1.cn",
    }
  })
</script>

</body>
</html>

三、 数据绑定

Vue 中有两种数据绑定的方式:

  1. 单向绑定(v-bind):数据只能从 data 流向页面

  2. 双向绑定(v-model):数据不仅能从 data 流向页面,还可以从页面流向 data

    注意:

    • 双向绑定一般都应用在表单类元素上
    • v-model:value 可以简写为 v-model ,因为 v-model 默认收集的就是 value 值
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>数据绑定</title>
  <script src="../js/vue.js"></script>
</head>
<body>
<div id="root">
  <h1>单向数据绑定</h1>
  <input type="text" :value="name">
  <h1>双向数据绑定</h1>
  <input type="text" v-model:value="name">
<!-- 当文本输入框的 value 修改时,data 中的 name 也会改变-->
<!-- 如下代码时错误的,因为 v-model 指令只能应用在表单类元素上-->
  <h2 v-model:x="name">Hello</h2>
</div>

<script type="text/javascript">
  Vue.config.productionTip = false;
  new Vue({
    el: "#root",
    data: {
      name: "steve",
    }
  })
</script>

</body>
</html>

扩展:

  1. Vue 挂载容器的另外一种方式:

      const v = new Vue({
        // el: "#root",
        data: {
          name: "steve",
        }
      })
      v.$mount("#root")
    
  2. data 使用函数式写法:

      const v = new Vue({
        /* data: {
          name: "steve",
        } */
          data:function() {  
              console.log(this)  // 此处的 this 是 Vue 实例对象
              return {
                  name: "steve",
              }
          } // 这里的 :function 是可以删除的,但是注意不能使用箭头函数,否则会出现 this 指针指向错误的问题
          data() {
              return {
                  name: "steve"
              }
      	  }
      })
      v.$mount("#root")
    

    注意,函数式写法中,函数必须要返回一个对象,推荐函数式使用。

由 Vue 管理的函数,一定不要使用箭头函数,否则 this 就不再是指向 Vue 实例对象了。

四、 MVVM 模型

  1. M(模型 Model):对应 data 中的数据
  2. V(视图 View):模板
  3. VM(视图模型 ViewModel):Vue 实例对象

实例:

五、 数据代理

1、 defineProperty

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>数据代理</title>
</head>
<body>
<!-- 回顾defineProperty  -->
<script type="text/javascript">
  let addr = "China"
  let person = {
    name: "steve",
    sex: 1,
  }
  Object.defineProperty(person, "age", {
    value: 18,
    // enumerable: true,  // 控制属性是否可以枚举,默认值为false
    // writable: true,  // 控制属性是否可以被修改,默认值为false
    // configurable: true, // 控制属性是否可以被删除,默认值为false
  })  // 虽然麻烦,但是比较高级
  Object.defineProperty(person, "address", {
    // 当有人读取address 属性时,该函数会被调用
    get() {
      return addr
    },
    // 当有人修改 person 的 address 属性时,set 函数就会被调用,且会收到修改的具体值
    set(value) {
      console.log(`有人修改了address属性,且值是${value}`)
      addr = value
    }
  })
  console.log(Object.keys(person))
  console.log(person)
</script>

</body>
</html>

2、 理解数据代理

数据代理:通过一个对象代理,来对另一个对象属性的操作(读、写)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>数据代理的理解</title>
</head>
<body>
<!--数据代理:通过一个对象代理对另一个对象中属性的操作-->
<script type="text/javascript">
  
  let obj1 = {x: 100}
  let obj2 = {y: 200}
  Object.defineProperty(obj2, "x", {
    get() {
      return obj1.x
    },
    set(value) {
      obj1.x = value
    }
  })
</script>
</body>
</html>

3、 Vue中的数据代理

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Vue中的数据代理</title>
  <script src="../js/vue.js"></script>
</head>
<body>
<!--  准备一个容器-->
<div id="root">
  <h2>学校名称:{{name}}</h2>
  <h2>学校地址:{{address}}</h2>
</div>
<script type="text/javascript">
  Vue.config.productionTip = false;
  const vm = new Vue({
    data: {
      name: "steve",
      address: "Anthony"
    }
  })
  vm.$mount("#root")
</script>
</body>
</html>

六、 事件处理

1、 事件的基本使用

使用方法:

  1. 使用 v-on:xxx 或者@xxx绑定事件,其中xxx是事件名
  2. 事件的回调需要配置在 methods 对象中,最终会在 vm
  3. methods 中配置的函数,不要使用箭头函数;否则 this 的指向就不是 vm
  4. methods 中配置的函数,都是被 Vue 所管理的函数,this 的指向是 vm 或组件实例对象
  5. @click="demo"@click="demo($event)",效果一直,但是后者可以传参
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>事件的基本使用</title>
    <script src="../js/vue.js"></script>
</head>
<body>
<div id="root">
    <h1>欢迎学习{{study_name}}</h1>
<!--    <button v-on:click="showInfo">点我提示信息</button>-->
    <button @click="showInfo"></button>  <!-- 这里的@即为v-on:的简写形式 -->
    <button @click="showInfo1(66, $event)"></button>  <!--注意,如果这个函数需要event事件的话,需要传入$event参数,位置随便在哪-->
    <a href="https://www.steve1.cn" @click.prevent="showInfo">.prevent是事件修饰符,其会阻止事件默认的行为</a>
</div>
<script type="text/javascript">
    Vue.config.productionTip = false;
    const data = {
        "study_name": "Vue核心内容",
    };
    const vm = new Vue({
        data,
        methods: {
            showInfo(event) {
                console.log(event)  // 参数为鼠标点击的事件信息
                console.log(this)  // 此处的this是vm,注意不能使用箭头函数
                alert("你好呀")
            },
            showInfo1(number, event) {
                alert(`Hello World ${number}`)
                console.log(`${number} + ${event}`)
            }
        }  // methods配置项进行事件回调
    })
    vm.$mount("#root")

</script>
</body>
</html>

Vue 中的事件修饰符:

  1. prevent:阻止默认事件(常用)
  2. stop:阻止事件冒泡(常用)
  3. once:事件只触发一次(常用)
  4. capture:使用事件的捕获模式
  5. self:只有 event.target 是当前操作的元素时才触发事件
  6. passive:事件的默认行为立即执行,无需等待事件回调执行完毕

注意,这个修饰符可以连着使用,如:@click.stop.prevent=""

2、 键盘事件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>键盘事件</title>
    <script type="text/javascript" src="../js/vue.js"></script>
</head>
<body>
    <div id="root">
        <input type="text" placeholder="按下回车提示输入" @keydown.enter="showInfo">
    <!-- .enter 为别名,其会自动捕捉 enter键 -->
    </div>
    <script type="text/javascript">
        Vue.config.productionTip = false;
        new Vue({
            el: "#root",
            data: {},
            methods: {
                showInfo(event) {
                    console.log(event.keyCode)
                },
            }
        })
    </script>
</body>
</html>

Vue 中常用的按键别名:

  1. 回车 => enter
  2. 删除 => delete (捕获 “删除” 和 “退格” 键)
  3. 退出 => esc
  4. 空格 => space
  5. 换行 => tab
  6. 上 => up
  7. 下 => down
  8. 左 => left
  9. 右 => right

Vue 未提供别名的按键,可以使用按键原始的 key 值去绑定,当注意要转为 kebab-case(短横线命名)

系统修饰键(用法特殊):ctrl、alt、shift、meta

  1. 配合 keyup 使用:按下修饰键的同时,再按下其他键,随后释放其他键,事件才被触发
  2. 配合 keydown 使用:正常触发事件

自定义按键别名:Vue.config.keyCodes.自定义按键名 = keyCode

七、 计算属性与监视属性

1、 计算属性的语法

使用 computed 来进行计算属性的配置

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>监视属性</title>
    <script type="text/javascript" src="../js/vue.js"></script>
</head>
<body>
    <div id="root">
        姓:<input type="text" v-model="firstName"> <br><br>
        名:<input type="text" v-model="lastName"><br><br>
        姓名为:<span>{{fullName}}</span>
    </div>
    <script type="text/javascript">
        Vue.config.productionTip = false;
        new Vue({
            el: "#root",
            data(){
                return {
                    "firstName": "张",
                    "lastName": "三",
                }
            },
            computed: {
                fullName: {
                    // get 的作用:当有人读取 fullName 时,get 就会被调用,且返回值为 fullName 的值
                    // get 调用的时间:1. 初次读取这个 fullName (其有缓存的作用)  2. 所依赖的数据发生变化
                    get() {
                        console.log("getter")
                        return `${this.firstName}-${this.lastName}`
                    },
                    // 这个 set 不是必须的,如果这个数据只是通过内部修饰的,就可以不需要这个 setter
                    set(value) {
                        // 当 fullName 被修改时调用
                        console.log("setter")
                        const arr = value.split("-")
                        // 只需要修改其依赖的数据即可
                        this.firstName = arr[0]
                        this.lastName = arr[1]
                    }
                }
            } // 这个为计算属性,直接使用插值语法调用
        })
    </script>
</body>
</html>

注意,不能使用箭头函数,否则会出现 this 指向错误的问题。

2、 计算属性的简写

new Vue({
    el: "#root",
    data(){
        return {
            "firstName": "张",
            "lastName": "三",
        }
    },
    computed: {
        fullName() {
            console.log("getter")
            return `${this.firstName}-${this.lastName}`
        }  // 直接将 fullName 写成函数形式,只提供 getter ,不提供 setter
    } 
})

3、 监视属性

使用 watch 来进行数据的监视

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>监视属性</title>
    <script type="text/javascript" src="../js/vue.js"></script>
</head>
<body>
    <div id="root">
    <h1>今天,天气很{{weatherInfo}}:</h1>
        <button @click="changeWeather">切换天气</button>
    </div>
    <script type="text/javascript">
        Vue.config.productionTip = false;
        new Vue({
            el: "#root",
            data(){
                return {
                    "isHot": true,
                }
            },
            methods: {
                changeWeather() {
                    this.isHot = !this.isHot
                }
            },
            watch: {
                isHot: {
                    immediate: true, // 初始化时,让 handler 调用一下
                    // handler 在当 isHot 发生改变的时候调用
                    handler(newVal, oldVal) {
                        console.log(`isHot is changed\nold value is ${oldVal}, new value is ${newVal}`)
                    }
                }
            },  // 这个为监视属性,用来监视 isHot 属性的变化
            computed: {
                weatherInfo() {
                    return this.isHot ? "炎热" : "凉爽"
                }
            }
        })
    </script>
</body>
</html>

第二种监听的方式,直接在 vm 上添加监听器:

vm.$watch("isHot", {
    immediate: true, 
    handler(newVal, oldVal) {
    	console.log(`isHot is changed\nold value is ${oldVal}, new value is ${newVal}`)
    }
})

监视属性 watch

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

4、 深度监视

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>深度监视</title>
    <script type="text/javascript" src="../js/vue.js"></script>
</head>
<body>
    <div id="root">
    <h1>数字为:{{numbers.a}}</h1>
        <button @click="numbers.a++">a+1</button>
        <button @click="numbers.b++">b+1</button>
    </div>
    <script type="text/javascript">
        Vue.config.productionTip = false;
        new Vue({
            el: "#root",
            data(){
                return {
                    numbers: {
                        a: 1,
                        b: 1
                    },
                }
            },
            watch: {
                "numbers.a": {  // 监视多级结构中某个属性的变化
                    handler() {
                        console.log("a被改变了")
                    }
                },
                numbers: {
                    deep: true,  // 监视多级结构中所有属性的变化
                    handler() {
                        console.log("numbers 里面的内容发生改变了")
                    }
                }
            },
        })
    </script>
</body>
</html>

深度监视:

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

5、 监视属性简写

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>监视属性</title>
    <script type="text/javascript" src="../js/vue.js"></script>
</head>
<body>
<div id="root">
    <h1>今天,天气很{{weatherInfo}}:</h1>
    <button @click="changeWeather">切换天气</button>
</div>
<script type="text/javascript">
    Vue.config.productionTip = false;
    const vm = new Vue({
        el: "#root",
        data(){
            return {
                "isHot": true,
            }
        },
        methods: {
            changeWeather() {
                this.isHot = !this.isHot
            }
        },
        watch: {
            // 正常写法
            // isHot: {
            //     // immediate: true,
            //     // deep: true,  深度监视
            //     handler(newVal, oldVal) {
            //         console.log(`isHot is changed\nold value is ${oldVal}, new value is ${newVal}`)
            //     }
            // }
            // 简写形式
            // 简写的代价是不能使用配置项,只能写 handler 函数
            isHot(newVal, oldVal) {
                console.log(`isHot is changed\nold value is ${oldVal}, new value is ${newVal}`)
            }
        },
        computed: {
            weatherInfo() {
                return this.isHot ? "炎热" : "凉爽"
            }
        }
    })
    vm.$watch("isHot", function(newVal, oldVal) {
        console.log(`isHot is changed\nold value is ${oldVal}, new value is ${newVal}`)
    })
</script>
</body>
</html>

computedwatch 之间的区别:

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

两个重要小原则:

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

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

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

相关文章

难以置信,已经有人用 ChatGPT 做 Excel 报表了?

要问2023年初科技领域什么最火&#xff0c;那自然是 ChatGPT。 ChatGPT 由人工智能研究实验室 OpenAI 于2022年11月30日推出。上线短短5天&#xff0c;用户数量已突破100万&#xff0c;在今年2月份&#xff0c;用户数量已经突破1亿。 ChatGPT 是一个超级智能聊天机器人&#…

GitLab CI/CD 新书发布,助企业降本增效

前言 大家好&#xff0c;我是CSDN的拿我格子衫来&#xff0c; 昨天我的第一本书《GitLab CI/CD 从入门到实战》上架啦&#xff0c;这是业内第一本详细讲解GitLab CI/CD的书籍。 历经无数个日夜&#xff0c;最终开花结果。感触良多&#xff0c;今天就借这篇文章来谈一谈这本书的…

贯穿设计模式第一话--单一职责原则

&#x1f973;&#x1f973;&#x1f973; 茫茫人海千千万万&#xff0c;感谢这一刻你看到了我的文章&#xff0c;感谢观赏&#xff0c;大家好呀&#xff0c;我是最爱吃鱼罐头&#xff0c;大家可以叫鱼罐头呦~&#x1f973;&#x1f973;&#x1f973; 从今天开始&#xff0c;将…

基于51单片机的智能婴儿看护床设计

需要源码及原理图文件请私信&#xff01;&#xff01;&#xff01;&#xff01; 基于51单片机的智能婴儿看护床设计1、引言2、功能设计系统结构框图3、系统硬件设计3.1声音电路的设计3.2语音播报电路的设计3.3独立按键电路的设计3.4模拟摇床&#xff08;步进电机驱动电路&#…

Springboot项目快速实现过滤器功能

前言很多时候&#xff0c;当你以为掌握了事实真相的时间&#xff0c;如果你能再深入一点&#xff0c;你可能会发现另外一些真相。比如面向切面编程的最佳编程实践是AOP&#xff0c;AOP的主要作用就是可以定义切入点&#xff0c;并在切入点纵向织入一些额外的统一操作&#xff0…

尚硅谷大数据技术Spark教程-笔记01【Spark(概述、快速上手、运行环境、运行架构)】

视频地址&#xff1a;尚硅谷大数据Spark教程从入门到精通_哔哩哔哩_bilibili 尚硅谷大数据技术Spark教程-笔记01【Spark(概述、快速上手、运行环境、运行架构)】尚硅谷大数据技术Spark教程-笔记02【SparkCore(核心编程、案例实操)】尚硅谷大数据技术Spark教程-笔记03【SparkSQL…

Scala之面向对象(2)

目录 单例对象&#xff08;伴生对象&#xff09;&#xff1a; 创建对象常用的两种方法&#xff1a; &#xff08;1&#xff09;使用构造器构造&#xff08;new&#xff09; &#xff08;2&#xff09;使用静态方法 伴生对象的定义&#xff1a; apply方法&#xff1a; app…

图像分割技术及经典实例分割网络Mask R-CNN(含基于Keras Python源码定义)

图像分割技术及经典实例分割网络Mask R-CNN&#xff08;含Python源码定义&#xff09; 文章目录图像分割技术及经典实例分割网络Mask R-CNN&#xff08;含Python源码定义&#xff09;1. 图像分割技术概述2. FCN与语义分割2.1 FCN简介2.2 反卷积2.2 FCN与语义分割的关系3. Mask …

Midjourney以图生图的详细教程(含6种案例介绍)

&#x1f3c6; 文章目标&#xff1a;学习并介绍Midjourney以图生图的详细教程 &#x1f340; Midjourney以图生图的详细教程 ✅ 创作者&#xff1a;熊猫Jay &#x1f389; 个人主页&#xff1a;Jay的个人主页 &#x1f341; 展望&#xff1a;若本篇讲解内容帮助到您&#xff0c…

SQL Server 单表数据查询

提示&#xff1a; 本篇文章详细介绍怎样向SQLServer中导入表格数据,导入之后根据不同的查询条件完成查询任务. 文章目录前言一、向SQL Server中导入数据二、例题1.查询所有学生的全部信息2.查询学生的学号和姓名3.查询所有学生的姓名和出生年4. 查询所有学生的姓名和出生年&…

【关于Linux中----生产消费模型】

文章目录一、生产消费模型1.1概念的引入1.2 321原则二、条件变量2.1概念的引入2.2理解条件变量2.3条件变量的使用三、基于BlockingQueue的生产者消费者模型3.1BlockingQueue的介绍3.2C queue模拟阻塞队列的生产消费模型3.3对生产消费任务的模拟封装四、遗留问题一、生产消费模型…

基于YOLOv5的水下海洋目标检测

摘要&#xff1a;水下海洋目标检测技术具有广泛的应用前景&#xff0c;可以用于海洋环境监测、海洋资源开发、海洋生物学研究等领域。本文提出了一种基于 YOLOv5 的水下海洋目标检测方法&#xff0c;使用数据增强方法进行了大量实验&#xff0c;并与其他方法进行了对比&#xf…

(SQL学习随笔3)SQL语法——SELECT语句

导航基本认识FROM关键字LIMIT与OFFSETORDER BYWHERE条件查询单值比较多条件组合范围筛选空值匹配LIKE通配条件分组运算符和函数数据变换分组运算表连接内连接左(右)外连接全外连接外键约束窗口函数UNION&#xff1a;表上下拼接子查询条件判断PostgreSQLMySQL基本认识 SELECT t…

【论文阅读】BiSeNet V2用于实时语义分割的双边网络

前言BiSeNet V2延续了v1版本的双边结构&#xff0c;分别处理空间细节信息、高层语义信息。同时设计更简洁高效的结构&#xff0c;进行特征提取&#xff0c;实现高精度和高速度。在训练模型时&#xff0c;使用了增强训练策略 &#xff0c;添加多个辅助训练分支来促进不同浅层网络…

Spring-aop面向切面

1、理解必要的专业术语 先看看上面图&#xff0c;这是我的个人理解。(画的丑&#xff0c;主打真实) 1&#xff09;Advice&#xff0c;通知/增强&#xff1a;类方法中提出来的共性功能(大白话就是提出来的重复代码) 2&#xff09;Pointcut&#xff0c;切入点/切点&#…

【微服务】微服务架构下你不得不知的3种部署策略

文章目录前言滚动部署蓝绿部署金丝雀部署总结前言 不知道大家有了解过你们公司的软件产品是如何部署的么&#xff1f;采用的什么部署策略&#xff1f;其实在软件开发生命周期中&#xff0c;部署是非常关键的一环&#xff0c;你需要考虑多方面的因素&#xff0c;如何保证你部署…

【推荐算法】CTR中embedding层的学习和训练

note 连续特征处理&#xff1a;facebook DLRM模型&#xff0c;对连续值的处理方式是把所有的连续值输入到一个神经网络&#xff0c;然后通过神经网络把它压缩到一个embedding维度大小的一个向量上&#xff0c;然后将Embedding和其他离散特征Embedding Concat起来&#xff0c;再…

springboot-分页功能

1.分页功能的作用 分页功能作为各类网站和系统不可或缺的部分&#xff08;例如百度搜索结果的分页等&#xff09; &#xff0c;当一个页面数据量大的时候分页作用就体现出来的&#xff0c;其作用有以下5个。 &#xff08;1&#xff09;减少系统资源的消耗 &#xff08;2&#…

redis设计与实现读书笔记

这里主要记录一下在阅读redis设计与实现中碰到的一些没有记录过的知识。 引用计数技术 Redis的对象系统实现了基于引用计数技术的内存回收机制&#xff0c;当程序不再使用某个对象的时候&#xff0c;这个对象所占用的内存就会被自动释放;另外&#xff0c;Redis还通过引用计数…

低调且强大--iVX低代码平台

iVX目录前言一、低代码那么多 为什么选择iVX&#xff1f;二、“拼”出来的低代码平台&#xff0c;真的好用吗&#xff1f;三、iVX与其他低代码有啥可比性&#xff1f;前言 首先我们应该明白自动编程突破可能是&#xff1a;领域内Mini LLM 现在的思路都是搞LLM&#xff0c;几乎像…