目录
一、基本经历介绍
二、基本面试流程回顾
三、基本面试题总结回顾
(一)Java基础问题整理
(二) Redis相关问题整理
(三)JVM相关问题整理
(四)MySQL相关问题整理
(五)Spring相关问题整理
(五)HTTP相关问题整理
(六)中间件相关问题整理
(七)系统及其他相关问题整理
2017年毕业时,找工作时大多都是问的基本的java基础、设计模式、数据库、Spring等,其他就是读研期间的项目和专利相关,具体的面试题已经忘完了,2019年决定跳槽,先后面试了多家(蚂蚁金服、今日头条、腾讯、美团、京东、小米、百度、中信、永航科技、猫眼电影、瓜子二手车、联想、网易、新浪、滴滴打车等),当时有些面试题都是有记录的,主要针对之前的这些问题做一次总结。
总体上面试都是以自我介绍+项目介绍+项目细节/难点提问+基础知识点考核+算法题这个流程下来的。
相关答案在这里逐步增加:https://blog.csdn.net/xiaofeng10330111/article/details/105360860
1.HashMap和ConcurrentHashMap区别(必考)
2. ConcurrentHashMap的数据结构(必考)
3.高并发HashMap的环是如何产生的
4.HashMap1.7与HashMap1.8的区别,从数据结构上、Hash值的计算上、链表数据的插入方法、内部Entry类的实现上分析?
补充知识点:
HashMap如果我想要让自己的Object作为K应该怎么办?
HashMap相关put操作,get操作等流程?(下图作为参考)
HashSet和HashMap
另外:Synchronized的实现原理
5.Hash1.7是基于数组和链表实现的,为什么不用双链表?HashMap1.8中引入红黑树的原因是?为什么要用红黑树而不是平衡二叉树?
6.HashMap、HashTable、ConcurrentHashMap的原理与区别?
7.volatile与synchronized的区别是什么?volatile作用(必考)
8.synchronized和Lock的区别(必考)
9.Atomic类如何保证原子性(CAS操作)(必考)
10.Java不可重入锁与可重入锁的区别如何理解?
补充问题:
AQS理论的数据结构是什么样的?
11.多线程中sleep与wait的区别是什么?
12.final、finnally、finalize的区别是什么?
13.ThreadLocal的原理和实现
补充问题:
ThreadLocal为什么要使用弱引用和内存泄露问题
14.为什么要使用线程池(必考)
补充问题:
线程池的线程数量怎么确定
线程池的五种运行状态
线程池的关闭(shutdown或者shutdownNow方法)
15.如何控制线程池线程的优先级
16.线程之间如何通信
17.核心线程池ThreadPoolExecutor的参数(必考)
补充问题:
常见线程池的创建参数是什么样的?
18.ThreadPoolExecutor的工作流程(必考)
补充问题:
Java线程池的调优经验有哪些?(线程池的合理配置)
怎么对线程池进行有效监控?
19.Boolean占几个字节
20.Exception和Error
21.Object类内的方法
22.Jdk1.8/Jdk1.7都分别新增了哪些特性?
23.SpringBuffer和SpringBuilder的区别是什么?性能对比?如何鉴定线程安全?
补充问题:
String str="hello world"和String str=new String("hello world")的区别?
24.Array和ArrayList有什么区别?使用时注意事项有哪些?
25.LRU算法是怎么实现的?大致说明下(必考)
具体实现方案:使用LinkedHashMap实现
也可以自己手写一个:基于 HashMap 和 双向链表实现 LRU
其他相关内容补充:
LRU-K
two queue
Multi Queue(MQ)
26.CAS?CAS 有什么缺陷,如何解决?
27.ScheduledThreadPoolExecutor中的使用的是什么队列?内部如何实现任务排序的?
相关答案在这里逐步增加:https://blog.csdn.net/xiaofeng10330111/article/details/105360939
1.Redis在项目中的主要作用是是什么?怎么用的?(应用场景)
补充问题:
单线程的Redis为什么快?
Redis和memcached的区别?
Redis和DB数据一致性处理
2.Redis支持的数据类型(必考)
3.zset跳表的数据结构(必考)
补充问题:
Redis使用跳表不用B+树的原因?
深入学习:(具体参考王争的博客,讲的很详细!!!)
一、如何理解跳表?
二、用跳表查询到底有多快
三、跳表是不是很浪费内存?
四、高效的动态插入和删除
五、跳表索引动态更新
4.Redis的数据过期策略(必考)
5.Redis的LRU过期策略的具体实现
6.如何解决Redis缓存雪崩,缓存穿透问题
7.Redis的持久化机制(必考)
8.Redis的管道pipeline
9.Redis集群容错机制是什么样的?
10.Redis集群中某个master节点挂了,后面流程怎么判断?
11.Redis的缓存优化方向有哪些?你们怎么理解的?对热点键的注意事项设计什么?
12.高并发情况下,对于Redis的更新操作有哪些注意事项?
相关答案在这里逐步增加:https://blog.csdn.net/xiaofeng10330111/article/details/105360974
1.运行时数据区域(内存模型)(必考)
补充问题:
简单介绍一下Java内存模型
volatile关键字
内存分配与回收策略
2.垃圾回收机制(必考)
可达性分析算法
补充问题:
强、软、弱、虚引用
Java 堆永久代的回收
3.垃圾回收算法(必考)
4.Minor GC和Full GC触发条件
补充问题:
Minor GC 和 Full GC 有什么不一样吗?
5.GC中Stop the world(STW)
6.各垃圾回收器的特点及区别,怎么做选择?
补充问题:
G1和CMS的比较
CMS垃圾回收器存在的问题及解决方案
7.双亲委派模型
补充问题:
双亲委派模型的"破坏"
8.JDBC和双亲委派模型关系
9.JVM锁优化和锁膨胀过程
10.JVM中GC Root的选择标准是什么?相关JVM的调优参数有哪些?在工作中怎么调优的?
补充问题:
JVM性能监控有哪些?
11.一个4核8G的服务器,初步设置JVM参数,如何分配?
12.ClassLoader如何工作的?
补充问题:
对象的创建过程是什么样的?
13.Java管理内存、内存泄漏和泄漏的原因?
14.OOM说一下?怎么排查?哪些会导致OOM?
15.JVM虚拟机老年代什么情况下会发生gc,给你一个场景,一台4核8G的服务器,每隔两个小时就要出现一次老年代gc,现在有日志,怎么分析是哪里出了问题?
相关答案在这里逐步增加:https://blog.csdn.net/xiaofeng10330111/article/details/105361002
1.事务的基本要素
2.事务隔离级别(必考)
3.如何解决事务的并发问题(脏读,幻读)(必考)
脏读的表现和具体解决并发问题
不可重复读/ 幻读 的表现和具体解决并发问题
4.MVCC多版本并发控制(必考)
什么是多版本并发控制呢?
InnoDB的MVCC实现机制
5.为什么选择B+树作为索引结构(必考)
补充问题:
为什么平衡二叉树(或红黑树)不适合作为索引?
补充知识:
索引相关原理和知识
一、索引原理
二、磁盘IO与预读
三、索引的数据结构
四、B+树的查找过程
五、B+树性质
索引使用注意事项与数据类型选择
一、索引使用注意事项
二、选择索引的数据类型
三、MySQL常见索引有:主键索引、唯一索引、普通索引、全文索引、组合索引
6.索引B+树的叶子节点都可以存哪些东西(或问聚簇索引与非聚簇索引的区别?)(必考)
补充问题:
InnoDB一棵B+树可以存放多少行数据?
MyisAM索引与InnoDB索引相比较
7.查询在什么时候不走(预期中的)索引(必考)
8.sql如何优化
补充问题:
SQL执行顺序是什么样的?
9.explain是如何解析sql的
10.order by原理
11.InnoDB的行锁/表锁
12.myisam和innodb的区别,什么时候选择myisam
13.binlog,redolog,undolog都是什么,起什么作用
14.数据库的乐观锁与悲观锁的区别是什么?乐观锁常用的两种实现方式是什么?
补充两个基本的问题:
15.当前读和快照读
16.一条sql的执行过程?
相关答案在这里逐步增加:https://blog.csdn.net/xiaofeng10330111/article/details/105361028
1.Spring Boot与以前的Spring有什么区别?
2.Spring Boot启动加载过程是什么样的?
先进行总的分析汇总
具体详细如下:
一、基本代码启动
二、初始化SpringApplication
1.初始化SpringApplication的initialize方法
2.调用deduceWebEnvironment来判断当前的应用是否是web应用,并设置到webEnvironment属性中。
3.找出所有的应用程序初始化器 getSpringFactoriesInstances + setInitializers
补充:获取初始化器
4.找出所有的应用程序事件监听器 getSpringFactoriesInstances + setListeners
补充:获取监听器
5.调用deduceMainApplicationClass方法找出main类
三、运行SpringApplication
1.SpringApplicationRunListeners类
2.SpringApplicationRunListener类:监听SpringApplication的run方法执行
补充:获取SpringApplicationRunListeners
四、run方法详细
1.配置并准备环境
2.创建Spring容器上下文
3.配置Spring容器上下文
4.Spring容器创建之后回调方法postProcessApplicationContext
5.初始化器开始工作
6.Spring容器创建完成之后会调用afterRefresh方法
3.Spring的IOC/AOP的实现(必考)
4.动态代理的实现方式(必考)是否使用过GCLB,和JDK的区别是什么?
知识背景:JDK和CGLIB动态代理总结
补充问题:
何时使用JDK还是CGLiB?
如何强制使用CGLIB实现AOP?
JDK动态代理和CGLIB字节码生成的区别?
CGlib比JDK快?
Spring在选择用JDK还是CGLiB的依据:
5.Spring如何解决循环依赖(三级缓存)(必考)
循环依赖的产生和解决的前提
Spring使用了三级缓存解决了循环依赖的问题
6.Spring的@Transactional如何实现的(必考)
7.Spring的事务传播级别
补充:隔离级别
8.BeanFactory和ApplicationContext的联系和区别
9.Spring的后置处理器
10.Spring Cloud Zuul网关的调优策略有哪些?怎么实现其高可用?Zuul和Gataway,你们项目中是怎么选择的?项目中对Zuul网关层的要求是什么样的?
11.Spring Cloud Eureka和Nacos对比?怎么做选择?Eureka中高可用是怎么做的?进行的调优有哪些?原理是什么?
12.Spring Cloud 中常用的注解有哪些?怎么用的?
13.Spring Cloud中的组件有哪些?具体说说?微服务架构中用到的关键技术有哪些?
14.Spring Cloud Config配置架构是什么样的?可视化怎么做的?设计的业务有哪些?
相关答案在这里逐步增加:https://blog.csdn.net/xiaofeng10330111/article/details/105361059
1.HTTP有哪些方法?返回状态码?
补充问题:GET方法与POST方法的区别
2.HTTP报头格式?如何解析HTTP报头?
补充问题:URI和URL的区别
3.三次握手过程?第三条丢了会怎样?有什么现象?
4.TCP连接中的三次握手和四次挥手,四次挥手的最后一个ack的作用是什么,为什么要time wait,为什么是2msl?
相关答案在这里逐步增加:https://blog.csdn.net/xiaofeng10330111/article/details/105361083
1.用过哪些MQ,怎么用的,和其他mq比较有什么优缺点,MQ的连接是线程安全的吗?
一、常见的消息中间件
1.Kafka主要特性、优缺点
2.RabbitMQ主要特性、优缺点
3.RocketMQ主要特性、优缺点
4.ActiveMQ主要特性、优缺点
二、消息中间件相关知识
1.消息中间件的组成
2.消息中间件模式分类
3.消息中间件的普遍优势
4.消息中间件常用协议
三、消息队列应用场景
场景一:异步处理
场景二:应用解耦
场景三:流量削锋(一般在秒杀或团抢活动中使用广泛)
场景四:日志处理
场景五:消息通讯
2.MQ系统的数据如何保证不丢失?
一、MQ原则
二、丢失数据场景分析
(一)rabbitmq丢失数据场景分析
1.生产者弄丢了数据
2.rabbitmq自己丢了数据
3.消费端弄丢了数据
(二)kafka丢失数据场景分析
三、如何防止消息丢失
(一)rabbitmq防止消息丢失
1.生产者丢失消息
2.rabbitmq自己弄丢了数据
3.消费者弄丢了数据
(二)kafka防止消息丢失
1.消费端弄丢了数据
2.kafka弄丢了数据
3.生产者弄丢了数据
补充问题:
关于MQ的几件小事(五)如何保证消息按顺序执行
关于MQ的几件小事(三)如何保证消息不重复消费
关于MQ的几件小事(二)如何保证消息队列的高可用
Kafka的文件存储机制
Kafka 如何保证可靠性
Kafka消息是采用Pull模式,还是Push模式
Kafka是如何实现高吞吐率的
Kafka判断一个节点还活着的两个条件
相关答案在这里逐步增加:https://blog.csdn.net/xiaofeng10330111/article/details/105361100
1.遇到线上相关问题怎么排查?
2.高并发系统的限流如何实现?
3.高并发秒杀系统的设计?
补充问题:
秒杀并发情况下库存为负数问题
4.负载均衡如何设计?
服务端负载均衡
客户端负载均衡
负载均衡算法
静态负载均衡算法
动态负载均衡算法
5.假如双十一等一些促销有高并发访问量要来访问我们的数据,怎么样做到可靠的服务?
6.一个黑名单集合,数据量很大,快速查询一个值是否在集合里,怎么设计?
背景知识:
1.布隆过滤器基本介绍、特点及使用场景
2.布隆过滤器原理
3.简单实现一个布隆过滤
4.Guava实现布隆过滤及源码分析
补充问题:
一个网站有 20 亿 url 存在一个黑名单中,这个黑名单要怎么存?若此时随便输入一个 url,你如何快速判断该 url 是否在这个黑名单中?并且需在给定内存空间(比如:500M)内快速判断出。
7.常见的设计模式及应用场景。