前端入门之VUE--基础与核心

news2024/11/28 23:40:23

前言

  • VUE是前端用的最多的框架;
  • 这篇文章是本人大一上学习前端的笔记;
  • 欢迎点赞 + 收藏 + 关注,本人将会持续更新。

Vue学习笔记

用于构建用户界面的渐进式框架

  • 构建用户界面:基于数据动态渲染页面
  • 渐进式:循序渐近的学习
  • 框架:一套完整项目解决方案

1、Vue核心

1.1、vue实例配置对象
选项说明
dataVue实例数据对象
methods定义Vue实例中的方法
components定义子组件
computed计算属性
filter过滤器
el唯一跟标签
watch监听数据变化
1.2、初始Vue
  • 想让Vue工作,就必须创建一个Vue实例,并且要传入一个配置对象
  • root容器里的代码依然符合html规范
  • Vue模板:root容器中的代码
  • {{xxxx}}中的xxx表达式要写js表达式
  • 实际开发中只有一个Vue实例
<-->引入Vue</-->
<script src=""></script>

<body>
    <-->准备好一个容器</-->
    <div id="root">
        <h2>
            hello! {{name}}
        </h2>
    </div>
    
    <script>
    var vm = new Vue({
        el: '#root',           //唯一标签
        data: {
            name: 'wy'         //data储存数据
        }
    })
    </script>
</body>
1.3、模板语法
<script src="vue.js文件地址"></script>

<body>
    <div id="root">
        <h1>
            插值语法
        </h1>
        <h3>
            hello {{name}}
        </h3>
        <h1>
            指令语法
        </h1>
			<a v-bind:href="ur1">邓紫棋</a>
        <-->b-vind:  的简写形式  :href</-->
    </div>
</body>

总结

  1. 插值语法:

    • 用于解析标签内容
  2. 指令语法:

    • 功能:用于解析标签(包括:标签属性、标签体内容、绑定事件……)
    • :hrefv-bind:href的简写形式
    • 备注:Vue中的很多指令都是v-???形式
1.4、数据绑定
<script src=""></script>

<body>
    <div id="root">
        单项数据绑定:<input type="text" v-bind:value="name">
        双向数据绑定:<input type="text" v-bind:value="name">
    </div>
    
    <script>
        const vm = new Vue({
            el: '#root',
            data: {
                name: 'wqy'
            }
        })
    </script>
</body>

总结

  • Vue的2种数据绑定
    1. 单项数据绑定(v-bind): 数据只能从data流向页面
    2. 双向数据绑定(v-model):数据既可以从data流向页面,还可以从页面流向data
  • 技巧
    1. 双向绑定都应用在表单类元素上,(如: \ 等)
    2. v-model:value简写成v-model
1.5、el和data的两种写法
<script>
    const vm = new Vue({
        //1.
        el: '#root',
        data: {
            
        }
        //data的第二种写法
        data() {
        
    }
        
        
    })
    
    //el的第二种写法
    vm.$mount('#root')
</script>

总结;

  • data有两种写法:
    1. 对象式
    2. 函数式

注意:Vue管理的函数,一定不要写出箭头函数,否则this就不再是Vue实例了

1.6、MVVM模型

在这里插入图片描述

总结:

  • data中所有属性,最后都出现在vm
1.8、事件处理
1.8.1、事件的基本用法
<script src=""></script>

<body>
    <div id="root">
        <h2>
            hello , {{name}}
        </h2>
        <boutton v-on:click="showIndo1">点我提升信息一               </boutton>
        <button @click='showIno2(66)'>
            点我提示信息二
        </button>
    </div>
    
    <script>
        const vm = new Vue({
            el: '#root',
            data: {
                name: 'wy'
            }
            methods: {
            showIno1(event) {
            console.log(event);
        }
        	showIno2(num) {
                console.log(num);
            }
        }
        })
    </script>
</body>

总结:

  1. 使用v-on:xxx或者**@xxx**绑定事件,其中xxx是事件名
  2. 事件的回调需要配置在methods对象中,最总会出现在vm上
  3. methods中配置函数,不要使用箭头函数
  4. methods中配置的函数,都是被Vue所管理的函数,this指向是vm或者实例化对象
  5. @click="demo@click="demo($event)"效果一致,但后者可以传参
1.8.2、事件修饰符
  • prevent:阻止默认事件(常用)
  • stop:阻止事件冒泡(常用)
  • once:事件只触发一次(常用)
  • capture:使用事件捕获(执行顺序是有外部到内部 P31页)
  • self: 只有event.target是当前操作的元素时才触发事件,简单理解:只触发自己本身的元素
  • passive: 事件的默认行为为立即执行函数

技巧:修饰符可以连续写: @click.prevent.stop=“show”

1.8.3、键盘事件
<script  src=""></script>

<body>
    <div id="root">
        <input type="text" @keydow.enter="show">
    </div>
    
    <body>
        const vm = new Vue({
        el: '#root',
        methods: {
        show(e) {
        console.log(e.target.value)
        }
        }
        })
    </body>
</body>

总结

键盘上的每个按键都有自己的名称和编码,例如:Enter(13)。而Vue还对一些常用按键起了别名方便使用

Vue中常用的按键名

  • 回车:enter
  • 删除:delete
  • 退出:src
  • 换行: tab(必须结合keydown使用)
  • 上:up
  • 下:down
  • 左:left
  • 右:right

注意

  • 系统修饰符:ctrl shifr alt
    • 配合keyup使用:按下修饰键的同时,再按下其他键,随后释放其他键,事件才被触发
    • 配合keydown使用:正常触发事件
  • Vue.config.keyCodes.自定义键名 = 键码,可以自定义键别名
1.9、计算属性
<script src=""></script>

<body>
    <div id="root">
        姓:<input type="text" v-model="firstName"><br>
        名: <input tyep="text" v-model="lastName"><br>
        姓名:<span>{{fullName}}</span>
    </div>
    
    <script>
        const vm = new Vue({
            el: '#root',
            data: {
                firstName: '张',
                lastName: '三'
            },
            computed: {
                fullName: {
                    get() {
                     return this.firstName + '-' +lastName
                    }
                    set(vaule) {
                	const arr = value.split('-'),
            		this.firstName = arr[0];
                	this.lastName = arr[1]
            		}
                }
            }
        })
    </script>
</body>

总结:

  • 计算属性:
    • 定义:要用的属性不存在,需要计算的来
    • 原理:Object.defineProperty()
    • get函数(重要):
      1. 当初读取时会执行一次
      2. 依赖数据改变时会再次调用
  • 备注:
    • 计算属性最后会出现在vm上
    • 如果计算属性要被修改,那必须写set函数去响应修改,且set中要引起计算时依赖的数据发送改变
    • 如果计算属性不发生修改,简写形式为:
<script>
    new Vue({
        el: '#root',
        data: {
            firstName: '张',
            lastName: '三'
        },
        computed: {
            fullName() [
                return this.firstName + '-' + this.lastName
            ]
        }
    })
</script>
1.10、监视属性
1.10.1、监视属性的基本用法
<body>
    <div id="root">
        <h2>
            今天天气好{{info}}
        </h2>
        <button @click="changeWeather">
            点击切换天气
        </button>
    </div>
    
    <script>
        new Vue({
            el: '#root',
            data: {
                isHot: true,
            },
            computed: {
                info() {
                    return this.isHot ? '炎热''凉爽'
                }
            },
             methods: {
                changeWeather() {
           			this.isHot = !this.isHot
        }
			},
             watch: {
               isHot: {
                immdiate: true,  //初始化时让handler调用一下
                //当isHot改变时会调用
                handler(newVaule,oldValue) {
            	console.log(newValue,oldValue)
        }
                } 
		}
        })
    </script>
</body>

总结:

  1. 当监视的属性被变化时,回调函数自动调用,进行相关操作
  2. 监视的属性必须存在,才能进行监视
  3. 两种写法:
    1. 同上
    2. 同下:
vm.$watch('isHot',{
	immediate:true,
	handler(newValue,oldValue){
		console.log('isHot被修改了',newValue,oldValue)
	}
})

1.10.2、深度监视
  • 深度监视:
    1. Vue中的watch默认不监视对象内部的值
    2. 改变:deep: true
<body>
    <div id="root">
        <h3>
            a的值为:{{number.a}}
        </h3>
        <-->简单的代码可以这样操作</-->
        <button @click="number.a++">
            点我a加 1 
        </button
        <h3>
            b的值为:{{number.b}}
        </h3>
        <button @click="number.b++">
            点我b加 1
        </button>
    </div>
    <script>
       const vm = new Vue({
           el: '#root',
           data: {
               number: {
                   a:1,
                   b:2,
               }
           },
           watch: {
              number: {
               deep: true,
               handler() {
                   console.log('number改变了')
               }
              }
           }
       })
    </script>
</body>
1.10.4、监听属性 vs 计算属性
  • computed和watch之间的区别:
    • computed可以完成的东西,watch都可以完成
    • 但是watch可以完成的东西,computed不一定能完成,如:watch可以进行异步操作
  • 两个重要原则
    1. 所有被Vue管理的函数,最好写出普通函数
    2. 不被Vue管理的函数,最好写出箭头函数,如:计算器

使用计算属性:

<body>
    <div id="root">
        姓:<input type='text' v-model='firstName'>
        名:<input type='text' v-model='lastName' >
        姓名:{{fullname}}
    </div>
    
    <script>
        const vm = new Vue({
            el: '#root',
            data: {
                firstName = '张',
                lastName = '三'
            },
            conputed: {
            fullName: {
            get() {
                return this.firstName + this.lastName;
            }
            set(value) {
                let arr = fullName.split('-');
            	this.firstName = arr[0];
                this.lastName = arr[1];
			}
        }
        },
        })
    </script>
</body>

使用监视属性:

<script>
    new Vue({
        el: '#root',
        data: {
            firstName: '张',
            lastName: '三',
            fullName: '张-三'
        },
        watch: {
        firstName: {
        handler(val) {
        setTimeout(()=>{
            this.fullName = val + '-' + lastName;
        },1000)
        },
        lastName: {
         handler(val) {
             this.fullName = this.firstName + '-' + val;
         }
        }
    }
    }
    })
</script>
1.11、绑定样式

写法

<body>
    <div id="root">
        绑定class样式--字符串写法,通用于类名不确定,需要动态指定
        <div class="basic" :class="mood"' @click="changeMood"></div><br>
        绑定class样式--数组写法,适用于:要绑定的样式个数不确定,
        <div class="basic" :class="classArr"></div><br>
        绑定class样式---对象写法,适用于:要绑定的样式个数不确定、名字确定
        <div class="basic" :class="classObj"></div><br>
         
         绑定style样式--对象写法 
        <div class="basic" :style="styleObj"></div><br>
        绑定style样式--数组写法 
        <div class="basic" :style="styleArr"></div><br>
    </div>
</body>

总结:

  1. class样式:

    • 写法:class="xxx",xxx可以是字符串、对象、数组
    • 字符串写法适用于:类名不确定,要动态获取
    • 对象写法适用于:要绑定多个样式,个数不确定,名字也不确定
    • 数组写法适用于:要绑定多个样式,个数确定,名字也确定,但不确定用不用
  2. style样式:

    • :style="{fontSize: xxx}"其中xxx是动态值
    • :style="[a,b]"其中a、b是样式对象
1.12、条件渲染
  1. v-if:
    • 写法:
      1. v-if
      2. v-else-if
      3. v-else
  2. v-show:
    • 写法:
      • v-show=“表达式”
<body>
    <div id="root">
        <h2 v-show="true">
            hello
        </h2>
        
        <div v-if="2===1"></div> <br>
        <div v-else-if="3===1"></div> <br>
        <div v-else></div> 
    </div>
</body>
1.13、列表渲染
1.13.1、基本列表

v-for

<body>
		<div id="root">
			<h2>人员列表(遍历数组)</h2>
			<ul>
				<li v-for="(p,index) in persons" :key="index">
					{{p.name}}-{{p.age}}
				</li>
			</ul>

			<h2>汽车信息(遍历对象)</h2>
			<ul>
				<li v-for="(value,k) in car" :key="k">
					{{k}}-{{value}}
				</li>
			</ul>

			<h2>遍历字符串</h2>
			<ul>
				<li v-for="(char,index) in str" :key="index">
					{{char}}-{{index}}
				</li>
			</ul>
			
			<h2>遍历指定次数</h2>
			<ul>
				<li v-for="(number,index) in 5" :key="index">
					{{index}}-{{number}}
				</li>
			</ul>
		</div>

		<script type="text/javascript">
			Vue.config.productionTip = false
			
			new Vue({
				el:'#root',
				data:{
					persons:[
						{id:'001',name:'张三',age:18},
						{id:'002',name:'李四',age:19},
						{id:'003',name:'王五',age:20}
					],
					car:{
						name:'奥迪A8',
						price:'70万',
						color:'黑色'
					},
					str:'hello'
				}
			})
		</script>
    </body>
</html>

总结:

v-for指令:

  1. 用于展示列表数据
  2. 语法:
  3. ,key既可以是index,也可以是遍历数组的唯一标识
  4. 可遍历:数组、对象、字符串、指定次数
1.13.2、key的作用与原理

在这里插入图片描述

在这里插入图片描述

<body>
		<div id="root">
			<h2>人员列表</h2>
			<button @click.once="add">添加老刘</button>
			<ul>
				<li v-for="(p,index) in persons" :key="index">
					{{p.name}} - {{p.age}}
					<input type="text">
				</li>
			</ul>
		</div>

		<script type="text/javascript">
			Vue.config.productionTip = false
			
			new Vue({
				el:'#root',
				data:{
					persons:[
						{id:'001',name:'张三',age:18},
						{id:'002',name:'李四',age:19},
						{id:'003',name:'王五',age:20}
					]
				},
				methods: {
					add(){
						const p = {id:'004',name:'老刘',age:40}
						this.persons.unshift(p)
					}
				},
			})
		</script>
</html>

1.13.3、列表过滤
<body>
    <div id="root">
        <h2>
            人员列表
        </h2>
        <input type="text" v-model="keyWord">
        <ul>
            <li v-for="(p,index) of filPersons" :key="index"></li>
            {{p.name}} - {{p.age}} - {{p.sex}}
        </ul>
    </div>
    
    <script>
        new Vue({
            el: '#root',
            data: {
                keyWord: '',
                persons: [
                    {id:'001',name:'马冬梅',age:19,sex:'女'},
					{id:'002',name:'周冬雨',age:20,sex:'女'},
					{id:'003',name:'周杰伦',age:21,sex:'男'},
					{id:'004',name:'温兆伦',age:22,sex:'男'}
                ]
            },
            computed: {
                filPersons() {
                    return this.person.filter((p) => {
                        return                    p.name.indexOf(this.keyWord) !== -1;
                    }
                }
            }
        })
    </script>
</body>
注意:在Vue修改数组请用下面方法:
  • 使用这些API:**push() \ pop() \ shift() \ splice() \ sort() \ reserse() **,这些才会更新,用[]不会,但是vue3可以
1.15、过滤器
  • 定义:对要显示的数据进行特定格式化处理后再显示
  • 语法:
    1. 注册过滤器:Vue.filter(name,callback)new Vue{filters:{}}
    2. 使用过滤器:{{ xxx | 过滤器名}}v-bind:属性 = "xxx | 过滤器名"

具体使用请看视频

1.16、内置指令
v-model双向数据绑定
v-on监听事件
v-bind单项数据绑定
v-text插入文本内容
v-html插入包含html的文本内容
v-for列表渲染
v-if条件渲染
v-show显示隐藏
v-text:
  1. v-text会替换掉节点中的内容,但是{{xx}}则不会
v-html:(有安全隐患)
  1. v-html会替换掉节点中所有的内容,但是{{xx}}则不会
  2. v-html可以识别html结构
v-clock指令
  • 没有值

    {{name}}

  • 配合css解决配速慢的问题
  • 一个特殊值,Vue实例创建完毕后,会删掉v-clock
v-once指令
  1. v-所在节点在初次渲染后,就视为静态内容
<div id="root">
    <h2 v-once>
        n的值为{{n}}
    </h2>
    <h2>
        n现在的值为{{n}}
    </h2>
    <button @click="n++">
        点我n+1
    </button>
</div>
v-pre
  • 可利用它跳过:没有使用指令语法、没有使用插值语法的节点,会加快编译

  • Vue其实很简单

1.17、自定义指令
  • 局部指令:

    <script>
        new Vue({
            directives: {指令名:配置对象}
        })
    </script>
    
    <script>
        new Vue({
            directives: {指令名:回调函数}
        })
    </script>
    
  • 全部指令:

    1. Vue.directive(指令名,配置对象)
    2. Vue.directive(指令名,回调函数)
<script>
    Vue.directive('find'{
    //指令与元素一上来就绑定成功
    bind(element,binding){
        element.value = bind.value
    },
    //指令所在元素被插入页面时
     inserted(element,binding){
         element.focus()
     }
    //指令所在的模板被重新加载时
    update(element,binding) {
        element.value = binding.value
    }
    
                  })
</script>
  • 配置对象中常用的3个回调函数
    1. bind(element,binding):指令与元素成功绑定时调用
    2. inserted(element,binding):指令所在元素被插入页面时调用
    3. update(element,binding):指令所在模板结构被重新解析时调用
  • 注意:
    • 指令名如果是多个单词,要使用kebab-case命名方式,不要用camelCase命名
1.18、生命周期

在这里插入图片描述

总结:

常用生命周期钩子:

  1. mounted:发送ajax请求、启动定时器、绑定自定义事件、订阅消息等初始化操作
  2. beforeDestroy:清除定时器、解绑自定义事件、取消订阅消息等收尾工作

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

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

相关文章

java基础知识(常用类)

目录 一、包装类(Wrapper) (1)包装类与基本数据的转换 (2)包装类与String类型的转换 (3)Integer类和Character类常用的方法 二、String类 (1)String类介绍 1)String 对象用于保存字符串,也就是一组字符序列 2)字符串常量对象是用双引号括起的字符序列。例如:&quo…

嵌入式驱动开发详解2(设备挂载问题)

文章目录 前言设备号设备号的组成设备号的分配静态分配动态分配 驱动挂载与卸载设备节点创建驱动挂载出现问题 前言 驱动的设备挂载和卸载是十分重要的内容&#xff0c;一旦操作不当可能会导致系统崩溃&#xff0c;接下来我将用字符设备的驱动挂载原理进行详细讲解&#xff0c…

谈谈微服务的常用组件

由于微服务给系统开发带来了一些问题和挑战&#xff0c;如服务调用的复杂性、分布式事务的处理、服务的动态管理等&#xff0c;为了更好地解决这些问题和挑战&#xff0c;各种微服务治理的组件应运而生&#xff0c;充当微服务架构的基石和支撑&#xff0c;常用组件如下表&#…

【数字图像处理+MATLAB】通过迭代全局阈值处理算法(Iterative Global Algorithm)实现图像分割

引言 图像分割是将数字图像划分为多个区域&#xff08;或像素的集合&#xff09;的过程&#xff0c;这些区域通常对应于真实世界的物体或图像中的特定部分。图像分割的目标是简化或改变图像的表示形式&#xff0c;使得图像更容易理解和分析。图像分割通常用于定位图像中的物体…

【三维生成】Edify 3D:可扩展的高质量的3D资产生成(英伟达)

标题&#xff1a;Edify 3D: Scalable High-Quality 3D Asset Generation 项目&#xff1a;https://research.nvidia.com/labs/dir/edify-3d demo&#xff1a;https://build.nvidia.com/Shutterstock/edify-3d 文章目录 摘要一、前言二、多视图扩散模型2.1.消融研究 三、重建模型…

在SQLyog中导入和导出数据库

导入 假如我要导入一个xxx.sql&#xff0c;我就先创建一个叫做xxx的数据库。 然后右键点击导入、执行SQL脚本 选择要导入的数据库文件的位置&#xff0c;点击执行即可 注意&#xff1a; 导入之后记得刷新一下导出 选择你要导出的数据库 右键选择&#xff1a;备份/导出、…

HDR视频技术之三:色度学与颜色空间

HDR 技术的第二个理论基础是色度学。从前面的内容中可以了解到&#xff0c;光学以及人类视觉感知模型为人类提供了解释与分析人类感知亮度的理论基础&#xff0c;但是 HDR 技术不仅仅关注于提升图像与视频的亮度范围&#xff0c;同时也关注于提供更加丰富的色彩。因此&#xff…

通信与网络安全之IPSEC

IPSec&#xff08;IP Security&#xff09;是IETF制定的为保证在Internet上传送数据的安全保密性能的三层隧道加密协议。IPSec在网络层对IP报文提供安全服务。IPSec协议本身定义了如何在IP数据包中增加字段来保证IP包的完整性、 私有性和真实性&#xff0c;以及如何加密数据包。…

Redis的管道操作

在现代应用程序中&#xff0c;Redis作为一种高性能的内存数据库&#xff0c;被广泛用于缓存、消息队列、实时分析等场景。为了进一步提高Redis的性能&#xff0c;Redis提供了管道&#xff08;Pipeline&#xff09;操作&#xff0c;允许客户端将多个命令一次性发送到服务器&…

67 mysql 的 间隙锁

前言 我们这里主要是 来看一下 mysql 中的 间隙锁 间隙锁 主要存在的地方一般就是在 查询主键查询不到, 索引查询查询不到 的场景 然后 我们这里来调试一下 这里的整个流程, 间隙锁的加锁 以及 间隙锁的使用, 以及 间隙锁的释放 从逻辑上来说 间隙锁 锁定的是一个区间, 按照…

小米PC电脑手机互联互通,小米妙享,小米电脑管家,老款小米笔记本怎么使用,其他品牌笔记本怎么使用,一分钟教会你

说在前面 之前我们体验过妙享中心&#xff0c;里面就有互联互通的全部能力&#xff0c;现在有了小米电脑管家&#xff0c;老款的笔记本竟然用不了&#xff0c;也可以理解&#xff0c;毕竟老款笔记本做系统研发的时候没有预留适配的文件补丁&#xff0c;至于其他品牌的winPC小米…

Apache Zeppelin:一个基于Web的大数据可视化分析平台

今天给大家推荐一下 Apache Zeppelin&#xff0c;它是一个基于 Web 的交互式数据接入、数据分析、数据可视化以及协作文档 Notebook&#xff0c;类似于 Jupyter Notebook。 Apache Zeppelin 支持使用 SQL、Java、Scala、Python、R 等编程语言进行数据处理和分析&#xff0c;同时…

彻底理解如何保证ElasticSearch和数据库数据一致性问题

一.业务场景举例 需求&#xff1a; 一个卖房业务&#xff0c;双十一前一天&#xff0c;维护楼盘的运营人员突然接到合作开发商的通知&#xff0c;需要上线一批热门的楼盘列表&#xff0c;上传完成后&#xff0c;C端小程序支持按楼盘的名称、户型、面积等产品属性全模糊搜索热门…

EasyExcel: 结合springboot实现表格导出入(单/多sheet), 全字段校验,批次等操作(全)

全文目录,一步到位 1.前言简介1.1 链接传送门1.1.1 easyExcel传送门 2. Excel表格导入过程2.1 easyExcel的使用准备工作2.1.1 导入maven依赖2.1.2 建立一个util包2.1.3 ExcelUtils统一功能封装(单/多sheet导入)2.1.4 ExcelDataListener数据监听器2.1.5 ResponseHelper响应值处理…

前端实用知识-用express搭建本地服务器

目录 一、为什么会有这篇文章&#xff1f; 二、使用前的准备-如环境、工具 三、如何使用&#xff1f;-express常用知识点 四、代码演示-配合截图&#xff0c;简单易懂 一、为什么会有这篇文章&#xff1f; 在日常前端开发中&#xff0c;我们离不开数据&#xff0c;可能是用…

Redis(概念、IO模型、多路选择算法、安装和启停)

一、概念 关系型数据库是典型的行存储数据库&#xff0c;存在的问题是&#xff0c;按行存储的数据在物理层面占用的是连续存储空间&#xff0c;不适合海量数据存储。 Redis在生产中使用的最多的是用作数据缓存。 服务器先在缓存中查询数据&#xff0c;查到则返回&#xff0c;…

C#基础控制台程序

11.有一个54的矩阵&#xff0c;要求编程序求出其中值最大的那个元素的值&#xff0c;以及其所在的行号和列号。 12.从键盘输入一行字符&#xff0c;统计其中有多少个单词&#xff0c;单词之间用空格分隔开。 13.输入一个数&#xff0c;判断它是奇数还是偶数&#xff0c;如果…

Flink开发入门简单案例--统计实时流订单

Flink开发入门简单案例 0.简介1.订单数据生成器1.1 新建工程TestFlink1.2 在pom.xml中引入Flink依赖包1.3 订单数据生成类订单类&#xff08;Item&#xff09;订单生成数据流类测试订单生成类 2.订单统计2.1 仅统计订单中商品的件数 2.2 同时统计商品数量和金额 0.简介 本案例…

AI前景分析展望——GPTo1 SoraAI

引言 人工智能&#xff08;AI&#xff09;领域的飞速发展已不仅仅局限于学术研究&#xff0c;它已渗透到各个行业&#xff0c;影响着从生产制造到创意产业的方方面面。在这场技术革新的浪潮中&#xff0c;一些领先的AI模型&#xff0c;像Sora和OpenAI的O1&#xff0c;凭借其强大…

PAT1085 Perfect Sequence(25)

//判断是否是连续的数 //判断是否只能第一个数是最小值 #include <cstdio> #include <algorithm> typedef long long ll; using namespace std; int n,p; const int maxn 100010; int arr[maxn];int binary(int l, int r, ll tgt){if(arr[n-1] < tgt) return n…