1
Adia 2017-06-22 10:22:20 +08:00
至少你可以知道推测出在项目中出现堆异常或栈异常的原因
|
2
pusidun 2017-06-22 10:22:45 +08:00
有没有帮助先不谈,这个随便搜个面经都会提到的,只能说明你没有认真准备
大公司怎么面试有工作经验的我不清楚,不少小公司的面试基本就是:“下午有个人来面试了,你们几个去下,搜下网上题目”… |
3
0915240 2017-06-22 10:55:38 +08:00
平时救火的时候会有用。
|
4
jiangzhuo 2017-06-22 10:58:12 +08:00
培训班出来的回答这个问题都不用动脑子吧,就跟背诵课文一样直接背标准答案。
|
5
qiaobeier 2017-06-22 11:06:14 +08:00
想起前几天面一个妹子,问盒模型,举几个 html tag 都没答出来。。。 不过我是相信她能干活,在某些情况下甚至能干的很好。只是她不适合我们的职位而已。
|
6
arrow2015 2017-06-22 11:10:58 +08:00 via Android
所以,答案是什么
|
7
ipwx 2017-06-22 11:11:32 +08:00 1
如果是科班的话,入门 C/C++ 就是要手工 malloc/free 堆内存的。再往后,操作系统甚至需要知道 malloc/free 的算法。
不是我太严苛,楼主如果连堆和栈都不知道,怎么知道为什么尾递归不好?怎么优化大型服务器 Java 程序,免得 gc 破坏实时性?堆和栈,这是基础中的基础,如果连这类基础都不愿意去知道,你写得程序只能停留在 getXXX/setXXX 以及拖几个控件的程度。 |
8
irgil 2017-06-22 11:18:06 +08:00
为什么没有帮助???
|
9
jadetang OP @ipwx 我是做 Java 的,尾递归 Java 是不支持的。至于根据堆和栈的区别来优化程序,能举个例子吗?
|
10
jadetang OP @arrow2015 大致是这样的,JVM 中每个线程都会分配一个栈,栈里面存放的都是方法的本地变量和对象引用。栈的大小有限制的。JVM 中有一个堆,所有的对象内存都分配在堆上。(有些对象有常量池,例如 String )
|
12
Cloudee 2017-06-22 12:27:08 +08:00
比如说局部变量为什么比对象里的变量快那么多
|
13
twogoods 2017-06-22 12:37:54 +08:00 via Android 2
我们应届生也很困惑,面试一上来就 jvm,垃圾回收,没有场景来运用,就跟背书上说的东西差不多
|
14
jadetang OP @Cloudee 局部对象是存在栈里面的,虽然和堆一样,都是在内存中。但是栈的 cache 亲和性比较好。问题是这样的,你写程序的时候,能控制吗。
|
15
leejanfin 2017-06-22 13:10:16 +08:00 via iPhone
熟悉内存模型 对你写多线程的代码会有一些帮助
|
16
ppwangs 2017-06-22 13:17:16 +08:00 1
大家都一样,去面试都要刷题的。
只不过大神们刷的题多了,都背熟了。 |
19
leejanfin 2017-06-22 14:22:00 +08:00 via iPhone
@jadetang 嗯 我上面的描述确实不太对 JVM 和 JMM 不是一个层次的 不过面试嘛 总不能问你 Java 的 API 怎么用吧...
|
20
teaaa 2017-06-22 15:02:09 +08:00
面试刷题很重要
|
21
ipwx 2017-06-22 18:50:51 +08:00
@jadetang All right,我说的那个优化针对的是堆上面对象的优化。当然,我不写 Java,只是对 JVM 上面 GC 神调教的案例略有耳闻。如果你有兴趣,我觉得你可以去查找一下这方面的资料。
|
22
ihuotui 2017-06-22 19:19:11 +08:00 via iPhone
最高境界是对象不受 gc 影响和扫描
|
23
wangdu2012 2017-06-22 19:27:27 +08:00 via iPhone
哪面试的?阿里的人最喜欢搞这种吧
|
24
huhu3312 2017-06-22 19:49:34 +08:00
栈是线程私有的,堆是线程共享的。
|
29
stcasshern 2017-06-22 23:18:31 +08:00
是不是可以这里解释啊,栈保存对堆中数据的引用,以及一些基本类型的数据,堆得话是保存实际数据。??
|
30
sunqb 2017-06-22 23:24:28 +08:00 via Android
如果你够牛逼,你就知道哪些地方用到了
|
31
kx5d62Jn1J9MjoXP 2017-06-23 00:27:34 +08:00
为什么楼上一堆回答性能的, 这根本没回答到点上吧.
栈 /stack 是实现方法 /函数相互调用的基本数据结构, 每个线程都有自己的一个栈, 因为每个线程都要执行自己的方法. 堆 /heap 则顾名思义就是存放一堆对象的内存区域 |
32
xuboying 2017-06-23 09:24:54 +08:00 via Android
简历里自称的精通程度,和工资,被面试的问题难度挂钩。简历里吹牛就小心被打脸。不会堆栈可以写只会基础 java。
|
33
oukichi 2017-06-23 09:31:45 +08:00
讲道理,你的工作用不到堆和栈的话可以赶紧考虑换工作了。
|
34
miketeam 2017-06-23 10:15:39 +08:00
那是栈的地址位高还是堆高呢?我看 cs50 里面老师画了一个图,但是忘了!!
|
36
kx5d62Jn1J9MjoXP 2017-06-23 15:12:19 +08:00 via Android
@ipwx 我问你牛肉和苹果的区别,你连这两个一个是来自动物一个是来自植物都没做出区分,就大谈特谈牛肉怎么做才好吃,这不是答非所问是什么?
|
37
eric2021 2017-06-23 18:04:29 +08:00
吓得我赶紧又去刷了一下题,可还是记不住
|
38
dfguo 2017-06-23 18:28:39 +08:00
除非面试官经验比较少,一般面试不会因为一道题把人刷下去的。
|