0%

编程模型

Flink提供了不同级别的抽象, 以开发流或批处理作业.

layered api

ProcessFunction

  • 最底层, 最具表达力的接口
  • 提供了对于时间和状态的细粒度控制
  • 可以用来实现许多有状态的事件驱动应用所需要的基于单个事件的复杂业务逻辑

DataStream API && DataSet API

  • 核心API

  • 提供了通用的构建模块,比如transformations, joins, aggregations, windows等

  • DataSet API为有界数据集提供了额外的支持

    阅读全文 »

无界流和有界流

无界数据流:

  • 持续生成的, 本质上无限的数据集合
  • 数据会随时间的推演而持续增加,计算持续进行且不存在结束的状态

有界数据流:

  • 有限的数据集合
  • 数据大小固定,计算最终会完成并处于结束的状态

状态

我们在设计一个微服务程序的时候, 往往追求服务是无状态的——这是因为要满足快速扩容、弹性缩容的要求。
而对于无状态, 实际要求我们的接口满足幂等性-即无论多少次访问接口,同样的输入总能得到同样的输出。
这里的状态,指的就是中间计算结果

但是流计算本质属于’增量处理’, 通常需要不断查询、保持状态;

时间语义

阅读全文 »

题目

LeetCode 977. 有序数组的平方

思路

  1. 最简单的思路是首先遍历数组, 每个值求平方, 然后排序并返回

时间复杂度 = 遍历一次数组O(n) + 调用一次Arrays.sort() 快排O(nlogn)
即O(n + n
logn) = O(n * logn)

  1. 另外仔细审题, 提示已经按非递减顺序排序, 所以说其实数据是由小到大排序的.
    那么可以得出:
  • 如果数组中没有负数, 那么只需要按顺序求平方并返回结果即可.
  • 负数部分由小到大, 说明它们的绝对值是按由大到小排序的.
    阅读全文 »

题目

LeetCode 101. 对称二叉树

思路

思路一: 广度优先搜索

  1. 分成两个链表, 分别按顺序存储根节点的左右子树的每一层节点
  2. 两个链表进行比较, 一个顺序, 一个逆序取出元素, 进行比较
  3. 要注意不完全二叉树的null值

思路二: 递归

  1. 递归过程:
  • 判断当前两个节点的值是否相等
  • 判断左子树的右节点, 与右子树的左节点, 是否对称
  • 判断左子树的左节点, 与右子树的右节点, 是否堆成

2.递归终止条件:

  • 两个节点都为null 返回true
  • 只有一个节点为null返回false
阅读全文 »