Vue3 开发文档

Vue3 开发文档 2

开发文档

获取 this

Vue2 中每个组件里使用 this 都指向当前组件实例,this 上还包含了全局挂载的东西、路由、状态管理等啥啥都有

而 Vue3 中没有 this,如果想要类似的用法,有两种,一是获取当前组件实例,二是获取全局实例,如下自己可以去打印出来看看

<script setup>
import { getCurrentInstance } from 'vue'

// proxy 就是当前组件实例,可以理解为组件级别的 this,没有全局的、路由、状态管理之类的
const { proxy, appContext } = getCurrentInstance()

// 这个 global 就是全局实例
const global = appContext.config.globalProperties
</script>
复制代码

全局注册(属性/方法)

Vue2 中我们要往全局上挂载东西通常就是如下,然后在所有组件里都可以通过 this.xxx 获取到了

Vue.prototype.xxx = xxx
复制代码

而 Vue3 中不能这么写了,换成了一个能被所有组件访问到的全局对象,就是上面说的全局实例的那个对象,比如在 main.js 中做全局注册

// main.js
import { createApp } from 'vue'
import App from './App.vue'
const app = createApp(App)
// 添加全局属性
app.config.globalProperties.name = '沐华'
复制代码

在其他组件中调用

<script setup>
import { getCurrentInstance } from 'vue'
const { appContext } = getCurrentInstance()

const global = appContext.config.globalProperties
console.log(global.name) // 沐华
</script>
复制代码

template

Vue2 中只能有一个根节点,而 Vue3 中支持多个根节点,这个大家都知道

其实本质上 Vue3 每个组件还是一个根节点,因为 DOM 树只能是树状结构的,只是 Vue3 在编译阶段新增了判断,如果当前组件不只一个根元素,就添加一个 fragment 组件把这个多根组件的给包起来,相当于这个组件还是只有一个根节点。而 fragmentkeep-alive 一样是一个不会被渲染出来的内置组件

<template>
    <div>1</div>
    <div>2</div>
</template>
复制代码

获取 DOM

Vue3 中获取 DOM 如下

<template>
    <el-form ref="formRef"></el-form>
    <child-component />
</template>
<script setup lang="ts">
import ChildComponent from './child.vue'
import { getCurrentInstance } from 'vue'
import { ElForm } from 'element-plus'

// 方法一,这个变量名和 DOM 上的 ref 属性必须同名,会自动形成绑定
const formRef = ref(null)
console.log(formRef.value) // 这就获取到 DOM 了

// 方法二
const { proxy } = getCurrentInstance()
proxy.$refs.formRef.validate((valid) => { ... })

// 方法三,比如在 ts 里,可以直接获取到组件类型
// 可以这样获取子组件
const formRef = ref<InstanceType<typeof ChildComponent>>()
// 也可以这样 获取 element ui 的组件类型
const formRef = ref<InstanceType<typeof ElForm>>()
formRef.value?.validate((valid) => { ... })
</script>
复制代码

初始化

Vue2 中进入页面就请求接口,或者其他一些初始化的操作,一般放在 createdmounted,而 Vue3 中 beforeCreatedcreated 这俩钩子就不用了,因为 setup 在这俩之前执行,还要这俩的话就多此一举了

所以但凡是以前你用在 beforeCreated / created / beforeMounted / mounted 这几个钩子里的内容,在 Vue3 中要么放在 setup 里,要么放在 onMounted

<script setup>
import { onMounted } from 'vue'

// 请求接口函数
const getData = () => {
    xxxApi.then(() => { ... })
}

onMounted(() => {
    getData()
})
</script>
复制代码

解除绑定

Vue2 中一般清除定时器、监听之类的操作有两种方法:

  • 一是用$once 搭配 hook: BeforeDestroy 使用,这个 Vue3 不支持了
  • 二是用 beforeDestroy / deactivated 这俩钩子,Vue3 中只是把钩子函数重命名了一下
<script setup>
import { onBeforeUnmount, onDeactivated } from 'vue'

// 组件卸载前,对应 Vue2 的 beforeDestroy
onBeforeUnmount(() => {
    clearTimeout(timer)
    window.removeAddEventListener('...')
})

// 退出缓存组件,对应 Vue2 的 deactivated
onDeactivated(() => {
    clearTimeout(timer)
    window.removeAddEventListener('...')
})
</script>
复制代码

ref 和 reactive

这两都是用于创建响应式对象,ref 通常用于创建基础类型,reactive 通常用于创建响应式,这是官方推荐的,现实中也不尽然,有人也用 ref 来定义数组,也有人一个组件只定义一个 reactive,所有数据都放里面,就像 Vue2 的 data 一样,也有人都用

需要知道的有两点:

  • ref 如果传入的是引用类型,内部源码也是调用 reactive 来实现的
  • ref 返回的属性在 template 中使用,直接用就是了,但是在 JS 中使用,需要通过 .value 获取,如下。因为 ref 返回的是一个包装对象
<template>
    <div>{{ count }}</div>
</template>
<script setup>
import { ref, reactive } from 'vue'
const count = ref(1)

// 有人这么用 
const arr = ref([])
console.log(arr.value) // []

// 也有人这么用,一个组件里所有的属性全部定义在一个对象里,有点 Vue2 data 的味道
const data = reactive({
    name: '沐华',
    age: 18,
    ...
})
console.log(data.name) // 沐华

// 也有人一个组件里 ref 和 reactive 两种都用,随便你
</script>
复制代码

为什么 ref 要返回一个包装对象?Vue2 中 data 都是返回一个对象这都知道

因为对象引用类型,可以用来做代理或劫持,如果只返回基础类型的话,存储在栈中,执行栈里执行完就回收了,没有办法添加代理或劫持,自然就没办法追踪后续的变化,所以不得不返回一个对象,这样才能有响应式

toRef 和 toRefs

这两共同点就是用来创建响应式的引用的,主要用来取出响应式对象里的属性,或者解构响应式对象,解构出来的属性值依然是响应式属性,如果不用这两直接解构的话是会丢失响应式效果的

主要就是方便我们使用直接变量 xxx,而不需要 data.xxx。并且我们修改 xxx 的时候也是直接修改源对象属性的

这两的区别:带 s 和不带 s,就是单数和复数嘛,意思就是取一个和取一堆咯

<script setup>
import { reactive, toRef, toRefs } from 'vue'

const data = reactive({
    name: '沐华',
    age: 18
})

// 这样虽然能拿到 name / age,但是会变成普通变量,没有响应式效果了
const { name, age } = data

// 取出来一个响应式属性
const name = toRef(data, 'name')

// 这样解构出来的所有属性都是有响应式的
const { name, age } = toRefs(data)

// 不管是 toRef 还是 toRefs,这样修改是会把 data 里的 name 改掉的
// 就是会改变源对象属性,这才是响应式该有的样子
name.value = '沐沐华华'
</script>
复制代码

watch

watch 就是用来监听一个已有属性,发生变化的时候做某些操作,Vue2 中常用有如下三种写法

watch: {
    userId: 'getData',
    userName (newName, oldName) {
        this.getData()
    },
    userInfo: {
        handler (newVal, newVal) { this.getData() },
        immediate: true,
        deep: true
    }
}
复制代码

而 Vue3 中监听的写法就丰富得多了

Vue3 的 watch 是一个函数,能接收三个参数,参数一是监听的属性,参数二是接收新值和老值的回调函数,参数三是配置项

<script setup>
import { watch, ref, reactive } from 'vue'

const name = ref('沐华')
const data = reactive({
    age: 18,
    money: 100000000000000000000,
    children: []
})

// 监听 ref 属性
watch(name, (newName, oldName) => { ... })

// 监听其他属性、路由或者状态管理的都这样
watch(
    () => data.age, 
    (newAge, oldAge) => { ... }
)

// 监听多个属性,数组放多个值,返回的新值和老值也是数组形式
watch([data.age, data.money], ([newAge, oldAge], [newMoney, oldMoney]) => { ... })

// 第三个参数是一个对象,为可配置项,有5个可配置属性
watch(data.children, (newList, oldList) => { ... }, {
    // 这两个和 Vue2 一样,没啥说的
    immediate: true,
    deep: true,
    // 回调函数的执行时机,默认在组件更新之前调用。更新后调用改成post
    flush: 'pre', // 默认值是 pre,可改成 post 或 sync
    // 下面两个是调试用的
    onTrack (e) { debugger }
    onTrigger (e) { debugger }
})
</script>
复制代码

关于副作用,watch 和后面说到的 watchEffect 是一样的。

watch 回调函数中能接收第三个参数 onInvalidate,为清除副作用的函数,首次触发监听的回调函数(handler)不会执行 onInvalidate,之后每次触发默认会先执行 onInvalidate

就是说默认它的执行机制在更新之前调用,比如如下代码,当 key 触发更新时会先打印 222 再打印 沐华,如果需要在更新之后调用,可以在 watch 第三个配置项中添加 flush: post

// 回调函数接收一个参数,为清除副作用的函数
watch(key, (newKey, oldKey, onInvalidate) => {
    console.log('沐华')
    // 获取DOM默认获取到的是更新前的dom,如果是flush: post,可以获取到更新后的dom
    console.log('DOM节点:', dom.innterHTML)
    onInvalidate(() => {
        console.log(2222)
    })
})
复制代码

onInvalidate 的使用场景就是:比如监听的回调函数(handler)里有一些异步操作,当再次触发 watch 的时候可以用它来对前面未完成的异步任务执行取消/忽略/重置/初始化某些操作,比如取消上一次触发 watch 时未完成的请求

监听还没完呢

watchEffect

Vue3 中除了 watch 还增加了一个 watchEffect。区别是:

  • watch 是对传入的一个或多个值进行监听,触发时会返回新值和老值,且默认第一次不会执行
  • watchEffect 是传入一个立即执行函数,所以默认第一次就会执行,且不需要传入监听内容,会自动收集函数内的数据源作为依赖,当依赖发生变化时会重新执行函数(有点像computed的味道),而且不会返回新值和老值
  • 清除副作用和副作用的刷新时机是一样的,区别是 watch 中会作为回调的第三个参数传入,watchEffect 中是回调函数的第一个参数
  • 正常情况下组件销毁/卸载后这两都会自动停止监听,但也有例外,比如异步的方式,在 setTimeout 里创建的监听就都需要手动停止监听,停止方式如下
// 监听方法赋值
const unwatch = watch('key', callback)
const unwatchEffect = watchEffect(() => {})
// 需要停止监听的时候,手动调用停止监听
unwatch()
unwatchEffect()
复制代码

watchEffect 使用:

<script setup>
import { watchEffect } from 'vue'

// 正常使用
watchEffect(() => {
    // 会自动收集这个函数使用到的属性作为依赖,进行监听
    // 监听的是 userInfo.name 属性,不会监听 userInfo
    console.log(userInfo.name)
})

// 有两个参数,参数一是触发监听回调函数,参数二是可选配置项
watchEffect(() => {...}, {
    // 这里是可配置项,意思和 watch 是一样的,不过这只有3个可配置的
    flush: 'pre',
    onTrack (e) { debugger }
    onTrigger (e) { debugger }
})

// 回调函数接收一个参数,为清除副作用的函数,和 watch 的同理
watchEffect(onInvalidate => {
    console.log('沐华')
    onInvalidate(() => {
        console.log(2222)
    })
})
</script>
复制代码

watchEffect 如果需要修改配置项 flushpostsync 时,可以直接使用别名,如下

watchEffect(() => {...}, {
    flush: 'post',
})
// 和下面这个是一样的
watchPostEffect(() => {})
-----------------------------
watchEffect(() => {...}, {
    flush: 'sync',
})
// 和下面这个是一样的
watchSyncEffect(() => {})
复制代码

computed

Vue2 中 computed 最见的使用场景一般有: mapGetters/mapState 获取状态管理的属性、 获取 url 上的属性、条件判断、类型转换之类的,支持函数和对象两种写法

而 Vue3 中 computed 不再是一个对象,而是一个函数,用法其实基本差不多,函数第一个参数是侦听器源,用于返回计算的新值,也支持对象写法,第二个参数可用于调试

<script setup>
import { computed } from 'vue'
const props = defineProps(['visible', 'type'])
const emit = defineEmits(["myClick"])

// 函数写法,计算类型
const isFirst = computed(() => props.type === 1)

// 对象写法
const status = computed({
    get () { return props.visible }, // 相当于 Vue2中的 this.visible
    set (val) { emit('myClick', val) } // 相当于 Vue2中的 this.$emit('input', val)
})

// computed 第二个参数也是一个对象,调试用的
const hehe = computed(参数一上面两种都可, {
    onTrack (e) { debugger }
    onTrigger (e) { debugger }
})
</script>
复制代码

nextTick

nextTick 的使用方法,除了不能用 this 其他的和 Vue2 一模一样,还是三种方式

<script setup>
import { nextTick} from 'vue'

// 方式 一
const handleClick = async () => {
  await nextTick()
  console.log('沐华')
}

// 方式二
nextTick(() => {
    console.log('沐华')
})

// 方式三
nextTick().then(() => {
    console.log('沐华')
  })
</script>
复制代码

mixins 和 hooks

Vue2 中逻辑的抽离复用一般用 mixins,缺点有三:

  • 没有独立命名空间,mixins 会和组件内部产生命名冲突
  • 不去翻代码不知道引入的 mixins 里面有啥
  • 引入多个 mixins 时不知道自己使用的是来自哪一个 mixins 的

Vue3 中逻辑抽离复用的 hooks 语法,其实就是一个函数,可以传参,拿返回值来用。或者可以这样理解:平时要封装公用的方法是怎么写的?Vue3 里就可以怎么写

// xxx.js
expport const getData = () => {}
export default function unInstance () {
    ...
    return {...}
}

// xxx.vue
import unInstance, { getData } from 'xx.js'
const { ... } = unInstance()
onMounted(() => {
    getData()
})
复制代码

关于 hooks 如何写出更优雅的代码,还个需要多写,多实践,这不是几句话几行代码就能熟练运用的

组件通信

Vue3 组件通信的方式,有如下几种

  • props + defineProps
  • defineEmits
  • defineExpose / ref
  • useAttrs
  • v-model(支持多个)
  • provide / inject
  • Vuex / Pinia

关于 Vue 组件通信的使用方式,去年我写过一篇文章,用法上面都介绍的很详细了,就不搬过来了

Vue3的8种和Vue2的12种组件通信

多个 v-model

Vue2 中每个组件上只能写一个 v-model,子组件没有写 model 的话,默认在 props 接收 value 即可,修改就是用 this.$emit('input') 事件

Vue3 中每个组件每个组件上支持写多个 v-model,没有了 .syncmodel 重命名的操作,也不需要了,写v-model 的时候就需要把命名一起写上去了,如下:

// 父组件写法
<template>
    <child v-model:name="name" v-model:age="age" />
</template>
<script setup>
import { ref } from "vue"
const name = ref('沐华')
const age = ref(18)
</script>

// 子组件
<script setup>
const emit = defineEmits(['update:name', 'update:age'])

const handleClick = () => {
    console.log('点击了')
    emit('update:name', '这是新的名字')
}
</script>
复制代码

状态管理

Vuex 用法和 Vue2 基本一样,从0开始的话建议直接用 Pinia 吧,Pinia 详细使用方式,我之前也写过一篇文章,也不搬过来了

上手 Vue 新的状态管理 Pinia,一篇文章就够了

Vuex 4 用法如下

// main.js
import { createApp } from 'vue'
import App from './App.vue'
import Store from './store'
const app = createApp(App)
app.use(Store)
...

// 模块:store/user/index.js
export default {
    state: {},
    getters: {},
    actions: {},
    mutations: {}
}

// store/index.js
import { createStore } from 'vuex'
import user from './user'
const store = createStore({
    state: {},
    getters: {},
    actions: {},
    mutations: {},
    modules: {
        user
    }
})
export default store

// 需要用到状态管理的 .vue 文件里
<script setup>
import { useStore } from 'vuex' 
const store = useStore()
// 打这个 store 打印出来看下,相当于 Vue2 里的 this.$store,用法基本一样
console.log(store)
</script>
复制代码

路由

Vue-Router 4 使用如下,主要是 routerouter 打印出来看一下就知道了

// main.js
import { createApp } from 'vue'
import App from './App.vue'
import Router from './router'
const app = createApp(App)
app.use(Router)
...

// router/index.js
import { createRouter, createWebHistory, RouteRecordRaw } from 'vue-router'
// 这个 routes 数组里面就和 vue2 一样写
const routes = [  // ts版这行就是 const routes: Array<RouteRecordRaw> = [
  { path: '/', redirect: { name: 'login' } }
]
const router = createRouter({
  history: createWebHistory(process.env.BASE_URL), // 项目没用这个就不传
  routes
})
export default router

// 需要用到路由的 .vue 文件里
<script setup>
import { useRoute, useRouter } from "vue-router"
// route 对应 Vue2 里的 this.$route
const route = useRoute()
// router 对应 Vue2 里的 this.$router
const router = useRouter()
</script>
复制代码

CSS 样式穿透

Vue2 中在 scoped 中修改子组件或者组件库中的组件样式,改不了的情况下,就可以用样式穿透,不管是 Less 还是 SASS 都是用 /deep/ .class {} 来做样式穿透,而 Vue3 中就不支持 /deep/ 的写法了,换成 :deep(.class)

<style lang="scss" scoped>
// 这样写不生效的话
.el-form {
    .el-form-item { ... }
}
// Vue2 中这样写
/deep/ .el-form {
    .el-form-item { ... }
}
// Vue3 中这样写
:deep(.el-form) {
    .el-form-item { ... }
}
</style>

// 别再这样加一个没有 scoped 的 style 标签了,全都加到全局上去了
// <style lang="scss">
//  .el-form {
//     .el-form-item { ... }
//  }
// </style>
复制代码

CSS 绑定 JS 变量

就是 CSS 中可以使用 JS 的变量来赋值,如下

<template>
    <div class="name">沐华</div>
</template>
<script setup>
import { ref } from "vue"
const str = ref('#f00') // 红色
</script>
<style scoped lang="scss">
.name {
    background-color: v-bind(str); // JS 中的色值变量 #f00 就赋值到这来了
}
</style>
作者:沐华
链接:https://juejin.cn/post/7220220100384407610
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

本文内容由互联网用户自发贡献,该文观点仅代表作者本人。商机网仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 tenspace2022@163.com 举报,一经查实,本站将立刻删除。 本文链接:https://www.315965.com/n/54688.html 聚才发 母婴好物

Like (0)
Previous 2023年4月12日 pm4:07
Next 2023年4月12日 pm4:10

相关推荐

  • 简单ppt制作教程步骤(ppt制作教程详细步骤)

    1. 开始→程序→Microsoft Word→选“模板”→确定→选“演示文稿设计”卡片→“彩晕型模板” →“确定”选第一行第二列的幻灯片→确定。 2.将工具栏的“50%”改为“66%” 3.插入→文本框→文本框→在幻灯片左上角单击→输入“计算机世界”→在其他地方单击。 4.单击底部的“自选图形”→单击“基本”基本选梯形→在页面左下角拖动鼠标,形成梯形→在梯形上单击右键→选“添加文本”→输入“梯形”→在其他地方单击。 5.单击标题文字→选中标题文字→在文字上击右键→选复制,在副标题处击右键,选粘贴。 6.在框上击右键→设置文本框格式→“位置”卡片→将“水平”、“垂直”中的数改为“15”→确定。 7.选中文字“计算机专业方向”,在文字上击“右键”→选字体→将宋体改为楷体,字号改为80.效果中选下划线,颜色改为红色→确定。 8.选中带项目符号的文字,在文字上击右键→选项目符合→把颜色改为绿色→确定。 9.选中文字→格式→行距→把行距改为1.50→确定。 10.视图→页眉页脚→选“自动更新”,改日期格式→选幻灯片编号→把“页脚”去掉→击“全部应用”。 11.视图→母版→幻灯片母版 12.在桌面上双击Powerpoint图标→选“内容提示向导”→确定→下一步→选“常规”→下一步→下一步→下一步→完成。 13.格式→背景→选颜色为“黄色”→再击“ ”,选“填充效果”,选“双色”,“斜上”→确定→全部应用。 14、在幻灯片上击“右键”→选“应用设计模板”→选“草地型模板”→应用 15、在底部击“反选图形”→击“基本形状”→选“笑脸”→在幻灯片上拖运鼠标,画出笑脸→在图像上击右键→击“设置自选图形格式”→选“位置”卡片把水平、垂直均改为8.5→确定 16、在五角星上击“右键”→选“设置的选图形格式”将填充颜色改为红色→选中“半透明”→确定 17、击底部从右边数第二个图标,选“阴影设置”,击“阴影设置”中左数第5个图标,然后击第6个图标选红色 18、击底部从右边数第一个图标,选第三行第二列的图标 19、在图形上击“右键”,选复制,在其他的地方击右键选“粘贴”在图形上击右键,选“设置自选图形格式”→选“位置”卡片将水平、垂直按要求改数。 20、在图形上击右键,选“设置自选图形格式”→选“大小”卡面,将旋转改为45度→确定 21、按住“shift”键,再用鼠标单击其他图形,松开“shift”键击底部“绘图”→对齐或分布→水平居中 22在红色椭圆上击右键→叠放次序→置于底层 23、文件→另存为→双击“我的文档”→在文件名处输入“abc.ppt”→保存 24、插入→图片→剪贴画→在左侧栏内选“植物”→在右侧栏内选玫瑰花→插入 25、插入→图片→来自文件→双击天体3 26、插入→图片→艺术字→选第三行第一列→确定→输入“平凡的世界”→将“宋体”改为“隶书”字号改为60→确定 27、插入→图片→组织结构图→视图→实际尺寸→文件→退出并返回到演示文稿→是 28.在图上击右键→编辑此rgchat对象→编辑→选择→全选→样式→选第一行、第二列样式样式→文件→退出并返回到演示文稿1→是 29.插入口→图表→关闭“数据表”(击Χ)→在图标上击右键→图表类型→条形图→确定 30.在图表上击右键→编辑chart对象→在框处点右键→图表选项→输入图表标题→确定→在字处击右键→图表标题格式→字体→隶书,字号48.颜色为红色→确定 31.幻灯片放映→预设动画→驶入 32.幻灯片放映→动作按钮→第四个→在幻灯片右下角拖运→选超级链接到→按“▼”选“最近查看的幻灯片”→确定 33.幻灯片放映→幻灯片切换→“▼”→选“随机”→全部应用 34.击“培训中心”,改标题→文件→保存 35.选第三第幻灯片→幻灯片放映→隐藏幻灯片选第二张幻灯片 36.视图→幻灯片浏览 37.文件→页面设置→把幻灯片大小改为“横幅”→确定 38.文件→打印→选“全部”→把“打印内容”改为“讲义”(每页6张)→确定 39.插入→新幻灯片→选第一行第二列→确定 40.选第4张,击右键→剪切→在第一张原击鼠标后击右键→粘贴WPS Office 解题步骤: 1、在“操作向导”栏内单击“自定义界面颜色”,在“页面颜色”中选红色,单击“文字颜色”选择黄色,单击“确定”。 2、单击“工具”→保护文档→输入密码→确定 3、单击“查看”→工具栏→自定义→单击显示提示→确定 4、单击“插入”→日期与时间→选“日期”→确定 5、先在第二段后单击,“插入”→“脚注和尾注” →确定 6、“插入”→“条形码”→在条码标准中选 7、在“操作向导”栏内单击“综合设置”,选“显示”卡片单击“Ⅰ段落符9硬回车”→确定 8、“文字”→文字校对→把快速校对改选为一般校对→开始校对 9、在工具栏中将“75%”改为“85%”,击回车键 10、工具→文字→字数统计→确定 11在“操作向导”栏中选“选择模板,创建文件”→双击“书信”→选“个人简历”→确定 12、“查看”→工具栏→图形工具 13、文字→定义样式→下一步→输入“段落”→下一步→下一步→单击“段落”→将“首行”中“2”改为“3”→确定→下一步→下一步→完成 14、选中1、2段→单击“工具栏”中“  ”图标 15、选中第2段→“文字”→“字体”→选“扁型”→确定 16、选中第1段→在“操作向导”栏内选“特殊修饰”将类型改为“阴影”,将幅度改为“40”,角度改为“330”→确定 17、选中第1段→文字→“边框和底纹”→选“边框”将“类型”改为“点线”,颜色选“蓝色”→选“底纹”将颜色改为“紫色”→确定 18、“开始”→“程序”→“金山办公组合”→“特大字打印”→下一步→输入“欢迎使用特大字”→下一步→下一步→完成 19、在表格上双击→在工具栏上选“√”图标→在表格最左上角的单元格上单击 20、双击表格,把鼠标移至表格最左上角,当变成“ ”形状时单击→选工具栏上的“ ”图标→选“均分”→确定 21、单击表格→选工具栏上的“ ”图标→在表格外单击鼠标→选工具栏上的“粘贴”图标 22、双击表格→把鼠标移至“85”所在单元格,按住左键向右下拖动,直至89右边的单元格,松开,在黑色区域点鼠标右键→选“数据处理”→表元计算→横向求和 23、单击“操作向导”右上角的“×” 24、文件→页面设置→纸张类型→横向→确定 25、文件→页面设置→版面→将分栏数改为“3”→确定 26、在第一段末尾单击→插入→分隔符→分页符 27、文字→边框和底纹→选“设置页面边柜”→页面边柜→风格选“花边3”,线条宽度改为“8”,线条颜色改为“红色”→确定 28、插入→页号→选“第1页”→选“页脚” 29、在“操作向导”栏内选“文字框”→在页面上按住左键向右下拖动,松开 30、在文本处点“左键”→击“右键”→选“对象属性”→选“版式”卡片→选“竖排:右→左”→确定 31、单击“框”→击右键→绕排方式→西边不绕排 32、插入→图像→一般图像→单击“Bgmc.jpg”→打开 33、先单击“方形框”然后按住“shift”键不松开,再单击其余两个框,松开 “shift”键,在任意一个框上单击“右键”→选“组合” 34、在“操作向导”栏内选“星形”→选“五星”→在页面上单击 35、选中图像,在“操作向导”栏内选“旋转,镜像”→单击“垂直镜像” 36、选中“五边形”,单击右键→选复制,在其他 的地方单击“右键”选“粘贴” 37、单击“工具栏”中最左上角的图标 38、在“操作向导”栏中单击“选择模板,创建文件”→双击“公文”→双击“报告” 39、文件→“存为模板”→“公文”→在模板条中输入“文件”→确定40、文件→保存所有文件 Word 1. 双击Word 2. 移动光标到 ,按退格键 3. 编辑,单击替换,在查找内容处输入中文,击全部替换 4. 击菜单工具栏,击语言,字典,替换 5. 击50%,下拉击100% 6. 击文件新建,其它中文文档,信封向导,确定,若干,下一步,完成 7. 击文件,新建,中文报告,实用文体向导,确定,下一步,介绍信,若干,下一步,完成。 8. 击格式,样式,新有样式,标题8.应用。 9. 击格式,段落,行距栏,2倍行距,确定。 10. 击格式,段落,段前、后,改数字,确定。 11. 击格式,字体,字符间距,磅值,确定。 12. 击文件,打开,满江红,打开。 13. 击x、z,选中z,击格式,字体,上标,确定。 14. 工具,自动更正,去英语 首大写,确定。 15. 击表格,插入, 列数、行数,确定。 16. 击表格,插入列,击第一行,输入文字。 17. 击表格,击将表格转换成文字,确定。 18. 击表格,将表格自动套用格式,古典x,自动控制 ,确定。 19. 击表格,拆分单元格,输入数字,确定。 20. 击 1.5磅 21. 击文件,页面设置,纸张大小,B5.确定。 22. 击视图,页面,文件,页面设置,页边距数,确定。 23. 击文件,另存为选C为D,双击my files,击保存类型选html,保存。 24. 击视图,页面,视图,页眉和页脚,输入文字,关闭。 25. 击插入,分隔符,确定,文件,打印预览。 26. 插入,图片,艺术字,按要求选,确定,确定,在艺术字上击右键,击设置艺术字格式,环绕紧密型,确定。 27. 击插入,文本框,横排。 28. 击文本框,击右键,设置文本框格式,按要求击,确定。 29. 击插入,图片,来自文件,按要求双击文件夹,按要求击文件,击插入。 30. 击左键, 图,击右键,击组合,取消组合,在其他地方,击左键,拖 31. 击文件,打印预览,击第1页。 32. 击文件,打印预览,击工具栏内第七个图标。 33. 击文件,打印,按要求输入数字,确定。 34. 击帮助,目录和索引,逐个逐层双击寻找。 35. 击文件,打印,在打印内容选文档属性,确定。 36. 按要求选中拖鼠标。 37. 用组合键ctrl home(向前移光标)或用ctrl end(向后移光标) 38. 击回车键,击插入,时间和日期,按要求插入时间,确定。 39. 击插入,自动图文集,自动图文集,自动图文集,添加。 40. 击插入,批准,插入声音对象 、录音键,暂停。 新建文件…

    2023年4月12日 pm4:09
    16
  • 为什么很多公司都开始使用Go语言了?

    为什么很多公司都开始使用Go语言了? 写在前面 最近和几个小伙伴们在写字节跳动第五届青训营后端组的大作业。 接近尾期了,是时候做一些总结了,那从什么地方开始呢?那就从我们为什么要选择Go语言开始吧~ 🌐项目地址 📝项目文档 越来越多的互联网大厂开始使用Go语言了,譬如腾讯、美团、滴滴、百度、Google、bilibili… 还有最初使用Python的字节跳动,甚至已经全面拥向Go了。这么多国内外首屈一指的公司,都在开始使用它了,它到底有什么优势呢?这就得谈谈它的一些优势了。 ps:当然了,还有Go-To-Byte的成员,想要学习go语言,并且用它完成青训营的大项目呐~ Go的一些优势 说起优势,在某些方面多半是因为它有一些别人没有的特性,或者优化了别人麻烦的地方,相比起来,才会更胜一筹。那我们来了解一下Go的一些特点吧,但在了解生硬的特点之前,我们先来看看其它几种常见的语言: 常见的一些语言 这里不是对比哟,不是说谁好谁坏,而是小马过河,因人而异~ 1、C/C++ C语言是在1971年的时候,被大神Ken Thompson和Dennis Ritchie发明的,而Go语言的主导开发者之一就是Ken Thompson,所以在很多地方和C语言类似,(比如struct、Printf、&取值符) C/C++也作为很多初学初学的语言,它们都是直接编译为机器码,所以执行效率会更高,并且都不需要执行环境,用户的使用成本会更低,不像很多语言还需要安装所需的环境。 也因为这些原因,它们的一次编码或编译只适用于一种平台,对于不同操作系统而言,有时需要修改编码再编译,有时直接重新编译即可。 而且对于开发者也”很不友好”😒,需要自己处理垃圾回收(GC)的问题。编码时,还需要考虑,堆上的内存什么时候free、delete?代码会不会造成内存泄露、不安全? 2、Java 自己作为一个从Java来学习Go的菜鸟,还未正式开发,就感到开发效率会比Java低了(个人感觉,不喜勿喷)~😁 Java是直接编译成字节码(.class),这种编译产物是介于原始编码和机器码的一种中间码。这样的话,Java程序就需要特定的执行环境(JVM)了,执行效率相比会低一些,还可能有虚拟化损失。但是这样也有一个好处就是可以编译一次,多处执行(跨平台)。而且它也是自带GC的。 3、JavaScript 和Python一样,JS是一种解释型语言,它们不需要编译,解释后即可运行。所以Js也是需要特定的执行环境(浏览器引擎) 的。 将其代码放入浏览器后,浏览器需要解析代码,所以也会有虚拟化损失。Js只需要浏览器即可运行,所以它也是跨平台的。 再谈Go 看完了前面几种常见语言的简单介绍。C/C++性能很高,因为它直接编译为二进制,且没有虚拟化损失,Go觉得还不错;Java的自动垃圾回收机制很好,Go觉得也不错;Js的一次编码可以适用可以适用多种平台,Go觉得好极了;而且Go天然具备高并发的能力,是所有语言无可比及的。那我们来简单总结一下吧! 自带运行环境Runtime,且无须处理GC问题 Go程序的运行环境可厉害了,其实大部分语言都有Runtime的概念,比如Java,它程序的运行环境是JVM,需要单独安装。对于Java程序,如果不经过特殊处理,只能运行在有JMV环境的机器上。 而Go程序是自带运行环境的,Go程序的Runtime会作为程序的一部分打包进二进制产物,和用户程序一起运行,也就是说Runtime也是一系列.go代码和汇编代码等,用户可以“直接”调用Runtime的函数(比如make([]int, 2, 6),这样的语法,其实就是去调用Runtime中的makeslice函数)。对于Go程序,简单来说就是不需要安装额外的运行环境,即可运行。除非你需要开发Go的程序。 正因为这样,Go程序也无须处理GC的问题,全权交由Runtime处理(反正要打包到一起)。 快速编译,且跨平台 不同于C/C++,对于多个平台,可能需要修改代码后再编译。也不同于Java的一次编码,编译成中间码运行在多个平台的虚拟机上。Go只需要一次编码,就能轻松在多个平台编译成机器码运行。 值得一提的就是它这跨平台的能力也是Runtime赋予的,因为Runtime有一定屏蔽系统调用的能力。 天然支持高性能高并发,且语法简单、学习曲线平缓 C++处理并发的能力也不弱,但由于C++的编码要求很高,如果不是很老练、专业的C++程序员,可能会出很多故障。而Go可能经验不是那么丰厚,也能写出性能很好的高并发程序。 值得一提的就是它这超强的高并发,也是Runtime赋予的去处理协程调度能力。 丰富的标准库、完善的工具链 对于开发者而言,安装好Golang的环境后,就能用官方的标准库开发很多功能了。比如下图所示的很多常用包: 而且Go自身就具有丰富的工具链,(比如:代码格式化、单元测试、基准测试、包管理…) 。。。。。。 很多大厂开始使用Go语言、我们团队为什么使用GoLang,和这些特性,多少都有一些关系吧~ 作者:Ciusyan 链接:https://juejin.cn/post/7202153645440925751 来源:稀土掘金 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 相关文章ChatGPT访问及内容安全技术设计取代C++!微软改用Rust语言重写Win11内核:简洁安全、性能更佳ChatGPT 会“杀死”编程吗?如何下载推特视频在中国,这些小店向阳生长快递业企稳回升印证市场回暖“超级充电宝”蓄势待发 还面临哪些挑战? ChatGPT 或 Google:哪个给出了最佳答案

    2023年4月12日 pm4:09
    16
  • ai软件基础教程免费(ai初学者基础教程)

    介绍 Ai全称Adobe illustrator是Adobe家族的—款矢量插画软件 新建项目 常见的有两种新建方法:1.「文件」-「新建」⒉点击主页左侧「新建」 我们可以对项目的宽高、出血等进行设置。(「出血」是印刷中常用的功能,设计中常会添加「出血线」来预留裁切位,在这里我们不进行修改) 认识界面 我们先来认识一下界面: 上方第一行:「菜单栏」 上方第二行:「属性栏」(「窗口」–「控制」中打开) 左侧:「工具栏](Ps:截图中的工具栏是「高级工具栏」,小伙伴们可以在「窗口」–「工具栏」中进行修改) 右侧:「控制面板」中央:「面板」 我们这次主要介绍以下工具:形状工具、选择工具、直接选择工具、钢笔工具、文字工具、直线段工具、画笔工具。 形状工具 形状工具,和它的名字—样就是用来画图形的。我们可以运用它来绘制各式图形使用方法:选中工具,直接在画面上拖动即可(按住Shift绘制可保持正方形/圆心) Ps:右键可调出更多形状工具,如下图: 我们可以通过左侧「控制面板」–「外观」进行「描边」「填充」「不透明度」「效果」的处理和修改。 点击左侧的「画板图标」我们可以通过「RGB颜色值」/「十六进制颜色码」对颜色进行修改。 选择工具 我们可以通过选择工具对选中对象的「位置」「大小」「圆角」等进行修改。直接选中物体拖动,可以「修改位置」。将鼠标放在对象的锚点上可以「修改大小」。将鼠标放在对象锚点附近可以「旋转」。单击小圆点可以对—个角进行「圆角处理」,否则是四个角圆角处理。 直接选择工具 直接选择工具比较大的一个特点就是它能使形状发生形变。当我们「双击锚点」,拖动即可产生形变。而「直接选择工具」与「选择工具」的不同点在于:「直接选择工具」能够选择图形的「单个/多个锚点」,「选择工具」则是选择「整个图形」。 钢笔工具 挺有用的工具,我们同样能运用它绘制出各式各样的图形两点单击可以绘制「直线」让当前锚点上拉/下拉绘制「曲线」按住Alt「修改手柄」 文字工具 用来添加文字的。我们可以通过「字符」对文字进行样式修改。 Ps:Ai在创建新的文字时会默认运用“杨慎”的《临江仙》作为占位符文本填充新文字对象,如果想创建空白文本通过「编辑」–「首选项」-「文字」-「用占位符文本填充新文字对象」来进行修改。 直线段工具 画直线的 画笔工具 和画笔作用是—样的,绘制使用。 路径查找器 「路径查找器」是Ai当中进行「布尔运算」的工具。打开方式:「窗口」-「路径查找器」其中分为了「形状模式」和「路径查找器」「形状模式」包含了:「联集」「减去顶层」「交集」「差集」「路径查找器」包含了:「分割」「修边」「合并」「裁剪」「差集」「轮廓」「减去后方对象」的功能 大家可以通过在Ai中绘制两个不同颜色的矩形,来探究下这些功能究竟有什么作用(建议使图像有交集) 相关文章ChatGPT访问及内容安全技术设计取代C++!微软改用Rust语言重写Win11内核:简洁安全、性能更佳ChatGPT 会“杀死”编程吗?如何下载推特视频在中国,这些小店向阳生长快递业企稳回升印证市场回暖“超级充电宝”蓄势待发 还面临哪些挑战? ChatGPT 或 Google:哪个给出了最佳答案

    2023年4月12日 pm4:09
    16
  • 订单30分钟未支付自动取消怎么实现?

    方案 1:数据库轮询 思路 该方案通常是在小型项目中使用,即通过一个线程定时的去扫描数据库,通过订单时间来判断是否有超时的订单,然后进行 update 或 delete 等操作 实现 可以用 quartz 来实现的,简单介绍一下 maven 项目引入一个依赖如下所示 <dependency>   <groupId>org.quartz-scheduler</groupId>   <artifactId>quartz</artifactId>   <version>2.2.2</version> </dependency> 复制代码 调用 Demo 类 MyJob 如下所示 package com.rjzheng.delay1; ​ import org.quartz.*; import org.quartz.impl.StdSchedulerFactory; ​ public class MyJob implements Job { ​   public void execute(JobExecutionContext context) throws JobExecutionException {       System.out.println(“要去数据库扫描啦。。。”);   } ​   public static void main(String[] args) throws Exception {       // 创建任务       JobDetail jobDetail = JobBuilder.newJob(MyJob.class)               .withIdentity(“job1”, “group1”).build();       // 创建触发器 每3秒钟执行一次       Trigger trigger = TriggerBuilder               .newTrigger()               .withIdentity(“trigger1”, “group3”)               .withSchedule(                       SimpleScheduleBuilder                               .simpleSchedule()                               .withIntervalInSeconds(3).                    …

    2023年4月12日 pm4:09
    16
  • 二阶魔方教程新手公式(二阶魔方教程新手公式图解)

    面先法分为三步。首先拼好一面(任意颜色,本文以白色为例。)再拼好已拼好面的对面(如:绿对蓝 红对橙 白对黄)。当然在学习前要知道各个字母公式的含义。 R=Right (右面顺时针旋转90度) R 的含义 与R相对的是L L=Left(左面顺时针旋转90度) L 的含义 还有F,Front(前面顺时针旋转90度) F 的含义 与F相对的是B B=Back(后面顺时针旋转90度) B 的含义 还有U(Up)指顶面顺时针旋转90度。 U 的含义 还有D(这个不多讲,就是底面顺时针旋转90度,公式中没有) 还有,在字母后加’表示该字母与原来的意义相反。如R’就表示右面逆时针旋转90度。U’就表示顶面逆时针旋转90度。 “( )”表示一组动作连做。而在字母或括号后添加2.就代表该字母做两遍,或括号内动作重复两遍。如R2=RR,(RUR’U’)2=RUR’U’RUR’U’。 好,现在讲第一步,拼一面,实际上不多讲。要先拼出如图的底面 然后会有三种情况: (公式我打在图片上) (图中的D和R表示的是底面和右面) 然后进行第二步,复原顶面。 (直接打公式) 当然,我还有自己画的,可以参考一下。 最后一步,将各个角块的位置调整正确。公式如下: (*注,这是从上往下看的透视图!) 相关文章ChatGPT访问及内容安全技术设计取代C++!微软改用Rust语言重写Win11内核:简洁安全、性能更佳ChatGPT 会“杀死”编程吗?如何下载推特视频在中国,这些小店向阳生长快递业企稳回升印证市场回暖“超级充电宝”蓄势待发 还面临哪些挑战? ChatGPT 或 Google:哪个给出了最佳答案

    2023年4月12日 pm4:09
    16
  • 官方原版win10安装教程(原版系统安装详细步骤)

    众所周知,当电脑出现问题,重启能解决50%,重装系统能解决90%,买台新的能解决100%。而重启电脑和再买一台新的电脑相比,无疑是最快捷方便的方法。 重装系统目前有两种方式进行安装,一种是通过PE辅助安装,好处就是便捷方便,而且有很多功能和软件可以在PE下使用。 但是如果使用的PE制作工具或者封装的系统没选好,可能会会夹带一些奇怪的软件或者全家桶,用不了多久电脑又被垃圾软件占领了,只能再次重装进入死循环。 如果是用PE辅助安装,我比较推荐使用微PE,系统本体文件最好是在MSDN里下载。当然如果你想获得完全纯净的原版系统,可以用win10官方的ISO镜像直装,这种安装方式是WIN10官方推出的,所安装的系统也是最纯净的,没有任何的附加功能和捆绑软件。 如果你已经准备跃跃欲试了请在开始前做好以下三个准备工作: 1 一个容量大于8GB的u盘,切记不要用劣质的扩容U盘,不然安装系统时就是噩梦的开始。 2如果U盘里有重要文件请先做好备份,因为制作启动盘的时候会把这个U盘格式化。 3虽然WIN10自带网卡驱动,但是以防万一,可以把网卡驱动下载或者备份一份,万一重装之后连不了网又没第二台电脑,可能你得去网吧下了。 准备好以上工作,那么我们就可以正式开始了。 第一步:制作启动盘 首先百度搜索 win10官方下载,会跳出来很多其他的网站,正确官网我们可以看到这里会有Microsoft 标识。 在主页下方找到是否希望在您的电脑上安装 Windows 10?选择立即下载工具安装即可。 安装完毕后打开软件,在界面选择第二项,为另一台电脑创建安装介质,语言体系结构版本选择中文简体 win10 64位,选择使用介质勾选U盘,这样是直接把ISO程序写入U盘内 如果你是PE辅助安装可以选择ISO文件。 到选择U盘这一项,可以检查以下是不是你要做启动盘的那个U盘,核对无误点击下一步,接下来等待下载安装包和把安装程序写入U盘内就可以了。 当提示你的U盘已准备就绪,点击完成制作启动盘部分就已经完成了。我们再次打开U盘,会发现里面会多出一堆文件 ,散着虽然看着不爽,但千万不要手贱把他们新建一个文件夹,因为不是在U盘根目录下会无法成功安装,最后把下载或者备份的网卡驱动拷进U盘,我们就可以开始进行系统安装了。 第二步:设置系统启动项 首先把U盘插入要安装或者重装系统电脑的主板USB3.0 3.1上,一般3.0的USB孔位为蓝色,插黑的也行,只是黑的为USB 2.0.传输速度上要慢一些。 插好U盘后开机进入主板BIOS界面,各品牌进入BIOS的快捷键都不一样,可以对照这张表操作。 有两种方式到系统安装界面,在这里以华硕ROG Z690E 为例: 1.默认一般会进入这个高级模式,如果是英文可以把语言调成简体中文,进入启动这个选项没调成中文的就是BOOT。 在这里面,我们可以看到默认的启动选项1盘就是我们之前装系统的硬盘,我们把它更改成为我们刚刚插上去的U盘,因为草鸡公仔U盘是32G的,所以选最后一个UEFI 31.4G。 大家如果硬盘很多,可以通过插上的U盘品牌和容量快速找到。接下来启动选项2和3可以不管,为保证一次就能进启动盘,也可以全部选择关闭,进行到这一步。按F10保存就可以进入系统安装页面了。 2.默认进入BIOS高级模式的时候直接按F7来到概述界面,点击右边启动菜单或者直接快捷键F8唤出启动菜单,选择刚刚制作好的U盘回车就可以直接进入启动盘。 第三步:系统安装设置 设置完启动项后再次开机,当弹出windows 安装程序的界面就代表成功进入了启动盘了,在这个界面里不需要任何改动直接点击下一步,可以看到屏幕显示安装程序正在启动。 接下来会弹出激活windows界面,选择我没有产品密钥。 在系统版本的选择上,如果你买的是品牌机,或者笔记本,一般都会预装win10家庭版,密钥是绑定主板的,联网就能激活,个人建议安装你电脑之前对应预装版本,如果是DIY整机或者你有专业版的密钥,这里就选择专业版。 下一步在执行哪种类型安装这一项我们选择第二个,自定义仅安装windows,然后就可以选择安装系统的硬盘,可以根据主分区的容量来确定哪一块是你准备装系统的硬盘。 在这里我准备把系统装在名人堂1T固态里,把之前系统自动分割磁盘0的小分区删掉,就可以恢复到新磁盘未分配空间的状态了 如果你想分区就点击新建,如果不分区就直接下一步,官方安装程序会自动格式化和4K对齐,我们就只用等待安装完成。 当安装完成时候,电脑会自动重启,正常情况下会直接进系统,个别电脑可能会再次进入U盘,保险起见当出现主板LOG的时候你就可以拔掉U盘了。 接下来就是熟悉的海内存知己,然后区域键盘布局设置,如果不想等待可以拔掉网线选择我没有internet连接,继续执行有限设置。 创建用户,隐私设置这一块我习惯的是全部关闭,小娜设置也可以直接以后再说,等待最后的系统部署我们就安装完成进入系统桌面了。 重新接上网线,华硕主板会弹出一个下载奥创和网络驱动,选择是,否则无法联网,正常其他品牌主板会自动联网,如果显示无法链接,最先开始下载或者备份在U盘的网卡驱动就派上用场了,安装网卡驱动后就能正常联网了。 第四步:桌面设置及驱动安装 桌面是没有图标的,可以桌面右键个性化–选择主题–桌面图标设置,把计算机、网络、控制面版、设置在桌面,这些是我们经常用的。 最后这个专业版的系统是未激活的,虽然不会影响正常使用,但是也限制了部分功能,支持正版人人有责,如果你想晚一点支持正版也甭去买某宝那些几块10几块的激活码,在我的粉丝群里有软件,你也可以自己去下个图吧工具箱。 最后就是显卡驱动了,如果是N卡,就去NV官网下载 EX ,如果是A卡就去AMD下载SOFW,它可以根据你的显卡型号自动帮你打上对应的显卡驱动,而且还有包括录屏/显卡超频等等功能,还是挺好用的,完成了以上步骤,安装windows原版,系统就已经大功告成了。 那么以上就是安装windows原版系统的所有内容,看到这里的你如果还有疑问或者不明白的地方也可以留言或者私信问我,不管现在用不用的上,转发或者收藏,以防日后不时之需。 相关文章ChatGPT访问及内容安全技术设计取代C++!微软改用Rust语言重写Win11内核:简洁安全、性能更佳ChatGPT 会“杀死”编程吗?如何下载推特视频在中国,这些小店向阳生长快递业企稳回升印证市场回暖“超级充电宝”蓄势待发 还面临哪些挑战? ChatGPT 或 Google:哪个给出了最佳答案

    2023年4月12日 pm4:09
    16
  • 抖音权重下降了怎样快速恢复(三个降权的补救提升方法)

    大家好,我是二小姐,今天是2022年的10月18号那么这里讲一下关于抖音账号的几种不同的权种第一种情况。   很多同学问的最多的一个问题就是说,二小姐你看我这个账号,我这个播放量只有100个,现在还能不能够用,这个账号能不能够用?如果你发了一两百个作品出去,播放量都还是只有几十个,100个,连200个都没有超过,那你最好就换一个账号,因为这个怎么说呢,有些手机号他注册的抖音它就是没有播放量,我跟你说,为什么我之前都建议大家一定是批量起号,我们起十个号,那么这个里面发大概,大概同样的内容,每个账号的播放量都是不一样的,十个账号里面能够起来两个三个就算不错的了,所以如果你目前只有一个手机账号,然后发了一两百个,两三百个作品的播放量都还只有几十个,100来个,那这种情况我们就需要这个换条路了,对吧,换个号。   第二种情况就是因为你的视频做搬运吧,你搬运别人的,或者你里面去发广告,发营销广告,然后被抖音逮到了,判定成违规号,然后给你降权的这种处罚,它一般都是有时间限定的,它是呈阶梯性的处罚,第一次发现你违规判七天,不给你流量,第二次14天,第三次是一个月,大概是这个这个阶梯性的一个走法,等这个处罚的期限满了以后,账号依然是可以用好,这是第二种情况。   第三种情况就是你这个账号能不能够报热门,如果说你今天发了一个视频是吧,你九点钟发了一个视频,然后九点半09:40的样子,一下子这个视频的播放量冲到1000冲到3000了,那么这个就是称为待推荐账号,待啊,等待的待,待推荐账号,那么这个阶段的时候,你最好去充一下充什么,最好去投放一下抖家,给他冲上热门。我们最早的时候用的办法是把这个视频的链接发到点赞群里面,让点赞的做任务的人去点赞评论完播,但是后边我们发现这样不行,为什么这样不行?就是一个视频他冲上热门,他一定是抖音自己内部他推的流量,他推的用户才才算是有效的,以外部复制的链接发到点赞群里面去,它是没有多大的用,所以后面我们就直接投投那个抖加了,就是我看到一个视频,他一下子冲到两千三千的播放量,我看他有爆的潜质,我就会马上去投抖家,会马上去投抖家,这样的话,你抖家的流量就能够带动自然流量,两重流量相加,就能够把你这个视频推上热门,是这样的,好,这个是第三种,然后第四种,当我们的一个账号里面出现了一个爆款作品对不对?你的一个账号里面,你拍了100个,终于出了一个爆款作品,那么这个时间段,比如说你今天发的作品,然后明天后天,这个热门的,那么这几天你的这个账号就是属于高权重账号,那么在这几天你需要做什么事情?各位在这几天你需要做什么事情?这几天你需要抓紧时间再去创作新的高质量的作品,让你的这个账号持续热门,否则过几天你这个视频的热度一下来,账号的权重也就下来了,我们就需要趁热打铁,我们看到很多的账号,一个视频爆了,爆了一个大满贯,几十万的几十万的点赞,结果你过阵子再去看他的账号依然没有起色,为什么没有起色?因为他没有能力持续的去创作热门的作品,所以他的账号没有办法启动起来。我们的毛爷爷说,你做一件好事很容易,难的是你一辈子都做好事。我们看到很多的账号,它没有持续热门的这个能力,所以账号就凉下来了,很多账号的停更,也就是自己没有持续创作热门作品的一个能力。所以当你的一个作品爆了以后,你一定要在那么几天的时间,个把星期的时间,抓紧去制作下一个作品,而不是等着这个视频报,我这个视频报了,我就看着他报,等他报完了以后,我再去发新的作品,不要这样,不要这么操作,一定是在你这个视频热门了以后,你趁热打铁,持续的去发新作品,让你的这个账号保持热度,提高权重,让权重不下去。 好了今天的内容就分享到这里。 相关文章ChatGPT访问及内容安全技术设计取代C++!微软改用Rust语言重写Win11内核:简洁安全、性能更佳ChatGPT 会“杀死”编程吗?如何下载推特视频在中国,这些小店向阳生长快递业企稳回升印证市场回暖“超级充电宝”蓄势待发 还面临哪些挑战? ChatGPT 或 Google:哪个给出了最佳答案

    2023年4月12日 pm4:09
    16
  • 简笔画教程图片步骤(好看的简笔画简单易学)

    超多可爱小动物简笔画步骤图来了,简单易学,赶快收藏了吧! 吃胡萝卜的兔子简笔画步骤图 可爱的灰兔简笔画步骤图 蠢萌的狗狗简笔画步骤图 可爱的小狗狗怎么画? 花豹子简笔画步骤图 画豹子步骤图 萌萌的小豹简笔画步骤图 奶牛简笔画步骤图 大奶牛简笔画怎么画 粉红小猪简笔画步骤图片 开心的小猪简笔画步骤图 开屏孔雀简笔画步骤图片 孔雀开屏简笔画怎么画 绵羊简笔画步骤图 有角山羊简笔画步骤图 小马简笔画步骤图 小马怎么画 马儿简笔画步骤图 相关文章ChatGPT访问及内容安全技术设计取代C++!微软改用Rust语言重写Win11内核:简洁安全、性能更佳ChatGPT 会“杀死”编程吗?如何下载推特视频在中国,这些小店向阳生长快递业企稳回升印证市场回暖“超级充电宝”蓄势待发 还面临哪些挑战? ChatGPT 或 Google:哪个给出了最佳答案

    2023年4月12日 pm4:09
    16
  • 吉他教程入门基础知识(吉他教学零基础教程)

    作为零基础初学者应该作哪些训练呢,主要有以下几点: 一:音阶训练 音阶是什么呢?简单说就是1234567i,七个音在吉他的位置,用左手按右手弹,不停的练习,从C大调开始训练,从6弦的低音3(咪)到1弦的高音5(索,1弦三品),不停的训练。 练熟后,开始做半音阶训练,就是说左手四个手指从一品分别按到四品,一根弦一根弦的来练,也叫爬格子。主要练习手的按弦力度和拔弦的配合。作为初学吉他的新手,一般很难练这个半音阶,因为太单调了,很多人都想快速的弹一首歌,这很正常,但想要弹好吉他,这个阶段必须走,现在不走,回头还要走,还要再练习爬格子。这是基本功。 二:左手指法 左手指法训练最重要的一点就是练习小指的力度,尤其是在按和弦时,一定要多用小指,比如说F和弦,Dm和弦,C和弦,包括c7和弦,G和弦用小指按第一弦的3品位,这样才能在经后的学习中,弹奏中很好运用小指,免得弹和声独奏时,无法灵活转换,导致脱拍。 另外左手训练就是按弦的部位在金属品的上面2到4毫米处,这样弹出的音才更饱满,太上辟了,太下闷了,都不好听。再就是左手指肚按弦时,一定要用中间按,但如果碰到下面或上面是空弦时,一定要偏下或偏上按,以免弹空弦的指甲碰到空弦,产生杂音,这一点一定要注意。 三:旋律和声训练 经过上面两个大项的训练后,基本上手指的灵活性,左右手的配合已经很完美了,这时就要学会旋律和声训练,旋律和声个人理解分为两部分,一部分为分解和声训练,就是主旋律一对应的和弦像弹分解和弦伴奏一样训练,还有一个是并列和声训练,就是主旋律配上低八度或低六度,减六度,减三度,五度音等等一直弹出来,就是咱们平常弹奏的小蜜蜂里的低音部,上面是主旋律音,这个几度几度为音程关系,先可以不了解,但一定要多训练这样的弹法,主要目的就是为指弹打基础。 相关文章ChatGPT访问及内容安全技术设计取代C++!微软改用Rust语言重写Win11内核:简洁安全、性能更佳ChatGPT 会“杀死”编程吗?如何下载推特视频在中国,这些小店向阳生长快递业企稳回升印证市场回暖“超级充电宝”蓄势待发 还面临哪些挑战? ChatGPT 或 Google:哪个给出了最佳答案

    2023年4月12日 pm4:09
    16
  • 微软开源 DeepSpeedChat,可将训练速度提升 15 倍以上

    微软宣布开源 Deep Speed Chat,可帮助用户轻松训练类 ChatGPT 等大语言模型。Deep Speed Chat 基于微软 Deep Speed 深度学习优化库开发,具备训练、强化推理等功能,使用 RLHF(人工反馈机制的强化学习)技术,可将训练速度提升 15 倍以上,并大幅降低成本。开源地址 相关文章ChatGPT访问及内容安全技术设计取代C++!微软改用Rust语言重写Win11内核:简洁安全、性能更佳ChatGPT 会“杀死”编程吗?如何下载推特视频在中国,这些小店向阳生长快递业企稳回升印证市场回暖“超级充电宝”蓄势待发 还面临哪些挑战? ChatGPT 或 Google:哪个给出了最佳答案

    2023年4月12日 pm4:09
    16