当前位置: 首页 > news >正文

Hadoop MapReduce 图文代码讲解

一、MapReduce原理

首先要了解一下MapReduce的几个过程,每个数据集中需要编写的逻辑会有所不同,但是大致是差不多的

1、MapReduce大致为这几个过程:

1、读取数据集并根据文件大小128MB拆分成多个map同时进行下面步骤
2、Map: 匹配和数据筛选: Map输入(MI)+ Map输出(MO)
3、Shuffle&Sort:洗牌排序阶段,Hadoop自带的方便后续合并
4、Reduce: 合并和数据处理: Reduce输入(RI)+ Reduce输出(RO)

在整个MapReduce过程中数据以键值对形式保存传输

MI阶段:会将数据集输入并且转成偏移量和行的关系
MO阶段:会将MI的键值对里有用的数据转成键值对关系,这里是需要写代码写逻辑
RI阶段:会将MO的数据合并
RO阶段:会将RI阶段数据进行逻辑算法处理,这里是需要写代码写逻辑

二、MapReduce单词计数例子

1、图文解析
a) 首先,在自己电脑D盘创一个文本文件WordCount.txt,内容为:
Hadoop,Hbase,Java,Linux,MySQL,Flume,Kafka,Sqoop
Hadoop,Hbase,Java,Linux
Linux,MySQL,Flume,Kafka,Sqoop
Java,Linux,MySQL,Flume
Hbase,Java,Linux,MySQL,Flume,Kafka,Sqoop
Hbase,Java,Linux,MySQL
Kafka,Sqoop

在这里插入图片描述
现在,要求实现计算不同的单词出现了几次

b) 实现过程

1、MI阶段:会将数据集输入并且转成偏移量和行的关系
在这里插入图片描述
2、MO阶段:会将MI的键值对里有用的数据转成键值对关系,这里是需要写代码写逻辑,在这里我们要实现单词计数,有用的东西就是单词本身以及个数,k1是没用的,所以在这个阶段需要把v1的字符串按照分隔符拆成数组,把单词通过数组循环取出来当作k2,并且把每一个单词赋值数量为1当作v2
在这里插入图片描述
3、Shuffle&Sort阶段:洗牌排序
在这里插入图片描述
4、RI阶段:会将MO的数据合并
在这里插入图片描述
5、RO阶段:会将RI阶段数据进行逻辑算法处理,这里是需要写代码写逻辑,此例子需要计数,所以把v3数据相加,k3直接转k4
在这里插入图片描述

2、代码解析

现在图文理解了来看看代码的过程
一共要写三坨代码,Map的,Reduce的以及Driver提交程序
在这里插入图片描述
在写代码之前要了解Hadoop代码中数据类型有变化,,String对应Text,其他类型全部加上后缀Writeable,例如java中如果是int类型,MapReduce中写代码对应就是IntWriteable,为啥不一样呢,因为hadoop分布式中数据会跨电脑传输处理,会涉及到互联网带宽之类的,普通java没发传,不安全,而hadoop类型传输时可以序列化反序列化(加密解密)

a、Map部分:
1)首先先了解下别人写的代码的规则使用方式:

Map代码中:

1、要继承Mapper
在这里插入图片描述
2、要重写map方法实现k2,v2的逻辑
在这里插入图片描述
Reduce代码中:

3、要继承Reducer
在这里插入图片描述
4、要重写reduce方法实现k4,v4的逻辑
在这里插入图片描述

2)可以开始写自己的代码啦:

1、创一个maven项目,把pom依赖弄好

在这里插入图片描述

    <dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-client</artifactId><version>3.3.0</version></dependency>

2、新建一个类,我这取名WordCount

在这里插入图片描述
3、引入的依赖包内容为

import java.io.File;
import java.io.IOException;
import org.apache.commons.io.FileUtils;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.input.TextInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;

4、Map部分,结合上面的图片解析模块和代码编写规则理解

在这里插入图片描述

//创建map类取名wordcountmapper并继承Mapperpublic static class wordcountmapper extends Mapper<LongWritable, Text, Text, IntWritable> {//重写map方法并写需要的业务逻辑protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {//把v1行数据转成字符串提出来到line变量里String line = value.toString();//把line的字符串按照我们文件是逗号进行分割,然后存储到字符串数组strings里面String[] strings = line.split(",");//通过for循环把数组里面的单词一个一个循环拿出来放到str变量里for (String str : strings) {//循环时把str单词存为k2,并赋值1作为v2context.write(new Text(str), new IntWritable(1));}}

5、Reduce部分,结合上面的图片解析模块和代码编写规则理解

在这里插入图片描述

    //创建类取名wordcountreducer并继承Reducerpublic static class wordcountreducer extends Reducer<Text, IntWritable, Text, IntWritable> {//重写reduce方法并写需要的业务逻辑protected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {//设置一个变量用于计数,初始为0int sum=0;//将v3的数组的值进行循环相加for(IntWritable v:values){//最终得到计数的值sum=sum+v.get();}//将k3直接转成k4,将sum作为v4context.write(key,new IntWritable(sum));}}

6、主函数实现代码运行

在这里插入图片描述

public static void main(String[] args) throws Exception {Job job = Job.getInstance(); //Job类job对象实体化job.setMapperClass(wordcountmapper.class);//job对象的setMapperClass方法指定map是哪个类job.setMapOutputKeyClass(Text.class);//job对象的setMapOutputKeyClass方法指定k2类型job.setMapOutputValueClass(IntWritable.class);//job对象的setMapOutputValueClass方法指定v2类型job.setReducerClass(wordcountreducer.class);//job对象的setReducerClass方法指定reduce是哪个类job.setMapOutputKeyClass(Text.class);//job对象的setMapOutputKeyClass指定k4类型job.setMapOutputValueClass(IntWritable.class);//job对象的setMapOutputValueClass指定v4类型FileUtils.deleteDirectory(new File("d:\\mapreduce"));//若k4v4结果输出文件夹存在则删了再创建FileInputFormat.setInputPaths(job, new Path("d:\\WordCount.txt"));//数据集文件在哪个路径FileOutputFormat.setOutputPath(job, new Path("d:\\mapreduce\\"));//结果保存到哪个路径boolean completion = job.waitForCompletion(true);if (completion) {System.out.println("成功,请去指定文件夹查看结果文件");} else {System.out.println("失败");}}

附上整个完整代码:

import java.io.File;
import java.io.IOException;
import org.apache.commons.io.FileUtils;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.input.TextInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;public class WordCount {//创建类取名wordcountmapper并继承Mapperpublic static class wordcountmapper extends Mapper<LongWritable, Text, Text, IntWritable> {//重写map方法并写需要的业务逻辑protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {//把v1行数据转成字符串提出来到line变量里String line = value.toString();//把line的字符串按照我们文件是逗号进行分割,然后存储到字符串数组strings里面String[] strings = line.split(",");//通过for循环把数组里面的单词一个一个循环拿出来放到str变量里for (String str : strings) {//循环时把str单词存为k2,并赋值1作为v2context.write(new Text(str), new IntWritable(1));}}}//创建类取名wordcountreducer并继承Reducerpublic static class wordcountreducer extends Reducer<Text, IntWritable, Text, IntWritable> {//重写reduce方法并写需要的业务逻辑protected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {//设置一个变量用于计数,初始为0int sum=0;//将v3的数组的值进行循环相加for(IntWritable v:values){//最终得到计数的值sum=sum+v.get();}//将k3直接转成k4,将sum作为v4context.write(key,new IntWritable(sum));}}public static void main(String[] args) throws Exception {Job job = Job.getInstance(); //Job类job对象实体化job.setMapperClass(wordcountmapper.class);//job对象的setMapperClass方法指定map是哪个类job.setMapOutputKeyClass(Text.class);//job对象的setMapOutputKeyClass方法指定k2类型job.setMapOutputValueClass(IntWritable.class);//job对象的setMapOutputValueClass方法指定v2类型job.setReducerClass(wordcountreducer.class);//job对象的setReducerClass方法指定reduce是哪个类job.setMapOutputKeyClass(Text.class);//job对象的setMapOutputKeyClass指定k4类型job.setMapOutputValueClass(IntWritable.class);//job对象的setMapOutputValueClass指定v4类型FileUtils.deleteDirectory(new File("d:\\mapreduce"));//若k4v4结果输出文件夹存在则删了再创建FileInputFormat.setInputPaths(job, new Path("d:\\WordCount.txt"));//数据集文件在哪个路径FileOutputFormat.setOutputPath(job, new Path("d:\\mapreduce\\"));//结果保存到哪个路径boolean completion = job.waitForCompletion(true);if (completion) {System.out.println("成功,请去指定文件夹查看结果文件");} else {System.out.println("失败");}}}

相关文章:

Hadoop MapReduce 图文代码讲解

一、MapReduce原理 首先要了解一下MapReduce的几个过程&#xff0c;每个数据集中需要编写的逻辑会有所不同&#xff0c;但是大致是差不多的 1、MapReduce大致为这几个过程&#xff1a; 1、读取数据集并根据文件大小128MB拆分成多个map同时进行下面步骤 2、Map: 匹配和数据筛…...

【Rust】结构体

目录 结构体结构体的定义和实例化结构体使用场景方法定义方法多参数方法关联函数多个 impl 块 结构体 结构体&#xff0c;是一个自定义数据类型&#xff0c;允许包装和命名多个相关的值&#xff0c;从而形成一个有意义的组合&#xff0c;类似于 C语言中的结构体或者 Java 中的…...

青少年编程与数学 02-019 Rust 编程基础 01课题、环境准备

青少年编程与数学 02-019 Rust 编程基础 01课题、环境准备 一、Rust核心特性应用场景开发工具社区与生态 二、Rust 和 Python 比较1. **内存安全与并发编程**2. **性能**3. **零成本抽象**4. **跨平台支持**5. **社区与生态系统**6. **错误处理**7. **安全性**适用场景总结 三、…...

深入理解Embedding Models(嵌入模型):从原理到实战(上)

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《深度探秘&#xff1a;AI界的007》 &#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、引言 1、嵌入模型是什么 2、在NLP、推荐系统、知识图谱等领域…...

世界耳机品牌与排名

耳机可以说是日常用的比较多的产品之一&#xff0c;而且现在的耳机相较于传统的耳机还多了很多的功能&#xff0c;比如现在经常开车的人实用的蓝牙耳机&#xff0c;虽然日常用的多&#xff0c;那么你知道全球知名的耳机品牌有哪些吗&#xff1f; 拜亚耳机&#xff0c;德国品牌&…...

防静电地板人工费多少钱一平方米?2025年报价解析!

在机房、实验室、数据中心等专业场所&#xff0c;防静电地板是保障设备正常运行的关键“防线”。但很多人在装修时&#xff0c;面对“防静电地板安装人工费”的报价往往一头雾水——有的报25元/㎡&#xff0c;有的却要50元/㎡&#xff0c;差价背后究竟藏着什么门道&#xff1f;…...

【详细图文】使用MobaXterm的SSH功能远程连接服务器,并创建pytorch环境,使用yolov8训练数据集

目录 一、使用MobaXterm连接服务器 1、官网下载MobaXterm 2、SSH连接服务器 二、查看服务器的基本信息 1、查看服务器基本信息(可选) (1)查看主机名和系统版本 (2)查看CPU信息 (3)查看内存信息 (4)查看网卡信息 (5)查看总进程数 (6)查看活动进程数 (…...

路由器断流排查终极指南:从Ping测试到Wireshark抓包5步定位法

测试路由器是否出现“断流”&#xff08;网络连接间歇性中断&#xff09;&#xff0c;需通过多维度排查硬件、软件及外部干扰因素。以下是详细步骤指南&#xff1a; 一、基础环境准备 设备连接 有线测试&#xff1a;用网线将电脑直接连接路由器LAN口&#xff0c;排除WiFi干扰。…...

小白借助ai对全栈进行浅浅理解(学习笔记)-Lambda、Optional 避免空指针与新的日期时间 API

学习顺序&#xff1a;Java 基础 → Spring Boot → Vue → 前后端整合 → 数据库 → 部署 → 进阶实战。 Lambda 表达式&#xff08;Lambda 表达式是 Java 8 引入的核心特性&#xff0c;旨在简化函数式编程&#xff0c;替代冗长的匿名内部类&#xff0c;使代码更简洁、灵活 &am…...

可观测性方案怎么选?SelectDB vs Elasticsearch vs ClickHouse

可观测性&#xff08;Observability&#xff09;是指通过系统的外部输出数据&#xff0c;推断其内部状态的能力。可观测性平台通过采集、存储、可视化分析三大可观测性数据&#xff1a;日志&#xff08;Logging&#xff09;、链路追踪&#xff08;Tracing&#xff09;和指标&am…...

100个常用的DeepSeek指令

日常生活类&#xff08;20个&#xff09; 1. 新闻解读&#xff1a;请为我解读今天的热点新闻。 2. 天气查询&#xff1a;请查询……的天气并推荐着装。 3. 旅行攻略&#xff1a;请制定前往……的旅行攻略。 4. 菜谱生成&#xff1a;请生成……菜的具体做法。 5. 解决方案&…...

【C语言】--指针超详解(二)

目录 一.const修饰指针 1.1--const修饰变量 1.2--const修饰指针变量 二.野指针 2.1--野指针成因 2.1.1--指针未初始化 2.1.2--指针越界访问 2.1.3-- 指针指向的空间释放 2.2--如何规避野指针 2.2.1--指针初始化 2.2.2--小心指针越界 2.2.3--指针变量不再使用时&am…...

git 多个提交记录合并为一个

1.场景 有时候用devops等平台测试问题&#xff0c;需要多次修改小的记录提交&#xff0c;但是最终我们在合并主干的时候不想留那么多乱七八糟的记录&#xff0c;就需要在此分支合并这些提交记录&#xff0c;再合并到主干。 2.交互式变基 2.1 确定要合并的提交范围 # 查看最近…...

AI视频生成的艺术:镜头语言

前言 AI视频生成技术正逐渐改变我们创作和消费视频内容的方式,各式各样的AI视频制作软件正在不断的涌现,比如可灵、即梦、runway等。虽然AI视频生成的交互方式(自然语言)极大的减少了我们创作视频的门槛,但要让AI正确理解并创造出符合我们期望的视频,我们可能还是需要了解…...

机器学习与深度学习

目录 一、机器学习 &#xff08;一&#xff09;机器学习的分类 1. 监督学习 2. 无监督学习 3. 强化学习 &#xff08;二&#xff09;机器学习的应用场景 二、深度学习 &#xff08;一&#xff09;深度学习的核心原理 &#xff08;二&#xff09;常见的深度学习模型 …...

数字孪生市场格局生变:中国2025年规模214亿,工业制造领域占比超40%

一、技术深度解析&#xff1a;数字孪生的核心技术栈与演进 1. 从镜像到自治&#xff1a;数字孪生技术架构跃迁 三维重建突破&#xff1a;LiDAR点云精度达2cm&#xff0c;无人机测深刷新频率5Hz&#xff0c;支撑杭州城市大脑内涝预警模型提前6小时预测。AI算法融合&#xff1a…...

数字孪生[IOC]常用10个技术栈(总括)

1. 什么是数字孪生&#xff1f; 数字孪生&#xff08;Digital Twin&#xff09; 是通过数字化技术对物理实体&#xff08;如设备、系统或环境&#xff09;进行高精度建模和实时映射的虚拟副本。其核心是通过 数据驱动 实现物理世界与虚拟世界的双向交互&#xff0c;支持实时监控…...

WPF主窗体子窗体关联方法

步骤&#xff1a; 1、创建WPF项目 2、设计主窗体&#xff0c;选定显示子窗体的区域&#xff08;MainWindow.xaml) 3、在想要显示子窗体的区域填写如下代码&#xff08;MainWindow.xaml) 4、创建子窗体 5、建立调用子窗体事件&#xff0c;下图一是load事件&#xff0c;也可以是…...

笔记本电脑实现网线内网 + Wi-Fi外网同时使用的配置方案

1、同时连接两个网络‌ 插入网线连接内网&#xff0c;确保内网IP地址正常获取&#xff08;如10.143.88.x&#xff09;&#xff1b;连接Wi-Fi接入外网&#xff0c;确认可正常访问互联网&#xff08;如网关为192.168.8.1&#xff09;。 2、 记录关键网络参数‌ 内网网关&#…...

探讨关于智能体(Agent)结合 Dify、大语言模型(LLM)以及 Qwen-3 模型的项目或概念

1. Dify 的作用 Dify 是一个开源的 AI 框架&#xff0c;它可以帮助开发者快速搭建和部署 AI 应用。它可以作为一个基础架构&#xff0c;为智能体提供以下支持&#xff1a; 应用开发与部署&#xff1a;Dify 可以帮助开发者快速搭建智能体的前端和后端架构&#xff0c;包括用户界…...

2025 后端自学UNIAPP【项目实战:旅游项目】3、API接口请求封装,封装后的简单测试以及实际使用

一、创建请求封装目录 选中自己的项目&#xff0c;右键鼠标---->新建---->目录---->名字自定义【我的是api】 二、创建两个js封装文件 选中封装的目录&#xff0c;右键鼠标---->新建---->js文件---->名字自定义【我的两个js文件分别是my_http和my_api】 三…...

【electron+vue】常见功能之——调用打开/关闭系统软键盘,解决打包后键盘无法关闭问题

效果图展示 实现思路&#xff1a;通过input标签聚焦失焦的方式&#xff0c;实现系统软键盘的显示隐藏。 使用场景&#xff1a;一体机电脑&#xff0c;无外接键盘。 html <el-input v-model"idNumber" placeholder"请输入" focus"showKeyboard&qu…...

告别手动输入密码:基于SSHPass的自动化文件传输实践告别手动输入密码:基于SSHPass的自动化文件传输实践

一、运维人员的共同痛点 在日常运维工作中&#xff0c;我们经常需要在多台服务器之间传输文件。传统的手动操作方式需要反复执行以下步骤&#xff1a; 输入scp命令等待密码提示输入复杂密码确认传输结果手动修改文件权限 这种重复劳动不仅效率低下&#xff0c;在批量操作时更…...

Python序列Day3

序列 序列是一种数据存储方式&#xff0c;用方括号标注&#xff0c;逗号分隔的一组值。在内存中&#xff0c;序列就是一块用来存放多个值的连续的内存空间。 常见序列结构有&#xff1a;字符串、列表、元组、字典、集合 列表 用于存储任意数目&#xff0c;任意类型的数据集…...

22、近端策略优化算法(PPO)论文笔记

近端策略优化算法&#xff08;PPO&#xff09;论文笔记 一、研究背景与目标二、**方法****3.1 策略梯度基础****3.2 信任区域方法&#xff08;TRPO&#xff09;****3.3 剪切代理目标函数&#xff08;LCLIP&#xff09;****3.4 自适应KL惩罚系数****3.5 算法实现** 三、 L CLIP…...

web 自动化之 selenium+webdriver 环境搭建及原理讲解

文章目录 一、web 自动化测试学习说明二、什么 web 自动化测试三、selenium 简介四、web自动化测试环境搭建五、web 自动化测试第一个脚本六、selenium 原理及源码讲解 一、web 自动化测试学习说明 进阶 web 自动化测试学习&#xff1a;掌握 python 编程基础 二、什么 web 自…...

Vue3快速入门/Vue3基础速通

Vue3 渐进式的javascript框架&#xff0c;我们可以逐步引入vue的功能 官方文档 Vue.js中文手册 你可以借助 script 标签直接通过 CDN 来使用 Vue&#xff1a; <script src"https://unpkg.com/vue3/dist/vue.global.js"></script>通过 CDN 使用 Vue 时…...

Babylon.js学习之路《一、初识 Babylon.js:什么是 3D 开发与 WebGL 的完美结合?》

文章目录 1. 引言&#xff1a;3D 开发在 Web 中的崛起1.1 为什么需要 Web 3D 开发&#xff1f;1.1 WebGL 的定位与挑战 2. Babylon.js 的核心定位2.1 什么是 Babylon.js&#xff1f;2.2 Babylon.js 的独特优势2.3 对比其他 Web 3D 框架&#xff08;Three.js、PlayCanvas&#x…...

v-model原理详解

一 :value"msg 在 Vue.js 中&#xff0c;v-bind 指令&#xff08;简写为 :&#xff09;用于将数据属性绑定到 HTML 元素的属性上。当你使用 :value"msg" 时&#xff0c;它的作用是将 Vue 实例中的 msg 数据属性绑定到目标元素的 value 属性上。 1.value 属性…...

并发与并行的关系

并发&#xff08;Concurrency&#xff09;与并行&#xff08;Parallelism&#xff09;的本质区别 1. 核心定义 并发&#xff1a;多个任务在重叠的时间段内交替执行&#xff0c;但不一定是同时的。 关注的是任务的组织方式&#xff08;如多任务调度、逻辑上的同时性&#xff09…...

uniapp 微信小程序使用图表

使用的是秋云 ucharts 直接在hbuilder插件市场进行下载导入项目中&#xff0c;多端支持 下载地址秋云 ucharts echarts 高性能跨全端图表组件 - DCloud 插件市场 导入成功后这里就能看到导入的插件啦 导入项目后就可以直接在页面中通过组件使用了 不需要其余配置 使用简单 参…...

基于vm加密的php逆向分析

前言 对于 php 主流的加密方式有两种&#xff1a; 1、基于扩展的 2、本地加密&#xff0c;不涉及扩展 一些在 php 端通过 zend_compile_file 等函数就可以直接 dump 出原代码的&#xff0c;称之为加密实在是抬举了 之前有写过一篇直接 dump 出源码的分析 https://blog.qc7…...

FPGA----基于ALINX提供的debian实现TCF

引言&#xff1a;接上问&#xff0c;我们使用自制的image.ub和boot.bin以及ALINX提供的debian8根文件系统&#xff0c;构建了petalinux&#xff0c;但是经测试&#xff0c;该文件系统无法启用TCF服务&#xff0c;即无法与Xilinx SDK建立连接&#xff0c;那么我们应该如何解决&a…...

基于Transformer的多资产收益预测模型实战(附PyTorch实现与避坑指南)

基于Transformer的多资产收益预测模型实战&#xff08;附PyTorch模型训练及可视化完整代码&#xff09; 一、项目背景与目标 在量化投资领域&#xff0c;利用时间序列数据预测资产收益是核心任务之一。传统方法如LSTM难以捕捉资产间的复杂依赖关系&#xff0c;而Transformer架…...

SQL:MySQL函数:字符串函数

目录 为什么需要字符串函数&#xff1f; 1️⃣ LENGTH(str) — 这个字符串有几个“字节”&#xff1f; 2️⃣ CHAR_LENGTH(str) — 这个字符串有几个“字符”&#xff1f; 3️⃣ TRIM(str) — 把两边的空格剪掉 4️⃣ REPLACE(str, a, b) — 把 a 替换成 b 使用这些函数时…...

C++-缺省参数

缺省参数 缺省参数也叫默认参数 指的是在函数参数的位置&#xff0c;提前定义一个缺省值&#xff08;即提前定义一个值&#xff09;&#xff0c;当函数接收到参数时&#xff0c;如果定义缺省值的位置未接收到参数&#xff0c;那么这个位置会自动使用缺省值 通过定义缺省参数…...

MySQL 数据库

目录 1. 数据库简介 1.1 使用数据库的必要性 1.2 数据库的基本概念 1.3 经典数据模型 2. MySQL 服务基础 2.1 MySQL 的二进制安装 2.1.1 基础环境准备 2.1.2 二进制安装 2.1.3 设定配置文件 1. 数据库简介 1.1 使用数据库的必要性 使用数据库可以高效且条理分明地存…...

探寻养生新路径,守护健康生活

在忙碌的现代生活中&#xff0c;人们对健康养生的需求愈发迫切。养生不一定要遵循复杂的规则&#xff0c;从一些新颖且实用的方面入手&#xff0c;同样能收获健康的馈赠。​ 关注肠道菌群的平衡是养生的关键。肠道内居住着数以万亿计的微生物&#xff0c;它们与人体健康息息相…...

平板收银系统、国产系统,鸿蒙系统,小键盘的封装与应用—仙盟创梦IDE

数字小键盘封装 数组小键盘封装是指将与数组小键盘相关的功能、操作、数据等进行整合&#xff0c;形成一个独立的、可复用的模块。封装数组小键盘具有以下几方面重要意义&#xff1a; 提高代码可维护性 降低复杂度&#xff1a;数组小键盘在实际应用中&#xff0c;可能涉及到…...

微软推动智能体协同运作:支持 A2A、MCP 协议

今日凌晨&#xff0c;微软宣布 Azure AI Foundry 和 Microsoft Copilot Studio 两大开发平台支持最新 Agent 开发协议 A2A&#xff0c;并与谷歌合作开发扩大该协议&#xff0c;这一举措对智能体赛道意义重大。 现状与变革意义 当前智能体领域类似战国时代&#xff0c;各家技术…...

《企业级前端部署方案:Jenkins+MinIO+SSH+Gitee+Jenkinsfile自动化实践》

文章目录 前言前端项目CICD时序图一、环境准备1、服务器相关2、Jenkins凭据3、注意事项 二、设计思想1. 模块化设计2.多环境支持3. 制品管理4. 安全部署机制5. 回滚机制 三、CI阶段1、构建节点选择2、代码拉取3、代码编译4、打包并上传至minio 四、CD阶段五、回滚阶段六、构建通…...

数据库的进阶操作

目录 1、数据库的约束 2、查询操作的进阶 2.1 查询插入 2.2 聚合查询 2.3 运算查询 2.3 分组查询 2.4 联合查询 2.5 内外连接 2.6 子查询 2.7 合并查询 1、数据库的约束 数据库的约束是指&#xff1a;数据库会自动的对数据的合法性进行校验和检查的一系列操作的机制&a…...

小刚说C语言刷题—1341银行存款问题

1.题目描述 亮亮把 n 元按照 m 年期整存存入银行&#xff0c;按照目前银行的年利率&#xff0c;请问到期后亮亮可以连本带息总共拿到多少钱&#xff1f; 存期&#xff08;整存整取&#xff09; 年利率 1年 3.25% 2年 3.75% 3年∼4 年 4.25% 5年及 5年以上 4.75% 输入…...

15 个 Azure DevOps 场景化面试问题及解答

问题 1. 解释 Azure DevOps YAML 管道的典型结构。 您可以从管道的整体结构开始&#xff0c;从触发器开始。您也可以选择解释它可能包含的不同类型的阶段&#xff1a;构建、测试、扫描、部署等。 Azure DevOps YAML 管道结构示例 触发器指示管道运行。它可以是持续集成 (CI) 或…...

spring cloud 跨服务调用

微服务将不同功能模块拆分成多个不同的服务&#xff0c;在业务逻辑集成时候&#xff0c;难免会有一个服务需要依赖调用另一个服务的情况。如订单服务需要通过用户服务查询用户相关信息&#xff0c;这时候微服务之间就需要进行跨服务调用。 要想进行跨服务调用&#xff0c;服务…...

手机隐私数据彻底删除工具:回收或弃用手机前防数据恢复

软件介绍 有这样一款由吾爱网友chenwangjun 原创开发的数据处理软件&#xff0c;名为 AndroidDiskClear。它的核心功能十分强大&#xff0c;能够将你手机里已经删除的各类文件&#xff0c;像图片、普通文件、文字信息等彻底清除干净&#xff0c;有效杜绝数据恢复类软件的二次恢…...

【Electron】electron-vue 借助 element-ui UI 库助力桌面应用开发

前面文章我们讲过 electron 让可以用 HTML、JS、CSS 开发桌面应用程序。而 electron-vue 是一个结合了 electron 与 vue 的套件。这样我们就能方便地使用 vue 快速开发桌面应用。但是&#xff0c;vue 只是在 js 这层面做了大量的便捷的操作。对 UI 并未过多涉及。此时如果您在开…...

《信息论与编码课程笔记》——信源编码(1)

目录 一、信源编码基本概念 1. 定义与目的 2. 编码示例 3. 编码分类 4. 唯一可译码的判断标准 5. 编码评价指标 二、香农第一定理&#xff08;无失真可变长信源编码定理&#xff09; 1. 核心内容 2. 关键概念与指标 3. 数据压缩的本质 4. 例子与启示 5. 定理的意义…...

2022年8月,​韩先超对中移信息进行微服务架构原理(Docker+k8s+DevOps+Go等)培训

2022年8月&#xff0c;​韩先超对中移信息进行微服务架构原理&#xff08;Dockerk8sDevOpsGo等&#xff09;培训 2022年8月&#xff0c;在企业数字化转型和云原生架构加速演进的背景下&#xff0c; 中移信息技术有限公司特别邀请云原生与DevOps领域专家 韩先超老师&#xff0c…...

【PostgreSQL数据分析实战:从数据清洗到可视化全流程】8.4 数据故事化呈现(报告结构设计/业务价值提炼)

&#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 文章大纲 8.4 数据故事化呈现&#xff1a;从报告结构到业务价值的深度融合一、数据故事化的核心价值体系&#xff08;一&#xff09;报告结构设计的黄金框架1. 业务场景锚定&#xff…...