刷过一千道算法题,但是看不懂 Vue 源码。 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
iDontEatCookie
V2EX    程序员

刷过一千道算法题,但是看不懂 Vue 源码。

  • &nbp;
  •   iDontEatCookie 2020-04-27 10:49:37 +08:00 11089 次点击
    这是一个创建于 2043 天前的主题,其中的信息可能已经有所发展或是发生改变。

    干了快三年的前端,一直都是自学,做些无聊的 to B 项目。

    喜欢刷算法题,水平不是特别高,但也刷了快千道题了。

    以前经常听别人说算法才是关键,算法好的人上手工程也快,设计模式我也学过,结果工作这么久连个源码都看不懂。应届生学弟都看完 React 源码了,我看了好几次 Vue 也看不懂,看了各种讲源码的文章也迷迷糊糊,感觉自己好废物。到底怎么样才能提高阅读源码的能力。

    61 条回复    2020-04-28 12:47:05 +08:00
    heiheidewo
        1
    heiheidewo  
       2020-04-27 10:52:48 +08:00
    算法题是怎么刷的?有参考别人的解题报告吗?
    murmur
        2
    murmur  
       2020-04-27 10:53:54 +08:00
    b 站有个 vue 代码讲解的视频(版权问题,你看的随时可能被删,如果好建议购买正版,作者已经开始讲 vue3 了),我是跟着讲解看的,这东西自己找入口太累,跟着别人的视频思路清晰直切重点
    dxc190749
        3
    dxc190749  
       2020-04-27 10:57:23 +08:00 via iPhone
    划水划太多了吧,学会独立思考呀
    Curtion
        4
    Curtion  
       2020-04-27 11:00:40 +08:00   3
    和算法没什么大关系吧应该,这种库比较完善,既然比较完善就有很多细节操作,这些细枝末节虽然必不可少,但是在看源码时却是累赘,所以要忽略这些东西,建议先看轻量级实现,例如: https://github.com/DMQ/mvvm,然后再去看 Vue 源码,而且要有目标,否则就会在源码中东跳西跳中迷失自己,要看初始化过程就只看这个,要看依赖收集就只看这个,一旦跑题就点到为止。我最近也在看,加油!
    mmnsghgn
        5
    mmnsghgn  
       2020-04-27 11:03:46 +08:00 via iPhone
    佩服看完 React 源码的应届生学弟。
    chenjunyue520
        6
    chenjunyue520  
       2020-04-27 11:04:03 +08:00
    刷算法题和 看源码有什么直接关系么。 你带着问题看源码,会比较有收获,如果是无目的的看,应该都是会很难看下去的吧。比如,卧槽,这个咋实现的。。然后直奔代码。
    iDontEatCookie
        7
    iDontEatCookie  
    OP
       2020-04-27 11:07:55 +08:00
    @heiheidewo #1 一般想了一小时想不出,或者自己的解法速度比较慢会看别人的代码。
    iDontEatCookie
        8
    iDontEatCookie  
    OP
       2020-04-27 11:09:01 +08:00
    @murmur #2 谢谢 我搜了一下有好多 感觉大部分质量都不太好的样子 能给个 Av 号吗
    ericls
        9
    ericls  
       2020-04-27 11:09:26 +08:00 via iPhone   2
    面试过很多这种

    其实就是脱离了实践 学算法学成奥数的。

    忘记算法这回事先 不要因为会算法就把一切问题往算法上套。

    我觉得算法就像工程里的力学 它很重要 但是很片面 造一个房子你还要考虑审美 跟环境的结合 跟周围建筑的结合 用户的习惯 甚至还要考虑风水。
    fool079
        10
    fool079  
       2020-04-27 11:10:22 +08:00
    看完 react 源码的应届学弟是什么神仙。。
    iDontEatCookie
        11
    iDontEatCookie  
    OP
       2020-04-27 11:10:40 +08:00
    @dxc190749 #3 确实划了很久 独立思考只什么呢?

    @zhengjian #5 我也佩服 他进了一线大厂
    iDontEatCookie
        12
    iDontEatCookie  
    OP
       2020-04-27 11:13:03 +08:00
    @Curtion #4 谢谢你 我研究一下。
    iDontEatCookie
        13
    iDontEatCookie  
    OP
       2020-04-27 11:16:47 +08:00
    @chenjunyue520 #6 主要总有人说你算法那么厉害 看源码很容易 我不知道怎么解释 因为我真的努力去看了 确实不会。大神学弟也是这么和我说的,要有目的的去看。但我还是在源码中迷失了自己= =
    jmc891205
        14
    jmc891205  
       2020-04-27 11:17:44 +08:00
    为了看懂 Vue 源码而去学算法?
    那你可能方向搞错了。。。
    geniusmyn
        15
    geniusmyn  
       2020-04-27 11:19:57 +08:00
    @murmur 链接?
    wangxiaoaer
        16
    wangxiaoaer  
       2020-04-27 11:27:26 +08:00 via Android
    正常,估计我的项目代码你也看不懂。
    nianyu
        17
    nianyu  
       2020-04-27 11:28:14 +08:00
    因为你被骗了,现在的风气就是鼓吹算法。骗你刷算法刷多了你就什么都会了。
    VDimos
        18
    VDimos  
       2020-04-27 11:31:11 +08:00 via Android
    看完 react 源码的应届生是什么神仙
    maichael
        19
    maichael  
       2020-04-27 11:37:23 +08:00   2
    看源码本身不是有多难,难的是在找切入点上。
    crackhopper
        20
    crackhopper  
       2020-04-27 11:43:13 +08:00
    工欲善其事必先利其器。你把调试的工具搞清楚明白,掌握一些基础原理:编译、设计模式。然后顺着 debug 工具的流程看,接着站在全局梳理,最后每个子模块梳理。就搞定了。
    murmur
        21
    murmur  
       2020-04-27 11:43:46 +08:00   1
    av100634051
    crackhopper
        22
    crackhopper  
       2020-04-27 11:44:42 +08:00
    本质上看不明白就是基础功不够。当然顺着 debug 工具的堆栈硬看也行,大概也能掌握个 50%左右的源码吧。
    nicebird
        23
    nicebird  
       2020-04-27 11:45:24 +08:00
    多看多想,完事
    yeze322
        24
    yeze322  
       2020-04-27 11:49:25 +08:00   2
    工程问题和算法问题是两回事,算法重细节,源码重设计
    revalue
        25
    revalue  
       2020-04-27 11:54:19 +08:00
    大学生大把时间,找一个培训班视频看,各种源码解读。怎么也得看懂了吧
    ericls
        26
    ericls  
       2020-04-27 11:57:20 +08:00 via iPhone
    @VDimos 可能是遇到 react 的 bug 想解决 一不小心看完了
    zhw2590582
        27
    zhw2590582  
       2020-04-27 11:59:32 +08:00
    vue 源码我看过好几遍也没看下去,看懂了的部分过几天又忘了
    strugglexiang
        28
    strugglexiang  
       2020-04-27 12:09:12 +08:00 via Android
    @murmur 在哪里
    wobuhuicode
        29
    wobuhuicode  
       2020-04-27 12:13:58 +08:00
    算法是面试的关键。看懂 vue 库应该是业务的积累。用到用过的去看,带着想法去看才知道这东西是干嘛的。
    murmur
        30
    murmur  
       2020-04-27 12:15:22 +08:00
    @strugglexiang
    @geniusmyn
    @iDontEatCookie

    https://www.bilibili.com/video/av100634051/
    地址栏里的 gitpage 打进去好像可以找到正版的购买地址,我记得是 400 快
    murmur
        31
    murmur  
       2020-04-27 12:17:12 +08:00
    tmac33
        32
    tmac33  
       2020-04-27 12:21:19 +08:00
    我感觉你应该是被庞大的项目绕晕的。个人判断你应该缺少的是实际业务经验,跟算法无关。综上,多研究研究设计模式吧。
    Huelse
        33
    Huelse  
       2020-04-27 12:28:48 +08:00
    算法是具体设计,软件是规模工程
    wangyzj
        34
    wangyzj  
       2020-04-27 12:40:48 +08:00
    刷算法题和看懂 vue 代码没啥关系
    Chenamy2017
        35
    Chenamy2017  
       2020-04-27 12:41:43 +08:00
    如果不是学生,那么为了用而学,会比你漫无目的的刷算法题要好。
    hutng
        36
    hutng  
       2020-04-27 12:54:05 +08:00 via Android
    哈哈哈
    我还没学会 vue 怎么用
    更不要说看源码了
    renmu
        37
    renmu  
       2020-04-27 13:26:31 +08:00 via Android
    建议可以去看看《深入浅出 vue.js 》这本书讲得简单易懂了
    ikaros1997
        38
    ikaros1997  
       2020-04-27 13:46:23 +08:00   1
    你知道数据劫持怎么实现的吗,不要说什么 defineProperty/proxy,要具体的,keep-alive 又是怎么实现的,生命周期又是怎么实现的,等等这些。你想知道了,带着这些问题去看,做笔记,看懂源码做了什么再谈设计,不然源码那么多,为了看源码而看源码没有什么意义的。。
    gouflv
        39
    gouflv  
       2020-04-27 13:51:32 +08:00 via iPhone
    算法不是万能的
    iDontEatCookie
        40
    iDontEatCookie  
    OP
       2020-04-27 13:59:14 +08:00
    @crackhopper #20 谢谢指教~


    @renmu #37 好的 买!


    @ikaros1997 #38 刚看了明白点数据劫持和响应式,就 Watcher 和 computed 那里。感觉函数跳来跳去的理不清记不住。谢谢大佬指教。
    betulac
        41
    betulac  
       2020-04-27 13:59:58 +08:00
    面试算法占比多少就有多少用处啊

    想起兄弟去阿里面试,算法题直接说忘了还是给过了
    dremy
        42
    dremy  
       2020-04-27 14:00:23 +08:00 via iPhone
    会算法但不会语言基础,会走很多弯路的

    相比算法技能,我觉得语言基础应当更先掌握

    推荐看《 Javascript 高级程序设计》,看过之后就会恍然大悟了
    DelayNoMay
        43
    DelayNoMay  
       2020-04-27 14:00:27 +08:00
    vue 每个关键词的含义,你不知道就是不知道,难道你还能通过算法推断出 vue 关键词的含义??
    beidounanxizi
        44
    beidounanxizi  
       2020-04-27 14:05:12 +08:00
    vue 都学不会 ? 你的算法题 是 目光所至=刷过
    frantic
        45
    frantic  
       2020-04-27 14:06:59 +08:00
    看主干啊,抓你想要看的东西,适当忽略一些代码块
    q8164305
        46
    q8164305  
       2020-04-27 14:14:11 +08:00 via Android
    算法有用,但不是全部,代码设计,工程化也很重要
    hoyixi
        47
    hoyixi  
       2020-04-27 14:15:54 +08:00
    高中刷过 N 套试卷,考不上大学的多了去了
    wutiantong
        48
    wutiantong  
       2020-04-27 14:58:48 +08:00
    如果你想看懂一个框架的源代码,一个通用的最优方案是:自己尝试做一个类似的框架,不指望能做出来,但实践过后再去看就能懂。
    SpiderXiantang
        49
    SpiderXiantang  
       2020-04-27 15:34:38 +08:00
    看完源码。。。。 你逗我吧
    jtwor
        50
    jtwor  
       2020-04-27 15:54:34 +08:00
    1000 道。。。有点猛
    Wanex
        51
    Wanex  
       2020-04-27 16:13:09 +08:00
    你说应届学弟看完 React 源码,我怎么感觉是吹的,说大致懂点我觉得还是很合理的。当然,不是说完全不可能,毕竟世界这么大,牛人还是很多的。
    Navee
        52
    Navee  
       2020-04-27 16:22:02 +08:00
    框架的实现和设计模式关系更大一些,和算法关系不大
    Stevearzh
        53
    Stevearzh  
       2020-04-27 16:36:41 +08:00
    为啥要看源码
    jrtzxh020
        54
    jrtzxh020  
       2020-04-27 16:55:43 +08:00 via iPhone
    <<vue 深入浅出>>这本书就讲源码的,可以一看,挺不错的
    kaedea
        55
    kaedea  
       2020-04-27 21:35:28 +08:00 via Android
    1000 道... 能不能分享你觉得最妙的 2 道?
    g0thic
        56
    g0thic  
       2020-04-28 09:34:38 +08:00
    js 基础差了点吧
    GiantHard
        57
    GiantHard  
       2020-04-28 09:50:34 +08:00
    我觉得你可以去看看 Vue Issue 区里面一些超过一年以上都没有修复的问题,然后再带着这些问题去看源码,最后在试着去解决这些问题,顺便你还可以提交个 PR 修复一下。
    vcode
        58
    vcode  
       2020-04-28 10:23:23 +08:00
    蜜汁操作
    iDontEatCookie
        59
    iDontEatCookie  
    OP
       2020-04-28 11:32:10 +08:00
    @kaedea #55 POJ 3648 有一说一 我觉得题面很妙
    @GiantHard #57 谢谢 思路可以 但我感觉自己水平不够。
    @jrtzxh020 #54 谢谢 上面也有人推荐了这本书 我买一本
    @dremy #42 真没必要这么嘲讽我 刚学 js 就看过了 你不知道的 Javascript 看了三遍 犀牛书也读过了 我是菜 但也不至于没有基础就硬上吧
    aguesuka
        60
    aguesuka  
       2020-04-28 12:41:30 +08:00 via Android
    术业有专攻,就算是算法题,leetcode 的算法刷得再多,去做《计算方法》的算法题一样懵逼
    zzzzzzggggggg
        61
    zzzzzzggggggg  
       2020-04-28 12:47:05 +08:00
    算法题跟 vue 源码,这俩完全不是同一个东西啊;
    而且这个跟你 Javascript 基础知识差也没关系,首先你需要用 vue 写过项目,踩过一些坑。此时你应该对 vue 的响应式原理有一些体会,对虚拟 dom 有一些听说,也对它的生命周期方法有个粗浅的了解。
    然后你开始看源码了,看源码前首先要知道你的目的是什么,比如你是为了搞清楚响应式原理还是为了搞清楚 diff,这样子才能有的放矢,抓住重点;而且你可能还需一些前置知识,比如看虚拟 dom,你需要知道它解决了什么问题,重绘回流你得懂。看响应式原理,观察者模式得懂,es6 的语法得懂。看生成模板那块,得需要懂点编译的知识
    所以总结一下:算法题跟读项目源码没关系;不是你弱;需要用的比较熟练;需要前置知识;需要抓住重点
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2809 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 13:08 PVG 21:08 LAX 05:08 JFK 08:08
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86