Java 工程师成神之路 | 2019正式版

主要版本更新时间备注

图片 1

摘要:什么是面向对象

v1.02015-08-01首次发布

文章有些许长,请看官们耐心观看,文末有些许福利放送,感谢。

图片 2

v1.12018-03-12增加新技术知识、完善知识体系

1、基础篇

基础篇

v2.02019-02-19结构调整,更适合从入门到精通;进一步完善知识体系;
新技术补充

01

01面向对象

小编整理了一些java进阶学习资料和面试题,需要资料的请加JAVA高阶学习Q群:664389243
这是小编创建的java高阶学习交流群,加群一起交流学习深造。群里也有小编整理的2019年最新最全的java高阶学习资料!

面向对象

→ 什么是面向对象

基础篇

→ 什么是面向对象

面向对象、面向过程

01 面向对象

面向对象、面向过程

面向对象的三大基本特征和五大基本原则

→ 什么是面向对象

面向对象的三大基本特征和五大基本原则

→ 平台无关性

面向对象、面向过程

→ 平台无关性

Java 如何实现的平台无关

面向对象的三大基本特征和五大基本原则

Java 如何实现的平台无关

JVM 还支持哪些语言(Kotlin、Groovy、JRuby、Jython、Scala)

→ 平台无关性

JVM 还支持哪些语言(Kotlin、Groovy、JRuby、Jython、Scala)

→ 值传递

Java 如何实现的平台无关

→ 值传递

值传递、引用传递

JVM 还支持哪些语言(Kotlin、Groovy、JRuby、Jython、Scala)

值传递、引用传递

为什么说 Java 中只有值传递

→ 值传递

为什么说 Java 中只有值传递

→ 封装、继承、多态

值传递、引用传递

→ 封装、继承、多态

什么是多态、方法重写与重载

为什么说 Java 中只有值传递

什么是多态、方法重写与重载

Java 的继承与实现

→ 封装、继承、多态

Java 的继承与实现

构造函数与默认构造函数

什么是多态、方法重写与重载

构造函数与默认构造函数

类变量、成员变量和局部变量

Java 的继承与实现

类变量、成员变量和局部变量

成员变量和方法作用域

构造函数与默认构造函数

成员变量和方法作用域

02 Java 基础知识

类变量、成员变量和局部变量

02

→ 基本数据类型

成员变量和方法作用域

Java 基础知识

7 种基本数据类型:整型、浮点型、布尔型、字符型

02 Java 基础知识

→ 基本数据类型

整型中 byte、short、int、long 的取值范围

→ 基本数据类型

7 种基本数据类型:整型、浮点型、布尔型、字符型

什么是浮点型?什么是单精度和双精度?为什么不能用浮点型表示金额?

7 种基本数据类型:整型、浮点型、布尔型、字符型

整型中 byte、short、int、long 的取值范围

→ 自动拆装箱

整型中 byte、short、int、long 的取值范围

什么是浮点型?什么是单精度和双精度?为什么不能用浮点型表示金额?

什么是包装类型、什么是基本类型、什么是自动拆装箱

什么是浮点型?什么是单精度和双精度?为什么不能用浮点型表示金额?

→ 自动拆装箱

Integer 的缓存机制

→ 自动拆装箱

什么是包装类型、什么是基本类型、什么是自动拆装箱

→ String

什么是包装类型、什么是基本类型、什么是自动拆装箱

Integer 的缓存机制

字符串的不可变性

Integer 的缓存机制

→ String

JDK 6 和 JDK 7 中 substring 的原理及区别、

→ String

字符串的不可变性

replaceFirst、replaceAll、replace 区别、

字符串的不可变性

JDK 6 和 JDK 7 中 substring 的原理及区别、

String 对“+”的重载、字符串拼接的几种方式和区别

JDK 6 和 JDK 7 中 substring 的原理及区别、

replaceFirst、replaceAll、replace 区别、

String.valueOf 和 Integer.toString 的区别、

replaceFirst、replaceAll、replace 区别、

String 对“+”的重载、字符串拼接的几种方式和区别

switch 对 String 的支持

String 对“+”的重载、字符串拼接的几种方式和区别

String.valueOf 和 Integer.toString 的区别、

字符串池、常量池(运行时常量池、Class 常量池)、intern

String.valueOf 和 Integer.toString 的区别、

switch 对 String 的支持

→ 熟悉 Java 中各种关键字

switch 对 String 的支持

字符串池、常量池(运行时常量池、Class 常量池)、intern

transient、instanceof、final、static、volatile、synchronized、const
原理及用法

字符串池、常量池(运行时常量池、Class 常量池)、intern

→ 熟悉 Java 中各种关键字

→ 集合类

→ 熟悉 Java 中各种关键字

transient、instanceof、final、static、volatile、synchronized、const
原理及用法

常用集合类的使用、ArrayList 和 LinkedList 和 Vector 的区别
、SynchronizedList 和 Vector
的区别、HashMap、HashTable、ConcurrentHashMap 区别、

transient、instanceof、final、static、volatile、synchronized、const
原理及用法

→ 集合类

Set 和 List 区别?Set 如何保证元素不重复?

→ 集合类

常用集合类的使用、ArrayList 和 LinkedList 和 Vector 的区别
、SynchronizedList 和 Vector
的区别、HashMap、HashTable、ConcurrentHashMap 区别、

Java 8 中 stream 相关用法、apache 集合处理工具类的使用、不同版本的 JDK
中 HashMap 的实现的区别以及原因

常用集合类的使用、ArrayList 和 LinkedList 和 Vector 的区别
、SynchronizedList 和 Vector
的区别、HashMap、HashTable、ConcurrentHashMap 区别

Set 和 List 区别?Set 如何保证元素不重复?

Collection 和 Collections 区别

Set 和 List 区别?Set 如何保证元素不重复?

Java 8 中 stream 相关用法、apache 集合处理工具类的使用、不同版本的 JDK
中 HashMap 的实现的区别以及原因

Arrays.asList 获得的 List 使用时需要注意什么

Java 8 中 stream 相关用法、apache 集合处理工具类的使用、不同版本的 JDK
中 HashMap 的实现的区别以及原因

Collection 和 Collections 区别

Enumeration 和 Iterator 区别

Collection 和 Collections 区别

Arrays.asList 获得的 List 使用时需要注意什么

fail-fast 和 fail-safe

Arrays.asList 获得的 List 使用时需要注意什么

Enumeration 和 Iterator 区别

CopyOnWriteArrayList、ConcurrentSkipListMap

Enumeration 和 Iterator 区别

fail-fast 和 fail-safe

→ 枚举

fail-fast 和 fail-safe

CopyOnWriteArrayList、ConcurrentSkipListMap

枚举的用法、枚举的实现、枚举与单例、Enum 类

CopyOnWriteArrayList、ConcurrentSkipListMap

→ 枚举

Java 枚举如何比较

→ 枚举

枚举的用法、枚举的实现、枚举与单例、Enum 类

switch 对枚举的支持

枚举的用法、枚举的实现、枚举与单例、Enum 类

Java 枚举如何比较

枚举的序列化如何实现

Java 枚举如何比较

switch 对枚举的支持

枚举的线程安全性问题

switch 对枚举的支持

枚举的序列化如何实现

→ IO

枚举的序列化如何实现

枚举的线程安全性问题

字符流、字节流、输入流、输出流、

枚举的线程安全性问题

→ IO

同步、异步、阻塞、非阻塞、Linux 5 种 IO 模型

→ IO

字符流、字节流、输入流、输出流、

BIO、NIO 和 AIO 的区别、三种 IO 的用法与原理、netty

字符流、字节流、输入流、输出流、

同步、异步、阻塞、非阻塞、Linux 5 种 IO 模型

→ 反射

同步、异步、阻塞、非阻塞、Linux 5 种 IO 模型

BIO、NIO 和 AIO 的区别、三种 IO 的用法与原理、netty

反射与工厂模式、反射有什么用

BIO、NIO 和 AIO 的区别、三种 IO 的用法与原理、netty

→ 反射

Class 类、java.lang.reflect.*

→ 反射

反射与工厂模式、反射有什么用

→ 动态代理

反射与工厂模式、反射有什么用

Class 类、java.lang.reflect.*

静态代理、动态代理

Class 类、java.lang.reflect.*

→ 动态代理

动态代理和反射的关系

→ 动态代理

静态代理、动态代理

动态代理的几种实现方式

静态代理、动态代理

动态代理和反射的关系

AOP

动态代理和反射的关系

动态代理的几种实现方式

→ 序列化

动态代理的几种实现方式

AOP

什么是序列化与反序列化、为什么序列化、序列化底层原理、序列化与单例模式、protobuf、为什么说序列化并不安全

AOP

→ 序列化

→ 注解

→ 序列化

什么是序列化与反序列化、为什么序列化、序列化底层原理、序列化与单例模式、protobuf、为什么说序列化并不安全

元注解、自定义注解、Java 中常用注解使用、注解与反射的结合

什么是序列化与反序列化、为什么序列化、序列化底层原理、序列化与单例模式、protobuf、为什么说序列化并不安全

→ 注解

Spring 常用注解

→ 注解

元注解、自定义注解、Java 中常用注解使用、注解与反射的结合

→ JMS

元注解、自定义注解、Java 中常用注解使用、注解与反射的结合

Spring 常用注解

什么是 Java 消息服务、JMS 消息传送模型

Spring 常用注解

→ JMS

→ JMX

→ JMS

什么是 Java 消息服务、JMS 消息传送模型

java.lang.management.、 javax.management.

什么是 Java 消息服务、JMS 消息传送模型

→ JMX

→ 泛型

→ JMX

java.lang.management.*、 javax.management.*

泛型与继承、类型擦除、泛型中 KTVE? object 等的含义、泛型各种用法

java.lang.management.*、 javax.management.*

→ 泛型

限定通配符和非限定通配符、上下界限定符 extends 和 super

→ 泛型

泛型与继承、类型擦除、泛型中 KTVE? object 等的含义、泛型各种用法

List

泛型与继承、类型擦除、泛型中 KTVE? object 等的含义、泛型各种用法

限定通配符和非限定通配符、上下界限定符 extends 和 super

List<?> 和 List

限定通配符和非限定通配符、上下界限定符 extends 和 super

List<Object> 和原始类型 List 之间的区别?

→ 单元测试

List<Object> 和原始类型 List 之间的区别?

List<?> 和 List<Object> 之间的区别是什么?

junit、mock、mockito、内存数据库

List<?> 和 List<Object> 之间的区别是什么?

→ 单元测试

→ 正则表达式

→ 单元测试

junit、mock、mockito、内存数据库

java.lang.util.regex.*

junit、mock、mockito、内存数据库

→ 正则表达式

→ 常用的 Java 工具库

→ 正则表达式

java.lang.util.regex.*

commons.lang、commons.*…、 guava-libraries、 netty

java.lang.util.regex.*

→ 常用的 Java 工具库

→ API & SPI

→ 常用的 Java 工具库

commons.lang、commons.*…、 guava-libraries、 netty

API、API 和 SPI 的关系和区别

commons.lang、commons.*…、 guava-libraries、 netty

→ API & SPI

如何定义 SPI、SPI 的实现原理

→ API & SPI

API、API 和 SPI 的关系和区别

→ 异常

API、API 和 SPI 的关系和区别

如何定义 SPI、SPI 的实现原理

异常类型、正确处理异常、自定义异常

如何定义 SPI、SPI 的实现原理

→ 异常

Error 和 Exception

→ 异常

异常类型、正确处理异常、自定义异常

异常链、try-with-resources

异常类型、正确处理异常、自定义异常

Error 和 Exception

finally 和 return 的执行顺序

Error 和 Exception

异常链、try-with-resources

→ 时间处理

异常链、try-with-resources

finally 和 return 的执行顺序

时区、冬令时和夏令时、时间戳、Java 中时间 API

finally 和 return 的执行顺序

→ 时间处理

格林威治时间、CET,UTC,GMT,CST 几种常见时间的含义和关系

→ 时间处理

时区、冬令时和夏令时、时间戳、Java 中时间 API

SimpleDateFormat 的线程安全性问题

时区、冬令时和夏令时、时间戳、Java 中时间 API

格林威治时间、CET,UTC,GMT,CST 几种常见时间的含义和关系

Java 8 中的时间处理

格林威治时间、CET,UTC,GMT,CST 几种常见时间的含义和关系

SimpleDateFormat 的线程安全性问题

如何在东八区的计算机上获取美国时间

SimpleDateFormat 的线程安全性问题

Java 8 中的时间处理

→ 编码方式

Java 8 中的时间处理

如何在东八区的计算机上获取美国时间

Unicode、有了 Unicode 为啥还需要 UTF-8

如何在东八区的计算机上获取美国时间

→ 编码方式

GBK、GB2312、GB18030 之间的区别

→ 编码方式

Unicode、有了 Unicode 为啥还需要 UTF-8

UTF8、UTF16、UTF32 区别

Unicode、有了 Unicode 为啥还需要 UTF-8

GBK、GB2312、GB18030 之间的区别

URL 编解码、Big Endian 和 Little Endian

GBK、GB2312、GB18030 之间的区别

UTF8、UTF16、UTF32 区别

如何解决乱码问题

UTF8、UTF16、UTF32 区别

URL 编解码、Big Endian 和 Little Endian

→ 语法糖

URL 编解码、Big Endian 和 Little Endian

如何解决乱码问题

Java 中语法糖原理、解语法糖

如何解决乱码问题

→ 语法糖

语法糖:switch 支持 String
与枚举、泛型、自动装箱与拆箱、方法变长参数、枚举、内部类、条件编译、
断言、数值字面量、for-each、try-with-resource、Lambda 表达式

→ 语法糖

Java 中语法糖原理、解语法糖

03阅读源代码

Java 中语法糖原理、解语法糖

语法糖:switch 支持 String
与枚举、泛型、自动装箱与拆箱、方法变长参数、枚举、内部类、条件编译、
断言、数值字面量、for-each、try-with-resource、Lambda 表达式

String、Integer、Long、Enum、

语法糖:switch 支持 String
与枚举、泛型、自动装箱与拆箱、方法变长参数、枚举、内部类、条件编译、
断言、数值字面量、for-each、try-with-resource、Lambda 表达式

03

BigDecimal、ThreadLocal、ClassLoader & URLClassLoader、

03 阅读源代码

阅读源代码

ArrayList & LinkedList、

String、Integer、Long、Enum、

String、Integer、Long、Enum、

HashMap & LinkedHashMap & TreeMap & CouncurrentHashMap、HashSet &
LinkedHashSet & TreeSet

BigDecimal、ThreadLocal、ClassLoader & URLClassLoader、

BigDecimal、ThreadLocal、ClassLoader & URLClassLoader、

04 Java 并发编程

ArrayList & LinkedList、

ArrayList & LinkedList、

→ 并发与并行

HashMap & LinkedHashMap & TreeMap & CouncurrentHashMap、HashSet &
LinkedHashSet & TreeSet

HashMap & LinkedHashMap & TreeMap & CouncurrentHashMap、HashSet &
LinkedHashSet & TreeSet

什么是并发、什么是并行

04 Java 并发编程

04

并发与并行的区别

→ 并发与并行

Java 并发编程

→ 什么是线程,与进程的区别

什么是并发、什么是并行

→ 并发与并行

线程的实现、线程的状态、优先级、线程调度、创建线程的多种方式、守护线程

并发与并行的区别

什么是并发、什么是并行

线程与进程的区别

→ 什么是线程,与进程的区别

并发与并行的区别

→ 线程池

线程的实现、线程的状态、优先级、线程调度、创建线程的多种方式、守护线程

→ 什么是线程,与进程的区别

自己设计线程池、submit() 和 execute()、线程池原理

线程与进程的区别

线程的实现、线程的状态、优先级、线程调度、创建线程的多种方式、守护线程

为什么不允许使用 Executors 创建线程池

→ 线程池

线程与进程的区别

→ 线程安全

自己设计线程池、submit() 和 execute()、线程池原理

→ 线程池

死锁、死锁如何排查、线程安全和内存模型的关系

为什么不允许使用 Executors 创建线程池

自己设计线程池、submit() 和 execute()、线程池原理

→ 锁

→ 线程安全

为什么不允许使用 Executors 创建线程池

CAS、乐观锁与**悲观锁、数据库相关锁机制、分布式锁、偏向锁、轻量级锁、重量级锁、monitor、

死锁、死锁如何排查、线程安全和内存模型的关系

→ 线程安全

锁优化、锁消除、锁粗化、自旋锁、可重入锁、阻塞锁、死锁

→ 锁

死锁、死锁如何排查、线程安全和内存模型的关系

→ 死锁

CAS、乐观锁与悲观锁、数据库相关锁机制、分布式锁、偏向锁、轻量级锁、重量级锁、monitor、

→ 锁

什么是死锁

锁优化、锁消除、锁粗化、自旋锁、可重入锁、阻塞锁、死锁

CAS、乐观锁与悲观锁、数据库相关锁机制、分布式锁、偏向锁、轻量级锁、重量级锁、monitor、

死锁如何解决

→ 死锁

锁优化、锁消除、锁粗化、自旋锁、可重入锁、阻塞锁、死锁

→ synchronized

什么是死锁

→ 死锁

synchronized 是如何实现的?

死锁如何解决

什么是死锁

synchronized 和 lock 之间关系、不使用 synchronized
如何实现一个线程安全的单例

→ synchronized

死锁如何解决

synchronized 和原子性、可见性和有序性之间的关系

synchronized 是如何实现的?

→ synchronized

→ volatile

synchronized 和 lock 之间关系、不使用 synchronized
如何实现一个线程安全的单例

synchronized 是如何实现的?

happens-before、内存屏障、编译器指令重排和 CPU 指令重

synchronized 和原子性、可见性和有序性之间的关系

synchronized 和 lock 之间关系、不使用 synchronized
如何实现一个线程安全的单例

volatile 的实现原理

→ volatile

synchronized 和原子性、可见性和有序性之间的关系

volatile 和原子性、可见性和有序性之间的关系

happens-before、内存屏障、编译器指令重排和 CPU 指令重

→ volatile

有了 symchronized 为什么还需要 volatile

volatile 的实现原理

happens-before、内存屏障、编译器指令重排和 CPU 指令重

→ sleep 和 wait

volatile 和原子性、可见性和有序性之间的关系

volatile 的实现原理

→ wait 和 notify

有了 symchronized 为什么还需要 volatile

volatile 和原子性、可见性和有序性之间的关系

→ notify 和 notifyAll

→ sleep 和 wait

有了 symchronized 为什么还需要 volatile

→ ThreadLocal

→ wait 和 notify

→ sleep 和 wait

→ 写一个死锁的程序

→ notify 和 notifyAll

→ wait 和 notify

→ 写代码来解决生产者消费者问题

→ ThreadLocal

→ notify 和 notifyAll

→ 并方包

→ 写一个死锁的程序

→ ThreadLocal

Thread、Runnable、Callable、ReentrantLock、ReentrantReadWriteLock、Atomic*、Semaphore、CountDownLatch、ConcurrentHashMap、Executors

→ 写代码来解决生产者消费者问题

→ 写一个死锁的程序

2底层篇

→ 并方包

→ 写代码来解决生产者消费者问题

01JVM

Thread、Runnable、Callable、ReentrantLock、ReentrantReadWriteLock、Atomic*、Semaphore、CountDownLatch、ConcurrentHashMap、Executors

→ 并方包

→ JVM 内存结构

底层篇

Thread、Runnable、Callable、ReentrantLock、ReentrantReadWriteLock、Atomic*、Semaphore、CountDownLatch、ConcurrentHashMap、Executors

class 文件格式、运行时数据区:堆、栈、方法区、直接内存、运行时常量池、

01 JVM

2、底层篇

堆和栈区别

→ JVM 内存结构

01

Java 中的对象一定在堆上分配吗?

class 文件格式、运行时数据区:堆、栈、方法区、直接内存、运行时常量池、

JVM

→ Java 内存模型

堆和栈区别

→ JVM 内存结构

计算机内存模型、缓存一致性、MESI 协议

Java 中的对象一定在堆上分配吗?

class 文件格式、运行时数据区:堆、栈、方法区、直接内存、运行时常量池、

可见性、原子性、顺序性、happens-before、

→ Java 内存模型

堆和栈区别

内存屏障、synchronized、volatile、final、锁

计算机内存模型、缓存一致性、MESI 协议

Java 中的对象一定在堆上分配吗?

→ 垃圾回收

可见性、原子性、顺序性、happens-before、

→ Java 内存模型

GC 算法:标记清除、引用计数、复制、标记压缩、分代回收、增量式回收

内存屏障、synchronized、volatile、final、锁

计算机内存模型、缓存一致性、MESI 协议

GC 参数、对象存活的判定、垃圾收集器(CMS、G1、ZGC、Epsilon)

→ 垃圾回收

可见性、原子性、顺序性、happens-before、

→ JVM 参数及调优

GC 算法:标记清除、引用计数、复制、标记压缩、分代回收、增量式回收

内存屏障、synchronized、volatile、final、锁

-Xmx、-Xmn、-Xms、Xss、-XX:SurvivorRatio、

GC 参数、对象存活的判定、垃圾收集器(CMS、G1、ZGC、Epsilon)

→ 垃圾回收

-XX:PermSize、-XX:MaxPermSize、-XX:MaxTenuringThreshold

→ JVM 参数及调优

GC 算法:标记清除、引用计数、复制、标记压缩、分代回收、增量式回收

→ Java 对象模型

-Xmx、-Xmn、-Xms、Xss、-XX:SurvivorRatio、

GC 参数、对象存活的判定、垃圾收集器(CMS、G1、ZGC、Epsilon)

oop-klass、对象头

-XX:PermSize、-XX:MaxPermSize、-XX:MaxTenuringThreshold

→ JVM 参数及调优

→ HotSpot

→ Java 对象模型

-Xmx、-Xmn、-Xms、Xss、-XX:SurvivorRatio、

即时编译器、编译优化

oop-klass、对象头

-XX:PermSize、-XX:MaxPermSize、-XX:MaxTenuringThreshold

→ 虚拟机性能监控与故障处理工具

→ HotSpot

→ Java 对象模型

jps, jstack, jmap, jstat, jconsole, jinfo, jhat, javap, btrace,
TProfiler

即时编译器、编译优化

oop-klass、对象头

Arthas

→ 虚拟机性能监控与故障处理工具

→ HotSpot

02 类加载机制

jps, jstack, jmap, jstat, jconsole, jinfo, jhat, javap, btrace,
TProfiler

即时编译器、编译优化

classLoader、类加载过程、双亲委派、模块化(jboss modules、osgi、jigsaw)

Arthas

→ 虚拟机性能监控与故障处理工具

03 编译与反编译

02 类加载机制

jps, jstack, jmap, jstat, jconsole, jinfo, jhat, javap, btrace,
TProfiler

什么是编译(前端编译、后端编译)、什么是反编译

classLoader、类加载过程、双亲委派、模块化(jboss modules、osgi、jigsaw)

Arthas

JIT、JIT 优化(逃逸分析、栈上分配、标量替换、锁优化)

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*
*
Website