“金九银十”已过,总结我的天猫、蚂蚁、头条面试经历(Java岗)

此生再无相见时 提交于 2019-12-06 12:29:18

跳槽时时刻刻都在发生,但是我建议大家跳槽之前,先想清楚为什么要跳槽。切不可跟风,看到同事一个个都走了,自己也盲目的开始面试起来(期间也没有准备充分),到底是因为技术原因(影响自己的发展,偏移自己规划的轨迹),还是钱给少了,不受重视。

准备不充分的面试,完全是浪费时间,更是对自己的不负责(如果title很高,当我没说)。

今天给大家分享我在这次“金九银十”期间跳槽面试的几个大厂经历,总结了这次跳槽中整理的Java面试合集,其中大部分都是这次面试过程中的面试题,可以对照这查漏补缺。

天猫

天猫一面(55分钟)
自我介绍
HashMap实现原理,ConcurrentHashMap实现原理
红黑树,为什么允许局部不平衡
TCP,UDP区别,为什么可靠和不可靠
一次HTTP请求的全过程,包括域名解析、定位主机等
TCP三次握手
MySQL事务是什么?四大特性,四大隔离级别
ConcurrentHashMap和Hashtable区别
spring IOC和AOP,以及各有什么优点
有哪几种常用的线程池
什么情况下使用Runnable和Thread创建线程,Runnable和Callable的区别
线程方法中的异常如何处理,副线程可以捕获到吗
synchronized和锁的区别,什么情况下使用synchronized和ReentrantLock
JVM的对象分配在哪个区,Class对象分配在哪个区
天猫二面(50分钟)
常用的设计模式介绍:单例模式、装饰者模式等
Java会出现内存溢出吗?什么情况下会出现?
双亲委派模型,为什么这样做?
对象什么情况下进入老年代?
快速排序说一下过程
AOP实现原理:动态代理
BIO、NIO(如何实现的)、AIO
消息中间件有哪些?他们之间的优劣势?
Redis,持久化框架
栈和队列
垃圾回收算法
MySQL的索引
Tomcat 类加载器
OOM内存泄漏,什么情况下会出现,如何排查
天猫三面(40分钟)
介绍你实践的性能优化案例,以及你的优化思路
微服务和SOA的区别,优劣势
SQL慢查询的优化方案,索引和表的优化方案。
MySQL与MongoDB的区别,海量数据的存储
缓存框架,例如Redis、Memcached之间的区别,优劣势比较
请描述一致hash算法
分布式session的共享方案有哪些,有什么优劣势
高并发情况,系统的优化方案有哪些,以及优先级排序。
蚂蚁金服

蚂蚁一面(50分钟)
自我介绍和项目
Java的内存分区
Java对象的回收方式,回收算法。
CMS和G1了解么,CMS解决什么问题,说一下回收的过程。
CMS回收停顿了几次,为什么要停顿两次。
Java栈什么时候会发生内存溢出,Java堆呢,说一种场景,我说集合类持有对象。
那集合类如何解决这个问题呢,我说用软引用和弱引用,那你讲一下这两个引用的区别吧。
Java里的锁了解哪些,说了Lock和synchronized
它们的使用方式和实现原理有什么区别呢?
synchronized锁升级的过程,说了偏向锁到轻量级锁再到重量级锁,然后问我它们分别是怎么实现的,解决的是哪些问题,什么时候会发生锁升级。
Tomcat了解么,说一下类加载器结构吧。
说了Spring,问我Spring中如何让A和B两个bean按顺序加载?
10亿个数去重,我说用hash分片做,他说可能不均匀,然后我说了bitmap,他说那数字量更多怎么办,我说那就两个bitmap把。他说下一题吧。
蚂蚁二面(40分钟)
讲一下项目
做的主要是Java对吧,讲一下多线程把,用到哪些写一下
写了thread和runnable,然后写了线程池,又问了线程池由哪些组件组成,有哪些线程池,分别怎么使用,以及拒绝策略有哪些。
什么时候多线程会发生死锁,写一个例子吧,然后我写了一个两个线程,两个锁,分别持有一个,请求另一个的死锁实例。
集合类熟悉吧,写一个题目,一个字符串集合,找出pdd并且删除。
然后说一下Redis吧,是单线程还是多线程,Redis的分布式怎么做?
RPC了解么,我说了主要是协议栈+数据格式+序列化方式,然后需要有服务注册中心管理生产者和消费者。
TCP三次握手的过程,如果没有第三次握手有什么问题。
蚂蚁三面 技术面(60分钟)
自我介绍
cap了解么,分别指什么,base呢,强一致性和弱一致性有什么方法来做,2pc了解么,说一下大概过程。
负载均衡怎么做的呢,为什么这么做?
了解过集群雪崩么?
MySQL的主从复制怎么做的,具体原理是什么,有什么优缺点。
Redis有哪些集群模式,各自的区别?
项目用到了多线程,如果线程数很多会怎么样?
分布式了解哪些东西,消息队列了解么,用在什么场景,说了削峰,限流和异步。说了kafka,问我怎么保证数据不丢失,以及确保消息不会被重复消费。还问了消息送达确认是怎么做的。
讲一下项目的主要架构,你在里面做了什么
有什么比较复杂的业务逻辑讲一下。
最大的难点是什么,收获是什么。
面试小总结
阿里的面试特别喜欢面试技术原理,特别是:

多线程
NIO
异步消息框架
分布式相关的缓存算法等
JVM的加载过程和原理
回收算法
以及具体使用过的框架,会问部分参数检验你是否熟用
第一面被通过,后续被录用的可能性就会很大了,第一轮非常重要,建议系统的学习面试题

字节跳动

字节跳动一面(30分钟)
hashmap,怎么扩容,怎么处理数据冲突?怎么高效率的实现数据迁移?
Linux的共享内存如何实现,大概说了一下。
socket网络编程,说一下TCP的三次握手和四次挥手
同步IO和异步IO的区别?
Java GC机制?GC Roots有哪些?
红黑树讲一下,五个特性,插入删除操作,时间复杂度?
快排的时间复杂度,最坏情况呢,最好情况呢,堆排序的时间复杂度呢,建堆的复杂度是多少
字节跳动二面(30分钟)
自我介绍,主要讲讲做了什么和擅长什么
设计模式了解哪些?
AtomicInteger怎么实现原子修改的?
ConcurrentHashMap 在Java7和Java8中的区别?
为什么Java8并发效率更好?
什么情况下用HashMap,什么情况用ConcurrentHashMap?
redis数据结构?
redis数据淘汰机制?
字节跳动三面(50分钟)
mysql实现事务的原理(MVCC)
MySQL数据主从同步是如何实现的?
MySQL索引的实现,innodb的索引,b+树索引是怎么实现的,为什么用b+树做索引节点,一个节点存了多少数据,怎么规定大小,与磁盘页对应。
如果Redis有1亿个key,使用keys命令是否会影响线上服务?
Redis的持久化方式,aod和rdb,具体怎么实现,追加日志和备份文件,底层实现原理的话知道么?
遇到最大困难是什么?怎么克服?
未来的规划是什么?
你想问我什么?
总结一下所有HR都爱问的几个问题
问经历
工作中遇到的最大挑战是什么,你如何克服的?
你最大的优点和最大的缺点,各自说一个?
看机会的时候,主要考虑的是待遇、平台、人员还是什么其他因素?
未来的职业发展,短期和长期的规划是什么?

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!