08 2020 档案

摘要:1.基本原理 底层是一个双向链表来维护数据,在JDK1.7之前是一个双向循环链表 2.优缺点 1.优点 插入删除性能好,容量没有限制 可以用作内存队列或栈 2.缺点 随机访问性能差 3.源码分析 1.add()方法 public boolean add(E e) { linkLast(e); ret 阅读全文
posted @ 2020-08-29 19:30 马晟 阅读(138) 评论(0) 推荐(0)
摘要:1.基本原理 底层是一个Object[]数组来维护数据 2.优缺点 1.优点 随机访问性能好(底层是数组) 2.缺点 扩容会影响性能 删除和插入元素时,需要进行拷贝影响性能 线程不安全 3.源码分析 1.add()方法 /** * Appends the specified element to t 阅读全文
posted @ 2020-08-29 00:32 马晟 阅读(188) 评论(0) 推荐(0)
摘要:跳表 基于链表改造,增加多层索引链表,使得查找结点的平均时间复杂度为O(logn),但是增加了空间复杂度,采用双向链表,每层首尾各有一个空结点,左侧为负无穷大,右侧为正无穷大 查找 从最上层索引开始查找,找到该层中仅小于目标结点的前置索引节点,然后找下一层,一直到找到为止 插入 先找到待插入结点的前 阅读全文
posted @ 2020-08-24 11:04 马晟 阅读(184) 评论(0) 推荐(0)
摘要:定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 限制: 0 <= 节点个数 <= 5000 方法一:使用栈 public class ListNode { int val 阅读全文
posted @ 2020-08-20 18:07 马晟 阅读(125) 评论(0) 推荐(0)
摘要:找出数组中重复的数字。 在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。 示例 1: 输入: [2, 3, 1, 0, 2, 5, 3] 输出:2 或 3 限制: 阅读全文
posted @ 2020-08-18 17:57 马晟 阅读(93) 评论(0) 推荐(0)
摘要:给定两个数组,编写一个函数来计算它们的交集。 示例 1: 输入: nums1 = [1,2,2,1], nums2 = [2,2] 输出: [2,2] 示例 2: 输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4] 输出: [4,9] 说明: 输出结果中每个元素出现的次 阅读全文
posted @ 2020-08-17 12:07 马晟 阅读(105) 评论(0) 推荐(0)
摘要:RDD的多个Partition由不同Task处理,Task分为shuffleMapTask和resultTask 1.Task解析 Task是计算的基本单位,一个Task处理RDD的一个Partition,Task运行在Executor上,Executor位于CoarseGrainedExecuto 阅读全文
posted @ 2020-08-08 18:11 马晟 阅读(262) 评论(0) 推荐(0)
摘要:1.原理说明 有向无环图:如果一个有向图无法从任意顶点出发经过若干条边回到该点,则这个图是一个 有向无环图(DAG图) 在Spark中对任务进行排队,形成一个集合就是DAG图,每一个顶点就是一个任务,每一条边代表一个依赖关系 通过DAG可以对计算流程进行优化,比如将单一节点的计算操作合并,对涉及sh 阅读全文
posted @ 2020-08-08 15:58 马晟 阅读(893) 评论(0) 推荐(0)
摘要:1.窄依赖 窄依赖表示一个父RDD中的Partition最多被子RDD的一个Partition使用 窄依赖分为两种: 一种是一对一的依赖关系,比如map、filter等(OneToOneDependency) 另一种是范围依赖关系,比如union(RangeDependency) OneToOneD 阅读全文
posted @ 2020-08-08 15:12 马晟 阅读(374) 评论(0) 推荐(0)
摘要:1.对数据存储自动进行内存和磁盘的切换 Spark优先将数据放入内存中,如果内存不够,放到磁盘里面,如果实际数据大于内存,需要考虑数据放置的策略和优化的算法 2.基于Lineage的容错机制 Lineage基于Spark RDD的依赖关系,对于每个操作只需要关联父操作,每个分片之间互不影响,出现错误 阅读全文
posted @ 2020-08-08 14:28 马晟 阅读(249) 评论(0) 推荐(0)
摘要:1.定义 RDD是只读的记录分区的集合,是一种基于工作集的应用抽象 创建RDD的方式有两种: 从驱动程序中的集合中并行创建 从外部数据集创建 2.底层存储原理 每个RDD的数据以Block的形式存储在多个机器上,对于每个Executor都会启动一个BlockManagerSlave,并且管理一部分B 阅读全文
posted @ 2020-08-07 23:57 马晟 阅读(275) 评论(0) 推荐(0)
摘要:1.文件目录布局 Kafka消息以日志文件的形式存储,不同主题下不同分区的消息分开存储,同一个分区的不同副本分布在不同的broker上存储 逻辑上看来日志是以副本为单位的,每个副本对应一个log对象,实际在物理上,一个log划分为多个logSegment 创建一个topic为3个分区,会在log.d 阅读全文
posted @ 2020-08-04 23:40 马晟 阅读(1685) 评论(0) 推荐(0)
摘要:在Spark中要启用反压机制,需要将配置spark.streaming.backpressure.enabled设置为true,默认为false 具体实现 1.RateController 该类继承StreamingListener,是一个监听器 /** * A StreamingListener 阅读全文
posted @ 2020-08-04 23:36 马晟 阅读(710) 评论(0) 推荐(0)