
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 如果是科班的话,入门 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 我们应届生也很困惑,面试一上来就 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 大家都一样,去面试都要刷题的。 只不过大神们刷的题多了,都背熟了。 |
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 除非面试官经验比较少,一般面试不会因为一道题把人刷下去的。 |