经过这么多年的Java开发,结合??一些面试Java开发者的经验,我觉得J2SE主要还是要掌握以下内容。1.JVM相关对于刚接触Java的人来说,JVM相关的知识并不一定需要深入了解,简单了解其中的概念就可以了。但是,对于一个有3年以上Java经验的资深开发者来说,不懂JVM几乎是不能接受的。JVM是java运行的基础。很难相信对JVM一窍不通的人能把java语言看得透彻。当我面试有3年以上Java经验的开发人员时,JVM几乎是必问的问题。当然,JVM并不是唯一决定技术能力好坏的面试题,但它可以证明Java开发能力的高低。在JVM这个大类里面,我觉得需要掌握的知识有:JVM内存模型和结构GC原理,性能调优和调优:ThreadDump,内存结构类二进制字节码结构分析,类加载器系统,类加载过程,实例创建过程方法执行过程Java每次大版本更新提供的新特性(需要简单了解)2.Java的运行看似很简单,谁不会运行java程序?但是很多时候,我们只是简单的通过IDE来执行java程序,IDE底层是如何执行java程序的呢?很多人不明白。这个知识点是java开发者需要掌握的最基础的。第一个肯定是教你如何在命令行上执行java程序,但是很多人学了java,用了IDE,就忘得一干二净了。向上。为什么强调知道这个?知道了java最纯粹的启动方式之后,就可以分析一下当时启动了多少个目录,名字是怎么执行的,参数是什么,启动出现问题时是不是少了什么。这将帮助您解决实际开发中那些奇怪的和环境相关的问题。这里需要掌握的知识是:javac将java文件编译成class文件,java命令的使用,对于一个带有包(classpath,java.library)的java类如何在命令行启动java程序.path,java运行Main目录等)3.数据类型没什么好说的,无非就是掌握Java的基本类型和对象类型。大家可以多了解一下JDK是如何自动转换的,包括装箱和拆箱等,同时也要注意避免装箱后类型相等的判断。主要知识点:基本类型:int、long、float、double、boolean。..对应的对象类型:Integer等类型到基本类型的转换、装箱和拆箱对象类型:equals、hashcodeString类型的特点4、对象和实例这方面,开发者需要了解类和实例的概念以及它们之间的关系区别,这是java面向对象特性的一个基础。主要知识点有:Class和Instance的概念实例创建过程:无继承:分配内存空间,初始化变量,调用构造函数继承:处理静态动作,分配内存空间,定义变量为初始值,从基类->子类,在定义处处理初始化,执行构造方法时需要注意的点:静态属性等从基类初始化->子类默认无参数构造方法相关特性5.访问控制这也是一个基础对于java的封装特性,需要掌握的是:publicprotecteddefaultprivateforclass,method,fieldmodification。6、进程控制Java进程控制的基础,虽然有些语法不一定常用,但都需要理解,并在适当的地方使用。需要掌握:if、switch、loop、for、while等流控语法。7、面向对象编程的概念这是java的一个核心概念,任何一个java开发者都需要掌握。Java中的很多特性或知识点都与Java面向对象编程的概念有关。在我的理解中,一个好的开发者不仅仅需要自己去了解这些特性(知识点)。也更有必要知道这些对象在java的面向对象编程理念中是如何体现的,这样更有利于开发者掌握java和其他面向对象编程语言的开发语言。这里只是简单罗列一下,主要知识点包括:面向对象的三大特性:封装、继承、多态;它们各自的定义概念,体现了哪些特点,以及各自的使用场景staticmulti-dispatch和dynamicsingle-dispatch重载的概念和继承的使用:接口的多重实现,基类的单一继承,抽象,抽象类,和接口多态:方法覆盖的概念和接口回调的使用8.static静态属性在java的日常开发中也经常用到。了解static关键字相关的用法,以及与其他关键字的使用,比如是否可以与abstract、final等关键字结合使用。需要掌握的主要有:静态属性的定义和使用,加载类时如何初始化静态方法的定义,使用静态类的定义,使用静态代码块的定义,以及调用的时机初始化9.基础知识点这里是一些零散的,没有系统分类的一些java知识点。日常开发中也用的比较多。这块内容其实很多,这里只是暂时总结这些:包括:equalshashcodetring/stringbufferfinalfinallyfinallyfinalize10。集合框架是需要掌握的部分。可以说不需要java开发。对于集合框架来说,这是非常重要的。这里整理的Java合集面试题及答案你一定很清楚。但是这里的知识点并不难,但是最好了解集合的内部实现,因为这会帮助你选择合适的框架来解决不同场景下的问题。比如一个有1W个元素的集合,往往需要进行contains判断操作,知道集合的特点或者内部实现,就很容易做出正确的选择。这里包括以下内容(并发相关的不包括):集合框架体系:基础集合,Map的具体集合实现内容,List、Set、Map的具体实现,内部结构,特殊方法,适用场景等11.ExceptionFrameworkException在java开发中可能没有被重视,详细解释了异常处理的最佳实践。一般遇到异常,直接抛出,或者捕获处理即可,对程序整体运行影响不大。但在企业级设计开发中,异常设计和处理的好坏往往关系到系统整体的健壮性。对于开发者来说,一个好的系统的异常应该是统一处理的,避免大量的异常处理逻辑散落各处;对于系统来说,异常应该是可控的,并且易于运维。一些异常发生后,应该有处理的方法,知道如何运维。因此,虽然异常框架很简单,但是异常处理对于整个企业级应用开发来说是非常重要的。要想处理好异常,需要了解Java中的异常系统。这部分要掌握的知识点不多,主要是:异常系统:ThrowableExceptionRuntimeExceptionErrorRuntimeException和一般Exception的区别,具体的处理方法等。12.JavaIOIO不仅仅是java中文件读写那么简单,而且包括socket网络读写等所有输入输出操作。比如在一个标准的HTTP请求中读取Post的内容也是一个输出的过程等等……对于IO,Java不仅提供了基本的Input和Output相关的API,还提供了一些Reader、Writer等API来简化操作。在某些开发(涉及大量IO操作的项目)中也很重要,在一般的日常开发(日志、临时文件的读写等)中也会涉及到。这里的知识点主要包括:基础IO系统包括InputStream、OutputStream、Reader/Writer、文件读取、各种流读取等,NIO的概念,具体使用方法和使用场景。13.多线程多线程通常被认为是Java的难点。用好多线程可以有效提高CPU利用率,提高系统整体效率,尤其是在大量IO操作阻塞的情况下;这里整理的Java多线程面试题及答案大家一定很清楚吧。但它也是一把双刃剑。如果使用不好,系统不仅提升不大或提升不大,还会带来多线程间调试等问题。多线程里面有很多内容。我只是简单的说明一下在Java中初步使用多线程需要掌握的知识点。后面有机会会详细介绍一些高级特性的使用场景。多线程的实现和启动区别callable和runablesyncrhoized、reentrantLock特性以及比较线程池未来异步方式获取执行结果并发包lock14。NetworkJava还提供了可以直接操作TCP和UDP协议的API。在需要强调网络性能的情况下,可以直接使用TCP/UDP进行通信。在查看Tomcat等的源码中,可以看到这些相关API的用法。但是一般很少直接使用TCP,使用MINA、Netty等框架进行处理。因为这方面的开发不多,就不一一列举了。15、时间日期处理几乎所有的应用程序都绕不开时间日期处理,但是JDK8之前的时间相关API的使用并不友好。在那个时代,可以使用诸如Joda之类的时间框架。JDK8发布后,新的时间API基本上结合了其他框架的优点,可以直接使用。对于Java开发者来说,熟练使用API??来处理时间和日期是很有必要的。具体的知识点就不一一列举了,以后会专门写一篇文章总结JDK8中时间日期API的使用方法。更多java核心技术关注微信订阅号回复666获取16.XML解析/JSON解析其实这两块内容并不在J2SE中,而是在日常开发中,与其他程序和配置文件交互,越来越离不开对这两种格式的分析。但是,对于一个开发者来说,能够理解XML/JSON解析的一些具体原理和方法,将有助于你更好地在各个具体场景中选择合适的方法,让你的程序更加高效和健壮。XML:需要了解DOM解析和SAX解析的基本原理以及各自的适用场景。JSON:需要了解一些常见的JSON框架的用法,如Jackson、FastJson、Gson等。17.Maven使用Maven不是Java的一部分,但maven是革命性的,给java开发带来了极大的便利。您必须熟悉这30个Maven命令。从依赖项的引入和管理,到开发过程和发布输出的更新,甚至是版本的更新,使用maven可以大大简化开发过程的复杂度,从而节省大量的时间。可以说maven已经成为了java开发者的标配。所以我也把maven作为一个java开发者必备的知识点。18.Generics这是JDK5引入的新概念,其实是一种语法糖。写java代码的时候会方便一点。一般应用或业务开发只需简单使用即可,可以不使用定义泛型等操作。但是,它将用于开发一些基本的公共组件。需要的时候可以仔细看这部分。一般来说,你只需要简单地使用它。19、jdk5之后也引入了注解,元注解一定要懂。Spring是一个优秀的框架,从一开始就以xml作为标准配置文件。但是在Spring3之后,尤其是spring-boot兴起之后,越来越推荐使用注解来简化xml配置文件。对于开发者来说,可以节省大量的xml配置时间。但缺点是注解分散在各个类中,不像xml可以对所有配置有一个全局的理解和管理,所以没有办法完全替代所有的xml。对于一般的开发者来说,使用注解就足够了。一些公共组件的开发者可能需要了解注解的定义和实现,需要时可以仔细阅读。20、RMIRemoteMethodInvocation,Java语言特有的远程调用接口,使用起来比较简单方便。单击此处了解有关RMI和RPC之间区别的更多信息。但是,在跨语言的情况下,就需要使用webservice等其他方式来支持了。一般来说,程序不需要使用RMI,但在特定情况下可以使用。在一个项目中,我使用RMI来控制程序的远程启动和停止。21、JNIJavaNativeInterface,允许Java调用原生接口方法,一般用于C/C++代码调用。需要注意的是,java中加载so/dll文件路径的问题,调用接口本身并不复杂,但往往需要花很多时间来判断是否加载了需要的本地接口库。以上只是我对java的这些基础知识点和技术点的一些看法和介绍。这些内容都是来源于我这些年使用java的一些总结。还有一些地方内容不够完善,会通过以后的文章补充。
