前言
一般技术面试官都会通过自己的方式去考察程序员的技术功底与基础理论知识。
很多时候,面试官问的问题会和自己准备的“题库”中的问题不太一样,即使做了复盘,下次面试还是不知道该从何处下手。
为此鄙人软磨硬泡才把阿里 P8 专门归纳整理的《Java 进阶知识典藏版》搞来,内容涵盖:大厂面经、计算机基础、Java、JVM、spring、算法、微服务、分布式、技术脑图等等
【Java 进阶知识典藏版原文档见文末】
【美团】面试真题:
-
Spring AOP 底层原理
-
HashMap 的底层数据结构是怎样的 ?
-
HashMap 的扩容机制是怎样的?
-
ConcurrentHashMap 的存储结构是怎样的?
-
线程池大小如何设置?
-
IO 密集=Ncpu*2 是怎么计算出来?
-
G1 收集器有哪些特点?
-
你有哪些手段来排查 OOM 的问题?
-
请你谈谈 MySQL 事务隔离级别,MySQL 的默认隔离级别是什么?
-
可重复读解决了哪些问题?
-
对 SQL 慢查询会考虑哪些优化 ?
-
谈一谈缓存穿透、缓存击穿和缓存雪崩,以及解决办法?
-
LRU 是什么?如何实现?
-
什么是堆内存?参数如何设置?
-
栈和队列,举个使用场景例子?
-
MySQL 为什么 InnoDB 是默认引擎?
-
MySQL 索引底层结构为什么使用 B+树?
-
B+ 树的叶子节点链表是单向还是双向?
-
MVCC 是什么?它的底层原理是什么?
-
undo log 具体怎么回滚事务 ?
-
如何查询慢 SQL 产生的原因
-
索引失效的情况有哪些?
-
一个 Redis 实例最多能存放多少的 keys?List、Set、Sorted Set 他们最 多能存放多少元素?
-
Redis 数据结构 压缩列表和跳跃表的区别
-
为什么数据量小的时候用压缩列表 ?
-
Redis 主从同步是怎么实现的?
-
Redis 持久化 RDB 和 AOF 优缺点
-
谈谈自己对于 Spring AOP 的了解?
-
Spring Bean 容器的生命周期是什么样的?
-
RabbitMQ 如何保证消息不丢失 ?
【阿里】面试真题
-
TCP 和 UDP 区别?
-
TCP/IP 协议涉及哪几层架构?
-
描述下 TCP 连接 4 次挥手的过程?为什么要 4 次挥手?
-
计算机插上电源操作系统做了什么?
-
Linux 操作系统设备文件有哪些?
-
多线程同步有哪些方法?
-
一个对象的两个方法加 synchronized,一个线程进去 sleep,另一个线程 可以进入到另一个方法吗?
-
什么是可重入锁(ReentrantLock)?
-
创建线程的三个方法是什么?
-
Java 怎么获取多线程的返回值?
-
线程池有哪几种创建方式?
-
线程池参数有哪些?
-
线程池拒绝策略有哪些?
-
你认为对线程池的核心参数实现自定义可配置,三个核心参数是?
-
ThreadPoolExecutor 线程池,corePoolSize=5, maximumPoolSize=10,queueCapacity=10,有 20 个耗时任务 交给这个 线程池执行,线程池会如何执行这 20 个任务?
-
给用户发消息任务超出队列,你用哪个拒绝策略?有其他方法吗 ?
-
Java8 新特性有哪些了解?
-
什么时候用多线程、为什么要设计多线程?
-
多线程越多效率越高吗?
-
多线程会产生哪些并发问题 ?
-
Mybatis 如何将对象转换成 SQL?
-
虚拟内存是什么,虚拟内存的原理是什么?
-
栈会溢出吗?什么时候溢出?方法区会溢出吗?
-
JVM 如何加载类的?
-
自己写过 String 类能加载吗,之前的 String 是什么时候加载进去的?
-
描述 ThreadLocal(线程本地变量)的底层实现原理及常用场景?
-
什么是微服务架构?
-
微服务有哪些特点?
-
Lambda 表达式是啥?优缺点?
-
讲一下 Lambda 的表达式作用域(Lambda Scopes)。
-
MySQL 事务的特性有什么,说一下分别是什么意思?
【京东】面试真题
-
哪些情况下的对象会被垃圾回收机制处理掉?
-
讲一下常见编码方式?
-
utf-8 编码中的中文占几个字节;int 型几个字节?
-
静态代理和动态代理的区别,什么场景使用?
-
简述下 Java 的异常体系。
-
谈谈你对解析与分派的认识。
-
修改对象 A 的 equals 方法的签名,那么使用 HashMap 存放这个对象实例 的时候,会用哪个 equals 方法?
-
Java 中实现多态的机制是什么?
-
如何将一个 Java 对象序列化到文件里?
-
说说你对 Java 反射的理解。
-
说说你对 Java 注解的理解。
-
说一下泛型原理,并举例说明。
-
谈谈你对 Java 中 String 的了解。
-
String 为什么要设计成不可变的?
-
Redis 常见的几种数据结构说一下?各自的使用场景?
-
谈一谈缓存穿透、缓存击穿和缓存雪崩,以及各自的解决方案?
-
讲下 Kafka、RabbitMQ、RocketMQ 之间的区别是什么?
-
Kafka 的架构说一下?
-
Kafka 怎么保证消息是有序的?
-
Kafka 怎么保证消息不丢失?
-
Kafka 怎么解决重复消费?
-
介绍下 MySQL 聚簇索引与非聚簇索引的区别(InnoDB 与 Myisam 引 擎)?
-
然后给一个联合索引(a,b)和一个语句,select * from table where b = 'xxx', 判断是否能命中索引?为什么?
-
Java 多线程有哪几种实现方式?
-
用过 ConcurrentHashMap,讲一下他和 HashTable 的不同之处?
-
Java 怎么实现线程安全?
-
描述 ThreadLocal(线程本地变量)的底层实现原理及常用场景。
-
介绍下 Spring Bean 都有哪些作用域 ?
-
注解 @Autowired 和 @Resource 有什么区别?
-
RPC 的实现基础?
-
CMS,G1 垃圾回收器中的三色标记了解吗?
【腾讯】面试真题
-
Kafka 是什么?主要应用场景有哪些?
-
kafka 为什么有 topic 还要用 patition?
-
客户端和服务器之间最多能建立多少个连接 ?
-
HashMap 结构,线程不安全举个例子?
-
MySQL 索引分类?
-
了解线程 & 进程的区别吗?
-
Java 进程间的几种通信方式?
-
多台服务器同时对一个数据定时任务,怎么处理 ?
-
常见分布式锁的几种实现方式?
-
Redis 分布式锁实现原理?
-
Redis 的数据类型及它们的使用场景?
-
信号量与信号的区别?
-
select 和 epoll 的底层结构是什么原理
-
场景题:1 亿个数据取出最大前 100 个有什么方法?
-
kafka 如何保证消息可靠?
-
消息队列的使用场景?
-
乐观锁和悲观锁的理解及如何实现,有哪些实现方式?
-
ArrayList 和 LinkedList 的区别在哪里?
-
谈谈你对 SQL 注入式攻击的理解?
-
数据库事务的特性?
-
Redis 如何做内存优化?
-
缓存穿透,缓存击穿,缓存雪崩都是咋回事?解决办法?
-
数组和链表的区别?当数组内存过大时会出现什么问题?链表增删过多会 出现的什么问题?
-
常见排序算法和分别的复杂度?
-
jdk 1.8 的 JVM 内存划分模型 ,堆和栈的区别
-
简单描述 MySQL 中,索引,主键,唯一索引,联合索引的区别,对数据 库的性能有什么影响(从读写两方面)?
-
I/O 模型有哪几种?
-
当你用浏览器打开一个链接的时候,计算机做了哪些工作步骤?
-
虚拟 DOM 的优劣如何?
-
幻读是什么,用什么隔离级别可以防止幻读?
【百度】面试真题
-
SpingBoot 也有定时任务?是什么注解?
-
请描述线程的生命周期,它们之间如何切换?
-
什么情况线程会进入 WAITING 状态?
-
简述多进程开发中 join 和 deamon 的区别?
-
异步和同步、阻塞和非阻塞之间的区别?
-
为什么要分内核态和用户态?
-
说下类加载器与类加载?加载的类信息放在哪个区域?
-
UDP 协议和 TCP 协议的区别?
-
limit 1000000 加载很慢的话,你是怎么解决的呢?
-
MySQL 的索引分类是什么?
-
什么是散列表? select * 和 select 1?
-
MySQL 的主从复制了解吗?
-
Spring 框架事务注解用什么注解?使用该注解的失效场景?
-
final、finally、finallize?finally 是在 return 之前执行还是之后?finally 块 里的代码一定会执行吗?
-
I/O 多路复用实现方式有哪些?
-
select、poll、epoll 区别有哪些?
-
哈希算法解决哈希冲突方式有哪些?
-
如何保证 Redis 中的数据不丢失?
-
如何保证 Redis 中的数据都是热点数据?
-
Redis 持久化机制是如何做的?
-
Redis 为什么在使用 RDB 进行快照时会通过子进程的方式进行实现?
-
介绍下 MySQL 的主从复制原理?产生主从延迟的原因?
-
父进程如果宕掉,子进程会怎样?
-
孤儿进程和僵尸进程有什么区别?
-
MySQL 中有哪几种锁?
-
互斥锁(mutex)和自旋锁(spinlock)分别在什么场景使用?
-
描述 Synchronized、ReentrantLock 的区别 ?
-
HashMap 扩容操作是怎么实现的?
-
ConcurrentHashMap 1.7 与 1.8 区别?
-
如何使用 Java 的反射?
【华为】面试真题
-
Java 常用集合及特点?
-
开启一个线程的方法?
-
Java 面向对象包括哪些特性,怎么理解的?
-
Java 如何保证线程安全?
-
介绍 Spring MVC 的工作流程 ?
-
Spring 框架中用到了哪些设计模式?
-
Redis 的特点是什么?
-
为什么使用 Redis,有什么好处?
-
Redis 雪崩和击穿了解吗?
-
什么是面向对象,谈谈你的理解?
-
访问数据库除了 JDBC 还有什么?
-
你知道有哪些设计原则?
-
在生产环境 Linux 服务器上,发现某台运行 Java 服务的服务器的 CPU100%,不借助任何可视化工具,怎么进行问题的定位?
-
JDK 里面带的工具你知道哪些?
-
基本数据类型 bit 长度?
-
char 能不能存中文?
-
谈谈你对泛型的理解?
-
Java 程序是怎样运行的?
-
GC root 有哪些?
-
栈帧的大小什么时候确定?
-
静态 filed 声明和构造器哪个先执行?
-
线程创建方式是什么?
-
传统 I/O 跟 NIO 的区别?
-
消息队列的在各种场景下如何选型?
-
Java 的安全性体现在哪里?
-
static 方法怎么访问非 static 变量?
-
讲下你理解的 Java 多继承?
-
Java 基本类型有哪些?
-
线程池如果满了会怎么样?
-
什么是双亲委派机制,它有什么作用?
各知识点面试题整理
这份 Java 进阶知识典藏版内容非常的全面,真的可以好好补一补,希望大家都能拿到理想的薪资和 offer!【Java 进阶知识典藏版原文档👇】