为什么 Java 垃圾自动回收,面试的时候还要问垃圾回收机制?

2017-10-05 15:07:04 +08:00
 1536011373
Java 面试必问的就是垃圾回收,为什么 Java 垃圾自动回收,面试的时候还要问垃圾回收机制?
11831 次点击
所在节点    程序员
67 条回复
hantsy
2017-10-05 20:42:01 +08:00
@gam2046 如果你还在 5 以前的版本,只能同情一下你了。
maemual
2017-10-05 20:53:24 +08:00
用来过滤掉没有自我驱动主动学习能力的人
gam2046
2017-10-05 21:19:07 +08:00
@hantsy 确实是 2017 年的事情。我司是乙方,甲方是全国各地的运营商(电信、联通、移动以及地域性的小运营商)。甲方大佬只提供这样的运行环境给我们,我也很绝望啊。

说出来你可能不信,上次出差浙江某地方性运营商,带我去他们的机房,他们的局端服务器就是一台用着 DDR3 内存,总共只有 4G 的 AMD 真·四核处理器。连 1U 服务器都没有。现在 2000 块钱配个家用机都比这个强得多。我去过的几个地方,其实电信、联通也没好到哪里去,也是一堆淘汰服务器。

还有一个你可能也不信,也是出差到某地一个小运营商,他们的办公场所在一栋居民楼里,我和公司确认了几次地址,告诉我就是这个地址......我都觉得进了传销组织。
movistar
2017-10-05 21:21:23 +08:00
@hantsy 这就取决于你招的是应届生还是社招生了
应届生不懂很正常,基础数据结构过关,基本算法了解,其他基础知识好一点就可以了
要是一个工作了 5 年甚至以上的人,一直写 Java 的从来没听说过没了解过 JVM/GC
要么说明做的工作一直很简单,都是 CRUD,而且几乎没啥 QPS,要么就是不思进取......
tscat
2017-10-05 21:29:06 +08:00
@hantsy 因噎废食。了解 jvm 就会跑火车吗。
hantsy
2017-10-05 22:33:33 +08:00
@gam2046 对方这种环境提供的项目有多大?
Charkey
2017-10-05 23:07:28 +08:00
考察能不能了解 Java 高级知识,能不能写 JVM 友好的代码等等;还有就是不排除有些面试官的装逼需求;
zhx1991
2017-10-05 23:47:02 +08:00
难道这么多答题的都没有任何相关的工作经验吗?

问这个当然是有用的, 比如突然 GC 次数突然增加至少要会查问题和简单的调参数啊
sosloop
2017-10-05 23:49:32 +08:00
同理,就如同 cocos2dx 有引用计数,但面试还是必问引用计数是怎么实现的,整个流程要大概说一遍。
loveCoding
2017-10-06 01:23:11 +08:00
对于有几年工作的程序员就是一个筛选条件 , 筛选掉没有兴趣,没有上进心的程序员.
wenzhoou
2017-10-06 07:47:03 +08:00
不学习的人总是能给自己知道不学习的借口的。
跟是不是垃圾回收没有多大关系。
有人工作一年学的东西比别人 10 年学的都多,就是这个道理。
cuzfinal
2017-10-06 09:34:37 +08:00
java 人太多了,过滤一些咯。
cjyang1128
2017-10-06 09:52:55 +08:00
不懂垃圾回收,你怎么调试内存泄漏问题???
jeffson
2017-10-06 11:34:50 +08:00
@changwei hahaha
likuku
2017-10-06 12:52:01 +08:00
@gam2046 是啊,程序跑起来就不断吃资源,耗尽资源崩掉 /系统死掉,这些明显就是资源没有正确回收造成的泄漏,写码人的锅最大,但有人就是敢说“我写的码不会有问题!",资深嘛,没人反驳,也没人去审计代码,被领导无条件信任(看不懂源码的管理人员),运维被虐的久了,只有走人了事。
hcymk2
2017-10-06 13:16:33 +08:00
@gam2046
代码上线前至少要简单的压测下吧。上线之后应该有 APM 吧,出问题运维直接拉日志去操写代码的人啊。
gam2046
2017-10-06 13:33:51 +08:00
@likuku @hcymk2 也许现在你们知道为什么很多运营商的系统做的那么差了(大雾)。反正我司其他产品都有测试流程,唯独 Web 这一块是没有测试的。原因不明。开发人员自己觉得没毛病,就直接丢线上了,大白天重启服务器也是隔三差五有的(貌似听到了有人说服务不可用?没事的,是你光猫出问题了,等两分钟,重启下就好了)。因为这种情况出过很多问题了,运维和被背锅了好几次。

我个人是和运维建议,找上级建议增加个压力测试的环节,上线至少甩锅 甩不到他这里。业务逻辑有问题,怎么也和运维无关了。
DoctorCat
2017-10-06 23:34:23 +08:00
需要参与内存管理的语言都需要 GC 机制的,不然要码农自己(手动或半自动)管理内存了,因忘记释放内存,排查时太痛苦了,内存泄露会显得程序不健壮、程序猿太低能。

为啥考察这类姿势呢,因为 JVM 支持的 GC 花样儿很多(多种 GC 收集器、大量可调参数)目的是为了更好的配合不同类型的应用长期运行。不懂是做不好的,知其所以然让工作生产更有效率嘛。
DoctorCat
2017-10-06 23:41:27 +08:00
补充一句:对于有性能要求,尤其是低 RT 要求的中大规模服务,GC 方式的选择和调优就会很明确的暴露出来了。不懂 GC 肯定没法做调优的,老板终归不会让你无限制的 +机器解决嘛。
sagaxu
2017-10-07 03:38:53 +08:00
因为总有 sb 能写出内存泄露的代码来还对此毫无意识,不问能行吗?

不用懂 gc 细节,只要熟悉对象生存周期内在内存中的流动,看得懂 gclog,会调几个参数就够了

JVM789 的 GC 变化不大,不大用的 serial,默认的 parallel,并发的 CMS 和 G1(JVM9 默认 G1),CMS 已经 deprecated。所以只需要了解 parallel 和 g1 了。

JMM 变化更小,核心的东西从 Java 5 开始没有变过,到 Java 9 也不过细节上稍有增强,当然了,JMM 跟 gc 没什么关系。

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

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

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

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

© 2021 V2EX