Google AI Studio使用1:创建Flink测试题APP
最近学习Flink,为了快速掌握它,使用了Google AI Studio的build创建了一个APP,用于测试Flink的掌握程度。
我的流程是这样的,使用Gemini 2.5 Pro帮我生成提示词。我对Gemini 2.5 Pro的prompt是这样的:
我需要你写一个提示词,适用于google AI Studio的build,我的目的是这样:生成一个关于大数据flink知识点的测试面试网站,这个网站上面有选择题,问答题,我可以与其进行互动,比如我勾选了一个答案,如果错了,能够给出正确答案和原理知识点;此外不管答对答错,有一个知识点延伸,
生成的提示词是
#### **角色和目标 (Role and Goal)**你是一位资深的大数据架构师,尤其精通 Apache Flink 技术,同时你也是一位经验丰富的面试官和教学内容设计师。你的任务是为即将上线的“Flink 大数据技术面试模拟网站”生成一系列高质量的交互式面试题。#### **核心要求 (Core Requirements)**1. **内容主题**: 所有问题必须围绕 Apache Flink 的核心知识点。2. **输出格式**: 必须严格按照下面的 JSON 格式输出。最终结果是一个包含多个问题对象的 JSON 数组。3. **题目类型**: 生成的题目需要包含两种类型:`"multiple-choice"` (选择题) 和 `"qa"` (问答题)。4. **交互式元素**:- **答案解析 (`explanation`)**: 当用户回答错误时,提供详细的、针对正确答案的原理讲解。- **知识点延伸 (`extension`)**: 无论用户回答正确与否,都提供一个与该题目相关的、可以深入学习的知识点或引申思考。#### **JSON 结构定义 (JSON Structure Definition)**请为每一道题生成一个 JSON 对象,并包含以下字段:- `id` (number): 题目的唯一标识符,从 1 开始递增。- `type` (string): 题目类型,值为 `"multiple-choice"` 或 `"qa"`。- `level` (string): 题目难度,值为 `"easy"`, `"medium"`, 或 `"hard"`。- `question` (string): 题目的具体内容。- `options` (array of strings): **仅用于选择题**。一个包含四个选项(A, B, C, D)的字符串数组。对于问答题,此字段应为空数组 `[]`。- `correct_answer` (string): 对于选择题,值为正确的选项字母(如 "B")。对于问答题,值为一个简洁但全面的标准答案。- `explanation` (string): 对正确答案的详细原理解释。解释为什么这个选项是正确的,或者阐述该问答题背后的核心机制。- `extension` (string): 与本题知识点相关的扩展内容,可以是一个相关的概念对比、一个更深入的场景应用问题,或者一个最佳实践建议。#### **示例 (Examples)****选择题示例:**JSON
{"id": 1,"type": "multiple-choice","level": "medium","question": "在 Flink 中,Watermark 的主要作用是什么?","options": ["A) 标记一个数据流的物理结束","B) 表示事件时间流中的进度,并用于触发基于事件时间的窗口计算","C) 限制一个窗口中可以处理的最大元素数量","D) 在数据源端进行数据传输的限速"],"correct_answer": "B","explanation": "Watermark 是 Flink 处理乱序事件流的核心机制。它本质上是一个时间戳,表示“在该时间戳之前的数据应该都已经到达了”。当窗口的结束时间小于等于收到的 Watermark 时,Flink 就会触发该窗口的计算。因此,Watermark 是衡量事件时间进度的标准,是触发窗口的关键。","extension": "思考一下:`Punctuated Watermark` (间歇性水印) 和 `Periodic Watermark` (周期性水印) 有什么区别?它们各自适用于什么样的业务场景?"
}
**问答题示例:**JSON
{"id": 2,"type": "qa","level": "hard","question": "请简述 Flink 的三种 State Backend (状态后端) 的主要区别以及它们各自的适用场景。","options": [],"correct_answer": "1. MemoryStateBackend: 状态存储在 TaskManager 的 JVM 堆内存中,读写速度最快,但容量受限于内存大小,且状态数据在 Job 失败后会丢失(仅用于本地调试和低状态量场景)。\n2. FsStateBackend: 状态仍在 TaskManager 的堆内存中,但会将 Checkpoint 数据持久化到远程文件系统(如 HDFS, S3)。适合状态量较大、需要高可用的任务。\n3. RocksDBStateBackend: 状态存储在本地磁盘的 RocksDB 数据库中,只有 Key 和元数据在内存。支持超大规模的状态,是生产环境中最常用的选择,尤其适合需要长期保留状态的场景。","explanation": "选择 State Backend 的核心是在性能、状态大小和容错级别之间做权衡。内存后端性能最高但最不可靠;文件系统后端提供了可靠的持久化;而 RocksDB 后端则通过磁盘存储和增量 Checkpoint 技术,实现了对超大规模状态的管理和高可用性。","extension": "State Backend 与 Checkpoint 和 Savepoint 之间是什么关系?请说明 Checkpoint 和 Savepoint 的主要区别和用途。"
}#### **生成指令 (Action Command)**现在,请根据以上规则和示例,为我生成一个包含 **10** 道 Flink 面试题的完整 JSON 数组。请确保:- 题目涵盖 Flink 的不同方面,例如:**架构与任务模型、DataStream API、窗口 (Window) 操作、状态管理与容错 (State & Checkpoint)、时间语义 (Event Time/Processing Time)、Connectors**。- 难度等级分布合理,例如包含 3 道 `easy`,5 道 `medium`,和 2 道 `hard`。- 最终输出是一个单独的、格式完全正确的 JSON 代码块。
后续在此基础上又添加了两个功能:
- 疑问问答,可以针对题目提出不理解的知识点,AI会帮助回答
- 题库扩充,之前题库只有10道题,是静态的,现在通过调用API的方式实现题库扩充。
尝试体验了下,非常丝滑,在功能基本完善之后,还可以上传至自己的github仓库,实现版本管控,如果后续丰富功能,可以继续与它互动,生成的新版本,继续保存上传即可