自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Windows系统杀掉某个端口的方法

第一步:点击起始菜单(或是通过win+R快捷键),在输入框中输入cmd,点击确定,即可打开dos命令窗;第二步:在dos窗口中输入指令:netstat -ano | findstr 8080,其中8080是指你被占用的端口号,然后会显示出现在占用该端口号的pid。第三步:输入 taskkill /f /pid 52068,关闭该进程即可...

2022-05-08 17:24:33 9802

原创 设计模式二

建造者模式,适配器模式,桥接模式讲解

2022-05-07 18:11:30 1662

原创 设计模式一

单例模式,工厂模式,原型模式

2022-04-30 14:17:50 1804

原创 设计模式七大原则

一:单一职责原则单一职责原则告诉我们:一个类不能做太多的东西。在软件系统中,一个类(一个模块、或者一个方法)承担的职责越多,那么其被复用的可能性就会越低。一个很典型的例子就是万能类。其实可以说一句大实话:任何一个常规的MVC项目,在极端的情况下,可以用一个类(甚至一个方法)完成所有的功能。但是这样做就会严重耦合,甚至牵一发动全身。一个类承(一个模块、或者一个方法)担的职责过多,就相当于将这些职责耦合在一起,当其中一个职责变化时,可能会影响其他职责的运作,因此要将这些职责进行分离,将不同的...

2022-03-21 09:58:19 222

原创 Flink——表的创建,转换,输出

pom<dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-java</artifactId> <version>1.10.1</version></dependency><dependency> <groupId>org.apache.flink</group

2021-11-29 20:40:25 1660

原创 Flink——Table_API和Flink_SQL

简单案例应用pom文件:<dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-java</artifactId> <version>1.10.1</version></dependency><dependency> <groupId>org.apache.fli.

2021-11-29 19:48:26 252

原创 Flink——状态管理

状态分类:算子状态(Operatior State);键控状态(Keyed State);状态后端(StateBackends)什么是状态1:由一个任务维护,并且用来计算某个结果的所有数据,都属于这个任务的状态 2:可以认为状态就是一个本地变量,可以被任务的业务逻辑访问 3:Flink 会进行状态管理,包括状态一致性、故障处理以及高效存储和访问,以便开发人员可以专注于应用程序的逻辑算子状态(Operator State) 1:算子状态的作用范围限定为算子任务,由同一并.

2021-11-26 15:55:40 1032

原创 Scrapy爬取拉勾网数据并存入本地文件和数据库

链接:https://pan.baidu.com/s/1yMM6DE-8RgVZjXEPHGimMQ提取码:yyds爬取代码: lg.pyimport scrapyfrom sjqx.items import SjqxItemclass Sjqxpider(scrapy.Spider): name = 'lg' allowed_domains = ['www.lagou.com'] base_url = 'https://www.lagou.com/beij..

2021-11-23 22:26:29 4360

原创 图的深度优先遍历(DFS)和广度优先遍历(BFS)

深度优先遍历(DFS)图的遍历:即是对结点的访问。一个图有那么多个结点,如何遍历这些结点,需要特定策略,一般有两种访问策略: (1)深度优先遍历 (2)广度优先遍历图的深度优先搜索(Depth First Search) 。1:深度优先遍历,从初始访问结点出发,初始访问结点可能有多个邻接结点,深度优先遍历的策略就是首先访问第一个邻接结点,然后再以这个被访问的邻接结点作为初始结点,访问它的第一个邻接结点, 可以这样理解:每次都在访问完当前结点后首先访问当前结点的第一个邻接结点。 2:我们...

2021-11-21 18:46:00 1310

原创 数据结构与算法——图

一:概念图是一种数据结构,其中结点可以具有零个或多个相邻元素。两个结点之间的连接称为边。 结点也可以称为顶点图的表示方式有两种:二维数组表示(邻接矩阵);链表表示(邻接表)。邻接矩阵邻接矩阵是表示图形中顶点之间相邻关系的矩阵,对于n个顶点的图而言,矩阵是的row和col表示的是1....n个点。1:两个顶点之间可以直连,0:两个顶点之间不可以直连说明:邻接矩阵需要为每个顶点都分配n个边的空间,其实有很多边都是不存在,会造成空间的一定损失.邻接表邻接表的实现只关心存..

2021-11-20 22:07:36 285

原创 Flink的时间语义和Watermark

事件处理会经过几个特殊时间:Event Time:事件创建的时间 Ingestion Time:数据进入Flink的时间 Processing Time:执行操作算子的本地系统时间,与机器相关

2021-11-20 21:47:25 1164

原创 Flink——窗口(window)

一:窗口(window)就是将无限流切割为有限流的一种方式,它会将流数据分发到有限大小的桶(bucket)中进行分析window类型:时间窗口(Time Window) ➢ 滚动时间窗口(Tumbling Windows):将数据依据固定的窗口长度对数据进行切分时间对齐,窗口长度固定,没有重叠➢ 滑动时间窗口 (Sliding Windows):滑动窗口是固定窗口的更广义的一种形式,滑动窗口由固定的窗口长度和滑动间隔组成。窗口长度固定,可以有重叠➢ 会话窗口(Session Win

2021-11-18 21:27:01 1300

原创 Flink流处理——Sink

1:Kafkapackage com.atguigu.sink;import com.atguigu.bean.SensorReading;import org.apache.flink.api.common.serialization.SimpleStringSchema;import org.apache.flink.streaming.api.datastream.DataStream;import org.apache.flink.streaming.api.datastream.D

2021-11-12 19:25:30 2376

原创 Flink流处理——Transform多流转换

Split 和 Selectsplit:DataStream → SplitStream:根据某些特征把一个 DataStream 拆分成两个或者多个 DataStream。 Select:SplitStream→DataStream:从一个 SplitStream 中获取一个或者多个DataStreampackage com.atguigu.transfrom;import com.atguigu.bean.SensorReading;import org.a

2021-11-12 17:57:58 1350

原创 Flink流处理——Transform分组聚合

1:map,flatMap,Filterpackage com.atguigu.transfrom;import org.apache.flink.api.common.functions.FilterFunction;import org.apache.flink.api.common.functions.FlatMapFunction;import org.apache.flink.api.common.functions.MapFunction;import org.apache.fl

2021-11-10 22:01:31 2424

原创 Flink流处理——Source

一:流处理创建一个执行环境,表示当前执行程序的上下文。 如果程序是独立调用的,则 此方法返回本地执行环境;如果从命令行客户端调用程序以提交到集群,则此方法 返回此集群的执行环境,也就是说,getExecutionEnvironment 会根据查询运行的方 式决定返回什么样的运行环境,是最常用的一种创建执行环境的方式。 StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvi...

2021-11-10 20:26:50 268

原创 Flink运行架构分析

运行时组件作业管理器(JobManager) 1:控制一个应用程序执行的主进程,也就是说,每个应用程序都会被一个不同的 JobManager 所控制执行。 2:JobManager 会先接收到要执行的应用程序,这个应用程序会包括:作业图 (JobGraph)、逻辑数据流图(logical dataflow graph)和打包了所有的类,库和其它资源的jar包。 3:JobManager 会把JobGraph转换成一个物理层面的数据流...

2021-11-09 23:26:31 606

原创 平衡二叉树AVL

平衡二叉树也叫平衡二叉搜索树(Self-balancing binary search tree)又被称为AVL树, 可以保证查询效率较高。 具有以下特点:它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。平衡二叉树的常用实现方法有红黑树、AVL、替罪羊树、Treap、伸展树等。平衡二叉树也是二叉排序树案例:图一图二是平衡二叉树,图三不是左旋转:主要代码:int[] arr = {4,3,6,5,7,8}/**...

2021-11-05 22:27:42 92

原创 二叉排序树BST

二叉排序树:BST: (Binary Sort(Search) Tree), 对于二叉排序树的任何一个非叶子节点,要求左子节点的值比当前节点的值小,右子节点的值比当前节点的值大。 特别说明:如果有相同的值,可以将该节点放在左子节点或右子节点 比如针对前面的数据 (7, 3, 10, 12, 5, 1, 9) ,对应的二叉排序树为:一:删除节点删除叶子节点 (比如:2, 5, 9, 12)删除只有一颗子树的节点 (比如:1)删除有两颗子树的节点. (比如:7, 3...

2021-11-03 19:55:30 160

原创 哈夫曼编码详解

一:基本介绍哈夫曼编码也翻译为 赫夫曼编码(Huffman Coding),又称霍夫曼编码,是一种编码方式, 属于一种程序算法 赫夫曼编码是赫哈夫曼树在电讯通信中的经典的应用之一。 赫夫曼编码广泛地用于数据文件压缩。其压缩率通常在20%~90%之间 赫夫曼码是可变字长编码(VLC)的一种。Huffman于1952年提出一种编码方法,称之为最佳编码1.1:原理剖析 1:通信领域中信息的处理方式1-定长编码将 i like like like java do ...

2021-10-30 23:20:29 18443

原创 K8s——存储抽象

1:环境准备:NFS NFS是Network File System的简写,即网络文件系统。NFS基于RPC(Remote Procedure Call)远程过程调用实现。由操作系统的内核,将 NFS 文件系统的调用请求通过 TCP/IP 发送至服务端的 NFS 服务。NFS服务器执行相关的操作,并将操作结果返回给客户端no_root_squash:客户端连接服务端时使用的是root,拥有服务端分享的目录的root权限 sync:同步写操作,数据写入存储设备后返回成功信息(默认) ...

2021-10-30 18:18:32 135

原创 哈夫曼树详解

一:定义 1:给定n个权值作为n个叶子结点,构造一棵二叉树,若该树的带权路径长度(wpl)达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree), 还有的书翻译为霍夫曼树。 2:赫夫曼树是带权路径长度最短的树,权值较大的结点离根较近。基本概念 1: 路径和路径长度:在一棵树中,从一个结点往下可以达到的孩子或孙子结点之间的通路,称为路径。通路中分支的数目称为路径长度。若规定根结点的层数为1,则从根结点到第L层结点...

2021-10-29 14:59:16 1669

原创 通用配置文件读取

package com.yrl.common.constant;import java.util.Enumeration;import java.util.HashMap;import java.util.Map;import java.util.ResourceBundle;public class ConfigConstant { private static Map<String,String> valueMap = new HashMap<>(); .

2021-10-27 22:28:51 67

原创 大数据电信客服项目一——数据生成

源码,资料自取:链接:https://pan.baidu.com/s/1jWcfux9vONLio5LboLSxSQ提取码:6666说明:数据生成采用面向接口方法,支持个人扩展,代码有注解说明可自行观看生成数据的格式:主叫 被叫 通话时间 通话时长 ...

2021-10-27 16:58:07 747

原创 二叉树应用——堆排序

一:堆排序基本介绍堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。 堆是具有以下性质的完全二叉树: 1:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆, 注意 : 没有要求结点的左孩子的值和右孩子的值的大小关系。 ...

2021-10-27 15:23:01 168

原创 线索化二叉树

一:什么是线索化二叉树问题分析: 当我们对上面的二叉树进行中序遍历时,数列为 {8, 3, 10, 1, 6, 14 } 但是 6, 8, 10, 14 这几个节点的 左右指针,并没有完全的利用上. 如果我们希望充分的利用 各个节点的左右指针, 让各个节点可以指向自己的前后节点,怎么办? 解决方案-线索二叉树 1:n个结点的二叉链表中含有n+1 【公式 2n-(n-1)=n+1】 个空指针域。利用二叉链表中的空指针域,存放指向该结点在某种遍历次序下的前驱和后继结点的指针(这种附加...

2021-10-26 20:54:01 209

原创 Kafka拦截器

对于 producer 而言,interceptor 使得用户在消息发送前以及 producer 回调逻辑前有机会 对消息做一些定制化需求,比如修改消息等。同时,producer 允许用户指定多个 interceptor 按序作用于同一条消息从而形成一个拦截链(interceptor chain)。Intercetpor 的实现接口是 org.apache.kafka.clients.producer.ProducerInterceptor,其定义的方法包括: (1)conf...

2021-10-26 18:02:31 569

原创 Kafka的offset提交管理

一:自动提交//开启offset自动提交properties.put(ConsumerConfig.ENABLE_AUTO_COMMIT_CONFIG,"false");缺点:先提交offset后消费,提交完offset后没有消费就挂机后,可能造成丢失数据二:手动提交手动提交 offset 的方法有两种:分别是 commitSync(同步提交)和 commitAsync(异步 提交)。两者的相同点是,都会将本次 poll 的一批数据最高的偏移量提交;不同点是, c...

2021-10-26 17:35:32 2605 2

原创 Kafka消费者深层讲解

一:消费方式consumer 采用 pull(拉)模式从 broker 中读取数据。 push(推)模式很难适应消费速率不同的消费者,因为消息发送速率是由 broker 决定的。 它的目标是尽可能以最快速度传递消息,但是这样很容易造成 consumer 来不及处理消息,典型的表现就是拒绝服务以及网络拥塞。而 pull 模式则可以根据 consumer 的消费能力以适 当的速率消费消息。 pull 模式不足之处是,如果 kafka 没有数据,消费...

2021-10-25 22:23:00 345

原创 顺序存储二叉树

从数据存储来看,数组存储方式和树 的存储方式可以相互转换,即数组可 以转换成树,树也可以转换成数组, 看右面的示意图。顺序存储二叉树的特点: 顺序二叉树通常只考虑完全二叉树 第n个元素的左子节点为 2 * n + 1 ...

2021-10-25 19:56:43 84

原创 二叉树前序中序后序遍历和查找

一:前序中序后序前序遍历: 先输出父节点,再遍历左子树和右子树中序遍历: 先遍历左子树,再输出父节点,再遍历右子树后序遍历: 先遍历左子树,再遍历右子树,最后输出父节点小结: 看输出父节点的顺序,就确定是前序,中序还是后序二:遍历思路三:二叉树前序中序后序遍历package com.atgguigu.tree;public class BinaryTreeDemo { public stati...

2021-10-24 21:11:33 122

原创 二叉树概念

一:数组,链表,数的差别数组存储方式的分析 :优点:通过下标方式访问元素,速度快。对于有序数组,还可使用二分查找提高检索速度。 缺点:如果要检索具体某个值,或者插入值(按一定顺序)会整体移动,效率较低链式存储方式的分析 优点:在一定程度上对数组存储方式有优化(比如:插入一个数值节点,只需要将插入节点,链接到链表中即可, 删除效率也很好)。 缺点:在进行检索时,效率仍然较低,比如(检索某个值,需要从头节点开始遍历)树存储方式的分析 能提高数据存储...

2021-10-24 20:34:00 49

原创 Kafka生产者深层讲解

一:分区策略1.1:分区的原因 (1)方便在集群中扩展,每个 Partition 可以通过调整以适应它所在的机器,而一个 topic 又可以有多个 Partition 组成,因此整个集群就可以适应任意大小的数据了; (2)可以提高并发,因为可以以 Partition 为单位读写了。1.2:分区原则我们需要将 producer 发送的数据封装成一个 ProducerRecord 对象(1)指明 partition 的情况下,直接将...

2021-10-23 22:11:50 75

原创 哈希表原理

原理 散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。哈希表作用:哈希表结构:案例:google公司的一个上机题: 有一个公司,当有新的员工来报道时,要求将该员工的信息加入(id,性别,年龄,住址...),当输入该员工的id时,要求查找到该员工的 所...

2021-10-23 18:54:58 115

原创 Kafka工作流程和文件储存

工作流程常用命令:先启动zookeeper和kfka# 创建topic[atguigu@hadoop112 kafka_2.11-0.11.0.0]$ bin/kafka-topics.sh --create --zookeeper hadoop112:2181 --replication-factor 3 --partitions 2 --topic first# 开启生产者[atguigu@hadoop112 kafka_2.11-0.11.0.0]$ bin/kafka-conso

2021-10-22 23:31:48 161

原创 查找算法——斐波拉契(黄金分割)查找

斐波那契(黄金分割法)原理: 斐波那契查找原理与前两种相似,仅仅 改变了中间结点(mid)的位置,mid不 再是中间或插值得到,而是位于黄金分 割点附近,即mid=low+F(k-1)-1 (F代表斐波那契数列),如下图所示对F(k-1)-1的理解: 由斐波那契数列 F[k]=F[k-1]+F[k-2] 的性质,可以得到 (F[k]-1)=(F[k-1]-1)+(F[k-2]-1)+1 。该式说明:只要顺序表的长度为F[k]-1,则可以将该表分成长度为F[k-1]-1...

2021-10-22 21:36:46 107

原创 查找算法——插值查找

插值查找算法类似于二分查找,不同的是插值查找每次从自适应mid处开始查找。 将折半查找中的求mid 索引的公式 , low 表示左边索引left, high表示右边索引right. key 就是前面我们讲的 findVal ;int mid = low + (high - low) * (key - arr[low]) / (arr[high] - arr[low]) ;/*插值索引*/ 对应前面的代码公式: int mid = left + (right – left) * (find...

2021-10-22 19:04:44 94

原创 查找算法——二分查找

请对一个有序数组进行二分查找 {1,8, 10, 89, 1000, 1234} ,输入一个数看看该数组是否存在此数,并且求出下标,如果没有就提示"没有这个数"。package com.atgguigu.search;public class BinarySearch { public static void main(String[] args) { int[] arr = {1, 8, 10, 89, 1000, 1234}; ...

2021-10-22 00:36:12 78

原创 数据结构预与算法——基数排序

基数排序(radix sort)属于“分配式排序”(distribution sort),又称“桶子法”(bucket sort)或bin sort,顾名思义,它是通过键值的各个位的值,将要排序的元素分配至某些“桶”中,达到排序的作用 基数排序法是属于稳定性的排序,基数排序法的是效率高的稳定性排序法。它将所有待比较数值统一为同样的数位长度,数位较短的数前面补零。然后,从最低位开始,依次进行一次排序。这样从最低位排序一直到最高位排序完成以后, 数列就变成一个有序序列。...

2021-10-21 23:59:32 64

原创 Flume进阶二——自定义Interceptor

一:自定义Interceptor在实际的开发中,一台服务器产生的日志类型可能有很多种,不同类型的日志可能需要 发送到不同的分析系统。此时会用到 Flume 拓扑结构中的 Multiplexing 结构,Multiplexing 的原理是,根据 event 中 Header 的某个 key 的值,将不同的 event 发送到不同的 Channel中,所以我们需要自定义一个 Interceptor,为不同类型的 event 的 Header 中的 key 赋予不同的值1.1 案例: ...

2021-10-21 14:20:12 480

空空如也

空空如也

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

TA关注的人

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