V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ThanksSirAlex
V2EX  ›  职场话题

想问问那些面试揪着底层实现原理的面试官

  •  
  •   ThanksSirAlex · 2023-02-24 11:01:41 +08:00 · 11831 次点击
    这是一个创建于 672 天前的主题,其中的信息可能已经有所发展或是发生改变。
    你们过往的工作里面真的有什么实际项目因为读了源代码,或者理解了这些项目的底层实现收到启发,做出了贡献的吗
    106 条回复    2023-03-21 01:28:13 +08:00
    1  2  
    coderxy
        1
    coderxy  
       2023-02-24 11:10:55 +08:00   ❤️ 17
    有读源码,因为有遇到过一些疑难杂症最后都是看源码或者看底层原理才解决的。 没有做贡献,还没到那个高度。

    业务开发,3 年以上的其实都没啥好问的,基本的业务需求都能完成, 问原理就是看一个人有没有自主学习意识,还有后期有没有可能在技术上更进一步(即你这个人有没有潜力)。
    anonymousar
        2
    anonymousar  
       2023-02-24 11:12:23 +08:00
    只是一种选拔机制。答的上来的人说明他起码愿意花些时间去了解这些。

    如果面试就问个快排 那所有面试的人都过了 咋收人呢? 到时候直接用学历来刷 不满意的人更多了。
    ChefIsAwesome
        3
    ChefIsAwesome  
       2023-02-24 11:14:33 +08:00
    面试造火箭,工作拧螺丝这话没听过吗。
    还有面试官这个看着高大上的词能流行起来就很莫名其妙。都是平时干活干一半,被人事叫出来给人面试的普通打工人。
    你想太多了,缺人干活的不问这些东西。接着面试就好了。
    yosoroAida
        4
    yosoroAida  
       2023-02-24 11:15:06 +08:00
    启发是有得(起码反思自己以前写的代码为啥不用设计模式),但是贡献远达不到
    4771314
        5
    4771314  
       2023-02-24 11:23:17 +08:00
    其实就和考试一样,总有一些有难度的问题,方便把人分成 369 等供人选择,只不过以前是老师、高校,现在是企业
    eironn
        6
    eironn  
       2023-02-24 11:24:46 +08:00
    @coderxy 你也是个 rapper
    cs1024
        7
    cs1024  
       2023-02-24 11:24:51 +08:00
    我做机器学习算法相关的,

    很多人连某某算法的底层计算原理都不知道,调个包就往上套,然后调调超参数,
    殊不知这个算法和当前业务场景在某些细节上根本就不匹配,很容易犯方向性的错误。
    然后结果不好也无法分析问题到底出在哪。
    nmap
        8
    nmap  
       2023-02-24 11:25:05 +08:00   ❤️ 6
    可能你的层次接触不到这些吧
    kaedeair
        9
    kaedeair  
       2023-02-24 11:30:28 +08:00
    官方文档写的不全面只能翻源码;遇到的问题多了才会注重这方面,也是一种经验方面的考核
    YadongZhang
        10
    YadongZhang  
       2023-02-24 11:39:20 +08:00
    没有谁对谁错,只是双方不合适,换下一家
    NewYear
        11
    NewYear  
       2023-02-24 11:39:30 +08:00   ❤️ 7
    假设。

    你是面试官。
    面对一群人,如何筛选掉水货。
    面对筛选后,至少是一般水平的人员,如何进一步挑选出你最想要的人。

    另外,HR 会问你,这人的优势是啥,咱们为什么选他,咱们为什么给他这个薪水?

    我的方法是:各维度都问一些稍微不那么表面的问题,去了解这个人在哪些方面是有深入了解的知识。
    也会关注此人的性格、态度。

    最后得出一个综合性的结论,谁最适合这个岗位,我最想要谁。
    另外,会有些各方面表现很良好的人出现,但是未必适合这个岗位,要搞清楚这个岗位的定位是什么。

    职场的第一层是做事,第二层管理、改善自己相关的工作,第三层从更高维度去审视、规划整个小组 /部门的工作,但没有人是全能的。
    所以如果面试官问的话题不对,在主动提问环节你也可以发表自己的意见,提一下自己的优势。

    你放心,面试官可能不太多面试经验,但是不傻。
    dlmy
        12
    dlmy  
       2023-02-24 11:46:59 +08:00
    我读了较多的源码,也学到了很多东西,并且提过几个 PR ,但是在工作之中,对屎山代码也毫无办法。

    面试造火箭,进去 CRUD ,关于看源码 我个人觉得:
    1. 你在工作中确实是有需要的那一个部分,你就去看那一个部分的源码即可(哪一块遇到问题了,就深入去阅读那一块的源码,以此来解决问题);
    2. 99% 的情况,你不需长篇大论的去看源码,因为那需要花费你很多时间,而且你不用的话,基本上是没什么价值的。

    公司都是希望用最少的投入,得到最大的产出。所以会控制成本,招一些应届生跟外包来参与项目;而且需求多变,时间又紧急,都是要求我们尽快出东西来抢占市场;久而久之,代码就变成屎山了,你身上所学的东西也很难应用进去了(每天都有着开不完的会,干不完的活,做的需求没有哪一个不是紧急的,有些甚至上午出需求,下午就要上线,很让人绝望)。
    startisan
        13
    startisan  
       2023-02-24 11:49:16 +08:00
    我一般会问这种问题是因为对方简历上写了精通 JAVA ,熟悉 HashMap 原理之类的。
    echoless
        14
    echoless  
       2023-02-24 11:56:02 +08:00 via Android
    @anonymousar 卧槽 快排马上把我刷掉了
    silencil
        15
    silencil  
       2023-02-24 11:57:51 +08:00
    我喜欢问原理的,因为我会去学习,离谱的是问 API 的。三年经验被问数组遍历有几种方式、容器之间的区别;总结这几天的面试:1. 问项目的,问在项目中担任什么角色类似话题,不涉及任何技术。2. 问基础以及 API 的,如上,笔试手写 SQL ; 3. 问基础八股文( hasscode 和 equals 区别),这种没答好是我的问题,有点模糊了。4. 问原理的,问 AQS 原理。
    5. 问场景设计题的,百万数据库表更新这种。总结下来 4 这方面我属于答的最好的,其他的基础的问的不深的也很好答,少数问偏门 API 的答不上来;场景设计题没学过,提出自己的想法面试官不一定认可;据我观察,这次的面试和 21 年一年经验的时候是反着来的,应届和一年经验的时候问的最多的是 jvm 、中间件原理、缓存设计、架构设计,现在三年反过来问我 api ,我个人推测是好的公司简历收不过来,现在能叫我去面试的都是小公司或者说没技术追求的公司,可能面试官几年都没跳过了,净问些这,最离谱的是对着面试题跳跃性问的,上一题还在问触发器,下一个问题直接问锁消除是什么。
    silencil
        16
    silencil  
       2023-02-24 11:58:10 +08:00
    @silencil list 遍历,口误。
    wangpugod2003
        17
    wangpugod2003  
       2023-02-24 11:59:16 +08:00   ❤️ 1
    总好过问你爸是谁吧,知足了。
    echoless
        18
    echoless  
       2023-02-24 12:05:01 +08:00 via Android
    不要纠结 要么你把上次问道的学一下 要么就不去这类的公司
    silencil
        19
    silencil  
       2023-02-24 12:05:09 +08:00   ❤️ 4
    说说我面三年的话我会怎么面:1. 从项目入手,首先看架构,例如微服务的话,那把各个微服务组件你怎么应用的问一遍,主要考察知不知道为什么要这么用,而不是盲目的复制粘贴代码完成项目。2. 中间件问问使用上的一些需要考虑的东西,这个虽然也是八股文,但只要有这个概念再做项目的时候肯定会优于没有这个边界考虑的人。3. 数据库问一问,主要是索引原理、索引失效等等,可以看出一个人能不能写出好的 SQL 。这三点没大问题就是一个合格的 API 小能手了,希望筛选出更优秀的人,那这时候就会去问 JVM 、JUC 、spring 三级缓存原理这些,考察的是同学平时有没有主动学习的习惯。面试中能更多的将涉及到操作系统、网络方面的候选人也是加分项。
    ThanksSirAlex
        20
    ThanksSirAlex  
    OP
       2023-02-24 12:08:22 +08:00
    @nmap 来来来,不要光说,你读源码解决了你什么层次的问题,请用 STAR 法则描述一下
    Leonard
        21
    Leonard  
       2023-02-24 12:18:35 +08:00 via iPhone
    说白了就是卷,简历太多了,如果只问工作需要的技能,那满足的人太多了。
    那怎么决定要招谁呢?问点更深的东西,即使我不太用得到,但是知道总比不知道强,反正我也是花这么多钱,尽量招知道得多一些的人,万一以后用到了呢?
    bk201
        22
    bk201  
       2023-02-24 12:23:51 +08:00
    有些源码里涉及到一些思想,其实在一些场景是公通的,如果你没有读过,理解过,可能有些问题你就解决不了,或者走错方向
    chenshun00
        23
    chenshun00  
       2023-02-24 12:39:13 +08:00
    @silencil 哎,JVM 有啥问的,我是真不懂,无非就是个 Xmx 和 Xms ,MaxMetaSpaceSize ,这些有点经验的都知道,但是真的去说,真的是一言难尽呀。 :(
    ThanksSirAlex
        24
    ThanksSirAlex  
    OP
       2023-02-24 12:43:10 +08:00
    @bk201 请举例,读了什么源码受到了什么启发,解决了你什么问题
    Kyuzo
        25
    Kyuzo  
       2023-02-24 12:46:30 +08:00 via iPhone
    源码、算法题什么的都是筛选人的手段罢了,跟实际工作中用不用得上没啥关系
    pi1ot
        26
    pi1ot  
       2023-02-24 12:53:16 +08:00
    如果基本原理都不了解,说明对当前工作没有好奇心和钻研精神,不适合从事研发类岗位。
    实际上多年前有个工作多年的老程序员也在面试时质问过我差不多的问题,出于避免刺激对方的考虑,我没有说这就是你工作十多年还在年年换工作做最初级工作的原因。
    echoless
        27
    echoless  
       2023-02-24 13:04:31 +08:00 via Android
    @ThanksSirAlex 我不建议面试官问某个特定技术特定源码 但是读一些源码能够快速学习语言 对我来讲从语言入门到熟练 主要是好的源码代码写的都不错 我也不建议什么都去读源码
    ppking
        28
    ppking  
       2023-02-24 13:08:16 +08:00
    就表面上那些东西,说实话已经问烂了,实在是没什么好问的了,根本找不到候选人的区分度。说实话公司那些工作,我感觉可能 n 个候选人谁来都能干,但是具体谁来,总得问点能区分出来的东西,总不能掷骰子吧。
    dc25b
        29
    dc25b  
       2023-02-24 13:11:39 +08:00   ❤️ 8
    其实这楼里说那么多,而我觉得真实情况就是一句话:人多,单纯的筛选机制罢了。
    你来土澳,会干活就有人要,也没人问你算法题八股文。除了那几个大厂之外,面试聊聊做过的项目确认一下工作经历就要了。就这要求还要大把大把从印度东南亚捞人,本地都招不到。
    Biggoldfish
        30
    Biggoldfish  
       2023-02-24 13:12:23 +08:00
    就是八股文啊 日常工作有几次需要你去改基础 library 的代码的
    shyangs
        31
    shyangs  
       2023-02-24 13:23:22 +08:00   ❤️ 1
    其實問到「反轉二元樹」就已經能刷掉 開發 Homebrew 的作者 Max Howell 了.

    問更難或考更難,就只是喜歡炫技的工程師,當上面試官爽一把罷了.

    讓人全考 0 分的考卷和全考 100 分的考卷鑑別度是一樣的,無效測試.
    wetalk
        32
    wetalk  
       2023-02-24 13:23:57 +08:00
    @dc25b 土澳 remote 也不错
    JamesChen
        33
    JamesChen  
       2023-02-24 13:29:55 +08:00   ❤️ 8
    我带着开源项目去面试,照样也会被人问各种原理+八股文。我估计整个中国也有没多少面试官的个人开源项目能跟我的比,但我去面试一样得接受规格化的技术“八股文”面试。那既然别人都有比较大的开源项目了,这种“八股文”水平的技术面试除了测试服从性(比如专问偏门问题来进行打压),又能有什么意义?

    其中一个原因就是面试官的技术格局就那么低,只能看到那些问题,遇到什么水平的程序员都只能照着那些“模板题”去问。就像我们听过的“成为父母之前,也应该通过对应的资格考试”,很多面试官压根没能力面试别人,直接就被推上来。

    至于,一些老哥说程序员大概都应该读过那些常用技术框架的源码。这个观点,我一半认同。是应该读过,但不用“记过”(那么多开源项目可以读,除了为了面试,谁天天没事去背它们)。但问题在于为什么在面试的时候,面试官需要我们把这些原理背出来?讲真,开源界的大部分项目(不管有没有名气的)都没啥技术含量,合格的程序员花点时间(几分钟、几小时)看看就能把原理摸透了,然后在需要的时候现学现做才是程序员最最起码的基本功。

    国内的面试大风气不行,大部分的面试官水平不行,导致劣币驱逐良币(能力再强,不被面经题啥的,照样会被低水平面试官干掉)。
    icyalala
        34
    icyalala  
       2023-02-24 13:32:12 +08:00
    我读过很多代码,也写过开源项目和博客,甚至现在不少所讲所谓底层原理的文章都参考了我的写的内容。

    我不太喜欢面试别人,我觉得每个人在技术方面都有擅长和不擅长的,短时间的面试很难全面了解。所以如果我有时问到一些深入的技术细节,无非只是想要看一下对方在这个方向的技术深度,并不是说答不上来不给过。
    HAYWAEL
        35
    HAYWAEL  
       2023-02-24 13:33:51 +08:00   ❤️ 1
    只是筛选而已,一般来说 出了问题之后才会去看源码
    tool2d
        36
    tool2d  
       2023-02-24 13:37:05 +08:00
    我以前是写 PC 客户端的,那时候的前端和现在完全不一样,出 BUG 只能迎着头皮去翻源码看。
    Mithril
        37
    Mithril  
       2023-02-24 13:41:55 +08:00   ❤️ 2
    有很多。

    比如有个项目做 JNI ,内存占用超大。结果是因为 JVM 自己内部留了拷贝。

    其实很多都只是个方向问题,你知道有这么个东西,虽然不知道细节,但出了问题知道往这上面找就行,你要是不知道那就只能乱改了。甚至更多的是,你知道这里可能出问题,最开始就不会往这方向上走。

    "善战者无赫赫之功"

    一个好的 IT ,都没什么存在感,不会让你天天出问题去找他。一个好的架构 /开发,也不会等着坑出了问题才知道填。

    但其实就面试而言,问底层和细节更多的是看你对技术有没有兴趣。你说你擅长性能调优,从 Java 到 C++都做过,结果连个基本的内存回收都说不明白,这还觉得面试官在问你造火箭吗?

    明明是你自己在简历上说你能造火箭的啊。
    jishu541464750
        38
    jishu541464750  
       2023-02-24 13:50:32 +08:00
    你可以这么想,如果不这么问的话,早就有其他人进来了,轮不到你😂
    zackzergzeng
        39
    zackzergzeng  
       2023-02-24 14:08:38 +08:00
    有时会照着别人的源码抄,或者 debug 源码看自己的问题
    blackkkk
        40
    blackkkk  
       2023-02-24 14:09:21 +08:00
    不过是评级筛人手段罢了,问技术原理只是其中之一,还有自己做过的项目,业务,用到技术,啥技术解决啥问题呢。

    虽然绝大公司绝大部分工作都是 curd ,但是真遇到问题的时候,多思考,多学习的人总比只会 curd 的是更优选。

    明明吃这碗饭的,天天写 java 的 curd 好多年,连 jvm 是什么,里边都有啥都懒得了解的人,这种人不多写 bug 就阿弥陀佛了,写复杂业务天天 oom 的,接口稍微复杂点就 500 的,还得测试和技术负责跟在后边天天擦屁股。

    有更优选更简单便捷快速在面试者本身领域的学习,拓展,思维能力的考核方式,还要从别人从其他方面考核了解吗。

    当然,面试从来都是双向的,你也可以问公司有没有学习啊,培训啊,技术分享啊等等,只会问原理,而工作只是 curd ,加班的这种公司,也可以选择不去啊。
    optional
        41
    optional  
       2023-02-24 14:10:56 +08:00 via iPhone
    写程序用不到,调 bug 绝对用的到。
    wcp1231
        42
    wcp1231  
       2023-02-24 14:18:08 +08:00
    如果只是做需求,差异可能不明显,最多一些设计方案上会考虑全面一些。
    但遇到问题或故障的时候,了解源码、底层原理比较清楚,往往就能快速定位问题在哪、要怎么进行解决。这一点还是很有价值的。
    而且有阅读源码习惯的人,了解底层实现的人,知识结构往往比较全面,对技术也有一定追求
    cedoo22
        43
    cedoo22  
       2023-02-24 14:42:03 +08:00
    用不用的到是业务上的事情,
    需要这个能力的时候, 你得有~

    就像 核武器, 你得有, 心里才有底气。。
    whosesmile
        44
    whosesmile  
       2023-02-24 14:53:16 +08:00
    楼主不要预设立场,不然别人的回答对你没意义。

    不说具体的现实意义,就凭你对技术没有好奇心,就足够拒绝你了;工作这么些年,难道你就没好奇过你天天引用的各种库怎么实现的?哪怕一个都没有吗?
    yangzhezjgs
        45
    yangzhezjgs  
       2023-02-24 14:54:16 +08:00
    本质上是解释权问题。
    现实确实是绝大部分工作中底层原理用不到,但是决定你能否得到这份工作的人觉得“底层原理”重要,所以“底层原理”就重要,至于你说为什么会这样,简单说这个行业拥有解释权的那些高级程序员他们就是深刻掌握“底层原理”的人
    Ericcccccccc
        46
    Ericcccccccc  
       2023-02-24 14:56:44 +08:00
    和高考数学最后一道难题的逻辑是一样的.
    Autmn
        47
    Autmn  
       2023-02-24 15:15:32 +08:00
    有些时候遇到问题还是要看源码的。之前刚工作的时候写过土地空间地理坐标转换相关,遇到一个 bug 计算转换总是有误。看了源码发现是 api 包的一行代码有问题。自己把那个文件的代码赋值出来改了那一行才解决的。
    flowerains
        48
    flowerains  
       2023-02-24 15:18:07 +08:00
    就是单纯的筛选机制,什么不适合从事研发岗位都是扯淡的。

    成为一个优秀的研发人员,对新技术和底层原理的好奇心,行业类的从业经验,
    对业务逻辑的理解,自身的研发经验都是必不可缺的。
    chenPiMeiHaoChi
        49
    chenPiMeiHaoChi  
       2023-02-24 15:25:44 +08:00
    楼上很多都指出来了,一般情况下其实就是看谁答的多筛人而已。说来惭愧问技术我几乎没面上过,面上的全靠吹牛。
    tianmalj0613
        50
    tianmalj0613  
       2023-02-24 15:27:36 +08:00
    其实和有些外企的面试逻辑类型,考察学习理解能力吧。很多外企其实更关注操作系统、计算机网络的基础面试,概况起来也能说是底层原理吧。。
    Goat121
        51
    Goat121  
       2023-02-24 15:33:32 +08:00
    那不然问啥呢?问 CRUD 还是问调包,个个满分怎么选人呢?
    再说了即使大部分公司不会有改底层的需求,但是底层好的学习新东西就会有明显的优势,你难道希望招个人,做项目遇到新技术的时候先等他学个一年半载吗
    ThanksSirAlex
        52
    ThanksSirAlex  
    OP
       2023-02-24 15:33:59 +08:00
    @tianmalj0613 外企都是问系统设计的,这是对知识广度很综合的考察,除非是特别行业的岗位几乎不会问你底层实现
    ThanksSirAlex
        53
    ThanksSirAlex  
    OP
       2023-02-24 15:39:12 +08:00
    @Autmn 这东西就没啥启发性,一次性的 bug 修复,没有什么可迁移性,如果源代码出错了,就是修复源代码。
    @Goat121 我熟悉 linux 的底层,公司要用 kafka ,有优势吗,我还是那句话,你觉得有用你要举出实际的场景,了解了什么底层实现,受到了什么样的启发,这个启发在哪个业务中带来了帮助。
    Goat121
        54
    Goat121  
       2023-02-24 15:49:05 +08:00
    @ThanksSirAlex kafka 就一个工具,调包一类的需要学啥?
    那我之前做过一个 IM ,不能用 websocket 所以基于 udp 手撸了一个自定义私密协议,不熟悉底层的要学多久?
    或者我也维护过公司老项目,什么 node 的,python 的,这些语言我都不会,学语言到完成功能就两三天,如果平时只是调包 CRUD 的,不了解语言和框架实现原理的可以吗?
    Goat121
        55
    Goat121  
       2023-02-24 15:52:23 +08:00
    @ThanksSirAlex 而且谁告诉你外企是问系统设计的?你面的哪家外企只问这个,你报个名字
    leonshaw
        56
    leonshaw  
       2023-02-24 16:13:32 +08:00
    我一般问“你会怎么实现”,而不是“它是怎么实现的”。
    hzxxx
        57
    hzxxx  
       2023-02-24 16:36:39 +08:00
    我觉得你这问题的上下文环境有欠缺,得看是什么岗位,有什么要求。
    一个流行框架,他内部就有很多关于这门语言的高级用法,他之所以能通用,就是能解决大家的共性问题,他为什么这么设计,为什么这么实现,都挺能开拓思维的。
    洋葱模型,就是我看源码学的,然后在封装公司库的时候用上了,就当是 java 的 aop 吧,还有很久以前看 vuejs 里 for 循环获取嵌套属性的写法,我在很多地方都用上了,性能有提高不少。
    你看的知识有 10 分,可能你目前能用到的可能只有 1-2 分,但是不能说另外 8-9 分的知识没用吧,保不准什么时候就用上了
    iovekkk
        58
    iovekkk  
       2023-02-24 16:47:06 +08:00
    之前一面面试官问一堆八股文,我说真的有必要问这些吗?你也知道的,这些东西随手就能查到所以我一般不去记它。
    面试官回答:一面都这样,习惯就好。
    然后一面挂了。
    tianmalj0613
        59
    tianmalj0613  
       2023-02-24 16:56:13 +08:00
    @iovekkk 你在教领导做事?
    cbdyzj
        60
    cbdyzj  
       2023-02-24 16:57:54 +08:00 via Android
    读别人代码有一定的用处
    tianmalj0613
        61
    tianmalj0613  
       2023-02-24 17:03:29 +08:00
    @ThanksSirAlex 至少我接触到外企:
    3 年工作经验的招聘,也都是意思性的问一些操作系统+计算机网络。人家的评判标准只有一个,就是你是否愿意和他一起工作,至于问到什么程度,或者其他的评判标准并不是很重要。
    5 年以上的招聘,问的问题基本都是理解性的不是记住了就行的那种,但是都是问对计算机网络、操作系统里面在实际应用中理解(比如问:为什么说线程是轻量级进程,轻量级在哪儿?比如问:能不能写一个没有系统调用的程序?),没问过系统设计。
    lincanbin
        62
    lincanbin  
       2023-02-24 17:05:41 +08:00
    主要还是人太多了,你不懂有的是人懂,那怎么办?
    chenyu0532
        63
    chenyu0532  
       2023-02-24 17:11:58 +08:00
    筛人吧。

    从个人经历来回答:做了多年 cocos2d 开发,中小型游戏没啥需要看源码的,几乎都是业务逻辑,代码结构是最重要的。闲来无事开始跟着论坛大佬们读读源码,确实很有收获,经常有种"卧槽,还能这么写"的感觉。虽然项目中用不到,但是在解决问题方面确实强了。
    xqk111
        64
    xqk111  
       2023-02-24 17:25:35 +08:00
    说白了就是为了筛选,一个问题,看看你能理解到多深的层次,不会也没事啊,评级低一点呗,只是为了看看能力到多少,是否匹配,如果只会 curd ,也行啊,只是一份工作而已,平常心,平常心,
    dfkjgklfdjg
        65
    dfkjgklfdjg  
       2023-02-24 17:27:43 +08:00
    因为面试官也不知道问什么好,然后随便搜了一些面试题就开始问了。他不在乎是否是一个好问题,而是它需要完面试的任务。
    hsiaochi
        66
    hsiaochi  
       2023-02-24 17:31:32 +08:00
    可能一定程度考察你的逻辑思维吧,不过主要还是为了筛下人
    ThanksSirAlex
        67
    ThanksSirAlex  
    OP
       2023-02-24 17:39:51 +08:00
    @Goat121 做 IM 为啥不参考 MQTT 和 XMPP ,自己做一个私密协议你是不是要做 benchmark ,要不要做一大堆的可靠性测试,不然自己做的东西不如现成的好用有什么意义,你要是说你的项目是微信这种级别的我闭嘴。booking ,拳头,这种公司都是算法+系统设计,从来没碰见过问八股文的外企。你要说 kafak 没啥学的,那为啥有些公司就要问你 kafka 为啥快,快在哪里。我觉得我能记得一个顺序 IO 和零拷贝已经不错了,这种平时工作用都用不到的东西,怎么会有什么这么深的印象。如果是指要维护其他语言的代码,需要了解框架实现原理吗,我生涯换过 3 次编程语言,哪次不是直接上手的,做项目照葫芦画瓢还不会吗,我可不信你两三天能把框架后面的原理都能摸透,你告诉我你做什么项目需要了解框架的实现原理的。
    Goat121
        68
    Goat121  
       2023-02-24 17:59:29 +08:00
    @ThanksSirAlex 需求就这样,总有些客户对保密要求高,你去和金主爸爸说我做不了我就要按我的做么?那我再告诉你
    那是 863 工程,委托到我母校那边找我参与,出了事说不定要进去的,你敢擅自改需求么?
    hhjswf
        69
    hhjswf  
       2023-02-24 18:05:14 +08:00 via Android
    @ThanksSirAlex 系统设计更蠢
    catror
        70
    catror  
       2023-02-24 18:11:32 +08:00 via Android
    懂原理和不懂原理的人,写出来的代码是不一样的,尤其是需要复杂设计的代码。所以我的原因很简单,想找和自己同频的人,免得 review 代码的时候自己难受。
    Goat121
        71
    Goat121  
       2023-02-24 18:14:23 +08:00
    @ThanksSirAlex 你这种就是标准二极管,理解底层就是全部摸透?比如理解 mysql 事务和锁的人,解决并发 bug 是不是更快?一个理解协程的人,去学 go 的并发机制是不是比不理解的更快?这里一点那里一点,加起来就算只快一天,同样的工资人家为啥不招快一天的?

    还有我从来没说过我赞成死记的八股文,就比如 mysql 理解重要,但是死记硬背的哪几个隔离等级之类毫无意义,这个是出题水平的问题不代表就不该问。外企问算法难道不是考察底层理解?那是啥?你工作整天写算法啊?
    luodichen
        72
    luodichen  
       2023-02-24 18:17:18 +08:00
    这种经历多了去了。

    比如几年前刚接触 flask 的时候觉得它的请求上下文访问很优雅,也好奇它在多进程或线程或协程情况下是怎样管理请求上下文的,同时也担心在特定场景下会不会串上下文。从 flask 追到 werkzeug 的上下文管理器代码,读懂后受到了很多启发。也因此解决了后面实际工作中遇到的问题(造了一些轮子)。

    我在面试中也会问候选人有没有类似的经历,在这些经历中收获了什么。如果候选人有这些经历,至少能说明对方有钻研精神和技术热情,同时也可能和面试官产生共鸣,是可以加分的。
    ThanksSirAlex
        73
    ThanksSirAlex  
    OP
       2023-02-24 18:25:34 +08:00
    @catror 不一样不代表好坏,如果是复杂设计的代码为什么开发之前没有一个评审环节,快速讨论一下实现方式。
    Yc1992
        74
    Yc1992  
       2023-02-24 18:28:00 +08:00
    读了源码不一是高手,但是从来不读源码的程序员一定不是高手,多简单的道理
    ThanksSirAlex
        75
    ThanksSirAlex  
    OP
       2023-02-24 18:28:35 +08:00
    @Goat121 我不理解,协程就是个概念性的东西,为什么理解这个东西会对上手并发编程有帮助,rust 也有协程,但是语法和 golang 完全不一样,学这个东西步骤不都是一样的吗,翻翻文档,看一看语法,难道理解了协程可以让你看文档看的更快?
    ThanksSirAlex
        76
    ThanksSirAlex  
    OP
       2023-02-24 18:40:39 +08:00
    @Goat121 另外算法是偏应用的一个东西,你知道这个算法或者数据结构的特性,他是干什么的能解决你什么问题,比如 map 可以用来做唯一校验,算法不需要你知道 map 怎么实现的,但是你要知道他怎么帮你解决问题。怎么去分析一个应用的时间复杂度和占用空间,这和底层都没啥关系,关键是一个知识你碰上问题了你知不知道怎么用,就这么简单
    Goat121
        77
    Goat121  
       2023-02-24 18:48:14 +08:00
    @ThanksSirAlex 难道已经理解的看文档不会比还没理解的快一点吗?再说了你照文档直接写一个能跑的当然简单,实际工作遇到各种奇葩需求产生各种奇葩 bug 不解决吗?还是那句话,不要这么二极管,就算只快一点那招聘也是选快一点的啊。
    ThanksSirAlex
        78
    ThanksSirAlex  
    OP
       2023-02-24 18:56:23 +08:00
    @Goat121 你说的这个东西不是一个可以量化的东西,也没有数据支撑,也没有什么证据表现实际解决问题的能力,硬要说修 bug 我觉得信息检索能力更重要,毕竟世界上这么多人,能有多大概率你碰上的 bug 其他人都没遇见过,现在有了 chatgpt 这个还更加简单
    Goat121
        79
    Goat121  
       2023-02-24 18:59:40 +08:00
    @ThanksSirAlex 如果你连 map 为啥能做唯一校验都不清楚的话,你怎么知道写算法的时候该用上?
    你的意思是知道在哪里能用上就行是吧?那如果你还不知道的呢?去 google ?别人为什么不招能直接写出来的要招一个花时间 google 的?
    再说个事,我叔叔是我母校教授,有一年铁道部找他去,写了个算法把数据入库时间从 5 个小时提到了半小时,从来没有相似案例的你怎么知道他怎么帮你解决问题?你去哪里 google ?他转身就拿了 50w 的科研项目合同,是你的话准备咋搞?
    Goat121
        80
    Goat121  
       2023-02-24 19:02:50 +08:00
    @ThanksSirAlex 算了,我是看出来了,你根本就不是来讨论问题,是来发泄你情绪的。
    你坚持做自己就好吧,看你这样子也是没面上外企的。
    你就不反思一下,你那套知道怎么用就好的理论那么正确的话,为啥你没写出来人家要的算法?
    ThanksSirAlex
        81
    ThanksSirAlex  
    OP
       2023-02-24 19:07:17 +08:00
    @Goat121 没错,我不需要知道每个语言的 map 怎么实现唯一的,我只记结论,能就是能不能就是不能,还有什么还不知道,我都不知道你想表达什么。数据入库这个东西我也做过,我还是从 8 小时提高到半小时,网上真的没有相似的案例吗,还是说你没找到?
    Goat121
        82
    Goat121  
       2023-02-24 19:13:36 +08:00
    @ThanksSirAlex 你知道铁道部一批数据有多大吗?那是全国的客货运检修,以 T 计算的。你现在给我找一个试试
    几年前 php 流行的时候,有一大批 CRUD 写得飞快,但是不理解原理的人,现在在哪里?
    累了不想说了,最后我就问你一句,既然外企不问八股文你也去面过,你为啥没面上而是在这里发帖抱怨?
    祝福你坚持做自己
    ThanksSirAlex
        83
    ThanksSirAlex  
    OP
       2023-02-24 19:13:54 +08:00
    @Goat121 你怎么知道我是没面上而不是我考虑再三拒掉了?你怎么知道我是没写出来算法,虽然我没去面过宇宙条,但是我面试算法可是从来没挂过。我也觉得你不是来讨论问题的,你就是来钻牛角尖的,什么能支撑的证据都没有,非要我同意你的观点。
    killerv
        84
    killerv  
       2023-02-24 19:16:22 +08:00
    如果只是会用,都差不多,遇到问题的时候,解决问题就能看出来区别了
    lesismal
        85
    lesismal  
       2023-02-24 19:45:05 +08:00
    我没读过太多别人源码,更多时候我是自己写

    既然多数说的是 CURD 岗,OP 这个题目,换成“揪着算法”也适用

    我和一个好哥们以前面试别人,如果公司给对应的岗位的薪资上限是 N ,但是候选人期望薪资小于 N 、比如只有 0.8N ,那遇到基础好的,我俩通常都给 N ,并且会告诉候选人如果 HR 咬人、该怎么跟 SB HR battle
    所以希望 OP 不要记恨所有问得深一点的面试官,只要记恨那些故意恶心人甚至它自己都搞不懂问题的王八蛋面试官就好了
    ThanksSirAlex
        86
    ThanksSirAlex  
    OP
       2023-02-24 19:51:31 +08:00
    @lesismal 并没有记恨,只是真的不明白问的这么深到底要考些什么,如果工作内容就是涉及这么内核的东西,那就是我的知识能力不匹配,没话说,但是平时就是业务开发的话,说实话我觉得这些八股文真的有点莫名其妙。
    WuSiYu
        87
    WuSiYu  
       2023-02-24 21:30:12 +08:00
    很现实的一点就是作为筛选机制。同时对于一些偏低层的岗位还是很有用的,对于纯 crud 岗且性能要求宽松时可能就没啥用了
    darkengine
        88
    darkengine  
       2023-02-24 22:51:42 +08:00
    好多年前了,当时还有空读安卓源码,看了 WifiManager 里对状态机的运用,后来在自己项目的下载模块里用到了状态机,感觉还是很爽的。

    现如今,只会写写业务,再也没有时间去深入看底层的东西了。
    5h4nh
        89
    5h4nh  
       2023-02-24 23:30:29 +08:00
    - 底层实现“原理”,我没意见。既然是考察“原理”,话题就应该比较抽象,能了解面试者是否有 sense.
    - 底层的“具体实现”,我觉得不该。例如问你某个奇怪的配置选项是什么意思(过于具体,不知道查一下文档不知道了),或者问你某个中间件冷门的机制(俗称奇技淫巧,适用场景有限,优化一点点,但过度复杂,不知道查一下文档不知道了)等等。
    kkbblzq
        90
    kkbblzq  
       2023-02-24 23:43:05 +08:00
    说白了,只是招聘方不满足于人选只是能干活这个层面;不管是八股又或者是算法之类的都是一个手段罢了;你的很多结论套到算法上也是一样的;如果“写业务就好了”,其实招外包就完全够用,这些手段无非是挖掘一下候选人是否有其他的潜质,只是慢慢变味了罢了;至于你说的只记结论,我觉得现在所谓的"八股"本质上就是只记结论的产物,开始可能一些面试官真的只是想看候选人的技术深度,探讨一下设计思想实现,到后面被总结成了八股,之后的面试官直接拿着八股来问了。个人觉得抵制八股可以,但是没有必要觉得了解底层原理这个行为本身没有意义,很多东西看多了其实也是相通的。
    jim9606
        91
    jim9606  
       2023-02-25 00:40:58 +08:00
    一般来说吧,如果你不希望面试官问这个,你得把你的工作经历讲到吸引面试官的兴趣,之后就可以变成你带他深入项目底层了。但如果你没啥吸引他的亮点,他就只好找这些来发掘亮点了。
    documentzhangx66
        92
    documentzhangx66  
       2023-02-25 01:23:53 +08:00   ❤️ 3
    我有个做人力咨询公司的同学,bat 以及很多国际大厂都是他的客户。这个问题以前我问过他,他讲了很多原因,我只记得以下几点:

    1.人的记忆力是有限的,很多基础问题,就算面试者以前学的很透彻,但面试现场,要能完全回忆起来,甚至要写代码实现,是很困难的。各种中考、高考、奥赛,也都如此,而且面试官、出题人,他们也知道这个情况。

    说白了,问你这些东西,就是在为难人。


    2.为啥很多公司的面试官,敢为难人?因为,

    人力市场,它是一个市场,会受到供求关系的变化。

    中低端人才,在这个市场里,永远是供应远远远远远大于需求的,所以公司可以在同样能完成基础任务的面试者里,寻找对底层有见解的。说白了,就是选拔。上面提到的中考、高考、奥赛等,也都是选拔考试,所以会有很多难度很高的专门拿来为难人的题目,因为只有这样,才能让面试者与考试者,区分出差距。即使对方知道拿出这些问题,面试者或考试者肯定会不悦。

    相反,高端人才,由于太稀缺,在哪都是抢手货,这类人才都有专门猎头全链路跟踪。这类人才在某家公司有打算跳槽了,基本上一堆公司会抢,面试也只是走个流程,不会去问这些为难人的问题,因为他们害怕引起这些高端人才的不悦,导致高端人才选择别的公司。就算是高考,这类偏科严重的人,也会有大学愿意给他们开绿灯进行特招。


    3.所以,怎么去应对?那就是成为行业精英(内卷精英)。这也是为啥很多人有机会就跳槽到欧美,因为他们那边人少,人力市场的分母少,就算不是行业精英,待遇也会好很多。
    cassyfar
        93
    cassyfar  
       2023-02-25 05:28:03 +08:00
    非常少。只有一次我印象深刻,那人简历写着什么我们公司发的云计算认证架构师,又自我介绍说精通 Kafka 架构,于是和他深入交流了 Kafka 和我们的云托管产品的很多底层设计细节。。。然后就 gg 了
    satoru
        94
    satoru  
       2023-02-25 08:14:47 +08:00
    如果读源码对你来说是很罕见或很难的事,那确实也说明了一些问题 ……
    比起问某个你可能确实没研究过的系统的原理,也许考察你快速找到系统对应源码的技能更合适。

    只把工具当黑盒用,并不懂底层原理,这样的候选人面试官可能已经面了很多个,换个角度,有没有可能人家问你这样的问题不是在为难你而是想挖掘一些你跟别人不同的点好写在反馈里?
    sagasu0000719
        95
    sagasu0000719  
       2023-02-25 09:47:44 +08:00
    换一个角度看看:
    工程师和工人的区别。
    工人就是实施,为什么这么做?能不能更好?在现有架构下会不会冲突,以及冲突后如何处理,都是需要人支持或者等靠要。
    工程师就是自己能做,并且还能指导工人处理以上问题。
    两者的市场价格是完全不一样的。看自己的选择。
    haozi3156666
        96
    haozi3156666  
       2023-02-25 10:31:13 +08:00
    有的挑的话就选最好的啦
    misdake
        97
    misdake  
       2023-02-25 10:41:11 +08:00
    我这儿职位是写内部底层库的,并且对性能有很高要求,实际开发经常需要造非常贴近实际用法的轮子,这时候就需要清晰理解内部的需求和性能特征,造出最合理的轮子。这个过程需要开发人员对同类轮子的实现有深入了解,了解有哪些性能特征需要把控,有哪些优化点,优化的代价是什么 是否可以接受。
    所以在面试的时候,我会问一些底层的细节,问问各种略有差别的需求下分析问题给出不同的优化方法,至少要知道那些性能指标值得关注。如果这些关键点都不知道,一旦进来写东西肯定在设计上会出严重的问题。
    a852695
        98
    a852695  
       2023-02-25 10:48:28 +08:00
    是一种主动性和思考力的面试,真正原理细节有点小问题大部分面试官也不会纠结,毕竟他也知道,在国内只有业务才能挣钱。

    但是你如果有原理探究的思维,后面合作起来会更加顺利和默契,这种思考力可不是一两天能培养起来的。
    abelmakihara
        99
    abelmakihara  
       2023-02-25 14:05:19 +08:00 via iPhone
    我的话也三方库碰到问题会去研究下看看能不能改
    html2canvas 还有一个啥库来着改过
    框架层的没有 虽然 ionic angularjs 确实碰到到生命周期问题 那也不是我能 hold 住的
    ThanksSirAlex
        100
    ThanksSirAlex  
    OP
       2023-02-25 15:49:25 +08:00
    @misdake 这种我就认嘛,但是实际上这样的岗位在市场上占比非常少,绝大部分还是业务开发
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2722 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 12:21 · PVG 20:21 · LAX 04:21 · JFK 07:21
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.