自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

王傲旗的大数据之路

微信公众号:大数据面试宝典 加入学习群和领取免费的资料

  • 博客(287)
  • 收藏
  • 关注

原创 【无为】聊聊java中JVM的方法区

栈、堆、方法区的关系方法区在哪里?https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-2.html#jvms-2.5.4《Java虚拟机规范》中明确说明: “尽管所有的方法区在逻辑上是属于堆的一部分,但一些简单的实现可能不会选择去进行垃圾收集或者进行压缩。” 但对于HotSpotJVM而言,方法区还有一个别名叫做Non-Heap(非堆),目的就是要和堆分开。所以,方法区看作是一块独立于Java 堆的内存空间。方法区的理解从

2021-12-17 11:25:42 359 2

原创 【无为】聊聊java中JVM的方法区

栈、堆、方法区的关系方法区在哪里?https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-2.html#jvms-2.5.4《Java虚拟机规范》中明确说明: “尽管所有的方法区在逻辑上是属于堆的一部分,但一些简单的实现可能不会选择去进行垃圾收集或者进行压缩。” 但对于HotSpotJVM而言,方法区还有一个别名叫做Non-Heap(非堆),目的就是要和堆分开。所以,方法区看作是一块独立于Java 堆的内存空间。方法区的理解从

2021-12-17 11:19:55 1597

原创 【无为原创】万字图文详解java的堆内存及OOM的解决方案,看完还不懂,从此绝笔不写了

此文阅读大约10分钟,目录如下: 什么是JVM的堆 是不是所有的Java对象都放在堆上? 线程和堆的关系堆的内部结构 面试题 新生代与老年代如何设置堆的大小? 新生代与老年代的比例 设置Eden、幸存者的比例 常用参数对象分配 金句: 分配过程 内存分配策略(或对象提升(promotion)规则): 对象分配原则Minor GC 、Major GC、Full GC Minor GC触发机制

2021-12-15 16:03:29 341

原创 【无为原创】JVM的本地方法栈和本地方法接口详解

上文我们聊到JVM的虚拟机栈,今天我们接着分享JVM的本地方法栈。什么是本地方法接口?简单地讲,一个Native Method就是一个Java调用非Java代码的接口。一个Native Method是这样一个Java方法:该方法的实现由非Java语言实现,比如C。这个特征并非Java所特有,很多其它的编程语言都有这一机制,比如在C++中,你可以用extern "C"告知C++编译器去调用一个C的函数。"A native method is a Java method w

2021-12-13 10:24:25 225

原创 【无为原创】全网最全JVM虚拟机栈讲解,一文弄懂先进后出的原理

什么是栈帧每个线程都有自己的栈,栈中的数据都是以栈帧(Stack Frame)的格式存在。方法和栈桢之间存在怎样的关系?在这个线程上正在执行的每个方法都各自对应一个栈帧(Stack Frame)。栈帧是一个内存区块,是一个数据集,维系着方法执行过程中的各种数据信息。栈帧的先进后厨FILO原理JVM直接对Java栈的操作只有两个: 每个方法执行,伴随着进栈(入栈、压栈)执行结束后的出栈工作遵循“先进后出”/“后进先出”原则栈帧的内部结构局部变量表(local variabl

2021-12-10 11:32:29 752

原创 一文看懂什么是JVM的虚拟机栈?

概述 有不少Java开发人员一提到Java内存结构,就会非常粗粒度地将JVM中的内存区理解为仅有Java堆(heap)和Java栈(stack)?Java虚拟机栈是什么?Java虚拟机栈(Java Virtual Machine Stack),早期也叫Java栈。每个线程在创建时都会创建一个虚拟机栈,其内部保存一个个的栈帧(Stack Frame),对应着一次次的Java方法调用。是线程私有的生命周期生命周期和线程一致。特点栈是一种快速有效的分配存储方式,访问速度仅次于程序计数器。如何理解

2021-12-09 14:07:41 677

原创 耗费2月整理了大数据所有主流框架的demo代码大全

点击上方蓝字关注我们大纲包含如下内容,链接在最后!Javase 相关spark相关flink包括pom文件都有了,具体的大家去GitHub查看,链接我放到最下面一定要帮忙点个星星呀.

2021-12-07 11:12:21 2103 2

原创 一文带你快速了解大厂必问的JVM双亲委派机制

点击上方蓝字关注我们这个真的是大厂必备的,委派机制,我们来看一下都有哪些公司会问到:双亲委派好处有哪些?(亚信)类加载器双亲委派模型机制?(苏宁)双亲委派机制 (蚂蚁金服)双亲委派机制及使用原因 (蚂蚁金服)类加载器的双亲委派模型是什么?(蚂蚁金服)双亲委派模型介绍一下  (小米)讲一下双亲委派模型,以及其优点  (滴滴)类加载器的双亲委派模型是什么?(京东)双亲委派机制的定义    类加载器用来把类加载到Java虚拟机中。从JDK1.2版本开始,

2021-12-05 23:39:05 301

原创 4000字长文深度讲解JVM自定义类加载器

本文目录:1、面试题2、为什么使用自定义类加载器3、应用场景4、实现方式5、代码demo 先上一道面试题1、手写一个类加载器Demo (百度)为什么要自定义类加载器? 隔离加载类 在某些框架内进行中间件与应用的模块隔离,把类加载到不同的环境。比如:阿里内某容器框架通过自定义类加载器确保应用中依赖的jar包不会影响...

2021-12-03 14:10:03 190

原创 3分钟看懂JVM类加载器Classloader源码深度剖析

在看这篇文章之前,先找到Classloader.class这个类,然后对照下文:ClassLoader与现有类加载器的关系: ClassLoader是一个抽象类。如果我们给定了一个类的二进制名称,类加载器应尝试去定位或生成构成定义类的数据。一种典型的策略是将给定的二进制名称转换为文件名,然后去文件系统中读取这个文件名所对应的class文件。ClassLoader的主要方法抽象类ClassLoader的主要方法:(内部没有抽象方法) public fi...

2021-12-02 15:52:56 439

转载 一文带你快速了解 Spark 架构设计与原理思想

卷友们,大家好 ~ 本篇为大家介绍 关于Spark 的架构设计和原理,希望大家受用!如果觉得内容不错,记得多多转发?1-引子 MapReduce 主要使用磁盘存储计算过程中的数据,虽然可靠性比较高,但是性能却较差 。此外,MapReduce 只能使用 map 和 reduce 函数进行编程,虽然能够完成各种大数据计算,但是编程比较复杂 。而且受 map 和 reduce 编程模型相对简单的影响,复杂的计算必须组合多个 MapReduce job 才能完成,编程难度...

2021-12-01 20:29:55 325

原创 图文详解JVM自带的各种类加载器

站在程序的角度看,引导类加载器与另外两种类加载器(系统类加载器和扩展类加载器)并不是同一个层次意义上的加载器,引导类加载器是使用C++语言编写而成的,而另外两种类加载器则是使用Java语言编写而成的。由于引导类加载器压根儿就不是一个Java类,因此在Java程序中只能打印出空值。

2021-11-30 10:30:19 361

原创 图文详解JVM类加载的第4、5个步骤,类的使用与卸载

往期推荐2000字带你学习JVM类加载的第一个步骤(Loading字节码)4分钟带你看懂JVM类加载的第二个过程之Linking(链接阶段)2200字带你学习JVM类加载的第三个阶段(初始化)类的使用(Using)任何一个类型在使用之前都必须经历过完整的加载、链接和初始化3个类加载步骤。一旦一个类型成功经历过这3个步骤之后,便“万事俱备,只欠东风”,就等着开发者使用了。开发人员可以在程序中访问和调用它的静态类成员信息(比如:静态字段、静态方法),或者使用n...

2021-11-29 15:51:09 300

原创 2200字带你学习JVM类加载的第三个阶段(初始化)

往期推荐2000字带你学习JVM类加载的第一个步骤(Loading字节码)4分钟带你看懂JVM类加载的第二个过程之Linking(链接阶段)子类加载前先加载父类?在加载一个类之前,虚拟机总是会试图加载该类的父类,因此父类的<clinit>总是在子类<clinit>之前被调用。也就是说,父类的static块优先级高于子类。口诀:由父及子,静态先行。哪些类不会生成<clinit>方法?Java编译器并不会为所有的类都产生&...

2021-11-29 15:48:35 1375

原创 4分钟带你看懂JVM类加载的第二个过程之Linking(链接阶段)

所谓解析就是将符号引用转为直接引用,也就是得到类、字段、方法在内存中的指针或者偏移量。因此,可以说,如果直接引用存在,那么可以肯定系统中存在该类、方法或者字段。但只存在符号引用,不能确定系统中一定存在该结构。

2021-11-29 15:45:54 2577

原创 2000字带你学习JVM类加载的第一个步骤(Loading字节码)

先来几道面试题,试试会不会·简述Java类加载机制?(百度)·JVM类加载机制(滴滴)·JVM中类加载机制,类加载过程,什么是双亲委派模型?(腾讯)·JVM的类加载机制是什么?(京东)ᡧ01-类的加载过程(生命周期)᪺01-说说类加载分几步?按照Java虚拟机规范,从class文件到加载到内存中的类,到类卸载出内存为止,它的整个生命周期包括如下7个阶段:其中:①第一过程的加载(loading)也称为装载②验证、准备、解析3个部...

2021-11-24 23:45:38 387

原创 Class 文件结构(二)

文章目录类索引、父类索引、接口索引集合字段表集合字段计数器字段表字段表集合字段计数器字段表方法表集合**方法表集合****方法计数器**方法表属性表集合**属性表集合(attributes)**属性计数器属性表类索引、父类索引、接口索引集合· 在访问标记后,会指定该类的类别、父类类别以及实现的接口,格式如下:· 这三项数据来确定这个类的继承关系。· 类索引用于确定这个类的全限定名· 父类索引用于确定这个类的父类的全限定名。由于 Java语言不允许多重继承,所以父类索引只有

2021-11-17 19:05:15 449

原创 Class 文件结构(一)

文章目录Class 文件结构细节class文件结构细节概述class文件的魔数是什么?如何确保高版本的JVM可执行低版本的class文件?常量池:class文件的基石?作用是?为什么需要常量池计数器?常量池表**常量类型和结构**总结:访问标识Class 文件结构细节· 官方文档位置:https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html· Class 类的本质任何一个Class文件都对应着唯一一个类或接口的定义信息

2021-11-16 21:56:43 591 1

原创 什么是Java语言和Java生态圈,资深程序员的理解

文章目录Java语言与Java生态圈Oracle JDK与Open JDK之间的关系JDK与JRE与JVM如何理解Java是跨平台的语言如何理解JVM是跨语言的平台Java的发展历程常见的JVMJVM的生命周期?重点说下HotSpot?Java语言与Java生态圈Oracle JDK与Open JDK之间的关系Oracle JDKJava最早是由SUN公司发明,Oracle JDK之前叫SUN JDK,显而易见,这是在2009年Oracle收购SUN公司之前,收购之后被名为Oracle JDK,实际

2021-11-15 22:51:54 461

原创 教你如何直接阅读一个java的字节码指令(三)

文章目录控制转移指令条件跳转指令比较条件跳转指令多条件分支跳转无条件跳转异常处理指令抛出异常指令异常处理与异常表同步控制指令方法级的同步方法内指定指令序列的同步面试题控制转移指令​ 程序流程离不开条件控制,为了支持条件跳转,虚拟机提供了大量字节码指令,大体上可以分为​ 1)比较指令、​ 2)条件跳转指令、​ 3)比较条件跳转指令、​ 4)多条件分支跳转指令、​ 5)无条件跳转指令等。条件跳转指令一、条件跳转指令条件跳转指令通常和比较指令结合使用。在条件跳转指令执行前,一般可以先用比较指令

2021-11-13 21:15:25 722

原创 教你如何直接阅读一个java的字节码指令(二)

文章目录对象的创建与访问指令创建指令字段访问指令数组操作指令类型检查指令方法调用与返回指令方法调用指令方法返回指令操作数栈管理命令对象的创建与访问指令​ Java是面向对象的程序设计语言,虚拟机平台从字节码层面就对面向对象做了深层次的支持。有一系列指令专门用于对象操作,可进一步细分为创建指令、字段访问指令、数组操作指令、类型检查指令。创建指令一、创建指令虽然类实例和数组都是对象,但Java虚拟机对类实例和数组的创建与操作使用了不同的字节码指令:1. 创建类实例的指令:· 创建类实例的指令

2021-11-13 21:11:06 837

原创 教你如何直接阅读一个java的字节码指令(一)

文章目录字节码指令字节码与数据类型指令分类加载与存储指令**加载和存储指令**操作数栈与局部变量表局部变量压栈指令常量入栈指令出栈装入局部变量表指令算术指令所有的算术指令比较指令的说明类型转换指令宽化类型转换窄化类型转换字节码指令Java字节码对于虚拟机,就好像汇编语言对于计算机,属于基本执行指令。Java 虚拟机的指令由一个字节长度的、代表着某种特定操作含义的数字(称为操作码,Opcode)以及跟随其后的零至多个代表此操作所需参数(称为操作数,Operands)而构成。由于 Java 虚拟机采用面向

2021-11-13 20:57:21 1209 1

原创 教你如何直接阅读一个java的字节码文件结构分析----附带逐字节码分析图

字节码文件概述字节码文件是跨平台的吗?Java 虚拟机不和包括 Java 在内的任何语言绑定,它只与“Class 文件”这种特定的二进制文件格式所关联。无论使用何种语言进行软件开发,只要能将源文件编译为正确的Class文件,那么这种语言就可以在Java虚拟机上执行。可以说,统一而强大的Class文件结构,就是Java虚拟机的基石、桥梁。想要让一个Java程序正确地运行在JVM中,Java源码就必须要被编译为符合JVM规范的字节码。· 所有的JVM全部遵守Java虚拟机规范,也就是说所有的J

2021-11-11 22:28:17 661 1

原创 一文带你读懂Java语言和JVM的发展历程

大家好,我是笔者无为,今天给大家分享一下Java和JVM的发展历程,如果你觉得我写的不错的话,请在文末给我点个大大的赞,谢谢~本文约2000字,阅读大约需要8分钟文章目录如何理解Java是跨平台的语言如何理解JVM是跨语言的平台Java的发展历程常见的JVMJVM的生命周期?重点说下HotSpot?如何理解Java是跨平台的语言“write once, run anywhere.” 一次写入,导出运行!当Java源代码成功编译成字节码后,如果想在不同的平台上面运行,则无须再次编译这个优势.

2021-11-11 20:09:14 1839

原创 8周吃透JVM之年薪百万的Java架构师每天都会思考什么?

思考如何让我的系统变得更快,如何避免系统出现瓶颈。生产中经常会遇到的问题运行着的线上系统突然卡死,系统无法访问,甚至直接OOM!想解决线上JVM GC问题,但却无从下手。新项目上线,对各种JVM参数设置一脸茫然,然后就GG了。每次面试之前都要背一遍JVM的一些原理概念性的东西,然而面试官却经常问把你在实际项目中如何调优JVM参数的,如何解决GC、OOM等问题,导致你一脸懵逼架构师的任务,就是解决这些问题...

2021-10-25 14:35:06 158

原创 字节二面,居然给我出的是这道算法题(8)【推荐收藏】

题目是:定义一个二叉树结构,并实现一个接受根结点作为参数,将二叉树中每个节点的左右子节点交换位置的二叉树翻转方法。我给出了以下答案:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val

2021-07-25 20:40:42 231 2

原创 字节二面,居然给我出的是这道算法题(7)【推荐收藏】

题目是:了解算法的空间复杂度和时间复杂度么?时间复杂度:时间复杂度是用来描述算法运行时间和算法处理问题规 模之间关系的一种衡量标准。1.1、忽略公式中的常数项1.2、忽略公式中的低次幂项,仅保留公式中的最高次幂 项1.3、忽略公式中的最高次幂项的常数系数1.4、如果一个公式中所有项均为常数项,那么这个算法的时间复杂 度为o(1) 常见时间复杂度大小关系:o(n*n) > o(nlogn) > o(1)空间复杂度:空间复杂度是用来衡量一个算法在运行 过程中,在除了保存原始数据空间外还需

2021-07-25 20:39:45 221 1

原创 字节二面,出的是这道算法题(6)【推荐收藏】

题目是:请简述反转链表的两种方式及优缺点。这个题目我给出了两个解决方案。一种是循环、一种是递归。递归的优点会不停地压栈弹栈,比较耗时间。代码如下:循环方式 public static Node iterate(Node head){ Node prev = null , next ; Node curr = head ; while(curr != null){ next = curr.next ;//

2021-07-25 20:38:11 162 1

原创 字节二面,出的是这道算法题(5)【推荐收藏】

题目:如何判断一个整数是“2”的整数次幂?我想了想,给出了以下答案:public static boolean isPowerOf2(int num){ return (num & num - 1) == 0;}/*时间复杂度:O(1)*/

2021-07-25 20:35:58 193

原创 字节二面,出的是这道算法题(4)【推荐收藏】

题目:给你一个非负整数 num,请你返回将它变成 0 所需要的步数。 如果当前数字是偶数,你需要把它除以 2;否则,减去 1。示例 1:输入:num = 14输出:6解释:步骤 1) 14 是偶数,除以 2 得到 7。步骤 2)7 是奇数,减 1 得到 6。步骤 3)6 是偶数,除以 2 得到 3。步骤 4)3 是奇数,减 1 得到 2。步骤 5)2 是偶数,除以 2 得到 1。步骤 6)1 是奇数,减 1 得到 0。示例 2:输入:num = 8输出:4解释:步骤 1)8 是

2021-07-25 20:35:10 154

原创 字节二面,出的是这道算法题(3)【推荐收藏】

题目是:三数之和:给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c,使得 a + b + c = 0?请你找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。示例:给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为:[[-1, 0, 1],[-1, -1, 2]]求解过程如下:首先我们先把数组排个序(原因一会儿说),排完序长这样:因为我们要同时找三个数,所以采取固定一个数,同时用双指针来查找

2021-07-25 20:34:06 286 1

原创 字节二面,给我出的是这道算法题(2)【推荐收藏】

题目:给你一个非负整数 num ,请你返回将它变成 0 所需要的步数。 如果当前数字是偶数,你需要把它除以 2 ;否则,减去 1 。示例 1:输入:num = 14输出:6解释:步骤 1) 14 是偶数,除以 2 得到 7 。步骤 2) 7 是奇数,减 1 得到 6 。步骤 3) 6 是偶数,除以 2 得到 3 。步骤 4) 3 是奇数,减 1 得到 2 。步骤 5) 2 是偶数,除以 2 得到 1 。步骤 6) 1 是奇数,减 1 得到 0 。示例 2:输入:num = 8输出:

2021-07-25 20:29:24 186 1

原创 字节二面,面试官给我出的是这道算法题

题目:给定一个仅包含大小写字母和空格 ’ ’ 的字符串s,返回其最后一个单词的长度。如果字符串从左向右滚动显示,那么最后一个单词就是最后出现的单词。示例:输入: “Hello World”输出: 5说明: 一个单词是指仅由字母组成、不包含任何空格字符的 最大子字符串。我苦思冥想,给出了以下答案://JAVAclass Solution { public int lengthOfLastWord(String s) { if(s == null |

2021-07-23 15:30:26 303 2

原创 程序员工资一般多少钱一个月?【推荐】

其他行业没这么麻烦,一个职位总是有很多人能胜任的,选择多了,公司就有条件把工资降低。但在程序员招聘方面,谈工资的权利在程序员手里,因为对方没有选择。程序员本来就那么稀有,非常适合要求的程序员更是稀有之稀有,不能错过。程序员收入比其他职业高是事实,而且一点都不虚。南宁程序员工资一般多少钱一个月在互联网时代,程序员成为炙手可热的职业。虽然加班累成狗,也有可能面临英年早秃的局面,但是不得不说程序员的工资高于很多很多传统行业职位的工资。事实...

2021-07-22 16:39:44 2257 1

原创 大数据高频面试题之Hive的数据存储格式

类型texfile:默认的存储格式:普通的文本文件,数据不压缩,磁盘的开销比较大,分析开销大。sequencefile:提供的一种二进制存储格式,可以切割,天生压缩。rcfile:提供的是一种行列混合存储方式,该方式会把相近的行和列数据放在一块儿,存储比较耗时,查询效率高,也天生压缩。orc:是rcfile的一种优化存储。parquet:自定义输入输出格式。具体描述1)texfile普通文本文件(通常默认的就是这个格式)创建表create table if not exists one (

2021-04-15 19:11:49 293

原创 大数据高频面试题之Hive表数据的加载与导出

Hive表数据加载1)直接向分区表中插入数据insert into table score3 partition(month =‘201807’) values (‘001’,‘002’,‘100’);2)通过查询插入数据先通过load加载创建一个表(linux) load data local inpath ‘/export/servers/hivedatas/score.csv’ overwrite into table score partition(month=‘201806’);(HD

2021-04-15 19:06:24 212

原创 大数据高频面试题之Hive常用函数总结

Hive内部支持大量的函数,可以通过 SHOW FUNCTIONS 查看Hive的内置函数。灵活地运用Hive提供的函数能够极大地节省数据分析成本。Hive函数主要包含数学函数,集合函数,类型转换函数,日期函数,条件函数,字符串函数,聚合函数和表生成函数等。1)数学函数数学函数是Hive内部提供的专门用于数学运算的函数,如round()函数和sqrt()函数等。round()函数主要用来对给定的数字进行四舍五入取近似值,如下所示:hive (default)> SELECT ROUND(5.5)

2021-04-14 17:57:28 289

原创 大数据高频面试题之Hive的分区及其优势

什么是hive分区 : 就是一种对表进行粗略划分的机制,可以实现加快查询速度的组织形式.在使用分区时, 在表目录下会有相应的子目录,当查询时添加了分区谓词,那么该查询会直接定位到相应的子目录中进行查询,避免全表查询,提成查询效率.注意事项:1 . hive的分区使用的表外字段,分区字段是一个伪列但是可以查询过滤。2 . 分区字段不建议使用中文3 . 不太建议使用动态分区。因为动态分区将会使用mapreduce来查询数据,如果分区数量过多将导致namenode和yarn的资源瓶颈。所以建议动态分区前

2021-04-13 14:44:08 390

原创 大数据高频面试题之Hive的严格模式

Hive提供了一个严格模式,可以防止用户执行那些可能意想不到的不好的影响的查询。通过设置属性hive.mapred.mode值为默认是非严格模式nonstrict 。开启严格模式需要修改hive.mapred.mode值为strict,开启严格模式可以禁止3种类型的查询。对于分区表,除非where语句中含有分区字段过滤条件来限制范围,否则不允许执行。换句话说,就是用户不允许扫描所有分区。进行这个限制的原因是,通常分区表都拥有非常大的数据集,而且数据增加迅速。没有进行分区限制的查询可能会消耗令人不可接受的

2021-04-13 14:40:14 200

原创 大数据高频面试题之如何合理设置Reduce的数量

1.调整reduce个数方法一(1)每个Reduce处理的数据量默认是256MBhive.exec.reducers.bytes.per.reducer=256000000(2)每个任务最大的reduce数,默认为1009hive.exec.reducers.max=1009(3)计算reducer数的公式N=min(参数2,总输入数据量/参数1)2.调整reduce个数方法二在hadoop的mapred-default.xml文件中修改设置每个job的Reduce个数set mapre

2021-04-13 14:37:18 382

空空如也

空空如也

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

TA关注的人

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