Flink 1. 基本架构 发表于 2020-08-30 分类于 流计算 编程模型Flink提供了不同级别的抽象, 以开发流或批处理作业. ProcessFunction 最底层, 最具表达力的接口 提供了对于时间和状态的细粒度控制 可以用来实现许多有状态的事件驱动应用所需要的基于单个事件的复杂业务逻辑 DataStream API && DataSet API 核心API 提供了通用的构建模块,比如transformations, joins, aggregations, windows等 DataSet API为有界数据集提供了额外的支持 阅读全文 »
Flink 0. 流处理基本概念 发表于 2020-08-26 分类于 流计算 无界流和有界流无界数据流: 持续生成的, 本质上无限的数据集合 数据会随时间的推演而持续增加,计算持续进行且不存在结束的状态 有界数据流: 有限的数据集合 数据大小固定,计算最终会完成并处于结束的状态 状态 我们在设计一个微服务程序的时候, 往往追求服务是无状态的——这是因为要满足快速扩容、弹性缩容的要求。而对于无状态, 实际要求我们的接口满足幂等性-即无论多少次访问接口,同样的输入总能得到同样的输出。这里的状态,指的就是中间计算结果。 但是流计算本质属于’增量处理’, 通常需要不断查询、保持状态; 时间语义 阅读全文 »
LeetCode 977.有序数组的平方 发表于 2020-08-01 分类于 算法日常练习 题目LeetCode 977. 有序数组的平方 思路 最简单的思路是首先遍历数组, 每个值求平方, 然后排序并返回 时间复杂度 = 遍历一次数组O(n) + 调用一次Arrays.sort() 快排O(nlogn)即O(n + n logn) = O(n * logn) 另外仔细审题, 提示已经按非递减顺序排序, 所以说其实数据是由小到大排序的.那么可以得出: 如果数组中没有负数, 那么只需要按顺序求平方并返回结果即可. 负数部分由小到大, 说明它们的绝对值是按由大到小排序的. 阅读全文 »
LeetCode 112. 路径总和 发表于 2020-07-26 分类于 算法日常练习 题目LeetCode 112. 路径总和 思路这道题, 递归和广度优先都可以, 关键在于迭代的时候, 可以通过传递sum与节点值的差值来得到结果. 当差值为0, 代表确实存在这样一条路径. 如果使用额外的数据结构存储每条路径的和, 反而会极大增加代码复杂度. 阅读全文 »
LeetCode 101. 对称二叉树 发表于 2020-07-25 分类于 算法日常练习 题目LeetCode 101. 对称二叉树 思路思路一: 广度优先搜索 分成两个链表, 分别按顺序存储根节点的左右子树的每一层节点 两个链表进行比较, 一个顺序, 一个逆序取出元素, 进行比较 要注意不完全二叉树的null值 思路二: 递归 递归过程: 判断当前两个节点的值是否相等 判断左子树的右节点, 与右子树的左节点, 是否对称 判断左子树的左节点, 与右子树的右节点, 是否堆成 2.递归终止条件: 两个节点都为null 返回true 只有一个节点为null返回false 阅读全文 »
LeetCode 104. 二叉树的最大深度 发表于 2020-07-24 分类于 算法日常练习 题目LeetCode 104. 二叉树的最大深度 思路思路一: 广度优先搜索, 层层遍历思路二: 递归算法, 比较最大值 阅读全文 »
LeetCode 102. 二叉树的层序遍历 发表于 2020-07-23 分类于 算法日常练习 题目LeetCode 102. 二叉树的层序遍历 思路这个实现还是挺简单的, 就是注意下每层迭代的时候, 数组要先清空. 阅读全文 »
LeetCode 145. 二叉树的后序遍历 发表于 2020-07-23 分类于 算法日常练习 题目LeetCode 145. 二叉树的后序遍历 思路后序遍历是按照左-右-根的顺序. 按照根-左-右的顺序将节点入栈, 出栈顺序则是后序遍历的值. 阅读全文 »
LeetCode 94. 二叉树的中序遍历 发表于 2020-07-23 分类于 算法日常练习 题目LeetCode 94. 二叉树的中序遍历 思路中序遍历是按照左-根-右的顺序. 首先要找到左-左-左….的那个节点 打印后, 再判断它有没有右孩子, 若存在则继续迭代, 若无则打印当前节点 打印完毕再从栈中取出之前存入的节点 阅读全文 »
LeetCode 144. 二叉树的前序遍历 发表于 2020-07-23 分类于 算法日常练习 题目LeetCode 144. 二叉树的前序遍历 思路前序遍历是按照根-左-右的顺序. 从根节点开始, 每次迭代弹出栈顶元素, 并将其孩子节点压入栈中, 先压入右孩子再压入左孩子. 阅读全文 »