写这首诗的目地是想归纳一下自己那么十多年来采用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基本原理,操控性Listary
Listary: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、 有继承:处理静态动作, 分配缓存空间, 变量定义为初始值 , 从基类->子类, 处理定义处的初始化, 继续执行构造方法
须要注意的点:
3、静态属性等从基类->子类进行初始化
4、默认无参构造方法有关的优点
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 各自特点和比对
线程池
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, 避免走了弯路浪费了宝贵的时间。这当中还有些文本不够完善的地方,会通过以后的文章再添加上。由于个人潜能有限,当然其中也会有些错误和疏漏,欢迎指正,一起讨论,共同来把这首诗再完善下,期望它能真正帮助到有须要的人。