昨天面试被问了 JVM 中堆和栈的区别,但是我竟然没有回答出来。

2017-06-22 09:59:00 +08:00
 jadetang
感觉这么基础的知识不知道,确实不应该。但是我工作也有一段时间了,我知道了堆和栈的区别对我工作也没有任何帮助啊,平时也用不上。
7562 次点击
所在节点    职场话题
38 条回复
Adia
2017-06-22 10:22:20 +08:00
至少你可以知道推测出在项目中出现堆异常或栈异常的原因
pusidun
2017-06-22 10:22:45 +08:00
有没有帮助先不谈,这个随便搜个面经都会提到的,只能说明你没有认真准备

大公司怎么面试有工作经验的我不清楚,不少小公司的面试基本就是:“下午有个人来面试了,你们几个去下,搜下网上题目”…
0915240
2017-06-22 10:55:38 +08:00
平时救火的时候会有用。
jiangzhuo
2017-06-22 10:58:12 +08:00
培训班出来的回答这个问题都不用动脑子吧,就跟背诵课文一样直接背标准答案。
qiaobeier
2017-06-22 11:06:14 +08:00
想起前几天面一个妹子,问盒模型,举几个 html tag 都没答出来。。。 不过我是相信她能干活,在某些情况下甚至能干的很好。只是她不适合我们的职位而已。
arrow2015
2017-06-22 11:10:58 +08:00
所以,答案是什么
ipwx
2017-06-22 11:11:32 +08:00
如果是科班的话,入门 C/C++ 就是要手工 malloc/free 堆内存的。再往后,操作系统甚至需要知道 malloc/free 的算法。

不是我太严苛,楼主如果连堆和栈都不知道,怎么知道为什么尾递归不好?怎么优化大型服务器 Java 程序,免得 gc 破坏实时性?堆和栈,这是基础中的基础,如果连这类基础都不愿意去知道,你写得程序只能停留在 getXXX/setXXX 以及拖几个控件的程度。
irgil
2017-06-22 11:18:06 +08:00
为什么没有帮助???
jadetang
2017-06-22 12:02:02 +08:00
@ipwx 我是做 Java 的,尾递归 Java 是不支持的。至于根据堆和栈的区别来优化程序,能举个例子吗?
jadetang
2017-06-22 12:12:54 +08:00
@arrow2015 大致是这样的,JVM 中每个线程都会分配一个栈,栈里面存放的都是方法的本地变量和对象引用。栈的大小有限制的。JVM 中有一个堆,所有的对象内存都分配在堆上。(有些对象有常量池,例如 String )
jadetang
2017-06-22 12:18:28 +08:00
@irgil 可能是我工作太 low,所以没有遇到过。神伤。
Cloudee
2017-06-22 12:27:08 +08:00
比如说局部变量为什么比对象里的变量快那么多
twogoods
2017-06-22 12:37:54 +08:00
我们应届生也很困惑,面试一上来就 jvm,垃圾回收,没有场景来运用,就跟背书上说的东西差不多
jadetang
2017-06-22 12:43:42 +08:00
@Cloudee 局部对象是存在栈里面的,虽然和堆一样,都是在内存中。但是栈的 cache 亲和性比较好。问题是这样的,你写程序的时候,能控制吗。
leejanfin
2017-06-22 13:10:16 +08:00
熟悉内存模型 对你写多线程的代码会有一些帮助
ppwangs
2017-06-22 13:17:16 +08:00
大家都一样,去面试都要刷题的。
只不过大神们刷的题多了,都背熟了。
jadetang
2017-06-22 13:44:18 +08:00
@leejanfin 貌似内存模型主要的是涉及数据修改的可见性,好像和堆和栈没关系。
ofblyt
2017-06-22 13:54:00 +08:00
@jadetang #17 有点关系的,方法内部不引用全局变量不会有线程安全问题(我是这么理解的)
leejanfin
2017-06-22 14:22:00 +08:00
@jadetang 嗯 我上面的描述确实不太对 JVM 和 JMM 不是一个层次的 不过面试嘛 总不能问你 Java 的 API 怎么用吧...
teaaa
2017-06-22 15:02:09 +08:00
面试刷题很重要

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/370225

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX