当前位置: 首页 > news >正文

#我与Java虚拟机的故事#连载03:面试过的百度,滴滴,快手都问了这些问题

作者:水煮肉片

我觉得《深入理解Java虚拟机》应该是目前市面上Java程序员人手一本的床头书了。记得我在上大学的时候,同系的学长极力给我推荐这本书,说是把这本书看烂了,保准能拿一个大Offer,于是我就跟这本书认识了。最开始差不多花了一周的时间把这本书过了一遍,大概看完了,其实因为当初的基础过于薄弱,只是记住了一些名词,比如栈,堆,常量池,GC什么的,当时看完觉得一头雾水,然后就放在一边了。

等到我毕业了,开始工作了,在工作中碰到了很多问题,比如程序为什么GC了?程序为什么OutOfMemory了?我就突然想起来我好像之前有看过一本讲这些的书,于是我又把这本书拿起来重新读了一边,这次与上次不同在于上次我只是读这本书,而这次我是带着工作中的问题来阅读这本书,本来以为JVM底层是遥不可及的远方,但是在这本书中周老师层层递进剖析JVM底层,我也是从这开始对JVM内存分布有了一定的了解和认识,也是从这才知道了JVM内存被划分了这么多块,每一块的作用是什么?程序GC,OOM是发生在哪一部分的?内存底层理解了,那对于程序计数器,栈,堆,直接内存等等之间的联系就有了整体的认识,后面我对于每一部分的内部作用的学习就是建立在一个对整体有宏观了解的基础之上,在后面的学习过程中就会显得一切都是那么水到渠成。

这本书的第三章也是我阅读次数最多的章节,这个章节介绍了JVM的垃圾收集器和内存分配策略,这部分我觉得重要性在于两点:

  1. 工作中GC的问题是躲不过的问题,只有了解了GC的根因也才能进行合理的优化

  2. 面试中这是必考点。这章周老师讲解了不同的垃圾回收算法以及其适用场景,对于目前主流的垃圾回收器也进行了介绍,我在工作之中也是基于这章的内容进行了垃圾回收器的选择。

但是要说对我帮助最大的内容,必须是字节码部分,类加载机制和JavaAgent部分,我之前有很长一段时间工作的重点是基于JavaAgent进行分布式链路跟踪服务的建立和维护,最开始对这些也都不甚了解,网上成体系的书籍也不是很多,但是这本书中就对这几部分进行了深入的介绍,其中我也是阅读了类加载机制,才明白JavaAgent流程的开始点,以及不同版本之间class冲突的原因,这些东西帮我避免了很多个线上事故。当前这部分我再面试之中也是碰到了好几个面试官都问我了。

本书后几章中对于Java线程和线程安全与锁优化,这些内容也都是面试必考点啊,这些东西如果不懂,我觉得面试十有八九挂,我印象中我面试过的百度,滴滴,快手都问了这些问题,基本你如果把这本书背过(死记硬背容易忘,需要理解的背),这部分内容一定是对答如流,面试官也会对你高看一眼。

最后,周老师要出《深入理解Java虚拟机》第三版了,我必须要大力支持,毕竟这些东西是周老师花了数年的心血的结晶,我需要紧跟大佬的脚步,向大佬学习!努力!

推荐阅读

《深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)》

推荐语:这是一部从工作原理和工程实践两个维度深入剖析JVM的著作, 自2011年上市以来,前两个版本累计印刷36次,销量超过30万册,大厂面试最佳参考手册,进阶架构师必读、Java优化神书,这些标签成就了它成为原创计算机图书领域不可逾越的丰碑。

第3版在第2版的基础上做了重大修订,内容更丰富、实战性更强:根据新版JDK对内容进行了全方位的修订和升级,围绕新技术和生产实践新增逾10万字,包含近50%的全新内容,并对第2版中含糊、瑕疵和错误内容进行了修正。

你与世界

只差一个

公众号

相关文章:

  • 从治疗癌症到预测犯罪,细数数据科学在各领域的神奇应用
  • 入门大爆炸式发展的深度学习,你先要了解这4个最流行框架
  • #我与Java虚拟机的故事#连载04:一本让自己没面子的书
  • #我与Java虚拟机的故事#连载05:Java虚拟机的修炼之道
  • Java异步编程并没有广泛使用起来,这是什么原因? (文末有福利)
  • 新书推荐 | Java核心技术 卷II 高级特性(原书第11版)
  • #我与Java虚拟机的故事#连载06:收获颇多的经典之作
  • 中台四杰与阿里往事
  • #我与Java虚拟机的故事#连载07:我放弃了对JVM的进一步学习
  • InfoQ 编辑部开年聊聊 2020 年值得关注的十大技术趋势
  • 达摩院十大科技趋势发布:2020 非同小可!
  • #我与Java虚拟机的故事#连载08:书读百遍其义自见
  • 新书推荐 | 深入浅出图神经网络:GNN原理解析
  • 新书推荐 | 现代机器人学:机构、规划与控制
  • #我与Java虚拟机的故事#连载09:面试大厂逃不过的JVM
  • .pyc 想到的一些问题
  • android 一些 utils
  • Angular数据绑定机制
  • git 常用命令
  • HashMap剖析之内部结构
  • MaxCompute访问TableStore(OTS) 数据
  • Node项目之评分系统(二)- 数据库设计
  • open-falcon 开发笔记(一):从零开始搭建虚拟服务器和监测环境
  • RedisSerializer之JdkSerializationRedisSerializer分析
  • v-if和v-for连用出现的问题
  • vue2.0一起在懵逼的海洋里越陷越深(四)
  • 对话:中国为什么有前途/ 写给中国的经济学
  • 番外篇1:在Windows环境下安装JDK
  • 高性能JavaScript阅读简记(三)
  • 给新手的新浪微博 SDK 集成教程【一】
  • 官方解决所有 npm 全局安装权限问题
  • 坑!为什么View.startAnimation不起作用?
  • 首页查询功能的一次实现过程
  • 为物联网而生:高性能时间序列数据库HiTSDB商业化首发!
  • 以太坊客户端Geth命令参数详解
  • JavaScript 新语法详解:Class 的私有属性与私有方法 ...
  • PostgreSQL 快速给指定表每个字段创建索引 - 1
  • 阿里云服务器购买完整流程
  • #Linux(Source Insight安装及工程建立)
  • #我与Java虚拟机的故事#连载15:完整阅读的第一本技术书籍
  • (14)目标检测_SSD训练代码基于pytorch搭建代码
  • (C语言)输入一个序列,判断是否为奇偶交叉数
  • (HAL库版)freeRTOS移植STMF103
  • (html转换)StringEscapeUtils类的转义与反转义方法
  • (附源码)ssm高校运动会管理系统 毕业设计 020419
  • (学习日记)2024.01.09
  • .Net 代码性能 - (1)
  • .net 使用ajax控件后如何调用前端脚本
  • .Net(C#)常用转换byte转uint32、byte转float等
  • /usr/lib/mysql/plugin权限_给数据库增加密码策略遇到的权限问题
  • @ 代码随想录算法训练营第8周(C语言)|Day53(动态规划)
  • @Autowired自动装配
  • [ C++ ] STL_stack(栈)queue(队列)使用及其重要接口模拟实现
  • [Android View] 可绘制形状 (Shape Xml)
  • [Android]创建TabBar