一文吃透 Vue 框架教程(下)

news2024/11/24 10:50:00

在这里插入图片描述

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。
🍎个人主页:Java Fans的博客
🍊个人信条:不迁怒,不贰过。小知识,大智慧。
💞当前专栏:前端案例分享专栏
✨特色专栏:国学周更-心性养成之路
🥭本文内容:一文吃透 Vue 框架教程(下)

文章目录

    • 12. Vue中组件(component)
      • 12.1 组件作用
      • 12.2 组件使用
        • 12.2.1 全局组件注册
        • 12.2.2 局部组件注册
      • 12.3 Prop的使用
        • 12.3.1 通过在组件上声明静态数据传递给组件内部
        • 12.3.2 通过在组件上声明动态数据传递给组件内部
        • 12.3.3 prop的单向数据流
      • 12.4 组件中定义数据和事件使用
          • 1. 组件中定义属于组件的数据
          • 2.组件中事件定义
      • 12.5 向子组件中传递事件并在子组件中调用该事件
    • 13.Vue中路由 (Vue Router)
        • 13.1 路由
        • 13.2 作用
        • 13.3 使用路由
          • 引入路由
          • 创建组件对象
          • 定义路由对象的规则
          • 将路由对象注册到vue实例
          • 在页面中显示路由的组件
          • 根据连接切换路由
        • 13.4 router-link使用
        • 13.5 默认路由
        • 13.6 路由中参数传递
        • 13.7 嵌套路由
          • 声明最外层和内层路由
          • 创建路由对象含有嵌套路由
          • 注册路由对象
    • 14. Vue CLI 脚手架
      • 14.1 什么是CLI
      • 14.2 什么是Vue CLI <====> (maven 项目构建工具)
      • 14.3 Vue CLI优势
      • 14.4 Vue CLI安装
          • 1. 环境准备
          • 2.安装脚手架
          • 3.第一个vue脚手架项目
          • 4.如何开发Vue脚手架
    • 15.在脚手架中使用axios
      • 15.1 安装axios
    • 16.Vue Cli脚手架项目部署
    • 17.VueX 状态管理
      • 17.1 简介&安装
      • 17.2 state属性
      • 17.3 mutations 属性
      • 17.4 getters 属性

在这里插入图片描述

12. Vue中组件(component)

12.1 组件作用

组件作用: 用来减少Vue实例对象中代码量,日后在使用Vue开发过程中,可以根据 不同业务功能将页面中划分不同的多个组件,然后由多个组件去完成整个页面的布局,便于日后使用Vue进行开发时页面管理,方便开发人员维护。

12.2 组件使用

12.2.1 全局组件注册

说明:全局组件注册给Vue实例,日后可以在任意Vue实例的范围内使用该组件

//1.开发全局组件
Vue.component('login',{
  template:'<div><h1>用户登录</h1></div>'
});
//2.使用全局组件  在Vue实例范围内
<login></login>  
# 注意:
 - 1.Vue.component用来开发全局组件 参数1: 组件的名称  参数2: 组件配置{}  template:''用来书写组件的html代码  template中必须有且只有一个root元素
 - 2.使用时需要在Vue的作用范围内根据组件名使用全局组件
 - 3.如果在注册组件过程中使用 驼峰命名组件的方式 在使用组件时 必须将驼峰的所有单词小写加入-线进行使用

12.2.2 局部组件注册

说明:通过将组件注册给对应Vue实例中一个components属性来完成组件注册,这种方式不会对Vue实例造成累加

  • 第一种开发方式
//局部组件登录模板声明
let login ={   //具体局部组件名称
  template:'<div><h2>用户登录</h2></div>'
};
const app = new Vue({
  el: "#app",
  data: {},
  methods: {},
  components:{  //用来注册局部组件
    login:login  //注册局部组件
  }
});

//局部组件使用 在Vue实例范围内
<login></login>
  • 第二种开发方式
//1.声明局部组件模板  template 标签 注意:在Vue实例作用范围外声明
  <template id="loginTemplate">
      <h1>用户登录</h1>
  </template>

//2.定义变量用来保存模板配置对象
    let login ={   //具体局部组件名称
        template:'#loginTemplate'  //使用自定义template标签选择器即可
    };

//3.注册组件	
    const app = new Vue({
        el: "#app",
        data: {},
        methods: {},
        components:{  //用来注册局部组件
            login:login  //注册局部组件
        }
    });

 //4.局部组件使用 在Vue实例范围内
	 <login></login>

12.3 Prop的使用

作用:props用来给组件传递相应静态数据或者是动态数据的

12.3.1 通过在组件上声明静态数据传递给组件内部

//1.声明组件模板配置对象
    let login = {
        template:"<div><h1>欢迎:{{ userName }} 年龄:{{ age }}</h1></div>",
        props:['userName','age']  //props作用 用来接收使用组件时通过组件标签传递的数据
    }

//2.注册组件
    const app = new Vue({
        el: "#app",
        data: {},
        methods: {},
        components:{
            login //组件注册
        }
    });

//3.通过组件完成数据传递
	<login user-name="小陈" age="23"></login>
# 总结:
			1.使用组件时可以在组件上定义多个属性以及对应数据
			2.在组件内部可以使用props数组生命多个定义在组件上的属性名 日后可以在组件中通过{{ 属性名 }} 方式获取组件中属性值

12.3.2 通过在组件上声明动态数据传递给组件内部

//1.声明组件模板对象
    const login = {
        template:'<div><h2>欢迎: {{ name }} 年龄:{{ age }}</h2></div>',
        props:['name','age']
    }
 
//2.注册局部组件
    const app = new Vue({
        el: "#app",
        data: {
            username:"小陈陈",
            age:23
        },
        methods: {},
        components:{
            login //注册组件
        }
    });

//3.使用组件
	 <login :name="username" :age="age"></login>  //使用v-bind形式将数据绑定Vue实例中data属性,日后data属性发生变化,组件内部数据跟着变化

12.3.3 prop的单向数据流

单向数据流:所有的 prop 都使得其父子 prop 之间形成了一个单向下行绑定:父级 prop 的更新会向下流动到子组件中,但是反过来则不行。

  • 所有的 prop 都使得其父子 prop 之间形成了一个单向下行绑定:父级 prop 的更新会向下流动到子组件中,但是反过来则不行。这样会防止从子组件意外改变父级组件的状态,从而导致你的应用的数据流向难以理解。

  • 额外的,每次父级组件发生更新时,子组件中所有的 prop 都将会刷新为最新的值。这意味着你应该在一个子组件内部改变 prop。如果你这样做了,Vue 会在浏览器的控制台中发出警告。—摘自官网

12.4 组件中定义数据和事件使用

1. 组件中定义属于组件的数据
//组件声明的配置对象
const login = {
  template:'<div><h1>{{ msg }} kgc教育</h1><ul><li v-for="item,index in lists">{{ index }}{{ item }}</li></ul></div>',
  data(){   //使用data函数方式定义组件的数据   在templatehtml代码中通过插值表达式直接获取
    return {
      msg:"hello",
      lists:['java','spring','springboot']
    }//组件自己内部数据
  }
}
2.组件中事件定义
 const login={
        template:'<div><input type="button" value="点我触发组件中事件" @click="change"></div>',
        data(){
            return {
                name:'小陈'
            };
        },
        methods:{
            change(){
                alert(this.name)
                alert('触发事件');
            }
        }
    }
# 总结	
		1.组件中定义事件和直接在Vue中定义事件基本一致 直接在组件内部对应的html代码上加入@事件名=函数名方式即可
		2.在组件内部使用methods属性用来定义对应的事件函数即可,事件函数中this 指向的是当前组件的实例

12.5 向子组件中传递事件并在子组件中调用该事件

在子组件中调用传递过来的相关事件必须使用 this.$emit('函数名') 方式调用

//1.声明组件
    const login = {
        template:"<div><h1>kgc教育 {{ uname }}</h1> <input type='button' value='点我' @click='change'></div>",
        data(){
            return {
                uname:this.name
            }
        },
        props:['name'],
        methods:{
            change(){
                //调用vue实例中函数
                this.$emit('aaa');  //调用组件传递过来的其他函数时需要使用 this.$emit('函数名调用')
            }
        }
    }
    
 //2.注册组件
    	const app = new Vue({
        el: "#app",
        data: {
            username:"小陈"
        },
        methods: {
            findAll(){  //一个事件函数  将这个函数传递给子组件
                alert('Vue 实例中定义函数');
            }
        },
        components:{
            login,//组件的注册
        }
    });

//3.使用组件
	<login  @find="findAll"></login>    //=====> 在组件内部使用  this.$emit('find')

13.Vue中路由 (Vue Router)

13.1 路由

路由:根据请求的路径按照一定的路由规则进行请求的转发从而帮助我们实现统一请求的管理

13.2 作用

用来在vue中实现组件之间的动态切换

13.3 使用路由

  1. 引入路由
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script src="https://unpkg.com/vue-router/dist/vue-router.js"></script>  //vue 路由js
    
  2. 创建组件对象
    //声明组件模板
    const login = {
      template:'<h1>登录</h1>'
    };
    
    const register = {
      template:'<h1>注册</h1>'
    };
    
    
  3. 定义路由对象的规则
     //创建路由对象
    const router = new VueRouter({
      routes:[
        {path:'/login',component:login},   //path: 路由的路径  component:路径对应的组件
        {path:'/register',component:register}
      ]
    });
    
  4. 将路由对象注册到vue实例
    const app = new Vue({
      el: "#app",
      data: {
        username:"小陈",
      },
      methods: {},
      router:router   //设置路由对象
    });
    
  5. 在页面中显示路由的组件
    <!--显示路由的组件-->
    <router-view></router-view>
    
  6. 根据连接切换路由
    <a href="#/login">点我登录</a>
    <a href="#/register">点我注册</a>
    

13.4 router-link使用

作用:用来替换我们在切换路由时使用a标签切换路由

好处:就是可以自动给路由路径加入#不需要手动加入

<router-link to="/login" tag="button">我要登录</router-link>
<router-link to="/register" tag="button">点我注册</router-link>
# 总结:
	1.router-link 用来替换使用a标签实现路由切换 好处是不需要书写#号直接书写路由路径
	2.router-link to属性用来书写路由路径   tag属性:用来将router-link渲染成指定的标签

13.5 默认路由

作用:用来在第一次进入界面是显示一个默认的组件

const router = new VueRouter({
  routes:[
    //{ path:'/',component:login},
    { path:'/',redirect:'/login'},  //redirect: 用来当访问的是默认路由 "/" 时 跳转到指定的路由展示  推荐使用
    { path:'/login', component:login},
    { path:'/register', component:register},
  ]
});

13.6 路由中参数传递

  • 第一种方式传递参数 传统方式
  1. 通过?号形式拼接参数

     <router-link to="/login?id=21&name=zhangsan">我要登录</router-link>
    
  2. 组件中获取参数

    const login = {
      template:'<h1>用户登录</h1>',
      data(){return {}},
      methods:{},
      created(){
        console.log("=============>"+this.$route.query.id+"======>"+this.$route.query.name);
      }
    };
    
  • 第二种方式传递参数 restful
  1. 通过使用路径方式传递参数

    <router-link to="/register/24/张三">我要注册</router-link>
    var router = new VueRouter({
      routes:[
        {path:'/register/:id/:name',component:register}   //定义路径中获取对应参数
      ]
    });
    
  2. 组件中获取参数

    const register = {
      template:'<h1>用户注册{{ $route.params.name }}</h1>',
      created(){
        console.log("注册组件中id:   "+this.$route.params.id+this.$route.params.name);
      }
    };
    

13.7 嵌套路由

  1. 声明最外层和内层路由
    <template id="product">
        <div>
            <h1>商品管理</h1>
    
            <router-link to="/product/add">商品添加</router-link>
            <router-link to="/product/edit">商品编辑</router-link>
    
            <router-view></router-view>
    
        </div>
    </template>
    
    //声明组件模板
    const product={
      template:'#product'
    };
    
    const add = {
      template:'<h4>商品添加</h4>'
    };
    
    const edit = {
      template:'<h4>商品编辑</h4>'
    };
    
  2. 创建路由对象含有嵌套路由
    const router = new VueRouter({
            routes:[
                {
                    path:'/product',
                    component:product,
                    children:[
                        {path:'add',component: add},
                        {path:'edit',component: edit},
                    ]
                },
            ]
        });
    
  3. 注册路由对象
    const app = new Vue({
        el: "#app",
        data: {},
        methods: {},
        router,//定义路由对象
    });
    
  4. 测试路由

    <router-link to="/product">商品管理</router-link>
    <router-view></router-view>
    

14. Vue CLI 脚手架

14.1 什么是CLI

命令行界面(英语:command-line interface,缩写:CLI)是在图形用户界面得到普及之前使用最为广泛的用户界面,它通常不支持鼠标,用户通过键盘输入指令,计算机接收到指令后,予以执行。也有人称之为字符用户界面(CUI)

14.2 什么是Vue CLI <====> (maven 项目构建工具)

Vue CLI 是一个基于 Vue.js 进行快速开发的完整系统。 使用Vue 脚手架之后我们开发的页面将是一个完整系统(项目)。 前端系统

14.3 Vue CLI优势

  • 通过 vue-cli 搭建交互式的项目脚手架。
  • 通过 @vue/cli + @vue/cli-service-global 快速开始零配置原型开发
  • 一个运行时依赖 (@vue/cli-service),该依赖:
    • 可升级;
    • 基于 webpack 构建,并带有合理的默认配置; webpack 前端打包工具 index.html vue组件 用户组件 学生组件 … 路由 dist目录
    • 可以通过项目内的配置文件进行配置; cli 项目配置文件 添加
    • 可以通过插件进行扩展。 cli 项目里
  • 一个丰富的官方插件集合,集成了前端生态中最好的工具。 webpack打包工具===>dist目录 nodejs 服务器(tomcat java) 热部署插件 npm包
  • 一套完全图形化的创建和管理 Vue.js 项目的用户界面

14.4 Vue CLI安装

1. 环境准备
# 1.下载nodejs
	http://nodejs.cn/download/
		windows系统:   .msi  安装包(exe)指定安装位置   .zip(压缩包)直接解压缩指定目录
		mac os 系统:   .pkg  安装包格式自动配置环境变量  .tar.gz(压缩包)解压缩安装到指定名

# 2.配置nodejs环境变量
	1.windows系统:
	 	计算上右键属性---->  高级属性 ---->环境变量 添加如下配置:
		NODE_HOME=  nodejs安装目录
        PATH    = xxxx;%NODE_HOME%
    2.macos 系统
    	推荐使用.pkg安装直接配置node环境

# 3.验证nodejs环境是否成功
	node -v 

# 4.npm介绍
	node package mangager   nodejs包管理工具       前端主流技术  npm 进行统一管理
	maven 管理java后端依赖    远程仓库(中心仓库)      阿里云镜像
	npm   管理前端系统依赖     远程仓库(中心仓库)      配置淘宝镜像

# 5.配置淘宝镜像
	  npm config set registry https://registry.npm.taobao.org
	  npm config get registry

# 6.配置npm下载依赖位置
	 windows:
		npm config set cache "D:\nodereps\npm-cache"
		npm config set prefix "D:\nodereps\npm_global"
	 mac os:
	 	npm config set cache "/Users/chenyannan/dev/nodereps"
		npm config set prefix "/Users/chenyannan/dev/nodereps"

# 7.验证nodejs环境配置
	npm config ls
    ; userconfig /Users/chenyannan/.npmrc
    cache = "/Users/chenyannan/dev/nodereps"
    prefix = "/Users/chenyannan/dev/nodereps"
    registry = "https://registry.npm.taobao.org/"

2.安装脚手架
# 0.卸载脚手架
	npm uninstall -g @vue/cli  //卸载3.x版本脚手架
	npm uninstall -g vue-cli  //卸载2.x版本脚手架

# 1.Vue Cli官方网站
	https://cli.vuejs.org/zh/guide/

# 2.安装vue Cli
	npm install -g vue-cli

3.第一个vue脚手架项目
# 1.创建vue脚手架第一个项目
	vue init webpack 项目名
# 2.创建第一个项目
	hello     ------------->项目名
    -build  ------------->用来使用webpack打包使用build依赖  构建一些依赖文件
    -config ------------->用来做整个项目配置目录   主要用来对 开发 测试 环境进行配置
    -node_modules  ------>用来管理项目中使用依赖
    -src					 ------>用来书写vue的源代码[重点]
    	+assets      ------>用来存放静态资源 [重点]
      	components   ------>用来书写Vue组件 [重点]
      	router			 ------>用来配置项目中路由[重点]
      	App.vue      ------>项目中根组件[重点]
      	main.js      ------>项目中主入口[重点]
    -static        ------>其它静态
    -.babelrc      ------> 将es6语法转为es5运行
    -.editorconfig ------> 项目编辑配置
    -.gitignore    ------> git版本控制忽略文件
    -.postcssrc.js ------> 源码相关js
    -index.html    ------> 项目主页
    -package.json  ------> 类似与pom.xml 依赖管理  jquery 不建议手动修改
    -package-lock.json ----> 对package.json加锁
    -README.md         ----> 项目说明文件

# 3.如何运行在项目的根目录中执行
	npm start 运行前端系统

# 4.如何访问项目
	http://localhost:8081    

# 5.Vue Cli中项目开发方式
	 注意: 一切皆组件   一个组件中   js代码  html代码  css样式
	 	1. VueCli开发方式是在项目中开发一个一个组件对应一个业务功能模块,日后可以将多个组件组合到一起形成一个前端系统
	 	2. 日后在使用vue Cli进行开发时不再书写html,编写的是一个个组件(组件后缀.vue结尾的文件),日后打包时vue cli会将组件编译成运行的html文件	  
4.如何开发Vue脚手架

注意:在Vue cli 中一切皆组件


15.在脚手架中使用axios

15.1 安装axios

# 1.安装axios
	npm install axios --save

# 2.配置main.js中引入axios
	import axios from 'axios';
	Vue.prototype.$http=axios;

# 3.使用axios
	在需要发送异步请求的位置:this.$http.get("url").then((res)=>{}) this.$http.post("url").then((res)=>{})

16.Vue Cli脚手架项目部署

# 1.在项目根目录中执行如下命令:
	npm run build
	注意:vue脚手架打包的项目必须在服务器上运行不能直接双击运行

# 2.打包之后当前项目中变化
	在打包之后项目中出现dist目录,dist目录就是vue脚手架项目生产目录或者说是直接部署目录

17.VueX 状态管理

17.1 简介&安装

# 1.简介
- Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化

# 2.安装vuex
-	npm install vuex --save

# 3.创建vue cli中创建store文件夹

在这里插入图片描述

# 4.在stroe中创建index.js文件
import Vue from 'vue'
import Vuex from 'vuex'
//1.安装vuex
Vue.use(Vuex);
//2.创建store对象
const store = new Vuex.Store({
  
});
//3.暴露store对象
export default store;
# 5.在main.js中引入stroe并注册到vue实例
import Vue from 'vue'
import App from './App'
import router from './router'
import store from "./stroe";//引入store
Vue.config.productionTip = false

/* eslint-disable no-new */
new Vue({
  el: '#app',
  router,
  components: { App },
  template: '<App/>',
  store,//注册状态
})

17.2 state属性

# 1.state属性
- 作用: 用来全局定义一些共享的数据状态

# 2.语法
    const store = new Vuex.Store({
    	state:{
    		counter:0,//定义共享状态
    	},
    }

# 3.使用
	 {{$store.state.counter}} ===> {{this.$store.state.counter}}

17.3 mutations 属性

# 1.mutations 属性
- 作用: 用来定义对共享的数据修改的一系列函数

# 2.语法
    const store = new Vuex.Store({
      state:{
        counter:0,//定义共享状态
      },
      mutations:{
        //增加
        increment(state){
          state.counter++
        },
        //减小
        decrement(state){
          state.counter--
        }
      }
    });

# 3.使用
	this.$store.commit('decrement');
	this.$store.commit('increment');

# 4.mutations传递参数

- a.定义带有参数的函数
			mutations:{
     		//addCount 参数1:state 对象 参数2:自定义参数
     		addCount(state,counter){
        	console.log(counter);
        	return  state.counter += counter ;
      	}
    	}
- b.调用时传递参数
		this.$store.commit('addCount',11);

17.4 getters 属性

# 1.getters 属性
- 官方:  允许我们在 store 中定义“getter”(可以认为是 store 的计算属性)。就像计算属性一样,getter 的返回值会根据	
	它的依赖被缓存起来,且只有当它的依赖值发生了改变才会被重新计算。
- 作用: 用来定义对共享的数据的计算相关的一系列函数 相当于 computed 属性 会对结果进行缓存

# 2.语法
	  getters:{
      //平方
      mathSqrts(state){
        console.log("--------");
        return state.counter*state.counter;
      },
      //乘以一个数字
      mathSqrtsNumber(state,getters){
        return getters.mathSqrts*3;
      },
      //传递参数
      mathSqrtsNumbers(state,getters){
        return function (number){
          return  number;
        }
      }
    }

# 3.使用
-		1.{{$store.getters.mathSqrts}}
-   2.{{$store.getters.mathSqrtsNumber}}
-   3.{{$store.getters.mathSqrtsNumbers(3)}}

  码文不易,本篇文章就介绍到这里,如果想要学习更多Java系列知识点击关注博主,博主带你零基础学习Java知识。与此同时,对于日常生活有困扰的朋友,欢迎阅读我的第四栏目:《国学周更—心性养成之路》,学习技术的同时,我们也注重了心性的养成。

在这里插入图片描述

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

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

相关文章

【Spring】— MyBatis配置文件元素

目录 MyBatis配置文件元素properties元素settings元素typeAliases元素typeHandler元素objectFactory元素plugins元素environments元素mappers元素 MyBatis配置文件元素 使用MyBatis框架进行开发&#xff0c;需要创建MyBatis的核心配置文件&#xff0c;该配置文件包含重要的元素…

sqlite数据如何转成mysql数据类型

一、使用工具Navicat Premium 16 1.把db文件拖到Navicat Premium中&#xff0c;选择数据库&#xff0c;点击工具&#xff0c;数据传输 选择下一步 下一步 开始 这样就成功了&#xff0c;生成的sql文件就在你保存的位置了。 二、使用SQLiteStudio转换成mysql文件 1.打开SQLite…

关键字volatile 和信号

volatile是c语言中的一个关键字&#xff0c;在语言层面我们很难理解它&#xff0c;今天从信号角度我们来理解一下。 我们来看下面一段代码&#xff1a; 从代码表面看上去运行逻辑应该是&#xff0c;flag为0时候一直while循环&#xff0c;当有信号2产生进入到信号2的处理函数中…

Java - 集合工具类Collections

文章目录 目录 文章目录 前言 二.collections提供的方法 三. 方法详解 1.addAll:将所有指定元素添加到指定 collection 中。 可变参数 添加方式 二.shuffle()&#xff1a;随机打乱List集合中的元素 三. sort()&#xff1a;对List集合进行排序&#xff1b; 实现compata…

软件测试:提升jemeter报告输出品质,精通动态参数处理技巧并进行组件极致优化

目录 引言 一.测试报告生成 二.动态参数处理 1.正则 2.json提取器 3.JMeter动态参数处理逻辑是什么&#xff1f;【面试必考】 三.jemter常用的组件 四.JMeter是怎么做API自动化测试的&#xff1f; 五.针对一个服务&#xff0c;你怎么测试&#xff1f; 引言 当今互联网…

spring jpa/hibernate 查询缓存导致内存溢出

版本 hibernate-5.6.10 问题 应用运行一段时间后发生堆空间不足内存溢出 根据内存快照可见大量org.hibernate.engine.query.spi.QueryPlanCache对象 原因 QueryPlanCache会缓存sql&#xff0c;以便于相同的sql重复编译 如果大量使用in查询&#xff0c;由于参数数量不同&a…

《程序员面试金典(第6版)》面试题 02.02. 返回倒数第 k 个节点(双指针法,链表)

题目描述 实现一种算法&#xff0c;找出单向链表中倒数第 k 个节点。返回该节点的值。 题目传输门&#xff1a;添加链接描述 示例&#xff1a; 输入&#xff1a; 1->2->3->4->5 和 k 2 输出&#xff1a; 4说明&#xff1a; 给定的 k 保证是有效的。 解题思路与…

Axure教程-横向动态堆叠图(中继器)

本文将教大家如何用AXURE中的中继器动态横向堆叠图 一、效果介绍 如图&#xff1a; 预览地址&#xff1a;https://3ajwd3.axshare.com 下载地址&#xff1a;https://download.csdn.net/download/weixin_43516258/87810612 二、功能介绍 简单填写中继器内容即可生成动态竖向堆…

移动应用测试不可少的技能,使用Appium和Python实现Activity切换

目录 前言&#xff1a; 一、Appium简介 二、切换Activity操作 三、使用 Appium 实现切换 Activity 操作的注意事项 四、结论 前言&#xff1a; App测试自动化是当前移动应用开发测试领域中的热点之一。在应用开发的过程中&#xff0c;切换Activity是一个常见的操作&#x…

网易易盾流量多发反外挂落地实践

背景及目的 环境迁移 反外挂服务建德机房线上迁移&#xff0c;采取的方案是&#xff1a;建德机房独立部署一套完整的集群&#xff0c;统一经由完整的性能测试、故障演练、功能回归后&#xff0c;通过线上分阶段切换流量的方式来切服务。QA 需要比对验证 2 个不同环境下核心接口…

PostgreSQL技术内幕(八)源码分析 ——投影算子和表达式计算

在上期Postgres技术内幕系列直播中&#xff0c;我们为大家介绍了Postgres投影算子和表达式计算实现原理和底层细节。本文根据直播内容整理&#xff0c;作者现任HashData内核研发工程师。 投影 (projection) 关系代数中的一种&#xff0c; 用于从关系R中选出属性包含在A中的列…

简单易懂,一篇文章告诉你什么是云渲染!

随着5G、AI、云计算、云服务等资讯来袭&#xff0c;我们发现云渲染被更多人知晓和关注&#xff0c;通过搜集和调研云渲染业内的相关信息和模式&#xff0c;尽量用简明的方式为大家解答到底 什么是云渲染。 用户将本地任务提交到远程服务器&#xff0c;通过远程的计算机集群资源…

C++ 类和对象(静态的static、友元、内部类、匿名对象、explicit)知识点+完整思维导图+实操图+深入细节通俗易懂建议收藏

绪论 时间的步伐有三种&#xff1a;未来姗姗来迟&#xff0c;现在像箭一样飞逝&#xff0c;过往永远静立不动。本章是类和对象的一个收尾篇&#xff0c;相信通过这三篇类和对象的学习&#xff0c;应该你已经更加清楚了解了C的类和对象。 话不多说安全带系好&#xff0c;发车啦&…

耗时162天,从华为外包5k转岗正式员工15k,经历的心酸只有自己知道····

一提及外包测试&#xff0c;大部分人的第一印象就是&#xff1a;工作强度大&#xff0c;技术含量低&#xff0c;没有归属感&#xff01; 本人毕业于某普通二本院校非计算机专业&#xff0c;跨专业入行测试&#xff0c;至今有近 5年工作经验。 第一份测试工作是在华为做了两年外…

【LCM】LCM通讯入门

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍LCM的通讯。 学其所用&#xff0c;用其所学。——梁启超 欢迎来到我的博客&#xff0c;一起学习知识&#xff0c;共同进步。 &#x1f95e;喜欢的朋友可以关注一下&#xff0c;下次更新…

Linux-初学者系列6_kvm虚拟机

速通配置kvm虚拟机 通过虚拟化技术将一台计算机虚拟为多台逻辑计算机。 在一台计算机上同时运行多个逻辑计算机&#xff0c;每个逻辑计算机可以运行不同的操作系统&#xff0c;并且应用程序都可以在相互独立的空间内运行互不影响&#xff0c;提高计算机的工作效率。 一、 配置…

真题详解(include)-软件设计(八十二)

真题详解&#xff08;快速排序&#xff09;-软件设计&#xff08;八十一)https://blog.csdn.net/ke1ying/article/details/130806047 generalliza&#xff08;泛化&#xff09;&#xff1a;泛化是一种继承关系&#xff0c;子类将继承基类所有行为&#xff0c;关系和通信&#…

章节2:Burp Suite配置启动

章节2&#xff1a;Burp Suite配置启动 01 Burp Suite程序下载 程序下载 Burp Suite jar包JDK&#xff0c;JDK包含JRE&#xff08;Java运行时环境&#xff09;激活jar包汉化jar包 Burp jar包 推荐2021&#xff0c;jar包版本 https://portswigger.net/burp/releases JRE环…

带你手撕链式二叉树—【C语言】

前言&#xff1a; 普通二叉树的增删查改没有意义&#xff1f;那我们为什么要先学习普通二叉树呢&#xff1f; 给出以下两点理由&#xff1a; 1.为后面学习更加复杂的二叉树打基础。&#xff08;搜索二叉树、ALV树、红黑树、B树系列—多叉平衡搜索树&#xff09; 2.有很多二叉树…

【C++进阶之路】模板

前言 假如需要你写一个交换函数&#xff0c;交换两个相同类型的值&#xff0c;这时如果交换的是int 类型的值&#xff0c;你可能会写一个Swap函数&#xff0c;其中参数是两个int类型的&#xff0c;假如再让你写一个double类型的呢&#xff1f;你可能又要写一个Swap的函数重载&…