作为一只 Java 老鸟,依旧感觉很迷茫。 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ob
V2EX    职场话题

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

  •  2
     
  •   ob 2018-04-14 01:40:36 +08:00 8530 次点击
    这是一个创建于 2755 天前的主题,其中的信息可能已经有所发展或是发生改变。
    今天看到 /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
    应用和举一反三的区别吧...
    ixo
        13
    ixo  
       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     Solana     5951 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 31ms UTC 02:29 PVG 10:29 LAX 19:29 JFK 22:29
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86