1.
关于内存的问题都有哪些?我手里有两份PDF,是近些年面试题的汇总,先从这里面找,然后再百度,再去牛客网搜索,再无知乎,差不多了。
汇总一下问题:
1)解释内存中的栈(stack)、堆(heap)和方法区(method area)的用法。
2)Java 中会存在内存泄漏吗,请简单描述。
3)int 和 Integer 哪个会占用更多的内存?
4)32 位 JVM 和 64 位 JVM 的最大堆内存分别是多数?
5)怎么获取 Java 程序使用的内存?堆使用的百分比?
6)Java 中堆和栈有什么区别?
7)Java 中的内存映射缓存区是什么?
8)解释 Java 堆空间及 GC?
9)你能保证 GC 执行吗?
10)JVM 内存区域
11)JVM 运行时内存
12)如何在两个线程之间共享数据
13)说一下 JVM 的主要组成部分及其作用?
14)垃圾收集器简述Java垃圾回收机制
15)解释一下对象的创建过程?
16)对象在内存中的存储布局?Object o = new Object()在内存中占用多少字符?
17)描述一下Java的内存模型
不再列出更多的问题了,看了这些,大概可以做一个分类了。
2.
Java面试问的问题,跟内存相关的分类:
1)原理:Java的内存模型(JMM),JVM相关,如区域划分,垃圾回收,各个内存区域的作用等,主要考察理论知识
2)实战:JVM调优,内存对业务的影响,并发编程
3)安全:跟内存有关的安全问题,如内存泄漏
简单分为这三类,对于不同的面试者,问的内容也会有所不同:
1)校招多问原理,因为大部分人还没有实战经验,问原理更合适一些
2)社招多问实战了,不过这里会考虑经验问题,比如工作1年的,基本不会问调优,工作3年以上的,肯定问调优
3)至于安全问题,都会问到,因为内存泄漏总是有机会遇到的,排查方式和解决方案也有比较系统的方法,所以多少能说上来点,当然自己遇到过,并且实际解决过,就更有心得了
有了这些,就可以开始梳理了,这部分内容我只梳理重点的东西,一些旁枝末节这次就不搞了。
3.
准备解决这几个问题:
1)什么是内存?有什么用?用在哪里?怎么用?为什么这样用?
2)Java的内存是什么?......
3)JVM是什么?......
五步解决法:是什么?有什么用?用在哪里?怎么用?为什么这样用?
这是我解决问题的通常思路,下篇文章就从内存本身开始。
大家有什么关于面试想了解的内容,可以在文末留言~