自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(85)
  • 收藏
  • 关注

原创 再说连续性问题

连续问题是判断在某个期间,某些动作(状态)是否连续出现。在帖子连续性问题中, 已经提到了用户连续登录、最大假期等。这些问题的解法是使用大小等差数列相减的办法。其实还有一种算法可以解决此问题,它就是合并集办法。合并集往往使用在计算二维数组的连通性问题,例如,leetcode 的 friend-circle 和 island-size 两个问题。并查集能解决二维数组的问题,那么一维数组的问题一定也能完美解决,在之前文章中提到的连续性问题就是一维数组上的连通性问题。

2024-04-26 11:30:42 344

原创 哈夫曼编码的实现

讲了半天,哈夫曼编码和字符集有什么关系呢?大家仔细观察,英文的字符,有的使用比较多,有的比较少,能不能使用比较短的比特为表示比较常用的字符呢?这些编码集合,本质上都是一个二进制和字符之间映射关系,拿最简单的 ASCII 来说吧,使用 0x30 代表字符 0 ,0x31 代表字符 1,当打印设备看到 0x30 后,就打印出字符 0 了。ASCII 最初是由美国弄出来,他们使用的英文,所以只考虑了英文中的字符,那还有很多字符,比如,阿拉伯文字、俄文这些文字怎么表示,于是就有了 UTF-8 这些。

2024-04-17 22:41:15 319

原创 有依赖的的动态规划问题

例如,兔子数列:f(x) = f(x - 1) + f(x -2), 我们知道 f 代表了计算公式,这里解放思想一下,如果 f 替换为数组,将每个 f(x) 的返回值返回,那么是不是就不用计算了,直接返回了,这样就节省了 CPU 递归和计算的时间,提高计算的效率,这样就对递归进行了优化。经典的 0-1 背包问题。它题目往往是这样有两个一维数组,第一个代表了容量,第二个代表价值,给定一个 N 正整数值,N 值是背包能装的容量,数组的一个元素代表了一个物品,一个物品只能装一个,问背包能装下的最大价值是多少?

2024-04-15 17:33:42 748

原创 表达式求值

加减乘除带括号表达式求值

2024-03-29 18:55:47 256 1

原创 Spark的数据结构——RDD

在 compute 中并没有从依赖中取出迭代器,而是调用了 ShuffleManager#getReader 方法,这是因为 combineByKey 是做分区操作的,所以要将相同 key 的数据通过网络发送到不同的机器上,其实就是 Map-Reduce 计算引擎的 shuffle 过程,这里也是一样的,这也是 ShuffleRDD 名称的由来。还有更重要的一点,就是第二个特征,作用在分区上的函数,RDD 加上 PairRDDFunction 上的函数有很多,可以在上一篇。我们只捡能说明问题的就行了。

2024-03-13 14:50:49 741

原创 Spark 核心API

这两个函数是 PairRDDFunctions 的匿名类中的函数,从 PairRDDFunctions 的名称中可以知道,PairRDDFunctions 是真的键值对的,也就是说 RDD 中的数据是键值对的时候,我们可以调 PairRDDFunctions 的函数,scala 这个功能好像类的被动技能。action 算子是真正出发计算的算子,在 action 算子之前, 所有的算子就像流水线上的一个工序,按照我们想要的结果设置好了加工模具,action 才能够决一个 job 的开始。就看一下它的入参吧。

2024-03-08 08:57:31 1137

原创 Hbase 的三个应用

上述代码利用了 Hbase 的 checkAndMutate 功能,先检查 cust 是否存在,如果存在则返回 true ,用户需要被屏蔽,如果不存在,则返回 false ,并将用户插入到 Hbase table 中,整个过程是原子性的。在多个节点同时运行这段代码时,每个节点都可以生成一个唯一的序列号,以确保生成的序列号在整个分布式系统中是唯一的。在获取到锁之后,执行用户指定的函数,然后通过用户输入来释放锁的状态。它通过自旋操作来等待锁的释放,并尝试获取锁,以保证共享资源的访问的一致性和正确性。

2023-12-31 17:55:13 720

原创 袋鼠云的FlinkSQL插件开发

这里所说的插件是可以理解为自定义的语法。dim_shop 可能是一个 redis 为实体的 Table ,这袋鼠已经为我们实现了,现在我们可能从 HTTP 的接口拿到数据,此时的话,我们可以自定义一个 HTTP Table ,然后上面的代码不用修改。

2023-10-24 16:31:24 1120

原创 正则表达式替换占位符

如何从下面的一个字符串中解析除占位符,并根据变量的类型替换。

2023-10-11 22:12:19 555

原创 如何保证 flink-connector-elasticsearch 的幂等性

flink elasticsearch sink 幂等性

2023-07-01 23:35:08 661

原创 KafkaConsuner 指定开始消费的位置

需要在执行了 poll() 方法之后才行。我本来想指定一个开始位置,但是还没有指定位置呢?在我们探讨的功能中,index和timeindex两个文件扮演着关键角色,它们与消费者开始消费的位置密切相关。这是我们今天要讲解的核心基础,没有这两个文件,我们无法进行后续的操作。就用了,FlinkKafkaConsumer 不是从 checkpoint 消费,就能是手工指定的位置消费了。才能获取到偏移的位置,否返回一个 size() = 0 的 map。的方式,指定了消费者的消费位置,这样以来,

2023-06-06 22:46:26 2275

原创 Flink Stream 处理数据倾斜

Flink 数据倾斜

2023-04-16 12:40:31 363

原创 Hash一致性算法蜻蜓点水般的实现

蜻蜓点水般的实现 hash一致性算法

2023-03-01 16:39:36 135

原创 Redis 的两个应用

redis 的两个分布式场景下的应用

2023-02-26 18:47:29 74

原创 Flink 的算子介绍(下)

Flink 算子

2023-02-24 14:24:57 309

原创 Flink 的算子介绍(上)

Flink 算子用法总结

2023-02-24 11:28:53 940

原创 模拟分布式事务

分布式事务

2023-02-19 16:13:31 85

原创 zookeeper 的 Watch 功能三种应用场景

zookeeper wacth 管理节点的高可用 分布式系统中的配置热部署 分布式锁

2022-11-10 21:48:56 1031

原创 MySql事务原理

ACID MySql

2022-10-12 21:29:13 432

原创 Java 栈帧的一个面试题

栈帧的结构

2022-08-12 16:05:22 219

原创 集合相关的知识点

ArrayList 的扩容规则newElementSize - elementData.size > 0 ,说明需要扩容了,否则的话不需要扩容。一般的情况下,扩容大小为原大小的 1.5 倍 , 这里使用了一个小技巧,elementSize + (elementSize >> 1) ,>> 1 其实就是除2的操作,但是 >>1 的执行效率比较高。取比例扩容的值和实际需要的大小的最大值作为本次扩容值。如果使用 add , 基本上使用比例扩容就可了。如果 addAl

2022-03-30 23:51:21 354

原创 重学常见排序算法

最常见的有冒(冒泡)择(选择)路(插入)希(希尔)快(快速)归(归并)堆(堆排序)。 这一次把所有的常见的排序熟悉一遍,后面就一劳永逸了。冒泡算法连接:https://www.bilibili.com/video/BV1Mi4y1k7QT/冒泡排序算法的文字描述:一次比较数组中相邻两个元素大小,若 a[j] > a[j+1] , 则交换两个元素,两两都比较一遍为一轮排序,结果是让最大的元素排至最后。重复以上步骤,指导整个数组有序。先实现一版最简单。import java.util.

2022-03-28 22:10:46 239

原创 各种同步器的实现原理

我们可以把是实现的原理分成两部分,一个是修改 state 的部分,也就是 AQS 的实现类是如何实现 tryAcquire() 方法;另外一个入队列和出队列的逻辑。其中前一个是都不相同的,后面一个是基本相同的。先来看看,ReentrantLocktryAquire()// 有两个,一个是公平锁,一个非公平锁static final class FairSync extends Sync { private static final long serialVersionUID = -30008

2022-02-13 21:54:44 1128

原创 AQS对基本概念的实现

非公平锁公平锁如何实现的呢?我们来看看 ReentranLock 中的 NonfairSync 类,这个类中就实现了对非公平锁的实现。final void lock() { if (compareAndSetState(0, 1)) setExclusiveOwnerThread(Thread.currentThread()); else acquire(1);}这段逻辑中,我们可以发现,线程是直接取修改 state 的状态,这代表竞争锁,如果竞争到

2022-02-13 21:53:25 274

原创 AQS 的基础方法

AQS 到底是什么东西AQS 解决的是申请锁和进程间通信的问题。在 AQS 出现之前,锁只能用 sychronized , 进程间通信只能使用 Object#wait/waitAll 和 Object#notify/notifyAll 来进行线程之间通信问题。wait/notify 的缺点是等待的线程需要进入阻塞状态,再 I\O 任务的场景下,这种需要阻塞线程的方式效率是不高的。自旋的方式可以提供这种效率。如果有一个基础的类。在它的基础上我们可以实现公平锁、非公平锁、可重入锁、不可重入锁、独享锁、共享锁

2022-02-13 21:51:30 505

原创 关于 J.U.C 的基本概念

一些基本的概念乐观锁和悲观锁乐观锁是在使用资源之前不上锁的处理方式。悲观锁是在使用资源之前要上锁。乐观锁和悲观锁的定义是使用场景来说。 在资源竞争不激烈的情况下,说明资源比较充足,我们保持一种乐观的态度,所以在使用之前不用上锁。悲观锁是在资源竞争激烈的情况下,说明资源竞争比较激烈,所以在使用资源之前要上锁。上锁之后的目的就是告诉前来竞争的线程,你们不用抢占资源了,这个资源在用了,而且用的时间不会短,你就去排队吧。公平锁和非公平锁公平锁就是获得锁的机会大家都是一样的,大家都在一种 FIFO 的队列里面

2022-02-13 21:46:30 728

原创 整数的计算

功能介绍输入计算整数加减乘除的字符串。解析并计算,得到结果。代码 /** * 解析计算公式里面的括号。 */ private static void bracketHandler(String input){ ArrayDeque<String> ad = new ArrayDeque<>(); String cal = "" ; char[] chars = input.toCharArray();

2021-11-23 09:16:43 127

原创 Kafka 面试题目

第一题Kafka数据积压如何处理?首先来分析一下积压的原因。总体上来说,造成挤压的条件是生产者生产数据的速度大于了消费者的速度。一般使用 rps 来表示。生产者这一端,一般连接的是业务系统,我们可以给业务数据根据重要性来分级,如果在数量超大的情况下,我们可以将一些低重要级的数据分流到其他的 kafka 上面,优先保证重要数据的处理。我们能做的就把消费者的速度搞上去。在消费者这边,可以分成两段来分析,一个是 KafkaConsumer ,一个是 data processer 。造成前者消费速度较生产者慢的

2021-10-24 21:40:19 680 1

原创 Kafka 端到端数据完整性

完整性如何保证数据的端到端的数据完整性?这里说的完整性,就是说“不丢数据”,这里是不丢数据的意思。这里没有保准数据的一致性。也就是说,sink 端收到的数据可能是重复的。如果要保证完整性,需要再 producer 端、broker 端、consumer 端,这三个地方下功夫。producer 端producer 端可以有两种发送方式,一个是只负责发送,至于 broker 收到没有收到那就不管了。另外一种类似 TCP 协议,每一个 TCP 包都会有一个 ACK 回复,收到 ACK 才确定这条数据发送

2021-08-23 22:12:43 544

原创 FlinkKafkaProducer 数据一致性

什么是数据的一致性这所说的数据一致性指,在一个 Flink 任务遇到不可坑因素整体死掉或者部分死掉,已经外部存储介质死掉后,将死掉的部分重写启动后,计算结果和出现故障之前一致,不会产生任何的影响。如果要实现这种效果,无论发生什么,所有算子做到如下要求:source 算子中,一条记录只向下游发送一次。在聚合算子、合集算子、转换算子中一条数据只处理一次。在 sink 算子中,一条数据只向外部存储介质中写入一次。只要做到这些,我们就可以说,我们整个任务的数据是一致的。今天就把 Flink 自己封

2021-06-16 17:09:19 585

原创 如何优化IF/ESE的结构

如何简化多层 if/else目前总结了三种简化多层 if/else 的方法:多态的方式。图结构解决语法树多态方式。多态的方式利用 Java 对象多态的特性。如下所示样式的语句。public void method(flag){ if(flag == var1){ //do_something }else if(flag == varr){ // do_something }else{ // the last choi

2021-05-31 08:41:13 156

原创 补码的原理

怎么就想到这里了看了一道面试题目,如下所示:byte b = (byte)129;System.out.println(b);问输出结果。这个题目考察了四个知识点:整数的字面量默认是 int 类型的。而 int 类型占 32 个 bit 。byte 类型的是 8 ge bit 。能够表示的最大正整数是 127.补码的计算公式。强制类型转换129 = 2 的 7 次方 + 1所以在内存中的表示为: 0000 0000 0000 0000 0000 0000 1000 0001b

2021-05-15 18:13:46 697

原创 一个算法题目

题目假设有一个数组,里面是正整数,找出里面缺少的最小梳子

2021-03-30 15:23:05 96

原创 空间换时间

数据拉宽日志变交叉表多表 join数据清洗预计算

2021-03-15 05:57:57 2398

原创 调度系统的几个核心功能

调度系统是什么先从调度说起,调度就是为每件事情,合理的安排时间。具体得说就是在合理的时间开始,耗费合理的时间完成。举个例子:11:00~12:00 在这期间把销售数据跑出来。13:00~14:00 在这期间把拉新的数据跑出来。等等吧。那还有问题,如果销售数据在跑的时候,出现了问题,导致数据在12:00之前没有跑出来,调度系统应该如何出来?再有如果拉新数据依赖于销售数据,也就是说销售数据跑出来,拉新数据才能开始跑出来,调度系统应该如何处理这种一来关系呢?另外我们现在只举出了两个例子,在真实的工作

2021-02-21 10:18:12 5232

原创 算法:去环行动

题目假设我们有如下数据:A B C D E C F G C 先使以 G 来分割这个 list ,如果是上面的数据,则得到如下两个 list :1. A B C D E C F G2. C 这个题目其实就是 Java 中 String 类中的 split 方法类似的功能。我倒是想出了一个类似递归的方式来解决这个问题,步骤如下所示:使用 list 的 contain 方法,判断 G 是否在 list 里面。如果 G 在数组里面,则使用 indexOf 找出 G 所在的位置 i。使用 s

2021-01-19 20:07:53 155

原创 Flink——理解 allowLateness

什么鬼WindowOperator 里面还有有一个叫做 allowLateness 的东西,这个东西什么鬼呢?简单来说就给迟到的数据第二次机会。我允许它迟到一定的时间。在规定的迟到时间内,只要要数据来了,就会触发第二次窗口计算,那到什么时候就没有第二次机会了呢?下面我们来娓娓道来。allowLateness 的逻辑过程二话不说,先来看一下下面的代码,在这段代码中,```javaWindowOperator 中的成员变量 /** * The allowed lateness for

2020-11-23 12:32:13 516

原创 Flink_Trigger_Flink 中的响指

在上篇文章中,我详细讨论了 Flink 是如何为 record 分配窗口的。接下来我们就要讨论一下什么时机触发对窗口的计算了。这就像响指的功能,当集齐五个石头后,什么时候毁灭宇宙一半的生命呢?大家都知道了, 还差一个响指。我们今天讨论的触发时机,和响指的功能差不多,在 Flink 中,Flink 的开发者给他起了一个非常形象的名字——Trigger。请看下面的图片, Trigger 就是手枪的扳机。扳动扳机就能射出子弹,在 Flink 里面,Trigger 类决定了,是否对窗口中的数据进行计算,并将计算结

2020-11-23 09:03:45 521

原创 Flink_窗口的底层实现逻辑

目的写这篇文目的是为了加深对窗口和 watermark 的理解。先感谢这位博主的辛勤劳动。我做的分析就是基于这位大侠做的。下面上正题。正题窗口总体流程窗口是用来切割无线流的,它把无线流切分成有限个碎片,通过计算碎片来计算流的某些性质。就像积分计算求球的体积。它将从球新到表面扇柱体是一个正方体,然后使用极限的思路,然后就计算出球体的体积。根据不同的需求,我们有下面几种窗口类型。数据流是无限的,我们可以统计每 n 个单位时间内的一些统计值。这就是 Tumbling 窗口。我们也可以每隔 3

2020-11-22 17:32:15 625

原创 又来一道面试题——用 SQL 来写个小九九

题目要求使用 sql 写出 8 进制的小七七,如下图所示,题目分析什么就小七七,我只听说过小九九,哦,对了,我们之前小学的时候背诵过小九九,那是 10 进制,这样看来的话,我们就知道了,这个题目是让我们使用 8 进制下以内得乘法法则。先搞小九九sql 代码如下(hive版本),with detail as ( select explode( split(repeat(',',8),','))),detail_rn as ( select row_number() over() as rn

2020-10-03 22:05:25 148

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除