2019面经总结
网络收集的2019大厂面试总结
2019java面试分模块总结
设计模式
1、用到哪些设计模式?怎么用的
2、单例模式的不同写法
JDK
1、聊一下java的集合类
2、HashMap底层数据结构,以及解决hash碰撞的方法
3、Hashmap为什么要使用红黑树
4、集合类怎么解决高并发问题
5、队列的使用问题
6、自定义异常的应用场景
7、Object类中的方法
8、1.8的新特性
9、Java中的静态方法只有一个实例,如果想用多个实例怎么办?
10、Java面向对象的基本特征,继承、封装与多态
11、重写和重载是什么意思
12、怎样声明一个类不会被继承
13、HashMap中jdk1.7与jdk1.8的区别
14、concurrenthashMap 的底层实现原理,是如何实现线程安全的?
15、Java中的自增是线程安全的吗,如何实现线程安全的自增
16、Jdk1.8种的stream有用过吗,stream的并行操作原理,stream并行的线程池是从哪里来的
17、Jdk1.8的completableFuture有用过吗?
18、Java种的代理有几种实现方式
JVM
1、jvm内存模型,以及这些空间的存放内容
2、堆内存划分的空间,如何回收这些内存对象,有哪些回收算法
3、jvm调优,如何解决线上gc问题
4、class初始化过程
5、内存溢出的原因,如何排查线上问题
6、jvm有哪些垃圾回收器,
7、类加载模型
8、JVM为什么要增加元空间?
9、堆G1垃圾收集器有了解么,有什么特点
多线程
1、多线程之间是如何通信的
2、synchronized底层实现,和lock的区别
3、synchronized关键字加在静态方法和实例方法的区别
4、countdownlatch的用法
5、线程池
(1)Executor提供了几种线程池
(2)线程池的参数
(3)拒绝策略
(4)任务放置的顺序过程
(5)任务结束后会不会回收线程
(6)未使用的线程池中的线程放在哪里
(7)线程池线程存在哪
(8)cache线程池会不会销毁核心线程
6、Java多线程的几种状态及线程各个状态之间是如何切换的
7、Java中的wait和sleep的区别与联系
8、如何在方法栈中进行数据传递?
9、ThreadLocal的底层实现形式及实现的数据结构?
10、Sychornized是否是公平锁
11、Sychronized和ReentryLock的区别
12、服务器CPU数量及线程池数量的关系
mysql
1、Mysql的索引类型,底层索引数据结构,叶子节点存储的是什么,索引失效的原因
2、如何优化sql,查询计划的结果中看哪些些关键数据
3、innodb和myisam的区别
4、mysql默认隔离级别,
5、mysql的乐观锁和悲观锁,锁的种类
6、如何用sql实现乐观锁和悲观锁
7、mysql如何分库分表
8、MySQL为什么选择B+树作为它的存储结构,为什么不选择Hash、二叉、红黑树
9、Mysql数据库的事务与锁的理解
10、数据库临时表有没有用过,是怎么用的?
11、多数据源情况下如何进行事物的管理
12、Union和union all有什么区别
13、dateTime和timestamp有什么区别
14、mysql主从模式的实现
15、如何解析sql语句;即explain关键字的使用
16、Mysql的主从同步原理,mysql主从复制主要有几种模式
Spring
1、spring的底层代码,
2、bean的生命周期
3、循环引用问题,以及spring中用到的设计模式
4、spring和springBoot的区别
5、spring的AOP的底层实现原理
6、spring的事务是如何回滚的
7、Spring 是如何解决循环依赖的问题的?
8、Spring IOC的理解,原理与实现
9、Bean Factory与FactoryBean有什么区别?@Bean这个注解时如何实现Bean的注入的?
Mybatis
1、hibernate的区别
2、mybatis的缓存,都缓存些什么,session缓存存在哪
3、mybatis的执行流程,需要了解源码
4、mybatis如何防止sql注入
redis
1、redis的数据结构类型,一般都用在什么场景下
2、sortedSet的底层数据结构
3、利用redis实现分布式锁
4、redis使用单线程的好处
5、redis中如何控制多线程并发
6、redis删除key的策略
7、redis的主动缓存,被动缓存
8、如何保证数据一致性问题
9、集群环境下如何处理,解释一下一致性哈希
10、解释一下缓存击穿,缓存穿透,缓存雪崩,如何解决这些问题
11、排行榜功能的实现:使用redis的zset;zset的底层数据结构是什么样的;除了redis的zset还有什么其他的数据结构可以实现这个功能
12、Redis集群种类:主从模式、cluster模式及其应用
13、Redis种数据类型及应用场景
zookeeper
1、zookeeper如何保证可用性?
2、Zookeeper的原理
3、什么情况下会使用zookeeper,zookeeper如何监听生成的节点,zk内部是如何实现的
4、Zookeeper0、zookeeper1、zookeeper2,三个节点的集群描述一下从zk启动,到zk对外提供服务的整个过程
5、有一个key,往zk写入,到写入成功它的大体过程是什么样的
6、Zookeeper监听器的原理
MQ
1、mq的结构图
2、如何保证消费者是否消费
3、ack返回的种类
4、请求过程服务宕机如何处理
5、什么场景下会使用MQ;MQ的优势与劣势,什么时候不能用MQ
springboot
1、springboot启动过程中做了哪些事情?
2、Springboot 启动类上的注解 @spring boot Application说明?
3、Springboot如何判断当前应用是否时web应用?
4、Spring boot整合jsp的流程,需要注意哪些点
SpringCloud
1、SpringCloud和dubbo的区别
2、项目中用到了哪些组件
3、eureka的原理,如何保证高可用性,和Zookeeper有什么区别
4、feign如何调用的
5、处理生产环境上配置生效问题
6、hystrix的降级策略有哪些
7、Springcloud eureka是如何注册服务、如何监测心跳的,它注册的流程是怎么样的
8、在分布式环境中如何快速发现某一台服务有问题
9、分布式集群系统对外提供接口的时候如何验证对方的身份
10、Eureka和zookeeper作为注册中心有什么区别
Linux服务器
1、Linux如何查看应用占用内存情况
2、Linux脚本编写会么
架构设计
1、如何做一个秒杀系统
2、如何实现高可用、高并发、高吞吐的技术方案
3、A给B发请求,B执行往数据库insert的操作;设计一个架构,保证能够提供最大的并发量
其他小知识点
1、Nginx如何做限流?令牌桶算法与漏桶算法
2、Tomcat调优
3、为什么使用RPC框架,什么时候会使用http请求
4、tomcat启动原理
5、Http协议
6、epoll模型
7、如何实现调用远程服务的接口
阿里淘系面经
一面:
1、聊之前的项目经验,详细描述
2、Java知识体系中整体的集合框架
3、为什么hashmap在jdk8的时候要进行树化(泊松分布)
4、hashmap线程安全的方式(concurrenthashmap源码层次)
5、锁的分类
乐观锁、悲观锁、自旋锁、读写锁、排他锁、共享锁、分段锁的各种机制及实现方式
6、spring IOC的底层实现
XML、dom4j、工厂、单例
7、mysql索引的分类及实现机制
二面
1、介绍项目
2、线程池的创建方式、分类、应用场景、拒绝策略的场景
3、spring AOP的底层实现
动态代理、newProxyInstance、cglib、SAM
4、代理模式
静态代理、动态代理
5、详细介绍自己的设计模式
三面
1、千万级数据量的list找一个数据(抢红包案例)
四面
1、详细项目介绍
2、JVM内存管理
栈上分配->TLAB->新声代、老年代->可达性分析->GC算法->所有垃圾回收器及其优缺点和特点
那到底多大的对象会被直接扔到老年代
G1两个region不是连续的,而且之间还有可达的引用,我现在要回收其中一个,另一个会被怎么处理
CMS的并发预处理和并发可中断预处理
五面
1、百万级int数据量的一个array求和(fork/join)
六面
1、参加面试的是硕士,所以问了科研项目
七面
1、聊人生
百度面经
1、synchrnoized和reentrantlock的底层实现及重入的底层原理
2、锁的四种状态及升级过程
3、CMS和G1的异同
4、G1什么时候引发Full GC?
5、除了CAS,原子类,syn,Lock还有什么线程安全的方式
6、HashMap和Hashtable的异同
7、允许null键的map你知道哪些
HashMap,LinkedHashMap,WeakHashMap
8、为什么hashmap扩容的时候是两倍
9、红黑树的插入时间复杂度
10、解决hash冲突的方式
11、现在有1T的数据,但是只有1G内存,如何进行排序
12、Tomcat为什么要重写类加载器
13、tcp握手挥手过程及其状态转换
14、mysql隔离级别
15、B树和B+树的区别
16、你知道哪些设计模式,它们在JDK源码中是怎么体现的
17、Java运行时数据区
18、常见的垃圾回收算法有哪些
19、吞吐量优先和响应时间优先的回收器是哪些
20、类加载全过程
21、线程池7个参数
22、CAS的ABA问题怎么解决
23、Java内存模型
24、什么叫做阻塞队列的有界和无界
25、说明session和cookie的区别
26、说一下反射,反射会影响性能吗
27、说一些AQS
28、JUC包里的同步组件主要实现了AQS的哪些主要方法
2019菜鸟快递面经
阿里一面
1、java内存模型分为了几块区域?元空间里有些啥?
2、对象存在java内存的那块区域里面
3、string类的用法,string a="Hello" string a = new string("hello")创建的流程
4、NIO知道么? nio底层调用了啥?啥是非阻塞IO?
5、jdk hashmap 底层存储?红黑树的特点,为啥不用数组用红黑树?
6、数据库用过么?用的啥数据库,mysql用的啥引擎?为啥数据库底层用B+树不用红黑树?
7、多线程,AtomicInteger底层用的啥?cas的原理,AtomicInteger用了Voliate么?voliate的原理,变量加Voliate被修改了其他线程能立刻知道么?
8、HBase底层数据存储的结构,HRegion如何分裂?
9、UnSafe类知道么?
阿里二面
1、聊项目
2、由项目聊到高并发,C3P0数据库的优点,不加机器,单体应用怎么优化性能?
3、校园经历
4、一道设计模式的编码题
写代码实现以下业务场景:
“小明和小张去中介找房子,小明要3室2厅的房子但租金不要超过6000,小李的要求是租金不超过1500的都能接受。中介说没问题,你们留个电话,有房子我通知你们”
考察点:
1、面向对象建模
2、观察者或者Callback模式
3、策略模式
阿里三面
1、个人介绍
2、最难忘的项目
3、JVM加载类的过程,JVM的ClassLoading有几种,怎么改变ClassLoading的加载顺序?
4、如何解决Jar包冲突
5、继承的原理
6、对技术那方面感兴趣
7、如何学习一门新技术
2019滴滴面经
一面:
1、自我介绍
2、讲下快速排序,经典快排存在的问题
3、1000万个取其中最大的100个数
3、1 MapReduce的设计思想,但是有内排序的问题
3、2堆排序,堆排序的过程
4、树的中序遍历实现
4.1递归
4.2借助栈
5、介绍下osi7层模型
6、arp协议缓存的过程
7、TCP的控制位
8、TCP的状态
9、TCP建连的状态
10、TCP的头部信息
11、jvm监控系统是通过jmx做的么?再改进中,用的jdk自带的工具
12、java内存结构
13、jvm的栈跟线程关系
14、是每个线程都会创建一个栈还是共用一个栈?
15、介绍volatile的功能
16、总线锁的副作用
17、内存屏障的汇编指令是啥?
18、你有看过什么源码嘛?AQS
19、介绍一下AQS
20、扯到了CAS的原理
21、AQS怎么阻塞当前线程
22、locksupport的park在jvm怎么实现的?
23、你了解垃圾回收吗?
24、垃圾回收器让工作线程停顿下来是怎么做的?
25、GC ROOts对象有几种?
26、gc roots怎么判断一个对象没有被引用?
二面:
1、介绍项目
2、spark用的多吗?
3、在java开发平时做了哪些项目
4、看过源码吗?
5、介绍下ConcurrentHashMap
6、介绍下CAS
7、介绍下volatile
8、手写生产者和消费者
9、mysql的索引失效和优化问题
10、mysql的索引结构
11、回表操作分析
13、介绍下左连接、右连接、全连接查询
14、redis的应用场景
15、redis是单线程还是多线程
16、redis存在线程安全的问题吗?为什么
17、spring aop怎么使用及其原理
18、怎么实现远程rpc?
19、es的应用场景
20、服务被别人攻击,不断刷新页面,怎么解决这个问题
2019京东面经
1、总体说一下集合框架
2、你怎么看待接口和抽象类
3、索引的分类
4、主键索引的设计应该采用B-tree索引还是hash索引
5、设计模式
6、谈一谈DDD面向领域编程
7、说一下hibernate一级缓存和二级缓存
8、说一下你了解的MQ
9、谈一谈你对高并发的理解,你会从什么角度设计高并发程序
10、JUC包里的限流该怎么做到
11、索引不适用的条件
12、说一下NIO和AIO
13、AIO里用到什么设计模式
14、说一下select,poll,epoll
15、谈一下TCP的拥塞控制
16、你知道什么是as-if-serial语义吗,它和happen-before语义有什么区别
17、Executors创建线程池的方式
18、CachedThreadPool里面用的什么阻塞队列
19、那你知道LinkedTransferQueue吗,和SynchronousQueue有什么区别
20、你还知道什么阻塞队列,能具体说说它们的特点吗
21、线程池的线程数怎么设置比较好
22、你知道新出的LongAdder吗,和AtomicLong有什么区别
23、那你知道LongAccumulator吗
2019京东面经
一面:
1、zookeeper在项目中的使用及原理
2、SpringCloud的组件介绍
3、redis相关:
-
redis分布式锁的实现方式
-
redis为什么要使用setnx?set和setnx有什么区别?
-
setNx:系统在10:05 设置一个值,并给出5分钟的过期时间,系统刚刚set完之后redis集群崩溃,10:11分系统重启成功,那么redis中set的值是否还存在?
-
刚刚set完数据之后,能否被持久化到快照或者binlog中
-
假设redis被持久化,且系统重启事件超过了redis设置的过期时间,那么key是否会被清理?
4、zookeeper的实现方式
5、多线程的实现方式
1、继承thread类
2、实现runnable接口
3、实现callable接口
4、线程池可以进行创建,说明每个参数之间的逻辑关系
6、服务器CPU数量及线程池数量的关系
7、mysql调优
1、性能监控
2、schema与数据类型优化
3、执行计划
4、通过索引进行优化
5、查询优化
6、分区表
7、服务器参数设置
8、mysql集群方式的优化
详细细节可以参考mysql调优的视频
8、如何做一个秒杀系统?
9、对自己技术的认知程度
二面:
1、mysql是集群还是单节点?最大的表的数据量多大?
在公司的环境中,一般都是集群的环境,单表的最大规模是没有上限的,但是考虑到查询性能的优化,一般在几千万左右,超过之后会大程度的影响性能
2、mysql主从同步机制的原理?主要有几种模式?
3、redis持久化的方式?在哪个版本允许分布式使用?
rdb
aof
4、nginx的使用场景
请求转发
负载均衡
反向代理
5、spark的应用场景
6、js闭包
闭包就是能够读取其他函数内部变量的函数
7、离职原因
2019美团面经
1、ConcurrentHashMap底层原理
2、手写一个LRU页面置换算法
3、HashMap底层数据结构
4、为什么用红黑树不用普通的AVL树
5、为什么在8的时候链表变成树
6、为什么在6的时候从树退回链表
7、线程池7个参数,该怎么配置最好
8、说一下volatile
9、volatile的可见性和禁止指令重排序怎么实现的
10、CAS是什么
11、PriorityQueue底层是什么,初始容量是多少,扩容方式呢
12、HashMap的容量为什么要设置为2的次幂
13、你知道跳表吗,什么场景会用到
14、CopyOnWriteArrayList知道吗,迭代器支持fail-fast吗
15、innodb的底层数据结构
16、为什么用B+树不用B树
17、为什么用B+树不用红黑树
18、coding:无序数组怎么寻找第k大的数,写一个二叉树层次遍历
19、不知道大小的数据流取其中100个数,怎样的取法能最随机
20、n个物品每个物品都有一定价值,分给2个人,怎么分两个人的价值差最小
21、假设百度每个页面能放100个网页,每个页面都有一个评分,怎样快速找到第8页的所有网页
2019顺丰面经
1、线程池的设计里体现了什么设计模式
2、说说你了解什么设计模式,知道责任链设计模式吗
3、wait/notify体现了什么设计模式
4、线程池7个参数
5、谈一下spring事务传播
6、谈一下IOC底层原理
7、怎么判断内存泄漏
8、怎么在日志里排查错误,该用哪些Linux命令
9、mysql原子性和持久性怎么保证
10、怎么解决幻读
11、innodb和myisam区别
12、索引分类
13、对象的创建过程
14、对象在内存中的存储布局
15、对象头具体包括什么
16、对象怎么定位
17、堆的划分
18、对象怎么分配
19、具体讲一下CMS流程
20、锁的四种状态
21、Object obj = new Object()这句话在内存里占用了多少内存
22、synchronized和reentrantLock的异同