自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 剑指offer,打印从1到最大的n位数

【代码】剑指offer,打印从1到最大的n位数。

2024-07-09 22:07:43 117

原创 Clickhouse的联合索引

所以假如我们查询url <=w3 的数据,那么我们就可以看看相邻的两个grandule的最后一个url的值和第一个url的值;如果第一个url的值是w3, 第二个url 的值是w4,那么我们需要搜索的grandule 就只有前面的第一个grandule 和 之前的grandule 里面了,如法炮制,对着前面的所有的grandule,使用二分法,就可以在小于等于 o(logn)的时间复杂度找到对应的grandule;但是联合索引的效果就真的好吗,这个取决于第一列索引的基数,什么是基数呢?

2024-07-09 22:00:38 643

原创 Flink,spark对比

最终打包成一个zip包上传。它的目的是为了控制一个taskManager 能运行多少个task,所以对资源进行了分配,划分成不同的slot,一般和cpu是1:1 的关系,所以一个算子分布在不同的taskManger 上面,在一个tm的并行度和slot是一比一的关系,那么全局的并行度就是我们自己设置的并行度了,不过我们在考虑的时候就是考虑单个tm里面的并行度好点;其实Flink 和Spark 也会进行数据的落盘,但是他们和mr的最大的本质不同就是他们可以把数据放在内存中,最后再落盘,而MR一定会落盘;

2024-07-06 17:44:31 973 1

原创 数仓的随想

6.7: 数仓分层,ods, dwd, dws, ads,前面三个才是数仓里面的东西,dws 是数据服务层,说白了就是根据一个个主题汇总起来的,做的是轻度汇总的工作,一般以日为单位进行汇总,比如日活跃设备数,日下单数,日注册用户数;5.1: 第一范式,1NF,属性不可切割,比如,某个表里的字段叫做商品,但是值不可能是5台电脑,因为5台应该是另一个字段的值,比如数量的字段;1.1:选择业务过程,选择我们感兴趣的业务作为整个数仓的分析的底层数据,比如下单业务,物流业务,售后业务,快递业务等等;

2024-06-30 15:50:40 459

原创 大数据Spark 面经

所以兄弟们可以看到,说白了,我们进行spark的编程的时候,就是基于RDD的,然后和算子一起,把RDD当作点,这些算子当成边,不就构建成了我们的这个有向无环图(DAG) 嘛;大家可以想想,这个spark的RDD 也是基于内存的计算,如果一个任务一直这样计算下去,比如算到90%的时候,机器突然宕机了,任务全部失败了,是不是又得重新计算,所以我们就要进行个中间数据的备份嘛,比如算完了一个stage的数据,先把它存储到外部系统,这样就不怕任务突然中断了;这两个算子分区内的逻辑和分区间的逻辑都是一致的;

2024-06-30 15:49:55 711

原创 大数据java面经一

15:什么是CAS 算法,就是比较并交换,CAS(V,E,N),v 就是这个变量,表示要更新的值,E 就是预期值,旧的值;5.8: 结构型模式之桥接模式,将抽象部分与它的实现部分分离,使得都可以互相变化,解决子类爆炸的问题,比如生产不同类型的车如果都放在一个生产线上,会相当的复杂,所以就抽象出来,搞发动机的一条线,搞电机的一条线,搞车载系统的一条线,然后生产之后组装起来,桥接模式里面都是定义的接口和类的组合。就是个资源让出的结果嘛,要么当前线程被阻塞了,被挂起了,正常执行完了等。

2024-06-16 11:32:08 885

原创 大数据Hive,Flink等面经

分布式快照参考的算法是Chandy-lamport的算法,其中最重要的一个机制就是checkpoint ,就是检查点,它就像一个守门员似的,当每批人经过它,它都会给大家插入一个编码,编码是递增的;就不用进行频繁的shuffle了,极大地提高了数据处理的速度;全称是Flink Complexible Event Processing, 就是复杂事件处理,它的流程就是设定一个源源不断的规则,对进来的事件流做个判断,如果有符合相关判断的事件就收集起来,然后做个告警,分别有patter,event等关键概念,

2024-06-16 11:31:02 1072

原创 Flink CDC 实现原理

如果后期有个binlog的chunk 过来,比如是105,150和160的数据发生了变化,那么我们就会针对相应的值改动,并不会改动全部的值,改动效率就比较高了;简单点来说,就是一旦开启同步数据的事务了,Debezium 就会对全局加锁,先把当前加锁的这个时间点的全部数据select 出来,这需要一点时间的,然后这个时间节点的select 事务啊,update 事务啊,都会被阻塞,严重的时候会导致mysql 的整个进程都被hang 住了,提供不了服务了,所以我们Flink 就要进入2.x 时代。

2024-06-16 11:02:17 487

原创 别傻傻分不清SAS,SATA和SSD

协议,哈哈哈,兄弟们就可以理解为我们电脑要往硬盘中装东西,可以有几个通道,通道多是不是效率高,而且装东西的时候是不是类似要经过保安检查啥的,这个就是约定了,就是我们所说的协议了。哈哈哈,所以兄弟们就迫不及待地选择固态硬盘了是吧,别急,也得看你有没有钱了,固态硬盘好是好,但是价格肯定就是同级别容量下的机械硬盘的几倍;相信很多兄弟们之前听过硬盘,什么机械硬盘,固态硬盘,什么SATA硬盘,SAS,心里都在想,这tm地该怎么选?首先,兄弟们要知道,硬盘这个东西就是存储数据的,一个容器,帮你把数据都装进去的。

2024-06-15 09:54:00 194

原创 Kafka 如何保证数据可靠

对头,所以这就涉及到一开始分区的副本的leader 和follower 之间通信同步数据的问题,假设producer 发送一条消息到topiA 的partition-0,它有三个副本,我们要保证数据可靠肯定要确保老大leader把数据拿到手了,告诉了其他的副本兄弟之后,然后给producer 发送一个ack 表示确认消息已经收到了,你开始发送下一条消息吧,哥们。如果不怎么同步又会说你tm符合cap 定理嘛;所以这就涉及到了我们的topic 的分区的副本机制了,副本就是做容错的嘛,即使老大挂了,副本顶上。

2024-06-10 22:58:52 864 1

原创 Java 的设计模式(一)

说白了就是一个类只有一个对象实例,哈哈哈,不管谁去调用这个类,都是这样的,就是天王老子调用也是哈哈哈哈。3.2: 简单工厂模式,就是指定个生产线(这里是某个类),专门生产某种产品(这里也是某个对象实例),说白了就是某个类生产出其他对应类的对象实例。兄弟们都知道Java中有很多常见的设计模式,最全的是有23种设计模式,但是在工作中用到的也不是有那么多,我们就先来介绍下最常见的10中设计模式吧。工厂工厂,不就是根据需求生产出来所需要的产品吗?上述第三个有点问题,所以我们用电更高效的,内部类模式,如下所示。

2024-06-09 11:46:59 236

原创 线程并发随想

java 中出现volatile 就是为了打造一个更轻量级的锁,不要像synchronized 那样那么重,volatile 一般是用来修饰变量的,它保证修饰的变量修改了在所有线程中都是立马可见的的,说白了它就是在主内存中把这个变量修改,不是放在每个线程的cpu的高速缓存中读这个变量,(变量可见性)AQS 里面有两个关键点,一个是state,一个是阻塞队列;对这个变量的操作都是原子性的,在这里理解就是基本只有一步操作的,原子性说的是要么全部执行,要么都不执行,某个操作过程,这里对变量加了一把小锁;

2024-06-08 12:19:09 634

原创 浅谈线程池

兄弟们都知道,我们在搞多线程并发的时候,刚开始的时候是通过实现Runnable 接口或者 继承Thread 的类来构建线程的,但是这个线程创建和消费一般比较费资源,所以我们业界也就出现了使用线程池的方式,一个是可以复用线程执行任务,一个是可以不用频繁的创建消费线程。这个一看就是创建固定线程的线程池,如果池里面的线程都在执行任务,新的任务进来了就需要等待了;这个说白了就是一个需要时可以创建新的线程的线程池,而且没有固定数量,如果之前的线程还在就可以复用,而且会自动清理掉超过60秒以上没有使用的线程。

2024-06-06 22:46:49 162

原创 一文讲透java 集合

Set 说白了就是个无序的集合,这里的无序指的是放入的顺序和取出来的顺序不是一样的,比如某个元素a是第一个放入集合中的位置,但是你进入集合的第一个位置并不一定是元素啊,这就是说的Set 的无序,而且放入的元素是不会重复的。就是说HashMap 中的两个key值最终算出来的hash值是一样的,这不就冲突了嘛,那么这个后来的值覆盖前面的值,前面的值说凭啥啊,java官方说是的啊,不应该啊,这样可不就会丢掉元素,所以就让后来的值排在新来的值后面,这就形成了一个链表了。如果是2的n次幂,则求余运算是一样的。

2024-06-04 08:32:42 532

原创 常见的排序算法

所以我们的冒泡排序的核心思想就是在一个队列里面,从第一个哥们开始,如果第二个哥们比前面的矮,那么两个人交换位置,如果不矮就比较第二个哥们和第三个哥们的高度,依次类推,这样比较到最后,最高的那个哥们就被冒出来了排到最后了;这是第一轮冒泡,后面继续从第一个哥们开始,这次只要到倒数第二个哥们结束就行,这样就把第二高的哥们放到倒数第二高的位置了,反复进行,最终一列的哥们就是从矮到高了;那就是说我们要排序的话,就要从现有的还是混乱的队列中找到这个最小的元素,让他和这个现有的混乱的第一个元素进行交换;

2024-06-02 11:38:28 334

原创 浅谈JVM的类运行机制

解析就相当于把那些常量一一组合起来,然后相应的东西就有地址或者句柄啥的,这就是我们说的直接借用,然后变成相应的一个类名,方法,让类可以找到方法,方法可以找到类;.jar 里面的所有的class,哈哈哈,其他的class 它是不管的;类加载器说白了就是在jar包里面找到某个名字为xxx的class 的类文件,然后对这个文件进行解析,把这个类的一些静态方法,静态变量,对象,方法啥的放在jvm的内存里,这就相当于完成了一次我们所谓的加载,然后类的加载遵循个规则,兄弟们,叫做双亲委派模型。

2024-06-02 11:37:23 733

原创 Java 中的IO/NIO详解

一:Java IO 模型兄弟们,什么是Java的IO呢?首先我们看看这两个单词的全拼,不就是Input 和Output嘛?那么到底是什么的输入和输出呢?本质上在互联网的世界中,不就是数据的输入输出吗?而我们java 中对于数据的这个输入和输出都是基于线程来说的,那么线程在接收这个数据的输入和输出的时候线程的状态是怎么样的呢,在一直等待还是说先干自己的事,等数据来了再去接收这个数据呢?所以这个就涉及到了我们的这个IO模型了。它分为下面几种

2024-06-01 15:40:00 302

原创 数据结构中的线性表

顺序表里最常见的就是数组,不过还有分成了引用数组和动态数组,数组它是一系列相同类型的元素的集合,里面的元素类型必须一样,存放的都是比如五根笔,六本书,七台电脑这样的元素;说白了,就是这个动态数组的长度是会动态变化的,刚开始比如你申请了长度为6,实际上它的实际内存空间里面有10个元素的长度供你使用,比较常见的动态数组就是Python里面的List 和Java中的ArrayList。这个数组里面存的全是其它元素的地址,其实它本质上也是数组,不过存放的元素全部是其它元素的地址了,限定死了咱就是说;

2024-05-28 21:54:46 394

原创 JVM中的垃圾收集器

前面我们说到了,GC老大爷是统一管理维护这些垃圾清理的工作的,但是活不可能让老大爷干吧,这老胳膊老腿的,也不太能干的动啊,老大爷主要是做工作指导和工作分配,具体工作还得是我们一个个垃圾收集器去干,就像总裁下面有不同的秘书,有写报告的,有负责生活起居的,有开车的司机,有负责订酒店的等等,所以GC老大爷手下也有不同的垃圾收集器,让我们一同看看。经过了第二步之后,可能程序继续运行,某些对象的标记发生了变化,这个变化的记录那的确需要记录下来,这个时候也是需要停止其他的工作线程,为后面的清除做准备。

2024-05-26 17:41:07 673

原创 java的垃圾回收机制

哈哈哈,你大爷不愧是你大爷,讲的还挺清晰, 兄弟们是不是意犹未尽啊,不过是不是还有个疑虑,什么叫做不活跃的小屁孩,大爷说,“孺子可教也,这个是关键,不活跃的小屁孩可不就是生产线(线程)再也不太用的人力吗,就是对应我们书本上说的引用,你的作用都没了,不清理你清理谁,哈哈哈,感觉有亿点点残忍啊!所以给本大爷好好听话,乖乖接受监督。2: 本地方方法区和栈就不用说了,人会有自动入栈和出栈操作,当一个线程结束后,这个栈就空了,多自觉,都不用我催,而且人平时存储的就是一些局部变量和操作栈而已,字节数估计就三四个字节。

2024-05-26 09:57:44 902

原创 JVM 中的内存分配

2: 虚拟机栈,先给结论,这个也是线程私有的,为什么呢,首先我们来看看这个虚拟机栈里面包含了什么东西。随着一个方法的开始执行到结束,就是一个栈帧出入虚拟机栈的过程,而这个局部变量表当然是包含这个方法里面的自定义局部变量,操作数栈就是说明当前正在操作的变量,动态链接就是保存这个方法调用的其他方法的地址,而方法退出就是说这个方法是异常还是正常退出的地址的保存。兄弟们又会疑惑了,什么是Native方法呢?说白了就是这个方法的实现可以不使用Java,使用其他语言实现,哈哈哈,相当于不是亲儿子,有点私生子的味道。

2024-05-25 17:59:29 123

原创 操作系统一些基本概念详解

进程,按照官方的说法,就是一个操作系统里面调度和资源分配的基本单位,如果把一个操作系统比作一个工厂,进程是不是可以理解为一某一类产品的业务线,因为工厂在调度和分配资源的时候都是以业务线为基础去派发的;那么线程就可以比作为这个业务线里面的某条生产线,比如要生产一个矿泉水瓶的业务线,一个生产瓶盖的生产线就是一个进程,一个生产包装纸的生产线又是另一个进程。但是,其实,我们可以试着和生活联系下,比如,要说进程和线程,不都是干活的吗,不停地在电脑里面干活的吗,就像工厂运转起来了,工人和机器是不是都要不停的干活呢?

2024-05-25 16:15:28 165

原创 clickhouse 索引大白话

当我们的clickhouse在解析这个sql语句的时候,where的这个查询条件命中了我们的主键UserID,所以查询引擎就会走索引,它就会去把primary.idx 文件加载到内存中,然后使用二分法查找,对这个UserID进行比较,最终可以定位得到这个条件的UserID是位于如下的mark176的位置中,索引就如同我们的字典或者书的目录一样,就是为了让我们快速找到我们想要的数据,索引索引,就是一个引路人嘛,引领我们快速到达目的地。那么,clickhouse 中的索引具体是啥样的呢?

2024-04-06 22:22:24 669 1

原创 python3.7解决ModuleNotFoundError: No module named ‘_bz2‘

如果我们想要安装比如pandas的这个模块,我们会想到使用pip install pandas,系统在执行这个命令的时候,它首先会去把pandas相关的依赖一起整理出来,区分系统库和第三方库,先确认有没有系统库,没有的话就默认安装或者提示安装,之后再去python的第三方库中拉取其他第三方库安装。我们这个python3.7是新安装的,是不是运维少装了啥东西,应该是少了文件或者哪些包。笔者对python这一块不是很熟悉,所以我以为是缺少了相关的bz2的pip的包,但是实际上pip中没有相关的module。

2023-07-21 22:52:21 1047 1

原创 hive 如何处理json字符串

hive处理json字符串以及json数组

2023-07-19 22:46:03 1302

空空如也

空空如也

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

TA关注的人

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