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
临界区
临界区是在程序中
可能
被多个线程同时访问的程序片段
可以用
信号量
或
互斥量
来保护临界区。在Java中你可以用
synchronized
关键字或
ReentrantLock
来保护临界区