• 为什么我不推荐Java初学者去学netty
  • 发布于 1个月前
  • 70 热度
    0 评论
  • 远行de风
  • 0 粉丝 27 篇博客
  •   
当下学java,应当以入行为主,入行的话一般是去学spring boot框架,而不要先去学底层的内容,包括netty。

这句话衍生一下,第一,在初学阶段过多关注底层,由于能力不够,大概率无法学好,第二,工作经验在3年以内的java开发,如果在面试中去展示Netty等底层,大概率会被认为只具备理论技能,从而无法拿到更多的实惠。

和Netty有些类比的是Socket编程,即手写一个底层网络通讯,而Netty是在此基础上,第一加了序列化反序列化,第二多了线程模型,即能用多线程的方式传输消息,当然在发包收包上也做了改进,但当下一个事实是,用Java更多地是做业务。

姑且不说业务,但当下大多数Java系统,是用spring boot开发增删改查,其中确实涉及到网络通讯,比如前端发个请求,该请求经过层层处理,最终落实到后端服务器,后端完成后,再通过网络底层返回给前端,但是,很多细节程序员不必关心。

好吧,当下或许有人,会引经据典,给出Netty底层原理,包括线程模型,零拷贝或者是半包粘包,不过也请大家想象下面试场景,比如面试时说了这一大堆,然后对面试官说,我项目里没用过,当然这比不说要好,但面试时,对方更看重真实开发经验,所以一般是先问spring boot技能,再问就解决过的实际问题,再问高并发。

而且,对于初级开发来说,高并发不是必选项,否则的话,一些在校生或者工作经验在3年以内的,就别找工作了。

是否要学一个技术,不是看这个技术网上资料有多少,也不是看有多少人推荐这个技术,也是看这个技术是否偏重底层,而是得看,学了以后能否立即从中获益。

对于目标是找工作的java程序员来说,netty没必要。第一无法通过项目证明自己用过,第二这个阶段的面试更偏重看真实项目经验,第三在这个阶段也只能学个皮毛,甚至都无法达到工作要求。

那么什么时候该学Netty?当你在工作中,已经熟悉了各种业务开发,而且也开始解决中间件层面的问题,或者是调优、集群和项目部署等问题时,此时就有学习netty(还有其它中间件)的技术基础。

同时,如果当开始解决并发和性能等问题时,就会知道,深入学netty的基础是,第一项目里有机会用,第二自己熟悉了netty的api,然后再此基础上,是通过慢慢排查netty等方面的问题,或者是有真正用netty通讯的业务需求,在这种情况下,再通过各种试错或者调试,这样才能学好。

至于怎么学,先用api实现业务,然后遇到性能或api等问题后,自己解决了一些,到了这种程度再去看底层源码,或者干脆通过debug调试netty底层里class包里的代码。这可能说得有些玄,但如果单纯看netty理论,或者跑通netty的简单实例,或者不在真实项目里用,这学不好。

再扩展一下,在初始阶段学java时,哪些技能该学哪些不该学?不能凭主观臆断,更不能凭个人喜好或技术难易度,就去看,大多数公司面试时,是否会问到这块。如果会问到,那么困难再大也得想办法学,如果不会问到,哪怕该技术再简单,或者推荐的人再多,也别去学。

用户评论