前言

面试:如果不准备充分的面试,完全是浪费时间,更是对自己的不负责。

今天给大家分享下我整理的BATJava架构面试专题及答案,其中大部分都是大企业面试常问的面试题,可以对照这查漏补缺,当然了,这里所列的肯定不可能覆盖全部方式,不过也希望能对即将找工作的朋友起到一些帮助!

面试题以及分类整理如下:

Java基础:

  • 接口与抽象类的区别?
  • Java中的异常有哪几类?分别怎么使用?
  • 常用的集合类有哪些?比如List如何排序?
  • ArrayList和LinkedList内部的实现大致是怎样的?他们之间的区别和优缺点?
  • 内存溢出是怎么回事?请举一个例子?
  • ==和equals的区别?
  • hashCode方法的作用?
  • NIO是什么?适用于何种场景?
  • HashMap实现原理,如何保证HashMap的线程安全?
  • JVM内存结构,为什么需要GC?
  • NIO模型,select/epoll的区别,多路复用的原理
  • Java中一个字符占多少个字节,扩展再问int, long, double占多少字节
  • 创建一个类的实例都有哪些办法?
  • final/finally/finalize的区别?
  • Session/Cookie的区别?
  • String/StringBuffer/StringBuilder的区别,扩展再问他们的实现?
  • Servlet的生命周期?
  • 如何用Java分配一段连续的1G的内存空间?需要注意些什么?
  • Java有自己的内存回收机制,但为什么还存在内存泄露的问题呢?
  • 什么是java序列化,如何实现java序列化?(写一个实例)?
  • String s = new String("abc");创建了几个String Object?

多线程/并发:

  • 如何创建线程?如何保证线程安全?
  • 如何实现一个线程安全的数据结构
  • 如何避免死锁
  • Volatile关键字的作用?
  • HashMap在多线程环境下使用需要注意什么?为什么?
  • Java程序中启动一个线程是用run还是start?
  • 什么是守护线程?有什么用?
  • 什么是死锁?如何避免
  • 线程和进程的差别是什么?
  • Java里面的Threadlocal是怎样实现的?
  • ConcurrentHashMap的实现原理是?
  • sleep和wait区别
  • notify和notifyAll区别
  • volatile关键字的作
  • ThreadLocal的作用与实现
  • 两个线程如何串行执行
  • 上下文切换是什么含义
  • 可以运行时kill掉一个线程吗?
  • 什么是条件锁、读写锁、自旋锁、可重入锁?
  • 线程池ThreadPoolExecutor的实现原理?


JVM

  • Java 内存分配?
  • Java 堆的结构是什么样子的?
  • 什么是堆中的永久代(Perm Gen space)?
  • 说说各个区域的作用?
  • Java 中会存在内存泄漏吗,简述一下?
  • Java 类加载过程?
  • 描述一下 JVM 加载 Class 文件的原理机制?
  • 什么是类加载器?
  • 类加载器有哪些?
  • 什么是tomcat类加载机制?
  • 类加载器双亲委派模型机制?
  • 什么是GC? 为什么要有 GC?
  • 简述一下Java 垃圾回收机制?
  • 如何判断一个对象是否存活?
  • 垃圾回收的优点和原理,并考虑 2 种回收机制?
  • 垃圾回收器的基本原理是什么?
  • 垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收?
  • 深拷贝和浅拷贝?
  • System.gc() 和 Runtime.gc() 会做些什么?
  • 什么是分布式垃圾回收(DGC)?它是如何工作的?
  • 串行(serial)收集器和吞吐量(throughput)收集器的区别是什么?
  • 在 Java 中,对象什么时候可以被垃圾回收?
  • 简述Minor GC 和 Major GC?
  • Java 中垃圾收集的方法有哪些?
  • 讲讲你理解的性能评价及测试指标?
  • 常用的性能优化方式有哪些?
  • 说说分布式缓存和一致性哈希?
  • 同步与异步?阻塞与非阻塞?
  • 什么是GC调优?
  • 常见异步的手段有哪些?

Spring

  • 为什么需要代理模式?
  • 讲讲静态代理模式的优点及其瓶颈?
  • 对Java 接口代理模式的实现原理的理解?
  • 如何使用 Java 反射实现动态代理?
  • Java 接口代理模式的指定增强?
  • 谈谈对Cglib 类增强动态代理的实现?
  • 怎么理解面向切面编程的切面?
  • 讲解OOP与AOP的简单对比?
  • 讲解JDK 动态代理和 CGLIB 代理原理以及区别?
  • 讲解Spring 框架中基于 Schema 的 AOP 实现原理?
  • 讲解Spring 框架中如何基于 AOP 实现的事务管理?
  • 谈谈对控制反转的设计思想的理解?
  • 怎么理解 Spring IOC 容器?
  • Spring IOC 怎么管理 Bean 之间的依赖关系,怎么避免循环依赖?
  • 对Spring IOC 容器的依赖注入的理解?
  • 说说对Spring IOC 的单例模式和高级特性?
  • BeanFactory 和 FactoryBean 有什么区别?
  • BeanFactory 和 ApplicationContext 又有什么不同?
  • Spring 在 Bean 创建过程中是如何解决循环依赖的?
  • 谈谈Spring Bean 创建过程中的设计模式?

数据库

  • MySQL 有哪些存储引擎啊?都有什么区别?
  • Float、Decimal 存储金额的区别?
  • Datetime、Timestamp 存储时间的区别?
  • Char、Varchar、Varbinary 存储字符的区别?
  • 对比一下B+树索引和 Hash索引?
  • MySQL索引类型有?
  • 如何管理 MySQL索引?
  • 对Explain参数及重要参数的理解?
  • 索引利弊是什么及索引分类?
  • 聚簇索引和非聚簇索引的区别?
  • B+tree 如何进行优化?索引遵循哪些原则?
  • 索引与锁有什么关系?
  • 还有什么其他的索引类型,各自索引有哪些优缺点?
  • 谈谈对Innodb事务的理解?
  • 说说数据库事务特点及潜在问题?
  • 什么是MySQL隔离级别?
  • 有多少种事务失效的场景,如何解决?
  • 一致性非锁定读和一致性锁定读是什么?
  • Innodb如何解决幻读?
  • 讲讲Innodb行锁?
  • 死锁及监控是什么?
  • 自增长与锁 ,锁的算法,锁问题,锁升级是什么?
  • 乐观锁的线程如何做失败补偿?
  • 高并发场景(领红包)如何防止死锁,保证数据一致性?
  • 谈谈MySQL的锁并发?
  • 查询优化的基本思路是什么?
  • 说说MySQL读写分离、分库分表?
  • 表结构对性能有什么影响?
  • 浅谈索引优化?
  • 说说Sql优化的几点原则?
  • MySQL表设计及规范?
  • 说说MySQL几种存储引擎应用场景?
  • MySQL常用优化方式有哪些?
  • MySQL常用监控?
  • MySQL瓶颈分析?

缓存

  • redis数据结构有哪些?
  • Redis缓存穿透,缓存雪崩?
  • 如何使用Redis来实现分布式锁?
  • Redis的并发竞争问题如何解决?
  • Redis持久化的几种方式,优缺点是什么,怎么实现的?
  • Redis的缓存失效策略?
  • Redis集群,高可用,原理?
  • Redis缓存分片?
  • Redis的数据淘汰策略?
  • redis队列应用场景?
  • 分布式使用场景(储存session)?

网络编程

  • TCP建立连接和断开连接的过程?
  • HTTP协议的交互流程,HTTP和HTTPS的差异,SSL的交互流程?
  • TCP的滑动窗口协议有什么用?
  • HTTP协议都有哪些方法?
  • Socket交互的基本流程?
  • 讲讲tcp协议(建连过程,慢启动,滑动窗口,七层模型)?
  • webservice协议(wsdl/soap格式,与restt办议的区别)?
  • 说说Netty线程模型,什么是零拷贝?
  • TCP三次握手、四次挥手?
  • DNS解析过程?
  • TCP如何保证数据的可靠传输的?

分布式

  • 什么是CAP定理?
  • 说说CAP理论和BASE理论?
  • 什么是最终一致性?最终一致性实现方式?
  • 什么是一致性Hash?
  • 讲讲分布式事务?
  • 如何实现分布式锁?
  • 如何实现分布式 Session?
  • 如何保证消息的一致性?
  • 负载均衡的理解?
  • 正向代理和反向代理?
  • CDN实现原理?
  • 怎么提升系统的QPS和吞吐?
  • Dubbo的底层实现原理和机制?
  • 描述一个服务从发布到被消费的详细过程?
  • 分布式系统怎么做服务治理?
  • 消息中间件如何解决消息丢失问题?
  • Dubbo的服务请求失败怎么处理?
  • 对分布式事务的理解?
  • 如何实现负载均衡,有哪些算法可以实现?
  • Zookeeper的用途,选举的原理是什么?
  • 讲讲数据的垂直拆分水平拆分?
  • zookeeper原理和适用场景?
  • zookeeper watch机制?
  • redis/zk节点宕机如何处理?
  • 分布式集群下如何做到唯一序列号?
  • 用过哪些MQ,怎么用的,和其他mq比较有什么优缺点,MQ的连接是线程安全的吗?
  • MQ系统的数据如何保证不丢失?
  • 列举出能想到的数据库分库分表策略?

由于面试题题目及答案的内容太多,不能全部展示出来。
我这里已经全部整理成面试专题文档还有一份大厂面试场景pdf。希望大家都能够拿到一个心怡的offer。


大厂面试场景文档总结(点击此处获取文档完整版