java_interview
Introduction
1.
Java基础知识
1.1.
Java跨平台
1.1.1.
字节码是什么
1.1.2.
JVM跨平台的原理
1.1.3.
JDK与JRE的区别
1.2.
Collection集合类
1.2.1.
Map
1.2.1.1.
ConcurrentHashMap与锁分离
1.2.1.2.
HashMap与HashTable部分源码比较
1.2.1.3.
LinkedHashMap源码研读
1.2.1.4.
红黑树与平衡二叉树
1.2.1.5.
比较:TreeMap、HashMap、LinkedHashMap、HashTable
1.2.1.6.
怎样使HashMap同步
1.3.
反射机制
1.3.1.
应用场景
1.3.2.
如何优化反射机制
1.3.3.
Java中创建对象的4种方法
1.4.
异常处理
1.4.1.
异常处理的作用(与C语言比较)
1.4.2.
一道关于finally的面试题
1.5.
String
1.5.1.
String/StringBuffer/StringBuilder
1.5.2.
关于String的面试题
1.6.
其他
1.6.1.
基本类型之间的转换
1.6.2.
静态类型与实际类型
1.6.3.
接口与抽象类的异同
1.6.4.
关键字static
1.6.5.
关键字final&finally&finalize
1.6.6.
jdk5.0新特性
2.
Java的内存模型
3.
JVM
3.1.
JVM启动参数的意义
3.2.
JVM内存划分
3.3.
对象的管理
3.3.1.
对象创建的过程
3.3.2.
对象的内存分配策略
3.3.3.
符号引用与直接引用
3.4.
GC
3.4.1.
如何判定对象是否为垃圾
3.4.2.
GC算法
3.4.3.
JVM的GC触发机制
3.4.4.
垃圾回收器
3.4.5.
方法区的垃圾回收
3.4.6.
OOM与调优
3.4.7.
Java中四种引用关系
3.5.
JVM类加载
3.5.1.
类加载器:双亲委派模型与OSGI
3.5.2.
解释器执行过程与栈帧结构
3.5.3.
类文件的结构
4.
IO
4.1.
磁盘IO的访问方式
4.2.
堆内内存vs堆外内存
4.3.
同步/异步/非阻塞/阻塞
4.3.1.
BIO/NIO/AIO
4.3.2.
NIO分析
5.
线程
5.1.
线程的状态
5.2.
线程与进程
5.2.1.
进程的状态
5.2.2.
多进程之间的通信
5.2.3.
多线程时间的通信
5.3.
线程安全
5.3.1.
临界区
5.3.2.
先行先发送原则happen-before
5.3.3.
volatile关键字
5.3.4.
原子性、可见性、有序性
5.4.
多线程的实现
5.4.1.
多线程的优势
5.4.2.
Java多线程同步(锁)的实现方法(synchronised 与reentrantlock)
5.4.3.
concurrent包中的常用类
5.4.4.
线程池中断策略
5.5.
面试题收集
5.5.1.
线程死锁:哲学家问题
5.5.2.
生产者消费者模型
5.5.3.
关于多线程的面试题
5.5.4.
线程异常面试题
5.5.5.
多线程通信面试题
5.5.6.
其他面试题
6.
网络通信
6.1.
序列化与反序列化
6.1.1.
Java中的序列化与反序列化
6.1.2.
transient关键字
6.1.3.
常见面试题
6.2.
TCP/UDP
6.2.1.
TCP状态迁移图
6.2.2.
TCP三次握手与四次挥手
6.2.3.
SOCKET通信实现
6.2.4.
非阻塞SOCKET
6.3.
HTTP
6.3.1.
Cookie与Session
6.3.2.
GET与POST的区别
6.3.3.
状态码
6.3.4.
Http通信数据转发过程
6.3.5.
Http1.0与1.1
6.3.6.
Https
6.3.7.
URL与URI
6.3.8.
Web缓存与客户端缓存
6.3.9.
续传与多线程下载原理
7.
设计模式
7.1.
单例模式
7.1.1.
单例模式实现方法
7.1.2.
双检索的缺点
7.1.3.
怎样获得更多的单例对象
7.2.
工厂模式
7.3.
策略模式
7.4.
建造者模式
8.
数据库
8.1.
事务
8.2.
ORM
Powered by
GitBook
java_interview
线程的状态
线程的5种状态:
新建
运行
等待(waiting/timed waiting)
阻塞
结束
线程的5种状态之间变化
调用线程的
start
方法后线程进入
就绪
状态,线程调度系统将就绪状态的线程转为
运行
状态,遇到
synchronized
语句时,由运行状态转为
阻塞
,当synchronized获得锁后,由阻塞转为运行,在这种情况可以调用
wait
方法转为
等待
状态,当线程关联的代码执行完后,线程变为
结束
状态。