• 优秀的 Java 程序员所应该知道的 Java 知识


    我不是资深的 Java 软件工程师,但也混迹这行有6年时间了,所以就这个话题说说我的想法。希望对新人们能有所帮助,也希望牛人们能给与意见。

    我做的是最常见的服务器端的开发,所以什么嵌入式、Android 方面的知识就不说了。

    JDK 相关知识

    JDK 的使用

    这是每个 Java 程序员都应当掌握的能力,至少像 Java 集合类这样的最常见的 API 都是应该掌握的。但与此同时,我想大部分程序员掌握的都不精细。如果你去问一些关于常用的类的细节问题,很可能会出现这样那样的错误。比如如果某某参数是 null 的时候会出现什么情况,某某类是否是线程安全的,等等。

    要想做好这一点也不难,仔细阅读 JDK 的文档、多思考。

    JDK 源代码

    JDK 的源代码有必要读吗?我的个人观点是很有必要,理由主要有下

    1. 阅读 JDK 的源代码可以让你对其的相关知识有更深入和扎实的理解和认识。俗话说,知其然更要知其所以然。如果只靠生记硬背,而不理解原理,那这样的知识是很容易遗忘的。
    2. 阅读 JDK 的源代码可以学习很多编程技巧和编码规范。比如,复杂逻辑代码的编写、代码的命名技巧、位操作的应用等等
    3. 阅读 JDK 的源代码可以帮助你复习算法和数据结构的知识。

    说说读源代码的方法。一行一行地读代码,这样精神固然值得称赞,但方法未必可取。因为像 JDK 这样的软件,其实现细节是非常多的,其中一些细节对于理解去原理来说并不是必须的。所以,通过一些现成的文章帮助阅读源代码,这样可以节省很多时间,事半功倍。这样是为什么推荐想阅读源代码的朋友从 JDK 开始的原因,因为讲解 JDK 源代码的文章是最丰富的。

    JDK 相应技术背后的原理

    对于 JDK 中某些类,光看源代码是很难理解其全部原理的。例如,像Java 5 并发库背后的 CAS、Java 7 AIO 中操作系统对异步 IO 操作的支持、Java 反射背后的字节码生成技术。当你要去理解其最主要的部分时就会发现,这些部分是使用 C 语言编写的原生代码(当然,理论上你也可以去读这些原生部分的源代码,前提是你有这个需要和时间)。这时你最好通过找相应的文章和书籍来了解这方面的知识为好。

    但不管你使用什么样的方法,这些原理还是需要了解的。当你了解到这些原理的时候,使用这些类时会感觉豁然开朗。

    JVM 相关知识

    学习 JDK 的使用和原理固然重要,但这还远远不够。作为开发 Java 服务器端应用的程序员,你还必须了解 JVM 的运行原理和调优。这其中包括 JVM 内存模型和垃圾回收的相关知识、JVM 调优的知识等等。

    服务器端开发需要重点熟悉的 Java 技术

    Java 并发

    1. Java 并发所涉及到的 Java 内存模型的相关知识
    2. synchronized、wait、notify 等应该如何正确使用、以及背后的原因
    3. Java 5 并发库中相关类的功能、用法、使用技巧、背后的原理

    Java IO

    (我在 IO 方面经验欠缺,欢迎查漏补缺)

    1. Java BIO、NIO 和 AIO 的概念、原理和使用方法
    2. Reactor、Proactor 模式

    开源框架

    使用 Java 的一个好处就是 Java 有着丰富的开源框架。其中有一些,不论你是否需要在项目中使用,你都需要对其基本使用方法和原理有了解,例如:

    1. Struts(已经很老的 MVC 框架,但是你至少需要知道基本知识。当然 MVC 本身也显得过时了)
    2. Spring (IoC、AOP 这两个概念必须了解。进一步最好了解 Spring、Guice 和 CDI 其 IoC 的表现方式各是什么,优缺点各是什么。AOP 的实现方法等)
    3. Hibernate 和 iBatis (优缺点)
    4. JUnit 和 Mockito 等单元测试和 Mock 框架
    5. Maven、Ant 等构建工具

    Java 之外的知识

    除了 Java 以为,其它的一些,诸如代码重构、设计模式、UML 等也是出色的 Java 程序员所必备的技能。当然还有一些软实力,例如任务安排和时间管理、交流能力等等,不在本文范围,所以就不多说了。

  • 相关阅读:
    费马定理
    JAVA大数模板
    扩展KMP模板
    KMP算法模板
    2018暑假遗留题目
    线段树模板(含区间最大(小)值)
    [USACO18OPEN]Out of Sorts G
    几道背包题
    两个有关素数的算法
    German Collegiate Programming Contest 2015 F. Divisions
  • 原文地址:https://www.cnblogs.com/daichangya/p/12958874.html
Copyright © 2020-2023  润新知