自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Spark源码系列(一) RDD详解以及部分算子源码解析

Spark源码系列(一) RDD详解文章目录Spark源码系列(一) RDD详解Spark理论基石-RDD概述RDD的由来RDD特点分区只读依赖缓存检查点机制不适合使用RDD的应用小结编程模型应用举例RDD源码解析RDD ActionsRDD TransformationmapfilterflatMapdistinctgroupByreduceBykeySpark理论基石-RDD概述RDD叫做弹性分布式数据集(Resilient Distributed Datasets),它是一种分布式的内存抽象,

2020-07-10 17:21:36 940

原创 Paxos算法推导

Paxos算法推导文章目录Paxos算法推导Paxos定义Paxos算法出现所解决的问题Basic Paxos的需求Basic Paxos的组件推导过程单Acceptor多个AcceptorProposer生成提案Acceptor接受提案Basic Paxos算法描述如果保证Basic Paxos算法的Liveness关于一致性算法,看大家的文章基本上都是认为Raft比Paxos要好理解很多,事实上在学习的过程中也的确是这样。Raft学习理解完毕后我也来学习一下Paxos算法。毕竟如果这个世界上只有一种

2020-06-26 00:33:12 307

原创 macOS Mojave10.14.6 mysql安装(homebrew方式)

macOS Mojave10.14.6 mysql安装(homebrew方式)操作系统:macOS Mojave 10.14.6Hombebrew版本:2.1.15安装mysql步骤:brew update更新包brew install mysql将直接自动安装mysql运行mysql_secure_installation可以设置密码;后台启动mysql运行bre...

2019-10-28 14:03:13 1002

原创 分布式系统-向量时钟(Vector Clock)

分布式系统-向量时钟(Vector Clock)Leslie Lamport的论文中《Time, Clocks and the Ordering of Events in a Distributed System》首次提出了逻辑时钟的概念,解决了分布式系统的事件全序关系,但是对于同时发生的事件无法定义,导致无法描述事件的因果关系。而Vector Clock是在Lamport时间戳基础上演进的另一...

2019-10-26 01:46:32 5999 2

原创 分布式锁(逻辑时钟)原理 Leslie Lamport论文笔记

分布式系统中的时间、时钟和事件顺序 论文笔记这篇笔记主要是用于记录阅读《Time, Clocks, and the Ordering of Events in a Distributed System》论文的要点以及我自己对于分布式系统时钟的理解。之前已经阅读过这篇文章几次了,每次阅读都对自己很有帮助。因此写下这篇论文笔记可以帮助自己进一步加深理解。1978年Lamport在这篇论文中主要讨论...

2019-10-24 14:40:22 2256

原创 分布式一致性协议 Raft论文笔记

Raft论文笔记文章目录Raft论文笔记一 Raft算法综述一致性问题架构二 Raft基础三 领导人选举四 日志复制五 安全性Follower和Candidate崩溃六 日志压缩Raft原版英文论文https://raft.github.io/raft.pdf论文名称是寻找一种易于理解的一致性算法(扩展版)。Paxos一致性算法在解决分布式系统一致性方面一直是业界的标杆,但是由于其复杂性,导...

2019-09-16 17:38:32 533

原创 Google File System论文翻译

Google File System论文翻译这篇论文拜读过很多遍了,对于做分布式存储的人来说实在过于经典,读多少遍都不为过,感觉每次读的时候都能够获取到不一样的知识。虽然读过很多次,但是一直没有做读书笔记,这次会针对Google的三大经典论文分别做中文翻译以及阅读笔记。如有纰漏,请各位多多批评。只翻译论文核心部分,后面Benchmark的部分就不做翻译了,请各位看官自己去认真阅读原版论文吧。...

2019-08-22 00:43:51 539

原创 TCPIP详解 Protocol 读书笔记(十) 动态选路协议

TCP/IP详解 Protocol 读书笔记(十)Chapter10 动态选路协议文章目录TCP/IP详解 Protocol 读书笔记(十)Chapter10 动态选路协议动态选路RIP:选路信息协议度量上一章节介绍的选路方法为静态选路。每当初始化一个接口时,就为接口自动创建一个直接路由。在配置文件中指定静态路由,并通过route命令对路由表进行控制。另一种方法是利用ICMP路由器通告和请求...

2019-07-08 10:00:48 305

原创 TCPIP详解Protocol 读书笔记(九) IP选路

TCP/IP详解:Protocol 读书笔记(九)Chapter9 IP选路文章目录TCP/IP详解:Protocol 读书笔记(九)Chapter9 IP选路IP选路原理简单回顾初始化路由表没有到达目的地的路由ICMP重定向差错ICMP路由器发现报文路由器操作主机操作在前面的笔记中已经单独写了一篇关于IP路由选择的内容。当时在看到《IP协议》那一章节的时候关于路由选择部分有些不理解,因此查...

2019-07-08 09:41:31 290

原创 OSPF协议之Dijkstra最短路算法

OSPF协议之Dijkstra最短路算法文章目录OSPF协议之Dijkstra最短路算法原理描述总结算法实现原理描述本章将会介绍OSPF协议中常常提到的SPF算法。这个SPF算法具体来说就是Dijkstra最短路算法。最短路算法指的是一个点到其余各个顶点的最短路径,也叫作“单源最短路径”。在这里使用二维数组e来存储顶点之间边的关系,初始值如下:我们还需要一个一维数组dis来存储1号顶...

2019-01-23 10:13:30 3282

原创 TCPIP linux路由表详解

TCP/IP linux路由表详解文章目录TCP/IP linux路由表详解Linux内核的路由表Linux内核的路由种类主机路由网络路由默认路由Linux内核的路由表通过route -n命令查看Linux内核路由表:[root@bogon ~]# route -nKernel IP routing tableDestination Gateway Genmask F...

2019-01-23 10:11:10 1254

原创 TCPIP详解 IP路由选择

TCP/IP详解 IP路由选择在本篇文章中,将通过例子来说明IP路由选择过程。如图所示,主机A与主机B分别在两个不同子网上,中间通过同一个路由器连接。如果主机A请求与主机B进行通信,主机A寻找主机B的位置的过程就可以理解为IP路由选择的过程。现在主机A的用户通过Ping命令确认与主机B的连通性。ping命令看似简单,但是其中IP路由选择的过程还是需要很多步骤。具体步骤如下:当在主机A...

2019-01-23 10:09:42 1351 1

原创 最大堆、最小堆详解

最大堆、最小堆详解Overview最大堆和最小堆是二叉堆的两种形式。二叉堆(binary heap)是一种特殊的堆,二叉堆是完全二叉树或者是近似完全二叉树。二叉堆满足堆特性:父节点总是保持固定的序关系于任何一个子节点的键值,且每个节点的左子树和右子树都是一个二叉堆。文章目录最大堆、最小堆详解Overview一、二叉堆二、最大堆、最小堆详解(以最大堆为例)由上至下的下沉建堆操作(以最大堆为例)...

2018-10-16 15:05:42 9449

原创 Java:到底是值传递还是引用传递

先来看一段代码public class MyClassA { public static void main(String[] args){ String x = new String("hello"); change(x); System.out.println(x); } private static void change(Str

2016-08-20 17:03:28 731

原创 令人抓狂的Java常量池探索

Java的常量池通常分为两种:静态常量池和运行时常量池 静态常量池:class文件中的常量池,class文件中的常量池包括了字符串(数字)字面值,类和方法的信息,占用了class文件的大部分空间。 运行时常量池:JVM在完成加载类之后将class文件中常量池载入到内存中,并保存在方法区中。平时我们所讲的常量池就是指方法区中的运行时常量池。其相对于CLass文件常量池的另外一个重要特征是具备动态性

2016-08-20 13:08:19 939

转载 Android内存优化-内存泄漏的几个场景以及解决方式

一.什么是内存泄漏在Java程序中,如果一个对象没有利用价值了,正常情况下gc是会对其进行回收的,但是此时仍然有其他引用指向这个活在堆内存中的对象,那么gc就不会认为这个对象是一个垃圾,那么就不会对其进行回收,所以它会一直活在堆内存中占用内存,这就导致了内存泄漏。总结一下,导致内存泄漏的原因就是有一些我们永远不会使用的对象,仍然有引用指向它(当然这是在强引用的情况下),那么就不满足gc回收

2016-08-20 01:14:59 3585 2

原创 java中代码块的执行顺序--静态代码块,构造器,普通代码块,构造块,main主函数

这一段时间在阿里实习,最近校招季很多内推又开始了,就投了一下腾讯。结果周五收到腾讯地图的电话叫周六去面试。匆匆忙忙的没怎么准备就去面试了,结果不尽如人意,基础知识忘得小一半惨被虐。不过这次面试还是给我敲响了警钟,要有压迫感,前日松散无心学习,现在发现自己还差得远要静下心来。看来隔一段时间就应该去面试一下这样也好认清楚自己的水平价值也好有努力的方向。正文由static修饰的代码块称为静态代码块:静态代

2016-08-07 17:07:39 1283 1

原创 java 利用数组实现循环队列

循环队列可以有效的利用资源。如果使用普通数组实现队列时,如果不进行移动,随着数据的不断读写弹出插入,会出现假满队列的情况。例如不断向队列中添加元素,然后在弹出元素。这是弹出元素所空闲出来的空间并没有得到重复利用,这是就会出现数组尾部已经满了,但是头部还有空闲空间没有得到利用。 入队时尾指针向前追赶头指针,出队时头指针向前追赶尾指针/** * Created by JKerving on 2016

2016-04-20 17:23:46 2852

原创 Volley源码解析(二)

上次分析了一下Volley的源码,今天又看了一遍Volley的源码,受益匪浅。上次分析的很不到位,Volley框架有很多需要学习的地方,光凭一篇blog肯定是分析不完的。更何况里面还有许多思想在里面需要我进行学习。首先回顾一下Request类,这是一个抽象类。Volley支持8种http请求方式:GET,POST,PUT,DELETE,HEAD,OPTIONS,TRACE,PATCH。 还可

2016-04-19 15:49:43 636

原创 Java 线程池原理解析(三)

在使用线程池的过程中,有一个很有必要考虑的问题就是线程饥饿死锁问题 先前我们考虑的放入线程池中的各个task都是相互独立的,这样我们就把问题简单化了。但是真实情况中还会出现一个任务依赖于另一个任务的完成。 现在假设一种条件,我们使用单线程的Executor,如果一个任务将另一个任务提交到同一个Executor,并且等待这个任务的执行结果。那么就会因为单线程的Executor的串行机制导致死锁的发

2016-04-16 22:30:32 622

原创 Java 线程池原理解析(二)

我们已经分析了两种通过线程来执行任务的策略,即把所有任务放在单个线程中串行执行,以及将每个任务放在各自的线程中执行。这两种方式都存在一些严格的限制:串行执行的问题在于其糟糕的响应性和吞吐量,而为每个任务分配一个线程的问题在于资源管理的复杂性线程池简化了线程的管理工作,并且java.util.concurrent提供了一种灵活的线程池实现作为Executor框架的一部分。在Java中,任务执行的主要抽

2016-04-16 20:46:26 409

原创 Java 线程池原理解析(一)

大多数的并发应用程序都是围绕”任务执行”来构造的:任务通常是一些离散的单元。所谓高并发的主要任务就是把应用程序中的工作分解到多个任务当中,并且这些任务是相互独立的:任务不依赖于其他任务的状态。任务之间的独立性有助于实现并发,只要存在足够多的资源,那么这些独立的任务都可以并行执行。现在通常情况下,我们对执行任务有三种解决方法。串行地执行任务显式地为任务创建线程线程池下面就先主要分析前两种方式的

2016-04-16 12:03:07 578

原创 HTTP 常见状态码详解

HTTP常见状态码2XX 成功状态码客户端发起请求时,这些请求通常都是成功的。服务器有一组用来表示成功的状态码,分别对应于不同的请求。 我们主要需要记住以下几种2XX状态码应该就够用了,其他的碰到不会的,google就是万能的(对于程序员来说翻墙是必备技能哦)。 - 200 OK 服务器成功处理了请求 - 202 Accepted 请求已被接受,但是并未处理 - 204 No Co

2016-04-09 10:24:51 644

原创 阿里一面、二面(交叉面)面经

本人投的是客户端开发实习生岗位(Android),很早就投了内推简历,是在3.19号投递的,3.31号内推就截止了,在4.10号之前如果没能进入终面的同学可能就要跟着笔试一起了。 在我万念俱灰等待阿里在线笔试的时候,面试官在4.6号给我打来了电话 一面(电话面): 可能是因为截止时间快到了,面试官一开始就说这次面试时间不会很久。 1.看到我简历里面写了AsnycTask,问了我AsyncTa

2016-04-07 15:51:32 24338 2

转载 多态在 Java 和 C++ 编程语言中的实现比较

简介面向对象编程语言最重要的一个特点就是多态,它可以使得基类的指针或引用指向派生类对象,而在具体访问时实现方法动态绑定。本文主要探讨多态在当前最流行的两种编程语言 C++ 和 Java 中的实现,并对其中的异同进行了比较,使读者对其有全面的理解,以便更好的在编程中正确使用这种特性。 提到多态,这里想提一下。有的书上认为重载也算是一种多态,即在一个类中有多个相同名称的方法但是返回类型与参数不同。

2016-04-02 12:46:40 700

原创 Volley源码解析(一)

之前看过郭神的blog,今天也是着按照自己的思路走一遍Volley框架中关于Http请求的源码 首先还是引用一下郭神的图,清楚的阐述了当网络连接请求到来时的工作机制 缓存这个东西几乎是无处不在,无论我们从事的是什么计算机的方向,都对性能优化有着至关重要的作用。 可以看到架构图中,当request到来时,首先判断是否已经缓存过,如果没有直接加入network中,然后是一系列的http的解析等工作

2016-04-01 11:57:03 829

转载 Context作用、类型、使用建议

转自http://www.jianshu.com/p/2dfc592bcd1c什么是Context是一个访问系统资源和进行应用程序级操作的抽象接口,称为上下文如何使用Context创建新对象:new views,adapters,listenersTextView tv = new TextView(getContext());ListAdapter adapter = new SimpleC

2016-03-31 22:35:50 1247

原创 Dalvik与JVM的区别

今天面试被问到这个,没答上来很尴尬。。之前一直在针对android事件分发,View绘制,消息机制与图片缓存和Java基础知识,从面试中找到自己的不足。Dalvik支持的格式 它支持已转换为.dex(Dalvik Executable)格式的Java程序的运行,.dex是专门为Dalvik设计的一种压缩格式,适合内存和处理器速度有限的系统。(dx是一套工具,可以将Java .class转换为.d

2016-03-30 23:13:17 762

原创 Java反射机制探究

在Java中,反射机制使得Java语言更加灵活,系统的灵活性、可扩展性大多是通过反射机制来加载外部插件,使得系统与插件解耦的同时增加了功能。 Java反射机制是在程序运行过程中,对于任意一个类,都能够知道这个类的所有属性和方法;对任意一个对象都能够调用它的任意一个方法;尤其是指程序可以检测和修改它本身的状态或行为的一种能力。首先通过实例观察一下反射的用法:package com.example;

2016-03-27 21:22:17 586

转载 JVM(五)--深入理解JVM垃圾回收机制

转自http://www.jianshu.com/p/815c636a0668垃圾回收机制的意义Java语言中一个显著的特点就是引入了垃圾回收机制,使c++程序员最头疼的内存管理的问题迎刃而解,它使得Java程序员在编写程序的时候不再需要考虑内存管理。由于有个垃圾回收机制,Java中的对象不再有“作用域”的概念,只有对象的引用才有“作用域”。垃圾回收可以有效的防止内存泄露,有效的使用空闲的内存。不过

2016-03-26 00:57:53 2279

转载 JVM(四)--GC的三大高级算法

C的基本算法,大体上都逃不出 标记清除法/标记压缩法、复制收集算法、引用计数法 这三种方式以及它们的衍生品。现在,通过对这三种方式进行融合,出现了一些更加高级的方式。这里,我们介绍一下其中最有代表性的三种,即分代回收、增量回收和并行回收。有些情况下,也可以对这些方法中的几种进行组合使用。1、分代回收 首先,我们来讲讲高级GC技术中最重要的一种,即分代回收(Generational GC)。由于GC

2016-03-26 00:38:03 968

转载 JVM(三)--JVM内存管理和JVM垃圾回收

JVM内存组成结构 JVM内存结构由堆、栈、本地方法栈、方法区等部分组成,结构图如下所示: 1)堆所有通过new创建的对象的内存都在堆中分配,其大小可以通过-Xmx和-Xms来控制。堆被划分为新生代和旧生代,新生代又被进一步划分为Eden和Survivor区,最后Survivor由FromSpace和ToSpace组成,结构图如下所示: 新生代。新建的对象都是用新生代分配内存,Eden空间

2016-03-26 00:22:01 395

转载 JVM(二)--Java代码编译和执行的过程

Java代码编译是由Java源码编译器来完成,流程图如下所示: Java字节码的执行是由JVM执行引擎来完成,流程图如下所示: Java代码编译和执行的整个过程包含了以下三个重要的机制:Java源码编译机制类加载机制类执行机制Java源码编译机制由以下三个过程构成:分析(词法、语法分析)和填充符号表注解处理语义分析和字节码生成(.class文件)词法分析: 将源代码转变为标记(

2016-03-26 00:10:23 550

原创 JVM(一)--概述

什么是JVMJVM的物理架构图 类加载器(ClassLoader) 用来加载.class文件执行引擎(执行字节码或本地方法)运行时数据区(方法区,堆,栈,本地方法栈,PC寄存器)JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java虚拟机包括一套字节码指令

2016-03-25 23:14:51 551 1

转载 ConcurrentHashMap源码解析

这些天一直在看集合相关的源码,确实学到了不少东西。这些集合都是息息相关的,学了就停不下来!学集合就必须要学习锁的知识,学了锁那么并发编程的知识也不能少,都是很重要的基础知识。 jdk1.8的源码和之前版本确实不太一样,有些看不懂,所以借鉴一下别人的博客,阅读一下以前版本的ConcurrentHashMap的源码吧。。。。。。。 转自这里写链接内容通过分析Hashtable就知道,synchron

2016-03-25 13:35:21 749

原创 HashMap与HashTable解读(二)

上一篇讲到了HashMap,这一篇来讲一下HashTable。 其实两者区别不是很大,HashTable出现的比较早,继承的是Dictionary,Dictionary是一个抽象类,用来存储key/value,和map实现的功能类似,不过现在这个抽象类已经过时了,被map接口所取代。 第一: 继承的类有所不同public class Hashtable<K,V> extends Dic

2016-03-25 11:49:23 430

原创 HashMap与HashTable解读(一)

HashMapHashMap概述HashMap是基于哈希表的Map接口的实现,可以看到源码中其实现了Map接口public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, SerializableHashMap是一个数组与单链表的结合体,底层实现使用一个table[]数组,当向HashMa

2016-03-25 11:38:38 996

原创 LinkedHashMap源码解析

LinkedHashMap概述LinkedHashMap是HashMap的一个子类,它保留插入的顺序,如果需要输出的顺序和输入时的相同,那么就选用LinkedHashMap。(这里的顺序指的是插入顺序,而不是散列表中索引的顺序) LinkedHashMap在源码中可以看到实现了Map接口,并且继承的是HashMap。也就是采用的Map接口的哈希表和链表实现的。此实现提供可选的映射操作,并允许使用n

2016-03-25 10:31:11 461 1

转载 正则表达式基本语法(初步了解)

正则表达式基本语法两个特殊的符号'^'和'$'。他们的作用是分别指出一个字符串的开始和结束。例子如下:"^The":表示所有以"The"开始的字符串("There","The cat"等);"of despair$":表示所以以"of despair"结尾的字符串;"^abc$":表示开始和结尾都是"abc"的字符串——呵呵,只有"abc"自己了;"notice":

2015-12-22 11:06:06 516

转载 Java--length,length(),size()区别

Java中基础的不能再基础的东西,但是总是搞乱掉,故留个记录Java中的length属性是针对数组说的。声明了一个数组之后,想要获取此数组的长度就要通过length属性得到。Java中的length()方法是针对字符串String的,要得到字符串的长度调用length()方法。Java中的size()方法是针对泛型集合说的,如果想知道泛型有多少元素就调用这个方法!这个例子来演示这两个方法和一个属性的

2015-12-02 20:18:40 459

空空如也

空空如也

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

TA关注的人

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