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

为什么同薪,同样都是外包,有的就面试问的那么深?

  •  
  •   miaeLKK · 24 天前 · 2142 次点击
    连 jvm 新生代老年代我都讲了,还问啥来着我也忘了,总之就是问的很深,没过,可能我学到的还是有些浅显。然后同样的另一个外包,只问问项目经验就过了,还比那边薪资高点

    我们有必要了解这么深吗?这么多东西感觉根本学不了那么深啊,难道有人天天研究源码吗?不干活吗?封装出这些框架不就是为了降低大家工作量,专业的提高代码质量吗

    所以就老有种感觉,感觉不学这么深就要被淘汰了。到底是哪错了?
    24 条回复    2024-05-23 09:39:39 +08:00
    XuHuan1025
        1
    XuHuan1025  
       24 天前
    深的长,浅的短
    FranzKafka95
        2
    FranzKafka95  
       24 天前 via Android
    因为 Java 的人太多了
    maigebaoer
        3
    maigebaoer  
       24 天前 via Android
    一个是供需,一个是面试官个人喜好
    miaeLKK
        4
    miaeLKK  
    OP
       24 天前
    @XuHuan1025 啥意思?
    miaeLKK
        5
    miaeLKK  
    OP
       24 天前
    @maigebaoer 我就是好奇。。。这么点钱问这么深,真的招的到人吗?还是因为我每次都只是好运赶上了问的不深的?这个环境了还有问的不深的,那我觉得这种“好运”也许并不是偶然
    XuHuan1025
        6
    XuHuan1025  
       24 天前   ❤️ 1
    @miaeLKK 参考谈恋爱和一夜情,持续开发和改改 bug 上线要求肯定不同吧
    Ericcccccccc
        7
    Ericcccccccc  
       24 天前
    其实是看运气

    这个和面试官关系非常大
    coderlxm
        8
    coderlxm  
       24 天前
    这个是看运气,外包的人鱼龙混杂,主要分为干活类型的,理论类型,混子类型的几种人,看你运气碰到哪种面你。
    BeijingBaby
        9
    BeijingBaby  
       24 天前
    问的深是为了砍价。

    找几个你答不上来的问题,然后你自己都开始质疑自己了。

    后面别人砍价的时候不是理所当然。

    都是套路。
    sagaxu
        10
    sagaxu  
       24 天前
    论面试的目的

    筛选出符合岗位要求的人 ❌

    给求职者打出有区分度的评分 ✅
    sagaxu
        11
    sagaxu  
       24 天前
    问新生代老生代不算深入吧,标准八股还得问问为什么分代,为什么 zgc 最早不分代,为什么后来 zgc 又给分代了。GC 怎么触发,触发后是立即可以执行,还是需要所有线程到达某个状态? safepoint 是什么,又是怎么产生的?执行 JNI 的线程有无特别? JNI 中分配的内存怎么回收,GC 是否参与?堆外内存怎么管理?什么是内存可见性和内存屏障?有没有读过 jsr133 ?为什么 Double checked locking 在 Java 1.5 之前有问题?如何安全高效的发布一个对象?
    miaeLKK
        12
    miaeLKK  
    OP
       24 天前   ❤️ 1
    @sagaxu 可我找的只是个外包,一直也就处理点需求,各种中间件搭起来能跑就行了,我也没找年薪几十万的那种,我也需要知道这么多吗?/捂脸 你这些是背的八股文?还是平时真的遇到过?真诚发问
    uiosun
        13
    uiosun  
       24 天前
    和面试官关系非常大,外包本质上是工作关系的差异,不是工作内容的差异——我这话是为了阐述本质,不是说国情,国情是能去自研绝不去外包。

    所以回到正题,面试官如果更期望你有较好的工程能力,就会问一些深入的问题——当然也遇到过那种只问八股的,问完了其实对真正做事,帮助不大。
    sagaxu
        14
    sagaxu  
       24 天前
    @miaeLKK 实现细节用不到,但是不理解内存模型写不了并发代码。GC 实际用到的也就看懂 gclog ,微调几个参数而已。不需要压榨性能的项目,大概很少用得到八股里的东西。纯粹用来做区分用,跟考算法题差不多。
    flamingooo
        15
    flamingooo  
       24 天前
    可能是从简历来看, 没什么技术含量, 想探下技术深度, 我 6 年+, 面某大厂还被问过页表类型跟置换算法, 没答上来也没啥..
    yeqizhang
        16
    yeqizhang  
       24 天前
    我之前面外包,三四个人一起面...问分布式系统...
    yeqizhang
        17
    yeqizhang  
       24 天前
    @yeqizhang 面试官三四个
    Cbdy
        18
    Cbdy  
       24 天前   ❤️ 1
    在本世纪的前十年,你只要知道 AJAX ,你就可以进百度;在如今,你需要懂 https://roadmap.sh/frontend 上面所有的东西,再加上当场能写 LeetCode Medium 难度的题才行

    供需问题,老哥
    fuckaholic
        19
    fuckaholic  
       23 天前
    以为个人技术面的经历上看,有两种可能的心里逻辑:

    一个觉得你不错,拿深一点和交叉一点的东西来试探下你,如果你能顺利答出来,其实会大大加分

    另一种,就觉得你可能自我感觉良好了,拿一些东西敲打下,如果你答不出来,正好是一个 pass 的理由
    morgan1freeman
        20
    morgan1freeman  
       23 天前   ❤️ 2
    供需问题,跟技术无关,

    大部分 Java 程序员 可能一辈子都不会接触 JNI 跟 堆外代码,何况能被 JNI 的库 99%都是社区大佬写的,剩下可能 1%的情况是公司万年前某个老库的 C/C++的包。

    社区大佬写的库 基本上不存在泄露的问题,即使泄露了 也是开源社区去处理,轮不到你写应用的来处理,公司也不会为你这个技能买单,因为它只花了 15k 招了个外包,写库的那个人在美国拿着 30k 的美刀,只是顺带下班 凭着业余爱好 帮你修复了 某个开源 JNI 库的里面 C 代码的某个野指针

    另外 GC 这个东西,大方向就是一个有向图可达性分析算法,就是一个图论算法,只要你智商不够低,就能明白大方向上就是 GC 的目标就是 尽可能快速分析完这个图,看下哪些点是不可达的,
    但是程序里面引用关系又是随时变化的,那么就是在 GC 吞吐率 跟实时性上 做 trade-off ,没有听说过 既能提高吞吐率又有更高实时性的东西,另外大部分互联网程序 对实时性要求并不高,你都用 java 了 还追求啥实时性,所以就是牺牲 实时性来做 GC 吞吐

    分代的原因是因为 能活过几轮的 GC 的 对象都是人精,就像你的 static final Object obj 里面 obj 引用的对象,一般活过几轮之后,它就不太可能在整个生命周期中被清除出去
    @sagaxu #11
    imokkkk
        21
    imokkkk  
       23 天前
    几年前确定没必要问 现在可选的人太多了 再问基础的达不到筛选的效果
    morgan1freeman
        22
    morgan1freeman  
       23 天前
    @morgan1freeman 所以分代的好处,就是可以把这个 有向图 进行 切割,有些图的 节点就不用去算了,或者直接把老年代当做 GCRoots 也就是图的根节点 去分析,看看有没有可以清理的对象,这样可以减少图分析的时间复杂度,另外还有一些优化的地方,就是逃逸分析,变量没有多线程共享,可以只停顿这一个线程,对这个变量进行 图分析,看是否可以回收
    morgan1freeman
        23
    morgan1freeman  
       23 天前
    @morgan1freeman #20 另外怕你听不懂什么叫做实时性,举个简单的例子就是,你的代码 执行一段时间,然后会停顿下来(物理时间意义上的停顿,在你的程序本身看来 它是连续执行的),然后让 JVM 的代码接管,这个时候 它会去处理内存是否回收利用的问题

    至于上楼所说的 safepoint 你可以参考这个
    https://github.com/fqdeng/jvm-suspend-working-thread-mechanism
    这是我写的例子,主要 JVM 是用了 mprotect 内存回调函数,当机器读内存取指令的时候 会触发一次回调,逻辑流会被 JVM 接管,JVM 接管后 处理完,才是你的 java 代码 开始执行

    至于 safepoint 怎么实现,字节码的时候,就直接下 埋点,字节码跑到那里 就把逻辑流切到 JVM 看看是否要做清理动作,如果编译成了 二进制汇编码,就是上述的 mprotect 函数 进行埋点,等你的程序执行到位了,mprotect 就会接管你的 java 代码逻辑流,切换到 JVM 代码

    早些年虚拟机代码 可能有些问题,有的地方 没下埋点,结果这 java 线程 跑到系统调用,没有在系统调用前 塞 safepoint 或者其它运算 一直 for 个不停,但是每次 for 里面{} 又没有塞 safepoint 的 这个时候,java 线程停不下来,JVM 没法进行图分析,现在基本上不用操心这个问题了,

    前几年 golang 也出现过这个问题,貌似后面官方也迅速解决了,

    总而言之,基础是图论算法,后续都是根据工程实践 延伸的知识
    morgan1freeman
        24
    morgan1freeman  
       23 天前   ❤️ 2
    @miaeLKK #12 另外说一句,懂这么多也没用,照旧也是 CRUD ,这是市场决定的,不是个人能力决定的,欧美的程序员 大多在公司也是 CRUD ,业余做一做自己开源项目为社区发电,我们是因为被压榨太狠,没时间搞而已,论技术能力跟工程实践,国内是不差的,开源做不起来 是社会资源分配问题,不是一个技术问题
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1031 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 19:25 · PVG 03:25 · LAX 12:25 · JFK 15:25
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.