2019最新java常见面试题整理

操作系统
说一下线程和进程,它们的区别
同步和异步的区别
阻塞和非阻塞的区别
操作系统中死锁的四个必要条件
mmap和普通文件读写的区别,mmap的注意点
CPU密集型和IO密集型的区别
Linux
linux 用过的命令
kill 用法,某个进程杀不掉的原因(进入内核态,忽略 kill 信号)
系统管理命令(如查看内存- 网络情况)
管道的使用
grep 的使用,一定要掌握,每次都会问在文件中查找
shell 脚本
find 命令
awk 使用
讲一下linux的Swap分区
硬链接和软连接区别
讲一下epoll的基本原理,优点
讲一下内核态与用户态,为什么要有用户态和内核态,如何切换
讲一下五种IO模型
计算机网络
网络为什么要分层
为什么有IP地址还需要MAC地址
IP 地址子网划分
DNS 解析过程
URI和URL区别
说一下 TCP 和 UDP 的区别,优缺点
TCP如何保证可靠传输?怎么做到不丢,不重,不漏(三次握手、滑动窗口、流量控制、拥塞控制)
TCP三次握手、TCP四次挥手
TCP粘包和拆包产生的原因?解决策略?
谈一下你对 HTTP 的理解?
http2 比1.1主要改进了什么,有什么好的办法解决头部阻塞嘛?
既然说 HTTP 是无状态的,那服务器怎么记住上次请求的用户?
GET和POST区别
讲一下你熟悉的HTTP状态码,它们的含义是什么?
讲一下一次完整的HTTP请求过程
HTTPS和HTTP的区别,https是如何保证数据传输的安全?
Session 和 Cookie 区别?
设计模式
说一下你熟悉的设计模式?
简单工厂和抽象工厂有什么区别?
什么是单例模式?在什么情况下需要使用单例模式?
Java基础系列
容器
Collection 和 Collections 有什么区别?
List、Set、Map 之间的区别是什么?
ArrayList初始化默认长度、扩容、拷贝、增加和删除时间复杂度和空间复杂度
ArrayList 是一个线程安全的集合类吗?
ArrayList 和 LinkedList 的区别是什么?
如何实现数组和 List 之间的转换?
ArrayList 和 Vector 的区别是什么?
迭代器 Iterator 是什么?怎么使用?有什么特点?
在 Queue 中 poll()和 remove()有什么区别?
说一下 HashMap 的底层数据结构?
HashMap 和 Hashtable 有什么区别?
如何决定使用 HashMap 还是 TreeMap?
HashMap 存储元素时 key 完全一样该怎么处理?
HashMap 的默认长度是多少?如何扩容的?
Hash 会有什么问题 ?怎么避免或者减少哈希碰撞 ?
JDK 1.8 的 HashMap 有什么变化?为什么 JDK 1.7 是头插法,JDK 1.8 是尾插法?
ConcurrentHashMap 和 HashMap 的区别?为什么 ConcurrentHashMap 会线程安全?
ConcurrentHashMap 虽然是线程安全的,但它也存在什么问题?
了解 TreeMap 吗?TreeMap 最大的特点是什么?为什么已经有了 HashMap 了还要有 TreeMap 类?
说一下 Fail-Fast 机制,结合源码说一下
哪些集合类是线程安全的?
怎么确保一个集合不能被修改?
判断一个集合类是否为线程安全的机制是什么?
多线程
线程有哪些状态?
并行和并发有什么区别?
线程和进程的区别?
守护线程是什么?
创建线程有哪几种方式?
说一下 runnable 和 callable 有什么区别?
sleep() 和 wait() 有什么区别?
notify()和 notifyAll()有什么区别?
为什么线程通信的方法wait(), notify()和notifyAll()被定义在Object类里?
线程的 run()和 start()有什么区别?
什么是线程安全?在 java 程序中怎么保证多线程的运行安全?
锁的升级原理是什么?
对象锁和静态锁之间的区别
什么是死锁?怎么防止死锁?
ThreadLocal 是什么?有哪些使用场景?
说一下 synchronized 底层实现原理?
synchronized 和 volatile 的区别是什么?
synchronized 和 Lock 有什么区别?
synchronized 和 ReentrantLock 区别是什么?
说一下 atomic 的原理?
CAS是什么?缺点
说一下 AQS的原理?
如何停止一个线程?
final域的内存语义
线程池
线程池的实现原理,为什么要用线程池
线程池中Executor、ExecuteService、Executors 的区别
线程池都有哪些状态?
线程池中 submit()和 execute()方法有什么区别?
线程池都有哪几种工作队列?
怎么理解×××队列和有界队列?
ThreadPoolExecutor执行的策略
说说几种常见的线程池及使用场景?特点?为什么不推荐通过Executors直接创建线程池
四种拒绝策略
线程池ThreadPoolExecutor参数如何设置
单机上一个线程池正在处理服务,如果忽然断电了怎么办(正在处理和阻塞队列里的请求怎么处理)?
反射
什么是反射?
什么是 Java 序列化?什么情况下需要序列化?
动态代理是什么?有哪些应用?
怎么实现动态代理?
对象拷贝
为什么要使用克隆?
如何实现对象克隆?
深拷贝和浅拷贝区别是什么?
异常
Java 异常的体系结构
throw 和 throws 的区别?
final、finally、finalize 有什么区别?
try-catch-finally 中哪个部分可以省略?
try-catch-finally 中,如果 catch 中 return 了,finally 还会执行吗?
常见的异常类有哪些?
JVM
说一下对jvm的理解,jvm的组成部分,各个部分的存储内容以及常见的jvm的问题排查步骤。
对JVM熟不熟悉?简单说说类加载过程,里面执行的那些操作?
JVM方法区存储内容 是否会动态扩展 是否会出现内存溢出 出现的原因有哪些。
介绍介绍CMS。
介绍介绍G1。
为什么jdk8用metaspace数据结构用来替代perm?
简单谈谈堆外内存以及你的理解和认识。
JVM的内存模型的理解,threadlocal使用场景及注意事项?
JVM老年代和新生代的比例?
jstack,jmap,jutil分别的意义?如何线上排查JVM的相关问题?
Java虚拟机中,数据类型可以分为哪几类?
怎么理解栈、堆?堆中存什么?栈中存什么?
为什么要把堆和栈区分出来呢?栈中不是也可以存储数据吗?
在Java中,什么是是栈的起始点,同是也是程序的起始点?
为什么不把基本类型放堆中呢?
Java中的参数传递时传值呢?还是传引用?
Java中有没有指针的概念?
Java中,栈的大小通过什么参数来设置?
一个空Object对象的占多大空间?
对象引用类型分为哪几类?
讲一讲垃圾回收算法。
如何解决内存碎片的问题?
如何解决同时存在的对象创建和对象回收问题?
讲一讲内存分代及生命周期。
什么情况下触发垃圾回收?
如何选择合适的垃圾收集算法?
JVM中最大堆大小有没有限制?
堆大小通过什么参数设置?
JVM有哪三种垃圾回收器?
吞吐量优先选择什么垃圾回收器?响应时间优先呢?
如何进行JVM调优?有哪些方法?
如何理解内存泄漏问题?有哪些情况会导致内存泄露?如何解决?
MySQL
说一下 ACID 是什么?
说一下四种隔离级别,默认的隔离级别是什么,怎么避免不可重复读?
char 和 varchar 的区别是什么?
float 和 double 的区别是什么?
mysql 的内连接、左连接、右连接有什么区别?
mysql 索引是怎么实现的?
B+树索引和哈希索引的区别
B树和B+树的区别
聚集索引和辅助索引
什么情况下应不建或少建索引,导致索引失效的一些情况
key和index的区别
怎么验证 mysql 的索引是否满足需求?
说一下 mysql 常用的引擎?MyISAM和InnoDB的区别?如何选择?
说一下 mysql 的行锁和表锁?
锁的算法(Record Lock、Gap Lock、Next-Key Lock)
MySQL怎么实现redo log和binlog的一致性
说一下乐观锁和悲观锁?
说一下MySQL分区怎么实现,对业务层透明吗?MySQL支持的分区类型有哪些?使用场景?分区与分表的区别?
mysql主从同步原理
说一下MVVC
mysql 问题排查都有哪些手段?
如何做 mysql 的性能优化?
Netty
Netty为什么比NIO快?
讲一下Netty零拷贝原理,为什么会有内核空间?怎么管理?
NIO一定比IO快吗?什么情况下会比IO慢?
Spring
为什么要使用 spring?
讲一下aop的实现原理?JDK动态代理和CGLIB代理的区别
讲一下ioc的实现原理?
spring 有哪些主要模块?
spring 常用的注入方式有哪些?
spring 中的 bean 是线程安全的吗?
spring 支持几种 bean 的作用域?
spring 自动装配 bean 有哪些方式?
spring 事务实现方式有哪些?事务失效的几种原因
说一下 spring 的事务隔离?
说一下 spring mvc 运行流程?
spring mvc 有哪些组件?
@RequestMapping 的作用是什么?
@Autowired 的作用是什么?
Spring Boot
什么是 Spring Boot?为什么要用 Spring Boot?和Spring有什么区别?
Spring Boot 核心配置文件是什么?
Spring Boot配置文件有哪几种类型?它们有什么区别?
Spring Boot 有哪些方式可以实现热部署?
微服务怎么拆分
讲一下DDD
MyBatis
mybatis的特性
mybatis的#号和$号有什么区别
mybatis如何进行类型转换
mybatis的xml有什么标签
mybatis底层如何加载mapper,以及SQL语句具体怎么执行
mybatis 有哪些执行器(Executor)?
mybatis 有几种分页方式?
RowBounds 是一次性查询全部结果吗?为什么?
mybatis 逻辑分页和物理分页的区别是什么?
mybatis 是否支持延迟加载?延迟加载的原理是什么?
MyBatis 如何处理批量请求?
说一下 mybatis 的一级缓存和二级缓存?(高频)
mybatis 分页插件的实现原理是什么?
mybatis 如何编写一个自定义插件?
消息队列
说说你使用过什么消息中间件?
为什么要在系统里引入消息中间件?
消息中间件技术选型为什么是RabbitMQ?技术选型的依据是什么?
怎么保证消息中间件的高可用性?避免消息中间件故障后引发系统整体故障?
RabbitMQ的高可用性怎么实现。
怎么保证投递出去的消息只有一条,不会出现重复的数据?
消息重复是什么造成的,从生产端和消费端两个角度来考虑
如何保证消息的顺序性?如果不需要保证消息顺序,为什么不需要?
是否遇到过消息积压的生产故障?如果没遇到过,你考虑一下如何应对?
说说RabbitMQ的底层架构原理,逻辑架构、物理架构以及数据持久化机制?
你们RabbitMQ的最高峰QPS每秒是多少?线上如何部署的,部署了多少台机器,机器的配置如何?
说说Kafka的底层架构原理,磁盘上数据如何存储的,整体分布式架构是如何实现的?
说说Kafka是如何保证数据的高容错性的?零拷贝等技术是如何运用的?高吞吐量下如何优化生产者和消费者的性能?
说说你对Kafka源码的理解?
RocketMQ的一个特点是对分布式事务的支持,说说他在分布式事务支持的底层原理?
RocketMQ的源码看过么,聊聊你对RocketMQ源码的理解?
如果让你来动手实现一个分布式消息中间件,整体架构你会如何设计实现?
Redis
Redis 都有哪些数据类型?它们的内部数据结构是什么?分别在哪些场景下使用比较合适?
Redis有人说是单线程和有人说是多线程,你怎么看?Redis 为什么是单线程的?
Redis 和 Memcached 有什么区别?为什么单线程的 Redis 比多线程的 Memcached 效率要高得多?
Redis 的线程模型是什么?讲一下多路I/O复用模型?
Redis主从复制是怎么实现的
什么是 Redis 的雪崩和穿透?Redis 崩溃之后会怎么样?系统该如何应对这种情况?如何处理 Redis 的穿透?
Redis 的持久化有哪几种方式?区别?持久化机制具体底层是如何实现的?
redis 支持的 java 客户端都有哪些?jedis 和 redisson 有哪些区别?
如何保证缓存与数据库的双写一致性?
Redis 的并发竞争问题是什么?如何解决?了解 Redis 事务的 CAS 方案吗?
Redis 集群模式的工作原理?Redis 的 key 是如何寻址的?分布式寻址都有哪些算法?了解一致性 hash 算法吗?如何动态增加和删除一个节点?
Redis 怎么实现分布式锁?有什么缺陷?
Redis 如何做内存优化?
Redis 设置过期时间的原理?
Redis 淘汰策略有哪些?
Redis 常见的性能问题有哪些?该如何解决?
Redis 和MySQL区别,MySQL也有存储文档格式的存储引擎Memory,它们什么区别?
Zookeeper
raft协议相比paxos的优劣
Nginx
讲一下nginx负载均衡,优势,Apache和Nginx区别
cgi和fastcgi区别
Nginx架构、模块关系、accept_mutex的实现以及多进程的负载均衡
nginx部署的时候出现502了吗,500什么时候出现的
Nginx负载均衡导致用户两次调用服务不在一个IP上,怎么保持连接
MongoDB
MongoDB和MySQL区别,MySQL也有存储文档格式的存储引擎Archive,它们什么区别?
Solr
Solr全量索引的时候发现数据有丢失,怎么处理?
Solr地理位置搜索的原理是什么?
倒排索引的优势?
整理不易,喜欢这篇文章的可以给笔者点个赞同,关注一下,每天都会分享Java相关文章!还有不定时的福利赠送,包括整理的学习资料,面试题,源码等~~

猜你喜欢

转载自blog.51cto.com/14440597/2423652