共计 5141 个字符,预计需要花费 13 分钟才能阅读完成。
写这篇文章的目标是想总结一下本人这么多年来应用 java 的一些心得体会,次要是和一些 java 根底知识点相干的,所以也心愿能分享给刚刚入门的 Java 程序员和打算入 Java 开发这个行当的准老手们,心愿能够给大家一些教训,能让大家更好学习和应用 Java。
这次介绍的次要内容是和 J2SE 相干的局部,另外,会在当前再介绍些 J2EE 相干的、和 Java 中各个框架相干的内容。
通过这么多年的 Java 开发,以及联合平时面试 Java 开发者的一些教训,我感觉对于 J2SE 方面次要就是要把握以下的一些内容。
1. JVM相干 ( 包含了各个版本的个性)
对于刚刚接触 Java 的人来说,JVM 相干的常识不肯定须要了解很深,对此外面的概念有一些简略的理解即可。不过对于一个有着 3 年以上 Java 教训的资深开发者来说,不会 JVM 简直是不可承受的。
JVM 作为 java 运行的根底,很难置信对于 JVM 一点都不理解的人能够把 java 语言吃得很透。我在面试有超过 3 年 Java 教训的开发者的时候,JVM 简直就是一个必问的问题了。当然 JVM 不是惟一决定技术能力好坏的面试问题,然而能够佐证 java 开发能力的高下。
在 JVM 这个大类中,我认为须要把握的常识有:
JVM 内存模型和构造
GC 原理,性能调优
调优:Thread Dump,剖析内存构造
class 二进制字节码构造,class loader 体系,class 加载过程,实例创立过程
办法执行过程
Java 各个大版本更新提供的新个性(须要简略理解)
2. Java的运行(根底必备)
这条可能出看很简略,java 程序的运行谁不会呢?不过很多时候,咱们只是单纯通过 IDE 去执行 java 程序,底层 IDE 又是如何执行 java 程序呢?很多人并不理解。
这个知识点是最最根本的 java 开发者须要把握的,初学 java,第一个必定是教你如何在命令行中执行 java 程序,然而很多人一旦把 java 学完了,IDE 用上了,就把这个都忘了。为什么强调要晓得这个呢,晓得了 java 最纯正的启动形式之后,你能力在启动出问题的时候,去剖析过后启动的目录多少,执行命名如何,参数如何,是否有缺失等。这样有利于你真正开发中去解决那些奇奇怪怪的可能和环境相干的问题。
在这里须要把握的常识有:
javac 编译 java 文件为 class 文件
java 命令的应用,带 package 的 java 类如何在命令行中启动
java 程序波及到的各个门路(classpath,java。library。path,java 运行的主目录等)
3. 数据类型
这条没有什么好多说的,无非就是 Java 中的根本类型和对象类型的把握。能够再理解一些 JDK 如何主动转换方面的常识,包含装箱拆箱等,还要留神防止装箱之后的类型相等的判断
次要知识点:
根本类型:int,long,float,double,boolean,。。。
对应的对象类型:Integer 等类型到根本类型的转换,装箱和拆箱
Object 类型:equals,hashcode
String 类型的特点
4. 对象和实例,对象的创立
在这方面,开发者须要理解 class 和 instance 的概念以及之间的差异,这是 java 面向对象个性的一个根底。次要知识点有:
Class 和 Instance 的概念
Instance 创立的过程:
1。无继承:分配内存空间,初始化变量,调用构造函数
2。有继承:解决动态动作,分配内存空间,变量定义为初始值,从基类 -> 子类,解决定义处的初始化,执行构造方法
须要留神的点:
动态属性等从基类 -> 子类进行初始化
默认无参构造方法相干的个性
5. 访问控制
这也是 java 封装个性的一个根底,须要把握的有:
public protected default private 对于 class,method,field 的润饰作用
6. 流程管制
Java 流程管制的根底,尽管有些语法不肯定很罕用,然而都须要理解,并且在适合的中央应用它们。
须要把握的有:
if,switch,loop,for,while 等流程管制的语法
7. 面向对象编程的概念
这是一个 java 的外围概念,对于任何 java 开发者都须要熟练掌握。Java 中很多个性或者说知识点都是和 java 面向对象编程概念相干的。在我的了解,一个好的开发者不仅仅须要理解这些个性(知识点)自身,也更须要晓得这些对象在 java 的面向对象编程概念中是如何体现进去的,这样更有利于开发者把握 java 这门开发语言,以及其余面向对象编程的语言。在这里只是简略列举了一下,次要的知识点包含有:
面向对象三大个性:封装,继承,多态; 各自的定义概念,有哪些个性体现进去,各自的应用场景
动态多分派,动静单分派的概念
重载的概念和应用
继承:接口多实现,基类单继承
形象,抽象类,接口
多态:办法笼罩的概念和应用
接口回调
8. Static
动态属性在 java 日常开发中也是常常应用,须要理解和 static 关键字相干的用法,还有和其余关键字的配合应用,如是否能够和 abstract,final 等关键字联结应用。
次要须要把握的有:
动态属性的定义,应用,以及类加载时如何初始化
静态方法的定义和应用
动态类的定义和应用
动态代码块的定义和初始化机会
9. 根底知识点
这里次要列举一些散落的,没有零碎归类的一些 java 知识点。在日常的开发中用到也不少。这块内容其实还有很多,目前只是临时演绎了这几个在这里:
包含有:
equals,hashcode,string/stringbuffer,final,finally,finalize
10.汇合框架
这个是一个须要多加把握的局部,做 java 开发,能够说没有不必到汇合框架的,这很重要。然而这里的知识点并不难,然而对于汇合最好要理解外部的实现形式,因为这样有助于你在各个不同的场景抉择适宜的框架来解决问题,比方有 1W 个元素的汇合,常常要进行 contains 判断操作,晓得了汇合的个性或者外部实现,就很容易做出正确的抉择。
这里包含了如下内容(并发相干不蕴含在内):
汇合框架的体系:根底 Collection,Map
具体汇合实现的内容,List,Set,Map 具体的实现,内部结构,非凡的办法,实用场景等
汇合相干的工具类 Collections 等的用法
11.异样框架
异样在 java 的开发中可能没有那么被器重。个别遇到异样,间接上抛,或者轻易 catch 一下解决之后对于程序整体运行也没有什么大的影响。不过在企业级设计开发中,异样的设计与解决的好坏,往往就关系着这个源码交易系统整体的健壮性。一个好的零碎的异样对于开发者来说,解决应该对立,防止各处散落很多异样解决逻辑;对于零碎来说,异样应该是可控的,并且是易于运维的,某些异样呈现后,应该有应答的办法,晓得如何运维解决,所以尽管异样框架很简略,然而对于整个企业级利用开发来说,异样解决是很重要的,解决好异样就须要理解 Java 中的异样体系。
这部分须要把握的知识点不多,次要就是:
异样的体系:
Throwable
Exception
RuntimeException
Error
RuntimeException 和 个别 Exception 的区别,具体解决办法等
12.Java IO
IO 在 java 中不仅仅是文件读写那么简略,也包含了 socket 网络的读写等等所有的输入输出操作。比如说 规范 HTTP 申请中 Post 的内容的读取也是一个输入的过程,等等…
对于 IO,Java 不仅提供了根本 Input、Output 相干的 api,也提供了一些简化操作的 Reader、Writer 等 api,在某些开发(波及大量 IO 操作的我的项目)中也很重要,个别日常的开发中也会波及(日志,临时文件的读写等)。
在这中的知识点次要有:
根本 IO 的体系:包含有 InputStream,OutputStream,Reader/Writer,文件读取,各种流读取等
NIO 的概念,具体应用形式和应用场景
13.多线程并发
多线程是 Java 中普遍认为比拟难的一块。多线程用好了能够无效进步 cpu 使用率,晋升整体零碎效率,特地是在有大量 IO 操作阻塞的状况下;然而它也是一柄双刃剑,如果用不好,零碎非但晋升不大,或者没有晋升,而且还会带来多线程之间的调试时等问题。
在多线程中内容有很多,只是简略阐明一下 Java 中初步应用多线程须要把握的知识点,当前有机会独自再具体介绍一些高级个性的应用场景。
多线程的实现和启动
callable 与 runable 区别
syncrhoized,reentrantLock 各自特点和比对
线程池
future 异步形式获取执行后果
concurrent 包
lock
..
14.网络
Java 中也是提供了能够间接操作 TCP 协定、UDP 协定的 API。在须要强调网络性能的状况下,能够间接应用 TCP/UDP 进行通信。在查看 Tomcat 等的源码中,就能够看到这些相干 API 的应用状况。不过个别也比拟少会间接应用 TCP,会应用诸如 MINA、Netty 这样的框架来进行解决,因为这个方面的开发波及不多,所以就不再具体列举了。
15.工夫日期解决
简直对于每个利用来说,工夫日期的解决也是绕不过来的,然而 JDK8 之前的工夫相干 API 用法并不敌对。在那个时代,能够抉择 Joda 等工夫框架。到了 JDK8 公布之后,全新的工夫 API 根本交融了其余框架的长处,曾经能够很好的间接应用了。
对于 Java 开发者来说,须要熟练地应用 API 来对工夫和日期做相干的解决。
具体知识点不再列举,会在当前再写个专门的文章来总结一下 JDK8 中工夫日期 API 的用法。
16.XML解析 / JSON 解析
其实这两块内容都不是 J2SE 外面的内容,然而在日常开发中,和其余程序交互,和配置文件交互,越来越离不开这两种格局的解析。
不过对于一个开发者来说,可能理解一些 XML/JSON 具体解析的原理和办法,有助于你在各个具体的场景中更好的抉择适合你的形式来使得你的程序更有效率和更加强壮。
XML:须要理解 DOM 解析和 SAX 解析的基本原理和各自的实用场景
JSON:须要理解一些罕用 JSON 框架的用法,如 Jackson,FastJson,Gson 等。。
17.Maven的应用
Maven 也不是 Java 外面的内容,然而 maven 是革命性的,给 java 开发带来了微小的便当。从依赖的引入和治理,开发流程的更新和公布产出,乃至版本的更新,应用 maven 能够大大简化开发过程中的复杂度,从而节俭大量工夫。能够说,maven 曾经成为 java 开发者的标配了。所以我把 maven 也作为一个 java 开发者对于根底必备的知识点。当前会再放上一些我的一些对于 maven 应用的教训和技巧等,这里就不再细说了。
18.泛型
这是 JDK5 开始引入的新概念,其实是个语法糖,在编写 java 代码时会有些许便当,个别的利用或者是业务的开发,只须要简略应用,不肯定会用到定义泛型这样的操作,然而开发一些根底公共组件会应用到,能够在须要的时候再细看这个局部,个别状况下只有会简略应用即可。
19.标注
也是 jdk5 之后引入的。Spring 是个优良的框架,最开始就以 xml 作为规范的配置文件。不过到了 Spring3 之后,尤其是 spring-boot 衰亡之后,越来越推崇应用标注来简化 xml 配置文件了,对于开发者来说,能够节俭不少 xml 配置的工夫。然而劣势是在于标注散落在各个类中,不像 xml,能够对所有配置有个全局性的了解和治理,所以还没有方法说齐全就取代所有的 xml。对于个别开发者,会应用标注即可,一些公共组建的开发者可能会须要理解标注的定义和实现,能够在具体须要的时候再细看。
20.RMI
RemoteMethodInvocation,Java 语言特有的近程调用接口,应用还是比较简单不便。不过须要跨语言的状况下,就须要应用 webservice 等其余形式来反对。一般来说,程序都不须要应用 RMI,不过能够在特定的状况下应用,我就在一个我的项目中,应用 RMI 来进行程序近程启动进行的管制。
21.JNI
Java Native Interface,能够容许 Java 中调用本地接口办法,个别用于 C /C++ 代码的调用。须要留神的是在 java 中加载 so/dll 文件的门路问题,自身调用接口并不简单,然而常常在是否加载了所需的本地接口库中破费较多工夫。
以上也只是简略介绍了下我对于这些 java 根本知识点和技术点的一些认识和介绍,这些内容都源自于我这些年来应用 java 的一些总结,心愿给刚刚接触 Java,或者打算从 Java 开发的人一些教训,心愿可能更有效率地学习和应用 java,防止走了弯路节约了贵重的工夫。这当中还有些内容不够欠缺的中央,会通过当前的文章再增加上。因为集体能力无限,当然其中也会有些谬误和疏漏,欢送斧正,一起探讨,独特来把这篇文章再欠缺下,心愿它能够真正帮忙到有须要的人。