Java常见面试问题汇总(一)
计网
计算机网络基础
- OSI七层模型是什么? 每一层的作用是什么?
- TCP/IP四层模型是什么? 每一层的作用是什么?
- 为什么网络要分层?
- 应用层常见的协议有哪些?
- 电子邮件的发送过程?
- 如何判断邮箱是真正存在的?
TCP和UDP
- ⭐ TCP和UDP的区别?
- 什么时候用TCP, 什么时候用UDP?
- HTTP是基于TCP还是UDP?
- 使用TCP的协议有哪些? 使用UDP的协议有哪些?
- ⭐⭐ TCP的三次握手和四次挥手(握手和挥手均可由客户端或服务端发起)
- 为什么建立连接时要三次握手?
- 第二次握手传回了ACK, 为什么还要回传SYN?
- 为什么要四次挥手
- 为什么不能把服务器发送的ACK和FIN合并起来, 变成三次挥手?
- 如果第二次挥手时服务器的ACK没有送达客户端, 会怎样?
- 为什么第四次挥手客户端要等待2MSL(报文段最长寿命)后才进入CLOSE状态?
- ⭐ TCP如何保证传输可靠性保证.(6)
- TCP 如何保证数据可靠性?
- TCP 如何实现流量控制?
- TCP的拥塞控制是怎么实现的?
- ARQ协议了解吗?
HTTP
- ⭐⭐ 从输入URL到页面展示发生了什么?
- HTTP状态码有哪些?
- ⭐ HTTP和HTTPS有什么区别?
- HTTP 1.0 和 HTTP 1.1 有什么区别?
- HTTP是不保存状态的协议, 如何保存用户状态?
- URL 和 URI的区别?
ARP
- 什么是MAC地址?
- ARP协议解决了什么问题, 地位如何?
- ARP协议的工作原理? (3) ARP表 / 广播问询 / 单播响应
知识点补充
- 网络攻击常见手段?
OS
OS基础
- 什么是操作系统?
- 什么是系统调用?
- 进程和线程的区别? 独立性, 开销.
3.1 有了进程为什么还需要线程?
3.2 为什么要使用多线程?
3.3 线程间同步的方式有哪些? - PCB是什么? 包含哪些信息?
- 进程有哪几种状态?
- 进程间的通信方式?
6. 线程间同步的方式? - 进程的调度算法有哪些? (5)
- 什么是僵尸进程和孤儿进程?
- 什么是死锁?
- 死锁的四个必要条件是什么?
- 如何解决死锁? (4)
OS内存管理基础
- 操作系统内存管理主要是做什么? (6)
- 什么是内存碎片? (2)
- 内存管理有哪几种方式? (2, 连续 + 非连续(段式, 页式和段页式))
- 分别介绍一下分段机制和分页机制? 分页机制和分段机制有哪些共同点和区别呢?
13.1 什么是页缺失? (2)
13.2 常见的页面置换算法有哪些? (5) - 介绍一下快表和多级表?
- 逻辑地址和物理地址的区别?
虚拟内存
- 什么是虚拟内存? 有什么用?
- 局部性原理?
文件系统
- 文件系统主要做什么? (4)
- 硬连接和软连接有什么区别?
- 硬链接为什么不能跨文件系统?
- 提高文件系统性能的方式有哪些? (5)
- 常见的磁盘调度算法有哪些? (6)
Linux 常用命令
Java基础
Java基础与常识
- Java语言有哪些特点?
- JVM & JDK & JRE
- 什么是字节码? 采用字节码的好处是什么?
- 为什么不全部使用AOT?
- 为什么说Java语言”编译与解释共存”?
- Oracle JDK vs OpenJDK
- Java 和 C++的区别?
基本语法
- java的注释类型有哪些?
- 标识符和关键字的区别是什么?
基本数据类型
- Java的几种基本数据类型了解吗? (8)
- 基本类型和包装类型的区别?
- 包装类型的缓存机制了解吗?
- 自动装箱与拆箱了解吗? 原理是什么?
- 为什么浮点数运算时会有精度丢失的危险?
- 如何解决浮点数精度丢失的问题? (BigDecimal)
- 超过long整型的数据应该如何表示? (BigInteger)
面向对象基础
- 面向对象和面向过程的区别?
- 创建一个对象用什么运算符? 对象实体与对象引用有何不同?
- 构造方法有哪些特点? 时候可以被override?
- 面向对象的三大特征? 封装, 继承, 多态.
- 接口和抽象类有什么共同点和区别?
- 深拷贝和浅拷贝的区别? 什么是引用拷贝?
Java常见类
- Object类的常见方法有哪些?
- hashCode()有什么用?
String
,StringBuffer
,StringBuilder
的区别?- 为什么String类型值不能被修改?
- 字符串常量池的作用了解吗?
String s1 = new String("abc");
这句话创建了几个字符串对象?
异常
Exception
和Error
有什么区别?Checked Exception
和Unchecked Exception
有什么区别?Throwable
类常用方法有哪些?try-catch-finally
如何使用?- 如何使用
try-with-resources
代替try-catch-finally
?
泛型
- 什么是泛型? 有什么作用?
- 泛型的使用方式有哪几种?
反射(?)
注解
SPI
序列化 / 反序列化
- 什么是序列化? 反序列化?
I/O
- Java IO流了解吗?
- IO流为什么要分为字节流和字符流呢?
- Java IO中的设计模式有哪些?
- BIO, NIO 和 AIO的区别?
语法糖
- 什么是语法糖?
- Java中有哪些常用的语法糖?
Java集合
集合概述
- 说说List, Set, Queue, Map四者的区别?
Collection 之 List
- ArrayList和LinkedList有什么区别?
说说ArrayList的扩容机制吧?
Collection 之 Set
- comparable 和 Comparator 的区别?
- 比较HashSet, LinkedHashSet, TreeSet 三者的异同.
Collection 之 Queue
- Queue和Deque的区别.
- ArrayDeque和LinkedList的区别.
- 介绍一下 PriorityQueue.
Map接口
- HashMap和Hashtable的区别.
- HashMap和HashSet的区别.
- HashMap和TreeMap的区别.
- HashSet如何检查重复?