[Vue3]从入门到精通-持续更新中

news2025/1/21 6:35:10

一:Built-ins

1.Dom传送门:

<script setup>
const msg = "Hello World";
</script>
​
<template>
  <!-- 使用 teleport 将内容渲染到 body 的子元素中 -->
  <teleport to="body">
    <span>{{ msg }}</span>
  </teleport>
</template>
​

2.优化性能的指令

<template>
  <span v-once>使它从不更新: {{ count }}</span>
</template>
​
<script setup>
import { ref } from "vue"
const count = ref(0)
setInterval(() => {
  count.value++
}, 1000)
</script> 

二.CSS Features

1.动态CSS

<script setup>
import {ref} from 'vue'
const theme = ref('red');
const colors = ['blue','yellow','red','green'];
setInterval(()=>{
  theme.value = colors[Math.floor(Math.random()*4)];
},1000);
</script>
<template>
  <p>Hello</p>
</template>
<style scoped>
p{
color: v-bind(theme);
}
</style>

2.全局CSS

<template>
  <p>Hello Vue.js</p>
</template>
​
<style scoped>
p{
  font-size:20px;
  color: red;
  text-align: center;
  line-height: 50px;
}
:global(body){
  width: 100vw;
  height: 100vh;
  background-color: burlywood;
}
</style>
  • vw 表示视窗宽度的百分比。例如,width: 100vw; 表示元素的宽度将会是整个视窗宽度的百分之百。

  • vh 表示视窗高度的百分比。例如,height: 100vh; 表示元素的高度将会是整个视窗高度的百分之百。

:global(body) 是一个在 Vue.js 的单文件组件中使用的 CSS 选择器,它的作用是指定一个全局作用域的样式规则,可以直接影响到整个页面的 <body> 元素,而不受到组件作用域的限制。

在 Vue.js 的单文件组件中,通常会使用 <style scoped> 标签来限定样式的作用域,这意味着样式只会应用于当前组件内部的元素,不会影响到其他组件或全局样式。但是有时候我们可能需要修改全局样式,这时就可以使用 :global 来声明全局作用域的样式规则。

在你提供的代码中,:global(body) 用于指定对全局的 <body> 元素进行样式设置,例如设置了页面的宽度、高度和背景颜色。这样无论在哪个组件中,都能够直接影响到整个页面的 <body> 元素样式,而不受到组件作用域的限制。

总之,:global 是一个很有用的特性,它能够帮助我们在需要的时候直接操作全局样式,而不必受到组件作用域的限制。

三.Component

1.Dom传送门

​
<template>
  <div>
    <input v-model="message" />
    <p>{{ message }}</p>
  </div>
</template> 
<script setup>
import { ref } from 'vue';
const message = ref('Hello World');
</script>
​

2.prop验证

请验证Button组件的Prop类型 ,使它只接收: primary | ghost | dashed | link | text | default ,且默认值为default

// 你的答案
<script setup lang="ts">
defineProps({
  type: {
  type: String,
  validator(value: string){
    return ['primary', 'ghost','dashed','link','text','default'].includes(value)
  },
  default: 'default'
  }
})
</script>
​
<template>
  <button>Button</button>
</template>

3.函数式组件

<script setup lang='ts'>
​
import { h, ref } from "vue"
​
/**
 * Implement a functional component :
 * 1. Render the list elements (ul/li) with the list data
 * 2. Change the list item text color to red when clicked.
*/
const ListComponent = (p, { emit }) => {
  return h(
    'ul',
    {},
    p.list.map((x, i) => {
      return h('li', {
        style: { color: (p['active-index'] == i) ? 'red' : null },
        onClick: () => { emit('toggle', i) }
      }, x.name)
    })
  )
}
​
const list = [{
  name: "John",
}, {
  name: "Doe",
}, {
  name: "Smith",
}]
​
const activeIndex = ref(0)
​
function toggle(index: number) {
  activeIndex.value = index
}
​
</script>
​
<template>
  <list-component :list="list" :active-index="activeIndex" @toggle="toggle" />
</template>
​
  1. import { h, ref } from "vue":这里使用了 Vue 3 提供的 h 函数来创建虚拟 DOM 节点,并且引入了 ref 函数用于创建响应式数据。

  2. ListComponent 函数:这是一个接受参数 p 和上下文对象的函数,通过调用 h 函数来创建一个 ul 元素,然后根据 list 数组的内容动态生成 li 元素。当列表项被点击时,会触发 emit('toggle', i) 来发出 toggle 事件,从而实现改变列表项文本颜色的功能。

  3. list 数组和 activeIndex 变量:定义了一个包含姓名的列表数组 list,以及一个响应式变量 activeIndex,它用来追踪当前被点击的列表项索引。

  4. toggle 函数:当列表项被点击时,会调用 toggle 函数来更新 activeIndex 的值,从而实现改变列表项颜色的效果。

在模板中使用了自定义的 list-component 组件,并将 listactiveIndex 以及 toggle 事件作为参数传递给该组件。

总的来说,这段代码演示了如何使用 Vue 3 中的 Composition API 和 JSX 语法来创建一个功能性的列表组件,实现了根据点击状态改变列表项文本颜色的功能。希望这能帮助到您理解这段代码的含义。如果您有其他问题,也欢迎随时向我提问。

这段代码是一个函数式组件,使用了 Vue 3 的渲染函数 h 来创建虚拟 DOM 元素。让我们逐步分析代码的细节:

const ListComponent = (p, { emit }) => {
​

这是一个接收两个参数的箭头函数组件。参数 p 是传入的属性对象,包含了组件的属性值。{ emit } 是解构赋值语法,用于从上下文对象中提取 emit 方法。

return h(
  'ul',
  {},
  p.list.map((x, i) => {
    return h('li', {
      style: { color: (p['active-index'] == i) ? 'red' : null },
      onClick: () => { emit('toggle', i) }
    }, x.name)
  })
)

这里使用 h 函数来创建虚拟 DOM 元素。首先,创建了一个 <ul> 元素作为父容器,然后通过 p.list.mapp.list 数组进行遍历,生成多个 <li> 元素。

<li> 元素中,使用了动态绑定 style 属性来设置样式。当 p['active-index'] 的值等于当前索引 i 时,将文本颜色设置为红色,否则设置为默认颜色。

具体来说,p.list.map((x, i) => { ... }) 中的箭头函数用于处理数组中的每个元素。在这个箭头函数中,x 表示数组中的当前元素,而 i 则表示当前元素的索引。在这个例子中,x 表示列表项的内容,i 表示列表项的索引。

同时,给每个 <li> 元素绑定了 onClick 事件,当元素被点击时,调用 emit 方法触发名为 'toggle' 的事件,并传递当前索引 i 作为参数。

最后,整个组件返回了由 <ul> 和多个 <li> 元素组成的虚拟 DOM 树。

这段代码实现了一个简单的列表组件,根据传入的 list 数组生成对应的列表项,并根据 active-index 属性来设置活动项的样式。当列表项被点击时,会触发一个自定义的 'toggle' 事件,并传递点击项的索引作为参数。

4.渲染函数h

在这个挑战中,你需要使用h渲染函数来实现一个组件。

请注意: 你应该确保参数被正确传递、事件被正常触发和插槽内容正常渲染。让我们开始吧。

import { defineComponent, h } from "vue"
​
export default defineComponent({
  name: 'MyButton',
  props: {
    disabled: Boolean
  },
​
  render() {
    const customClick = () => {
      this.$emit('custom-click')
    }
    return h(
      'button',
      {
        disabled: this.$props.disabled,
        onClick: customClick
      },
      this.$slots.default()
    )
  }
})
<script setup lang="ts">
import MyButton from "./MyButton"
​
const onClick = () => {
  console.log("onClick")
}
​
</script>
​
<template>
  <MyButton :disabled="false" @custom-click="onClick">
    my button
  </MyButton>
</template>
​
  1. import { defineComponent, h } from "vue":从 Vue 中导入 defineComponenthdefineComponent 用于定义一个组件,h 用于创建虚拟节点。

  2. export default defineComponent({:使用 defineComponent 定义一个组件,并通过 export default 将其导出。

  3. name: 'MyButton',:指定组件的名称为 'MyButton'

  4. props: { disabled: Boolean },:定义组件的 prop,这里只有一个名为 disabled 的 prop,类型为布尔型。

  5. render() {:使用 render() 方法来定义组件的渲染函数。

  6. const customClick = () => { this.$emit('custom-click') }:定义了一个名为 customClick 的函数,在按钮被点击时触发 custom-click 事件。

  7. return h(:开始返回一个虚拟节点。

  8. 'button',:指定这个虚拟节点是一个 <button> 元素。

  9. { disabled: this.$props.disabled, onClick: customClick },:设置 <button> 元素的属性,disabled 属性值为 this.$props.disabledonClick 事件处理函数为 customClick

  10. this.$slots.default():插槽内容,默认插槽的内容会显示在按钮内部。

  11. ):结束创建虚拟节点。

整体来说,这段代码定义了一个名为 MyButton 的 Vue 组件,它接受一个名为 disabled 的 prop,根据传入的 disabled prop 值来决定按钮是否为禁用状态。当按钮被点击时,会触发 custom-click 事件。

5.树组件

在这个挑战中,你需要实现一个树组件,让我们开始吧。

<script setup lang="ts">
import { ref } from "vue"
import TreeComponent from "./TreeComponent.vue"
const treeData = ref([{
  key: '1',
  title: 'Parent 1',
  children: [{
    key: '1-1',
    title: 'child 1',
  }, {
    key: '1-2',
    title: 'child 2',
    children: [{
      key: '1-2-1',
      title: 'grandchild 1',
    }, {
      key: '1-2-2',
      title: 'grandchild 2',
    },]
  },]
}, {
  key: '2',
  title: 'Parent 2',
  children: [{
    key: '2-1',
    title: 'child 1',
    children: [{
      key: '2-1-1',
      title: 'grandchild 1',
    }, {
      key: '2-1-2',
      title: 'grandchild 2',
    },]
  }, {
    key: '2-2',
    title: 'child 2',
  },]
}])
</script>
​
<template>
  <TreeComponent :data="treeData" />
</template>
​

<script setup lang="ts">
import { h } from 'vue'
interface TreeData {
  key: string
  title: string
  children: TreeData[]
}
const props = defineProps<{data: TreeData[]}>()
  
const render = () => {
  function makeTree(data?: TreeData, depth: number) {
    if (!data) return
    const nodes = []
​
    for(let i = 0; i < data.length; i++) {
      const node = h('ul', [
        h('li', { key: data[i].key }, `${data[i].title} - depth (${depth})`), 
        makeTree(data[i].children, depth + 1) // recursion for depth traversion
      ])
      nodes.push(node)
    }
​
    return nodes  
  }
  
  return makeTree(props.data, 0)
}
  
</script>
​
<template>
  <render />
</template>
​

四.Composable Function

1.切换器

2.计数器

3.实现本地储存函数

4.鼠标坐标

五.Vue3简介

1.WebPack构建与Vite构建

传统的webpack打包:
              ->module
        routes->module 
              ->module
entry ->routes          ->Bundle ->Server Ready
                        
        routes
        
使用Vite打包:                         ->module      
                HTTP request    route->module               
Server ready     ->     entry ->route
                                route

webpack是先获取不同routes的不同module,最后打包,然后启动项目

Vite是先启动项目,等Http发起request时候,根据访问到的route加载module.这样运行速度更快

  • Vite是新一代前端构建工具

    • 轻量快速的热重载(HMR),极速服务启动

    • 对TypeScript,JSX,CSS的开箱就用

    • 按照需求编译,不用等待整个应用编译完成

2.Vue3项目初始化细节

A.项目的创建与初始化

npm create vue@lastest 创建项目

在发现env.d.ts报错/// <reference types="vite/client" /> 标红表示无法找到依赖后

npm i 开始安装依赖//上述问题是因为没有node_modules文件夹无法找到依赖

QQ截图20240618195413

这是成功的表现

B.Vite项目的入口-index文件

传统webpack的入口是main.js或者main.ts

但是我们的Vite项目,是用index.html作为入口的

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8">
    <link rel="icon" href="/favicon.ico">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Vite App</title>
  </head>
  <body>
    <div id="app"></div>
    <script type="module" src="/src/main.ts"></script>
  </body>
</html>
​

我们通过

npm run dev启动项目

C.main.ts文件解析

import './assets/main.css'
​
import { createApp } from 'vue'//createApp是花盘 App就是根
import App from './App.vue'
​
createApp(App).mount('#app')//createApp创建一个根组件,组件是App 创建花盆 把花放入花盆
//.mount是挂在,将App挂在到index的id=app的标签中 ->摆花盆的位置

D.开放给main.ts的import组件需要export

<template>
<div class="app">
  <h1>你好啊</h1>
​
</div>
</template>
<script lang="ts">
export default{
  name:'App'//组件名:我们在main.ts中通过export部分来读取App.vue
}
</script>
<style>
.app{
  background-color: #ddd;
  box-shadow: 0 0 10px;
  border-radius: 10px;
  padding: 20px;
}
</style>

E.Vite项目初始化总结

  • Vite项目中,index.html是项目入口文件,在项目最外层

  • 加载index.html,Vite解析<script type="module" src="xxx">指向的JavaScript

  • Vue3中通过createApp函数创建一个应用实例

3.选项式API与组合式API

A.OptionsAPI和CompositionAPI

  • Options类型的API,数据,方法,计算属性:是分散在data,methods,computed中的:如果要修改一个需求,就得分别修改data,methods,computed,不利于维护和复用

QQ截图20240618205101

  • Vue3的组合式:

    • 对于一个功能:所有的数据,计算属性,都被包含在一个函数中了。我们用不同的函数来区别不同的功能。相较于Vue2选项式API的分散和不易管理性,Vue3的组合式API更方便大型项目对于细微功能的快速调整

QQ截图20240618205221

B.setup的概述

前言:Vue3支持多个根标签,也就是在App中,可以出现多个子组件的标签

QQ截图20240618205601

<template>
    <div class="Person">
        <h2>姓名:{{ name }}</h2>
        <h2>年龄:{{ age }}</h2>
        <button @click="showTel">查看联系方式</button>
    </div>
</template>
<script lang="ts">
export default{
    //console.log(this);//这里报的是undefined 
    name:'Person',
    setup(props, ctx) {
        //数据:
        let name = "张三";//不是响应式的
        let age = 18;//不是响应式的
        let tel ='138888888';
        
        //函数
        function showTel(){
            //这里不能用this setup函数中不可以用this.
            alert(tel)
        }
        return {name,age,showTel}
    },
}
​
</script>
​
<style>
.Person{
    background-color: skyblue;
    box-shadow: 0 0 10px;
    border-radius: 10px;
    padding: 20px;
}
</style>
  • setup本身是一个配置项->表达成setup(){}即可

  • 如果你直接let xxx = 12;这样定义数据,数据将不是响应式的,不会自动更新(自动更新:我在函数中让xxx自增,但是在template中{{xxx}}不会发生变化)-(原先写在data中的)

  • setup()中的变量与方法都需要在return中返回,不交出去上述的数据和方法都是无效的

  • 在setup()中不可以使用this来调用定义的数据,setup()中没有this,Vue3中开始弱化this的概念了

  • setup()执行的时期是:在beforeCreate()这个钩子函数之前

C.setup的返回值

  • setup的返回值不一定是对象

return function()=>{
    return "哈哈"
}
//这里 哈哈会覆盖template中的内容 这是小部分情况
​
return {name,age,showTel}//大部分的情况

D.setup和OptionsAPI

QQ截图20240618214333

  • 我们发现:setup()和data()与methods()可以同步存在

  • data()和methods可以通过this.属性名来调用在setup()中定义的变量:例如this.name 但是setup()中是不能使用this.age来调用属性的,这是因为setup()执行的时间较早。

E.setup的语法糖

1. npm i vite-plugin-vue-setup-extend -D 
//这个依赖用于实现 <script setup name="Person234">
2. import  VueSetupExtend from'vite-plugin-vue-setup-extend';
//这是在vite.config.ts中进行依赖的引入
​
​
//避免创建两个<script>
//使得一个额外的
<script>
export default{
    name:'Person234'
}
</script>

现在可以看到完整的例子:

<template>
    <div class="Person">
        <h2>姓名:{{ name }}</h2>
        <h2>年龄:{{ age }}</h2>
        <button @click="showTel">查看联系方式</button>
    </div>
</template>
​
<script lang="ts" setup name="Person234">
​
​
 //数据:
 let name = "张三";
        let age = 18;
        let tel ='138888888';
        
        //函数
        function showTel(){
            //这里不能用this setup函数中不可以用this.
            alert(tel)
        }
        
</script>
​
<style>
.Person{
    background-color: skyblue;
    box-shadow: 0 0 10px;
    border-radius: 10px;
    padding: 20px;
}
</style>

4.ref与reactive的响应式数据/对象

A.ref创建基本类型的响应式数据

QQ截图20240618225303

通过Vue工具可以发现:在Vue工具中,setup中一定是数据,而setup()中不一定是方法:说明在Vue中,数据的优先级是最高的。

QQ截图20240618225826

  1. 通过import {ref} from 'vue' 通过解构语法引入vue中的ref

  2. let age = ref(18)让需要成为响应式数据的值放到ref中

  3. 通过age.value也就是值.value的形式调用响应式结果

B.reactive创建对象类型的响应式数据

QQ截图20240618231435

  1. 通过import {reactive} from 'vue'引入作用于对象的响应式符号

  2. reactive修饰的对象不需要通过.value来获取值

补充:在<ul> <li>中 我们使用v-for(g in games) 来通过数组生成若干个li标签

再通过插值表达式{{g.name}}来表达具体的值

C.ref创建对象类型的响应式数据

QQ截图20240618232231

  • 通过import {ref} from 'vue' 通过解构语法引入vue中的ref

  • 切记即使调用数组中的对象,也要先.value再取[0]或者[x];

D.ref与reactive的比较

  • 宏观角度:

    • ref用于定义:基本数据类型,对象数据类型

    • reactive用于定义:对象数据类型

  • 区别:

    • ref创建的变量必须用.value(使用volar插件自动添加.value)

      • setup() {
                       // 创建一个响应式对象
                       const state = reactive({ count: 0 });
          
                       // 增加计数器
                       const increment = () => {
                           state.count++;
                       };
          
                       // 重置状态
                       const resetState = () => {
                           // 重新分配一个新对象
                           state = reactive({ count: 0 });
                       };//重置状态:resetState方法试图通过重新分配一个新对象给state来重置状态。
            //点击“Reset State”按钮时,期望能够重置state,但由于重新分配了一个新对象给state,导致新对象没有被代理,因此失去了响应性。此时,再点击“Increment”按钮将不会触发视图更新。
          
                       return {
                           state,
                           increment,
                           resetState
                       };

    • reactive重新分配一个对象,会失去响应式结果

  • 使用原则

    • 需要一个基本类型响应式数据:必须用ref

    • 需要一个响应式对象,层级不深ref,reactive均可以

    • 需要一个响应式对象,层级很深,推荐使用reactive:嵌套中不要重复使用reactive

E.toRefs与toRef的比较

image-20240618234117938

  • 引入import {toRefs} from 'vue'

  • 被toRefs修饰的应该是已经被reactive修饰的对象

  • 被解构赋值的结果于toRefs中的内容建立了动态关联

5.computed与watch及watchEffect

A.computed计算属性

B.watch监视情况一

C.watch监视情况二

D.watch监视情况三

E.watch监视情况四

F.watch监视情况五

G.watchEffect

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

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

相关文章

STM32F407之移植LVGL(8.4.0)

STM32F407之移植LVGL(8.4.0) 目录 概述 1 系统软硬件 1.1 软件版本信息 1.2 ST7796-LCD 1.3 MCU IO与LCD PIN对应关系 1.4 MCU IO与Touch PIN对应关系 2 认识LVGL 2.1 LVGL官网 2.2 下载V8.4.0 3 移植LVGL 3.1 硬件驱动实现 3.2 添加LVGL库文件 3.3 移植和硬件相关…

初识es(elasticsearch)

初识elasticsearch 什么是elasticsearch&#xff1f;&#xff1a; 一个开源的分部署搜索引擎、可以用来实现搜索、日志统计、分析、系统监控等功能。 什么是文档和词条&#xff1f; 每一条数据就是一个文档对文档中的内容进行分词&#xff0c;得到的词语就是词条 什么是正向…

【设计文档】软件详细设计说明书案例文档(word直接套用)

一、 关于本文档 &#xff08;一&#xff09; 编写目的 &#xff08;二&#xff09; 预期读者 二、 项目概要 &#xff08;一&#xff09; 建设背景 &#xff08;二&#xff09; 建设目标 &#xff08;三&#xff09; 建设内容 三、 总体设计 &#xff08;一&#xff0…

MySQL中的客户端选项(四)

用于连接到服务器的传输协议。当其他连接参数通常导致使用的协议不是您想要的协议时&#xff0c;它很有用。 不缓存每个查询的结果&#xff0c;而是实时地打印每一行&#xff0c;如果输出被挂起&#xff0c;这可能会减慢服务器的速度。有了这个选项&#xff0c;mysql就不会使用…

QT基础 - 窗口弹窗

目录 零. 窗口简介 一. 普通窗口 二. 无边框窗口 三. 顶层窗口 四. 模态对话框 五. 非模态对话框 六. 消息对话框 七. 文件对话框 八. 颜色对话框 九. 进度对话框 十. 总结 零. 窗口简介 在 Qt中&#xff0c;普通窗口是指程序的整体界面&#xff0c;可以包含标题栏、…

GIS设计与开发课程设计(三)

环境&#xff1a;Windows10专业版 ArcGIS10.2 ArcEngine10.2 Visual Studio 2019 因每个人电脑版本和软件版本不同&#xff0c;运行的结果可能不同 系列文章&#xff1a; GIS设计与开发课程设计&#xff08;一&#xff09; GIS设计与开发课程设计&#xff08;二&#xff09;…

SpringMVC系列三: Postman(接口测试工具)

接口测试工具 &#x1f49e;Postman(接口测试工具)Postman介绍Postman是什么Postman相关资源Postman安装Postman快速入门Postman完成Controller层测试其它说明 &#x1f49e;课后作业 上一讲, 我们学习的是SpringMVC系列二: 请求方式介绍 现在打开springmvc项目 &#x1f49e…

公司面试题总结(六)

31.说一说 webpack 的构建流程是什么&#xff1f; ⚫ 初始化流程&#xff1a; ◼ 从配置文件和 Shell 语句中读取与合并参数 ◼ 初始化需要使用的插件和配置插件等执行环境所需要的参数 ⚫ 编译构建流程&#xff1a; ◼ 从 Entry 发出&#xff0c;针对每个 Module 串行…

本地部署Ollama+qwen本地大语言模型Web交互界面

什么是 Ollama WebUI&#xff1f; Ollama WebUI 已经更名为 Open WebUI. Open WebUI 是一个可扩展、功能丰富且用户友好的自托管 WebUI&#xff0c;旨在完全离线操作。它支持各种 LLM 运行程序&#xff0c;包括 Ollama 和 OpenAI 兼容的 API。 Ollama WebUI 是一个革命性的 L…

酷开会员 | 酷开系统将艺术、回忆与浪漫融入生活

随着审美观念的改变以及技术的提升&#xff0c;消费者对家用电视的需求已不局限于单纯的功能性&#xff0c;外观设计带来的美感与视觉效果也愈发成为消费者关注的焦点。在画质和功能逐步完善的当下&#xff0c;电视中的壁纸模式&#xff0c;则能让其更好地融入家居环境&#xf…

深度学习入门5——为什么神经网络可以学习?

在理解神经网络的可学习性之前&#xff0c;需要先从数学中的导数、数值微分、偏导数、梯度等概念入手&#xff0c;从而理解为什么神经网络具备学习能力。 1.数值微分的定义 先从导数出发理解什么是梯度。某一点的导数直观理解就是在该点的切线的斜率。在数学中导数表示某个瞬…

AI智能盒子助力打造垃圾发电AI应用标杆!

垃圾焚烧发电作为一种新型的垃圾处理方式&#xff0c;能将其转化为电能&#xff0c;实现资源的再利用&#xff0c;成为实现节能环保的重要方式之一。为有效落实环境、安全、健康及社会责任管理体系&#xff0c;知名垃圾发电投资运营商光大环保能源致力于广泛利用科技&#xff0…

ubuntu永久换镜像源详细方法

1.查看ubuntu的版本&#xff0c;不同的版本对应的不同的镜像源&#xff08;下面会讲到&#xff0c;先按步骤操作即可&#xff09; cat /etc/issue 2.先备份一个&#xff0c;防止更改错误 cp /etc/apt/sources.list /etc/apt/sources.list.backup 3.备份好之后删除原有的sour…

Linux系统之mtr命令的基本使用

Linux系统之mtr命令的基本使用 一、mtr命令介绍二、mtr命令使用帮助2.1 mtr命令的帮助信息2.2 mtr帮助信息解释 三、安装mtr工具四、mtr命令的基本使用4.1 直接使用4.2 设定ping次数4.3 禁用DNS解析4.4 显示IP地址4.5 调整间隔 五、总结 一、mtr命令介绍 mtr命令是一个网络诊断…

Vulnhub——AI: WEB: 1

渗透复现 &#xff08;1&#xff09;目录扫描爆破出隐藏页面info.php和传参页面&#xff0c;泄露网站绝对路径并且存在SQL注入点 &#xff08;2&#xff09;已知网站绝对路径&#xff0c;存在SQL注入点&#xff0c;尝试OS-shell写入 &#xff08;3&#xff09;OS-shell写入后…

MySQL----redo log重做日志原理及流程

重做日志 redo log&#xff1a;重做日志&#xff0c;用于记录事务操作的变化&#xff0c;确保事务的持久性。redo log是在事务开始后就开始记录&#xff0c;不管事务是否提交都会记录下来&#xff0c;在异常发生时&#xff08;如数据持久化过程中掉电&#xff09;&#xff0c;…

【AI学习】LLaMA 系列模型的进化(一)

一直对LLaMA 名下的各个模型关系搞不清楚&#xff0c;什么羊驼、考拉的&#xff0c;不知所以。幸好看到两篇综述&#xff0c;有个大致了解&#xff0c;以及SEBASTIAN RASCHKA对LLaMa 3的介绍。做一个记录。 一、文章《Large Language Models: A Survey》中对LLaMa的介绍 论文…

【博士每天一篇文献-算法】Memory aware synapses_ Learning what (not) to forget

阅读时间&#xff1a;2023-12-13 1 介绍 年份&#xff1a;2018 作者&#xff1a;Rahaf Aljundi,丰田汽车欧洲公司研究员;阿卜杜拉国王科技大学(KAUST)助理教授;Marcus Rohrbach德国达姆施塔特工业大学多模式可靠人工智能教授 会议&#xff1a; Proceedings of the European c…

【串口通信-USART】

串口通信 前言一、串行通信和并行通信二、波特率三、USRAT如何实现USART 四、通信的时候共地五、奇偶校验位总结 前言 大三上时候的笔记⇨32入门-串口通信-发送和接收数据&#x1f31f;更加偏向32部分的吧。 大三上左右的时候写过串口通信的笔记&#xff0c;那时候虽然青涩啥也…

结硬寨:联想服务器的向前之路

曾国藩曾经将自己的战略思想&#xff0c;总结为“结硬寨&#xff0c;打呆仗”。 这种稳健的策略&#xff0c;往往在真实的产业发展中能收获奇效。我们喜欢听颠覆性的产业创新&#xff0c;却往往忽视稳扎稳打&#xff0c;把每一个优势聚集起来形成整体优势&#xff0c;可能才是市…