8000 GitHub - xinnan-liu/toBeTopJavaer: To Be Top Javaer - Java工程师成神之路
[go: up one dir, main page]

Skip to content

xinnan-liu/toBeTopJavaer

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

85 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

To Be Top Javaer - Java工程师成神之路

主要版本 更新时间 备注
v1.0 2015-08-01 首次发布
v1.1 2018-03-12 增加新技术知识、完善知识体系
v2.0 2019-02-19 结构调整,更适合从入门到精通;
进一步完善知识体系;
新技术补充;

欢迎关注[Java之道]公众号,最新内容均会在该公众号中同步发出!

全套思维导图

一、基础篇

面向对象

什么是面向对象

面向对象、面向过程

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

平台无关性

Java如何实现的平台无关性的

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

值传递

值传递、引用传递

为什么说Java中只有值传递

封装、继承、多态

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

Java的继承与实现

Java的继承与组合

构造函数与默认构造函数

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

成员变量和方法作用域

Java基础知识

基本数据类型

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

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

什么是浮点型?

什么是单精度和双精度?

为什么不能用浮点型表示金额?

自动拆装箱

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

Integer的缓存机制

String

字符串的不可变性

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

replaceFirst、replaceAll、replace区别、

String对“+”的重载

字符串拼接的几种方式和区别

String.valueOf和Integer.toString的区别

switch对String的支持

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

熟悉Java中各种关键字

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

集合类

常用集合类的使用

ArrayList和LinkedList和Vector的区别

SynchronizedList和Vector的区别

HashMap、HashTable、ConcurrentHashMap区别

Set和List区别?

Set如何保证元素不重复?

Java 8中stream相关用法

apache集合处理工具类的使用、

不同版本的JDK中HashMap的实现的区别以及原因

Collection和Collections区别

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

Enumeration和Iterator区别

fail-fast 和 fail-safe

CopyOnWriteArrayList

ConcurrentSkipListMap

枚举

枚举的用法

枚举的实现

枚举与单例、Enum类

Java枚举如何比较

switch对枚举的支持

枚举的序列化如何实现

枚举的线程安全性问题

IO

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

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

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

Java反射与javassist

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

Class类

java.lang.reflect.*

动态代理

静态代理动态代理

动态代理和反射的关系

动态代理的几种实现方式

AOP

序列化

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

注解

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

如何自定义一个注解?

Spring常用注解

JMS

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

JMX

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

泛型

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

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

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

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

junit、mock、mockito、内存数据库(h2)

正则表达式

java.lang.util.regex.*

常用的Java工具库

commons.lang, commons.*... guava-libraries netty

API&SPI

API、API和SPI的关系和区别

如何定义SPISPI的实现原理

异常

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

Error和Exception

异常链、try-with-resources

finally和return的执行顺序

时间处理

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

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

SimpleDateFormat的线程安全性问题

Java 8中的时间处理

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

编码方式

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

GBK、GB2312、GB18030之间的区别

UTF8、UTF16、UTF32区别

URL编解码、Big Endian和Little Endian

如何解决乱码问题

语法糖

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

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

阅读源代码

String、Integer、Long、Enum、BigDecimal、ThreadLocal、ClassLoader & URLClassLoader、ArrayList & LinkedList、 HashMap & LinkedHashMap & TreeMap & CouncurrentHashMap、HashSet & LinkedHashSet & TreeSet

Java并发编程

并发与并行

什么是并发

什么是并行

并发与并行的区别

线程

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

线程与进程的区别

线程池

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

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

线程安全

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

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

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

死锁

死锁的原因

死锁的解决办法

synchronized

synchronized是如何实现的?

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

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

volatile

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

volatile的实现原理

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

有了symchronized为什么还需要volatile

sleep 和 wait

wait 和 notify

notify 和 notifyAll

ThreadLocal

写一个死锁的程序

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

并发包

阅读源代码,并学会使用

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

二、底层篇

JVM

JVM内存结构

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

堆和栈区别

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

Java内存模型

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

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

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

垃圾回收

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

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

JVM参数及调优

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

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

Java对象模型

oop-klass、对象头

HotSpot

即时编译器、编译优化

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

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

Arthas

类加载机制

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

编译与反编译

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

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

编译工具:javac

反编译工具:javap 、jad 、CRF

三、 进阶篇

Java底层知识

字节码、class文件格式

CPU缓存,L1,L2,L3和伪共享

尾递归

位运算

用位运算实现加、减、乘、除、取余

设计模式

设计模式的六大原则:

开闭原则(Open Close Principle)、里氏代换原则(Liskov Substitution Principle)、依赖倒转原则(Dependence Inversion Principle)

接口隔离原则(Interface Segregation Principle)、迪米特法则(最少知道原则)(Demeter Principle)、合成复用原则(Composite Reuse Principle)

了解23种设计模式

创建型模式:单例模式、抽象工厂模式、建造者模式、工厂模式、原型模式。

结构型模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。

行为型模式:模版方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式(Interpreter模式)、状态模式、策略模式、职责链模式(责任链模式)、访问者模式。

会使用常用设计模式

单例的七种写法:懒汉——线程不安全、懒汉——线程安全、饿汉、饿汉——变种、静态内部类、枚举、双重校验锁

工厂模式、适配器模式、策略模式、模板方法模式、观察者模式、外观模式、代理模式等必会

不用synchronized和lock,实现线程安全的单例模式

实现AOP

实现IOC

nio和reactor设计模式

网络编程知识

tcp、udp、http、https等常用协议

三次握手与四次关闭、流量控制和拥塞控制、OSI七层模型、tcp粘包与拆包

http/1.0 http/1.1 http/2之间的区别

http中 get和post区别

常见的web请求返回的状态码

404、302、301、500分别代表什么

http/3

Java RMI,Socket,HttpClient