Vue脚手架Ⅲ(浏览器本地存储,Vue中的自定义事件,全局事件总线,消息订阅与发布(pubsub),nextTick,Vue封装的过度与动画)

news2025/8/3 17:36:52

文章目录

  • 脚手架
    • 3.10 浏览器本地存储
    • 3.11 Vue中的自定义事件
    • 3.12 全局事件总线
    • 3.13 消息订阅与发布(pubsub)
    • 3.14 nextTick
    • 3.15 Vue封装的过度与动画
      • 3.15.1 动画效果
      • 3.15.2 过度效果
      • 3.15.3 多个元素过度
      • 3.15.4 集成第三方动画
      • 3.15.5 总结过度和动画

脚手架

3.10 浏览器本地存储

js 就有这个功能,没必要在.vue里面分析,不用脚手架,直接在htnl文件。

webStorage

sessionStorage 和 localStorage 统称为 webStorage

  1. 存储内容大小一般支持5MB左右(不同浏览器可能还不一样)

  2. 浏览器端通过 Window.sessionStorage 和 Window.localStorage 属性来实现本地存储机制。(可以对比游戏存档,如果想关闭后第二天接着之前的玩就是localStorage)

  3. 相关API:

    1. xxxxxStorage.setItem('key', 'value');
      该方法接受一个键和值作为参数,会把键值对添加到存储中,如果键名存在,则更新其对应的值。(设置)

    2. xxxxxStorage.getItem('person');

      ​ 该方法接受一个键名作为参数,返回键名对应的值。(读取)

    3. xxxxxStorage.removeItem('key');

      ​ 该方法接受一个键名作为参数,并把该键名从存储中删除。

    4. xxxxxStorage.clear()

      ​ 该方法会清空存储中的所有数据。

  4. 备注:

    1. SessionStorage存储的内容会随着浏览器窗口关闭而消失。(Session 会话控制 这里就是 会话结束了就关闭消失了)
    2. LocalStorage存储的内容,需要手动清除才会消失。(浏览器关闭了数据也不会消失)
    3. xxxxxStorage.getItem(xxx)如果xxx对应的value获取不到,那么getItem的返回值是null。
    4. JSON.parse(null)的结果依然是null。

例:搜索里面搜东西时,下面就会出现之前搜索过的

在这里插入图片描述

案例:
localStorage.html

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8" />
		<title>localStorage</title>
	</head>
	<body>
		<h2>localStorage</h2>
		<button onclick="saveData()">点我保存一个数据</button>
		<button onclick="readData()">点我读取一个数据</button>
		<button onclick="deleteData()">点我删除一个数据</button>
		<button onclick="deleteAllData()">点我清空一个数据</button>

		<script type="text/javascript" >
			let p = {name:'张三',age:18}

			function saveData(){
				localStorage.setItem('msg','hello!!!')
				// 这个666显示的是黑色的,是字符(数字型转换成了字符型)(蓝色的显示是字符)
				localStorage.setItem('msg2',666)
				// 把对象变成字符串
				localStorage.setItem('person',JSON.stringify(p))
			}
			function readData(){
				console.log(localStorage.getItem('msg'))
				console.log(localStorage.getItem('msg2'))

				const result = localStorage.getItem('person')
				console.log(JSON.parse(result))

				// console.log(localStorage.getItem('msg3'))
			}
			function deleteData(){
				localStorage.removeItem('msg2')
			}
			function deleteAllData(){
				localStorage.clear()
			}
		</script>
	</body>
</html>

操作显示:

在这里插入图片描述

SessionStorage.html

把上面的代码中,搜索localStorage全部换成SessionStorage

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8" />
		<title>sessionStorage</title>
	</head>
	<body>
		<h2>sessionStorage</h2>
		<button onclick="saveData()">点我保存一个数据</button>
		<button onclick="readData()">点我读取一个数据</button>
		<button onclick="deleteData()">点我删除一个数据</button>
		<button onclick="deleteAllData()">点我清空一个数据</button>

		<script type="text/javascript" >
			let p = {name:'张三',age:18}

			function saveData(){
				sessionStorage.setItem('msg','hello!!!')
				sessionStorage.setItem('msg2',666)
				sessionStorage.setItem('person',JSON.stringify(p))
			}
			function readData(){
				console.log(sessionStorage.getItem('msg'))
				console.log(sessionStorage.getItem('msg2'))

				const result = sessionStorage.getItem('person')
				console.log(JSON.parse(result))

				// console.log(sessionStorage.getItem('msg3'))
			}
			function deleteData(){
				sessionStorage.removeItem('msg2')
			}
			function deleteAllData(){
				sessionStorage.clear()
			}
		</script>
	</body>
</html>

显示:

在这里插入图片描述

3.11 Vue中的自定义事件

  1. 一种组件间通信的方式,适用于:子组件 ===> 父组件

  2. 使用场景:A是父组件,B是子组件,B想给A传数据,那么就要在A中给B绑定自定义事件(事件的回调在A中)。

  3. 绑定自定义事件:

    1. 第一种方式,在父组件中:<Demo @atguigu="test"/><Demo v-on:atguigu="test"/>

    2. 第二种方式,在父组件中:

      <Demo ref="demo"/>
      ......
      mounted(){
         this.$refs.xxx.$on('atguigu',this.test)
      }
      
    3. 若想让自定义事件只能触发一次,可以使用once修饰符,或$once方法。

  4. 触发自定义事件:this.$emit('atguigu',数据)

  5. 解绑自定义事件this.$off('atguigu')

  6. 组件上也可以绑定原生DOM事件,需要使用native修饰符。

  7. 注意:通过this.$refs.xxx.$on('atguigu',回调)绑定自定义事件时,回调要么配置在methods中,要么用箭头函数,否则this指向会出问题!

案例:
(思路书写顺序在代码中)

App.vue

<template>
	<div class="app">
		<h1>{{msg}},学生姓名是:{{studentName}}</h1>
		<!--方法1:通过父组件给子组件传递函数类型的props实现:子给父传递数据

			使用props把子传给父 自定义事件 :getSchoolName( 1 事件的绑定在绑定的组件里面去执行) 调用回调函数getSchoolName( 2 调用的回调函数在当前组件执行)-->
		<School :getSchoolName="getSchoolName"/>

		<!-- 方法2:通过父组件给子组件绑定一个自定义事件实现:子给父传递数据(第一种写法,使用@或v-on) 
		1 给Student绑定一个自定义事件(使用@自定义名="回调函数")
		2 去子组件Student里面对atguigu告知一个这个事件是干嘛的(通过点击事件执行sendStudentName从而执行atguigu)
		3 在sendStudentName里面去触发Student组件实例身上的atguigu事件(通过$emit),里面的参数会传给atguigu到父组件
		4 最后父组件App里面就会收到传给atguigu的参数,执行此时的回调函数getStudentName
		-->
		<!-- <Student @atguigu="getStudentName"/> -->

		<!-- 方法3:通过父组件给子组件绑定一个自定义事件实现:子给父传递数据(第二种写法,使用ref) 
		1 先用ref定位到当前Student(相当于js里面id dom)
		2 在当前组件里面使用挂起,绑定自定义事件
		3 子组件里面依然使用上面方法2里面的后面方法  触发Student组件实例身上的atguigu事件
		-->
		<Student ref="student"/>
	</div>
</template>

<script> 
	import School from './components/School'
	import Student from './components/Student'
	export default {
		name: 'App',
		components:{School,Student},
		data() {
			return {
				msg:'你好啊!',
				studentName:''
			}
		},
		methods: {
			getSchoolName(name){
				console.log('App收到了学校名:',name)
			},
			// 第一个参数作为name形参接收 其他的参数全部整理到params数组身上(es6内容)
			getStudentName(name,...params){
				console.log('App收到了学生名:',name,params)
				this.studentName = name;
			},
		},
		mounted() {
			this.$refs.student.$on('atguigu',this.getStudentName) //绑定自定义事件
			// this.$refs.student.$once('atguigu',this.getStudentName) //绑定自定义事件(一次性)
		},
	}
</script>

<style scoped>
	.app{
		background-color: gray;
		padding: 5px;
	}
</style>

Student.vue

<template>
    	<div class="student">
			<h2>学生姓名:{{name}}</h2>
			<h2>学生性别:{{sex}}</h2>
			<h2>当前求和为:{{number}}</h2>
			<button @click="add">点我加1</button>
            <!-- 通过点击事件执行sendStudentName从而去执行atguigu -->
            <button @click="sendStudentName">把学生名给App</button>
            <button @click="unbind">解绑atguigu事件</button>
            <button @click="death">销毁当前Student组件的实例(vc)</button>
		</div>
</template>

<script>
export default {
    name: 'Student',
    data(){
        return {
            name:'张三',
            sex:'男',
            number: 0,
        }
    },
    methods:{
        add(){
            console.log("add回调被调用了");
            this.number++; // 要拿到data里面的number,要用this,不然会报错显示number未定义
        },
        sendStudentName(){
            this.$emit('atguigu',this.name,666,777,888);
        },
        unbind(){
            // 解绑atguigu事件
            this.$off('atguigu');
        },
        death(){
            this.$destroy();
        }
    }
}
</script>

<style lang="less" scoped>
	.student{
		background-color: pink;
		padding: 5px;
		margin-top: 30px;
	}
</style>

School.vue

<template>
    <div class="school">
		<h2>学校名称:{{name}}</h2>
		<h2>学校地址:{{address}}</h2>
        <!-- 通过点击事件执行sendSchoolName去执行getSchoolName事件,再把getSchoolName执行的结果参数传回到父组件 -->
		<button @click="sendSchoolName">把学校名给App</button>

	</div>
</template>

<script>
export default {
    name:'School',
    // 子传父  传一个参数给getSchoolName
	props:['getSchoolName'],
	data() {
		return {
			name:'尚硅谷',
			address:'北京',
		}
	},
    methods:{
        sendSchoolName(){
            this.getSchoolName(this.name);
        }
    }
	
}
</script>

<style scoped>
	.school{
		background-color: skyblue;
		padding: 5px;
	}
</style>

效果
在这里插入图片描述

3.12 全局事件总线

任意组件间通信

  1. 一种组件间通信的方式,适用于任意组件间通信。

  2. 安装全局事件总线:

bus 有总线的意思

new Vue({
	......
	beforeCreate() {
		Vue.prototype.$bus = this //安装全局事件总线,$bus就是当前应用的vm  全局都能看到这个$bus 
	},
    ......
}) 
  1. 使用事件总线:

    1. 接收数据:A组件想接收数据,则在A组件中给$bus绑定自定义事件,事件的回调留在A组件自身。

      methods(){
        demo(data){......}
      }
      ......
      mounted() {
        this.$bus.$on('xxxx',this.demo)
      }
      
    2. 提供数据:this.$bus.$emit('xxxx',数据)

  2. 最好在beforeDestroy钩子中,用$off去解绑当前组件所用到的事件。

在这里插入图片描述

如上图,我们通过一个x作为中间商,我们需要的是:

  1. 要让其他的人都能看到x (在js里面定义,我们用$bus)

  2. 能调用到 $on $off $emit

案例:(Student组件 提供数据给 School组件)

思路分析

  1. 先安装全局事件总线在main.js
  2. 弄清楚谁收数据谁发数据
  3. 收数据的人去绑定事件总线(mount一挂载就绑定最合适)
    this.$bus找到全局事件总线this.$bus.$on给他绑定一个hello事件,如果有一天这个hello事件触发,就会调用后面的回调函数
    mounted() {
     		this.$bus.$on('hello',(data)=>{
     			console.log('我是School组件,收到了数据',data)
     		})
     	},
    
  4. 在组件即将销毁的时候解绑,在当前的组件使用beforeDestroy
  5. 收数据的写完之后,就去发数据的组件写。在发数据的人那里去触发这个事件,this.$bus找到这个人,this.$bus.$emit去触发这个hello事件,然后把后面的this.name带过去
    methods: {
     		sendStudentName(){
     			this.$bus.$emit('hello',this.name)
     		}
     	},
    

main.js

//引入Vue
import Vue from 'vue'
//引入App
import App from './App.vue'
//关闭Vue的生产提示
Vue.config.productionTip = false

//创建vm
new Vue({
	el:'#app',
	render: h => h(App),
	beforeCreate() {
		Vue.prototype.$bus = this //安装全局事件总线
	},
})

School.vue

<template>
	<div class="school">
		<h2>学校名称:{{name}}</h2>
		<h2>学校地址:{{address}}</h2>
	</div>
</template>

<script>
	export default {
		name:'School',
		data() {
			return {
				name:'尚硅谷',
				address:'北京',
			}
		},
		mounted() {
			// console.log('School',this)
			this.$bus.$on('hello',(data)=>{
				console.log('我是School组件,收到了数据',data)
			})
		},
		beforeDestroy() {
			this.$bus.$off('hello')
		},
	}
</script>

<style scoped>
	.school{
		background-color: skyblue;
		padding: 5px;
	}
</style>

Student.vue

<template>
	<div class="student">
		<h2>学生姓名:{{name}}</h2>
		<h2>学生性别:{{sex}}</h2>
		<button @click="sendStudentName">把学生名给School组件</button>
	</div>
</template>

<script>
	export default {
		name:'Student',
		data() {
			return {
				name:'张三',
				sex:'男',
			}
		},
		mounted() {
			// console.log('Student',this.x)
		},
		methods: {
			sendStudentName(){
				this.$bus.$emit('hello',this.name)
			}
		},
	}
</script>

<style lang="less" scoped>
	.student{
		background-color: pink;
		padding: 5px;
		margin-top: 30px;
	}
</style>

beforeCreate生命周期钩子 最开头的 这个时候模板还没有解析,借助这个,把要做的做好了,原型放好了,模板就开始解析。其实等子组件School执行的时候,该放的东西也放好了

所有人都在用$bus 以后要是不用了,占用着不好,所以需要销毁 使用beforeDestroy

有$bus 想得数据得数据,想发数据发数据

父传子的时候我们还是用props比较方便

3.13 消息订阅与发布(pubsub)

需要数据的订阅消息,提供数据的发布消息。一般在vue里面用的很少,因为可以使用全局事件总线

pubsub — publish subscribe

  1. 一种组件间通信的方式,适用于任意组件间通信。

  2. 使用步骤:

    1. 安装pubsub:npm i pubsub-js

    2. 引入: import pubsub from 'pubsub-js'

    3. 接收数据:A组件想接收数据,则在A组件中订阅消息,订阅的回调留在A组件自身。

      methods(){
        demo(data){......}
      }
      ......
      mounted() {
        this.pid = pubsub.subscribe('xxx',this.demo) //订阅消息
      }
      
    4. 提供数据:pubsub.publish('xxx',数据)

    5. 最好在beforeDestroy钩子中,用PubSub.unsubscribe(pid)去取消订阅。

3.14 nextTick

  1. 语法:this.$nextTick(回调函数)
  2. 作用:在下一次 DOM 更新结束后执行其指定的回调。
  3. 什么时候用:当改变数据后,要基于更新后的新DOM进行某些操作时,要在nextTick所指定的回调函数中执行。

3.15 Vue封装的过度与动画

案例:(左右隐藏显示效果)

在这里插入图片描述

3.15.1 动画效果

  1. 先写出普通结构效果

Test.vue

在这里插入图片描述

App.vue

在这里插入图片描述

目前实现的效果是简单的隐藏和显示,没有移动效果

  1. 写出动画效果

不用写两个动画,进入离开,写一个就行,写来,另外一个反着就行

Test.vue

<template>
	<div>
		<button @click="isShow = !isShow">显示/隐藏</button>
		<transition name="hello" appear>
			<h1 v-show="isShow">你好啊!</h1>
		</transition>
	</div>
</template>

<script>
	export default {
		name:'Test',
		data() {
			return {
				isShow:true
			}
		},
	}
</script>

<style scoped>
	h1{
		background-color: orange;
	}
/* 进入时激活 */
	.hello-enter-active{
		animation: atguigu 0.5s linear;
	}
/* 离开时激活 */
	.hello-leave-active{
		animation: atguigu 0.5s linear reverse;
	}

	@keyframes atguigu {
		from{
			transform: translateX(-100%);
		}
		to{
			transform: translateX(0px);
		}
	}
</style>

3.15.2 过度效果

Test2.vue

<template>
	<div>
		<button @click="isShow = !isShow">显示/隐藏</button>
		<transition-group name="hello" appear>
			<h1 v-show="!isShow" key="1">你好啊!</h1>
			<h1 v-show="isShow" key="2">尚硅谷!</h1>
		</transition-group>
	</div>
</template>

<script>
	export default {
		name:'Test',
		data() {
			return {
				isShow:true
			}
		},
	}
</script>

<style scoped>
	h1{
		background-color: orange;
	}
	/* 进入的起点、离开的终点(两个效果是一样的,可以写在一起) */
	.hello-enter,.hello-leave-to{
		transform: translateX(-100%);
	}
	.hello-enter-active,.hello-leave-active{
		transition: 0.5s linear;
	}
	/* 进入的终点、离开的起点 */
	.hello-enter-to,.hello-leave{
		transform: translateX(0);
	}

</style>

3.15.3 多个元素过度

使用transition-group 和 key值

3.15.4 集成第三方动画

使用npm里面的库,搜索animate.css,这是一个成型库,开箱即用

在这里插入图片描述

在这里插入图片描述

往下翻之后,按照流程

在这里插入图片描述

使用

Test3.vue

<template>
	<div>
		<button @click="isShow = !isShow">显示/隐藏</button>
		<transition-group 
			appear
			name="animate__animated animate__bounce" 
			enter-active-class="animate__swing"
			leave-active-class="animate__backOutUp"
		>
			<h1 v-show="!isShow" key="1">你好啊!</h1>
			<h1 v-show="isShow" key="2">尚硅谷!</h1>
		</transition-group>
	</div>
</template>

<script>
	import 'animate.css'
	export default {
		name:'Test',
		data() {
			return {
				isShow:true
			}
		},
	}
</script>

<style scoped>
	h1{
		background-color: orange;
	}
	

</style>

效果

在这里插入图片描述

3.15.5 总结过度和动画

  1. 作用:在插入、更新或移除 DOM元素时,在合适的时候给元素添加样式类名。

  2. 图示:

在这里插入图片描述

  1. 写法:

    1. 准备好样式:(自己写或者使用第三方库)

      • 元素进入的样式:
        1. v-enter:进入的起点
        2. v-enter-active:进入过程中
        3. v-enter-to:进入的终点
      • 元素离开的样式:
        4. v-leave:离开的起点
        5. v-leave-active:离开过程中
        6. v-leave-to:离开的终点
    2. 使用<transition>包裹要过度的元素,并配置name属性:

      <transition name="hello">
      	<h1 v-show="isShow">你好啊!</h1>
      </transition>
      
    3. 备注:若有多个元素需要过度,则需要使用:<transition-group>,且每个元素都要指定key值。

下有一个笔记第四章了,有关Vue中的ajax
,加油加油码代码!!!!v🍜🍛🍚🍤🦪

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

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

相关文章

达梦数据库安装与初始化超详细教程

陈老老老板&#x1f9b8;&#x1f468;‍&#x1f4bb;本文专栏&#xff1a;国产数据库-达梦数据库&#xff08;主要讲一些达梦数据库相关的内容&#xff09;&#x1f468;‍&#x1f4bb;本文简述&#xff1a;本文讲一下达梦数据库的下载与安装教程&#xff08;Windows版&…

一文解读 NFT 零版税

当我们听到“版税”这两个字时&#xff0c;脑海中首先浮现的是什么&#xff1f; 是对创作者作品权属的保护&#xff0c;还是项目方、平台额外的收益&#xff1f; 长期以来&#xff0c;版税作为一种收益机制&#xff0c;让买家“为知识和内容付费”&#xff0c;又让卖家“享受…

m在ISE平台下使用verilog开发基于FPGA的GMSK调制器

目录 1.算法描述 2.仿真效果预览 3.MATLAB部分代码预览 4.完整MATLAB程序 1.算法描述 高斯最小频移键控&#xff08;Gaussian Filtered Minimum Shift Keying&#xff09;&#xff0c;这是GSM系统采用的调制方式。数字调制解调技术是数字蜂窝移动通信系统空中接口的重要组成…

决策树-相关作业

1. 请使用泰勒展开推导gini不纯度公式&#xff1b; 2. 请说明树的剪枝怎么实现&#xff1b; ●预剪枝&#xff08;pre-pruning&#xff09;通过替换决策树生成算法中的停止准则。&#xff08;例如&#xff0c;最大树深度或信息增益大于某一阈值&#xff09;来实现树的简化。预…

Flutter高仿微信-第39篇-单聊-删除单条信息

Flutter高仿微信系列共59篇&#xff0c;从Flutter客户端、Kotlin客户端、Web服务器、数据库表结构、Xmpp即时通讯服务器、视频通话服务器、腾讯云服务器全面讲解。 详情请查看 效果图&#xff1a; 实现代码&#xff1a; //删除对话框 Future<void> _showDeleteDialog(Ch…

要把项目问题管理好,项目经理需要这8个步骤!

项目问题时有发生&#xff0c;想让项目获得成功&#xff0c;项目经理需要有一个计划来快速有效地应对任何出现的问题。这是最佳实践问题管理过程的一部分&#xff0c;更是良好项目管理的核心本质。 项目问题的四种类型 任何事情都可能成为项目过程中影响项目计划的问题。项目…

ZYNQ之FPGA学习----FIFO IP核使用实验

1 FIFO IP核介绍 FIFO 的英文全称是 First In First Out&#xff0c; 即先进先出。与 FPGA 内部的 RAM 和 ROM 的区别是没有外部读写地址线&#xff0c; 采取顺序写入数据&#xff0c; 顺序读出数据的方式&#xff0c;使用起来简单方便&#xff0c;缺点就是不能像 RAM 和 ROM …

共创可持续出行未来 奔驰牵手《阿凡达:水之道》

11月20日&#xff0c;梅赛德斯-奔驰与20世纪影业及其出品电影《阿凡达&#xff1a;水之道》的品牌战略合作迈入崭新篇章&#xff01;电影《阿凡达&#xff1a;水之道》已定档于12月16日在全球多地公映&#xff0c;并于即日起开启主题为——“地球&#xff0c;我们的潘多拉”的联…

医疗设备远程监控 5G千兆工业网关智慧医疗

医疗设备远程监控 5G千兆工业网关智慧医疗 5G千兆工业网关的医疗设备远程监控应用&#xff0c;实现各医疗智能终端连接入网&#xff0c;医疗数据、监控视频、设备状态数据等&#xff0c;实时采集&#xff0c;边缘节点分析处理&#xff0c;低延时高速传输&#xff0c;工作人员远…

外汇天眼:外汇投资入门知识炒汇者的心理误区有哪些?

今天这篇文章我们了解一下关于外汇炒汇者的心理误区有哪些&#xff0c;希望对大家进行外汇投资有所帮助。 盲目跟风--心理误区之一 股市被动受诸多复杂因素的影响&#xff0c;其中股友的跟风心理对股市影响甚大。有这种心理的投资人&#xff0c;看见他人纷纷购进股票时&#…

代码随想录训练营第31天|LeetCode 455.分发饼干、 376. 摆动序列、53. 最大子序和

参考 代码随想录 什么是贪心算法 贪心算法&#xff08;又称贪婪算法&#xff09;是指&#xff0c;在对问题求解时&#xff0c;总是做出在当前看来是最好的选择。也就是说&#xff0c;不从整体最优上加以考虑&#xff0c;算法得到的是在某种意义上的局部最优解 。 贪心算法不…

hive表加载csv格式数据或者json格式数据

先说简单的使用 CREATE TABLE cc_test_serde( id string COMMENT from deserializer, name string COMMENT from deserializer) ROW FORMAT SERDE org.apache.hadoop.hive.serde2.JsonSerDe STORED AS INPUTFORMAT org.apache.hadoop.mapred.TextInputFormat OUTPUTFO…

Qt第二十三章:设置窗口、控件背景颜色

修改样式表&#xff1a;设置后发现影响所有控件内的背景色事件触发样式&#xff1a;鼠标划过触发样式设置背景图背景图打包。 py代码中引用 将resources.qrc文件进行转化成py文件 在我们将xxx.ui文件转换成py文件的时候会自动引用resources.qrc 实际使用中发现&#xff1a;back…

Linux系统认知——常用命令(全)

文章目录一、帮助命令1.man&#xff08;查看帮助手册&#xff09;2.info&#xff08;阅读 info 格式的文档&#xff09;3.whatis&#xff08;查询命令功能&#xff09;二、文件及目录相关命令1.touch&#xff08;创建新的空文件&#xff0c;改变已有文件的时间戳&#xff09;2.…

黑马学员放弃20K月薪投身比亚迪,是去「车间」打螺丝吗?

黑马学员进互联网企业的新闻不稀奇&#xff0c;但黑马学员进“工厂”的新闻&#xff0c;就稀奇了。 黑马学员&#xff0c;互联网人&#xff0c;“工厂”&#xff0c;这几个词放在一起&#xff0c;怎么看怎么不顺眼。甚至有人会觉得魔幻&#xff0c;敲代码的、搞设计的脑力工作…

数据技术前沿趋势、TiDB 产品方向、真实场景 Demo… 丨PingCAP DevCon 2022 产品技术论坛预览

现在报名活动&#xff0c;有机会获得限定好礼哦&#xff01;&#x1f446; 2022 年 5 月&#xff0c;TiDB 进入了 V6 时代。从 TiDB 第一个 Beta 版本开始&#xff0c;OLTP Scale、Real-time HTAP、TiDB Cloud&#xff0c;我们一步步把理念变成现实。 现在&#xff0c;数据库技…

如何保护客户数据并降低合规风险

如何保护客户数据并降低合规风险 保护客户数据和降低合规风险通常是金融行业企业&#xff08;从银行到投资公司&#xff0c;再到小型&#xff0c;中型和大型企业的财务部门&#xff09;最关心的问题。 当财务文件是以纸质形式出现时&#xff0c;这些担忧会成倍增加&#xff…

关于api的响应时间(curl)

最近遇到了需要在服务器上测试第三方api响应时间的需求。那么&#xff0c;怎么测呢&#xff1f; curl安排上。 curl -w "dnslookup: %{time_namelookup} | connect: %{time_connect} | appconnect: %{time_appconnect} | pretransfer: %{time_pretransfer} | starttrans…

3.5 讲一讲关于小红书的搜索引流技巧【玩赚小红书】

“有一大部分女生把小红书当百度使用”&#xff0c;一句话道出了小红书流量的核心。 今天&#xff0c;我更想和大家聊聊如何获取同样巨大的搜索流量&#xff0c;让源源不断的精准客户主动找上门来。可别忽视了这个流量入口&#xff0c;它占据总体流量的 50% 以上。 ​ ​ 布局…

2022卡塔尔世界杯引爆全球,跨境电商如何做好选品和营销?

2022卡塔尔世界杯正如火如荼的举办着&#xff0c;热度席卷全球。足球皇帝Franz Beckenbauer曾说&#xff1a;“在绿茵场上滚动的不是足球&#xff0c;而是黄金。”从商业价值论&#xff0c;世界杯的品牌价值世界第一&#xff0c;是奥运会的8倍。据Nox聚星了解&#xff0c;2022年…