Java 面试八股题纲

本文详细梳理了Java的基础知识,包括语言特性、JVM、集合框架、并发编程、JVM垃圾回收等,并探讨了操作系统、Linux、Shell脚本、数据结构与算法、数据库基础知识和NoSQL,以及Redis的使用。同时,文章还涵盖了计算机网络和面试刷题中的重点技术问题。
摘要由CSDN通过智能技术生成

来自Javaguide,复习自用,侵删


Java 基础1

  1. Java 语言特点
  2. JVM vs JDK vs JRE
  3. 什么是字节码?采用字节码的好处是什么?
  4. Java 程序从源代码到运行的过程
  5. 为什么说 Java 是编译与解释共存的语言
  6. 为什么不全部使用 AOT 呢?
  7. Oracle JDK vs OpenJDK
  8. Java 和 C++ 的区别?
  9. 注释有哪几种形式?
  10. 标识符和关键字的区别是什么?
  11. 移位运算符
  12. 成员变量与局部变量的区别?
  13. 静态变量有什么作用?
  14. 字符型常量和字符串常量的区别?
  15. 静态方法为什么不能调用非静态成员?(重点)
  16. 静态方法和实例方法有何不同
  17. 重载和重写有什么区别(重点)
  18. static的方法为什么不能被重写?(重点)
  19. 方法的重写要遵循“两同两小一大”(重点)
  20. 什么是可变长参数
  21. 基本类型和包装类型的区别?(重点)
  22. 包装类型的缓存机制了解么?(重点) 所有整型包装类对象之间值的比较,全部使用 equals 方法比较。
  23. 自动装箱与拆箱了解吗?原理是什么?(重点)
  24. 为什么浮点数运算的时候会有精度丢失的风险?(重点)
  25. 如何解决浮点数运算的精度丢失问题?
  26. 超过 long 整型的数据应该如何表示?

Java 基础2

  1. 面向对象和面向过程的区别
  2. 对象的相等和引用相等的区别
  3. Java中子类继承父类关于构造方法的问题
  4. 构造方法有哪些特点?是否可被 override?
  5. 面向对象三大特征(封装、继承、多态)
  6. 接口和抽象类有什么共同点和区别?
  7. 深拷贝和浅拷贝区别了解吗?什么是引用拷贝?
  8. Object 类的常见方法有哪些?
  9. == 和 equals() 的区别(与String、常量池一起考)
  10. 包装类的内存复用(常量池)
  11. hashCode() 有什么用?为什么要有 hashCode?Object 的 hashCode() 方法?为什么重写 equals() 时必须重写 hashCode() 方法?
  12. String、StringBuffer、StringBuilder 的区别?String 为什么是不可变的?Java 9 之后?怎么转换的?
  13. 字符串拼接用“+” 还是 StringBuilder?
  14. 字符串常量池的作用了解吗?
  15. String s1 = new String(“abc”);这句话创建了几个字符串对象?intern 方法有什么作用?被 final 关键字修饰 String字符串在JVM中的存储及其内存地址问题

Java 基础3

  1. Exception 和 Error 有什么区别?
  2. Checked Exception 和 Unchecked Exception 有什么区别?
  3. Throwable 类常用方法有哪些?
  4. try-catch-finally 如何使用?不要在 finally 语句块中使用 return?
  5. finally 中的代码一定会执行吗?
  6. 如何使用 try-with-resources 代替try-catch-finally?
  7. 异常使用有哪些需要注意的地方?
  8. 什么是泛型?有什么作用?
  9. 泛型的使用方式有哪几种?项目中哪里用到了泛型?
  10. 何谓反射? 反射的优缺点?反射的应用场景?
  11. 何谓注解?注解的解析方法有哪几种?
  12. 何谓 SPI?SPI 和 API 有什么区别?SPI 的优缺点?
  13. 什么是序列化?什么是反序列化?序列化协议对应于 TCP/IP 4 层模型的哪一层?如果有些字段不想进行序列化怎么办?为什么不推荐使用 JDK 自带的序列化?
  14. Java IO 流了解吗?I/O 流为什么要分为字节流和字符流呢?Java IO 中的设计模式有哪些?BIO、NIO 和 AIO 的区别?
  15. 什么是语法糖?Java 中有哪些常见的语法糖?

Java 基础重点知识

  1. 为什么 Java 只有值传递?为什么 Java 不引入引用传递呢?
  2. Java 代理模式(概念、静态代理、动态代理)
  3. 为什么浮点数 float 或 double 运算的时候会有精度丢失的风险呢?
  4. BigDecimal 常见方法、BigDecimal 等值比较问题
  5. Unsafe 类了解吗?为什么要使用本地方法呢?为什么 public static 方法无法被直接调用呢?如若想使用 Unsafe 这个类的话,应该如何获取其实例呢?为什么要使用堆外内存?

Java Collection

  1. Java 集合概览(讲一讲Java集合)
  2. 说说 List, Set, Queue, Map 四者的区别?
  3. 如何选用集合?
  4. 为什么要使用集合?
  5. 队列、栈、hashset、hashmap、arraylist、deque等使用,新建、增删改查、遍历、获取大小等等。
  6. ArrayList 和 Vector 的区别?
  7. ArrayList 与 LinkedList 区别?
  8. 说一说 ArrayList 的扩容机制吧。先从 ArrayList 的构造函数说起。一步一步分析 ArrayList 扩容机制。先来看 add 方法。再来看看 ensureCapacityInternal() 方法。ensureExplicitCapacity() 方法。grow() 方法。hugeCapacity() 方法。
  9. System.arraycopy() 和 Arrays.copyOf()方法。ensureCapacity方法。
  10. comparable 和 Comparator 的区别
  11. 无序性和不可重复性的含义是什么?equals(),hashCode(),== 的区别
  12. 比较 HashSet、LinkedHashSet 和 TreeSet 三者的异同。
  13. HashMap的底层数据结构、HashSet、LinkedHashSet 和 TreeSet底层数据结构
  14. Queue 与 Deque 的区别?ArrayDeque 与 LinkedList 的区别?说一说 PriorityQueue?(堆排序、求第K大的数、带权图的遍历等会用到)
  15. HashMap 和 Hashtable 的区别(HashMap底层实现JDK<=1.7数组+链表,JDK>=1.8数组+链表+红黑树);HashMap 和 HashSet 区别;HashMap 和 TreeMap 区别(TreeMap的导航功能什么意思);
  16. HashSet 如何检查重复?
  17. HashMap 的底层实现:JDK1.8 之前;JDK1.8 之后;如何解决冲突?
  18. HashMap 的长度为什么是 2 的幂次方?HashMap 多线程操作导致死循环问题
  19. HashMap 有哪几种常见的遍历方式?
  20. ConcurrentHashMap 和 Hashtable 的区别
  21. JDK 1.7 和 JDK 1.8 的 ConcurrentHashMap 实现有什么不同?
  22. Collections 工具类(不重要)
  23. 集合判空;集合转 Map;集合遍历;集合去重;集合转数组;数组转集合(那我们如何正确的将数组转换为 ArrayList ?)。

Java IO基础知识

  1. IO 流简介(请简单介绍一下IO流)
  2. 字符流、字节流、字节缓冲流、字符缓冲流,常见的几个类
  3. 为什么 I/O 流操作要分为字节流操作和字符流操作呢?
  4. 随机访问流(断点续传应用)
  5. Java IO模型(了解)

并发编程 1

  1. 什么是线程和进程?
  2. 请简要描述线程与进程的关系,区别及优缺点?程序计数器为什么是私有的?虚拟机栈和本地方法栈为什么是私有的?一句话简单了解堆和方法区
  3. 并发与并行的区别、同步和异步的区别
  4. 为什么要使用多线程?使用多线程可能带来什么问题?
  5. 说说线程的生命周期和状态?
  6. sleep() 和wait()的异同?
  7. 什么是上下文切换?
  8. 什么是线程死锁?如何避免死锁?如何预防和避免线程死锁?
  9. sleep() 方法和 wait() 方法对比
  10. 为什么 wait() 方法不定义在 Thread 中?
  11. 可以直接调用 Thread 类的 run 方法吗?

Java 并发编程2

volatile 关键字如何保证变量的可见性?
如何禁止指令重排序?
volatile 可以保证原子性么?
乐观锁和悲观锁什么是悲观锁?使用场景是什么?
什么是乐观锁?使用场景是什么?
如何实现乐观锁?
乐观锁存在哪些问题?
synchronized 关键字synchronized 是什么?有什么用?
如何使用 synchronized?
构造方法可以用 synchronized 修饰么?
synchronized 底层原理了解吗?
JDK1.6 之后的 synchronized 底层做了哪些优化?
synchronized 和 volatile 有什么区别?
ReentrantLockReentrantLock 是什么?
公平锁和非公平锁有什么区别?
synchronized 和 ReentrantLock 有什么区别?
可中断锁和不可中断锁有什么区别?
ReentrantReadWriteLockReentrantReadWriteLock 是什么?
ReentrantReadWriteLock 适合什么场景?
共享锁和独占锁有什么区别?
线程持有读锁还能获取写锁吗?
读锁为什么不能升级为写锁?
StampedLockStampedLock 是什么?
StampedLock 的性能为什么更好?
StampedLock 适合什么场景?
StampedLock 的底层原理了解吗?
Atomic 原子类

Java 并发编程3

ThreadLocalThreadLocal 有什么用?
如何使用 ThreadLocal?
ThreadLocal 原理了解吗?
ThreadLocal 内存泄露问题是怎么导致的?
线程池什么是线程池?为什么要用线程池?
如何创建线程池?
为什么不推荐使用内置线程池?
线程池常见参数有哪些?如何解释?
线程池的饱和策略有哪些?
线程池常用的阻塞队列有哪些?
线程池处理任务的流程了解吗?
如何给线程池命名?
如何设定线程池的大小?
如何动态修改线程池的参数?
Future 类有什么用?
Callable 和 Future 有什么关系?
CompletableFuture 类有什么用?
AQS 是什么?
AQS 的原理是什么?
Semaphore 有什么用?
Semaphore 的原理是什么?
CountDownLatch 有什么用?
CountDownLatch 的原理是什么?
用过 CountDownLatch 么?什么场景下用的?CyclicBarrier 有什么用?
CyclicBarrier 的原理是什么?

JVM

  1. 介绍下 Java 内存区域(运行时数据区)
  2. Java 对象的创建过程(五步,建议能默写出来并且要知道每一步虚拟机做了什么)
  3. 对象的访问定位的两种方式(句柄和直接指针两种方式)
  4. 运行时数据区,哪些是线程私有的,哪些是线程共享的
  5. 类的加载信息和类的class对象之间的关系
  6. 类加载器的流程(加载,验证,准备,解析,初始化,使用,卸载。其中验证,准备,解析三个部分统称为连接)
  7. JVM 内存会划分为堆内存和非堆内存,堆内存中也会划分为年轻代和老年代,而非堆内存则为永久代。jdk1.7
  8. 运行时常量池里面存什么?字符串常量池?编译期常量池?
  9. 运行时常量池是什么?符号引用是什么?JDK1.7 之前,字符串常量池存放在永久代。JDK1.7 字符串常量池和静态变量从永久代移动了 Java 堆中。
  10. 对象的创建 (Java 对象的创建过程我建议最好是能默写出来,并且要掌握每一步在做什么。)
  11. 对象的内存布局
  12. 对象的访问定位
  13. 堆内存中的新生代和老年代
  14. 垃圾回收算法有哪些?
  15. 关于 JVM 调优(堆调优和栈调优)

JVM 垃圾回收

如何判断对象是否死亡(两种方法)。
简单的介绍一下强引用、软引用、弱引用、虚引用(虚引用与软引用和弱引用的区别、使用软引用能带来的好处)。
如何判断一个常量是废弃常量如何判断一个类是无用的类垃圾收集有哪些算法,各自的特点?
HotSpot 为什么要分为新生代和老年代?
常见的垃圾回收器有哪些?
介绍一下 CMS,G1 收集器。
Minor Gc 和 Full GC 有什么不同呢?
堆空间的基本结构
内存分配和回收原则
对象优先在 Eden 区分配
大对象直接进入老年代
长期存活的对象将进入老年代
主要进行 gc 的区域
空间分配担保
死亡对象判断方法
引用计数法
可达性分析算法
引用类型总结
如何判断一个常量是废弃常量?
如何判断一个类是无用的
类垃圾收集算法
标记-清除算法
标记-复制算法
标记-整理算法
分代收集算法
垃圾收集器
Serial 收集器
ParNew 收集器
Parallel Scavenge 收集器
Serial Old 收集器
Parallel Old 收集器
CMS 收集器
G1 收集器
ZGC 收集器

计算机网络

  1. OSI 和 TCP/IP 网络分层模型OSI 七层模型是什么?每一层的作用是什么?
  2. TCP/IP 四层模型是什么?每一层的作用是什么?
  3. 为什么网络要分层?(可以考虑从每一层的协议来记忆每一层的作用)(四层模型,一个是应用程序(HTTP、DNS、FTP、SMTP ),然后是终端设备(TCP、UDP),然后是分组交换网网络(还是协议,IP、ARP、NAT ),然后就是真正的链路(控制差错、地址信息等等,差错检测技术、MAC 协议、以太网技术)以及物理层)
  4. TCP 与 UDP 的区别(重要)
  5. 什么时候选择 TCP,什么时候选 UDP?
  6. HTTP 基于 TCP 还是 UDP?
  7. 使用 TCP 的协议有哪些?使用 UDP 的协议有哪些?
  8. TCP 三次握手和四次挥手(非常重要)
  9. TCP 如何保证传输的可靠性?(重要)HTTP从输入URL 到页面展示到底发生了什么?(非常重要)HTTP 状态码有哪些?HTTP 和 HTTPS 有什么区别?(重要)HTTP 1.0 和 HTTP 1.1 有什么区别?HTTP 是不保存状态的协议, 如何保存用户状态?URI 和 URL 的区别是什么?ARP什么是 Mac 地址?ARP 协议解决了什么问题地位如何?ARP 协议的工作原理?
  10. tcp发送报文数据时,可能将多个数据包合并成一个大的数据包发送,就有可能发生粘包问题。以下可以用来解决这个问题的是?发送固定长度的消息、包结尾增加分隔符、把消息分成消息头和消息体,其中消息头上包含长度

操作系统

操作系统基础什么是操作系统?
系统调用进程和线程进程和线程的区别进程有哪几种状态?
进程间的通信方式
线程间的同步的方式
进程的调度算法
什么是死锁
死锁的四个必要条件
解决死锁的方法
操作系统内存管理
基础内存管理介绍
常见的几种内存管理机制
快表和多级页表
分页机制和分段机制的共同点和区别
逻辑(虚拟)地址和物理地址CPU 寻址了解吗?
为什么需要虚拟地址空间?
虚拟内存什么是虚拟内存(Virtual Memory)?
局部性原理
虚拟存储器虚拟内存的技术实现
页面置换算法

Linux 基础知识

Linux 文件系统概览
Linux 文件系统简介
inode 介绍
Linux 文件类型
Linux 目录树
Linux 基本命令
目录切换命令
目录的操作命令(增删改查)
文件的操作命令(增删改查)
压缩文件的操作命令
Linux 的权限命令
Linux 用户管理
Linux 系统用户组的管理
其他常用命令
Linux 环境变量
环境变量分类读取
环境变量修改

Shell基础

数据结构与算法

数据库基础知识

什么是数据库, 数据库管理系统, 数据库系统, 数据库管理员?
什么是元组, 码, 候选码, 主码, 外码, 主属性, 非主属性?
什么是 ER 图(实体、属性、联系)?
数据库范式了解吗?1NF(第一范式)2NF(第二范式)3NF(第三范式)
主键和外键有什么区别?
为什么不推荐使用外键与级联?
什么是存储过程?
drop、delete 与 truncate 区别?
用法不同属于不同的数据库语言执行速度不同数据库设计通常分为哪几步?

NoSQL基础知识总结

NoSQL 是什么?
SQL 和 NoSQL 有什么区别?
NoSQL 数据库有什么优势?
NoSQL 数据库有哪些类型?

字符集详解

何为字符集?
有哪些常见的字符集?
ASCII
GB2312
GBK
GB18030
BIG5
Unicode & UTF-8编码
MySQL 字符集

Redis

Redis 基础

什么是 Redis?
Redis 为什么这么快?
分布式缓存常见的技术选型方案有哪些?
说一下 Redis 和 Memcached 的区别和共同点
为什么要用 Redis/为什么要用缓存?
常见的缓存读写策略有哪些?
Redis 应用Redis 除了做缓存,还能做什么?
如何基于 Redis 实现分布式锁?
Redis 可以做消息队列么?
有关消息队列(1. 结构:生产者,代理(服务端、处理消息单元),消费者;2. 场景:异步处理、解耦、流量削峰;3. 常用框架(active MQ, rabitMQ、Kafka、rocketMQ))
Redis 数据结构Redis 常用的数据结构有哪些?
String 的应用场景有哪些?
String 还是 Hash 存储对象数据更好呢?
String 的底层实现是什么?
购物车信息用 String 还是 Hash 存储更好呢?
使用 Redis 实现一个排行榜怎么做?
使用 Set 实现抽奖系统需要用到什么命令?
使用 Bitmap 统计活跃用户怎么做?
使用 HyperLogLog 统计页面 UV 怎么做?
Redis 线程模型Redis 单线程模型了解吗?
Redis6.0 之前为什么不使用多线程?
Redis6.0 之后为何引入了多线程?
Redis 内存管理Redis 给缓存数据设置过期时间有啥用?
Redis 是如何判断数据是否过期的呢?
过期的数据的删除策略了解么?
Redis 内存淘汰机制了解么?
Redis 持久化机制怎么保证 Redis 挂掉之后再重启数据可以进行恢复?
什么是 RDB 持久化?
RDB 创建快照时会阻塞主线程吗?
什么是 AOF 持久化?
AOF 日志是如何实现的?
AOF 重写了解吗?
如何选择 RDB 和 AOF?
Redis 4.0 对于持久化机制做了

刷题

百度校招笔试

  1. 并发:当请求过多,超出线程池负荷的时候,会触发拒绝策略。
  2. spring:关于AOP术语
  3. jvm: 垃圾回收策略
  4. Java语言基础
  5. 分布式(锁)
  6. 数据结构与算法(折半)
  7. 数据结构与算法(哈夫曼编码)
  8. 数据结构与算法(栈)
  9. sql
  10. sql
  11. 数据结构与算法(堆)
  12. 数据结构与算法(时间复杂度、递归、树)
  13. 操作系统(磁盘调度,电梯调度SCAN)
  14. Java并发(多线程)
  15. shell 脚本语言
  16. linux 命令
  17. 前端(前端攻击)
  18. 数据结构与算法(快速排序)
  19. Java并发(进程与线程)
  20. 计算机网络(TCP报文)
  21. 编程题1,2,3
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值