Java 工程师成神之路(基础篇)

01

面向对象

→ 什么是面向对象
面向对象、面向过程

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

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

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

→ 值传递
值传递、引用传递

为什么说 Java 中只有值传递

→ 封装、继承、多态
什么是多态、方法重写与重载

Java 的继承与实现

构造函数与默认构造函数

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

成员变量和方法作用域

02

Java 基础知识
→ 基本数据类型
8 种基本数据类型:整型、浮点型、布尔型、字符型

整型中 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、final、static、volatile、synchronized、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 中常用注解使用、注解与反射的结合

Spring 常用注解

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

→ JMX
java.lang.management.、 javax.management.

→ 泛型
泛型与继承、类型擦除、泛型中 KTVE? 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 的实现原理

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

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 表达式

03

阅读源代码

String、Integer、Long、Enum、

BigDecimal、ThreadLocal、ClassLoader & URLClassLoader、

ArrayList & LinkedList、

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

04

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
在这里插入图片描述
在这里插入图片描述

需要更多java架构学习资料以及面试题的秋秋群搜索“708701457” 备注CSDN

猜你喜欢

转载自blog.csdn.net/qq_42982923/article/details/88247079
今日推荐