Vue 学习之旅:从基础到实践(vue快速上手+插值表达式+指令上)

news2025/1/14 21:26:18

Vue 学习之旅:从基础到实践

文章目录

  • Vue 学习之旅:从基础到实践
    • 一、Vue 简介
    • 二、创建 Vue 实例与插值表达式
      • (一)创建 Vue 实例步骤
      • (二)插值表达式
    • 三、Vue 核心特性 - 响应式
    • 四、Vue 指令
      • (一)v-html
      • (二)v-show 与 v-if
      • (三)v-else 与 v-else-if
      • (四)v-on
      • (五)v-bind
      • (六)v-for
      • (七)v-model
    • 五、综合案例 - 简易记事本
      • (一)列表渲染
      • (二)删除功能
      • (三)添加功能
      • (四)底部统计和清空

一、Vue 简介

Vue 是一个用于构建用户界面的渐进式框架。它能够基于数据动态渲染页面,让我们可以更高效地开发 Web 应用。其特点包括声明式渲染、组件系统、客户端路由(VueRouter)以及大规模状态管理(Vuex)等,大大提升了开发效率。

二、创建 Vue 实例与插值表达式

(一)创建 Vue 实例步骤

  1. 准备容器:在 HTML 中创建一个用于 Vue 挂载的元素,例如:
<div id="app"></div>
  1. 引包:从官网获取 Vue 的开发版本或生产版本的库文件,并在 HTML 中引入,如:
<script src="https://cdn.jsdelivr.net/npm/vue02.7.10/dist/vue.js"></script>
  1. 创建实例:使用 new Vue() (在 Vue 3 中需使用 Vue.createApp() ),并传入配置对象。
  2. 指定配置项:包括指定挂载点(el)和提供数据(data),示例代码如下:
const app = new Vue({
  el: '#app',
  data: {
    msg: 'Hello Vue'
  }
});

这里的 el 选择器指定了 Vue 实例控制的是哪个盒子,data 则提供了在模板中可以使用的数据。

首次挂载实践如下:

<!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实例,初始化渲染
    1.准备容器(Vue所管理的范围)
    2.引包(分开发版本和生产版本)
    3.创建实例
    4.添加配置项 => 完成渲染
     -->


    <div id="app">
    <!-- 编写渲染代码的逻辑 -->
        <h1>{{ msg }}</h1>
        <a href="#">{{ count }}</a>  
    </div>

    <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>

    <script>
        // 一旦引入 VueJs 核心包,在全局环境下,就有了Vue构造函数
        const app = Vue.createApp({
             // 通过 data 提供数据
            data() {
                return{
                    msg : 'Hello!',
                    count : '123'
                };
            }
        });
        // 挂载 Vue 应用实例到元素上
        app.mount('#app');
    </script>

</body>
</html>

image-20250106100806765

(二)插值表达式

插值表达式 {{ }} 是 Vue 的一种模板语法。它的作用是利用表达式进行插值,并将结果渲染到页面中。表达式是可以被求值的代码,JS 引擎会计算出结果。例如:

<div id="app">
  <h3>{{ title }}</h3>
  <p>{{ nickname.toUpperCase() }}</p>
  <p>{{ age >= 18? '成年' : '未成年' }}</p>
  <p>{{ obj.name }}</p>
</div>

在上述代码中,{{ title }} 会将 datatitle 的值渲染到页面上,{{ nickname.toUpperCase() }} 会将 nickname 转换为大写后显示。

需要注意的是:

  • 使用的数据必须存在于 data 中,否则无法正确渲染。例如,如果 data 中没有定义 hobby,那么 {{ hobby }} 将不会显示任何内容。
  • 支持的是表达式,而非语句,像 iffor 等语句不能直接在插值表达式中使用。例如,{{ if }} 是错误的用法。
  • 不能在标签属性中使用 {{ }} 插值,如 <p title="{{username }}">我是 p 标签</p> 是错误的,应该使用 v-bind 指令来动态设置属性。

三、Vue 核心特性 - 响应式

Vue 的响应式特性是其核心之一,意味着数据变化时,视图会自动更新。例如:

const app = new Vue({
  el: '#app',
  data: {
    msg: 'Hello Vue'
  }
});
// 当修改数据时
app.msg = 'New Message';

在上述代码中,当修改 app.msg 的值时,页面上对应的插值表达式 {{ msg }} 显示的内容会自动更新。

我们可以通过 实例.属性名 来访问 data 中的数据,通过 实例.属性名 = 值 来修改数据。这样在开发过程中,我们只需关注业务逻辑对数据的修改,Vue 会自动处理视图的更新,大大简化了开发流程。

如我们可以设置多个响应式数据,msg和count:

 <script>
        const app = Vue.createApp({
            data() {
                return {
                    msg : 'Hello,周一。',
                    count : 100
                }
            },
        });

        app.mount('#app');
    </script>

image-20250106103018350

四、Vue 指令

(一)v-html

  • 作用:设置元素的 innerHTML
  • 语法:v-html = "表达式 ",例如:
<div v-html="str"></div>

这里的 str 应该是一个包含 HTML 标签的字符串,它会被解析并渲染到元素内部。但需要注意,使用 v-html 可能存在安全风险,如果内容来自用户输入或不可信来源,可能会导致 XSS 攻击。

举个例子:

<body>
    <div id="app">
        <div v-html="msg"></div>
    </div>
    
    <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>

    <script>
        const app = Vue.createApp({
            data() {
                return {
                    msg :`
                    <a href="https://www.bilibili.com/">
                        哔哩哔哩
                    </a>
                   `
                }
            },
        });

        app.mount('#app');
    </script>
</body>

image-20250106104034673

(二)v-show 与 v-if

  • v-show
    • 作用:控制元素显示隐藏。
    • 语法:v-show = "表达式",当表达式的值为 true 时显示元素,为 false 时隐藏元素。其原理是切换 display:none 来控制显示隐藏。适用于频繁切换显示隐藏的场景。例如:
<button v-show="isVisible">显示/隐藏按钮</button>

这里的 isVisible 是一个在 data 中定义的布尔值,根据其值来决定按钮的显示状态。

  • v-if
    • 作用:控制元素显示隐藏(条件渲染)。
    • 语法:v-if = "表达式",当表达式值为 true 时显示元素,为 false 时移除元素节点。适用于要么显示,要么隐藏,不频繁切换的场景。例如:
<div v-if="hasContent">这里是有条件显示的内容</div>

这里的 hasContent 也是一个在 data 中定义的布尔值。

(三)v-else 与 v-else-if

  • 作用:辅助 v-if 进行判断渲染。
  • 语法:v-elsev-else-if = "表达式",需要紧挨着 v-if 一起使用。例如:
// 多种判断
<div v-if="score >= 90">成绩评定 A:奖励电脑一台</div>
<div v-else-if="score >= 70 && score < 90">成绩评定 B:奖励周末郊游</div>
<div v-else-if="score >= 60 && score < 70">成绩评定 C:奖励零食礼包</div>
<div v-else>成绩评定 D:惩罚一周不能玩手机</div>

在上述代码中,根据 score 的值来显示不同的评定结果,score 是在 data 中定义的变量。

<script>
        const app = Vue.createApp({
            data() {
                return {
                   score : 80
                }
            },
        });
        app.mount('#app');
    </script>

(四)v-on

  • 作用:注册事件,即添加监听和提供处理逻辑。
  • 语法:
    • v-on:事件名 = "内联语句"
    • 内联语句可以是简单的变量操作、函数调用等能在 JavaScript 中合法执行的代码,但需要注意遵循 Vue 的响应式原理和相关规则,且要确保使用的数据在 data 或 Vue 实例的其他有效作用域内有定义
    • 例如:
    • count++ 就是内联语句。它表示当按钮被点击时,会执行将 count 的值加 1 的操作。这里的 count 通常是在 Vue 实例的 data 中定义的属性
<button v-on:click="count++">按钮</button>

这里的 click 是事件名,count++ 是内联语句,每次点击按钮会使 count 的值加 1,count 应该在 data 中定义。

	    <button v-on:click="count--">-</button>
        <span> {{count}} </span>
        <button v-on:click="count++">+</button>

就能通过点击左边减1,右边加1.

image-20250106110440935

- `v-on:事件名 = "methods 中的函数名"`,例如:
<button v-on:click="fn">按钮</button>

这里的 fn 是在 methods 中定义的函数,如下:

const app = new Vue({
  el: '#app',
  data: {
    count: 100
  },
  methods: {
    fn() {
      console.log('提供逻辑代码');
    }
  }
});
  • 例如:

  • <body>
        <div id="app">
            <br>
            <button @click="fn">点击切换隐藏</button>
            <h1 v-show="isshow">今天是星期一吗?</h1>
        </div>
        
        <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
    
        <script>
            const app = Vue.createApp({
                data() {
                    return {
                       isshow : true
                    }
                },
    
                methods: {
                    fn() {
                        this.isshow = !this.isshow;
                    }
                },
            });
    
            app.mount('#app');
        </script>
    </body>
    

    就可以通过点击“点击切换隐藏”,使“今天是星期一吗?”隐藏起来,再点击一次又可以让其显现。

    image-20250106112534053

  • 简写:@事件名,例如 @click。同时需要注意,methods 函数内的 this 指向 Vue 实例。

  • 例如:

  •         <button @click="count--">-</button>
            <span> {{count}} </span>
            <button @click="count++">+</button>
    

(五)v-bind

  • 作用:动态地设置 HTML 的标签属性,如 srcurltitle 等。
  • 语法:v-bind:属性名="表达式",简写形式为 :属性名="表达式"。例如:
<div id="app">
  <img v-bind:src="url">
</div>

在 JavaScript 中:

const app = new Vue({
  el: '#app',
  data: {
    url: '图片路径'
  }
});

(六)v-for

  • 作用:基于数据循环,多次渲染整个元素,可以遍历数组、对象、数字等。

  • 例如代码为:

  • <body>
        <div id="app">
            <h3>水果店</h3>
            <ul>
                <li v-for = "(item , index) in list">
                    {{item}} - {{ index }}
                </li>
            </ul>
        </div>
    
        <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
    
        <script>
            const app = Vue.createApp({
                data() {
                    return {
                        list : ['西瓜', '葡萄', '苹果', '榴莲']
                    }
                },
            })
    
            app.mount('#app');
        </script>
    </body>
    
  • 可以展现出:

  • image-20250106193219982

  • 遍历数组语法:v-for = "(item, index) in 数组",其中 item 是数组的每一项,index 是下标。也可以省略 index,写成 v-for = "item in 数组"。例如:

<ul>
  <li v-for="(book, index) in booksList" :key="book.id">// 给列表项添加的唯一标识。便于Vue进行列表项的正确排序复用
    <span>{{ book.name }}</span>
    <span>{{ book.author }}</span>
    <button @click="del(book.id)">删除</button>
  </li>
</ul>

在 JavaScript 中:

const app = new Vue({
  el: '#app',
  data: {
    booksList: [
      { id: 1, name: '《红楼梦》', author: '曹雪芹' },
      { id: 2, name: '《西游记》', author: '吴承恩' },
      { id: 3, name: '《水浒传》', author: '施耐庵' },
      { id: 4, name: '《三国演义》', author: '罗贯中' }
    ]
  },
  methods: {
    del(id) {
      this.booksList = this.booksList.filter(item => item.id !== id)// 这里编写删除书籍的逻辑,比如从 booksList 中删除对应 id 的书籍
    }
  }
});

启动后,点击中间的两个“删除”后,就可以得到:

image-20250106194908899

  • v-for 中的 key
    • 语法:key 属性 = "唯一标识",作用是给列表项添加唯一标识,便于 Vue 进行列表项的正确排序复用。
    • 注意点:
      • key 的值只能是字符串或数字类型。
      • key 的值必须具有唯一性。
      • 推荐使用 id 作为 key(唯一),不推荐使用 index 作为 key(会变化,不对应)。
      • 不加keyv-for 的默认行为就会尝试原地修改元素(即:就地复用)

(七)v-model

  • 作用:给表单元素使用,实现双向数据绑定。可以快速获取或设置表单元素内容,即数据变化时视图自动更新,视图变化时数据也自动更新。
  • 语法:v-model = '变量'。例如:
<input v-model="username">
<input v-model="password">

在 JavaScript 中:

const app = new Vue({
  el: '#app',
  data: {
    username: '',
    password: ''
  }
});

五、综合案例 - 简易记事本

简易记事本的功能需求包括列表渲染、删除功能、添加功能、底部统计和清空。

(一)列表渲染

使用 v-for 指令结合 key 的设置和插值表达式来实现。例如:

<ul>
  <li v-for="(task, index) in taskList" :key="task.id">
    {{ task.name }}
  </li>
</ul>

在 JavaScript 中:

const app = new Vue({
  el: '#app',
  data: {
    taskList: [
      { id: 1, name: '跑步锻炼 20 分钟' },
      { id: 2, name: '复习数组语法' }
    ]
  }
});

(二)删除功能

通过 v-on 调用传参和 filter 方法来过滤数组,实现删除功能。例如:

<button @click="del(task.id)">删除</button>

在 JavaScript 中:

methods: {
  del(id) {
    this.taskList = this.taskList.filter(task => task.id!== id);
  }
}

(三)添加功能

使用 v-model 绑定输入框的值,通过 unshift 方法修改原数组来添加新任务。例如:

<input v-model="newTask">
<button @click="addTask">添加任务</button>

在 JavaScript 中:

data: {
  newTask: ''
},
methods: {
  addTask() {
    this.taskList.unshift({ id: Date.now(), name: this.newTask });
    this.newTask = '';
  }
}

(四)底部统计和清空

  • 底部统计:使用数组的 length 属性来累计任务数量,例如:
<p>合计: {{ taskList.length }}</p>
  • 清空功能:通过覆盖数组来清空列表,例如:
<button @click="clearTasks">清空任务</button>

在 JavaScript 中:

methods: {
  clearTasks() {
    this.taskList = [];
  }
}

通过这个综合案例,我们可以将所学的 Vue 知识综合运用起来,实现一个具有实际功能的应用程序。在学习 Vue 的过程中,不断练习和实践这些指令和特性,能够更好地掌握 Vue 的开发技巧,提高开发效率,开发出更加优秀的 Web 应用。

其完整源码如下:

<!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" />
<link rel="stylesheet" href="index.css" />
<title>简易记事本</title>
</head>
<body>

<!-- 主体区域 -->
<section id="app">
  <!-- 输入框 -->
  <header class="header">
    <h1>简易记事本</h1>
    <!-- 使用 v-model 实现双向数据绑定,将输入框的值与 todoName 数据属性关联 -->
    <input v-model="todoName" placeholder="请输入任务" class="new-todo" />
    <!-- 点击按钮调用 add 方法添加任务 -->
    <button @click="add" class="add">添加任务</button>
  </header>
  <!-- 列表区域 -->
  <section class="main">
    <ul class="todo-list">
      <!-- 使用 v-for 遍历 list 数组,生成任务列表项 -->
      <li class="todo" v-for="(item, index) in list" :key="item.id">
        <div class="view">
          <!-- 显示任务的索引 -->
          <span class="index">{{index + 1}}.</span> 
          <!-- 显示任务名称 -->
          <label>{{item.name}}</label>
          <!-- 点击按钮调用 del 方法删除任务,将 item.id 作为参数传递 -->
          <button class="destroy" @click="del(item.id)"></button>
        </div>
      </li>
    </ul>
  </section>
  <!-- 统计和清空 -->
  <footer class="footer" v-show=" list.length > 0">
    <!-- 统计任务数量 -->
    <span class="todo-count">合 计:<strong> {{ list.length }} </strong></span>
    <!-- 点击按钮调用 clear 方法清空任务列表 -->
    <button @click="clear" class="clear-completed">
      清空任务
    </button>
  </footer>
</section>

<!-- 底部 -->
<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>

<script>
    const app = Vue.createApp({
        data() {
            return {
                // 存储输入框中的任务名称
                todoName : '',
                // 存储任务列表,每个任务是一个对象,包含 id 和 name 属性
                list : [
                    {id : 1, name : '跑步两公里'},
                    {id : 2, name : '写三篇申论'},
                    {id : 3, name : '跳绳20分钟'},
                ]
            }
        },

        methods : {
            // 删除任务的方法,根据传入的 id 过滤列表,保留 id 不相等的任务
            del(id) {
                this.list = this.list.filter(item => item.id!== id)
            },

            // 添加任务的方法
            add () {
                // 检查输入框是否为空,如果为空弹出提示并返回
                if(this.todoName.trim() === '')
                {
                    alert('请输入任务名称')
                    return
                }
                // 将新任务添加到列表头部,并使用当前时间戳作为新任务的 id
                this.list.unshift({
                    id : +new Date(),
                    name : this.todoName
                })
                // 清空输入框
                this.todoName = ''
            },

            // 清空任务列表的方法,将 list 数组置为空数组
            clear () {
                this.list = []
            }
        }
    })
    app.mount('#app');
</script>
</body>
</html>

展示如下:

image-20250106203955093

当实现“添加任务”:

image-20250106204125531

当实现“删除任务”:

image-20250106204256209

当实现“清空任务”:

image-20250106204343431

希望这份博客能够帮助大家更好地理解和学习 Vue,如果在学习过程中有任何疑问,欢迎随时交流和探讨。

               name : this.todoName
            })
            // 清空输入框
            this.todoName = ''
        },

        // 清空任务列表的方法,将 list 数组置为空数组
        clear () {
            this.list = []
        }
    }
})
app.mount('#app');
```

展示如下:

[外链图片转存中…(img-hyKuBRvf-1736758207694)]

当实现“添加任务”:

[外链图片转存中…(img-1vDtnaa3-1736758207694)]

当实现“删除任务”:

[外链图片转存中…(img-Ep2SrGCB-1736758207694)]

当实现“清空任务”:

[外链图片转存中…(img-vUGRGXVj-1736758207694)]

希望这份博客能够帮助大家更好地理解和学习 Vue,如果在学习过程中有任何疑问,欢迎随时交流和探讨。

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

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

相关文章

PMP–一、二、三模、冲刺–分类–7.成本管理

文章目录 技巧一模7.成本管理--4.控制成本--数据分析--挣值分析--进度绩效指数&#xff08;SPI&#xff09;是测量进度效率的一种指标&#xff0c;表示为挣值与计划价值之比&#xff0c;反映了项目团队完成工作的效率。 当 SPI小于 1.0 时&#xff0c;说明已完成的工作量未达到…

字符串 (算法十一)

简介 没有固定题型&#xff0c;内容很杂&#xff0c;可以学习下string接口与相关操作 1.最长公共前缀 link&#xff1a; 解法一&#xff1a;两两比较 code class Solution { public:string longestCommonPrefix(vector<string>& strs) {// 两两比较string ans …

摄像头模块在狩猎相机中的应用

摄像头模块是狩猎相机的核心组件&#xff0c;在狩猎相机中发挥着关键作用&#xff0c;以下是其主要应用&#xff1a; 图像与视频拍摄 高清成像&#xff1a;高像素的摄像头模块可确保狩猎相机拍摄出清晰的图像和视频&#xff0c;能够捕捉到动物的毛发纹理、行为细节及周围环境的…

给DevOps加点料:融入安全性的DevSecOps

从前&#xff0c;安全防护只是特定团队的责任&#xff0c;在开发的最后阶段才会介入。当开发周期长达数月、甚至数年时&#xff0c;这样做没什么问题&#xff1b;但是现在&#xff0c;这种做法现在已经行不通了。 采用 DevOps 可以有效推进快速频繁的开发周期&#xff08;有时…

沸点 | 聚焦嬴图Cloud V2.1:具备水平可扩展性+深度计算的云原生嬴图动力站!

近日&#xff0c;嬴图正式推出嬴图Cloud V2.1&#xff0c;此次发布专注于提供无与伦比的用户体验&#xff0c;包括具有水平可扩展性的嬴图Powerhouse的一键部署、具有灵活定制功能的管理控制台、VPC / 专用链接等&#xff0c;旨在满足用户不断变化需求的各项前沿功能&#xff0…

Mysql--架构篇--存储引擎InnoDB(内存结构,磁盘结构,存储结构,日志管理,锁机制,事务并发控制等)

MySQL是一个多存储引擎的数据库管理系统&#xff0c;支持多种不同的存储引擎。每种存储引擎都有其独特的特性、优势和适用场景。选择合适的存储引擎对于优化数据库性能、确保数据完整性和满足业务需求至关重要。 注&#xff1a;在同一个Mysql的数据库中&#xff0c;对于不同的表…

springboot高校电子图书馆的大数据平台规划与设计

Spring Boot高校电子图书馆的大数据平台规划与设计是一个综合性的项目&#xff0c;旨在利用现代信息技术提升高校电子图书馆的服务质量和管理效率。以下是对该项目的详细介绍&#xff1a; 一、背景与需求 随着高校教育信息化的不断推进&#xff0c;电子图书馆的资源和用户数量…

lwip单网卡多ip的实现

1、今天要实现lwip的多个ip配置&#xff0c;本来以为需要自己修改很多核心代码 2、查阅资料才发现&#xff0c;lwip已经把接口留出来了 /** Define this to 1 and define LWIP_ARP_FILTER_NETIF_FN(pbuf, netif, type) * to a filter function that returns the correct neti…

《零基础Go语言算法实战》【题目 2-22】Go 调度器优先调度问题

《零基础Go语言算法实战》 【题目 2-22】Go 调度器优先调度问题 下面代码的输出是什么&#xff1f;请说明原因。 package main import ( "fmt" "runtime" "sync" ) func main() { runtime.GOMAXPROCS(1) wg : sync.WaitGroup{} wg.Add(10)…

浏览器输入http形式网址后自动跳转https解决方法

一、问题描述 使用浏览器 网上冲浪 时会遇到一个情况&#xff1a; 在浏览器中输入“http域名”后会自动变成“https 域名”的形式&#xff0c;此时“https 域名”的网站可能已停止对外提供服务了&#xff0c;这时会出现如下不友好的网页提示&#xff1a; 二、处理方法&#x…

【UE5 C++课程系列笔记】27——多线程基础——ControlFlow插件的基本使用

目录 步骤 一、搭建基本同步框架 二、添加委托 三、添加蓝图互动框架 四、修改为异步框架 完整代码 通过一个游戏初始化流程的示例来介绍“ControlFlows”的基本使用。 步骤 一、搭建基本同步框架 1. 勾选“ControlFlows”插件 2. 新建一个空白C类&#xff0c;这里…

WeakAuras NES Script(lua)

WeakAuras NES Script 修星脚本字符串 脚本1&#xff1a;NES !WA:2!TMZFWXX1zDxVAs4siiRKiBN4eV(sTRKZ5Z6opYbhQQSoPtsxr(K8ENSJtS50(J3D7wV3UBF7E6hgmKOXdjKsgAvZFaPTtte0mD60XdCmmecDMKruyykDcplAZiGPfWtSsag6myGuOuq89EVDV9wPvKeGBM7U99EFVVVV33VFFB8Z2TJ8azYMlZj7Ur3QDR(…

android进入fastboot

安装windows驱动。android进入fastboot模式后&#xff0c;需要Windows驱动来跟adb通信&#xff0c;所以需要预先安装Windows usb驱动&#xff0c;否则进入fastboot模式后&#xff0c;无法使用adb连接手机。 下载网址&#xff1a;https://developer.android.com/studio/run/win-…

LabVIEW光流跟踪算法

1. 光流跟踪算法的概述 光流&#xff08;Optical Flow&#xff09;是一种图像处理技术&#xff0c;用于估算图像中像素点的运动。通过比较连续帧图像&#xff0c;光流算法可以分析图像中的运动信息&#xff0c;广泛用于目标跟踪、运动检测和视频处理等场景。该示例使用了NI Vi…

系统看门狗配置--以ubuntu为例

linux系统配置看门狗 以 ubuntu 系统配置看门狗为例 配置看门狗使用的脚本文件&#xff0c;需要使用管理员权限来执行&#xff1a; 配置是&#xff1a;系统每 30S 喂一次狗&#xff0c;超过 60S 不进行投喂&#xff0c;就会自动重启。 1. 系统脚本内容&#xff1a; #!/bin/b…

Windows的Redis查看自己设置的密码并更改设置密码

查看密码 由于我的Redis安装很久了&#xff0c;所以忘记是否有设置密码&#xff0c;查看步骤如下&#xff1a; 启动redis&#xff0c;启动流程可以看这篇文章&#xff1a;https://blog.csdn.net/changyana/article/details/127679871 在redis安装目录下打开redis-cli.exe&…

E10.【C语言】练习:编写一个猜数字游戏

目录 1.规则 2.准备 3.游戏代码 1.规则 1.程序生成1-100间的随机数 2.用户猜数字 猜对了&#xff1a;游戏结束 猜错了&#xff1a;程序会告知猜大了或猜小了&#xff0c;继续进行游戏&#xff0c;直到猜对 3.游戏可以一直玩除非退出游戏 2.准备 1.框架&#xff1a;循…

《异步编程之美》— 全栈修仙《Java 8 CompletableFuture 对比 ES6 Promise 以及Spring @Async》

哈喽&#xff0c;大家好&#xff01;在平常开发过程中会遇到许多意想不到的坑&#xff0c;本篇文章就记录在开发过程中遇到一些常见的问题&#xff0c;看了许多博主的异步编程&#xff0c;我只能说一言难尽。本文详细的讲解了异步编程之美&#xff0c;是不可多得的好文&#xf…

kalilinux - msf和永恒之蓝漏洞

Kali最强渗透工具 - metasploit metasploit是什么&#xff1f; msf是一款开源安全漏洞利用和测试工具&#xff0c;集成了各种平台上常见的溢出漏洞和流行的sheelcode&#xff0c;并持续保持更新。 具体操作 1、先切换到root用户&#xff0c;使用msfdb init命令初始化metaspl…

【大模型入门指南 11】大模型自动评估理论和实战

【大模型入门指南】系列文章&#xff1a; 【大模型入门指南 01】深度学习入门【大模型入门指南 02】LLM大模型基础知识【大模型入门指南 03】提示词工程【大模型入门指南 04】Transformer结构【大模型入门指南 05】LLM技术选型【大模型入门指南 06】LLM数据预处理【大模型入门…