自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(47)

原创 Flink01-一文搞懂为什么Flink会称为热门实时流数据处理框架
原力计划

本文主要介绍流式处理系统的演变,从而引出Flink的原理以及Flink与SparkStreaming的不同点。方便新手进行理解和学习。

2020-04-20 13:54:46 998 2

原创 关于JDK8中HashMap的前驱知识和重新认识
原力计划

摘要HashMap是Java程序员使用频率最高的用于映射(键值对)处理的数据类型。随着JDK(Java Developmet Kit)版本的更新,JDK1.8对HashMap底层的实现进行了优化,例如引入红黑树的数据结构和扩容的优化等。本文结合JDK1.7和JDK1.8的区别,深入探讨HashMap的结构实现和功能原理。简介Java为数据结构中的映射定义了一个接口java.util.Map,此接口主要有四个常用的实现类,分别是HashMap、Hashtable、LinkedHashMap和TreeMa

2020-07-05 23:27:56 42

原创 Hive计算两个经纬度坐标的直线距离

计算公式如下6378137*2*ASIN(SQRT(POWER(SIN((ta.start_point_lat-ta.end_point_lat)*ACOS(-1)/360),2) +COS(ta.start_point_lat*ACOS(-1)/180)*COS(ta.end_point_lat*ACOS(-1)/180)*POWER(SIN((ta.start_point_lng-ta.end_point_lng)*ACOS(-1)/360),2))) as distance其中sta

2020-06-24 13:55:32 515

原创 Bug2:解决Hive与Mysql映射问题

在hive中创建表时报错hive (default)> create table student(id int);FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. MetaException(message:For direct MetaStore DB connecti...

2020-04-29 15:07:53 116

原创 Flink03-Flink运行架构第二节-Slot和并行度

由于本章节内容比较多,防止学习枯燥,分成了4节来写(点击标题可跳转, 持续更新ing)1-运行时的组件和基本原理2-Slot和并行度3-数据流和执行图4-任务调度控制文章目录什么是SlotSlot共享并行度与Slot的关系举例什么是SlotFlink 中每一个 worker(TaskManager)都是一个 JVM 进程,它可能会在独立的线程上执行一个或多个 subtask。为了...

2020-04-22 10:36:22 170

原创 Flink02-Flink运行架构第一节-运行时的组件和基本原理
原力计划

文章目录1-Flink运行时的组件1)作业管理器(JobManager)2)任务管理器(TaskManager)3)资源管理器(ResourceManager)4)分发器(Dispatcher)2-任务提交流程3-任务调度原理1-Flink运行时的组件1)作业管理器(JobManager)2)任务管理器(TaskManager)3)资源管理器(ResourceManager)4)...

2020-04-22 09:14:18 75

转载 关于多线程的40个问题

前言这篇文章主要是对多线程的问题进行总结的,因此罗列了40个多线程的问题。这些多线程的问题,有些来源于各大网站、有些来源于自己的思考。可能有些问题网上有、可能有些问题对应的答案也有、也可能有些各位网友也都看过,但是本文写作的重心就是所有的问题都会按照自己的理解回答一遍,不会去看网上的答案,因此可能有些问题讲的不对,能指正的希望大家不吝指教。40个问题汇总1、多线程有什么用?一个可能在很多...

2020-04-02 16:27:10 54

原创 数据结构与算法之美-01-五道经典链表算法练习题(带注释和测试用例)

此五道题依次对应Leetcode题目的第206、141、21、19、876道题,节点结构只有构造函数不同package com.linkedlist;import org.junit.Test;import java.util.HashSet;import java.util.Set;/** * 1) 单链表反转 * 2) 链表中环的检测 * 3) 两个有序的链表合并 ...

2020-03-09 21:22:25 919

原创 《剑指Offer(第2版)》-06-从尾到头打印链表

题目描述输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。示例 1:输入:head = [1,3,2]输出:[2,3,1]限制:0 <= 链表长度 <= 10000题解/** * Definition for singly-linked list. * public class ListNode { * int val; * ...

2020-03-04 00:00:52 906

原创 《剑指Offer(第2版)》-05-替换空格

题目描述请实现一个函数,把字符串 s 中的每个空格替换成"%20"。示例 1:输入:s = “We are happy.”输出:“We%20are%20happy.”限制:0 <= s 的长度 <= 10000题解//思路就是把字符串转化为字符数组,然后再按照规则拼接起来class Solution { public String replaceSpace...

2020-03-03 23:36:46 902

原创 Bug1:解决二维数组的判空问题

在刷算法提的时候遇到一个问题,判断二维数组为空的这行代码,出现了数组下标越界的报错//错误代码if(matrix == null || matrix[0].length == 0 || matrix.length == 0){ return false;}正确代码应该如下if(matrix == null || matrix.length == 0 || matrix[0]....

2020-03-03 00:37:08 986

转载 《剑指Offer(第2版)》-04-二维数组中的查找

方法一:暴力如果不考虑二维数组排好序的特点,则直接遍历整个二维数组的每一个元素,判断目标值是否在二维数组中存在。依次遍历二维数组的每一行和每一列。如果找到一个元素等于目标值,则返回 true。如果遍历完毕仍未找到等于目标值的元素,则返回 false。class Solution { public boolean findNumberIn2DArray(int[][] matrix, ...

2020-03-03 00:19:38 890

转载 《剑指Offer(第2版)》-03-数组中重复的数字

刚开始刷题,一定要先自己想,然后再看别人的题解思路,然后慢慢优化方法一:哈希表(最自然,但是要额外空间)最容易想到用哈希表判重,这种方法是最自然的。特别地,在数组的长度不超过32的时候,使用位运算的技巧可以实现 O(1)空间复杂度判重,但是这道题不是回溯算法的问题,题目给出的测试用例的长度肯定不止32位,因此,不建议使用位运算的技巧。分析:这种方法不修改原始数组,但是使用了O(N)空间,使...

2020-03-02 13:20:17 880

原创 Java-016-ConcurrentHashMap 和 Hashtable 的区别

ConcurrentHashMap 和 Hashtable 的区别主要体现在实现线程安全的方式上不同。底层数据结构: JDK1.7的 ConcurrentHashMap 底层采用 分段的数组+链表 实现,JDK1.8 采用的数据结构跟HashMap1.8的结构一样,数组+链表/红黑二叉树。Hashtable 和 JDK1.8 之前的 HashMap 的底层数据结构类似都是采用 数组+链表 的形...

2020-02-24 22:09:02 892

原创 Java-015-HashSet和HashMap的区别

如果你看过 HashSet 源码的话就应该知道:HashSet 底层就是基于 HashMap 实现的。(HashSet 的源码非常非常少,因为除了 clone() 方法、writeObject()方法、readObject()方法是 HashSet 自己不得不实现之外,其他方法都是直接调用 HashMap 中的方法。)...

2020-02-24 21:51:07 908

原创 Java-014-HashMap 多线程操作导致死循环问题

在多线程下,进行 put 操作会导致 HashMap 死循环,原因在于 HashMap 的扩容 resize()方法。由于扩容是新建一个数组,复制原数据到数组。由于数组下标挂有链表,所以需要复制链表,但是多线程操作有可能导致环形链表。复制链表过程如下:以下模拟2个线程同时扩容。假设,当前 HashMap 的空间为2(临界值为1),hashcode 分别为 0 和 1,在散列地址 0 处有元素 A...

2020-02-24 21:01:11 888

原创 Java-013-HashMap的长度为什么时2的幂次方

为了能让 HashMap 存取高效,尽量较少碰撞,也就是要尽量把数据分配均匀。我们上面也讲到了过了,Hash 值的范围值-2147483648到2147483647,前后加起来大概40亿的映射空间,只要哈希函数映射得比较均匀松散,一般应用是很难出现碰撞的。但问题是一个40亿长度的数组,内存是放不下的。所以这个散列值是不能直接拿来用的。用之前还要先做对数组的长度取模运算,得到的余数才能用来要存放的位...

2020-02-24 20:50:09 859

原创 Java-012-HashMap和HashTable的区别

线程是否安全: HashMap 是非线程安全的,HashTable 是线程安全的;HashTable 内部的方法基本都经过synchronized 修饰。(如果你要保证线程安全的话就使用 ConcurrentHashMap 吧!);效率: 因为线程安全的问题,HashMap 要比 HashTable 效率高一点。另外,HashTable 基本被淘汰,不要在代码中使用它;对Null key 和...

2020-02-24 20:43:09 865

原创 Java-011-HashMap的底层实现

JDK1.8之前JDK1.8 之前 HashMap 底层是 数组和链表 结合在一起使用也就是 链表散列。HashMap 通过 key 的 hashCode 经过扰动函数处理过后得到 hash 值,然后通过 (n - 1) & hash 判断当前元素存放的位置(这里的 n 指的是数组的长度),如果当前位置存在元素的话,就判断该元素与要存入的元素的 hash 值以及 key 是否相同,如果...

2020-02-24 20:08:31 871

原创 Java-010-ArrayList和Vector区别

Vector类的所有方法都是同步的,可以由两个线程安全的访问一个Vector对象、但是一个线程访问Vector的话代码要在同步操作上浪费大量的时间。ArrayList不是同步的,所以在不需要保证线程安全时建议使用ArrayList。...

2020-02-24 19:58:21 860

原创 Java-009-ArrayList和LinkedList异同

1.是否保证线程安全:ArrayList和LinkedList都是不同步的,也就是不保证线程安全;2.底层数据结构:ArrayList底层使用的是Object数组;LinkedList底层使用的双向链表数据结构(JDK1.6之前为循环链表,JDK1.7取消了循环。注意双向链表和双向循环链表的区别:); 详细可阅读JDK1.7-LinkedList循环链表优化3.插入和删除是否受元素位置的影响:...

2020-02-24 19:49:13 874

原创 Java-008-接口和抽象类的区别是什么

接口的方法默认是public,所有方法在接口中不能有实现,抽象类可以有非抽象的方法;接口中的实力变量默认是final类型的,而抽象类中则不一定一个类可以实现多个接口,但最多只能实现一个抽象类一个类实现接口的话要实现接口的所有方法,而抽象类不一定接口不能用new实例化,但可以声明,但是必须引用一个实现该接口的对象,从设计层面来说,抽象是对类的抽象,是一种模板设计,接口是行为的抽象,是一种行...

2020-02-24 16:34:02 862

原创 Java-007-获取用键盘输入常用的两种方法

方法1:通过 ScannerScanner input = new Scanner(System.in);String s = input.nextLine();input.close();方法2:通过 BufferedReaderBufferedReader input = new BufferedReader(new InputStreamReader(System.in));S...

2020-02-24 16:28:40 873

原创 Java-006-Java中的异常处理

Java异常类的层次结构图在 Java 中,所有的异常都有一个共同的祖先java.lang包中的 Throwable类。Throwable: 有两个重要的子类:Exception(异常) 和 Error(错误) ,二者都是 Java 异常处理的重要子类,各自都包含大量子类。Error(错误):是程序无法处理的错误,表示运行应用程序中较严重问题。大多数错误与代码编写者执行的操作无关,而表示代码...

2020-02-24 16:22:07 959

原创 Java-005-Object类的常见方法总结

Object是一个特殊的类,是所有类的父类,它主要提供了一下11个方法public final native Class<?> getClass()//native方法,用于返回当前运行时对象的Class对象,使用了final关键字修饰,故不允许子类重写。public native int hashCode() //native方法,用于返回对象的哈希码,主要使用在哈希表中,...

2020-02-24 16:01:19 871

原创 Java-004-关于final关键字的一些总结

final关键字主要用在三个地方:变量、方法、类1、对于一个final变量,如果是基本数据类型的变量,则其数值一旦在初始化之后就不能更改,如果是引用类型的变量,则在对其初始化后便不能再让其只想另一个对象。2、当用final修饰一个类时,表明这个类不能被继承。final类中的所有成员方法都会被隐式的指定为final方法。3、使用final方法的原因有两个,第一个原因是把方法锁定,以防任何继承类...

2020-02-24 15:49:40 868

原创 Java-003-==与equals

==:它的作用是判断两个对象的地址是不是相等,即是不是同一个对象(基本数据类型比较的是值,引用数据类型比较的是内存地址)equals:它的作用也是判断两个对象是否相等,但它一般有两种使用情况:情况1:类没有覆盖 equals() 方法。则通过 equals() 比较该类的两个对象时,等价于通过“==”比较这两个对象。情况2:类覆盖了 equals() 方法。一般,我们都覆盖 equal...

2020-02-24 15:43:26 865

原创 Java-002-String和StringBuffer、StringBuilder的区别是什么?String为什么是不可变的?

可变性简单来说:String类中使用final关键字字符数组保存字符串private final char value[];所以String对象是不可变的。而StringBuilder与StringBuffer都继承自AbstractStringBuilder类,在AbstractStringBuilder中也是使用字符数组保存字符串char[] value;但是没有final关键...

2020-02-24 13:02:14 854

原创 Java-001-重载和重写的区别

重载: 发生在同一个类中,方法名必须相同,参数类型不同,个数不同,顺序不同,方法返回值和访问修饰符可以不同,放生在编译时。重写: 发生在父子类中,方法名,参数列表必须相同,返回值返回小于等于父类,抛出的异常范围小于等于父类,访问修饰符范围大于等于父类,如果父类方法访问修饰符为private那么子类就不能重写该方法。...

2020-02-24 11:32:10 877

原创 BigData5:Hadoop之HDFS的Edits和Fsimage文件

Edits相关知识当执行格式化指令时,会在指定的tmp目录下,生成dfs/name目录。此目录是namenode服务器存储元数据的目录当格式化后,启动HFDS前,会生成一个最初的fsimage_0000000000000000000文件在 dfs/data目录,这是datanode节点存储数据块的目录。元数据的存储目录和数据节点的目录的路径可以分开指定在dfs/name/in_use...

2020-02-14 00:03:00 1064

原创 Bug0:解决Hadoop插件运行时遇到java.io.FileNotFoundException错误

问题描述在Eclipse中用插件(而不是手动打包上传服务器方式)运行WordCount程序的过程中出现了如下错误:DEBUG - LocalFetcher 1 going to fetch: attempt_local938878567_0001_m_000000_0 WARN - job_local938878567_0001java.lang.Exception: org.apache...

2020-02-12 19:37:46 984

原创 BigData7:Hadoop之HDFS的租约锁机制和特点总结

租约锁HDFS的有个内部机制:不允许客户端的并行写。指的是同一时刻内,不允许多个客户端向一个HDFS上写数据。所以要实现以上的机制,实现思路就是用互斥锁,但是如果底层要是用简单的互斥锁,可能有与网络问题,造成客户端不释放锁,而造成死锁。所以Hadoop为了避免这种情况产生,引入租约机制。租约锁本质上就是一个带有租期的互斥锁。Hadoop的思想来自于Google的论文,3.1Hadoop...

2020-02-11 14:38:44 1174

原创 BigData6:Hadoop之图解HDFS上传下载文件相关流程

HDFS架构图1)namnode,名字节点,最主要管理HDFS的元数据信息2)datanode,数据节点,存储文件块3)replication,文件块的副本,目的是确保数据存储的可靠性4)rack 机器5)Client 客户端。凡是通过指令或代码操作的一端都是客户端6)Client 的Read(从HDFS下载文件到本地)7)Client的Write(上传文件到HDFS上)从HD...

2020-02-11 12:42:35 942

原创 BigData4:Hadoop之HDFS的回收站机制

补充一个知识点Hadoop回收站trash,默认是关闭的。修改conf/core-site.xml,增加配置示例:<property> <name>fs.trash.interval</name> <value>1440</value> <description>Number of minutes betw...

2020-02-10 15:30:18 886

原创 BigData3:Hadoop之伪分布式安装部署

各种部署方式及特点单机模式:不能使用HDFS,只能使用MapReduce,所以单机模式最主要的目的是在本机调试MapReduce代码伪分布式模式:用多个线程模拟多台真实机器,即模拟真正的分布式环境完全分布式:用多台机器(或启动多个虚拟机)来完成部署集群这里先用伪分布式来进行练习,仅用一台虚拟机安装步骤如下关闭防火墙 #执行: service iptables stop ...

2020-02-10 14:30:24 887

原创 BigData2:Hadoop之HDFS核心技术解析

HDFS介绍起初,随着数据量的越来越大,通过纵向扩展(在一台机器中加磁盘)的形式已经不能满足需要,所以开始横向扩展(用多台机器进行数据存储)。为了方便管理和维护,分布式文件存储管理系统应运而生,HDFS就是其中之一。HDFS架构原理架构图如下图所示分布式文件系统的存储特点:切块存储HDFS主要由两部分组成namenodedatanodenamenode主要是用来管理整个分...

2020-02-09 18:58:32 981

原创 BigData1:初识Hadoop

Apache的Hadoop是一个开源的、可靠的、可扩展的系统架构,可利用分布式架构来存储海量数据、以及实现分布式的计算。Hadoop的两个作用存储海量数据计算海量数据Hadoop应用场景做网页内容的分析处理做用户访问行为的分析处理,可以借此建立用户画像用户推荐系统的数据分析和处理在线广告的点击分析和流量分析Hadoop的框架最核心的设计就是:HDFS和MapReduce。...

2020-02-09 16:51:29 897

原创 Avro——数据序列化系统

应用场景数据序列化和反序列化支持RPC通信1.为什么要进行序列化可以通过Java的原生序列化来理解,我们经常用到Java的Serializable接口,主要是因为网络传输数据需要做序列化将数据做持久化需要做序列化2.序列化的关注点/衡量标准序列化后的数据大小序列化后的字节流(二进制数据)通常是通过网络进行传输的,因此序列化后的内容越少,传输耗时也就越短,这个很好理解...

2020-02-08 00:24:18 892

原创 Zookeeper的数据一致性协议——ZAB协议

概述ZAB(Zookeeper Atomic Broadcast)协议是为分布式协调服务Zookeeper专门设计的一种支持崩溃恢复的原子广播协议,它是一种特别为Zookeeper设计的崩溃可恢复的原子消息广播算法。这个算法是一种类2PC算法,在2PC算法(之前的文章)基础上做的改进。协议介绍ZAB协议包括两种基本的模式,分别是:1)消息原子广播(保证数据一致性)2)崩溃恢复(解决2PC...

2020-02-07 19:11:58 880

原创 Zookeeper的应用场景学习(Zookeeper用来干什么)

1.集群管理临时节点+监听机制来实现2.消息的订阅和发布3.集群的统一配置和管理思路与消息的订阅发布一致4.分布式屏障类似栅栏机制的一种方式5.分布式锁利用顺序节点来判断争夺资源的先后顺序,从而决定资源的归属总结基本都是通过节点+监听来实现的。...

2020-02-07 14:37:46 908

空空如也

空空如也

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