3 山禾说

尚未进行身份认证

我要认证

胸中有沟壑,眼里存山河

等级
TA的排名 6w+

【两万字】面试官:听说你很懂集合源码,接我二十道问题!

【高能预警】:两万字长文,建议先收藏再看,深度源码分析,二十个问题带你一网打尽集合面试。

2020-06-28 08:40:56

面试官:十问泛型,你能扛住吗?

问题一:为什么需要泛型?答:使用泛型机制编写的代码要比那些杂乱的使用Object变量,然后再进行强制类型转换的代码具有更好的安全性和可读性,也就是说使用泛型机制编写的代码可以被很多不同类型的对象所重用。问题二:从ArrayList的角度说一下为什么要用泛型?答:在Java增加泛型机制之前就已经有一个ArrayList类,这个ArrayList类的泛型概念是使用继承来实现的。public class ArrayList {   &nbs

2020-06-22 08:27:35

面试官:面向对象都不会?收拾收拾回去吧

2020年6月13日 多云转暴雨⛈️I'm sad,tired,negative,powerless,miss,lonely fine :)那你回去等通知吧面试官:我看你简历上说,你的主要编程语言是Java,偶尔也用Python,那么你可以说一下这两个的相同点在什么地方吗?山禾:它们都是高级程序设计语言,都是面向对象的语言。面试官:那你讲讲你是怎么理解面向对象的吧。山禾:emmm。。封装,继承,多态是面向对象的三大特征。面试官:还有其他要补充的吗?山禾:没了面试官:那你回去等通知吧。

2020-06-15 08:35:42

「山禾说成长」:写作?写作!

写作是什么?写作,分为写和作,《说文解字》中分别对这两个字做出了解释。“写,置物也“ ——《说文解字》”作,起也“。——《说文解字》写是体力劳动,作是脑力劳动,接受过一定文化水平的人,一般都可以做到写,比如日记,一则简单的故事,但是作却不是所有人都可以做到的事情,需要经过大量的思考和提炼,看到的事务背后的本质,所谓词不达意,或许就是描述写手和作家的最大区别。为什么要写作?学习作为一个IT行业的从事者,终身学习显得格外的重要,在一个日新月异、高速发展的环境中,不学习就意味着面临被社会淘汰。

2020-05-25 09:05:49

《给产品经理讲JVM》:垃圾收集器

前言在上篇中,我们把 JVM 中的垃圾收集算法有了一个大概的了解,又是一个阴雨连绵的周末,宅在家里的我们又开始了新一轮的学习:产品大大:上周末我们说了垃圾收集算法,下面是不是要讲一下这些算法的应用呢?我:当然,如果说垃圾收集算法是打狗棒法,那么垃圾收集器就是历届的丐帮帮主们,不同的帮主领悟到的自然也就不同,我先对这些帮主进行一个简单的介绍,看图!我:我从回收的区域去对垃圾收集器进行了一个...

2020-04-21 08:57:53

「给产品经理讲JVM」:垃圾收集算法

纠结的我,给我的JVM系列终于起了第三个名字,害,我真是太难了。从 JVM 到 每日五分钟,玩转 JVM 再到现在的给产品经理讲 JVM ,虽然内容为王,但是标题可以让更多的人看到我的文章,所以,历经了三个选题,最终定下来了这个。这个名字的由来,且听我给你慢慢道来,从学习知识的角度上来说,最深入的方法就是把知识讲给别人听,那么为什么我要讲给程序员的天敌——产品经理呢?那么问题的答案很简单,因为...

2020-04-13 08:19:07

「 Offer收割机之JVM」:生存还是毁灭

这两天,广州的天气又开始热了起来,又到了小动物交配的季节,啊呸,又到了一个收割 offer 的季节。年底将至,又到了面试的高峰期,JVM 作为Java 程序员面试绕不过的一道坎儿,它又来了,你准备好了吗?说说引用面试官 A:小伙几,上篇我们说到了 JVM 收集的两种算法 —— 引用记数法和可达性分析算法,你对这两种算法的理解很清晰,那么这两种算法有一个很重要的点,就是『引用』,其实无论是引用...

2020-03-27 06:51:41

「每日五分钟,玩转JVM」:两种算法

前言上篇文章,我们了解了GC 的相关概念,这篇文章我们通过两个算法来了解如何去确定堆中的对象实例哪些是我们需要去回收的垃圾对象。引用计数算法引用计数法的原理很简单,就是在对象中维护一个计数器,当有一个对象引用它的时候,该计数器的值就会加一,当这个引用失效的时候,计数器的值就会减少一,当计数器的值为零的时候,就意味着这个对象是一个垃圾对象,需要被 GC 回收,这个算法是一个比较高效的算法,但...

2020-03-26 09:53:55

「每天五分钟,玩转 JVM」:对象访问定位

前言在「对象内存布局」一节中,我们了解到对象头中包含了一个叫做类型指针的东西,即对象指向它的类元数据的指针,虚拟机通过这个指针来确定这个对象是哪个类的实例。但是,并不是所有的虚拟机都是这么去做的。不同的虚拟机关于这点有不同的实现,目前主流的方式可以分为句柄和直接指针句柄由图中我们可以看到,在我们的堆中被划分出了一块单独的部分,叫做句柄池,句柄池的作用就像一个中转站,我们要查询位于堆内存中的...

2020-03-25 14:19:38

「每日五分钟,玩转JVM」:对象内存布局

概览一个对象根据不同情况可以被划分成两种情况,当对象是一个非数组对象的时候,对象头,实例数据,对齐填充在内存中三分天下,而数组对象中在对象头中多了一个用于描述数组对象长度的部分对象头对象头分为两部分,第一部分称之为**“Mark Word”,第二部分是用于获取该对象类型的类型指针**,如果是数组对象还包括记录数组长度的数据。在不同的操作系统中,这些区域所占的内存也不同,在32位的系统中,...

2020-03-24 08:49:05

「每天五分钟,玩转 JVM」:对象访问定位

面向对象众所周知,Java是一门面向对象的高级编程语言,那么现在问题来了,对象从哪来呢?有些人会说通过new关键字来创建一个对象,说的很好,本篇我们就来解密在new一个对象的过程中,JVM都给我们做了什么工作。走哪来,到哪去一个对象的诞生必定有一个类,通常我们都是通过new关键字实例化一个类来获取该类的一个对象,类在加载的过程中会经历一系列的检查,解析,初始化等一系列的过程,我们会在后面详细...

2020-03-23 08:52:36

Java 基础(六):循环

循环老生常谈的一个控制流程了,我们在是使用数组和集合的时候,遍历元素的时候经常会用到循环的结构,Java具有非常灵活的三种循环机制:根据是否知道循环的次数可以为分为while循环,do…while循环和for循环,下面我们单独来了解一下:while循环当我们不知道循环的具体次数时,可以使用while循环进行操作,下面是while循环的伪代码定义初始变量 while (控制条件) {...

2020-03-20 08:24:42

Java基础(五):数组

数组,一种应用非常广泛的数据结构,简单地来说就是一组类型相同且无序的元素的存储在固定长度且有序的内存空间。创建一个数组在Java中,我们可以通过[]去声明一个指定类型的数组int[] a; // 写法一int a[]; // 写法二当然,一般情况下我们更喜欢使用第一种方式来声明一个数组,因为它将类型与变量名分开,优化了代码的可读性。刚刚我们只是声明了一个数组 a ,但是并没有将 ...

2020-03-19 08:38:42

Java 基础(四):从面试题看String

数组,一种应用非常广泛的数据结构,简单地来说就是一组类型相同且无序的元素的存储在固定长度且有序的内存空间。创建一个数组在Java中,我们可以通过[]去声明一个指定类型的数组int[] a; // 写法一int a[]; // 写法二当然,一般情况下我们更喜欢使用第一种方式来声明一个数组,因为它将类型与变量名分开,优化了代码的可读性。刚刚我们只是声明了一个数组 a ,但是并没有将 ...

2020-03-18 06:50:45

Java Grammar(三):修饰符

简介修饰符是用于限定类型以及类型成员申明的一种符号,从修饰对象上可以分为类修饰符,方法修饰符,变量修饰符;从功能上可以划分为访问控制修饰符和非访问修饰符。访问修饰符控制访问权限,不同的访问修饰符有不同的权限范围,而非访问修饰符则是提供一些特有功能。下面我们从功能的角度分别讲解修饰符访问修饰符访问修饰符有四种:public,private,protected,default。这里需要注意,...

2020-03-17 08:32:23

Java Grammar(二):运算符

运算符简介计算机自打诞生以来,用作最多的就是进行计算,而计算离不开运算符,所以运算符在我们的Java语言中的地位举足轻重,我们现在就来了解一下Java给我们提供的运算符。从运算的元素的个数来区分,可以分为一元运算符,二元运算符,三元运算符。其中一元运算符包括:+(正数)-(负数)++(自增1)—(自减1)~(按位取反)!(逻辑取反)其实自增和自减也可以看成是特殊的二元运算...

2020-03-16 08:22:50

「每日五分钟,玩转JVM」:指针压缩

64位JVM和32位JVM 最初的时候,JVM是32位的,但是随着64位系统的兴起,JVM也迎来了从32位到64位的转换,32位的JVM对比64位的内存容量比较有限,但是我们使用64位虚拟机的同时,也带来了一个问题,64位下的JVM中的对象会比32位中的对象多占用1.5倍的内存空间,这是我们不想看到的(又要马儿跑,又要马儿不吃草可还行?),但是机智的程序员不会屈服,所以在JDK 1.6的版本后,...

2020-01-07 06:51:20

一份让你效率翻倍的年终总结

呕心沥血历时两周 共计七千五百字 三十张图 只为让你效率翻倍

2020-01-02 08:28:57

「每日五分钟,玩转 JVM」:GC概览

前言GC(Garbage Collection)是我们在学习 JVM 的过程中不可避免的一道坎,接下来,我们就来系统的学习一下 GC。做一件事情之前,我们一定要去知道我们为什么要去做,这里不仅仅指 GC,更适用我们日常的学习和生活,知其然,知其所以然,方能百战不殆。下面我们先去了解为什么要有 GC,以及 GC 在 JVM 中扮演了一个什么样的角色,起到了什么的作用?为什么要有 GC用过...

2019-11-15 09:15:27

「每日五分钟,玩转JVM」:线程共享区

前言 上一篇中,我们了解了JVM中的线程独占区,这节课我们就来了解一下JVM中的线程共享区,JVM中的线程共享区是跟随JVM启动时一起创建的,包括堆(Heap)和方法区(...

2019-08-27 07:00:00

查看更多

勋章 我的勋章
  • GitHub
    GitHub
    绑定GitHub第三方账户获取
  • 专栏达人
    专栏达人
    授予成功创建个人博客专栏的用户。专栏中添加五篇以上博文即可点亮!撰写博客专栏浓缩技术精华,专栏达人就是你!
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv1
    勤写标兵Lv1
    授予每个自然周发布1篇到3篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。
  • 学习力
    学习力
    《原力计划【第二季】》第一期主题勋章 ,第一期活动已经结束啦,小伙伴们可以去参加第二期打卡挑战活动获取更多勋章哦。