金三银四还在继续,现在还能抓住银四的尾巴,作为一个开发人员,你是否面上了自己理想的公司,薪资达到心中理想的高度?
面试:如果不准备充分的面试,完全是浪费时间,更是对自己的不负责。
今天给大家分享下我整理的Java架构面试专题及答案,其中大部分都是大企业面试常问的面试题,可以对照这查漏补缺,当然了,这里所列的肯定不可能覆盖全部,不过也希望能对即将找工作的朋友起到一些帮助!在这由于文字很多,我总结了java面试所涉及到的常问范围及架构面试专题和答案和架构视频资料免费分享给大家,文末有领取!
并发编程:
- 什么是多线程并发和并行?
- 什么是线程安全问题?
- 什么是共享变量的内存可见性问题?
- 什么是Java中原子性操作?
- 什么是Java中的CAS操作,AtomicLong实现原理?
- 什么是Java指令重排序?
- Java中Synchronized关键字的内存语义是什么?
- Java中Volatile关键字的内存语义是什么?
- 什么是伪共享,为何会出现,以及如何避免?
- 什么是可重入锁、乐观锁、悲观锁、公平锁、非公平锁、独占锁、共享锁?
- 讲讲ThreadLocal 的实现原理?
- ThreadLocal 作为变量的线程隔离方式,其内部是如何做的?
- 说说InheritableThreadLocal 的实现原理?
- InheritableThreadLocal 是如何弥补 ThreadLocal 不支持继承的特性?
- CyclicBarrier内部的实现与 CountDownLatch 有何不同?
- 随机数生成器 Random 类如何使用 CAS 算法保证多线程下新种子的唯一性?
- ThreadLocalRandom 是如何利用 ThreadLocal 的原理来解决 Random 的局限性?
- Spring 框架中如何使用 ThreadLocal 实现 request scope 作用域 Bean?
- 并发包中锁的实现底层(对AQS的理解)?
- 讲讲独占锁 ReentrantLock 原理?
- 谈谈读写锁 ReentrantReadWriteLock 原理?
- StampedLock 锁原理的理解?
- 谈下对基于链表的非阻塞无界队列 ConcurrentLinkedQueue 原理的理解?
- ConcurrentLinkedQueue 内部是如何使用 CAS 非阻塞算法来保证多线程下入队出队操作的线程安全?
- 基于链表的阻塞队列 LinkedBlockingQueue 原理。
- 阻塞队列LinkedBlockingQueue 内部是如何使用两个独占锁 ReentrantLock 以及对应的条件变量保证多线程先入队出队操作的线程安全?
- 为什么不使用一把锁,使用两把为何能提高并发度?
- 谈谈对无界优先级队列 PriorityBlockingQueue 原理?
- PriorityBlockingQueue 内部使用堆算法保证每次出队都是优先级最高的元素,元素入队时候是如何建堆的,元素出队后如何调整堆的平衡的?
- 分析下JUC 中倒数计数器 CountDownLatch 的使用与原理?
- CountDownLatch 与线程的 Join 方法区别是什么?
- 讲讲对JUC 中回环屏障 CyclicBarrier 的使用?
- CyclicBarrier内部的实现与 CountDownLatch 有何不同?
- Semaphore 的内部实现是怎样的?
- 简单对比同步器实现,谈谈你的看法?
- 并发组件CopyOnWriteArrayList 是如何通过写时拷贝实现并发安全的 List?
JVM
作为 Java 的从业者,在找工作的时候,一定会被问及关于 JVM 相关的知识。 JVM 知识的掌握程度,在很多面试官眼里是候选人技术深度的一个重要评判标准。 在这里将详细的整理常见的 JVM 面试题目,并给出标准答案。
- Java 内存分配?
- Java 堆的结构是什么样子的?
- 什么是堆中的永久代(Perm Gen space)?
- 简述各个版本内存区域的变化?
- 说说各个区域的作用?
- Java 中会存在内存泄漏吗,简述一下?
- Java 类加载过程?
- 描述一下 JVM 加载 Class 文件的原理机制?
- 什么是类加载器?
- 类加载器有哪些?
- 什么是tomcat类加载机制?
- 类加载器双亲委派模型机制?
- 什么是GC? 为什么要有 GC?
- 简述一下Java 垃圾回收机制?
- 如何判断一个对象是否存活?
- 垃圾回收的优点和原理,并考虑 2 种回收机制?
- 垃圾回收器的基本原理是什么?
- 垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收?
- 深拷贝和浅拷贝?
- System.gc() 和 Runtime.gc() 会做些什么?
- 如果对象的引用被置为 null,垃圾收集器是否会立即释放对象占用的内存?
- 什么是分布式垃圾回收(DGC)?它是如何工作的?
- 串行(serial)收集器和吞吐量(throughput)收集器的区别是什么?
- 在 Java 中,对象什么时候可以被垃圾回收?
- 简述Minor GC 和 Major GC?
- JVM 的永久代中会发生垃圾回收么?
- Java 中垃圾收集的方法有哪些?
- 讲讲你理解的性能评价及测试指标?
- 常用的性能优化方式有哪些?
- 说说分布式缓存和一致性哈希?
- 同步与异步?阻塞与非阻塞?
- 什么是GC调优?
- 常见异步的手段有哪些?
Java后端高频考点问题—后端技术体系
框架部分(Spring,MyBatis,SpringMVC)
对于开发同学来说,Spring 框架熟悉又陌生。 熟悉:开发过程中无时无刻不在使用 Spring 的知识点;陌生:对于基本理论知识疏于整理与记忆。导致很多同学面试时对于 Spring 相关的题目知其答案,但表达不够完整准确。
Spring
- 为什么需要代理模式?
- 讲讲静态代理模式的优点及其瓶颈?
- 对Java 接口代理模式的实现原理的理解?
- 如何使用 Java 反射实现动态代理?
- Java 接口代理模式的指定增强?
- 谈谈对Cglib 类增强动态代理的实现?
- point cut,advice,Join point是什么?
- join point 和 point cut 的区别?
- 怎么理解面向切面编程的切面?
- 谈谈对SpringAOP Weaving(织入)的理解?
- 谈谈SpringAOP Introduction(引入)的理解?
- 讲解OOP与AOP的简单对比?
- 讲解JDK 动态代理和 CGLIB 代理原理以及区别?
- 讲解Spring 框架中基于 Schema 的 AOP 实现原理?
- 讲解Spring 框架中如何基于 AOP 实现的事务管理?
- 谈谈对控制反转的设计思想的理解?
- 怎么理解 Spring IOC 容器?
- Spring 中有多少种 IOC 容器?
- Spring IOC 怎么管理 Bean 之间的依赖关系,怎么避免循环依赖?
- 对Spring IOC 容器的依赖注入的理解?
- 说说对Spring IOC 的单例模式和高级特性?
- BeanFactory 和 FactoryBean 有什么区别,BeanFactory 和 ApplicationContext 又有什么不同?
- Spring 在 Bean 创建过程中是如何解决循环依赖的?
- 谈谈Spring Bean 创建过程中的设计模式?
微服务(Spring Boot,Spring Cloud,Dubbo)
Redis缓存
像 MySQL 这种类型的关系型数据库肯定是无法满足这么高并发的请求,因为读写速度慢、吞吐量太低。这时就要选择 Redis 这种速度快、吞吐量高的内存型数据库。那么随之而来的就是 Redis 一系列原理的问题
负载均衡
一般来说,4C8G 的服务器一般能处理几百至几千 QPS 的请求,20w/s 的 QPS 至少需要上百台机器才能抗住这么大的量级。那么问题来了,用户的一次操作,客户端会发出一次请求,服务端有上百台服务器,那么究竟把这个请求交给哪台服务器处理呢?怎么保证服务器的负载基本一致呢?就牵涉到负载均衡的一些技术点了。
消息队列
客户端的请求经过负载均衡服务器后会转发到后端服务器 A 进行处理,后端服务器 A 处理后可能需要把数据共享给 N 个后端服务器进行消费。此时A就会发出一条消息写入到消息队列。这 N 个后端服务器去消费这个消息队列来获取数据。这里就牵涉到以下知识点:1.常用的消息队列中间件,用过哪些?(RabbitMQ、RocketMQ、ActiveMQ、Kafka、ZeroMQ、MetaMq 等,随便选择一种深度介绍即可)2.消息队列的使用场景3.消息队列的两种模式
分布式
由于客户端的请求是分散到上百台服务器去处理的,每台服务器都有自己的行为,这里就涉及到一系列分布式的问题:1.什么是分布式事务?如何保证数据一致性?2.Paxos 协议 、Raft 协议了解过吗?CAP、BASE 理论了解过吗?3.如何实现分布式锁?(基于数据库、zookeeper、Redis 都可实现分布式锁,还有很多方式可实现,只需要答出一两种即可)
- 什么是CAP定理?
- 说说CAP理论和BASE理论?
- 什么是最终一致性?最终一致性实现方式?
- 什么是一致性Hash?
- 讲讲分布式事务?
- 如何实现分布式锁?
- 如何实现分布式 Session?
- 如何保证消息的一致性?
- 负载均衡的理解?
- 正向代理和反向代理?
- CDN实现原理?
- 怎么提升系统的QPS和吞吐?
- Dubbo的底层实现原理和机制?
- 描述一个服务从发布到被消费的详细过程?
- 分布式系统怎么做服务治理?
- 消息中间件如何解决消息丢失问题?
- Dubbo的服务请求失败怎么处理?
- 对分布式事务的理解?
- 如何实现负载均衡,有哪些算法可以实现?
- Zookeeper的用途,选举的原理是什么?
- 讲讲数据的垂直拆分水平拆分?
- zookeeper原理和适用场景?
- zookeeper watch机制?
- redis/zk节点宕机如何处理?
- 分布式集群下如何做到唯一序列号?
- 用过哪些MQ,怎么用的,和其他mq比较有什么优缺点,MQ的连接是线程安全的吗?
- MQ系统的数据如何保证不丢失?
- 列举出能想到的数据库分库分表策略?
高并发
Java 并发问题一直是各个大厂面试的重点之一,然而我发现很多候选人在面试时,常常表示对各种并发原理一脸懵逼,好像知道一些却又讲不清楚,最终导致面试失败。
数据库
- MySQL 有哪些存储引擎啊?都有什么区别?
- Float、Decimal 存储金额的区别?
- Datetime、Timestamp 存储时间的区别?
- Char、Varchar、Varbinary 存储字符的区别?
- 什么是索引?
- 对比一下B+树索引和 Hash索引?
- MySQL索引类型有?
- 如何管理 MySQL索引?
- 对Explain参数及重要参数的理解?
- 索引利弊是什么及索引分类?
- 二叉树的转置是什么?
- 聚簇索引和非聚簇索引的区别?
- B+tree 如何进行优化?索引遵循哪些原则?存储引擎会进行哪些自动优化?到底何时索引会失效?
- 索引与锁有什么关系?
- 还有什么其他的索引类型,各自索引有哪些优缺点?
- 谈谈对Innodb事务的理解?
- 说说数据库事务特点及潜在问题?
- 什么是MySQL隔离级别?
- 有多少种事务失效的场景,如何解决?
- 一致性非锁定读和一致性锁定读是什么?
- Innodb如何解决幻读?
- 讲讲Innodb行锁?
- 死锁及监控是什么?
- 自增长与锁 ,锁的算法,锁问题,锁升级是什么?
- 乐观锁的线程如何做失败补偿?
- 高并发场景(领红包)如何防止死锁,保证数据一致性?
- 谈谈MySQL的锁并发?
- 回表和集群因子是什么?
- 讲讲表与表之间的关系?
- 了解查询优化器模块;
- 查询优化的基本思路是什么?
- 说说MySQL读写分离、分库分表?
- Query语句对数据库性能有什么影响?
- Schema设计对系统性能有什么影响?
- 硬件环境对数据库的性能有什么影响?
- 表结构对性能有什么影响?
- 浅谈索引优化?
- JOIN的原理是什么?
- 说说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如何保证数据的可靠传输的?
面试文件获取方式:
点击传送门领取面试资料(助你面试无忧)
合理利用自己每一分每一秒的时间来学习提升自己,不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代!