Java 基础博文Collections

 

面向对象

什么是面向对象

面向对象、面向过程

面向对象的三大基本特征

五大基本原则

平台无关性

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

反射

反射与工厂模式

反射有什么作用

Class类

java.lang.reflect.*

动态代理

静态代理

动态代理

动态代理和反射的关系

动态代理的几种实现方式

AOP

序列化

什么是序列化与反序列化

为什么序列化

序列化底层原理

序列化与单例模式

protobuf

为什么说序列化并不安全

注解

Java注解的基本原理

元注解

自定义注解

Java中常用注解使用

注解与反射的结合

如何自定义一个注解?

Spring常用注解

JMS (Java消息服务(Java Message Service))

什么是Java消息服务

JMS消息传送模型

JMX

什么是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的关系和区别

如何定义SPI

SPI的实现原理

异常

深入理解java异常处理机制

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

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语法糖详解

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

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

阅读源代码

String

Integer

BigInteger

Long

Enum

BigDecimal

ClassLoader && URLClassLoader

ArrayList

LinkedList

HashMap

LinkedHashMap

TreeMap

ConcurrentHashMap

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

写一个死锁程序

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

阅读源码

Thread

Runnable

Callable

ReentrantLock

ReentrantReadWriteLock

Atomic*

Semaphore

CountDownLatch

ConcurrentHashMap

Executors