AmiroKDの小屋
10分钟入门Flink--了解Flink
Flink入门系列文章主要是为了给想学习Flink的你建立一个大体上的框架,助力快速上手Flink。学习Flink最有效的方式是先入门了解框架和概念,然后边写代码边实践,然后再把官网看一遍。 https://zhuanlan.zhihu.com/p/642671403 Flink入门分为四篇,第一篇是《了解Flink》,第二篇《架构和原理》,第三篇是《DataStream》,第四篇是《Table Api & SQL》。 官网地址https://nightlies.apache.org/flink/flink-docs-release-1.15/zh/。 1、友情提示 前期入门Flink时,可以直接编写通过idea编写Flink程序,然后直接运行main方法,无需搭建环境。我碰到许多初次接触Flink的同学,被各种环境搭建、提交作业、复杂概念给劝退了。前期最好的入门方式就是直接上手写代码,main方法跑demo,快速了解概念,等入门之后再去实践集群环境、各种作业提交、各种复杂概念。接下来正式进入主题。 2、大白话 说白了,Flink就是个实时处理数据任务的框架,这个框架帮助开发者 ...
Flyway详解(使用说明及避坑指南、一文搞懂flyway)
一、简介 1.1 Flyway是什么? Flyway是一款开源的数据库版本管理工具,可以实现管理并跟踪数据库变更,支持数据库版本自动升级,而且不需要复杂的配置,能够帮助团队更加方便、合理的管理数据库变更。 例:创建两个sql变更文件,项目启动后会将两个文件中的sql语句全部执行。 1.2 为什么使用Flyway? 简单举个例子:开发时,如果A开发和B开发都对同一数据库进行了修改,那么如何进行数据同步呢?假如多个开发人员都修改了sql脚本,怎么同步到测试环境和生产环境? 类似于以上的情况在日常开发中不胜枚举,在最开始的单体架构中,我们公司采用了通过校验数据库版本号来实现sql的变更,这虽然能够解决大部分问题,但每次都需要维护变更sql的代码和数据库版本号,且对于后续服务上云也是十分不便的。因此我们需要对数据库校验的方案进行调整,就去调研了目前市面上比较流行的Flyway和Liquibase,综合对比下来,最终选择了Flyway作为后续的数据库版本管理工具,具体差异如下: 1.3 Flyway的工作原理 Flyway在第一次执行时,会创建一个默认名为flyway_schema_histo ...
一文快速入门 ClickHouse
什么是clickhouse ClickHouse是一种OLAP类型的列式数据库管理系统,这里有两个概念:OLAP、列式数据库。这两个概念会在接下来做介绍,ClickHouse完美的实现了OLAP和列式数据库的优势,因此在大数据量的分析处理应用中Clickhouse表现很优秀。 国内阿里云在全托管服务上使用ck、思科在流量分析上使用ck、虎牙在视频流的分析上使用ck、腾讯在通讯的日志记录上和大数据的数据处理上使用ck、喜马拉雅在音频共享上使用ck,还有更多的国内外厂商开始使用ck。 clickhouse在官方文档**https://clickhouse.com/docs/en/intro/**上有一些教程文档。 列式数据库 在传统的行式数据库中,数据在数据库中都会按行存储,常见的MySQL、Oracle、SQL Server等数据库都是行式数据库。行式数据库的存储方式如下 在列式数据库中,数据是以列进行存储的,列式数据库更适合于OLAP场景,常见的列式数据库有hbase、clickhouse、Vertica等。列式数据库的存储方式如下 不同的存储结构适用于不同的业务场景,列式数据库适 ...
关于dpdns.org绑定vercel失败问题
关于dpdns.org绑定vercel失败问题 当Vercel出现三级域名认证出现问题的时候 在cloud flare中填写_vercel和 _vercel.xxx两个txt类型的信息 即可通过验证
认证授权
1 模块需求分析 1.1 什么是认证授权 截至目前,项目已经完成了课程发布功能,课程发布后用户通过在线学习页面点播视频进行学习。如何去记录学生的学习过程呢?要想掌握学生的学习情况就需要知道用户的身份信息,记录哪个用户在什么时间学习什么课程,如果用户要购买课程也需要知道用户的身份信息。所以,去管理学生的学习过程最基本的要实现用户的身份认证。 认证授权模块实现平台所有用户的身份认证与用户授权功能。 什么是用户身份认证? ​ 用户身份认证即用户去访问系统资源时系统要求验证用户的身份信息,身份合法方可继续访问。常见的用户身份认证的表现形式有:用户名密码登录,微信扫码等方式。 项目包括学生、学习机构的老师、平台运营人员三类用户,不管哪一类用户在访问项目受保护资源时都需要进行身份认证。比如:发布课程操作,需要学习机构的老师首先登录系统成功,然后再执行发布课程操作。创建订单,需要学生用户首先登录系统,才可以创建订单。如下图: 什么是用户授权? ​ 用户认证通过后去访问系统的资源,系统会判断用户是否拥有访问资源的权限,只允许访问有权限的系统资源,没有权限的资源将无法访问, ...
【AmiroKDの算法日记】102-二叉树的层序遍历
102. 二叉树的层序遍历 给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。 示例 1: **输入:**root = [3,9,20,null,null,15,7] 输出:[[3],[9,20],[15,7]] 示例 2: **输入:**root = [1] 输出:[[1]] 示例 3: **输入:**root = [] 输出:[] 提示: 树中节点数目在范围 [0, 2000] 内 -1000 <= Node.val <= 1000 📖 文字题解 方法一:广度优先搜索 思路和算法 我们可以用广度优先搜索解决这个问题。 我们可以想到最朴素的方法是用一个二元组 (node, level) 来表示状态,它表示某个节点和它所在的层数,每个新进队列的节点的 level 值都是父亲节点的 level 值加一。最后根据每个点的 level 对点进行分类,分类的时候我们可以利用哈希表,维护一个以 level 为键,对应节点值组成的数组为值,广度优先搜索结束以后按键 level 从小到大取出所有值,组成答案返回即可。 考虑如何优化空 ...
【AmiroKDの算法日记】24-两两交换链表中的节点
24. 两两交换链表中的节点 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。 示例 1: **输入:**head = [1,2,3,4] 输出:[2,1,4,3] 示例 2: **输入:**head = [] 输出:[] 示例 3: **输入:**head = [1] 输出:[1] 提示: 链表中节点的数目在范围 [0, 100] 内 0 <= Node.val <= 100 方法一:递归 思路与算法 可以通过递归的方式实现两两交换链表中的节点。 递归的终止条件是链表中没有节点,或者链表中只有一个节点,此时无法进行交换。 如果链表中至少有两个节点,则在两两交换链表中的节点之后,原始链表的头节点变成新的链表的第二个节点,原始链表的第二个节点变成新的链表的头节点。链表中的其余节点的两两交换可以递归地实现。在对链表中的其余节点递归地两两交换之后,更新节点之间的指针关系,即可完成整个链表的两两交换。 用 head 表示原始链表的头节点,新的链表的第二个节点,用 newHead 表示新的链表的 ...
【AmiroKDの算法日记】19-删除链表的倒数第 N 个结点
19. 删除链表的倒数第 N 个结点 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 示例 1: 12输入:head = [1,2,3,4,5], n = 2输出:[1,2,3,5] 示例 2: 12输入:head = [1], n = 1输出:[] 示例 3: 12输入:head = [1,2], n = 1输出:[1] 提示: 链表中结点的数目为 sz 1 <= sz <= 30 0 <= Node.val <= 100 1 <= n <= sz **进阶:**你能尝试使用一趟扫描实现吗? 暴力做法 123456789101112131415161718192021222324252627282930313233/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int ...
【AmiroKDの算法日记】21-合并两个有序链表
21. 合并两个有序链表 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1: 12输入:l1 = [1,2,4], l2 = [1,3,4]输出:[1,1,2,3,4,4] 示例 2: 12输入:l1 = [], l2 = []输出:[] 示例 3: 12输入:l1 = [], l2 = [0]输出:[0] 提示: 两个链表的节点数目范围是 [0, 50] -100 <= Node.val <= 100 l1 和 l2 均按 非递减顺序 排列 📖 文字题解 方法一:递归 思路 我们可以如下递归地定义两个链表里的 merge 操作(忽略边界情况,比如空链表等): {list1[0]+merge(list1[1:],list2)list2[0]+merge(list1,list2[1:])list1[0]<list2[0]otherwise 也就是说,两个链表头部值较小的一个节点与剩下元素的 merge 操作结果合并。 算法 我们直接将以上递归过程建模,同时需要考虑边界情况。 如果 l1 或者 l2 一开始 ...
avatar
🐟认真摸鱼中
AmiroKD
曾以为走不出的日子,现在都回不去了。
前往小窝
公告栏
没想到做个博客也不简单🥲
小站资讯
文章数目 :
31
本站总字数 :
12.5w
本站访客数 :
本站总访问量 :
最后更新时间 :
空降评论复制本文地址
随便逛逛昼夜切换阅读模式关于博客美化设置切换全屏打印页面