nuxt3 简易教程

news2024/11/26 23:31:22

代码仓库

https://github.com/malred/nuxt_tutorial

https://gitee.com/malguy/nuxt_tutorial

什么是 Nuxt

根据 Vue 官网的说法

 

v2-0caf5ae51acd2d44bac31aa5ecb9a892_720w.webp
v2-9c5735e162ac005e8e71634d77170bad_720w.webp
v2-6d344e8c45b7ce7983ab5ec4a576c454_720w.webp
而 Nuxt 是由 Vue 官方团队开发的 SSR 框架

创建项目

npx nuxi init todo
项目结构

 

v2-2a7ec0dbbfb01198174ab80a0c4933c8_720w.webp
创建完需要手动安装依赖
cd todo
npm i
# 启动
npm run dev
v2-d240bbc748b6813020c4b91b66d5d469_720w.webp

基本 html 和样式

<template>
  <div class="container">
    <div class="todos">
      <input type="text" placeholder="输入代办事项......" />
      <button>save</button>
    </div>
    <div class="items">
      <div class="item">
        <span class="item-todo">play game</span>
        <span class="x">x</span>
      </div>
      <div class="item">
        <span class="item-todo">play game</span>
        <span class="x">x</span>
      </div>
      <div class="item">
        <span class="item-todo done">play game</span>
        <span class="x">x</span>
      </div>
    </div>
    <div class="options">
      <span :class="['option', { active: option == 'all' ? true : false }]"
        >all</span
      >
      <span class="line">|</span>
      <span :class="['option', { active: option == 'done' ? true : false }]"
        >done</span
      >
      <span class="line">|</span>
      <span :class="['option', { active: option == 'todo' ? true : false }]"
        >todo</span
      >
    </div>
  </div>
</template>
<script setup>
const option = ref('all')
</script>
<style>
.container {
  display: flex;
  align-items: center;
  justify-content: center;
  flex-direction: column;
  margin-top: 60px;
}

.items {
  margin: 15px 0;
}
.options {
  margin: 15px 0;
}
.todos {
  margin: 15px 0;
}

.item {
  margin-bottom: 8px;
  display: flex;
  justify-content: space-between;
  align-items: center;
}
.done {
  text-decoration: line-through;
  color: grey;
}
.x {
  margin-left: 190px;
  cursor: pointer;
  font-size: 18px;
}

.option {
  cursor: pointer;
  padding: 2px;
  color: grey;
}
.line {
  padding: 2px;
  color: grey;
}
.active {
  padding: 2px;
  color: black;
}

input {
  outline-style: none;
  border: 1px solid #ccc;
  border-radius: 3px;
  padding: 6px;
  width: 300px;
  /* margin: 0 15px; */
  font-size: 14px;
  font-family: 'Microsoft soft';
}
input:focus {
  border-color: #66afe9;
  outline: 0;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075),
    0 0 8px rgba(102, 175, 233, 0.6);
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075),
    0 0 8px rgba(102, 175, 233, 0.6);
}

button {
  background-color: #4caf50; /* Green */
  border: none;
  color: white;
  border-radius: 3px;
  padding: 8px 22px;
  text-align: center;
  text-decoration: none;
  display: inline-block;
  margin: 0 15px;
  font-size: 16px;
}
</style>
v2-eb526bfb3ff5e65c0a5cf1f3b02c3f18_720w.webp

使用组件

nuxt 支持识别特定的文件夹
根目录下的 components 的 vue 文件会被自动识别为组件,使用时无需手动导入
设组件 components/test/A.vue,则该组件标签写法是:<TestA>
v2-f159233ab3e311430d709c4282185726_720w.webp
Item.vue
<template>
  <div class="item">
    <span :class="['item-todo', { done: isDone ? true : false }]">{{
      name
    }}</span>
    <span class="x" @click="handleClick">x</span>
  </div>
</template>
<script setup>
import { defineProps, defineEmits } from 'vue'
const props = defineProps({
  isDone: {
    type: Boolean
  },
  name: {
    type: String
  }
})
const emits = defineEmits(['del'])
const handleClick = () => {
  emits('del', props.name)
}
</script>
Option.vue
<template>
  <span
    @click="changeOpt"
    :class="['option', { active: nowOption == option ? true : false }]"
  >
    {{ option }}</span
  >
  <span class="line" v-if="line">|</span>
</template>
<script setup>
import { defineProps, defineEmits } from 'vue'
const props = defineProps({
  option: {
    type: String
  },
  nowOption: {
    type: String
  },
  line: {
    type: Boolean,
    default: true
  }
})
const emits = defineEmits(['changeOpt'])
const changeOpt = () => {
  emits('changeOpt', props.option)
}
</script>
app.vue
<template>
  <div class="container">
    <div class="todos">
      <input type="text" placeholder="输入代办事项......" />
      <button>save</button>
    </div>
    <div class="items">
      <Item v-for="v in items" :name="v" @del="handleDel"></Item>
    </div>
    <div class="options">
      <Option
        v-for="v in [
          { opt: 'all', line: true },
          { opt: 'done', line: true },
          { opt: 'todo', line: false }
        ]"
        :option="v.opt"
        :nowOption="option"
        @changeOpt="handleChangeOption"
        :line="v.line"
      >
        ></Option
      >
    </div>
  </div>
</template>
<script setup>
const option = ref('all')
const handleChangeOption = value => {
  option.value = value
}
const items = ref(['play game', 'go to bed', 'fly'])
const handleDel = name => {
  items.value = items.value.filter(item => item !== name)
}
</script>

状态管理

nuxt 会将 composables 下的文件识别并自动添加到全局
v2-9468488ad87165cebbe90cdfacdf952f_720w.webp
composables/useOptionMode.ts
const useOptionMode = () => {
  const optionMode = useState('option', () => 'all')
  // 修改option
  const changeOptionMode = (name: string) => {
    optionMode.value = name
  }
  // 是否显示该todo项
  const isShow = (isDone: boolean) => {
    const val = optionMode.value
    if (val == 'all') {
      return true
    }
    if (val == 'done') {
      return isDone
    }
    if (val == 'todo') {
      return !isDone
    }
  }
  return {
    optionMode,
    changeOptionMode,
    isShow
  }
}

export default useOptionMode
在其他地方都可以使用
Item.vue
<template>
  <div class="item" v-if="isShow(isDone)">
    <span
      @click="handleToggleDone"
      :class="['item-todo', { done: isDone ? true : false }]"
      >{{ name }}</span
    >
    <span class="x" @click="handleClick">x</span>
  </div>
</template>
<script setup>
import { defineProps, defineEmits } from 'vue'
const { isShow } = useOptionMode()
const props = defineProps({
  isDone: {
    type: Boolean
  },
  name: {
    type: String
  }
})

const emits = defineEmits(['del', 'toggleDone'])
const handleClick = () => {
  emits('del', props.name)
}
const handleToggleDone = () => {
  emits('toggleDone', props.name)
}
</script>
Option.value
<template>
  <span
    @click="changeOptionMode(option)"
    :class="['option', { active: optionMode == option ? true : false }]"
  >
    {{ option }}</span
  >
  <span class="line" v-if="line">|</span>
</template>
<script setup>
import { defineProps } from 'vue'
const { optionMode, changeOptionMode } = useOptionMode()
const props = defineProps({
  option: {
    type: String
  },
  line: {
    type: Boolean,
    default: true
  }
})
</script>
app.vue 做了一些修改
<template>
  <div class="container">
    <div class="todos">
      <input type="text" placeholder="输入代办事项......" />
      <button>save</button>
    </div>
    <div class="items">
      <Item
        v-for="v in items"
        :name="v.name"
        :isDone="v.isDone"
        @del="handleDel"
        @toggleDone="handleToggleDone"
      ></Item>
    </div>
    <div class="options">
      <Option
        v-for="v in [
          { opt: 'all', line: true },
          { opt: 'done', line: true },
          { opt: 'todo', line: false }
        ]"
        :option="v.opt"
        :line="v.line"
      >
        ></Option
      >
    </div>
  </div>
</template>
<script setup>
// const option = ref('all')
const items = ref([
  { name: 'play game', isDone: true },
  { name: 'go to bed', isDone: true },
  { name: 'fly', isDone: true }
])

const handleDel = name => {
  items.value = items.value.filter(item => item.name !== name)
}
const handleToggleDone = name => {
  items.value = items.value.map(item => {
    if (item.name == name) {
      item.isDone = !item.isDone
    }
    return item
  })
}
</script>

添加元数据

在 nuxt 项目里看不到 index.html,但是可以通过配置文件给 html 添加元数据
而元数据可以让SEO更好地搜索到我们
目前的 head 标签里没有我们自定义的内容
v2-1664518560ed0849a9671ceabf506591_720w.webp
修改 nuxt.config.ts 添加内容
// https://nuxt.com/docs/api/configuration/nuxt-config
export default defineNuxtConfig({
  devtools: { enabled: true },
  app: {
    head: {
      meta: [],
      link: [
        {
          rel: 'stylesheet',
          href: 'https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css'
        }
      ],
      title: 'Hello Nuxt'
    }
  }
})
可以看到多出了我们添加的内容
v2-7aa7fae3bc5e5692b0b9c09c596f6c39_720w.webp

基于页面和文件的路由

nuxt 可以识别 pages 文件夹下的文件,将它们添加为页面
index.vue 会识别为首页(将 app.vue 的内容移动到 pages/index.vue 并删除 app.vue,然后要重启项目才能应用更改)
然后我们添加 about 页面
v2-77933491c0865b9bdf938f5aa3d5f712_720w.webp
v2-6892dfd3ba8685a73927fcf3ff0128bc_720w.webp
我们可以使用动态的路由
v2-a2d63ecce0752215beb0b0bbde51e53b_720w.webp
此时,访问/about 会显示 about/index.vue,而访问/about/xxx 则会显示/about/[name].vue
我们给 about 添加跳转逻辑,来测试 about/[name].vue
pages/about/index.vue
<template>
  <div>
    <h1>about</h1>
    <ul>
      <li v-for="v in ['a', 'b', 'c', 'd', 'e']">
        <!-- 跳转可以使用 <NuxtLink to="xxx" /> -->
        <a :href="`/about/${v}`">{{ v }}</a>
      </li>
    </ul>
  </div>
</template>
<style scoped>
div {
  display: flex;
  justify-content: center;
  align-items: center;
  flex-direction: column;
  margin-top: 50px;
}
</style>

提取路径参数

我们编写[name].vue,从路由中提取参数并显示
pages/about/[name].vue
<template>
  <div class="">
    <h1>{{ name }}</h1>
  </div>
</template>
<script setup>
const route = useRoute()
const name = route.params.name
</script>
<style scoped>
div {
  margin-top: 50px;
  text-align: center;
}
</style>
v2-42ba78b00614f0fb0a78c63c5afc9ab0_720w.webp

错误页面

Nuxt 支持自定义错误时显示的页面,在根目录新建 error.vue
<template>
  <div>
    <div class="container">
      <h1>Something be wrong!</h1>
      <NuxtLink to="/">Go Back</NuxtLink>
    </div>
  </div>
</template>
<style scoped>
.container {
  text-align: center;
  margin-top: 5rem;
}
</style>
我们将 pages/about/[name].vue 里的 fetch 故意修改为错误的
v2-7c22488e2c5931fda7cef9d7d0e0969b_720w.webp
此时错误页面显示
v2-8dc2885813534699f4b1186ab649bf25_720w.webp
添加对 404 的处理
<template>
  <div>
    <div class="container">
      <h1 v-if="error.statusCode === 404">Page not found!</h1>
      <h1 v-else>Something be wrong!</h1>
      <NuxtLink to="/">Go Back</NuxtLink>
    </div>
  </div>
</template>
<script setup>
import { defineProps } from 'vue'
const props = defineProps({
  error: {
    type: Object
  }
})
</script>
v2-453c5f610f074ae28829e1f28c059c9b_720w.webp

使用 layout 布局

我们可以添加 layouts/default.vue,它会把该文件的内容添加到所有组件
layouts/default.vue
<template>
  <div class="">
    <!-- 顶部导航 -->
    <nav>
      <span><a href="/">Home</a></span>
      <span><a href="/about">About</a></span>
    </nav>
    <!-- 页面内容 -->
    <slot />
  </div>
</template>
<style scoped>
nav {
  background-color: aquamarine;
  padding: 5px;
  display: flex;
  align-items: center;
  justify-content: end;
}
span {
  cursor: pointer;
  margin: 8px;
}
a {
  text-decoration: none;
}
</style>
v2-41733dac44b20092d0d06f797f1cd81e_720w.webp

自定义布局

我们可以自定义 layout,然后手动在需要的地方使用。假设我们要在页脚加个人信息
layouts/custom.vue
<template>
  <div>
    <!-- 页面内容 -->
    <slot />
    <div class="foot">
      <div>个人博客网站:<a href="//malred.github.io">malred.github.io</a></div>
    </div>
  </div>
</template>
<script setup></script>
<style scoped>
.foot {
  font-size: 18px;
  line-height: 50px;
  height: 50px;
  text-align: center;
  background-color: aquamarine;
  position: absolute;
  width: 100%;
  bottom: 0;
}
</style>
在首页添加
<template>
  <div class="">
    <!-- 通过name属性来指定,这里使用了layouts/custom.vue -->
    <NuxtLayout name="custom">
      <div class="container">
        ...
      </div>
    </NuxtLayout>
  </div>
</template>
v2-9a2a3171ca70c7b9e6df7c2f5f44cb3d_720w.webp

获取数据

我们使用 json-server 模拟假数据
/db/db.json
{
  "mock": [
    {
      "id": 1,
      "name": "a",
      "desc": "骨干成员a"
    },
    {
      "id": 2,
      "name": "b",
      "desc": "骨干成员b"
    },
    {
      "id": 3,
      "name": "c",
      "desc": "骨干成员c"
    },
    {
      "id": 4,
      "name": "d",
      "desc": "骨干成员d"
    },
    {
      "id": 5,
      "name": "e",
      "desc": "骨干成员e"
    }
  ]
}
在 db.json 同级目录下新增 package.json
{
  "scripts": {
    "mock": "json-server -w -p 5000 db.json"
  }
}
启动
yarn mock
v2-fa3c0470a20af0394cef60b8b3b6de63_720w.webp

useFetch 使用提取

pages/about/[name].vue
<template>
  <div class="">
    <h1>{{ mock[0].desc }}</h1>
  </div>
</template>
<script setup>
const route = useRoute()
const name = route.params.name

const { data: mock, error } = useFetch(
  // url变化会动态请求
  () => `http://localhost:5000/mock?name=${name}`
)
</script>
v2-f2ea3f689e4adcfb7f5b01cc396ea1fa_720w.webp

useAsyncData 使用异步数据

pages/about/[name].vue
<template>
  <div class="">
    <h1>{{ mock[0].desc }}</h1>
  </div>
</template>
<script setup>
const route = useRoute()
const name = route.params.name

const { data: mock, error } = useAsyncData('mock', async () => {
  const response = await $fetch(`http://localhost:5000/mock?name=${name}`)

  // 可以对得到的数据进行一些操作
  response[0].desc += '~'

  return response
})
</script>
<style scoped>
div {
  margin-top: 50px;
  text-align: center;
}
</style>
useAsyncData 还可以通过 watch 来监听数据变化,动态发起请求

使用 cookie

Nuxt 提供了 useCookie 来操作 cookie
pages/about/[name].vue
<template>
  ...
</template>
<script setup>
const route = useRoute()
const name = route.params.name
// ...

const cookie = useCookie('name')
cookie.value = name
</script>
v2-17cec51d1d6b11d7bfc7fec2bc301c35_720w.webp

存储运行配置

一般前端项目都有一个.env 文件来存放一些信息,Nuxt 可以通过修改配置文件来实现
.env 文件
NUXT_PUBLIC_BASE_URL=http://localhost:5000
nuxt.config.ts 文件 nuxt.config.ts 文件
// https://nuxt.com/docs/api/configuration/nuxt-config
export default defineNuxtConfig({
  // devtools: { enabled: true },
  app: {
    // ...
  },
  runtimeConfig: {
    // The private keys which are only available server-side
    shoeStoreApiSecret: 'my-secret-key',
    // Keys within public are also exposed client-side
    public: {
      baseUrl: process.env.NUXT_PUBLIC_BASE_URL
    }
  }
})
在 pages/about/[name].vue 中使用
在 pages/about/[name].vue 中使用
<template>
  <div class="">
    <h1 @click="console.log(config)">{{ mock[0].desc }}</h1>
  </div>
</template>
<script setup>
// ...

// 读取环境变量
const config = useRuntimeConfig()
console.log(config.public.baseUrl)

const { data: mock, error } = useAsyncData('mock', async () => {
  const response = await $fetch(`${config.public.baseUrl}/mock?name=${name}`)

  // 可以对得到的数据进行一些操作
  response[0].desc += `~`

  return response
})

// ...
</script>

构建 API

Nuxt 支持定义接口
v2-17a689789c677f737a2dc8cb8aafbfdf_720w.webp

定义 Get

// server/db/index.ts
export const db = {
  todos: [
    { name: 'play game', isDone: true },
    { name: 'go to bed', isDone: true },
    { name: 'fly', isDone: true }
  ]
}
// server/api/todo/index.ts
server/api/todo/index.ts
import { db } from '~~/server/db'
// server/api/todo/index.ts
export default defineEventHandler(e => {
  const method = e.req.method
  if (method === 'GET') {
    return db.todos
  }
})
v2-f4bcf393f25498d90fb9d2995e64877e_720w.webp
// pages/index.vue
<template>
  ...
</template>
<script setup>
// const option = ref('all')
// 使用api提供的数据
const { data } = useFetch('/api/todo')
const items = ref(data)

// ...
</script>

后面的懒得写了,待续……

 

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

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

相关文章

大语言模型之二 GPT发展史简介

得益于数据、模型结构以及并行算力的发展&#xff0c;大语言模型应用现今呈井喷式发展态势&#xff0c;大语言神经网络模型成为了不可忽视的一项技术。 GPT在自然语言处理NLP任务上取得了突破性的进展&#xff0c;扩散模型已经拥有了成为下一代图像生成模型的代表的潜力&#x…

@capacitor/filesystem更改downloadfile支持本地文件下载

ionic监听外部程序&#xff1a; android下需要在AndroidManifest.xml添加内容&#xff08;具体参考ionic native的APP插件&#xff09;&#xff0c;配置例如&#xff1a; <intent-filter tools:ignore"AppLinkUrlError"><action android:name"android.…

【Matlab智能算法】PSO优化(单隐层)BP神经网络算法

上一篇博客介绍了BP-GA&#xff1a;BP神经网络遗传算法(BP-GA)函数极值寻优——非线性函数求极值&#xff0c;本篇博客将介绍用PSO&#xff08;粒子群优化算法&#xff09;优化BP神经网络。 1.优化思路 BP神经网络的隐藏节点通常由重复的前向传递和反向传播的方式来决定&#…

(统计学习方法|李航)第四章 朴素贝叶斯算法——贝叶斯估计

贝叶斯估计方法&#xff1a; 计算男女时只有两个值&#xff0c;所以K2 贝叶斯估计就是拉普拉斯平滑 估计方法&#xff1a;为什么叫做贝叶斯估计呢&#xff1f; 例题&#xff1a; 重新回顾以下朴素贝叶斯&#xff1a; 对他求导&#xff0c;求出最大值 得到了色i他的估计值&…

第三章:前端UI框架介绍

文章目录 一、Bootstrap1.1 Bootstrap简介及版本1.2 Bootstrap使用 二、AntDesign2.1 简介2.2 基本使用2.3 antd pro 三、ElementUI3.1 简介3.2 基本使用 四、Vant4.1 简介4.2 基本使用 一、Bootstrap 1.1 Bootstrap简介及版本 1、 简介 Bootstrap&#xff0c;来白 Twitter&a…

服务管理和计划任务

文章目录 服务管理计划任务 服务管理 systemctl 命令字 服务名 //配置服务与systemctl有关的命令字&#xff1a; 计划任务 一次性计划 at 时间 at now 5 min //当前时间五分钟后执行 at -l //列出计划任务 atrm 任务号 //删除计划任务执行完命令后Ctrld生效 周期性计…

LiveNVR监控流媒体Onvif/RTSP功能-视频流水印如何叠加视频水印叠加动态图片叠加视频流时间示例

LiveNVR视频流水印如何叠加视频水印叠加动态图片叠加视频流时间示例 1、介绍2、摄像头OSD设置水印3、前端页面叠加4、视频流水印4.1、图片水印示例4.2、时间戳水印示例 5、RTSP/HLS/FLV/RTMP拉流Onvif流媒体服务 1、介绍 监控视频平台播放视频监控的时候&#xff0c;除了满足正…

提升效率!云原生生态从业人员不可或缺的工具集合!

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

shell脚本安装nginx

文章目录 shell脚本原理变量脚本安装nginx shell脚本原理 以删除桌面文件的脚本为例&#xff0c;执行脚本后&#xff0c;shell脚本将代码给内核&#xff0c;内核读取后执行命令&#xff0c;如果shell脚本也在桌面上&#xff0c;执行后这个脚本文件也会被删除。 变量 echo $SH…

Java程序控制结构,一文带你彻底拿下~

—— 程序的运行流程控制会解决程序是如何执行的 三大程序流程控制结构 1&#xff09;顺序结构&#xff1a;程序从上到下逐行逐行的执行&#xff0c;中间没有任何的判断和跳转 2&#xff09;分支结构&#xff1a;程序具有选择性的进入某一段代码 3&#xff09;循环结构&#xf…

SQL Developer中的Data Redaction

SQL Developer中的Data Redaction用起来比命令行方便多了。可以选定表或视图&#xff0c;右键点击“遮盖保护”菜单。 但赋权方面有需要注意的地方。 假设Redact Admin是SYS&#xff0c;Redact User是HR。虽然SYS具备所有权限&#xff0c;但还是报以下错误。其实这个错误是针…

jvm——垃圾回收机制(GC)详解

开始之前有几个GC的基本问题 什么是GC&#xff1f; GC 是 garbage collection 的缩写&#xff0c;意思是垃圾回收——把内存&#xff08;特别是堆内存&#xff09;中不再使用的空间释放掉&#xff1b;清理不再使用的对象。 为什么要GC&#xff1f; 堆内存是各个线程共享的空间…

spring常用注解标签总结

1&#xff1a;Component等 名称Component/Controller/Service/Repository类型类注解位置类定义上方作用设置该类为spring管理的bean属性value&#xff08;默认&#xff09;&#xff1a;定义bean的id 说明: Component注解如果不起名称&#xff0c;会有一个默认值就是当前类名首…

IDEA提示:StringBuffer xxx‘ may be declared as ‘StringBuilde

如图所示&#xff0c;编写代码时遇见了如下IDEA警告&#xff1a; 原因&#xff1a;StringBuilder是线程不安全的&#xff0c;但是其效率高&#xff0c;而StringBuffer则相反&#xff0c;虽然其线程安全&#xff0c;但是效率低下。 由于 StringBuilder 相较于 StringBuffer 有速…

Java+Excel+POI+testNG基于数据驱动做一个简单的接口测试【杭州多测师_王sir】

一、创建一个apicases.xlsx放入到eclipse的resource里面&#xff0c;然后refresh刷新一下 二、在pom.xml文件中加入poi和testng的mvn repository、然后在eclipse的对应目录下放入features和plugins&#xff0c;重启eclipse就可以看到testNG了 <!--poi excel解析 --><d…

音视频研发分享:关键帧截图+wasm快照--我又做了一件有益于社会的事情

音视频研发分享&#xff1a;关键帧截图wasm快照--我又做了一件有益于社会的事情 简单的一个视频设备快照功能到底有多费事多费电&#xff1f;新的方法有方法&#xff01; 省了多少电&#xff1f; 简单的一个视频设备快照功能到底有多费事多费电&#xff1f; 以前&#xff0c;我…

【C# 基础精讲】构造函数和析构函数

构造函数&#xff08;Constructor&#xff09;和析构函数&#xff08;Destructor&#xff09;是面向对象编程中的两个重要概念&#xff0c;它们分别用于在对象创建和销毁的时候执行特定的操作。这两个函数在C#以及其他面向对象编程语言中都具有重要的作用&#xff0c;用于初始化…

机器学习笔记:李宏毅chatgpt 大模型 大资料

1 大模型 1.1 大模型的顿悟时刻 Emergent Abilities of Large Language Models&#xff0c;Transactions on Machine Learning Research 2022 模型的效果不是随着模型参数量变多而慢慢变好&#xff0c;而是在某一个瞬间&#xff0c;模型“顿悟”了 这边举的一个例子是&#…

剪映:制作特效的常用方法

在创作短视频时&#xff0c;常常需要为一些镜头添加或制作特效&#xff0c;以增加趣味性、提升影片的艺术渲染力。本文介绍几种在剪映专业版中快速添加或制作特效的常用方法。 一、使用特效库 在“特效”库中提供了大量的特效供下载使用。找到自己中意的特效&#xff0c;直接拖…

alphassl便宜通配符SSL证书推荐

AlphaSSL是一家提供SSL证书的CA认证机构&#xff0c;其证书可以保护网站的安全性&#xff0c;防止黑客攻击和信息泄露。AlphaSSL的证书价格实惠&#xff0c;安全性高&#xff0c;AlphaSSL的证书还可以与各种服务器和网站平台兼容&#xff0c;包括Apache、IIS、Tomcat和Nginx等。…