自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Oeljeklaus的博客

读书二十载,风雨任平生

  • 博客(290)
  • 资源 (7)
  • 收藏
  • 关注

原创 JStorm源码分析(七)Excutor启动和创建

JStorm源码分析(七):Excutor启动和创建Executor的创建与启动是在Worker的exec ute()方法中完成的。 1.在我们启动Worker时,调用Worker的mk_worker()方法,mk_worker方法创建Worker实例,并调 用worker的execute()方法。 2.调用createTasks()方法,用来创建Task 3.创建并...

2018-07-10 21:50:41 688

原创 JStorm源码分析(六)Supervisor启动Worker的过程

JStorm源码分析(六):Supervisor启动Worker的过程W orker的启动是在Supervis or获取任务的过程中完成的: 1.Supervisor启动后,SyncSupervisorEvent会定时的循环扫描Zookeeper的任务分配目录,看是否 有自己的任务,如果有,那么把对应的信息写到本地(Supervisor)机器的指定目录中,这个工作 主要是有SyncSupe...

2018-07-10 21:47:59 994

原创 JStorm源码分析(五)Supervisor获取任务

JStorm源码分析(五):Supervisor获取任务1.在Supervisor的启动过程中,即在mkSupervisor()方法中,源码如下: SyncSupervisorEvent会定时的循环扫描Zookeeper的任务分配目录,看是否有自己的任务,如果 有,那么把对应的信息写到本地(Supervisor)机器的指定目录中,这个工作主要是有 SyncSupervisorEvent...

2018-07-10 21:43:58 631

原创 JStorm源码分析(四)Storm集群启动过程

JStorm源码分析(四):Storm集群启动过程1.Nimbus的启动过程 (1)Nimbus 的启动脚本命令:bin/storm nimbus 实际调用过程: storm脚本中的main方法—->调用 def nimbus—->exec_storm_class 在exec_storm_class中,最终调用java命令,即: java -server backtyp

2018-07-10 21:39:09 598

原创 JStorm源码分析(三)Nimbus的任务分配过程

JStorm源码分析(三):Nimbus的任务分配过程1 . 在 T o p o l o g y 的 任 务 提 交 中 ,最 后 调 用 S t o r m S u b m i t t e r 的 submitTopology方 法 将 任 务 提 交 给 nimbus;实际上,在StormSubmitter的submitTopology中,是NimbusClient通过RPC(远程过程调 ...

2018-07-10 21:33:44 784

原创 JStorm源码分析(二)Storm任务提交流程

JStorm源码分析(二):Storm任务提交流程Storm任务提交流程: 1.Client端提交Topology到nimbus 调用命令: ​ storm jar WordCount.jar com.stone.WordCountMain wordcount 实际上是调用: ​ java -client WordCount.jar com.stone.WordCoun...

2018-07-10 21:22:17 899 2

原创 JStorm源码分析(一)Storm执行脚本

JStorm源码分析(一):Storm执行脚本storm脚本Storm脚本是python脚本 调用storm脚本时,执行其中的main方法,mian方法源代码如下: main方法中有两个参数: COMMAND = args[0] ARGS = args[1:] 所有的COMMAND: COMMANDS = { “jar”: jar, “kill”: kill, “she...

2018-07-10 21:20:54 648

原创 Spark源码解析(二):SparkContext流程

SparkContext内部执行流程SparkContext内部执行的时序图对于这个时序图的具体描述如下:1.SparkSubmit在main()方法中执行,然后根据提交的类型调用相应的方法,这里是”Submit”,调用submit()方法,submit()里面进行一些判断后,使用反射Class.forName(childMainClass, true, loader),然...

2018-07-09 08:57:59 3706 1

原创 Spark源码解析(五):Task提交流程

Task提交流程在划分Stage之后,在对Task进行封装成为TaskSet然后提交给TaskScheduler。提交流程源码解析提交TaskSet查看TaskSchedulerImpl的160行,可以看到submitTasks()方法,主要代码如下://TODO 该方法提交TaskSet override def submitTasks(taskSet: Tas...

2018-07-06 16:05:05 1603 2

原创 Spark源码解析(四):WordCount的Stage划分

WordCount的Stage划分WordCount的代码package cn.edu.hust;object WordCount{ def main(args: Array[String]): Unit = { val conf=new SparkConf().setAppName("WordCount") //创建SparkContex

2018-07-06 16:04:07 2206 2

原创 Spark源码解析(三):Executor启动流程

Executor启动流程在上面SparkContext进行资源调度后,只有主要的流程是Master和筛选出来的Worker进行通信,然后在Worker中启动Executor进程。Executor启动流程流程图源码分析Executor进程的启动这里我们需要追踪的方法是Master类中的schedule()方法内部的607行,这个方法的主要作用是向Worker发送消息,...

2018-07-06 16:01:07 2284 2

原创 Spark源码解析(一):Spark执行流程和脚本

Spark执行流程Spark带注释源码对于整个Spark源码分析系列,我将带有注释的Spark源码和分析的文件放在我的GitHub上Spark源码剖析欢迎大家fork和star过程描述:1.通过Shell脚本启动Master,Master类继承Actor类,通过ActorySystem创建并启动。2.通过Shell脚本启动Worker,Worker类继承Actor类,通过A...

2018-06-27 00:37:52 5925 6

原创 JVM之JIT技术(四):锁粗化

点击上方蓝字,记得关注我们!JVM之JIT技术(四):锁粗化引言在上面的三篇文章中,我们首先解释了JIT的历史,JIT技术:内联、逃逸分析、锁消除等。但是,这仅仅是适用于单线程,如果需要同步,这个这些就不适合了,现在我们来介绍适用于多线程的JIT技术:锁粗化。01​在上一篇文章中,锁消除已经简单的介绍。但是并不是所有的情况可以使用锁消除,这时我们需要使用锁粗化...

2019-03-22 22:17:53 983

原创 JVM之JIT技术(三):逃逸分析,锁消除

点击上方蓝字,记得关注我们!JVM之JIT技术(三):逃逸分析,锁消除引言​逃逸分析和锁消除是常用的JIT技术,锁消除常常用来消除不必要的锁。01​在上一节中,我们已经分析了JIT的较为简单的技术:内联。这里这一节,我们将会讲解逃逸分析和锁消除。 JVM通过域分析来确定是否一个对象能够从现在方法或者线程的域逃出出去,这被称为逃逸分析。...

2019-03-22 21:46:46 1001

原创 JVM之JIT技术(二):内联

点击上方蓝字,记得关注我们!JVM之JIT技术(二):内联引言在JIT技术上,有很多种优化技术,其中内联是一种非常常见的技术,在本文中将会详细的介绍这技术,同时使用数字对比,更加形象的突出内联的运行时间。01在上一篇文章《JVM之JIT优化技术(一)》中,我们使用了大量的篇幅讲解了JIT技术的由来和一些简单的优化步骤,以及优化例子,本文将详细讲解JIT...

2019-03-22 21:15:41 934

原创 JVM之JIT优化技术(一)

点击上方蓝字,记得关注我们!JVM之JIT优化技术(一)引言本文是JVM之JIT优化技术的开篇,这个在接下来的几章中将会详细讲解JIT优化技术。关于JVM优化和如何使用JIM编译和不同的优化技术让程序运行的更快有很多争论。其实,有很多优秀的文章是可以被找到的,但是对于我自己来说,我还想看看关于这方面的应用,因此我决定对此去深挖和进行一些简单的测量。01延迟编译 ...

2019-03-22 19:52:12 1638

原创 数据结构之布隆过滤器

数据结构之布隆过滤器01引言您可能从未听说过Bloom Filter,但是这个巧妙的算法在Google的BigTable数据库中使用,以节省时间,无需搜索不存在的数据。在编程中,也许在生活中,有一些众所周知的权衡。您通常可以将空间交换一段时间,因为您可以通过更多的存储空间来解决问题,您可以更快地运行空间。还有一个鲜为人知的权衡,它更为复杂。一般来说,您可以确定时...

2019-03-16 10:18:27 992

原创 Java中Vector的操作一定是线程安全的嘛?

Java中Vector的操作一定是线程安全的嘛?Java中Vector类是JDK1.2加入的遗留集合,其内部的方法主要是通过synchronized关键字进行封装,保证这个类是一个线程安全的类,那么是不是vector的操作一定是线程安全的呢?本文将带你分析不一样的vector。01vector简介首先,我们使用简单的描述vector的重要方法。这里是...

2019-03-15 19:09:25 5693

原创 Java并发之Monitor实现

Java并发之Monitor实现可能在synchronized关键字的实现原理中,你已经知道了它的底层是使用Monitor的相关指令来实现的,但是还不清楚Monitor的具体细节。本文将让你彻底Monitor的底层实现原理01简介本文主要翻译Monitors – The Basic Idea of Java Synchronization国外大神的文...

2019-03-09 15:30:02 3148 1

原创 JVM之垃圾回收算法

JVM之垃圾回收算法相比如C++,Java程序的一大优势是不需要程序员手动释放分配的内容,主要由Java虚拟机管理内存的分配和释放,但是并不意味着我们不需要掌握垃圾回收算法。本文将会带你探索Java虚拟机中主要的垃圾回收算法。01标记-清除算法标记-清除算法是最基本的算法,也会受比较容易实现的垃圾收集算法。这个算法主要分为标记和清除两个阶段...

2019-03-09 09:31:43 252

原创 JVM之类加载机制

JVM之类加载机制在一般的强类型语言中,都有预处理、编译、汇编和链接过程,Java一般是将Java编译成class文件后,Java虚拟机需要将class文件在内存后到底发生了什么呢?本文将会带你了解Java的类加载过程01类加载时机类才能够被加载到虚拟机内存中开始,到卸载出内存位置,它的整个生命周期包括:加载、验证、准备、解析、初始化、使用和...

2019-03-08 21:46:52 164

原创 Java并发之线程

Java并发之线程讨论并发,大多数都与线程脱不开关系。本文将对从线程的特点、多线程优势以及线程状态和实现等几个方面讲解Java线程,同时讲解Java线程在虚拟机中如何实现。01线程的特点和实现说到线程,首先要谈到进程;进程是操作系统资源分配和调度的基本单位,即运行起来的程序。毕竟进程是粗粒度的单位,为了更好地量化程序,引入了线程的概念。...

2019-03-08 20:45:20 186

原创 Java并发之synchronized关键字

Java并发之synchronized关键字synchronized是Java的重量级锁,本文将从synchronized的使用方式,底层原理,特点和适用场景讲解。让你彻彻底底明白Java中的synchronized。01使用方式先来看一下synchronized关键字的同步基础:Java中的每一个对象都可以作为锁。为什么对象可以作为锁呢?这里...

2019-03-03 15:58:42 230

原创 JVM运行时数据区域

JVM运行时数据区域Java虚拟机在运行Java程序的过程中会把它所管理的内存划分为多个不同的数据区域。这些区域都有各自的用途,以及创建和销毁的时间。本文将带你理解JVM的各大数据区域以及用途。01程序计数器程序计数器是线程私有的,它的主要作用是记录当前线程执行到了那一条指令。线程有可能因为时间片轮转的关系导致挂起,或者是线程上下文切换,这个时...

2019-03-02 21:51:43 172

原创 Java并发之volatile关键字

Java并发之volatile关键字volatile关键字可以说是Java中的轻量级锁,实现Java的同步组件中有发挥了具体的作用。尽管volatile是非常的使用,然而它的原理总是让人困惑。换句话说,我们需要理解它的底层原理是不可或缺的。01volatile定义和原理Java语言为了允许线程访问共享变量。一般来说,为了确保共享变量的一致性和实...

2019-03-02 20:45:37 487

原创 死磕Java之JDK 1.6HashMap

死磕Java之JDK 1.6HashMapHashMap是常用的按照键值对存储的集合类,内部源码有很多值得思考和学习的地方。你知道为什么HashMap不安全吗?为什么HashMap的初始容量为16吗?HashMap的结构时怎么样的吗?本文将带你揭开HashMap的神秘面纱。01概述HashMap是基于哈希表实现的Map接口。这样的实现允许所有的Map...

2019-03-01 09:50:31 945

原创 死磕Java之泛型(二)

死磕Java之泛型(二)在<<死磕Java之泛型(一)>>中,已经简单的讲解了泛型的概念,泛型原理以及泛型边界和通配符。本文将讲解泛型的高级用法和弥补泛型带来的缺陷。01泛型带来的问题Java引入泛型的目的是呈现编译时多态。尽管泛型的引入,给编码带来了很多便利之处,但是往往带来很多困惑。泛型主要的限制之一是,不能使用基本类型,...

2019-02-27 21:24:50 238

原创 死磕Java之泛型(一)

死磕Java之泛型(一)一般的类和方法,只能使用具体的类型;要么是基本类型,要么是自定义的类,如果需要编写可以应用于多种类型的代码,这种限制就降低了代码的可用性,当然你会想到重载,但是对于类呢,这就需要引入泛型了。01泛型的基本概念    泛型,从字面上理解就是适用于很多很多的类型,即参数化类型。从Java SE5开始,Sun公司就引入了泛型的概念。引入泛型的初衷是,希...

2019-02-27 10:18:45 217

原创 死磕Java之序列化与反序列化

死磕Java之序列化与反序列化当创建对象时,它就一直存在,但是在程序终止之后,无论如何它不会存在。如果现在的需求是当程序终止后,需要将信息保存起来,这就需要Java序列化了。01序列化的引入Java序列化的引入主要基于两方面的考虑:    1.为了支持Java的RMI(远程过程调用),它使存活于其他计算机上的对象使用起来就像存在于本机计算机一样。    2.对于...

2019-02-24 13:29:26 230

原创 死磕Java之NIO与IO

死磕Java之NIO与IO    当学习Java NIO与IO时,你是否会有这样的想法:什么时候使用NIO,什么使用IO呢?本篇文章将会分析两者的不同,它们的用例,以及和影响代码的设计。01NIO与IO的区别    下面这张表总结了Java NIO和IO的主要区别,接下来我将从下表中的不同更加细致的讲解。IO NIO Stream oriented ...

2019-02-23 15:10:34 4735 1

原创 死磕Java之hashcode与equals方法

死磕Java之hashcode与equals方法hashCode方法与equals方法来源于Java最基本的类Object,这两个方法常用于自定义类在Java集合类中,类对象的判断等;掌握理解该方法是程序员必备技能。01hashCode    首先让我们先来了解hash的概念。    hash:就是把任意长度的输入(又叫做预映射pre-image)通过散...

2019-02-22 08:41:54 379

原创 Spark的Shuffle原理(一):HashShuffle

01.HashShuffle相关知识    Spark Shuffle类似于MapReduce的过程,在Spark 的1.0版本以前,Spark采用的是Hash Shuffle,与MapReduce不同的是,Hash Shuffle没有排序过程。Shuffle阶段主要发生在宽依赖阶段,什么是宽依赖呢?    上图中,可以很好的理解宽依赖和窄依赖,对于一般的join、groupByKey...

2018-08-17 10:21:12 515

原创 设计模式(四)建造者模式

设计模式(四)建造者模式模式动机​ 在现实生活中,有很多复杂的对象,拥有很多的组件,例如手机,有显示屏、CPU等;我们使用的时候是一起使用的,但是我们基本上不知道这些部件的实现细节,这时我们可以通过建造者模式对其进行设计和描述,建造者哦是将部件和其组装过程分开,一步一步创建一个复杂的对象,用户只需要指定复杂的类型就可以得到该对象,而无须知道其内部的具体构造细节。​ 在软件开...

2018-07-15 21:16:25 310

原创 设计模式(三)抽象工厂模式

设计模式(三):抽象工厂模式GithubGithub 关于23设计模式的讲解文件已经放在我的GitHub上,欢迎大家Fork和Star模式动机​ 在工厂方法模式中,每一个产品对应于每一个具体的工厂方法。但是一般的情况下,我们需要一个工厂可以提供多个产品对象,而不是单一的产品对象。产品等级结构:产品等级结构业绩回升产品的继承结构,例如一个抽象类是数据库,数据库有MySQ...

2018-07-14 15:15:21 248

原创 设计模式(二)工厂方法模式

设计模式(二):工厂方法模式Github关于23设计模式的讲解文件已经放在我的GitHub上,欢迎大家Fork和Star模式动机​ 在简单工厂模式中,如果在原来的实现的基础上,我们再增加一个产品类的实现,那么我们必须在原来的工厂方法里修改工厂类的源代码.那么有没有更好的方法,可以不修改工厂类的源代码而进行动态的可扩展呢?今天我们将要介绍的设计模式之工厂方法模式,就是这样的一...

2018-07-14 14:00:01 327

原创 设计模式(一)简单工厂模式

设计模式(一):简单工厂模式模式动机​ 做过Web开发的开发者都知道,在将用户的密码存储在数据库中时,我们需要将密码首先加密然后在写入数据库。 在Java中,我们常用的加密手段有MD5、RSA等。我们使用的代码是:KeyPairGenerator.getInstance("RSA");如果我们需要使用MD5时传入的参数就是MD5。这里,就是我们今天需要讲解的简单工厂模式。...

2018-07-14 12:48:01 414

原创 Javac原理剖析

Javac原理剖析Javac是什么?​ Javac是一种编译器,能将一种语言规范转化为另一种语言规范。Javac的任务就是将Java源代码语言转化成JVM能够识别的一种语言,然后由J将JVM语言转化成当前这个机器能够识别的机器语言。​ Javac的任务就是将Java源码成Java字节码,也就是JVM能够识别二进制码。从表面上看就是上面的部分将.java文件转成.clas...

2018-07-11 15:06:55 2459 2

转载 Java命令学习系列(一)——Jps

位置我们知道,很多Java命令都在jdk的JAVA_HOME/bin/目录下面,jps也不例外,他就在bin目录下,所以,他是java自带的一个命令。功能jps(Java Virtual Machine Process Status Tool)是JDK 1.5提供的一个显示当前所有java进程pid的命令,简单实用,非常适合在linux/unix平台上简单察看当前java进程的一些简单情况。原理j...

2018-06-30 21:35:02 326

原创 Spark 程序性能调优(一)

性能调优之在实际项目中分配更多资源性能调优的王道,增加和分配更多的资源,性能和速度上的调优,是显而易见的,基本上在一定范围内,增加资源与性能的提升,是成正比的,写完一个spark作业以后 ,进行性能调优。 1.分配那些资源? executor, CPU per executor, memory per executor2.在哪里分配这些资源? 提交shell脚本的时候3.怎么调优,以及调优的原则?...

2018-06-25 17:25:03 529

原创 秒杀系统的设计与实现

秒杀系统使用的知识点redis高并发锁机制秒杀系统遇到的问题如何限制一个IP使用抢购软件?秒杀的超卖问题?秒杀系统的简单方案处理有10件商品要秒杀,可以放到缓存中,读写时不要加锁。 当并发量大的时候,可能有25个人秒杀成功,这样后面的就可以直接抛秒杀结束的静态页面。进去的25个人中有15个人是不可能获得商品的。所以可以根据进入的先后顺序只能前10个人购买成功。后面15个人就抛商品已秒杀结束。秒杀系...

2018-06-19 22:29:46 793

servet&jsp;学习指南

本书共18章:第1章介绍Servlet API和几个简单的Servlet;第2章讨论Session追踪,以及保持状态的4种技术;第3章和第4章系统讲解JSP的语法以及JSP中的重要特性之一:Expression Language;第5~7章分别阐述JSTL中最重要的类库、标签的具体编写方法和标签文件;第8~10章讨论Servlet中的事件驱动编程、过滤器,以及Model 2架构;第11章展示如何利用Servlet 3的文件上传特性,以及如何在客户端改善用户的体验;第12章解释如何通过编程方式将资源发送到浏览器;第13章介绍如何利用Decorator模式以及类来改变Servlet请求和响应的行为;第14章讨论Servlet 3中的一项新特性,用来处理异步的操作;第15章阐述如何通过声明和编程方式来保护Java的Web应用程序;第16章讨论Servlet/JSP应用程序的部署过程,以及部署描述符中的元素;第17章阐述Servlet 3中的两项新特性;第18章介绍Struts 2的用法。

2018-12-08

Scala编程学习教程

Scala语言学习教程PPT,主要包含有Scala的基础、以及Scala语言的高级用法

2018-06-03

WEB服务器日志信息

WEB服务器数据

2017-08-08

fastdfs-nginx-module_v1.15.tar.gz

fastdfs-nginx-module_v1.15.tar.gz

2016-12-20

酒店管理系统

酒店管理系统,这是用java写的酒店管理系统

2015-12-19

阿帕奇的各种jar包

包含阿帕奇各个jar包,适合作为java开发人员的你们

2015-12-19

el表达式jar包

该jar包是基于阿帕奇的基础之上开发的,其功能更加强大,下载者可以放心

2015-12-19

空空如也

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

TA关注的人

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