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

作为一只 Java 老鸟,依旧感觉很迷茫。

  •  2
     
  •   ob · 2018-04-14 01:40:36 +08:00 · 8151 次点击
    这是一个创建于 2423 天前的主题,其中的信息可能已经有所发展或是发生改变。
    今天看到 /t/446353 这位小兄弟的帖子,颇为感慨。
    他 96 年的,就已经有这种意识,经过各位大佬的指点,相信他后面的方向会更加正确。
    而我,已经 30 出头,每天的工作,依旧还是敲各种业务代码,渐渐的成为了大家口中那种熟练的弱鸡。

    这么多年,换过好几份工作,每家公司用的技术栈都略有差异,从 Servlet,Struts1,Struts2,Spring,Hibernate,iBatis,Jersey,JBPM,DWR,ExtJS,Redis,Freemarker,Velocity,ActiveMQ 等等,到现在的 SpringMVC,SpringBoot,Mybatis,Shiro,Memcache,Dubbo,Zookeeper,Hadoop,Hive,Spark,Flume,Hbase 等等(没有列全)。
    各种前后端的框架一直在发展更新变化,虽然这些框架在工作中,用的都很溜,遇到问题,也都能找到办法解决。
    以前说几大框架,看看源码,弄懂底层的原理,这都能理解。
    但是经过这么多年的经验,用到某个框架,需要解决什么问题,通过官网,网上找资料,基本上都能搞定,更加注重的是使用,以及要达到的结果。如果要像各位大佬说的,要把这些东西的原理,细节研究的很透,基本上是做不到。
    而且主要的问题是,像前面部分的技术,换份工作,就已经废弃,就算你之前踩过的坑,积累了很多经验(对各种出现过的问题记笔记),对新工作的帮助可以说忽略不计。所以这种没用的工作经验,不但不能成为加分项,因为工龄的增长,更可能会变成减分项。

    所以针对工作中出现的那些框架,我现在的更关注的是会用,熟练的用,知道怎么用,变的不会去深研究为什么这样用,这样用的原理是啥(大部分原理也都知道)
    当然,针对 java 的其他技术,比如并发,多线程,JVM,设计模式,这类知识,那肯定是研究的越深越好。

    但是,像我这种情况,在简历上面,都会写上工作中用到的哪些技术和框架,然后面试官看你写这框架,就会针对这框架问的很深入,很细,正常情况下,框架用不上的配置,我就不会去研究。
    例 1:比如我们用 dubbo,只是拿来做简单的服务框架,但是面试会问到:
    怎么用 dubbo 限流?
    dubbo 底层的序列化,怎么实现自己的序列化?
    服务是怎么提供的,原理是啥?
    真要去看 Dubbo 架构设计详解
    图: http://shiyanjuncn.b0.upaiyun.com/wp-content/uploads/2013/09/dubbo-architecture.png
    感觉是一脸懞逼。

    例 2:再比如 Zookeeper,服务器上面的安装部署,都是相关人员处理,如果不是自己负责,正常就没有去了解它底层的原理,以及选举领导人的机制等等。但是,面试时,这类问题也会被问到,然后要是没看过别人的文章,基本上也是答不上来。

    例 3:面试会问,Struts1 和 Struts2 有什么区别,优点和缺点?
    例 4:Struts2 和 SpringMVC 有什么区别,优点和缺点?
    例 5:SpringMVC 和 SpringBoot 有什么区别,优点和缺点?
    说实话,上面这些例子,我以前都被问过,对于我这种一开始只管使用的人来说,根本就不懂这些区别,只知道哪个更好用,开发效率更高,都是怎么用的。只有面试过后,我才会去网上找资料看下,哦原来 Struts2 是类级别的拦截,SpringMVC 是方法级别的拦截,SpringMVC 的入口是 servlet,而 Struts2 是 filter 等等。而这些也仅仅是从别人的文章里面得到的结论,根本就不是我自己去看源码研究出的结果,这样对有我意义吗?想知道,这类的面试问题,是不是真能反映出面试者的水平?
    各位大佬针对这类面试问题,是自己研究源码得出的结论,还是看网上别人的文章呢?

    本人在工作中,各种疑难杂症,复杂的问题都能解决,自认为学习能力挺强,解决问题的能力和思路也都有。但是面试时,往往因为问各种框架类的理论( Java 工种,其他工种不知道是不是一样?),搞的很尴尬,以前找工作面试时,要是不做理论准备,基本上都要被问倒。就像大家说的,面试面的是造航母。

    所以我的这种状况,工作中使用的这类技能,让我感觉很迷茫,对各种框架的掌握根本不能为自己提供相应有效的积累。
    最后,请教各位大佬,像我这种 Java 老鸟还有得救吗?应该往什么方向(技术类)前进呢?
    [顺便说下,现公司开发人员 150+(前后端,UE,美工等都算在内),负责框架架构的就五六个,大部分人都是参与各个系统的业务开发。]

    看了那位小兄弟的帖子,由感而发,码了挺久的字,排版不是很好,如果各位看到这,道声辛苦了。
    希望各位大佬能帮忙指点指点,各种批评也都能虚心接受。
    主要是想能更好的了解下自己,从不同旁观者的角度审视我身上存在的这些问题。
    谢谢大家。
    37 条回复    2021-02-04 10:29:31 +08:00
    esolve
        1
    esolve  
       2018-04-14 01:53:56 +08:00   ❤️ 2
    不说这些框架
    问 mysql java redis 通用的吧

    1 redis 为何单进程单线程也比较快?
    2 mysql 中使用 in 和 exist 性能如何比较?
    3 java 中,并发中构造方法的 this 逃逸是怎么回事?如何解决?
    4 mysql 幻读是怎么回事? RR 事务为何能解决幻读?
    dan2001go
        2
    dan2001go  
       2018-04-14 07:33:54 +08:00 via Android   ❤️ 7
    其实很多都是背书的…
    你没有什么错…
    年轻人记忆力永远比你好…
    原理永远看不完…
    面试靠得是两个人眼神对得住…
    你真要深入就随便买几本书背背…
    开发中大部分用不上很容易忘…
    所以要多背背…
    30 出头了,要面临很多的事情吧…
    不能像年轻人那样了吧…
    程序发展一直在变…
    年轻人的包袱永远比你少一点…
    所以你还是要多背背…
    最牛逼的就是把 Jdk 的源代码理解一遍…
    当然这是不可能的…
    咋办呢…
    其实程序分成业务流和技术流…
    想想自己的优势在哪里…
    30 多了一定要扬长避短…
    否则你拿什么去竞争别人…
    还有就是选择…
    选择比技术更重要…
    如果公司稳的话就潜心发展自己对公司业务的掌握力度,就别想着走了。
    原理其实是互联网行业的一种丛林法则。你现在是一头家养的小鹿…你现在想让自己和野生的小鹿去对比…
    另外就是积累一下人脉,看看有没有什么突破口…
    有的时候,朋友的一句话一个介绍,可以让你省去一大堆原理…
    假设 30 多岁的你现在原理都精通了,那个 96 年的也都精通,面试的时候你们发挥都一样,公司会选哪个呢?
    其实也没有很标准的答案,照我说就是现在的公司站稳脚,不是公司不行的话别想着出去竞争。自己网上多看看文章拓展一下知识面。朋友多认识几个。原理的话…可以积累一下基本功这种万变不离其宗的东西,比如算法。另外也可以拓展一下自己程序以外的技能点。你要用程序去硬碰硬的话…难度还是挺大的,要有心理预期,毕竟你起跑线和别人不一样了,你也不是纯的技术流派吧,如果是的话,也不会来问这个问题了。
    6XP6VGRYAruv2n7v
        3
    6XP6VGRYAruv2n7v  
       2018-04-14 08:36:48 +08:00 via Android
    所以作为菜鸟到底是深度重要还是广度重要呢_(:з」∠)_
    jethroWush
        4
    jethroWush  
       2018-04-14 09:51:07 +08:00   ❤️ 1
    找准自己现阶段的定位很关键
    dan2001go
        5
    dan2001go  
       2018-04-14 10:07:24 +08:00 via Android   ❤️ 1
    @DarkMario 技术流和业务流就像是『笑傲江湖』里面的华山派的剑宗和气宗一样。道理都是一个道理,也没有谁比谁更屌的。方向发展不一样,但是目的都是一样的。

    气宗最后大获全胜,但是剑宗也有风清扬这种高手。

    主要看你最擅长什么。如果你这个人很闷,不擅长和人打交道,兴趣也不太广泛,对代码也很喜欢,那技术流最合适,因为你沉得下心来。反之你想法很多,脑子很活,见人说人话见鬼说鬼话的那种,善于交际,对代码没有说爱到死去活来的,也不妨试试主业务。

    70%的工作,技术流和业务流都能胜任。差距就在那 30%,而为了这 30%你要花的时间是成倍的。所以你得搞清楚你自己喜欢的和想做的和擅长的,和自己的实际能力相匹配,然后放手一搏。而不是今天想这个,明天被几个人说了几句又去想那个。

    当然了,说到武功,『葵花宝典』最厉害,就是要付出那么一点点代价。只要舍得付出,那就天下无敌了。

    不过这仍然有个悖论,就是江湖上的人都去练『葵花宝典』了,那会是个什么格局呢?
    micean
        6
    micean  
       2018-04-14 10:44:36 +08:00
    序列化其实很容易理解,你实现一遍 java.io.Externalizable 就明白了
    虽然像 spring 这种源码我也是懒得啃的,但是了解下实现下那些“卖点”也花不了多少时间
    如果技术上做不到思考,那就只能往业务上靠了
    maddot
        7
    maddot  
       2018-04-14 11:03:27 +08:00   ❤️ 1
    年轻的时候意气用事
    现在回头看看
    对于一般人,如果老板不错,公司发展不错
    还是安心待在一家公司慢慢往管理层上走是最理想的选择
    HuHui
        8
    HuHui  
       2018-04-14 11:57:41 +08:00 via Android
    @dan2001go 真的可以开个专栏之类的写写 XX 二三事 了
    sagaxu
        9
    sagaxu  
       2018-04-14 12:46:40 +08:00   ❤️ 4
    简历里不要写这么多框架和库,也不要写超过 3 种编程语言,那样给人第一印象就是博而不精。面试官也会忍不住验证“杂而不精”这个人设。

    如果你简历里提到了 springcloud 或者 dubbo,被问到服务治理是大概率事件,就算不知道 dubbo 怎么限流,也该知道有哪些思路可以实现限流。

    简历里不要写 Struts*,没人用了,就算目标公司在用,也不会因为你没用过而减分。如果我看到面试的人写 Struts*,我也会问一问,因为我没用过 Struts*,也完全不了解,只是处于好奇问问。答出来不加分,答不出来扣分。

    除了算法和 OS 以及 DB 这些所有后端团队都会用到基础知识,Java 开发者额外的基础也就是 JVM 和 JDK 了,加上一些 Java 的并发知识点就齐全了。

    无论怎么换工作,以上这些基础知识是不会废弃的,懂的越多,招聘方就越觉得你深入和熟悉底层。

    Java 往上就是框架和库了,框架只需要一个 spring,库只需要一个 netty,把这两个搞透,胜过列举 100 个会用的。往集群扩展去,再加一个 springcloud 就行了,其它都忽略。

    有一个原则,没看过源码的框架和库,不要写在简历里。有多个同类的,专攻最流行最常见的那个。
    bucky
        10
    bucky  
       2018-04-14 13:28:37 +08:00
    爱说底层的大多数都是吹牛,底层这么热门的知识,大家想学习一下,结果连一两篇好的文章都找不到,难道不奇怪吗?要不就让你去看源码,看某某书,这种话不懂编程的去豆瓣找找书都能给你推荐。现在最火的技术博客还是阮一峰的,所以有时候你仔细想想,就发现装逼的太多。
    Devilker
        11
    Devilker  
       2018-04-14 14:02:56 +08:00   ❤️ 1
    赞同 2#的想法
    身边都是 30-40 的码农,高管。10 个换公司有 7,8 个都是,朋友的一句话一个介绍,可以让你省去一大堆原理。
    (那 XXX 厂的 XXX,你们那时候做的 XXX 项目吧?有几次吃饭听 XXX 说来着。我后来和 XXX 共过事儿,在 XXX 项目。)

    顺便说一句:问原理的面试官,有一部分是在项目要招人的时候,临时去网上找了一道原理题,之前他也不知道。
    carlclone
        12
    carlclone  
       2018-04-14 14:18:58 +08:00
    应用和举一反三的区别吧...
    microget
        13
    microget  
       2018-04-14 14:55:53 +08:00   ❤️ 1
    情况和楼主大致相仿,个人感觉还是多相处几个朋友比较重要,毕竟一个城市的互联网圈子也就那么大。
    今后不论跳槽还是创业,都非常有帮助(因为人际关系是需要时间积累的,这也是作为“老人”,比年轻人的优势)。
    别的怎么说,各人的实际情况差别大,还是根据自身情况环境做判断。
    ob
        14
    ob  
    OP
       2018-04-14 16:14:26 +08:00
    @esolve 感谢回答,redis 不算通用顺,1 不去看别人文章,还真答不出来,234 基本上能答出来。
    ob
        15
    ob  
    OP
       2018-04-14 16:32:49 +08:00
    @dan2001go 说的很实在,基本上都戳到点了。
    记忆力确实比不上年轻的时候了。
    开发中不用真的就会忘,比如以前 hibernate 用的 HQL,onetoone,manytoone 现在让我再用,我全都得再查一遍文档。
    "选择比技术更重要",这句话是深有体会,以前旧同事,安安心心在一家公司待着,年限到了,分点股权,解禁后股票变现比你出去外面混的这几年还多。
    现在我的情况算是,比年轻些的,活能干的更好,效率也会更高。但是这些跟我的工龄不成正比,就像是,他们一年能进步个 100%,我只能进步 30%这样。
    谢谢点评,其他的我会再认真思考几遍。
    ob
        16
    ob  
    OP
       2018-04-14 16:33:44 +08:00
    @DarkMario 这个,我有话语权:深度深度深度!!!
    ob
        17
    ob  
    OP
       2018-04-14 16:50:54 +08:00
    @sagaxu 谢谢,简历的内容,每次只会更新近期的履历,所有旧的工作都没去调整,这块后面适合更新下。
    其他提的知识点,会继续学习。
    3a3Mp112
        18
    3a3Mp112  
       2018-04-14 16:56:35 +08:00
    其实你的技能栈有这一块 “ Hadoop,Hive,Spark,Flume,Hbase ” 完全可以找专门的大数据工作了
    ob
        19
    ob  
    OP
       2018-04-14 16:56:47 +08:00
    @Devilker 哈哈,以前面试别人的时候,也是去网上找题来面,然后去面试,也是网上找题来回答。
    ob
        20
    ob  
    OP
       2018-04-14 17:03:56 +08:00
    @3a3Mp112 这些也都是属于框架类,跟 spring 那些一样,大部分都仅限于会用。问原理,也是会懞,比如 Flume,基本上就简单的配置就能用了,但是面试会问你,为啥性能这么好? source,channel,sink 的细节,从真实的我来说,如果不是为了面试,我不会主动去学的那么深入,这就是我思维存在的问题吧,有时候知道的知识点,是因为面试而掌握的。
    zig
        21
    zig  
       2018-04-14 17:23:03 +08:00
    night98
        22
    night98  
       2018-04-14 19:32:25 +08:00 via Android
    同 java,感觉要学的东西太多了,如果每个东西都看源码和底层,十年也未必能学完一半的感觉。
    WinterWu
        23
    WinterWu  
       2018-04-14 20:52:08 +08:00   ❤️ 1
    @ob 给楼主贴一个自己最近学习 JVM 的文章 https://www.jianshu.com/p/21ed43d177f3
    写的不太好,又有点太长,不过还是尽力将自己的心得体会放进去了,重点不是单独的技术点,那样永远追的很累,重要的是能构建自己的技术体系、思维体系。
    IT 技术某种程度是悲哀的,不像其它技术领域,越老越值钱,如果不断学习成长的能力,不如尽快切换方向。
    WinterWu
        24
    WinterWu  
       2018-04-14 21:03:31 +08:00
    另外,有些面试官的确是自己不懂,乱来,我问框架,只会问面试者最熟悉的,不熟悉不问,问也只问的确会经常用的和最核心的原理。经常用的框架的核心原理还是应该明白,否则开发过程中如果遇到有深度的很容易抓瞎,或者导致乱抄代码。
    fumichael
        25
    fumichael  
       2018-04-14 22:54:24 +08:00
    楼主问的问题也是我的问题。
    enenaaa
        26
    enenaaa  
       2018-04-15 00:35:15 +08:00
    窃以为,楼主的问题也是大部分大龄程序员的问题
    cpp255
        27
    cpp255  
       2018-04-15 01:24:32 +08:00
    楼主举的例子也遇到过,面试都是要求造航母的要求,特别是大厂。Java 要学的东西很多,共勉了。
    身边的例子:1.团队里面有大牛的,遇到问题可以问,方向之类的问题可以参考大牛或者能得到大牛的指点,当然自己的努力是分不开的; 2.遇到了好的团队,跟着公司业务壮大,技术、平台、薪酬也跟着增长。
    总结起来就是选对了好的方向。同意楼上的说法,年纪大了,人脉真的很重要,有时候认识的人推荐,前面的乱七八糟的面试就可以避免
    ob
        28
    ob  
    OP
       2018-04-15 10:14:14 +08:00 via Android
    @WinterWu 一年的时间就把 java 学到这个境界,真心佩服。
    你这种学习方式很高效,很值得借鉴。谢谢
    worldnode
        29
    worldnode  
       2018-04-15 10:50:08 +08:00
    前 java 同事已经回家交钢琴了
    ob
        30
    ob  
    OP
       2018-04-15 11:26:59 +08:00 via Android
    @worldnode 哈哈,这跨行可以
    zk123
        31
    zk123  
       2018-04-15 18:38:35 +08:00 via Android
    选择比技术更重要,如果你在一个位置不可替代怎么会有这样的疑问呢?
    ob
        32
    ob  
    OP
       2018-04-15 19:24:41 +08:00 via Android
    @zk123 不能说绝对吧,对大多数人来说大部分确实是。因为一家公司没有几个是不可替代的,除非就几个人的小公司。
    pengqiuyuan
        33
    pengqiuyuan  
       2018-04-16 09:42:53 +08:00
    楼主问的问题也是我的问题。
    v3exhost
        34
    v3exhost  
       2018-04-16 17:34:39 +08:00
    就喜欢这种接地气的帖子
    Rico
        35
    Rico  
       2018-05-11 21:04:04 +08:00
    最近面试被秒成渣,和楼主感受相同。 抛开算法数据结构不论,框架的,工具性的,配置型的,广度的东西 ,可能业务场景没用到确实也答不出来。
    OpenSun
        36
    OpenSun  
       2018-08-23 18:30:40 +08:00
    @DarkMario 深度永远比广度重要
    PoetAndPoem
        37
    PoetAndPoem  
       2021-02-04 10:29:31 +08:00 via Android
    学习
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1029 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 23:10 · PVG 07:10 · LAX 15:10 · JFK 18:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.