工作五年的游戏后端不知道排序算法的复杂度正常吗?

2022 年 9 月 26 日
 luojiedev

最近又要开始招聘了,一直以来,这个问题非常困惑我。有个候选人简历上写着:熟练掌握数据结构和算法。 我问那常见的排序算法有哪些,只说出一个,快速排序。我问那时间复杂度是多少,他说 O(logN)。我无语了。 其实面试了这么多,这个是最让我疼的。毕竟说 O(N),还不是太离谱。

18503 次点击
所在节点    程序员
168 条回复
lakehylia
2022 年 9 月 27 日
不会很正常,换我也要拿课本复习一下
2NUT
2022 年 9 月 27 日
不死记硬背

排序算法并不是一个简单的事情。
debuggerx
2022 年 9 月 27 日
我不会,只知道大致的概念,也懒得仔细学,当然也不会往简历里写,个人认为非特殊领域,大部分算法的作用极其有限。
工程中更多时候需要的更高的视野,比如可能吭哧半天用算法提升了不到一倍的性能,其实如果从数据源下手优化,直接就是几个数量级的差距。
还有的时候,看似用算法优化了性能,但是代码却失去了可读性和扩展性,最后变得一团糟,要持续付出几倍的精力成本 debug 那些“算法”。
窃以为,工程思维和大局观比考算法有意义得多。
kaf
2022 年 9 月 27 日
如果能仔细理解算法不知道复杂度还可以理解吧,如果算法本身不理解还说不出来就不太行,面试主要还是考察一个候选人的理解力,也不用单纯纠结会不会某个概念的问题
Huelse
2022 年 9 月 27 日
而且要刷人还可以问个问题,该算法中 logn 是以什么为底?相信很少很少有人能回答上来
FYFX
2022 年 9 月 27 日
@Huelse
快排每次以 pivot 分两部分所以是 2 为底,不过这不是不重要吗,反正换个底都能提个常数出来
LaTero
2022 年 9 月 27 日
@Huelse 属于是数学基础不行了,O(n)和 O(2n)有区别?
idrawer
2022 年 9 月 27 日
@lzgshsj 不写有办法吗?大环境不就是反向驱逐老实人
MoYi123
2022 年 9 月 27 日
@Huelse 按大 O 表示法, 可以是任意常数为底.
Karlven
2022 年 9 月 27 日
不正常
hxysnail
2022 年 9 月 27 日
@microxiaoxiao 不影响调用不对吧?调用开销多少还是要心里有数的,有些场景一乱调就是故障
microxiaoxiao
2022 年 9 月 27 日
@hxysnail 真不影响。就比如你调用文件系统,如果是别人给你的分布式文件系统,要是它卡了你找他就行了,你也评估不了它的代码复杂度呀。本身就是一个黑盒子。
dabaibai
2022 年 9 月 27 日
写逻辑 5 年的话 不知道很正常。
0zero0
2022 年 9 月 27 日
平时不记得是正常的,绝大多数开发的日常工作用不到这些,之前学校学的那些早忘了;
但是如果是准备面试,尤其面的**不是中高端岗位**的,那有些内容和知识点还是要补一补的。
FrankHB
2022 年 9 月 27 日
@changnet ?不知道这种复杂度是怎么好意思占着后端的坑摸代码的?你当你茄子啊?(人策划都不见得敢那么划水、、、)
看来比 OP 这个应聘者还虎啊,现场瞎蒙都省了?

@lululau 问就是“算法”对实际开发本来就并没卵用,偏偏还很多人吹……实际上其中硬要有点卵用,那么最容易的恰恰就是对常见的复杂度的印象,因为好歹能帮助快速选型别墨迹着犯傻。
如果这点捡垃圾的价值都没有,直接写清楚“我不会工程需要的任何算法知识”,别骗人取乐。

@witcat 那么浪费人时间拉仇恨是哪来嫌弃人背后念叨的底气的,武德充沛?
FrankHB
2022 年 9 月 27 日
@microxiaoxiao 你哪来的“瓶颈一定不在我”的余裕?或者你就是一次性碉堡侠,让你调用一次必定卡?调用几次就卡几次,全然不对业务实现质量负责的是吧?
FrankHB
2022 年 9 月 27 日
@lzgshsj 因为这问题水到一定程度了。正常来讲能长期摸得下去所谓后端需要的代码(反正不会是能把复杂度包袱卸完的纯声明式语言写的)的人,就算完全没有复杂度的概念,也会对几个重要复杂度类之间的区别直觉上有反应,要有瓶颈就是他们不知道 /发明不出来大 O 记号的严格定义罢了。
但现在这人是至少打算表现出知道 O 那么回事的。所以要么是脑子实在迟钝真不适合碰后端代码,要么就根本是死记硬背半吊子,态度就不适合这类工作。

其实也就是现在语言花样多了才能那么容易蒙混过关。古早没所谓结构化编程的时候,混的下去的基本都是自己会发明栈帧之类的过程调用的实现的,否则写起代码来自己都能给自己烦死(特别是对照别人已经能自己发明出不那么烦的东西了)。
某种意义上,现在“写逻辑”当借口被滥用多了,也慢慢像是这种少根筋低效低能的贬义词了。
unregister
2022 年 9 月 27 日
他不清楚,好的面试官应该和他解释一下,而不是在这里指责别人
changnet
2022 年 9 月 27 日
@FrankHB 面试说不出这种复杂怎么就不好意思占着后端的坑了?知道有复杂度这个东西,知道有这个算法,用到的时候不会去查一下或者调一下现有的接口吗?这么多种排序,这么多种数据结构,这么多算法,难道平时用不上,都要牢牢记着?对应聘者而言,他是不知道你要问什么的,那要么他所有都死记硬背,要么他能灵活应用,我认为能灵活应用的人更适合,这有什么问题?

说句题外话,随便走进一家公司,到写代码的程序员面前去问,看看有几个能答上来
wdhwg001
2022 年 9 月 27 日
我觉得这种问题都可以算是

宫廷玉液酒
一百八一杯

我们的口号是
没有蛀牙

这种程度的东西了,属于得了老年痴呆都不一定能忘掉的范畴,是在坟前喊一句“有 O(logN)的排序了”都能看到我掀开棺材板要见见世面的程度。

结果 V2EX 居然还有人需要去网上找找?

又不是让你手写快排,手写快排忘了还情有可原,快排是 O(N)到最坏 O(N²)平均 O(NlogN)都能忘真的不需要再补几年基础功再写代码吗,任何一个项目里有不知道 big O 是啥的人都是灾难性的隐患吧。

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

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

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

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

© 2021 V2EX