写这篇文章的目标是想总结一下本人这么多年来应用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, 防止走了弯路节约了贵重的工夫。这当中还有些内容不够欠缺的中央,会通过当前的文章再增加上。因为集体能力无限,当然其中也会有些谬误和疏漏,欢送斧正,一起探讨,独特来把这篇文章再欠缺下,心愿它能够真正帮忙到有须要的人。
发表回复