前言
整个面试下来,问了很多,而且我又说得比较多,所以整个面试下来,感觉都口干舌燥了。。
总体来说体验还是不错的,面试完的第二天HR打电话给力口头offer
阿里一面
1.如何设计Restful接口
2.get和post的区别
3.常见的HTTP请求头有哪些,User-Agent的作用
4.JDK1.8之后的新特性(不包括1.8)
5.说一下MySQL的事务隔离级别,RC和RR分别解决了什么问题
6.聚簇索引和非聚簇索引的区别
7.索引失效的原因可能是
8.Redis有哪些数据结构,常用场景
9.Redis除了做缓存,还能做什么
10.JVM内存模型,1.7和1.8的区别
11.常见的GC算法,年轻代和老年代一般用哪种算法
12.G1相比CMS的优势
13.JUC包,CopyOnWriteArrayList是什么
14.ConcurrentHashMap,1.7和1.8的区别
15.synchronized是可重入锁吗(因为1.8的时候我提到了synchronized的锁升级)
16.给定一个字符串,形式是"00000011111",找到第一个1的位置
阿里二面
1.RPC和HTTP的区别
2.Java的Map有哪些实现类,分别简要介绍一下
3.说一下HashMap的原理,为什么用链地址去解决冲突,为什么用红黑树
4.kafka如何保证消息不丢失
5.MySQL的事务隔离机制,如何实现的
6.什么是事务,事务的四大特性,一致性是如何实现的
7.MVCC是什么,如何实现的
8.说一下常见的设计模式,实现一下单例模式
9.单例模式有哪几种,二者有什么区别,什么时候用哪种
10.TopK算法
11.优先队列和堆的区别
总结:我简历上没有写消息队列跟RPC,没想到还是问了,所以这两题不会,其他都答得挺好的。面试官最后给我的评价是知识深度可以,但广度还需要加强。所以大家如果要准备该公司的Java面试的话,还是要去看一下RPC跟Kafka相关的知识,至少也要提前去看点面经。
阿里三面
1.说一下了解的Java数据结构有哪些(ArrayList,LinkedList,Queue,HashMap,ConcurrentHashMap,CopyOnWriteArrayList)
2.HashMap的原理(用哈希数组)
3.数组存的是什么,为什么要转换成红黑树,为什么不能是其他树(链表转红黑树,红黑树相对平衡,调整效率快)
4.HashMap是否线程安全,会导致什么问题(不是,会导致更新丢失,比如balabala)
5.除了更新丢失,HashMap还会造成什么问题,1.7和1.8的区别?(1.7头插入会导致死循环,1.8改用尾插法)
6.如果要线程安全,应该用什么类(ConcurrentHashMap)
7.ConcurrentHashMap的实现?1.7和1.8都说一下。(分段锁,synchronized,CAS)
8.synchronized和CAS有什么区别,synchronized的实现原理是什么,CAS呢,CAS如何解决ABA问题(有锁,无锁。monitor(Owner字段,EntryQ字段(互斥锁)),判断有无改变,版本号)
9.synchronized和Lock有什么区别,Lock的实现原理是什么(AQS,使用CLH锁,维护一个双向队列,存储阻塞线程。每个线程一直监听前一个节点的状态,如果调用了unlock,则停止自旋。)
10.线程池的重要参数有哪些(poolSize,corePoolSize,maximumPoolSize,ThreadFactory,RejectionHandler)
11.RejectionHandler有哪些,具体如何操作(4种还是5种来着,略)
12.线程池的线程在执行完任务会立刻回收吗?(保留corePoolSize个核心线程)
13.Spring的IOC原理是什么,AOP原理是什么,默认是哪一种代理,两个代理的区别(反射,获取配置的类和属性,然后在运行时注入依赖。代理,JDK,CGLIB)
14.Spring Bean初始化有哪几种方式(忘了)
15.Spring如何解决循环依赖的(忘了,跟他说没有复习Spring,面试官说回去要巩固一下。答案的话应该是用三次缓存)
16.Redis有哪些常用的数据结构,说说它们的常用场景(String,Hash,List,Sorted Set, Set)
17.Sorted Set的数据结构是什么(ziplist+skiplist,细说了什么是skiplist)
18.Redis如何删除过期键(定期+惰性)
19.Redis如何持久化(RDB+AOF)
20.Redis分片有了解过吗?(说成了高可用,不会)
21.Redis高可用,那主从同步,如何更换主节点(哨兵,监控,投票。追问:细说投票算法?不记得了)
22.MySQL有哪些事务隔离级别,分别解决了什么问题(RU,RC,RR,Serial。。。追问什么是间隙锁,就是锁住间隙避免了幻读)
23.MVCC如何实现的?(日志,redo log,undo log,binlog)
24.索引有哪些类型(哈希索引,B树,B+树,说了一下有什么区别)
25.为什么不用范围搜索就用B树,为什么不能用哈希索引?(应该是树可以减少磁盘的IO消耗,但具体为什么说不出来)
26.什么是聚簇索引,什么是非聚簇索引?(InnoDB)
27.说一下MySQL的分库分表
28.遇到慢查询,如何解决?(explain,索引,覆盖索引,limit等)
29.如果已经用到了索引,但因为数据量太大,比如几个亿,如何解决?(分治。追问:细说?加redis缓存,分库分表)
30.说一下JVM的内存模型(堆,栈,Program Counter,元空间)
31.什么时候会触发GC(年轻代不足以分配对象,老年代不足以分配年轻代晋升的对象)
32.用过哪些RPC框架,有没有看过Spring Cloud的源码(SpringCloud,Netty。无)
33.算法题,二叉树的层序遍历(用了迭代解法)
我的面试经验汇总
下面先给大家上一个总的目录大纲,基础的东西就不进行过多的赘述,我们将会从面试必问的说起,同时由于每篇的内容过多,我们也只说重点,太过基础的内容谁都会,我就不多敲字浪费大家的时间了!
有需要的朋友点击这里自取就好了,希望资料对你有帮助!
SpringCloud
Redis
JVM
MySQL
Zookeeper
Kafka
Dubbo
spring
Rabbitmq
springboot
最后
由于文章篇幅有限,PDF的内容又很多,全部手敲下来很累…所以需要阅读阅读学习的,大家“一件三连后:“查看下方””即可拿到手之后自己学习吧,博主真的打字打累了。
有需要的朋友点击这里自取就好了,希望资料对你有帮助!
预祝大家前程似锦,工作顺利!