自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

lslxy1021的博客

溪云初起日沉阁 山雨欲来风满楼

  • 博客(65)
  • 资源 (1)
  • 收藏
  • 关注

原创 Oozie 4.3.0 更新日志

根据官方版本日志 release log 和 jira,梳理出 Oozie 4.3 版本主要更新内容。更新主要以 bug 修复与组件升级为主,包含一些功能和性能改进。

2020-04-05 16:36:58 494

原创 编译原理 - 推导与归约(二)

语法树,也称语法分析树,是针对上下文无关文法,用来表示一个句型的生成过程的一种描述手段,是推导的图形表示形式。如果一个文法存在某个句子对应两颗不同的语法树,则说这个文法是二义的。不存在一个算法,能在有限步骤内,确切判定任给的一个文法是否为二义的。只要找到一个句子,该句子对应两个不同的语法树,即证明该文法是二义的。

2020-03-29 21:41:46 1504

原创 编译原理 - 推导与归约(一)

在介绍完文法的基本概念后,接下来将介绍一下编译原理中的推导与归约。推导,意思是用产生式的右部,主要分为最左推导和最右推导。归约则是推导的逆过程,最左推导对应最右归约,最右推导对应最左归约。

2020-03-23 00:10:56 12329 1

原创 编译原理 - 文法(二)

在 编译原理 - 文法(一) 一文中,讲了文法分为四类。该分类标准由乔姆斯基于1956年提出,所以又将其称为乔姆斯基层次结构。这个分类谱系把所有的文法分成四种类型:0型文法、1型文法、2型文法和3型文法。这四种文法类型依次拥有越来越严格的产生式规则,所能表达的语言也越来越少。尽管表达能力比0型文法和1型文法要弱,但由于可以高效率的实现,2型文法和3型文法成为四类文法中最重要的两种文法类型。

2020-03-21 23:23:57 825 2

原创 编译原理 - 文法(一)

语言是由文法描述的,文法使用有限的规则将无限的语言描述出来,语言是文法所描述的所有句子的集合。简单来说,就是指怎么由一堆符号组成一个有含义的句子的规则,它是产生中间代码或目标代码的依据。文法包含词法规则和语法规则。

2020-03-20 23:40:14 2878

原创 GC IN Java

CMS唯一组合方式young:ParNewold:CMS(失败时降为Serial)启动Parallel GC(parallel scavenge garbage collector)时默认启动ParallelOldGC,反之亦然。也可以显示禁用某一个,此时替换为Serial-XX:+UseParallelGC -XX:-UseParallelOldGC年轻代采用的都是复制算法,都...

2019-02-17 01:21:35 243

原创 283. Move Zeroes

description:Given an array nums, write a function to move all 0’s to the end of it while maintaining the relative order of the non-zero elements.Example:Input: [0,1,0,3,12]Output: [1,3,12,0,0]req...

2019-01-29 22:47:50 195

原创 136. Single Number

description:Given a non-empty array of integers, every element appears twice except for one. Find that single one.require:Your algorithm should have a linear runtime complexity. Could you implement i...

2019-01-29 22:29:38 181

原创 104. Maximum Depth of Binary Tree

description:Given a binary tree, find its maximum depth.The maximum depth is the number of nodes along the longest path from the root node down to the farthest leaf node.Note: A leaf is a node with ...

2019-01-27 22:52:19 217

原创 344. Reverse String

Reverse Stringdescription: Write a function that reverses a string. The input string is given as an array of characters char[].require: Do not allocate extra space for another array, you must do t...

2019-01-27 21:53:21 185

原创 Linux下JDB断点调试&HSDB查看内存布局

JDK中提供了命令行下的断点调试工具:JDB。它可以调试正在运行或未运行的Java程序。现在我们编写一个Java程序public class Hello { private String s0 = "private"; public String s1 = "public"; public static String s2 = "static"; public static f..

2019-01-20 23:32:02 1761

原创 Metaspace 与 Compressed Class Space Size

Class MetadataJava classes have an internal representation within Java Hotspot VM and are referred to as class metadata. In previous releases of Java Hotspot VM, the class metadata was allocated in t...

2019-01-20 00:00:33 865

转载 Linux epoll 与多路复用

针对IO,总是涉及到阻塞、非阻塞、异步、同步以及select/poll和epoll的一些描述,那么这些东西到底是什么,有什么差异?一般来讲一个IO分为两个阶段:等待数据到达把数据从内核空间拷贝到用户空间现在假设一个进程/线程A,发出IO请求,有两种情况:立即返回由于数据未准备好,需要等待,让出CPU给别的线程,自己sleep第一种情况就是非阻塞,A为了知道数据是否准备好,需要...

2019-01-18 21:10:49 241

转载 CPU缓存与伪共享(false sharing)

转载自云栖社区 - Java中的伪共享以及应对方案什么是伪共享CPU缓存系统中是以缓存行(cache line)为单位存储的。目前主流的CPU Cache 的 Cache Line 大小都是64Bytes。在多线程情况下,如果需要修改“共享同一个缓存行的变量”,就会无意中影响彼此的性能,这就是伪共享(False Sharing)。CPU的三级缓存由于CPU的速度远远大于内存速度,所以CPU...

2019-01-16 22:10:38 1110

原创 SQL 、Java 与 Shell 中获取零点时间

在项目中我们可能需要统计昨日零点至今日零点的数据,这时需要根据当前时间计算零点时间。SQL (Vertica)SELECT extract(epoch from 'today');Java 获取零点时间// 今日零点LocalDateTime zeroTime = LocalDateTime.of(LocalDate.now(), LocalTime.MIN);// 昨日零...

2018-11-18 13:54:58 1623 1

原创 systemctl 管理服务

Linux systemctlsystemctl 命令,主要有两个功能:控制 systemd 系统管理系统上运行的服务systemctl 融合了 service 和 chkconfig 的功能于一体,可以通过它启用/禁用服务。语法:systemctl [OPTIONS…] COMMAND [NAME…]COMMAND:start:立刻启动后面接的 unitstop:立刻...

2018-11-11 14:05:10 277

原创 Linux alternatives 控制 Java 版本

alternativesalternatives 命令是 Linux 中的维护符号链接引用的命令,一般用来控制版本切换。update-alternatives 命令同alternatives。例如,在 Linux 上安装 JDK 8 与 JDK 11 两个版本,因为 hive 3.1.1 版本还不支持 JDK 11,因此需要在 JDK 8 和 11 中切换。使用示例向 alternati...

2018-11-02 22:44:22 422

原创 NIO 通信示例

在之前的三篇文章中介绍了 NIO 的相关知识: Java NIO 缓冲区 Java NIO 通道 Java NIO 选择器Selector下面根据 NIO 的相关知识,编写一个 NIO 服务端与客户端通信的一个完整的比较简单的例子。程序的功能是客户端向服务器端发送 request time 请求,服务器接收到请求并验证正确后向客户端返回服务器时间。服务器:public cl...

2018-10-21 14:54:00 279

原创 NIO 2 Paths 与 Files 使用

Paths 类与 Files 类属于NIO 2的一部分,在 JDK 7 中引入,并在 JDK 8 中增加了一些适应新增特性(Stream等)的方法。这两个类一般配合起来使用,其中封装了许多操作文件的方法,相比之前的 File 类,更为简洁方便,也包含更细粒度的控制功能。关于 File 类存在的问题,可以参考这篇文章:Legacy File I/O CodePathPath 可以理解为定义的一...

2018-10-21 14:44:06 560

原创 Java NIO — 选择器(Selector)

SelectorJava NIO 的实现关键在于多路复用 I/O 技术,而多路复用的核心在于通过 Selector 以轮询的方式查找注册在其上的 Channel,当发现某个或者多个 Channel 处于就绪状态后,从阻塞状态返回就绪的 Channel 的选择键集合,进行后续I/O 操作。Selector 一般翻译为选择器,也可以翻译为多路复用器。Selector 需要结合通道 Channel ...

2018-10-21 13:28:01 356

原创 Java NIO — 通道(Channel)

NIO 中主要的三个概念为缓冲区、通道、选择器,它们之间的关系如下所示:此处要提醒的是,JDK 1.7 升级了 NIO 类库,升级后的 NIO 类库被称为 NIO2.0。在 NIO2.0 中,提供了异步文件I/O操作,同时提供了与 UNIX 网络编程事件驱动I/O对应的 AIO。在之前《Java NIO 缓冲区》一文中已经介绍过缓冲区的相关知识,本文主要介绍通道的使用。通道(Channe...

2018-10-21 12:44:12 369

原创 并发基础 CAS

CAS(Compare and Swap),译为比较并交换。 java.util.concurrent 包实现的基础正是 CAS,是乐观锁思想的运用。CAS 的基本思想:先进行操作,如果没有其他线程争用共享数据,操作成功;如果共享数据有争用,产生冲突,不断地重试,直到成功为止。这种乐观并发的策略需要硬件指令集的支持。这类指令常用的有: 测试并设置(Test and Set) 获取并增...

2018-10-21 11:52:48 235

原创 原子性与可见性

Java 内存模型是围绕着原子性、可见性、有序性三个方面建立的,理解原子性与可见性有助于我们理解 Java 内存模型,加深对多线程编程的理解。原子性原子性指一个操作不能被打断,要么全部执行完毕,要么不执行。除了 long 和 double 型变量,java 内存模型确保访问任意类型变量所对应的内存单元都是原子的,包括引用类型的字段。long 和 double 类型的变量是64位。在32位...

2018-10-21 11:12:55 1124

原创 Fork/Join 并行任务框架

如果现在要你编写计算 1! + 2! + 3! + 4! + … + 20! 的代码,你会怎么做?最自然的想法是从左边依次向右计算,不断迭代结果。毕竟对于人来说,一心二用还是比较难的,在同一时间只做一件事情是常见的场景。用代码来实现的话,示例如下:public class factorial { public static int compute(int n) { ...

2018-10-21 10:53:32 333

原创 约瑟夫环问题

问题描述:已知n个人(以编号1,2,3…n分别表示)围坐在一张圆桌周围。从编号1的人开始报数,数到k的人出局;下一个人又从1开始报数,数到k的人出局。依此规律重复下去,直到只剩下一个人。求每次出局的人的编号及最后剩下的人的编号。解析:题目要求输出每次出局的人的编号,因此采用模拟法模拟过程。以5个人为例,从第一个人开始报数,数到3的人出局。过程如下:循环链表解法可以采用循环链表解决约瑟...

2018-10-20 23:58:12 897

原创 Java 创建对象的五种方式

对初学Java的人来说,这个问题可能有点奇怪,创建对象不就是通过 new 关键字,还有其它方式吗?事实上,Java中有五种方法可以用来创建对象,每种方法都有其用途: new 关键字,会调用构造方法 clone() 方法,不会调用构造方法 反序列化方式,不会调用构造方法 Class 对象的 newInstance() 方法,会调用构造方法 Constructor 对象的 ne...

2018-10-20 00:05:43 247

原创 可重入锁之 ReentrantLock

自Java 5之后,java.util.concurrent.locks 包中的 Lock 接口提供了一种新的方式来实现同步访问。Lock 接口提供了与 synchronized 类似的同步功能,但需要在使用时手动获取和释放锁。此外,Lock 接口更为灵活,提供了以下 synchronized 接口所不具备的特性: 超时获取锁:在指定时间内获取锁,超过时间仍未获得锁则返回 公平锁:可以...

2018-10-19 23:54:28 203

原创 双亲委派模型

Java 虚拟机中类加载的过程包括加载、验证、准备、解析、初始化五个阶段,其中验证、准备、解析三个阶段合起来又称为连接阶段。加载是类加载过程的第一个阶段,在加载阶段,虚拟机需要完成以下三件事情: 通过类的全限定名获取其定义的二进制字节流。 将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构。 在 Java 堆中生成一个代表这个类的 java.lang.Class 对象,作...

2018-10-15 23:56:57 479 1

原创 JVM 垃圾回收机制

垃圾回收(Garbage Collect,简称GC)是编程语言中提供的内存管理功能。在一些不具备GC的语言如 C++中,手动创建对象后需要在不使用该对象上手动释放它的内存空间,防止内存泄漏。另外一些语言如 Java、Python 等则无需手动管理内存,内置了垃圾回收机制,使开发人员从内存管理上解脱出来。在垃圾回收之前,首先要要找出死亡的对象,或者说仍旧存活的对象,存活对象的判定主要有如下两种算...

2018-10-14 12:22:32 217

原创 Java 并发工具类使用

java.util.concurrent 包从 JDK1.5 开始引入,目的是解决并发编程的线程安全问题,提供非常有用的并发工具类,包括 CountDownLatch、CyclicBarrier 与 Semaphore 等。在 concurrent 包下还有两个子包,一个是 atomic,包含一些原子类,可以解决原子性问题;另一个包是 locks,提供了并发包里线程安全的最为基础的工具——显示锁...

2018-10-14 12:10:29 258

原创 最大子序列和问题

最大子序列和是指,给定一组序列,如 [1,-3,2,4,5],求子序列之和的最大值,对于该序列来说,最大子序列之和为 2 + 4 + 5 = 11。这里的子序列要求是连续的,因此也可以称其为连续子数组最大和。有几种不同的方法求解最大子序列和问题,但它们的复杂度相差甚远,尤其在面对大量数据的时候。实际上,效率最高的算法非常简短,只需要几行代码,最主要的是理解它的思想。基本算法这是一种比较容...

2018-10-14 11:48:08 31429 6

原创 ThreadLocal 用途与使用场景

ThreadLocal,即线程变量,是一个以 ThreadLocal 对象为键、任意对象为值的存储结构。概括起来说,对于多线程资源共享的问题,同步机制采用了“以时间换空间”的方式,而 ThreadLocal 采用了“以空间换时间”的方式。前者仅提供一份变量,让不同的线程排队访问;后者为每一个线程都提供了一份变量,因此可以同时访问而互不影响。ThreadLocal 类主要有如下方法: pr...

2018-10-14 11:12:52 7310 1

原创 Java 多线程通信

并发编程,一般指多线程编程,它可以充分利用计算机的计算资源,使得一个任务可以分为几个子模块同时执行,提高程序执行速度。然而,并不是启动越多线程,就能让程序执行越快,多线程同时带来了上下文切换、多线程间的通信与同步、死锁等问题。合理的利用多线程进行编程是一件有挑战性的事。Java自一开始就内置了对多线程的支持,在JDK1.5版本中引入了 java.util.concurrent 包,让 Java ...

2018-10-14 10:52:47 1338

原创 Java 新生代与老年代

Java 中的内存区域主要有堆和栈两部分。由于栈是线程私有,随着线程的结束而结束,因此垃圾回收主要在堆中进行,堆中几乎存放了 Java 中所有的对象实例。堆内存模型堆内存分为两大部分:新生代和老年代,比例关系为1:2。新生代又分为 Eden、ServivorFrom、ServivorTo 三个区域,比例为8:1:1。ServivorFrom 与 ServivorTo 又被称为幸存者区。...

2018-10-14 10:15:00 592

原创 字符串匹配 KMP 算法

KMP算法是 BF(Brute Force) 算法的一种改进算法,是一种较为高效的字符串匹配算法。相比 BF 暴力匹配算法,KMP 算法的思想是利用已匹配的信息,使得能够不发生回溯,也就是当发生不匹配时,文本串(source)的位置不变,尽量向右移动模式串(target),如下图所示:前缀与后缀KMP 算法的核心是 next 数组的求解,而要理解 next 数组需要先理解前缀和后缀的概...

2018-10-14 09:33:38 292

原创 Java NIO 缓冲区

JDK 1.4 中引入的新输入输出 (NIO) 库提供了高速的、面向块的 I/O。Java中原有的面向流的 IO 已经以 NIO 为基础重新进行了实现,因此现在它也可以利用 NIO 的一些特性。NIO提供了对多路复用的支持,主要优势在于一个线程可以处理多个连接,减少线程切换带来的开销。通道和缓冲区是 NIO 中的核心对象,几乎在每一个 I/O 操作中都要使用它们。缓冲区在面向流的 I/O ...

2018-10-14 00:27:13 239

原创 观察者模式

观察者模式,又叫发布-订阅(Publish/Subscribe)模式,它定义了对象之间一对多的依赖关系,当一个对象状态改变时,其他相关联的对象就会得到通知并被自动更新。例如,现有一组数据,分别画出柱状图、饼状图、折线图,当数据发生变化时,图形也需要同时进行相应的变化。如图所示,监听的对象叫观察者(Observer),被监听的对象叫被观察者(Observable,也称主题Subject)。...

2018-10-14 00:10:17 207

原创 最小堆解决 Top K 问题

Top K 问题指从一组数据中选出最大的K个数。常见的例子有:热门搜索前10,最常听的20首歌等。对于这类问题,可能我们会首先想到先对这组数据进行排序,再选取前K个数。虽然这能解决问题,但效率不高,因为我们只需要部分有序,它却对整体进行了排序。最小堆是解决Top K 问题的一个好的方法(如果我们需要选出K个最小的数,用的是最大堆)。Top K 实现步骤最小堆也叫小根堆,实际上是一个完全二...

2018-10-14 00:00:53 1014

原创 Java 优先级队列

队列(queue)是一种先入先出(FIFO)的数据结构。栈中的插入和移除数据项的命名一般都是Push、Pop,而队列至今没有标准化的命名。插入操作可以用add、offer、enque等命名,移除操作可以用poll、remove、deque等命令,查看队头操作可以用peek、remove等命令。在 Java 中,常见的队列操作以及它们的区别如下所示:插入offer向队列插入元素,在一...

2018-10-13 23:35:01 10364

原创 VMwave 虚拟机的三种上网方式

对于资金不是很充裕的同学来说,通过虚拟机体验服务器的搭建过程是一个很好的开始。此外,虚拟机可以让我们方便的体验不同的操作系统而无需担心因误操作而带来的“后果”。虚拟机主要有VMware Workstation和VirtualBox,这里以VMvare为例介绍通过虚拟机上网的三种方式: 桥接模式(将虚拟机直接连接到外部网络) NAT模式(与虚拟机共享主机的IP地址) 仅主机模式(在专...

2018-10-07 22:04:12 552

Hive-Vectorized-Query-Execution-Design.pdf

hive 向量化执行的设计说明。通过在单个操作中获取 1024 行,而不是每次只获取单行来改善 scans、aggregations、filters 和 join 这类操作的性能。

2020-04-18

空空如也

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

TA关注的人

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