• Java程序员编写代码的技巧


    这样说吧,系统学Java底层,是大多数Java初学者都会缴的智商税。为什么这样说呢?

    1 初级开发做的是增删改查,没必要了解底层,了解了对开发帮助也不大。

    2 中级开发要求的是熟悉业务,能排查大多数问题,这时也无需系统学习底层技能。

    3 架构师确实要熟悉各种分布式组件或Java组件的底层,但程序员先得升级到架构,才有必要去掌握底层技能。

    4 底层技能唯一的用处是面试,java程序员可以通过准备和说明底层技能在面试中充分展示技能,但这无需系统学习,在面试前顶多用两三周时间死记硬背即可。

    先说下,什么是Java的底层?在写代码时总要通过import语句引入所用的包,底层就包含在这些引入的jar包里。

    1 针对Java核心库,比如HashMap,ArrayList或ConcurrentHashMap,或者是多线程锁相关的,底层源码是包含在JDK1.11的库里,比如是上述类的实现细节代码。

    2 针对Spring Boot或Spring MVC,比如日常说的,Bean加载生命周期,Spring boot启动或装载模式,能从底层么里看到。

    3 针对分布式组件,比如dubbo或netty或Spring Cloud alibaba里的诸多组件,底层是指在对应jar包里的代码或配置等实现细节。

    再说下底层源码究竟对程序员有什么帮助?

    1 比如是针对只需做业务的初级或高级开发,哪怕了解了100个1000个底层类的代码后,其实对开发帮助并不大。

    比如看了快速失效的底层源码,顶多就知道别一边用迭代器遍历集合对象一边修改,看了spring boot启动类的底层源码后,该怎么实现业务还怎么实现。在这个阶段由于无法实际地从底层源码层面得到有效的帮助,而且底层源码大多很复杂,所以基本看了就忘。

    2 而架构师确实要接触到底层源码。比如从如下的大牛文章里,大家能看到通过阅读分析底层源码而解决实际问题的一般步骤。


    但是在这过程中,是有针对性地,通过查看和debug jar包里的源码来解决实际问题。这其实和大多数认为的,全方位铺开看源码是不同的。比如就是照着教科书把linux底层源码都看一遍,不针对问题去看,依然没用。

    从中大家其实已经能看到,学习java底层技能或底层源码,不能说一点用处也没,但帮助还真不大。再进一步讲,对程序员有帮助的,还真是一些经验,还真不是源码和底层。

    1 比如知道把线程池的等待队列设成无界的,可能会导致OOM问题。

    2 比如知道ArrayList是线程不安全的,在一些极个别需要线程安全的场景,可以用锁。

    3 比如知道可以通过dubbo的优雅停机接口来避免问题,比如知道可以通过kafka的重发机制能避免消息收不到的问题i。

    虽然在看了底层源码后,能进一步理解上述结论,但不看底层,在实际项目里实践多了,解决的问题多了,效果其实还真是一样的。

    至于架构师级别通过看底层解决问题,只不过是排查问题的能力和分布式组件方面的能力提到到一定的程度水到渠成而已,并不是说程序员通过看源码能升级到架构师,因果不能倒置。

    但是java底层知识如果合理地用在面试场景,一定能提升成功的可能。

    1 初级开发能结合ArrayList+快速失效的底层源码,一定能证明自己熟悉Java核心技能。

  • 相关阅读:
    sql注入(5), sqlmap工具
    Karpor - 让 AI 全面赋能 Kubernetes!
    elastic-search学习笔记
    Linux shell编程学习笔记9:字符串运算 和 if语句
    R²决定系数
    动态网格理论基础(一)
    深度学习中语义分割、实例分割、目标检测和图像分类区别
    <学习笔记>从零开始自学Python-之-web应用框架Django( 九)自定义标签和过滤器
    【谢希尔 计算机网络】第1章 计算机网络概述
    EPOLL单线程版本 基于reactor 的 httpserver文件下载 支持多个客户端同时处理
  • 原文地址:https://blog.csdn.net/Lalalajtyy/article/details/125503043