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

背 JVM 的相关知识感觉很不实用,应该工作中很少用到吧?别的语言有没有类似的没用的八股?

  •  
  •   movq · 2023-02-11 19:50:47 +08:00 · 3013 次点击
    这是一个创建于 430 天前的主题,其中的信息可能已经有所发展或是发生改变。

    JVM 的这些内容跟应用程序员来说有关系吗?似乎也轮不上普通程序员去写 JVM 的代码吧

    至于 JVM 调优,这是部分专家负责的事情吧

    不了解别的语言,C++技术栈有没有类似的华而不实的八股呢?

    21 条回复    2023-02-15 11:14:36 +08:00
    echo1937
        1
    echo1937  
       2023-02-11 19:55:21 +08:00 via iPhone
    说个语言无关的,有些公司会问 mysql 数据引擎,索引,索引的 b+树,页分裂啥的。

    感觉和楼主说的属于同一类内容,就是问机制,问实现。
    liveoppo
        2
    liveoppo  
       2023-02-11 20:49:12 +08:00
    之前看过一点,一般似乎用不到。我觉得粗略了解一下即可。
    letitbesqzr
        3
    letitbesqzr  
       2023-02-11 21:09:58 +08:00   ❤️ 1
    GC 部分还是很重要。其余的简单了解下即可。
    chenshun00
        4
    chenshun00  
       2023-02-11 22:55:18 +08:00
    不是不实用,是基本上用不到,OOM 一般情况下 jstat ,jmap+mat 分析可以搞定。
    如果真的是因为什么 YGC 导致了线上问题,说明公司业务很大,每个公司都有几个牛逼的人的,直接遥人即可。

    不可能每个人都做到面面俱到的。 能解决常见问题即可。
    ixiaohei
        5
    ixiaohei  
       2023-02-11 23:02:02 +08:00   ❤️ 5
    1. 纯八股文,在某些场景下可能投入产出比巨大,比如面试的时候;另外业务开发的时候投入产出比很小。但是有些基础知识是相通的,如果能理解和融会贯通还是有比较有价值的。
    2. 工作 10 年,纯 java 工作 6 年。以前很喜欢钻 jvm 底层八股文,后面发现某些知识在工作中需要用的场景真的少,投入产出比很小,等到用到的时候也经常忘记细节需要回去补课,浪费大量时间;还不如拿这些时间去学习新的工具和语言,用这些工具和语言去解决他们专注和擅长的场景。
    3. 对于 JVM 可能 gc 调优、内存泄露在碰到某些瓶颈问题下很有用。但是也可以通过其他不是很优雅的方式去解决。要综合对比,考虑投入产出比,不要因为自己对这些东西很擅长就只考虑这一种方案。不过在必须通过 jvm 原生方案解决的情况下比较有价值。
    4. 不过理解这些东西在当下浮躁的面试风气真的很有用。很多面试官想了解一个候选人的深度的时候喜欢考察这些东西。另外就是面试官想通过这些东西来表现自己很高深(装逼)。
    5. 以前碰到一个面试官想考察我 synchronized 底层锁升级策略,以前了解这方面的知识知道点细节。但是当我反问他了解这些东西有什么价值的时候,他回答不上来。
    6. 后续反思学习这些东西对于我来说真的没多大价值:首先自己不是从事 jvm 开发,没必要投入时间了解这个东西,另外跟司内专门从事 jvm 研发的同事沟通过,他们也不会把精力投到这上面,一是因为这些东西很基础比较成熟了,被国外大牛已经优化到很高的程度了,他们没有那种能够打破这种方案再搞出更厉害的优化的能力;而且这些投入价值产出比很小,不足以支持他们的薪水所要产出的价值,所以他们( jvm 开发者)都不关注这些细节东西。另外了解这个东西对于某些到达单机同步场景瓶颈下,可能因为知道某些细节能有找出新奇的调优思路,但是我们可能更多的是从架构设计上使用分布式思路来解决这种瓶颈问题,没必要去追求极限的调优。
    taogen
        6
    taogen  
       2023-02-11 23:06:36 +08:00
    你就当面试是一个考试。类似高考,996 疯狂刷题,考上了之后就可以放肆地玩耍了。
    ixiaohei
        7
    ixiaohei  
       2023-02-11 23:07:17 +08:00   ❤️ 3
    另外再补充一点心得:我后面又从事了 golang 、c++、js 等多语言开发(golang 偏多),但是对这些语言的理解深度都不够,能开发就行。但是发现 golang 岗位的面试就不会有太多八股文,甚至 golang 聊都不聊。这也是我后面比较喜欢投递 golang 的职位原因。
    movq
        8
    movq  
    OP
       2023-02-11 23:45:32 +08:00
    @taogen 要是跳槽又要背一遍
    Akitora
        9
    Akitora  
       2023-02-11 23:53:49 +08:00
    这两天狂背 JVM 八股,HotSpot 的算法细节实现这章真是看几遍都脑壳疼…
    Promtheus
        10
    Promtheus  
       2023-02-12 10:58:44 +08:00
    感觉这种八股的确用处不大,还不如多学习学习算法或者计算机基础夯实。但是没有办法。大环境就是要问。
    TransAM
        11
    TransAM  
       2023-02-12 11:27:17 +08:00
    有啊,CPython 解释器原理啥的
    wu67
        12
    wu67  
       2023-02-12 12:16:55 +08:00
    前端 vue / react 的响应式核心原理...纯纯八股文, 涉及算法和吹牛逼两大哲学问题.
    但工作中嘛, 哪个奇葩会去 hack 框架的核心逻辑, 有那功夫不如自己写了, 还引入什么框架...
    hhjswf
        13
    hhjswf  
       2023-02-12 13:49:49 +08:00 via Android
    @ixiaohei 那 golang 招人问什么
    cyoking
        14
    cyoking  
       2023-02-13 09:39:12 +08:00
    @ixiaohei 大佬牛逼,让我醍醐灌顶,但是 juc 还是得好好学对吧
    ixiaohei
        15
    ixiaohei  
       2023-02-13 11:24:01 +08:00
    @cyoking juc 属于 jdk 的东西,是 java 并发编程核心东西,对比其他编程语言在并发这快是排的号的东西,可以深入学习一下。jvm 一般指 java 虚拟机,大部分是 c++实现的; jdk 中很多 native 方法都是 c++实现的,需要去 jvm 源码看对应的实现。
    ixiaohei
        16
    ixiaohei  
       2023-02-13 11:31:40 +08:00
    @hhjswf 几乎不咋问 golang 的基础知识; golang 语法比较简单,没啥问头。另外就是 golang sdk 一些底层,一般开发不会去关注,面试考察这个也没啥好的效果。
    1. golang 虽然发展很多年,但是其生态某些方面来说还是很初期阶段。相比 java 来说很多的东西没有做大大一统的趋势。相比 java 的 web 开发,微服务开发,spring 和 spring cloud 都有绝对优势地位。
    2. golang 开发人员使用框架很分散。具体考察框架细节,可能碰到候选人未了解和使用过过该框架的尴尬场面。
    ixiaohei
        17
    ixiaohei  
       2023-02-13 11:31:52 +08:00
    接上:
    ixiaohei
        18
    ixiaohei  
       2023-02-13 11:33:41 +08:00
    3. 所以我碰到的很多高级岗位面试都是问一些操作系统、网络、数据库比较深的基础知识。另外就是系统设计面试可能碰到的比较多。
    1998wsc
        19
    1998wsc  
       2023-02-13 14:45:15 +08:00
    @ixiaohei 前辈,你好,我是一个快毕业的应届生。想问下,进入职场后,为了升职加薪 or 跳槽之类,应该更关注于哪些方面的提升呢?学校时代,无论是老师还是学院,都给定了一些目标。但是,马上要工作了,后续对于自身提升没有什么思路。
    ixiaohei
        20
    ixiaohei  
       2023-02-15 10:43:59 +08:00
    @1998wsc 入行之后先熟悉职业技能,我这里假设你是技术开发类,非管理、PM 类;前期需要了解的新东西非常多
    ixiaohei
        21
    ixiaohei  
       2023-02-15 11:14:36 +08:00
    @1998wsc
    1. 前期先把工作处理好,优先了解和熟悉当前工作中必备和使用的技能和工具。你慢慢会发现这行需要很多工具和技能,这个时候建议先广度学习,了解越多越好,但不必很深。等两三年之后自己大概对这行有了初步的了解之后,再开始找一个自己觉得有前景的和感兴趣的技术栈深入学习。
    2. 前期几乎都是在打基础。这个时候找准自己开发语言技术栈全景和路线图。然后按步骤来学习,需要花费的时间比较久
    3. 对于开发来说,操作系统、计算机网络、数据库、数据结构和算法和一门自己从事的开发语言这些东西算基础,都比较重要,可以伴随你从事这个行业的一生。
    4. 后面对行业续熟悉后,再深入一个自己感兴趣和觉得有前景的方向;五六年左右之后看自己的对职业的规划,是喜欢往技术发展还是往管理发展。因为国内浮躁的风气,很多人这个时候觉得技术发展没啥钱途,都跑去转管理了,对于技术发展可能要去大厂了。
    5. 对于有前景的技术方向要看时间和行业发展;简单举几个例子。从我 13 年入行来有几个爆发的技术:1. 移动互联网兴起时前端和后台开发,后续就是大数据和云计算,“物联网”(算这时期的东西,但是总感觉前景没发挥出来)。现在的就是 AI 应用:有广告推荐、数据分析、人脸识别和当前流行的自动驾驶和近期的 ChatGPT ;
    6. 另外也可以选一些基础技术栈的深入,这些东西是支持业务发展的所必需的,但是涉及到知识一般没有应用开发那样容易被新技术革新,有的知识甚至几十年没变。比如深入网络底层、存储、数据库、操作系统(云计算)等开发
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   966 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 20:30 · PVG 04:30 · LAX 13:30 · JFK 16:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.