java
文章平均质量分 51
FelixClinton
这个作者很懒,什么都没留下…
展开
-
DataX 3.0执行流程分析
DataX 3.0执行流程分析入口类:com.alibaba.datax.core.EngineEngine是DataX入口类,该类负责初始化Job或者Task的运行容器,并运行插件的Job或者Task逻辑。1. 重要参数介绍DataX 的执行涉及到三类重要的配置文件,它们分别是:xxxJob.json,core.json和plugin.jsonxxxJob.json:作业相关配...原创 2019-12-15 21:17:23 · 870 阅读 · 0 评论 -
使用IntelliJ IDEA解决Java包冲突
使用IntelliJ IDEA解决Java包冲突在实际的 Maven 项目开发中,由于项目引入的依赖过多,遇到 jar 冲突算是一个很常见的问题了。那么,在这种情况下我们采用什么样的方式来解决Java包冲突问题呢?如果你使用的开发工具是IDEA的话,那么解决Java包冲突问题将会变得十分easy,IDEA为我们提供了十分方便的依赖分析工具,废话不多说,让我们先来看看如何使用IDEA提供的依赖分...原创 2019-12-15 20:59:33 · 1020 阅读 · 0 评论 -
每日算法之——常见排序算法集锦(算法之发展历程)
常见排序算法及发展历程所谓排序,就是将数据分为有序区和无序区,通过对无序区元素的调整并扩展有序区,最后达到所有元素都有序的状态。在排序界,常见(或者说常用)的算法主要有冒泡排序,选择排序、直接插入排序、希尔排序(其实不太常用)、堆排序、快速排序、归并排序。一些不太常用但是比较有技巧性的排序有:计数排序、位图排序、基数排序、桶排序、外部排序(一般结合hash然后多路归并)。在此,我们仅仅介绍...原创 2018-09-11 12:52:28 · 1378 阅读 · 0 评论 -
每日算法之—排序最短子数组
题目:给定整形数组nums,求需要排序的最短子数组的长度。如:nums=[1,5,4,3,2,6,7],输出结果为4。解释:只有[5,4,3,2]需要排序,故输出4。解决办法: 从前往后和从后往前两次遍历数组。从前往后遍历时,首先默认首元素为max,当遍历的当前值小于max时,记录下元素位置为p,否则更新max为当前元素。从后往前遍历时,默认尾元素为min,当遍历的...原创 2018-09-05 10:50:34 · 190 阅读 · 0 评论 -
每日算法之—数据区间划分
题目:给定一个只包含0,1,2的数组,要求把整个数组进行区间划分,把0划分到左边,1划分到中间,2划分到右边。如:数组为[0,1,2,1,0,1,2,2,1,0,1,2]划分结果为:[0,0,0,1,1,1,1,1,2,2,2,2]要求:空间复杂度为O(1),时间复杂度为O(n)。 解决思路:假想原始数组左边有一个长度为0的0区域,右边有一个长度为0的2区域,中间是1区...原创 2018-09-05 12:20:38 · 5346 阅读 · 0 评论 -
每日算法之—排序数组相邻最大差值
题目:给定一个无序整形数组,要求返回排序后相邻两个数的最大差值。例如:输入数组[1,2,3,5,9,6,8,7]排序后:[1,2,3,5,6,7,8,9]最大差值为5-3=2解决办法:1.对原数组进行排序,然后逐个求差值2.首先遍历数组,求得数组的最大值max和最小值min,然后将max-min的区间划分为n+1个桶,再遍历数组,将数组元素依次放入对应的桶中,最后一定有...原创 2018-09-05 15:21:54 · 566 阅读 · 0 评论 -
每日设计模式——代理模式(动态代理)
代理模式之动态代理上一篇文章https://blog.csdn.net/qq_28044241/article/details/82534196已经介绍了静态代理的基本原理和实现:所谓代理,其实就是找一个对象(如上一篇文章中的游戏代练)代替自己去干一些事(如上篇文章中的登陆、打怪、升级等),其反应到代码中就是去实现一个代理类,并调用自己(被代理对象)的方法。在代理类执行被代理对象的方法之前或之...原创 2018-09-10 12:34:32 · 224 阅读 · 0 评论 -
java代码块、静态代码块、局部代码块
代码块:在Java中,使用{}括起来的代码成为代码块根据其位置和声明的不同,可以分为局部代码块:局部位置,用于限定变量的生命周期构造代码块:在类中的成员位置,用{}括起来的代码。每次调用构造方法执行前,都会先执行构造代码块。 作用:可以把多个构造方法的共同代码放在一起。 静态代码块:在类中的成员位置,用{}括起来的代码,只不过它用static修饰 作用:一般是对类进行...原创 2018-09-10 16:55:22 · 446 阅读 · 0 评论 -
每日设计模式之—单例模式
单例模式单例模式:一个系统只能存在一个对象的实例,如一个国家只能有一个皇帝,一个系统只能有一个资源管理器。单例通常分为饿汉式单例和懒汉式单例。饿汉式单例是不管需不需要,一旦加载类就进行创建,懒汉式单例是按需创建。一般来说,懒汉式单例要优于饿汉式单例。在面试过程中,面试官常常会要求我们实现一个单例模式。单例模式的实现通常需要考虑性能和线程安全两个方面,性能高又线程安全的单例模式才是面...原创 2018-09-10 20:23:20 · 156 阅读 · 0 评论 -
SparkStreaming学习示例
随着云计算等相关技术的发展,实时计算分析越来越成为一个重要的议题,许多不同的领域都有着实时处理数据的需求,尤其是在物联网概念提出之后,海量的数据需要存储、处理并且提供实时或者近实时的分析。因此,许多的技术都在试图提供这种实时计算的能力。像Storm,Spark这样的技术框架已经成为市场的主导,尤其是集批处理,流处理、图计算、机器学习为一体的Spark框架更是得到了众多企业、高校、IT从业人员的追捧...原创 2018-04-03 22:29:07 · 364 阅读 · 1 评论 -
java虚拟机学习之(十)java内存模型
“内存模型”,可以理解为在特定的操作协议下,对特定的内存或高速缓存进行读写访问的过程抽象,就像物理计算机中由一开始的CPU—内存交互访问发展到CPU—高速缓存—内存三层交互访问,这也是物理计算机内存模型,不同架构的物理机器可以拥有不一样的内存模型,而java虚拟机也有自己的内存模型。java内存模型,java虚拟机规范中定义的一种用来屏蔽各种硬件操作和操作系统访问差异,以实现java程序在各种平台...原创 2018-03-21 22:33:26 · 142 阅读 · 0 评论 -
java虚拟机学习之(一)java内存区域
原创 2018-03-09 14:43:55 · 142 阅读 · 0 评论 -
java虚拟机学习之(三)对象的内存布局
在HotSpot虚拟机中,对象在内存中存储的布局可以分为三块区域:对象头、实例数据和对齐填充。对象头:包含两个部分,第一部分用于存储对象自身的运行时数据,如哈希值,GC分代年龄、锁状态标志等;第二部分是类型指针,即指向它的类的元数据的指针,虚拟机通过这个指针来确定这个对象是哪个类的实例。如果对象是一个java数组,那在对象头中还必须有一块用于记录数组长度的数据,因为java虚拟机可以通过普通对象的...原创 2018-03-10 21:06:32 · 239 阅读 · 0 评论 -
java虚拟机学习之(四)对象访问定位
创建对象是为了访问对象,那么对象是通过何种方式被访问的呢?前面我们已经对对象的创建过程进行了介绍,但是对于对象的信息的存储位置可能还是不太清楚。下面就先介绍一下对象创建过程中,对象在内存区域的存储,以便我们了解对象的访问。1.对象创建回顾Object obj = new Object();现在假设上述语句出现在方法体中,“Object obj”这部分将会反应到java栈的本地变量表中,作为一个re...原创 2018-03-11 14:53:23 · 177 阅读 · 0 评论 -
java虚拟机学习之(五)垃圾收集器与垃圾回收算法
经过前面是学习我们已经对java运行时区域的各个部分有了一定的了解,其中程序计数器,虚拟机栈,本地方法栈3个区域属于线程私有区域,它们随着线程的创建而存在,随着线程的死亡而释放。栈中的栈帧随着方法的进入和退出也在有条不紊的进行着入栈和出栈操作。每一个栈帧中分配多少内存基本上是在类结构确定下来时就已知的,因此上述区域的内存分配和回收都是确定的,一旦方法结束或者线程结束,相应的内存自然也就被回收了。而...原创 2018-03-11 21:59:43 · 762 阅读 · 0 评论 -
java虚拟机学习之(二)java对象的创建过程
java是一门面向对象的编程语言,在java程序运行的过程中无时无刻不在产生新的对象。在语言层面,java普通对象的创建仅仅是一个new关键字而已,而在虚拟机中,对象的创建(不包括数组和Class对象)又是一个怎样的过程呢??Step1:当虚拟机遇到一条new指令时,首先检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否被加载、解析和初始化过,如果没有,那必...原创 2018-03-09 16:39:21 · 162 阅读 · 0 评论 -
java虚拟机学习之(六)HotSpot虚拟机垃圾收集
java虚拟机学习之(五)垃圾收集器与垃圾回收算法(http://blog.csdn.net/qq_28044241/article/details/79520481)已经介绍了对象存活判定的算法和垃圾收集算法。下面将以HotSpot虚拟机为例,讲述真实情况下虚拟机垃圾回收的相关知识。1.枚举根节点从可达性分析中从GC Roots 节点找到引用链这个操作为例,可作为GC Roots的节点主要在全局...原创 2018-03-14 19:48:00 · 141 阅读 · 0 评论 -
java虚拟机学习之(八)内存分配策略
java技术体系中所提倡的自动内存管理最终可归结为自动化的解决给对象分配内存和回收分配给对象的内存。关于回收内存,我们已经在之前的学习中进行了详细的介绍,下面介绍一下给对象分配内存的相关知识。对象内存的分配,从大的方向上来说是在java堆上分配(但也可能经过JIT(Just In Time)编译器编译后被拆散为标量类型并间接的在栈上分配)。对象主要分配在新生代的Eden上,如果启动了本地线程缓冲,...原创 2018-03-19 20:59:49 · 149 阅读 · 0 评论 -
java虚拟机学习之(九)虚拟机性能监控与故障处理工具
作为java程序开发人员,在程序开发过程中或者程序开发完成之后,总是避免不了需要对自己开发的代码进行各种测试,寻找各种bug,对程序进行优化。一听到bug和优化,很多人包括我自己都会感到头皮发麻,我们总是期望自己写的代码近乎完美,没有bug且性能优越,但这常常是事与愿违,总免不了折腾。下面介绍一些常用的工具,以帮助我们更快的完成代码的调试调优工作。1.JDK的命令行工具很多java开发人员肯定知道...原创 2018-03-20 15:55:03 · 189 阅读 · 0 评论 -
java虚拟机学习之(七)常见垃圾收集器
在此之前我们已经介绍了Hotspot虚拟机如何去发起内存回收,介绍了如何判断对象是否存活,介绍了垃圾回收的各种算法,对比了这些算法 的优缺点,但是虚拟机如何具体的进行垃圾回收动作仍然未涉及,因为内存回收如何进行是由虚拟机所选用的GC收集器而决定的,而通常虚拟机中往往不止一种GC收集器。下面我们来对一些常用的垃圾收集器进行对比介绍。1.Serial收集器Serial收集器是最基本、发展历史最悠久的收...原创 2018-03-18 17:08:33 · 124 阅读 · 0 评论