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

面试官问我 有阅读过哪些源码?

  •  
  •   hackingwu ·
    hackingwu · 2021-02-09 10:26:59 +08:00 · 6880 次点击
    这是一个创建于 1370 天前的主题,其中的信息可能已经有所发展或是发生改变。

    这个问题我一时还真不知道该如何回答,平时在工作中,遇到问题或者对某个实现感兴趣的会翻阅一下源码。但是针对这个问题我也不知道回答什么?是因为我没有系统的完整通读一个框架的原因? 这种问题应该怎么回答? 日常中应该怎么积累?

    26 条回复    2021-05-10 15:13:48 +08:00
    l00t
        1
    l00t  
       2021-02-09 10:30:22 +08:00   ❤️ 5
    阅读过手上项目的源码……
    laojiaqing
        2
    laojiaqing  
       2021-02-09 10:32:06 +08:00
    面试官估计也没看过什么源码,他只是不知道该问什么,问这个准没错
    drunkdog
        3
    drunkdog  
       2021-02-09 10:39:30 +08:00   ❤️ 5
    十有八九这个面试官是个草包
    widewing
        4
    widewing  
       2021-02-09 10:52:00 +08:00 via Android
    然后你就脑补成“完整通读”一个框架了?
    hxndg
        5
    hxndg  
       2021-02-09 10:55:22 +08:00   ❤️ 1
    实际上这个回答的重点,并不是你看过什么源码,而是看你怎么看源码的。
    因为工作原因,我看过 OPENSSL 自动机的源码,分析过里面的功能,但是只看功能是第一步的,我原先总结的看代码目标是:

    + 自动机中功能性的划分,能迅速找到功能划分的位置。
    + 针对某些异常情况的处理,能迅速找到在不同步骤出异常或问题时的处理流程。
    + 系统竞争和瓶颈所在地,能迅速找到可能导致并发 /新建问题出现的地方。
    + 多线程或多进程同步的地方,能迅速分析清楚具体是哪种同步模型。
    + 能够将模块中可拆分 /变化的部分迅速找到,并零件化

    具体可以看看这篇文章,这个是我总结这几年工作加看代码的经验和教训:
    https://hxndg.github.io/2020/12/15/%E5%BC%82%E6%AD%A5%E7%A8%8B%E5%BA%8F%E7%BC%96%E5%86%99%E6%97%B6%E7%9A%84%E4%B8%80%E4%BA%9B%E5%B0%8F%E6%95%99%E8%AE%AD/
    l4ever
        6
    l4ever  
       2021-02-09 11:08:32 +08:00
    你就说阅读过 windows xp 的所有代码.
    hongch
        7
    hongch  
       2021-02-09 11:20:48 +08:00   ❤️ 1
    你直接和他扯一个他也不知道的项目源码,比如:嫦娥一号燃料控制器的源码
    saberlong
        8
    saberlong  
       2021-02-09 11:22:47 +08:00 via Android
    估计是一下子没找到问的方向,问这个看看你熟悉什么,然后再深入问
    CEBBCAT
        9
    CEBBCAT  
       2021-02-09 11:44:12 +08:00
    就实事求是呗,这帖没读太懂。楼主如果还有其他目的,最好还是直接写出来
    Kobayashi
        10
    Kobayashi  
       2021-02-09 12:40:41 +08:00 via Android   ❤️ 2
    前 3 楼至于吗?问问对方阅读过哪些源码怎么了?我自己就不想 3 年工作从来不知道自己用的框架怎么工作,最好有些开源贡献。近朱者赤、近墨者黑。源码不仅是学习框架远离,你也能学到优雅的设计、代码。
    写代码不只是一位读文档写接口调用、CRUD,研究源码提高自己代码水平、接口设计水平也是重要一环。
    fiveelementgid
        11
    fiveelementgid  
       2021-02-09 13:32:27 +08:00 via Android
    @Kobayashi 读 fundamental 比读源码重要(逃
    rodrick
        12
    rodrick  
       2021-02-09 13:33:06 +08:00   ❤️ 1
    这个题目其实等于:你看过哪些网上对源码的原理解析 or 你看过哪些八股文里的源码相关题目,不要想太多
    hackingwu
        13
    hackingwu  
    OP
       2021-02-09 13:45:32 +08:00
    @CEBBCAT
    @Kobayashi 主要是不知道怎么回答,平时有读,但是真的让你去说,你好像又说不出啥来。
    warush
        14
    warush  
       2021-02-09 14:34:38 +08:00
    请问 fundamental 是指什么呢?
    DoctorCat
        15
    DoctorCat  
       2021-02-09 15:23:10 +08:00
    其实,面试官只想要一个态度:热衷技术钻研技术。
    除非是参与社区项目,否则你具体看了啥代码,对于工作而言大概率是没有用的。
    比较同意王垠大神的观点:不建议读代码,因为绝大部分代码都是不断迭代生成的糟粕,真正的核心精髓可能就几百行。
    pkupyx
        16
    pkupyx  
       2021-02-09 15:51:10 +08:00
    因为工作时间长了,总有文档描述不清楚的方法、接口,非得读源代码才能清晰确认输入输出。
    mghio
        17
    mghio  
       2021-02-09 22:46:20 +08:00
    @hxndg 有点东西。
    hxndg
        18
    hxndg  
       2021-02-09 23:23:38 +08:00
    @warush
    基础的理论,比方说你去看 linux 内核的 lru 可能看不明白,不如去看看《现代操作系统》里面的 second chance 和 lru 理论之类的东西,先搞明白原理。如果看代码很容易被不想管的东西干扰,看伙伴系统实现会看到不可回收 /不可移动 /可回收啥的,但是对伙伴系统的原理没影响。

    @mghio
    谢谢你的肯定,但是这种东西属于工作,查问题时候的总结。对于找工作没什么用,国内面试都是内卷(看到了很个糊弄的例子)。比方说我做 TLS 握手里面的多线程优化和状态机优化,主要是对新建有影响,面试官上来一个对并发如何如何,我就没话说了。所以还是多刷题,多背面试题比较好,按照自己的理解自己的语言来描述远差于背诵好的答案。


    @DoctorCat
    王垠属于理论学派,看不起实现派。实现派也看不起理论派。工业化代码追求简单有效,很多时候不追求美观的。嗯可以类比理论医学和临床医学。不过我看的多线程相关的代码对工作还是很有用的。
    sss15
        19
    sss15  
       2021-02-10 10:05:42 +08:00
    工作这么多年,除非是要写专题博客,真的没有去完整阅读过 spring 或者其他项目的源码,都是用到哪调试到哪。所以我会这么回答。
    完整的看整个源码的是没有的,但是在使用框架的时候遇到问题,会断点进去调试,顺便就阅读一下对方的源码。
    举个例子,有用过一个 ElasticSearch 的开源项目,在使用过程中,他能对写好注解的 dto 自动生成对应的 index,但是发现没有对 nested 对象的处理。于是阅读了他根据注解反向生成 index 的部分的代码,追加了一个注解类型,追加了一段 json 拼接的方法,使得其能支持 nested 对象的 index 生成。 还扩展了他分页返回的对象中的属性,之前分页是没有返回 max 的。 最后 pull 了代码给项目。作者也采纳了我的思路,并完善了他的框架。

    完了之后估计面试官要追问,你是如何使得他能支持 nested 对象的 index 生成的。这都是套好吗,把面试官引到你的套里来。

    回答 ElasticSearch 创建一个 index 就是拼接一个符合规则的 json 字符串,然后 post 到 Api 接口上去嘛。 其他的字段他都拼接好了,那我要追加的一个方法,就是判断当前属性是 nested 类型,然后去反射这个类型里面有哪些基础的类型,拼接一个正确的 json 部分组装起来就可以了。 如何判断属性是 nested 类型,通过注解嘛,我扩展了原项目中注解的类型,这样就非常好判断了,照着之前项目里的写法用就可以了,你要问我怎么获得属性上的注解,我现在背不出来,但是当时的场景中,我只要照着前面的代码写,就能获得注解和注解内的类型值了,这就是阅读源码和实践结合嘛。 再补充一点,我考虑到有 nested 嵌套 nested 的情况,这样显然复杂程度要增加,需要进行递归调用,不过当时项目时间有限,我就没有深入去实现递归的方法,仅支持了一个父类型里面嵌套一层 nested 类型。
    kimjosda
        20
    kimjosda  
       2021-02-10 23:55:12 +08:00 via Android
    前端,读过 redux-thunk 的源码🐶
    Sendya
        21
    Sendya  
       2021-02-11 10:48:48 +08:00 via Android
    读过 kafka,rocketmq 源码,当时读的目的是为了 mmap
    RedisMasterNode
        22
    RedisMasterNode  
       2021-02-11 12:31:18 +08:00 via Android
    123 楼挺逗的哈哈哈
    nuistzhou
        23
    nuistzhou  
       2021-02-11 16:37:45 +08:00 via iPhone
    我要是面试官可能也会问,我觉得这是个很好的问题。1. 可以看看应聘者有没有过参考源代码来调优 /debug 的经验或者想法,而不是无脑调用 API 2. 如果有阅读源码习惯,大概率他自己的代码水平风格也不会太差
    Actrace
        24
    Actrace  
       2021-02-12 13:36:47 +08:00
    @hxndg
    面试官关注的点没错,就是问的问题不够直接。
    所以沟通成本也是影响效率的原因之一。
    MuscleOf2016
        25
    MuscleOf2016  
       2021-02-18 10:24:01 +08:00
    经常问,也没希望能说出什么源码分析,就希望能有这个主动的意识,如果骗我的,也发现不了。
    free3nvy
        26
    free3nvy  
       2021-05-10 15:13:48 +08:00
    我今天也被问了 萌新哪能阅读源码 难受
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2598 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 06:00 · PVG 14:00 · LAX 22:00 · JFK 01:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.