Java Interview Questions
# Java 最常见的 200+ 面试题:面试必备
这份面试清单是我从 2015 年做了 TeamLeader 之后开始收集的,一方面是给公司招聘用,另一方面是想用它来挖掘我在 Java 技术栈中的技术盲点,然后修复和完善它,以此来提高自己的技术水平。虽然我从 2009 年就开始参加编程工作了,但依旧觉得还有很多东西要学,当然学习的过程也给我带来了很多成就感,这些成就感也推动我学习更多的技术知识。
聊回面试题这件事,这份面试清单原本是我们公司内部使用的,可到后来有很多朋友在微信上联系到我,让我帮他们找一些面试方面的资料,而且这些关系也不太好拒绝,一呢,是因为这些找我,要面试题的人,不是我的好朋友的弟弟妹妹,就是我的弟弟妹妹们;二呢,我也不能马马虎虎的对付,受人之事忠人之命,我也不能辜负这份信任。慢慢的我产生了一个想法,要不要把我整理的这 200 多道面试题分享出来,来帮助更多需要的人。
说实话刚开始的时候还是比较犹豫的,首先我会觉得这么做会不会有点帮人 “作弊” 的嫌疑,最后我想通了,这是一件值得去做的事儿。
第一:让更多的人因此而学到了更多的知识,这是一件大好事。
第二:这只是经验 ...
Java big Summary
# Java 基础语法特性
1. 注释
2. 基本数据类型
3. 变量
4. 数组
5. 枚举
6. 操作符
7. 方法
8. 控制语句
9. 异常
10. 泛型
11. 反射
12. 注解
13. 序列化
# 1. 注释
空白行,或者注释的内容,都会被 Java 编译器忽略掉。
Java 支持多种注释方式,下面的示例展示了各种注释的使用方式:
public class HelloWorld {
/*
* JavaDoc 注释
*/
public static void main(String[] args) {
// 单行注释
/* 多行注释:
1. 注意点a
2. 注意点b
*/
System.out.println("Hello World");
}
}
# 2. 基本数据类型
👉 扩展阅读:深入理解 Java 基本数据类型
# 3. 变量
Java 支持的变量类型有:
局部 ...
Java I/O
# Java IO
Java IO
一、概览
二、磁盘操作
三、字节操作
实现文件复制
装饰者模式
四、字符操作
编码与解码
String 的编码方式
Reader 与 Writer
实现逐行输出文本文件的内容
五、对象操作
序列化
Serializable
transient
六、网络操作
InetAddress
URL
Sockets
Datagram
七、NIO
流与块
通道与缓冲区
缓冲区状态变量
文件 NIO 实例
选择器
套接字 NIO 实例
内存映射文件
对比
八、参考资料
# 一、概览
Java 的 I/O 大概可以分成以下几类:
磁盘操作:File
字节操作:InputStream 和 OutputStream
字符操作:Reader 和 Writer
对象操作:Serializable
网络操作:Socket
新的输入 / 输出:NIO
# 二、磁盘操作
File 类可以用于表示文件和目录的信息,但是它不表示文件的内容。
递归地列出一个目录下所有文件:
public static void listAllFiles ...
Java Basics(javase)
# Java 基础
Java 基础
一、数据类型
基本类型
包装类型
缓存池
二、String
概览
不可变的好处
String, StringBuffer and StringBuilder
String Pool
new String(“abc”)
三、运算
参数传递
float 与 double
隐式类型转换
switch
四、关键字
final
static
五、Object 通用方法
概览
equals()
hashCode()
toString()
clone()
六、继承
访问权限
抽象类与接口
super
重写与重载
七、反射
八、异常
九、泛型
十、注解
十一、特性
Java 各版本的新特性
Java 与 C++ 的区别
JRE or JDK
参考资料
# 一、数据类型
# 基本类型
byte/8
char/16
short/16
int/32
float/32
long/64
double/64
boolean/~
boolean 只有两个值:true、false,可以使用 1 bit 来存储,但是具 ...
Java Container(JUC)
# Java 容器
Java 容器
一、概览
Collection
Map
二、容器中的设计模式
迭代器模式
适配器模式
三、源码分析
ArrayList
Vector
CopyOnWriteArrayList
LinkedList
HashMap
ConcurrentHashMap
LinkedHashMap
WeakHashMap
参考资料
# 一、概览
容器主要包括 Collection 和 Map 两种,Collection 存储着对象的集合,而 Map 存储着键值对(两个对象)的映射表。
# Collection
# 1. Set
TreeSet:基于红黑树实现,支持有序性操作,例如根据一个范围查找元素的操作。但是查找效率不如 HashSet,HashSet 查找的时间复杂度为 O (1),TreeSet 则为 O (logN)。
HashSet:基于哈希表实现,支持快速查找,但不支持有序性操作。并且失去了元素的插入顺序信息,也就是说使用 Iterator 遍历 HashSet 得到的结果是不确定的。
LinkedHash ...
Java Concurrent(JUC)
# Java 并发
Java 并发
一、使用线程
实现 Runnable 接口
实现 Callable 接口
继承 Thread 类
实现接口 VS 继承 Thread
二、基础线程机制
Executor
Daemon
sleep()
yield()
三、中断
InterruptedException
interrupted()
Executor 的中断操作
四、互斥同步
synchronized
ReentrantLock
比较
使用选择
五、线程之间的协作
join()
wait() notify() notifyAll()
await() signal() signalAll()
六、线程状态
新建(NEW)
可运行(RUNABLE)
阻塞(BLOCKED)
无限期等待(WAITING)
限期等待(TIMED_WAITING)
死亡(TERMINATED)
七、J.U.C - AQS
CountDownLatch
CyclicBarrier
Semaphore
八、J.U.C - 其它组件
FutureTask
BlockingQ ...
Java Virtual Machine
# Java 虚拟机
Java 虚拟机
一、运行时数据区域
程序计数器
Java 虚拟机栈
本地方法栈
堆
方法区
运行时常量池
直接内存
二、垃圾收集
判断一个对象是否可被回收
引用类型
垃圾收集算法
垃圾收集器
三、内存分配与回收策略
Minor GC 和 Full GC
内存分配策略
Full GC 的触发条件
四、类加载机制
类的生命周期
类加载过程
类初始化时机
类与类加载器
类加载器分类
双亲委派模型
自定义类加载器实现
参考资料
本文大部分内容参考 周志明《深入理解 Java 虚拟机》 ,想要深入学习的话请看原书。
# 一、运行时数据区域
# 程序计数器
记录正在执行的虚拟机字节码指令的地址(如果正在执行的是本地方法则为空)。
# Java 虚拟机栈
每个 Java 方法在执行的同时会创建一个栈帧用于存储局部变量表、操作数栈、常量池引用等信息。从方法调用直至执行完成的过程,对应着一个栈帧在 Java 虚拟机栈中入栈和出栈的过程。
可以通过 -Xss 这个虚拟机参数来指定每个线程的 Java 虚拟机栈内存大小,在 ...
Operating Systems
# 计算机操作系统
本部分主要是笔者在学习现代操作系统和一些相关面试题所做的笔记,如果出现错误,希望大家指出!
# 现代操作系统阅读笔记
# 第一章 引论
# 1. 操作系统定义
操作系统是运行在内核态的软件,它执行两个基本上独立的任务。
隐藏计算机底层硬件的实现,为用户及应用程序提供一个资源集的清晰抽象。
管理计算机硬件资源。
任何操作系统的核心是它可处理的系统调用集。这些系统带欧阳真实地说明了操作系统做的工作。
# 2. 计算机运行模式
多数计算机有两种运行模式:内核态和用户态。
软件中最基础的部分是操作系统,它运行在内核态。这内核态模式下,操作系统具有对所有硬件的完全访问权,可以执行机器能够运行的任何指令。软件的其余部分运行在用户态下,在用户态下,只能使用机器指令中的一个子集。
# 3. shell 与 GUI
用户与之交互的程序,基于文本的通常称为 shell,而基于图标的则称为图形用户界面(GUI)。
它们并不是操作系统的一部分,它们是运行在用户态最低层次的用户接口程序
# 4. 对于抽象的理解
现代计算机系统中,大量使用了抽象这一概念。抽象是管理复杂性的一个关键。好的 ...
Computer Network Summary
# 计算机网络知识总结
本部分主要是笔者在复习计算机网络相关知识和一些相关面试题时所做的笔记,如果出现错误,希望大家指出!
# 应用层
应用层协议定义了应用进程间的交互和通信规则,不同主机的应用进程间如何相互传递报文,比如传递的报文的类型、格式、 有哪些字段等等。
# HTTP 协议
# 概况
HTTP 是超文本传输协议,它定义了客户端和服务器之间交换报文的格式和方式,默认使用 80 端口。它使用 TCP 作为传 输层协议,保证了数据传输的可靠性。
HTTP 是一个无状态的协议,HTTP 服务器不会保存关于客户的任何信息。
HTTP 有两种连接模式,一种是持续连接,一种非持续连接。非持续连接指的是服务器必须为每一个请求的对象建立和维护 一个全新的连接。持续连接下,TCP 连接默认不关闭,可以被多个请求复用。采用持续连接的好处是可以避免每次建立 TCP 连接三次握手时所花费的时间。在 HTTP1.0 以前使用的非持续的连接,但是可以在请求时,加上 Connection: keep-a live 来要求服务器不要关闭 TCP 连接。HTTP1.1 以后默认采用的是持续的连接。目前对于同一个 ...
Javase + jvm + Algorithm + Design Patterns
# SE
# 基础
# 数据
# 变量类型
成员变量
局部变量
静态变量
定义位置
在类中,方法外
方法中或者方法的形参
在类中,方法外
初始化值
有默认初始化值
无,先定义,赋值后才能使用
有默认初始化值
调用方法
对象调用
对象调用,类名调用
存储位置
堆中
栈中
方法区(JDK8 以后移到堆中)
生命周期
与对象共存亡
与方法共存亡
与类共存亡
别名
实例变量
类变量,静态成员变量
静态变量只有一个,成员变量是类中的变量,局部变量是方法中的变量
初学时笔记内容参考视频:https://www.bilibili.com/video/BV1TE41177mP,随着学习的深入又增加了很多知识
给初学者的一些个人建议:
初学者对编程的认知比较浅显,一些专有词汇和概念难以理解,所以建议观看视频进行入门,大部分公开课视频讲的比较基础
在有了一定的编程基础后,需要看一些经典书籍和技术博客,来扩容自己的知识广度和深度,可以长期保持记录笔记的好习惯
# 数据类型
# 基本类型
Java 语言提供了八种基本类型。六种数字类型(四个整数型,两个浮点型 ...