写这篇文章的目的是总结一下我这些年使用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原理、性能调优
调优:转储、分析内存结构
class二进制字节码结构、类系统、类加载过程、实例创建过程
方法执行流程
Java主要版本更新提供的新特性(需要简单了解)
2.Java操作
这看起来可能很简单。 谁不知道如何运行java程序?
但很多时候,我们只是通过IDE来执行java程序。 底层IDE是如何执行java程序的? 很多人不明白。
这个知识点是Java开发者需要掌握的最基本的东西。 第一个肯定是教你如何在命令行上执行Java程序。 然而,很多人在学习完 Java 并使用 IDE 后就忘记了这一点。 。
为什么强调需要了解这一点? 了解了Java最纯粹的启动方式后,当出现启动问题时,就可以分析当时启动的目录数量、执行命名、参数、是否有遗漏等。
这将帮助你解决实际开发过程中那些可能与环境有关的奇怪问题。
这里你需要掌握的知识是:
javac 将java文件编译成class文件
如何使用java命令以及如何在命令行启动java类
java程序涉及到的各种路径(java..path、java运行的主目录等)
3. 数据类型
这个没什么好说的,无非就是掌握Java中的基本类型和对象类型。
可以详细了解JDK是如何自动转换的,包括装箱和拆箱等,注意避免装箱后的类型相等判断。
主要知识点:
基本类型:int、long、float、、。 。 。
对应对象类型:其他类型到基本类型的转换、装箱和拆箱
类型:,
类型特点
4. 对象和实例
对此,开发人员需要了解类和类的概念以及它们之间的区别,这是Java面向对象特性的基础。
主要知识点有:
类的概念和
创建过程:
无继承:分配内存空间、初始化变量、调用构造函数
有继承:处理静态动作,分配内存空间,定义变量作为初始值,从基类->子类,在定义处处理初始化,执行构造函数方法
注意事项:
静态属性等从基类->子类初始化
与默认无参构造函数相关的功能
5. 访问控制
这也是Java封装特性的基础。 需要掌握的是: 对于类、字段的修改。
6. 过程控制
Java流控制的基础。 虽然有些语法不一定常用,但你需要理解它们并在适当的地方使用它们。
需要掌握的有:if、、loop、for、while等流程控制语法。
7. 面向对象编程的概念
这是任何Java开发人员都需要掌握的Java核心概念。
Java中的很多特性或者知识点都与Java面向对象编程概念相关。
在我的理解中,一个好的开发者不仅仅需要自己了解这些特性(知识点)。
也更有必要了解这些对象在Java的面向对象编程理念中是如何体现的,这将更有利于开发人员掌握Java以及其他面向对象编程语言的开发语言。
这里只是一个简短的列表。 主要知识点包括:
面向对象的三大特点:封装、继承、多态;
它们各自的定义概念,体现了哪些特点,以及各自的使用场景
静态多调度和动态单调度的概念
重载的概念和使用
继承:接口的多个实现,基类的单一继承
抽象、抽象类、接口
多态性:方法重写的概念和使用
接口回调
8.
静态属性在日常Java开发中也经常使用。 你需要了解关键字相关的用法,以及它们与其他关键字的使用,比如是否可以与final、final等关键字结合使用。
您需要掌握的主要内容是:
类加载时静态属性的定义、使用和初始化
静态方法的定义和使用
静态类的定义和使用
静态代码块的定义和初始化时序
基础知识点
这里主要列出一些比较零散、没有系统分类的Java知识点。
在日常开发中也大量使用。 实际上这个主题还有很多内容,但我现在只是在这里总结一下:
包括:
特林/
最终的
采集框架
这是一个需要更多掌握的部分。 在做Java开发的时候,可以说没有必要使用集合框架。 这个非常重要。 你必须理解这里编译的Java面试题和答案。
但这里的知识点并不难,但是最好了解集合的内部实现,因为这将帮助你选择合适的框架来解决不同场景下的问题。 例如,一个有10000个元素的集合,往往需要在进行判断操作时,了解集合的特性或者内部实现,才能很容易做出正确的选择。
这里包含以下内容(不包括并发相关事项):
集合框架系统:基础、地图
具体集合实现的内容,List、Set、Map的具体实现、内部结构、特殊方法、适用场景等。
集合相关工具类的使用等
异常框架
Java 开发中可能不会认真对待异常。 详细解释了处理它们的最佳实践。
一般遇到异常时,可以直接抛出,也可以随便处理,不会对程序的整体运行造成大的影响。 然而,在企业级设计和开发中,异常设计和处理的质量往往关系到系统整体的健壮性。
对于开发人员来说,一个好的系统的异常处理应该是统一的,避免很多异常处理逻辑分散在各处; 对于系统来说,异常应该是可控的,并且易于操作和维护。 某些异常发生后,应该有处理的方法,并懂得如何操作和维护。 因此,虽然异常框架很简单,但是异常处理对于整个企业级应用开发来说却非常重要。 为了很好地处理异常,你需要了解Java中的异常系统。
这部分需要掌握的知识点并不多,主要有:
不寻常的系统:
错误
与一般的区别、具体加工方法等。
12. Java IO
Java中的IO不仅仅只是文件读写那么简单,还包括网络读写等一切输入输出操作。 比如读取标准HTTP请求中Post的内容也是一个输出过程等等……
对于IO,Java不仅提供了基本的Input及相关API,还提供了一些简化操作的API,例如(Logs、临时文件的读写等)。
这里主要的知识点是:
基础IO系统包括,,/,文件读取,各种流读取等,NIO的概念,具体使用方法和使用场景。
多线程并发
多线程通常被认为是 Java 中的一个困难领域。
正确使用多线程可以有效提高CPU占用率,提高系统整体效率,尤其是在大量IO操作被阻塞的情况下; 你必须理解这里编译的Java面试题和答案。
但这也是一把双刃剑。 如果使用不当,不仅系统提升甚微或没有提升,还会造成多线程之间调试等问题。
多线程的内容很多。 我只是简单讲解一下Java中初步使用多线程需要掌握的知识点。 以后有机会我会详细介绍一些高级功能的使用场景。 在Java技术栈公众号回复“多线程”即可获取多线程系列教程。
多线程的实现与启动
和差异
、各自的特点及比较
线程池
异步获取执行结果
包
锁
网络
Java还提供了可以直接操作TCP协议和UDP协议的API。
当需要强调网络性能时,可以直接使用TCP/UDP进行通信。
通过查看etc的源码,可以看到这些相关API的用法。
不过TCP一般很少直接使用,都是使用MINA、Netty等框架来处理。 由于这方面发展不多,所以就不详细列出了。
时间和日期处理
对于几乎每个应用程序来说,都无法绕过时间和日期处理,但是JDK8之前与时间相关的API使用并不友好。
在那个时代,有像 Joda 这样的时间框架。 JDK8发布后,新的时间API基本集成了其他框架的优点,可以直接使用。
对于Java开发人员来说,需要熟练使用API来处理时间和日期。
具体知识点不再列出。 以后我会专门写一篇文章来总结一下JDK8中时间日期API的使用。
16.XML解析/JSON解析
其实这两块内容并不是J2SE的一部分,但是在日常开发中,与其他程序、配置文件的交互越来越离不开这两种格式的解析。
然而,对于开发人员来说,能够了解 XML/JSON 解析的一些具体原理和方法,将有助于您更好地在每个特定场景中选择合适的方法,使您的程序更加高效和健壮。 。
XML:需要了解DOM解析和SAX解析的基本原理以及各自的适用场景。
JSON:需要了解一些常见的JSON框架的用法,例如,Gson等。
17.Maven使用
Maven并不是Java的一部分,但是Maven是革命性的,给Java开发带来了极大的便利。 这30个你一定很熟悉。
从依赖的引入和管理,到开发流程和发布输出的更新,甚至版本更新,使用Maven可以大大简化开发过程的复杂性,从而节省大量时间。
可以说maven已经成为Java开发者的标准。 因此,我把maven作为一个java开发人员必备的基础知识点。
在Java技术栈公众号回复“Maven”即可获取Maven系列教程。 以后我会补充一些自己使用Maven的经验和技巧,这里不再赘述。
泛型
这是JDK5中引入的新概念,实际上是一种语法糖。
写Java代码的时候还是比较方便的。 对于一般的应用或者业务开发,只需要简单的使用即可,可能不需要定义泛型等操作。
不过在开发一些基础公共组件的时候会用到它。 需要的时候可以仔细看看这部分。 一般情况下,只要简单的使用就可以了。
注解
jdk5之后也是引入的,你一定要明白。
它是一个从一开始就使用xml作为标准配置文件的优秀框架。
不过,后来,尤其是-boot兴起之后,使用注解来简化xml配置文件的方式越来越流行。 对于开发者来说,可以节省大量的xml配置时间。
但缺点是注解分散在各个类中。 与xml不同的是,所有配置都可以全局理解和管理,所以没有办法完全替代所有xml。
对于普通开发者来说,使用注解就足够了。 一些公开组织的开发者可能需要了解注解的定义和实现,需要的时候可以仔细看看。
20.落基山研究所
on是Java语言特有的远程调用接口,使用起来比较简单方便。
但如果需要跨语言支持,则需要使用其他方法来支持。
一般来说,程序不需要使用RMI,但在特定情况下可以使用。 在一个项目中,我使用RMI来控制程序的远程启动和停止。
21.JNI
Java允许调用Java中的本地接口方法,一般用于调用C/C++代码。
需要注意的是Java中加载so/dll文件的路径问题。 调用接口本身并不复杂,但往往需要花费大量时间来检查所需的本地接口库是否加载。
以上只是简单介绍一下我的一些看法以及对这些Java基础知识点和技术点的介绍。
这些内容来源于我多年来使用Java的一些总结。 内容还存在一些不完善的地方,会在以后的文章中补充。