V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ayavvv
V2EX  ›  程序员

如果不是为了面试,刷算法题对自我提升有什么大的价值吗

  •  1
     
  •   ayavvv · 2020-04-23 15:37:58 +08:00 · 10462 次点击
    这是一个创建于 1435 天前的主题,其中的信息可能已经有所发展或是发生改变。

    之前校招面试的时候刷过很多题,找到工作后两年没有刷题了,现在全都忘记了。

    平时工作压根用不到什么动态规划、回溯算法之类的。就算要用直接 google 一下找个现成的稍微学习一下就行了。

    在公司内部晋升也没有人会看中这些。

    问问各位大佬,除了头条还有哪些公司社招会考算法题?

    第 1 条附言  ·  2020-04-24 14:21:05 +08:00
    看了一下大家的回复,有说有用的有说没用的。

    - 说刷算法题有用的基本上都是刷了很多题的大神。
    - 之前我刷题的时候,很多题基本上都是做过一遍才会,没做过的话完全懵逼。(需要掌握套路)。而这些解题的套路日常开发是完全用不上的,所以导致了我一段时间没刷就完全忘记了。
    - 我疑问的是,学东西最快的方式是和日常工作有结合。这样经常用就不会忘,很多算法解题套路在日常需求中完全没有这么复杂,如果中间废弃一段时间,就完全忘记光了。(就像我高中时做双曲线的题贼 6,但是现在完全忘记双曲线的公式。)
    第 2 条附言  ·  2020-04-24 14:27:35 +08:00
    看到旁边一个热帖,DDD 为什么火不起来: https://v2ex.com/t/665465

    DDD 这么好的方法论,业务开发不应该都去掌握吗,还有设计模式这些,对于普通 CRUD 开发者来说,这些东西比刷题的套路重要多了吧。

    掌握如何设计一套优秀的业务系统的方法论,掌握各种中间件的原理和适用的业务场景,这些才是大家做业务开发的核心竞争力吧。

    对于每天忙碌工作之外的很宝贵的学习时间,难道应该去刷题吗?
    80 条回复    2020-04-25 11:29:49 +08:00
    wszgrcy
        1
    wszgrcy  
       2020-04-23 15:43:19 +08:00 via Android
    其实我更想知道,大厂面试算法,不同等级的人,算法问题是一样吗,如果不一样,每个级别应该懂到什么层次
    knowckx
        2
    knowckx  
       2020-04-23 15:47:13 +08:00
    腾讯会有算法题,很多外企也会有
    ayavvv
        3
    ayavvv  
    OP
       2020-04-23 17:02:29 +08:00
    @wszgrcy 不清楚额
    ayavvv
        4
    ayavvv  
    OP
       2020-04-23 17:02:52 +08:00
    @knowckx 那要准备面试的话,算法题是绕不开的咯
    maichael
        5
    maichael  
       2020-04-23 17:03:50 +08:00
    动态规划、回溯算法可能帮助不大,但是数据结构的题肯定是有用的。
    wysnylc
        6
    wysnylc  
       2020-04-23 17:04:36 +08:00
    算法可以提升思维能力,加快思考算力减少思考时间(当然也有可能增加)
    tt67wq
        7
    tt67wq  
       2020-04-23 17:06:29 +08:00   ❤️ 4
    如果不是为了打架,健身锻炼对自我提升有什么大的价值吗
    ayavvv
        8
    ayavvv  
    OP
       2020-04-23 17:34:04 +08:00
    @maichael 数据结构是最基础的吧,暂不归类到算法题里面
    ayavvv
        9
    ayavvv  
    OP
       2020-04-23 17:34:57 +08:00   ❤️ 2
    @tt67wq 讲道理我健身锻炼就是为了打架不虚,如果一辈子不会打架我是不会健身的
    ayavvv
        10
    ayavvv  
    OP
       2020-04-23 17:35:57 +08:00
    @wysnylc 感觉多学习学习架构设计比算法有用一些
    steveliu13
        11
    steveliu13  
       2020-04-23 17:56:33 +08:00 via Android
    就标题来说,可以预防老年痴呆🤓
    Meltdown
        12
    Meltdown  
       2020-04-23 19:01:33 +08:00 via Android
    防止变傻
    ayavvv
        13
    ayavvv  
    OP
       2020-04-23 19:03:19 +08:00
    @steveliu13 那咋不去做奥数题。。。
    secondwtq
        14
    secondwtq  
       2020-04-23 19:11:23 +08:00   ❤️ 4
    我觉得还是有的,不过对于我来说主要不在算法方面

    很多算法题(特别是 LeetCode 类的(嘛虽然我不觉得 LeetCode 题应该被称为“算法题”))要考虑很多奇奇怪怪的条件,面试有一遍过的要求
    我刷了些算法题之后,发现做项目的时候写逻辑代码一遍过的情况越来越多了,不用每次都运行 报错 debug 运行 报错 debug 循环了
    labulaka521
        15
    labulaka521  
       2020-04-23 20:48:38 +08:00 via Android
    我觉得可以锻炼自已的逻辑能力
    MeatIndustry
        16
    MeatIndustry  
       2020-04-23 23:13:47 +08:00
    感觉真没有
    darknoll
        17
    darknoll  
       2020-04-23 23:55:02 +08:00 via Android   ❤️ 2
    @tt67wq 本来我健身是为了打架,后来发现打架要赔钱,就不健身了。
    ericgui
        18
    ericgui  
       2020-04-24 00:10:39 +08:00
    有用的
    ericgui
        19
    ericgui  
       2020-04-24 00:11:22 +08:00
    就是感觉投入产出比不太合适

    不像其他的,你投入时间,立刻就有产出,效果明显,可以用到实际工作中
    xupefei
        20
    xupefei  
       2020-04-24 00:12:12 +08:00 via iPhone
    有用,你写代码时更自信、更容易一次调通。
    aabbcc112233
        21
    aabbcc112233  
       2020-04-24 00:20:10 +08:00 via Android
    没用。
    生产力为第一要义。
    aabbcc112233
        22
    aabbcc112233  
       2020-04-24 00:20:30 +08:00 via Android
    大概率没用。
    生产力为第一要义。
    EPr2hh6LADQWqRVH
        23
    EPr2hh6LADQWqRVH  
       2020-04-24 00:26:02 +08:00 via Android
    椭圆曲线方程,最小二乘法,万有引力公式,铜和硝酸反应,孟德尔遗传定律。这些还都记得吗?

    当初你是不是也有类似的疑问,这玩意除了考试,有别的用吗?

    事实是在某些情况下有用,但对绝大多数人来说没用,就只是用来分配稀缺资源而已。
    imzhazha
        24
    imzhazha  
       2020-04-24 00:35:03 +08:00 via Android   ❤️ 2
    没啥价值,提升逻辑思维能力看哲学类的书不更好。
    lithbitren
        25
    lithbitren  
       2020-04-24 00:37:12 +08:00   ❤️ 1
    算法属于内功,刷多了平时 bug 少,在逻辑明确的情况下,业务里基本碰不到解决不了的问题,别说 acm,就算是 leetcode 中等题也比绝大多数业务难多了。
    wangyzj
        26
    wangyzj  
       2020-04-24 00:38:21 +08:00
    只能说刷题可以掌握一些骚操作吧
    算法本身几乎没用
    ConradG
        27
    ConradG  
       2020-04-24 00:39:44 +08:00
    当然有用,防痴呆。
    除了面使用,如果做中间件、游戏开发也经常会用到。
    levelworm
        28
    levelworm  
       2020-04-24 01:17:26 +08:00 via Android
    我觉得主要看能否增加 problem solving 的能力。但是光刷题我觉得还是和现实需求比较远,如果自己有个需求然后学习相关的算法会好很多。另外楼上的健身应该改成习武,光健身是不能学会打架的,得习武。。。
    Rxianbei
        29
    Rxianbei  
       2020-04-24 01:25:07 +08:00 via Android
    我也觉得,打架得去武馆。你们去健身房去错地方了。
    liuminghao233
        30
    liuminghao233  
       2020-04-24 01:29:05 +08:00 via iPhone
    没用
    这些都是套路
    很多都是 google 一下马上就知道的
    你要是从来都没有见过 那估计要 gg

    举个例子
    n 叉树后序遍历非递归
    做过的话闭着眼睛都能用脚写

    要是你没做过可能会懵逼好一阵子
    Perry
        31
    Perry  
       2020-04-24 01:58:54 +08:00
    这个问题应该只限于刷过很多题的人才能回答
    只刷了几十道且不会总结的大概率会觉得没用
    lihongming
        32
    lihongming  
       2020-04-24 03:05:30 +08:00 via iPhone   ❤️ 4
    读书破万卷,下笔如有神。

    leetcode 已经刷了 500+了,现在给我个需求,我就大概知道代码怎么写效率最高,需不需要处理边界值。

    尤其是边界值问题,很多 bug 就是这么产生的
    cassyfar
        33
    cassyfar  
       2020-04-24 03:32:31 +08:00
    没用。除非你是做 quant 的
    Weixiao0725
        34
    Weixiao0725  
       2020-04-24 05:28:51 +08:00
    我觉得更多的是对你写程序思维的一种训练。还是很有用的。Google,微软这些大厂也不傻,要不然他们也不会用这个标准来衡量。前几年不是还流行考智力题么,后来可能觉得不太合适,现在都不考了。说明大家还是发现考算法题是有效的衡量一个优秀程序员的标准。
    Pyjamas
        35
    Pyjamas  
       2020-04-24 05:44:29 +08:00   ❤️ 1
    > 怎么说呢,我觉得每个程序员的生命中都至少应该有几个月在静心学习 Haskell 。学会 Haskell 就像吃几天素食一样。每天吃素食显然会缺乏全面的营养,但是每天都吃荤的话,你恐怕就永远意识不到身体里的毒素有多严重。

    对我来说刷题跟上面的学 Haskell 差不多
    beginor
        36
    beginor  
       2020-04-24 07:12:12 +08:00   ❤️ 2
    数据结构,算法,设计模式可以说是程序员的三大利器, 有空多刷刷没坏处!
    zackwan95
        37
    zackwan95  
       2020-04-24 07:29:01 +08:00
    你从公司的角度出发就能明白了,大公司就是想省力招人罢了。在美国大公司面试官是得接受培训的,考算法题是节省面试官的时间,反正是买方市场。
    不然你说考啥。
    程序员经验主义的活,干过的谁都会(正常努力上进程度)没干过的只能靠装作自己干过(基本上就是骗)。
    那要么就考书本上的科班知识呗,那更是一万年用不上,而且你更不好复习。
    我面过最有水平的面试是谷歌社招前端的,pair programming 的方式解决一个问题然后让你随便查,根据你的搜索习惯来判断你的思维方式。这样招聘成本会很高,而且一般的公司估计面试官自己都会露怯。
    falcon05
        38
    falcon05  
       2020-04-24 07:42:52 +08:00 via iPhone
    没多大用处,更多时候写代码的瓶颈在对需求和业务的理解沟通,甚至大部分情况与代码无关,而实现大多是有成熟的可以参考的方案,很少要自己写算法的时候。
    zackwan95
        39
    zackwan95  
       2020-04-24 07:44:34 +08:00
    @avastms 人类 99.99%的科技文化发明创造都是没有参加过高考的人做出来的,人类现在用的互联网的东西好歹还有 10-20%是刷过算法题的人写出来的,这样看来刷算法题比高考还有用
    kios
        40
    kios  
       2020-04-24 07:46:16 +08:00
    最近我也在刷,但是我的初衷是为了让自己不变得太蠢 = =
    zhusiyu
        41
    zhusiyu  
       2020-04-24 08:07:58 +08:00
    有些算法,写游戏是真能用到,但也不是每次都用到~
    index90
        42
    index90  
       2020-04-24 08:30:37 +08:00
    你所说的算法题是指,直接告诉你算法名然后默写出来呢?还是给你一个真实问题,然后你用某些算法去解决呢?

    前者的确没有意义,我也没见过面试考前者的。后者的意义是,你不仅知道算法,还知道怎么把现实问题转化成数学问题的能力。当然现在很多面试题都已经公布在网上,而面试官有可能懒得重新设计题目了,面试者只要刷题就好了。
    Davic1
        43
    Davic1  
       2020-04-24 08:31:27 +08:00
    不论是算法也好,其他理论也好, 都是多年积累下来的经验,思想,记载在书里。学习算法,或者读这类书,就是直接吸取前人的经验,而不必自己在走一遍。

    比如,别人告诉你那有辆车可以开,但是自己就是喜欢骑自行车。
    nnqijiu
        44
    nnqijiu  
       2020-04-24 09:04:12 +08:00
    做算法题就像做数学题,都有套路,现实应用开发完全用不到,除非你做底层优化可能会涉及一点
    fkdog
        45
    fkdog  
       2020-04-24 09:27:59 +08:00
    大部分都是跟风的。
    以前搞技术博客,然后一窝蜂的去搞了。
    现在刷 leetcode,然后一窝蜂的去刷了。

    leetcode 这种,如果你停一段时间不去刷,立马就忘记了。
    vevlins
        46
    vevlins  
       2020-04-24 09:48:36 +08:00   ❤️ 1
    自信。

    自信很重要,作为一个虽然科班出身但计算机基础薄弱的工程师,从前端搞后端、学算法、学编译原理都带给我极大的安全感,让我自觉扎实了程序员的基本功,干什么都更有自信(虽然现在还没怎么学....)。

    人自信了,干活也快了,跳槽也有自信了,人也有点脾气了。哈哈哈
    CoderGeek
        47
    CoderGeek  
       2020-04-24 10:09:56 +08:00
    个人感觉不会 死刷题就跟背书一样 应付跳槽涨薪而已
    rnborca
        48
    rnborca  
       2020-04-24 10:11:38 +08:00
    用不上说明你 low 阿,旦且认真思考过需求的最好实现方式,都会用上,只知道实现功能的 low 比当然用不上数据结构和算法。ps:稍微复杂的需求,当然写不了复杂的也说明你 low 。
    tcfenix
        49
    tcfenix  
       2020-04-24 10:20:51 +08:00
    你所有听说过的大厂社招都会考算法,国内的国外的都会考,无非是算法在面试中的占比区别

    比如国内大厂一般算法会考,基本就是了解你的实际动手能力,其他会问你的项目,然后就是问你对于使用的中间件或者语言的底层了解(A 必问 concurrentHashMap 与 GC),少数会有一些 system design 的题目,

    国外的大厂算法比例更高,
    比如朋友介绍过微软什么的基本就是算法
    亚马逊的面试大部分是算法,然后加上 system design,最后来点价值观考核

    算法本质上就跟高考是一个逻辑,优秀的人**容易**在高考中拿高分,
    但是并不是**所有**高考高分的人都优秀,也不是说高考没有高分的人就不优秀

    算法题好的人优秀的**可能性**大
    但是并不是**所有**算法好的人都优秀,也不是算法不好的人就没有优秀的
    bejond
        50
    bejond  
       2020-04-24 10:40:12 +08:00   ❤️ 1
    @zackwan95 你第一句话我不知道真伪。第二句话结论和条件不相干。是筛选机制是算法主导,所以创造互联网的人大多会算法。第二句话说 80%都是受过高等教育的人写出来的看起来也没毛病,但是这也站不住脚。就像你说现在的发明都是喝水的人造出来的一样。
    bmy
        51
    bmy  
       2020-04-24 10:43:00 +08:00
    到现在也不会算法,可能这辈子也不会。。。
    clownxiaoqiang
        52
    clownxiaoqiang  
       2020-04-24 10:56:10 +08:00
    还是筛选人的一种方式,就和争吵了这么多年的应试教育一样,始终没个结果。但是愿意花时间去刷一刷这些比较复杂的东西,从某种程度上说明这个人是愿意为工作岗位付出努力的,以及有一定天赋。

    对于工作是否有实质性的帮助,这个见仁见智了。多看些书总归没坏处,但是真正的与公司来说有多大用处,其实不得而知。就像前两年,公司大佬来给我们开会,一个技术总监给大佬提问“我们是技术驱动的公司吗”,人家答“我们是结果驱动的”。

    有时间多看看,至少能在我们这个 level 占一定优势,pk 掉一些人。
    deepmindlab
        53
    deepmindlab  
       2020-04-24 11:04:14 +08:00
    算法还是要彻底领悟,不然刷 1000 道题都没有实质意义
    xcstream
        54
    xcstream  
       2020-04-24 11:08:46 +08:00
    那考什么比较好 没有更好的了
    lithbitren
        55
    lithbitren  
       2020-04-24 11:16:24 +08:00
    刷 leetcode 不是为了面试,是娱乐,排位刷进前 100,周赛刷进前 30,不用想别的,卷就完事了。
    purensong
        56
    purensong  
       2020-04-24 11:20:02 +08:00
    如果不是真的喜欢,又有谁愿意去做舔狗呢?
    所以这类问题 "如果不是为了 A,做 B 又有什么用", 统一回复,不做 B 就装 B
    lithbitren
        57
    lithbitren  
       2020-04-24 11:20:08 +08:00
    不过今天有点气,今天 leetcode 签到题的 Python 高赞解法明明是我发明的,结果因为写得太早被评论区淹没了,一个赞都没有。
    v2Geeker
        58
    v2Geeker  
       2020-04-24 11:22:48 +08:00
    我刷题现在基本是套路,看上去是哪种类型的题目直接上模板... 没遇到的题型要想好一段时间,解法还不是最优的的。

    我工作 5 年了,说实话,刷题收益比不上多研究一下常用中间件大就是了...

    总之为了跳槽涨薪,公司好这一口,刷,很值!
    Mirage09
        59
    Mirage09  
       2020-04-24 11:27:45 +08:00
    面试做题跟算法不一样,需要很多 clarification,还有和面试官的沟通。
    0xZhangKe
        60
    0xZhangKe  
       2020-04-24 11:43:26 +08:00
    可以练练脑子,不然天天写业务代码,都生锈了。
    loryyang
        61
    loryyang  
       2020-04-24 11:55:27 +08:00
    挺有用的
    一是锻炼写代码能力,有想法和写得出来不一样,写得出来和写得好又不一样
    二是锻炼排查问题,算法题目的差错比较难,因为很多时候你看不到错误的 case ( LeetCode 不算),很多时候靠仔细分析代码,或者写测试,很锻炼人的
    三是锻炼思维能力,类似于数学的作用,高中之后的数学对生活毫无作用,但是他锻炼的是人的思维能力。算法能力也一样,锻炼大脑用的。要看懂并掌握一个复杂算法可不是那么容易的
    yukiloh
        62
    yukiloh  
       2020-04-24 12:18:47 +08:00
    如果不是真的 XX
    又有谁愿意做 OO 呢
    lzlee
        63
    lzlee  
       2020-04-24 12:26:58 +08:00   ❤️ 4
    我觉得做 leetcode, 是有用的
    战五渣留个言, 我自己没有怎么刷过
    但是周围有精通此道的大神, 他给我留下过或多或少的印象, 基本都是正面的

    1. 理解问题很简单清晰, 能够很好的划分 各个故事, 以及故事内的 各个小块
    2. 解决问题的时候, 通常都能很快的想到 套路;
    3. 就算一开始不是最佳的 套路, 也能在很快 演进出一个相对不错的 套路
    4. 他对效率这个东西很敏感
    5. 他对边界值很敏感
    6. 他对很多东西的原理, 演进路线很清晰, 可惜并不太愿意跟我讲, 也可能是他尝试过只是我没听懂...

    也不知道是因为这个导致他刷题厉害, 还是因为刷题厉害, 培养出了他这些东西...

    我个人来说, 刷题的结果我不是很重视
    我看重的, 是解决问题中付出的努力, 以及在努力中, 领悟的思路, 以及寻找思路的方法
    刷题的结果, 只是顺便获得的收益
    至于解法记得不记得, 那并不是很重要, 就算我记不得之前吃过多少面包, 但是那些面包已经被我吸收
    fcoolish
        64
    fcoolish  
       2020-04-24 14:06:42 +08:00
    感觉能训练下思维能力,实际应用没有用。
    ayavvv
        65
    ayavvv  
    OP
       2020-04-24 14:07:06 +08:00
    @rnborca 你这一口一个 low,听着让人不舒服。反正我看我们这边 p8 p9 的大佬也没见他们算法水平有多高。对于业务开发来说设计模式和架构方式这些才是最基本的吧。
    ayavvv
        66
    ayavvv  
    OP
       2020-04-24 14:10:10 +08:00
    @lihongming 讲道理啊,现在给我个业务需求,我也大概能知道怎么写效率最高,以及边界值的处理。锻炼思维有太多种方式了
    rnborca
        67
    rnborca  
       2020-04-24 14:31:31 +08:00
    @ayavvv 不舒服说明你 low 阿,戳到痛处了。你所说的没见 p8 p9 的大佬算法水平有多高,只是你想象出来的。
    ls2110609
        68
    ls2110609  
       2020-04-24 14:34:07 +08:00
    程序 = 算法 + 数据结构
    软件 = 程序 + 软件工程
    heiheidewo
        69
    heiheidewo  
       2020-04-24 14:38:48 +08:00
    @ayavvv 但是面试没法考察你的业务知识啊,所以还是面算法。实际工作中,还是查各种问题比较费神,算法好点的人思维大概率会比较好吧
    DelayNoMay
        70
    DelayNoMay  
       2020-04-24 15:02:24 +08:00
    算法题不能锻炼人文逻辑思维,只能锻炼数理逻辑思维
    Ssskyl
        71
    Ssskyl  
       2020-04-24 15:04:31 +08:00
    锻炼优化的习惯
    BernieDu
        72
    BernieDu  
       2020-04-24 15:10:20 +08:00
    @zackwan95 数据来源?
    AngryMagikarp
        73
    AngryMagikarp  
       2020-04-24 15:12:35 +08:00   ❤️ 2
    不大,除非是做特定领域业务的。对于大部分程序员,与其看算法,还不如把网络协议、操作系统、数据库、代码组织等知识掌握了。
    多少程序员连 HTTP 协议到底怎么回事都不搞清楚,多少程序员连 Network unreachable 这样的提示都看不懂。

    大公司用算法面试,就是因为他们是大公司,一切都是“规范化”的,并不是说他们需要懂什么算法的人,只是他们需要有一套统一,但又不太差的筛选标准而已。招进去绝大多数依然和算法没关系。
    gggxxxx
        74
    gggxxxx  
       2020-04-24 15:44:27 +08:00
    其实没啥用。当然个人兴趣还是不错的。
    我心目中的优秀程序员是学习能力强和执行力强的那种。开口就是刷了很多题的那种程序员在我心目中是比较 low 的。有那精力不如自己多写点发挥自己想象力的程序,就跟木匠一样,自己有时间打几套家具出来,比什么都强。
    编程开发拼的是思维和眼界以及勤奋,死抠一些小的技术点或者算法,说直白点跟孔乙己有什么区别。
    cs419
        75
    cs419  
       2020-04-24 16:22:34 +08:00
    对于招聘
    公司招个会计,要求会 office , 但要求会装系统合适吗
    菊厂招人开发个操作系统,应聘人不懂操作系统原理合适吗

    方向不同,价值不同

    人家就想爬点漂亮 MM 的图片,用 python 一天搞定了,谁会先花个十天半个月去学算法。
    创业公司刚起步,那肯定是 if else 的一坨代码先把产品做出来。
    要等你分库分表、异地多活、ddd 啥的,公司先破产了。

    百度、淘宝、谷歌、12306 他们的服务要是不对代码进行优化
    再牛掰的硬件也扛不住流量的冲击

    20%的技能 解决 80%的需求
    剩下的 20%需求 需要用另外的 80%技能去解决
    fumeboy
        76
    fumeboy  
       2020-04-24 18:01:53 +08:00 via iPhone
    @tt67wq 如果不是为了健身,健身对自我提升有什么大的价值吗
    Anarchy
        77
    Anarchy  
       2020-04-24 19:35:41 +08:00
    和做数学题一样
    zjyl1994
        78
    zjyl1994  
       2020-04-25 00:10:54 +08:00
    感觉到处都在考算法,就很难顶
    ligiggy
        79
    ligiggy  
       2020-04-25 09:45:03 +08:00
    @fumeboy 一语中的
    polebug
        80
    polebug  
       2020-04-25 11:29:49 +08:00
    刷算法题就像健身 如果只刷几周 根本没用
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1234 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 18:00 · PVG 02:00 · LAX 11:00 · JFK 14:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.