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

实时数仓Kappa架构:从入门到实战

引言

随着大数据技术的不断发展,企业对实时数据处理和分析的需求日益增长。实时数仓(Real-Time Data Warehouse, RTDW)应运而生,其中Kappa架构作为一种简化的数据处理架构,通过统一的流处理框架,解决了传统Lambda架构中批处理和实时处理的复杂性。本文将深入探讨Kappa架构的历史背景、业务场景、功能点、优缺点、解决的问题以及底层原理,并详细介绍如何使用Java语言快速搭建一套实时数仓。

一、Kappa架构的历史背景

1.1 Lambda架构的局限性

Lambda架构由Nathan Marz提出,旨在通过批处理层和速度层的结合,同时满足实时数据分析和历史数据分析的需求。然而,Lambda架构存在以下局限性:

  • 系统复杂性高:需要维护两套系统(批处理层和速度层),增加了开发和维护的难度。
  • 数据一致性延迟:由于批处理层和速度层的数据处理存在时间差,可能导致数据一致性问题。

1.2 Kappa架构的提出

Kappa架构由LinkedIn的前首席工程师杰伊·克雷普斯(Jay Kreps)提出,作为Lambda架构的改进方案。Kappa架构通过删除批处理层,仅保留流处理层,实现了实时和批量数据的统一处理,从而简化了系统架构。

二、Kappa架构的业务场景

Kappa架构广泛应用于需要实时处理和分析数据的场景,包括但不限于:

  • 金融服务:实时交易监控、欺诈检测和风险管理。
  • 电子商务:实时推荐系统、库存管理和客户行为分析。
  • 物联网(IoT):设备监控、预测性维护和实时数据流分析。
  • 社交媒体:实时内容分析、趋势分析和用户互动监控。
  • 电信:实时网络监控、流量分析和故障检测。

三、Kappa架构的功能点

3.1 数据流处理

Kappa架构所有数据都是以事件流的形式处理的,没有批处理的概念。数据流是连续的、实时的,不需要区分历史数据和实时数据。

3.2 简化架构

通过统一的流处理框架,Kappa架构简化了数据处理流程,避免了Lambda架构中批处理层和速度层的分离,降低了系统复杂性和维护成本。

3.3 流处理框架

Kappa架构使用流处理引擎(如Apache Kafka、Apache Flink、Apache Storm)来处理数据流。数据在流处理引擎中进行过滤、转换、聚合等处理操作,实时生成结果。

3.4 数据存储与查询

处理后的数据存储在低延迟、高吞吐量的存储系统中(如Apache Kafka、Cassandra、HBase、Elasticsearch等),支持快速写入和查询,以满足实时数据分析的需求。

四、Kappa架构的优缺点

4.1 优点

  • 简化架构:通过统一的流处理引擎,简化了数据处理流程,降低了系统复杂性和维护成本。
  • 实时处理:所有数据都以事件流的形式实时处理,提供实时的数据分析和决策支持。
  • 一致性:由于没有批处理和实时处理的分离,数据的一致性和完整性更容易保证。
  • 灵活性:支持各种实时数据源和数据类型,具有较高的灵活性和可扩展性。

4.2 缺点

  • 流处理复杂性:设计和实现高效的流处理逻辑需要专业的技术和经验,处理复杂的业务逻辑和数据操作。
  • 故障恢复:实时数据处理对系统的稳定性和容错性要求高,需要有效的故障恢复机制。
  • 数据存储和查询:实时数据存储系统需要支持高吞吐量和低延迟的写入和查询,确保实时分析的性能。
  • 成本:实时处理和存储系统的成本较高,需要投入更多的资源和技术支持。

五、Kappa架构解决的问题

Kappa架构通过统一的流处理框架,解决了传统Lambda架构中批处理和实时处理的复杂性,实现了实时和批量数据的统一处理。这解决了以下问题:

  • 数据一致性延迟:通过流处理框架,实时处理和批量处理的数据保持一致,避免了数据一致性延迟问题。
  • 系统复杂性:简化了系统架构,降低了开发和维护的难度。
  • 资源利用率:提高了资源利用率,避免了批处理层和速度层的资源重复投入。

六、Kappa架构的底层原理

6.1 数据流

在Kappa架构中,数据流是连续的、实时的,从各种数据源(如传感器、日志、交易系统等)产生,并通过消息队列(如Apache Kafka)传输到流处理引擎。

6.2 流处理引擎

流处理引擎(如Apache Flink)接收数据流,执行过滤、转换、聚合等操作,并实时生成处理结果。流处理引擎能够处理复杂的计算逻辑,支持窗口函数、状态管理等高级功能。

6.3 数据存储

处理后的数据存储在高性能的存储系统中(如Apache Kafka、Cassandra等),这些存储系统支持快速写入和查询,以满足实时数据分析的需求。同时,存储系统还可以保留数据的完整历史记录,以便进行历史数据分析和重放。

6.4 查询与分析

用户可以通过查询引擎和BI工具实时访问和分析存储的数据。数据可视化工具提供实时的数据展示和报告生成,帮助用户快速获取数据洞察并做出决策。

七、使用Java快速搭建实时数仓示例

7.1 环境准备

首先,确保你已经安装了以下软件和工具:

  • Java Development Kit (JDK):用于Java程序的开发和编译。
  • Apache Kafka:用于消息队列和数据流传输。
  • Apache Flink:用于流处理。
  • MySQL:用于模拟数据源。
  • Maven:用于项目管理和依赖管理。

7.2 项目结构

创建一个Maven项目,项目结构如下:

复制代码
realtime-dw
├── pom.xml
├── src
│   ├── main
│   │   ├── java
│   │   │   └── com
│   │   │       └── example
│   │   │           ├── KafkaProducer.java
│   │   │           ├── FlinkJob.java
│   │   │           └── Main.java
│   │   └── resources
│   │       └── application.properties

7.3 添加依赖

pom.xml文件中添加必要的依赖:

xml复制代码
<dependencies>
<!-- Kafka Client -->
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-clients</artifactId>
<version>2.8.0</version>
</dependency>
<!-- Flink Dependencies -->
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-java</artifactId>
<version>1.13.2</version>
</dependency>
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-streaming-java_2.11</artifactId>
<version>1.13.2</version>
</dependency>
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-connector-kafka_2.11</artifactId>
<version>1.13.2</version>
</dependency>
<!-- MySQL JDBC Driver -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.23</version>
</dependency>
</dependencies>

7.4 模拟数据源

使用MySQL数据库模拟数据源,创建一个简单的表并插入一些数据:

sql复制代码
CREATE TABLE users (id INT PRIMARY KEY,name VARCHAR(50),age INT,created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
INSERT INTO users (id, name, age) VALUES (1, 'Alice', 30), (2, 'Bob', 25), (3, 'Charlie', 35);

7.5 Kafka生产者

编写一个Kafka生产者,将数据从MySQL数据库读取并发送到Kafka主题:

java复制代码
package com.example;
import org.apache.kafka.clients.producer.KafkaProducer;
import org.apache.kafka.clients.producer.ProducerRecord;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Properties;
public class KafkaProducer {
private static final String KAFKA_TOPIC = "user_topic";
private static final String KAFKA_BOOTSTRAP_SERVERS = "localhost:9092";
public static void main(String[] args) {
Properties props = new Properties();props.put("bootstrap.servers", KAFKA_BOOTSTRAP_SERVERS);props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");KafkaProducer<String, String> producer = new KafkaProducer<>(props);
try (Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "username", "password");
Statement statement = connection.createStatement()) {
ResultSet resultSet = statement.executeQuery("SELECT * FROM users");
while (resultSet.next()) {
String key = resultSet.getString("id");
String value = resultSet.getString("name") + "," + resultSet.getInt("age") + "," + resultSet.getTimestamp("created_at");ProducerRecord<String, String> record = new ProducerRecord<>(KAFKA_TOPIC, key, value);producer.send(record);}} catch (Exception e) {e.printStackTrace();} finally {producer.close();}}
}

7.6 Flink作业

编写一个Flink作业,从Kafka主题读取数据并进行实时处理:

java复制代码
package com.example;
import org.apache.flink.api.common.functions.MapFunction;
import org.apache.flink.streaming.api.datastream.DataStream;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.streaming.connectors.kafka.FlinkKafkaConsumer;
import org.apache.flink.api.common.serialization.SimpleStringSchema;
public class FlinkJob {
private static final String KAFKA_TOPIC = "user_topic";
private static final String KAFKA_BOOTSTRAP_SERVERS = "localhost:9092";
private static final String GROUP_ID = "flink-group";
public static void main(String[] args) throws Exception {
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();FlinkKafkaConsumer<String> consumer = new FlinkKafkaConsumer<>(KAFKA_TOPIC, new SimpleStringSchema(), props);consumer.setGroupId(GROUP_ID);DataStream<String> stream = env.addSource(consumer);DataStream<String> processedStream = stream.map(new MapFunction<String, String>() {
@Override
public String map(String value) throws Exception {String[] parts = value.split(",");
return "User ID: " + parts[0] + ", Name: " + parts[1] + ", Age: " + parts[2] + ", Created At: " + parts[3];}});processedStream.print();env.execute("Real-Time Data Warehouse with Flink");}
private static Properties getKafkaProperties() {
Properties props = new Properties();props.setProperty("bootstrap.servers", KAFKA_BOOTSTRAP_SERVERS);props.setProperty("group.id", GROUP_ID);
return props;}
}

7.7 启动程序

  1. 启动Kafka和Zookeeper。
  2. 启动MySQL数据库,并确保users表中有数据。
  3. 运行KafkaProducer类,将数据发送到Kafka主题。
  4. 运行FlinkJob类,从Kafka主题读取数据并进行实时处理。

7.8 结果展示

在控制台中,你将看到Flink作业实时处理并输出数据:

复制代码
User ID: 1, Name: Alice, Age: 30, Created At: 2023-10-01 12:00:00
User ID: 2, Name: Bob, Age: 25, Created At: 2023-10-01 12:00:01
User ID: 3, Name: Charlie, Age: 35, Created At: 2023-10-01 12:00:02

八、总结

Kappa架构作为一种简化的数据处理架构,通过统一的流处理框架,解决了传统Lambda架构中批处理和实时处理的复杂性,提供了强大的实时数据处理和分析能力。本文详细介绍了Kappa架构的历史背景、业务场景、功能点、优缺点、解决的问题以及底层原理,并给出了使用Java语言快速搭建实时数仓的示例。通过本文的学习,读者可以深入了解Kappa架构的原理和实现方法,并能够在实际项目中应用这一技术。

相关文章:

实时数仓Kappa架构:从入门到实战

引言 随着大数据技术的不断发展&#xff0c;企业对实时数据处理和分析的需求日益增长。实时数仓&#xff08;Real-Time Data Warehouse, RTDW&#xff09;应运而生&#xff0c;其中Kappa架构作为一种简化的数据处理架构&#xff0c;通过统一的流处理框架&#xff0c;解决了传统…...

【老白学 Java】Warship v2.0(四)

Warship v2.0&#xff08;四&#xff09; 文章来源&#xff1a;《Head First Java》修炼感悟。 上一篇文章中&#xff0c;老白仔细分析了 v2.0 的设计思路以及实现手段&#xff0c;如果大家有好的设计方案也可以自行尝试。 本篇文章的主要内容是对 Warship 类进行最后的修改&a…...

LLM之学习笔记(一)

前言 记录一下自己的学习历程&#xff0c;也怕自己忘掉了某些知识点 Prefix LM 和 Causal LM区别是什么&#xff1f; Prefix LM &#xff08;前缀语⾔模型&#xff09;和 Causal LM&#xff08;因果语言模型&#xff09;是两者不同类型的语言模型&#xff0c;它们的区别在于生…...

C# 反射详解

反射是C#中的一个强大特性&#xff0c;允许程序在运行时检查和操作类型和对象的信息。 通过反射&#xff0c;你可以获取类型的属性、方法、构造函数等信息&#xff0c;并可以动态创建对象、调用方法或访问属性&#xff0c;甚至可以实现某些框架或库的核心功能。 反射的基本概念…...

pgadmin安装后运行不能启动界面的问题

在本人机器上安装了pgsql10后&#xff0c;自带的pgadmin安装后运行时能打开edge并显示数据库server和数据库的&#xff0c;后来又安装了pgsql17&#xff0c;结果安装后想打开pgadmin&#xff0c;结果一直在等待最后&#xff0c;爆出类似于下面的错误。 pgAdmin Runtime Enviro…...

跳表(Skip List)

跳表&#xff08;Skip List&#xff09; 跳表是一种用于快速查找、插入和删除的概率型数据结构&#xff0c;通常用于替代平衡二叉搜索树&#xff08;如 AVL 树或红黑树&#xff09;。跳表通过在有序链表的基础上增加多层索引&#xff0c;使得查找操作的平均时间复杂度降低&…...

前端实现把整个页面转成PDF保存到本地(DOM转PDF)

一、问题 遇到一个需求&#xff0c;就是要把整个看板页面导出成PDF用在汇报&#xff0c;也就是要把整个DOM生成一个PDF保存到本地。 二、解决方法 1、解决思路&#xff1a;使用插件 jspdf 和 html2canvas&#xff0c;我用的版本如下图 2、代码实现 import { jsPDF } from …...

Vue 3 学习文档(一)

最近打算做一个项目&#xff0c;涉及到一些前端的知识&#xff0c;因上一次接触前端已经是三四年前了&#xff0c;所以捡一些简单的功能做一下复习。 响应式函数&#xff1a;reactive 和 ref属性绑定&#xff1a;v-bind 和简写语法事件监听&#xff1a;v-on 和简写语法 双向绑…...

【适配】屏幕拖拽-滑动手感在不同分辨率下的机型适配

接到一个需求是类似下图的3D多房间视角&#xff0c;需要拖拽屏幕 问题 在做这种屏幕拖拽的时候发现&#xff0c;需要拖拽起来有跟手的感觉&#xff0c;会存在不同分辨率机型的适配问题。 即&#xff1a;美术调整好了机型1的手感&#xff0c;能做到手指按下顶层地板上下挪动&…...

牛客周赛 Round 69(A~E)

文章目录 A 构造C的歪思路code B 不要三句号的歪思路code C 仰望水面的歪思路code D 小心火烛的歪思路code E 喜欢切数组的红思路code 牛客周赛 Round 69 A 构造C的歪 思路 签到题&#xff0c;求出公差d&#xff0c;让最大的数加上公差d即可 code int a,b;cin >> a &…...

Spring Boot 实战:分别基于 MyBatis 与 JdbcTemplate 的数据库操作方法实现与差异分析

1. 数据库新建表 CREATE TABLE table_emp(id INT AUTO_INCREMENT,emp_name CHAR(100),age INT,emp_salary DOUBLE(10,5),PRIMARY KEY(id) );INSERT INTO table_emp(emp_name,age,emp_salary) VALUES("tom",18,200.33); INSERT INTO table_emp(emp_name,age,emp_sala…...

【jmeter】服务器使用jmeter压力测试(从安装到简单压测示例)

一、服务器上安装jmeter 1、官方下载地址&#xff0c;https://jmeter.apache.org/download_jmeter.cgi 2、服务器上用wget下载 # 更新系统 sudo yum update -y# 安装 wget 以便下载 JMeter sudo yum install wget -y# 下载 JMeter 压缩包&#xff08;使用 JMeter 官方网站的最…...

使用Python实现自动化邮件通知:当长时程序运行结束时

使用Python实现自动化邮件通知&#xff1a;当长时程序运行结束时 前提声明 本代码仅供学习和研究使用&#xff0c;不得用于商业用途。请确保在合法合规的前提下使用本代码。 目录 引言项目背景项目设置代码分析 导入所需模块定义邮件发送函数发送邮件 实现步骤结语全部代码…...

框架学习07 - SpringMVC 其他功能实现

一. 拦截器实现HandlerInterceptor 接⼝ SpringMVC 中的 Interceptor 拦截器也是相当重要和相当有⽤的&#xff0c;它的主要作⽤是拦截⽤户的请求并进⾏相应的处理。⽐如通过它来进⾏权限验证&#xff0c;或者是来判断⽤户是否登陆等操作。对于 SpringMVC 拦截器的定义⽅式有两…...

NAT:连接私有与公共网络的关键技术(4/10)

一、NAT 的工作原理 NAT 技术的核心功能是将私有 IP 地址转换为公有 IP 地址&#xff0c;使得内部网络中的设备能够与外部互联网通信。其工作原理主要包括私有 IP 地址到公有 IP 地址的转换、端口号映射以及会话表维护这几个步骤。 私有 IP 地址到公有 IP 地址的转换&#xff1…...

RabbitMQ2:介绍、安装、快速入门、数据隔离

欢迎来到“雪碧聊技术”CSDN博客&#xff01; 在这里&#xff0c;您将踏入一个专注于Java开发技术的知识殿堂。无论您是Java编程的初学者&#xff0c;还是具有一定经验的开发者&#xff0c;相信我的博客都能为您提供宝贵的学习资源和实用技巧。作为您的技术向导&#xff0c;我将…...

衡山派D133EBS 开发环境安装及SDK编译烧写镜像烧录

1.创建新文件夹&#xff0c;用来存放SDK包&#xff08;其实本质就是路径要对就ok了&#xff09;&#xff0c;右键鼠标通过Open Git Bash here来打开git 输入命令 git clone --depth1 https://gitee.com/lcsc/luban-lite.git 来拉取&#xff0c;如下所示&#xff1a;&#xff0…...

【Spring MVC】如何获取cookie/session以及响应@RestController的理解,Header的设置

前言 &#x1f31f;&#x1f31f;本期讲解关于SpringMVC的编程之参数传递~~~ &#x1f308;感兴趣的小伙伴看一看小编主页&#xff1a;GGBondlctrl-CSDN博客 &#x1f525; 你的点赞就是小编不断更新的最大动力 &#x1f386;那么废…...

C++设计模式行为模式———策略模式

文章目录 一、引言二、策略模式三、总结 一、引言 策略模式是一种行为设计模式&#xff0c; 它能让你定义一系列算法&#xff0c; 并将每种算法分别放入独立的类中&#xff0c; 以使算法的对象能够相互替换。与模板方法模式类似&#xff0c;都是以扩展的方式来支持未来的变化。…...

Spring Cloud 中 bootstrap.yml 配置文件详解

Spring Cloud 中 bootstrap.yml 配置文件详解 1. 什么是 bootstrap.yml&#xff1f; bootstrap.yml 是 Spring Cloud 提供的一个特殊配置文件&#xff0c;主要用于初始化 Spring Cloud 应用程序的环境。与常见的 application.yml 不同&#xff0c;bootstrap.yml 在 Spring 应用…...

Java项目实战II基于SpringBoot前后端分离的网吧管理系统(开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、核心代码 五、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 随着互联网技术的不断发展…...

ASP网络安全讲述

一 前言   Microsoft Active Server Pages&#xff08;ASP&#xff09;是服务器端脚本编写环境&#xff0c;使用它可以创建和运行动态、交互的 Web 服务器应用程序。使用 ASP 可以组合 HTML 页 、脚本命令和 ActiveX 组件以创建交互的 Web 页和基于 Web 的功能强大的应用程序…...

DFS 创建分级菜单

菜单级别不确定&#xff0c;想要自适应&#xff0c;且可以折叠的菜单。 数据是一个数组。 <template><div class"Level" ref"Level"></div> </template>import {ref} from vue export default{data(){Level:ref(null),menuData…...

HDU Go Running(最小点覆盖 + 网络流优化)

题目大意&#xff1a;有一条无限长跑道&#xff0c;每个人可以规定自己跑步的方向&#xff0c;起点&#xff0c;跑步起止时间。每个人跑步的速度都是1m/s。最后从监控人员哪里得到了n个报告&#xff0c;每个报告给出了某人在某一时候所在的位置&#xff0c;问跑步的最少可能人数…...

C++设计模式-中介者模式

动机(Motivation) 多个对象相互关联的情况&#xff0c;对象之间常常会维持一种复杂的引用关系&#xff0c;如果遇到一些需求的更改&#xff0c;这种直接的引用关系将面临不断的变化。在这种情况下&#xff0c;可以使用一种”中介对象“来管理对象间的关联关系&#xff0c;避免…...

文件上传与下载服务 | Flask 实战

之前介绍了 droppy 文件共享服务的搭建。但在一些场景中&#xff0c;我们需要在命令行或在 Python 代码中&#xff0c;临时上传和下载文件。这时可以用一个更简单的策略&#xff1a;使用 flask 编写一个临时的 API。 服务端配置 以下是一个简单的 Flask 应用程序代码示例&…...

MySQL 中的排序:索引排序与文件排序

文章目录 MySQL 中的排序&#xff1a;索引排序与文件排序全解析一、引言二、索引排序&#xff08;一&#xff09;原理&#xff08;二&#xff09;示例 三、文件排序&#xff08;一&#xff09;单路排序&#xff08;二&#xff09;双路排序&#xff08;三&#xff09;归并排序 四…...

深入理解React Hooks:使用useState和useEffect

引言 React Hooks是React 16.8引入的一项强大功能&#xff0c;它使函数组件能够使用状态和其他React特性。本文将深入探讨两个最常用的Hooks&#xff1a;useState和useEffect&#xff0c;并通过实际代码示例展示它们的使用方法。 1. 什么是React Hooks&#xff1f; React Ho…...

AWS codebuild + jenkins + github 实践CI/CD

前文 本文使用 Jenkins 结合 CodeBuild, CodeDeploy 实现 Serverless 的 CI/CD 工作流&#xff0c;用于自动化发布已经部署 lambda 函数。 在 AWS 海外区&#xff0c;CI/CD 工作流可以用 codepipeline 这项产品来方便的实现&#xff0c; CICD 基本概念 持续集成( Continuous…...

Android PMS(Package Manager Service)源码介绍

文章目录 前言一、PMS 启动流程二、APK 安装流程三、APK 卸载流程四、权限管理静态权限动态权限 五、 数据存储与一致性六、 PMS 的安全性策略1、权限检查2、签名认证3、动态权限管理4、应用安装验证5、保护系统目录 七、PMS 调试方法总结 前言 PackageManagerService&#xf…...

查二级建造师个人信息查询/seo是如何优化

SqlHelper详解2008-05-24 10:40SqlHelper 类实现详细信息SqlHelper 类用于通过一组静态方法来封装数据访问功能。该类不能被继承或实例化&#xff0c;因此将其声明为包含专用构造函数的不可继承类。在 SqlHelper 类中实现的每种方法都提供了一组一致的重载。这提供了一种很好的…...

如何做解析网站/电商热门关键词

//在初始化codec后&#xff0c;接下来就是打开解码器int attribute_align_arg avcodec_open2(AVCodecContext *avctx, const AVCodec *codec, AVDictionary **options){int ret 0;AVDictionary *tmp NULL;if (avcodec_is_open(avctx)) //返回avctx-》internal&#xff0c;见…...

建设摩托车官网中国官网报价大全/太原seo关键词优化

<meta http-equiv"X-UA-Compatible" content"IEEmulateIE7"/>转载于:https://www.cnblogs.com/xjt360/p/3604410.html...

医疗手机网站建设/惠州百度关键词优化

服务端效果图&#xff1a; 在发布端用定时器模拟数据上传给服务端。 移动端效果图&#xff1a; 变化的数字是从发布端上传到服务端&#xff0c;再推送到移动端。 1. nodejs 安装MQTT服务 1.1 安装 mqtt 服务器必要依赖项 mosca mqtt npm install mosca mqtt --save1.2 在项…...

哪里有做网站企业/网店推广的方式

返回&#xff1a;贺老师课程教学链接 画出实现下面求解任务的流程图 1、简单循环的流程图&#xff08;提示&#xff1a;m是一个变量&#xff0c;在程序中输入&#xff09;&#xff08;1&#xff09;求1到m的倒数和&#xff0c;即  &#xff08;2&#xff09;求1到m的平方和&…...

怎样做公司的网站首页/关键词优化 搜索引擎

题意&#xff1a; 有t组测试数据&#xff0c;每组测试数据给一个矩阵n&#xff0c;m。 接下来给出n行&#xff0c;每行第一个数字为该行的编号&#xff08;从1开始&#xff09;&#xff0c;然后给出这行不能走的y坐标。 问从出发点&#xff08;1&#xff0c;1&#xff09;&…...