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

大佬们,如何看源码啊?

  •  
  •   tpeng9240 · 28 天前 · 5284 次点击

    类似这种一步一步 debug? 遇到复杂一点的 ,云里雾里的 ,真的有点搞不动啊!!!
    投简历已读不回 ,感觉都快自暴自弃,想着提升一下
    网络上大部分源码视频讲解也是一言难尽🙃🙃
    各位有没有好的学习方法,小弟借鉴一下🧐🧐

    第 1 条附言  ·  27 天前
    谢谢大家
    51 条回复    2024-10-28 14:26:21 +08:00
    mrwhyzzz
        1
    mrwhyzzz  
       28 天前
    c++吗,看 brpc ,跑一遍 demo 和 test
    iMoutai
        2
    iMoutai  
       28 天前
    看源码能不能找个软柿子捏一捏啊,上来就 Spring 啊,好几万百行代码,各种设计思考在里面,不迷糊有鬼了,先找个 MyBatis 、Hikari 看看啊,撑死几万行,先找找感觉
    tpeng9240
        3
    tpeng9240  
    OP
       28 天前
    @iMoutai 好的,谢谢
    tpeng9240
        4
    tpeng9240  
    OP
       28 天前
    @mrwhyzzz java boy spring
    zjq07
        5
    zjq07  
       27 天前
    有目的的时候看源码才更有效,有自己的目标和想法,就会有大致的方向,跟着源码走也是一步步验证自己猜想的过程(起码我是这样的)
    tpeng9240
        6
    tpeng9240  
    OP
       27 天前
    @zjq07 好的,谢谢
    iMoutai
        7
    iMoutai  
       27 天前
    @tpeng9240 #3 JUC 包下面的源码就很凝练,很多是上古大神 Doug Lea 写的,可以先看下这个,面试经常问的
    deplives
        8
    deplives  
       27 天前
    同意 #2 捡个软柿子捏啊,很多超大项目代码的组织都是很多设计模式,设计思考的。没有基础的真的是要看到吐
    levelworm
        9
    levelworm  
       27 天前 via Android
    我琢磨着要不先看最早的 commit 。。。
    Rust2015
        10
    Rust2015  
       27 天前
    学会合理的使用 GitHub ,还有类 GitHub 的 gitee

    在 GitHub 里有个高级功能,就是代码搜索,不知道代码出处,连 ai 不解释不了,你就搜,正常情况下有解

    https://github.com/search/advanced
    ww2000e
        11
    ww2000e  
       27 天前
    运行 各种调试
    ugpu
        12
    ugpu  
       27 天前
    先跑起来到处点一点 分模块感受下这个项目
    然后打开项目 先看公共库 配置
    然后找到主线程怎么挂载的
    在然后怎么管理各个模块的

    心里大概有个框架 硬匹配出一个设计模式 如果没有设计模式 你就夸 大道至简.

    最后各个模块代码看一看.

    看不懂就打日志看怎么运行的
    实在不行上单步调试

    在看不懂 自信点:这个项目不行 不是你不行
    wangritian
        13
    wangritian  
       27 天前   ❤️ 1
    看源码的学习效率很低,简单了解文件和代码架构就好
    对于某个细节功能,直接去搜文档(不限于当前框架)和 gpt
    huifer
        14
    huifer  
       27 天前
    如果可以直接联系我,来录制一个会议视频,点对点回答了。 cWZ5ZDA5NQ==
    grzhan
        15
    grzhan  
       27 天前
    我看代码都是记笔记的,而且是手写书面笔记(可能 ipad pro 记笔记也不错?)比如一个章节就是介绍某个函数或者某个类的,这个函数分成几个部分,又调用了哪几个函数,然后下钻的函数再分别记笔记……

    如果理解的部分就不需要抄代码直接用自然语言描述下,不理解的部分就标注待后面回过头看,或者查资料( gpt 、源码分析)来综合理解。

    手写笔记有个好处可以翻到前面去和当前下钻的函数和新理解的代码做对照,可能之前不理解的部分看到后面结合一下一下子就理解了。

    看完一个部分后可能会找网上的源码分析进行对照,看看自己还有没有什么疏漏的地方。

    不记笔记的话还有种办法就是写博客,自己从头介绍一个功能、一个模块的源码分析,这样实际写博客要讲给别人的时候就会知道哪些概念自己还不明白。

    当然这些都算是笨办法,效率不是很高,但从结果上来说是让我可以理解、看得进去代码的,而且这也是个热身的过程,随着对于代码理解得越深,很多笔记就会越简略。
    grzhan
        16
    grzhan  
       27 天前
    另外工具的话一般我就用 jetbrains 全家桶,开箱即用,Ctrl+B 下钻函数,Alt+F7 查某个对象某个函数在哪些地方被使用了,Ctrl+Alt+左方向 上翻自己上一个跳转,Ctrl+Alt+右方向 下翻自己下一个跳转,Shift+Shift+Shift 全局搜索,这些基本够用了也挺好用的。
    falsemask
        17
    falsemask  
       27 天前
    说一下个人经验。我当时看的这本书: https://book.douban.com/subject/30452948/,不要介意书比较老,从 xml 解析 bean 开始,了解一下 bean 如何加载。之后可以编译一下 spring 源码,本地边看边加注释。再看 springboot ,一开始不能钻入细节,了解源码整体脉络,之后挑感兴趣的慢慢深入。
    sleepm
        18
    sleepm  
       27 天前   ❤️ 2
    sourceinsight
    sourcegraph
    善用工具,记笔记
    levelworm
        19
    levelworm  
       27 天前 via Android
    @sleepm 这俩听说很久了,但是工作上用不到,请问有什么独到之处吗?相对比较成熟的 ide 来说。
    codegenerator
        20
    codegenerator  
       27 天前
    源码分析交流群,一起学习进步
    qq: 850243692
    codegenerator
        21
    codegenerator  
       27 天前
    @codegenerator 发错了,应该是这个 QQ 群 870794652
    zhouhu
        22
    zhouhu  
       27 天前
    带着问题看。
    11232as
        23
    11232as  
       27 天前
    小项目就看他 release note ,挑项目刚起步时的代码看,有单元测试得直接挑单元测试看。
    大项目先捋一捋模块,看官方资料和官方人员的博客,官方资料看不懂得,看别人写的博客和玩具实现,先理解场景和方向,开源码我用 sourcetrail ,支持 java 。
    如果有些代码太杂就翻翻它最初几个版本或者几个关键版本的实现,我理解重要模块思想变动的一般很少,但免不了时间长了里面多了些别的,找几个关键版本,最初的版本看最合适。
    Donaldo
        24
    Donaldo  
       27 天前
    @Rust2015 #10 Gitee 的搜索功能弱的一批,真的无力吐槽。。
    sleepm
        25
    sleepm  
       27 天前   ❤️ 1
    @levelworm 专业看代码,试了不就知道了
    sleepm
        26
    sleepm  
       27 天前
    ide 重
    这些工具轻
    说的是资源占用,cpu ,内存
    不过这几年优化,ide 凑活也能看,大纲,方法导航
    yudoo
        27
    yudoo  
       27 天前
    @falsemask 打不开了大哥
    iMoutai
        28
    iMoutai  
       27 天前   ❤️ 1
    murmur
        29
    murmur  
       27 天前
    不看源码,除非要面试,背八股文,需要什么调什么
    holy_sin
        30
    holy_sin  
       27 天前
    先横着看,再竖着看
    Edward4074
        31
    Edward4074  
       27 天前
    不满足需求或排查问题的时候才看源码,否则就当成黑盒
    lvlongxiang199
        32
    lvlongxiang199  
       27 天前
    带着问题看源码, 比如要了解 xx 功能是如何实现的, 最好是先自己想下如果实现 xx 功能, 有哪些小问题需要解决, 再看下他是如何解决这些问题的. 如果这部分功能有单测的话, 那可以 debug 下, 看看跟自己理解的是否一样
    (我现在在看 juifcefs sync 这部分的实现 https://juicefs.com/docs/community/guide/sync, 就这个可以提出如下问题
    - 看文档描述, 默认是增量同步, 如果存在同名文件, 如何确定是否需要同步 ?
    - 当同步的文件比较大的时候, 如何优化性能 ?
    - 如果同步时会 update 文件, 如果同步失败的话, 会不会造成文件损坏 ? 他是如何解决这个问题的 ?

    第一次看的时候, 我会把非默认配置的分支都给折叠, 跳过这些逻辑
    )
    bruce0
        33
    bruce0  
       27 天前
    我看 redis 源码的经验, 在 linux 上使用 clion 打开, 然后带着问题去看, 比如 get 命令的执行过程, 然后使用 debug 模式启动 redis, 断点调试
    sampeng
        34
    sampeng  
       27 天前
    刚学编程那会会看。现在不看了。这时间花在体验不同的开源项目上更好。当你需要什么功能的时候再去翻就好了。

    所以我特别恼火面试问 xx 接口原理的,你看了不代表我看了。我不看不代表我不懂啊。我需要复刻这个接口或者有 bug ,10 分钟的事。。很难么
    paradox8599
        35
    paradox8599  
       27 天前
    没必要为了看而看,有什么想借鉴的直接上 https://grep.app/
    tpeng9240
        36
    tpeng9240  
    OP
       27 天前
    @paradox8599 好的,谢谢
    tpeng9240
        37
    tpeng9240  
    OP
       27 天前
    @paradox8599 好东西
    lyxxxh2
        38
    lyxxxh2  
       27 天前
    先学设计模式。
    不然你看这些更复杂的设计模式,也会一脸懵逼。
    tpeng9240
        39
    tpeng9240  
    OP
       27 天前
    @lyxxxh2 好的
    zhu327808
        40
    zhu327808  
       27 天前
    贴一个我在另外一个问题下的回答吧,可以参考下

    ---

    我最近接手的项目就是这样,只有一份代码,没有文档,只有一个可用的环境,我的方式是这样的,先理解产品的功能,从功能出发猜测大概是怎么实现的,当然要看的是主流程的功能,把一个整个功能流程了解透,再思考如果是自己做该怎么做

    有了上一步的一个梳理带着到底是不是这么实现的,来看代码中的主要流程,先不要关注细节,梳理流程,然后把一整个代码的流程串起来

    然后就可以开始解遗留的 bug 了,解 bug 的过程就是了解细节的过程,边解边把一些觉得值得重构的点打上 TODO

    再然后就是接新的需求了,新的需求肯定是要改造现有的代码的,那就按自己思路做分层,实在改不动的代码就他妈先包成一个函数,写个自己能懂的函数名字,打上注释能用,不要轻易改动

    我现在就是尽量自己的新写的代码就把以前的功能完全重构掉,改不动就封装起来,下层的代码尽量要稳定,上层可以快速迭代

    当然屎山就是屎山,不可能一步到位,只能走一步看一步了,也没有时间来完全重写

    ps:我这里是一个 golang 的项目,然后被各位大佬硬是写成了 java 的风格,我也是服气的,然后上了他们手撸的依赖注入,导致看代码逻辑都是乱的,你都不知道这个对象是从哪里来的,我的妈呀,头疼
    ixcode
        41
    ixcode  
       27 天前
    问 cursor 啊,
    jeesk
        42
    jeesk  
       27 天前 via Android   ❤️ 1
    看看 0.0.1 版本 的源码就行了
    vfs
        43
    vfs  
       27 天前   ❤️ 1
    纯个人感受: 不要无缘无故的去读别人源码(除非你是想去学习别人的编码规范)。 大部分时间就是自己写,写到哪里卡住了(比如架构如何设计,功能如何实现,某个 api 怎么调用等),此时就可以去找找别人源码看看了。
    hunterzhang86
        44
    hunterzhang86  
       26 天前
    用 Cursor 也是个方式,直接在 Cursor 里面 @Codebase 问某个细节的问题,一般都还回答的不错。
    kjstart
        45
    kjstart  
       26 天前
    那肯定是粘到 chatgpt 里让它讲给你听啊.
    zzzzzzggggggg
        46
    zzzzzzggggggg  
       26 天前
    @vfs 这个确实,读别人的代码很费劲,自己写个 demo 版本的还行
    ttys000
        47
    ttys000  
       25 天前
    @tpeng9240 github 的搜索比这个强大好用
    vfs
        48
    vfs  
       24 天前
    @zzzzzzggggggg 反正就个人而言,感觉帮助不大, 浪费大量的实践。 反而是自己开始动手写的时候,才会遇到问题, 才会开始思考怎么来处理,这时候去读别人的代码,就会有所收获。
    DIO
        49
    DIO  
       24 天前
    找文档详细,学习资料和经验分享多的项目。你不知道设立理念和架构的话,你自己写的再过几年自己都未必看得懂。
    tpeng9240
        50
    tpeng9240  
    OP
       24 天前
    @vfs
    @DIO 好的 谢谢
    zt5b79527
        51
    zt5b79527  
       24 天前
    要记笔记或者写博客。

    防止学了前面忘了后面,看的过程中时常回顾,也可以前后相互验证。隔一段时间再来看,还就会发现常看常新,总能看出点新东西。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5024 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 39ms · UTC 09:37 · PVG 17:37 · LAX 01:37 · JFK 04:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.