为什么面试官喜欢问某一门语言(比如 go 或者 Python )的内存回收机制?

2022 年 4 月 27 日
 a523

我不明白的,如果不了解内存的回收机制,对写代码有什么影响吗?

我已经写 python 8 年了,也不清楚 python 的 GC 具体细节, 但是还没有碰到内存泄露的问题。 是不是有 GC 机制的语言,不会发生内存泄露?

或者面试官仅仅只是依此来判断某个人对某门语言花了多少心思?

18296 次点击
所在节点    Python
164 条回复
roundgis
2022 年 4 月 28 日
https://cython.readthedocs.io/en/latest/src/tutorial/memory_allocation.html

如果需要寫 cython

或者需要改寫 __del__

那麼就要了解一下了

python gc 要看實現

cpython, pypy, ironpython, jython 都不大一樣

不知道面試官要問哪一種
iyaozhen
2022 年 4 月 28 日
「但是还没有碰到内存泄露的问题」其实这个才是核心

面试嘛 还是想找一个经验丰富的,你工作中遇到几次内存问题,然后就会看下相关的资料,基本大面上会有个概念。如果再次出现问题你会游刃有余。
但你啥的都不知道两眼一抹黑,到时候线上真的出问题就抓瞎了,更有甚者是可能排查思路都有问题。

当然你可以说那么多年没遇到过,但大公司、复杂的业务遇到的概率很大。
fzjc
2022 年 4 月 28 日
说实话我不太懂楼上是通过什么判断低端码畜的,难道是天龙人?
levelworm
2022 年 4 月 28 日
@hambers 看职位吧
dayudayupao
2022 年 4 月 28 日
我觉得写好代码是首要因素,等你代码写好了,GC 问题也没那么多,往往出问题的就是代码写的有问题的地方,明明有更好的方式,更稳妥的方式(不容易产生泄露问题的方式)去实现一个功能而不用或者不知道,这才是重点,背一堆 GC 不一定代表能力强,我们组就有一个,牛皮吹得满天飞,看了他的代码,一个业务代码都写不清楚的人,不知道命名的重要性,不知道代码语义化的重要性,不知道职责分离的重要性。总结来说就是分析问题,拆解问题,用代码描述问题,抽象思维的综合能力。包括但不限于这些能力非常好的简直是宝藏程序员。但通常这种能力不好出面试题来测试。也不是几句话能说清的。
haah
2022 年 4 月 28 日
你的问题应该改成“为什么中国教育的‘永恒主题’是教学生刷题和作弊?”。
Suddoo
2022 年 4 月 28 日
本质上还是人太多了,本来编程是一件很简单的事
@glfpes 你搞清楚,是谁先人身攻击的? 你标榜自己高端程序员,别人都是低端码畜,自己工资高,别人工资都不如你,自己是房东,几百套房收租,自己的团队容不下不会背 gc 八股文的人...... 这些跟我有半毛钱关系吗?

你想装逼,可以,但是你特么扯上我干嘛,我的团队还容不下,八股文到背如流,结果一个接口写一星期,里面还一堆低级错误,拖团队进度,影响联调,影响上线的人呢

我们这边只需要能干活的人,不需要会吹牛逼的人
Suddoo
2022 年 4 月 28 日
@monetto 所以,所谓的那些 gc 调优都是历史遗留问题,新版本的 JDK 已经没有参数给你调了,JDK 团队已经给你优化得很好了,gc 停顿时间控制在 1ms 以内,我不知道究竟是什么级别的应用,这样的延时都不能接受,还需要一直调......

作为一个面试官,还在问 JVM 调优,除了说明这个面试官来自远古时代,并且不愿意接受新知识,还能说明什么?

如果真的是从事 JDK 开发的,出来谈自己在 gc 调优上的贡献,还有说服力,搞了半天,大家都是从事上层业务开发,然后还大谈特谈 gc 调优,装逼给谁看呢?


就像现在很多面试官还在问各种设计模式,如果能多了解一下 Java 语言的发展,就会发现,很多模式已经没实际价值了
glfpes
2022 年 4 月 28 日
@Suddoo 你们需要的就是低端程序员,还不让人说了。。。
凡是招过人的都知道,大神难求,水货太多。
zagfai
2022 年 4 月 29 日
说实话,当我给 8 年的程序面试,gc 是基础问题,答出了的分值可能是给 1 分,但答不出直接扣 10 分。
你自己也说了,看两篇文章就能了解并记住,那有什么理由不去做这件事?
zagfai
2022 年 4 月 29 日
如果是做低层的,可能要求分析几种不同语言的 gc 优劣,但你如果是偏业务的岗位,能答出比如 python 是引用计数,那已经算合格了。
idrawer
2022 年 4 月 29 日
@Biwood 需要离底层近的还写 python 干嘛
bibizhang
2022 年 4 月 29 日
就像陌生人见面聊天气一样
Biwood
2022 年 4 月 29 日
永远技术 V2EX 是“创意工作者的社区”,不是纯技术社区,你到 stackoverflow 问问 GC 重不重要,嘿,你猜 stackoverflow 网站为什么取这个名字?
1000copy
2022 年 4 月 29 日
看到"我就是想给他一个客观的评价“一句话。

突然把之前有些迷迷糊糊的概念给想明白了:虽然我们耳熟能详的说”客观评价“。但是!客观和评价是不可能同时出现而逻辑上不冲突的。

因为逻辑有问题--只要评价,就必然是不客观的。当然也不必说主观评价,因为重复了,评价必然是主观的。

这就是批判型思维的关键论点吧,就是必须区分事实和评价( fact+judge)。

想一想,多少年来,有多少人借着客观评价,借他人的酒浇灌自己的块垒。

show me the fact ,don't judge me .

与我而言,需要重新检视,以下都不是事实而是评价:学生思维,找不到好工作,高端,低端。
monetto
2022 年 4 月 29 日
@Suddoo 你没听懂我的意思。“我不知道究竟是什么级别的应用,这样的延时都不能接受,还需要一直调......”,

现在的问题是,大厂,我去过的部门(美团-数平,京东物流-物流订单),使用的还是 JDK6 - JDK8 。你觉得谁有能力向上升级这个事?还是说你准备把这些大厂的项目都用 JDK17 重构了?流水都上亿的东西,你不学 GC 调优怎么维护?

谁不想升级,但是谁敢升级?谁愿意一天面对 200w 行代码的屎山增删改查?我们部门没有一个不骂的,骂到最后该怎么维护不还得怎么维护吗。

你这个观点,和前几年,“因为 Spring 兴起了,所以我不用学习 Servlet 了” ,一模一样。
如果只是找个工作,能干活就行,那只学 Spring ,只做 Web 开发,一点问题没有。但是人还只停留在 CRUD 吗?

MySQL 即使性能优化的再好,关键场景不还得上 Redis ,Kafka 吗?

GC 优化的再好,那是面向 JDK 的事,JDK 可永远不会面向业务进行优化。
1000copy
2022 年 4 月 29 日
@patrick1star 赞。

--
@glfpes 我看了讨论,不是你 63 楼先说人家“你这种心态找不到好工作的,早点从中学课堂毕业的”

74 楼又给人家扣了个“低端码畜”的帽子吧

@Livid
glfpes
2022 年 4 月 29 日
我踩了不少人痛处了,呵呵。

让现实教育你们吧。
sgissb1
2022 年 4 月 29 日
其实也没太多必要问 gc ,因为没啥好问的,也就只好问了。
难道问你算法么,毕竟 python 就不是拿来做算法实现,而是算法组合的,快速验证,逻辑业务的。
不过工作 8 年了,还是需要简单了解一下 gc ,万一遇到坑爹队友,出现内存爆炸下不来咋怎?

而且现在很多 python 运用的场景还真是快速验证业务模型、“人工智能”等等地方。
之前见过大佬用 python 验证骨架识别,结果显存和内存爆了,导致执行效率奇低无比,结果大佬要求去定位 json 库的效率。。。。。。。事实上 json 就没怎么用过。。。
sardina
2022 年 4 月 29 日
@glfpes
@Suddoo
@Livid 骂脏话 快来处理一下

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

https://v2ex.ih06.com/t/849548

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

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

© 2021 V2EX