前言
很多Java开发者面试之前,可能没有较长的工作时间或者较为丰富的工作经验,所以不知道互联网公司或者一线互联网公司技术面试都会问哪些问题? 再加上可能自己准备也不充分,去面试没几个回合就被面试官几个问题打蒙了,最后以惨败收场。针对这些的读者朋友,小编整理了一些知名大厂的面经,在这分享给读者朋友们参考,让即将面试或是有想法跳槽的读者朋友们了解一下一线大厂面试时都喜欢问那些问题。
开始
蚂蚁金服Zookeeper+微服务+消息中间件+高并发架构设计
一面
- JVM数据存储模型,新生代、年老代的构造?
- java GC算法,什么时候会触发minor gc,什么时候会触发full gc?
- GC 可达性分析中哪些算是GC ROOT?
- 你熟悉的JVM调优参数,使用过哪些调优工具?
- Java 有什么锁类型?
- 描述下线程池的处理流程?
- 类加载机制,一个类加载到虚拟机中一共有几个步骤,这些步骤的顺序哪些是固定的,哪些是不固定的,为什么不固定
- hashmap是线程不安全的,concurrenthashmap是线程安全的,怎么实现的线程安全?
- volatile关键字解决了什么问题,实现原理是什么
- 并发容器有哪些,并发容器和同步容器的区别
二面
- 在工作中,SQL语句的优化和注意的事项
- 哪些库或者框架用到NIO
- Spring 都有哪几种注入方式,什么情况下用哪种,ioc实现原理
- 如何定位一个慢查询,一个服务有多条SQL你怎么快速定位
- 聚集索引和非聚集索引知道吗?什么情况用聚集索引什么情况用非聚集索引
- Nosql引擎用的什么存储结构,关系型数据库和NoSQL各自的优劣点是什么,如何技术选型?
- 微服务架构下,如果有一个订单系统,一个库存系统,怎么保证事务?
- 分布式一致性协议raft,paxos 了解吗
- Zookeeper中的ZAB协议,选主算法
三面
- 自我介绍
- 参与的并发项目,从设计到部署,按照流程讲一遍。
- 项目相关你用过redis,用在什么场景,怎么使用的?
- mysql同步机制原理,有哪几种同步方法
- 数据库主从同步如何实现,事务如何实现
- 谈谈你对SOA和微服务的理解,以及分布式架构从应用层面涉及到的调整和挑战。
- 阿里系中间件metaQ及原理与现有的kafka有什么异同
- 在阿里有了解过什么中间件吗?实现原理?与其他开源消息队列有什么特点?
- 为什么选择换公司?
- 三年到五年的职业规划?
- 你有想问我的?
拼多多 幻影读+分段锁+Spring Cloud+秒杀
一面
- 简短自我介绍
- 事务的ACID,其中把事务的隔离性详细解释一遍
- 脏读、幻影读、不可重复读
- 红黑树、二叉树的算法
- 平常用到哪些集合类?ArrayList和LinkedList区别?HashMap内部数据结构?ConcurrentHashMap分段锁?
- jdk1.8中,对hashMap和concurrentHashMap做了哪些优化
- 如何解决hash冲突的,以及如果冲突了,怎么在hash表中找到目标值
- synchronized 和 ReentranLock的区别?
- ThreadLocal?应用场景?
- Java GC机制?GC Roots有哪些?
- MySQL行锁是否会有死锁的情况?
二面
- 乐观锁和悲观锁了解吗?JDK中涉及到乐观锁和悲观锁的内容?
- Nginx负载均衡策略?
- Nginx和其他负载均衡框架对比过吗?
- Redis是单线程?
- Redis高并发快的原因?
- 如何利用Redis处理热点数据
- 谈谈Redis哨兵、复制、集群
- 工作中技术优化过哪些?JVM、MySQL、代码等都谈谈
三面
- Spring Cloud用到什么东西?如何实现负载均衡?服务挂了注册中心怎么判断?
- 网络编程nio和netty相关,netty的线程模型,零拷贝实现
- 分布式锁的实现你知道的有哪些?具体详细谈一种实现方式
- 高并发的应用场景,技术需要涉及到哪些?怎样来架构设计?
- 接着高并发的问题,谈到了秒杀等的技术应用:kafka、redis、mycat等
- 最后谈谈你参与过的项目,技术含量比较高的,相关的架构设计以及你负责哪些核心编码
抖音
一面(50分钟)
- hashmap,怎么扩容,怎么处理数据冲突?怎么高效率的实现数据迁移?
- Linux的共享内存如何实现,大概说了一下。
- socket网络编程,说一下TCP的三次握手和四次挥手
- 同步IO和异步IO的区别?
- Java GC机制?GC Roots有哪些?
- 红黑树讲一下,五个特性,插入删除操作,时间复杂度?
- 快排的时间复杂度,最坏情况呢,最好情况呢,堆排序的时间复杂度呢,建堆的复杂度是多少
二面(40分钟)
- 自我介绍,主要讲讲做了什么和擅长什么
- 设计模式了解哪些?
- AtomicInteger怎么实现原子修改的?
- ConcurrentHashMap 在Java7和Java8中的区别?为什么Java8并发效率更好?什么情况下用HashMap,什么情况用ConcurrentHashMap?
- redis数据结构?
- redis数据淘汰机制?
三面(约1个小时)
- mysql实现事务的原理(MVCC)
- MySQL数据主从同步是如何实现的?
- MySQL索引的实现,innodb的索引,b+树索引是怎么实现的,为什么用b+树做索引节点,一个节点存了多少数据,怎么规定大小,与磁盘页对应。
- 如果Redis有1亿个key,使用keys命令是否会影响线上服务?
- Redis的持久化方式,aod和rdb,具体怎么实现,追加日志和备份文件,底层实现原理的话知道么?
- 遇到最大困难是什么?怎么克服?
- 未来的规划是什么?
- 你想问我什么?
天猫 发压测+Mina+事务+集群+秒杀架构
一面
- 常见集合类的区别和适用场景
- 并发容器了解哪些?
- 如何判断链表是否有环
- concurrentHashMap如何实现
- 集群服务器 如何application 共享
- JAVA网络编程中:BIO、NIO、AIO的区别和联系
- jvm内存模型jmm 知道的全讲讲
- JAVA的垃圾回收,标记算法和复制算法的区别,用在什么场合?
- http和https的区别,http1.x和http2.0的区别,SSL和TSL之间的区别
- GC、G1和ZGC的区别
- B+树和B树的区别,和红黑树的区别
- 内存泄漏与内存溢出的区别
- session的生命周期是多久
- 关于Mina框架了解多少?(因为我在项目里用到了Mina,所以提到了这个部分)
二面
- java cas原理
- JAVA线程池有哪些参数,如果自己设计一个线程池要考虑哪些问题?
- Java的lock的底层实现?
- mysql数据库默认存储引擎,有什么优点
- MySQL的事务隔离级别,分别解决什么问题。
- 四个表 记录成绩,每个大约十万条记录,如何找到成绩最好的同学
- 常见的负载均衡算法有哪些
- 如果Redis有1亿个key,使用keys命令是否会影响线上服务
- Redis的持久化方式,aod和rdb,具体怎么实现,追加日志和备份文件,底层实现原理的话知道么
三面
- 请画一个完整大型网站的分布式服务器集群部署图
- 多个RPC请求进来,服务器怎么处理并发呢
- 讲一下Redis的哨兵机制
- 数据库分库分表一般数据量多大才需要?
- 如何保证数据库与redis缓存一致的
- 项目中消息队列怎么用的?使用哪些具体业务场景?
- JVM相关的分析工具有使用过哪些?具体的性能调优步骤吗?
- MySQL的慢sql优化一般如何来做?除此外还有什么方法优化?
- 线上的服务器监控指标,你认为哪些指标是最需要关注的?为什么?
- 如何做压测,抗压手段
- 秒杀模块怎么设计的
HR面
- 自我介绍
- 你怎么评价你之前的3轮面试
- 你怎么看待你自己,你最大的核心竞争力是什么
- 未来自己的职业规划
- 对阿里技术氛围有什么样的理解,用过哪些阿里的开源库
- 期望的薪资是多少
- 最后,你有什么想了解的
总结
从年前开始面试到头条面完大概一个多月的时间,真的有点身心俱疲的感觉。最后拿到了拼多多、蚂蚁的offer,还是蛮幸运的。头条的面试对我帮助很大,再次感谢面试官对我的诚恳建议,以及拼多多的HR对我的啰嗦的问题详细解答。
这里要说的是面试前要做好两件事:简历和自我介绍,简历要好好回顾下自己做的一些项目,然后挑几个亮点项目。自我介绍基本每轮面试都有,所以最好提前自己练习下,想好要讲哪些东西,分别怎么讲。此外,简历提到的技术一定是自己深入研究过的,没有深入研究也最好找点资料预热下,不打无准备的仗。
这些年看过的书:
《Java核心知识》《Java面试宝典》《高并发与多线程》《Java程序性能优化》、《Spring实战》、《Zookeeper》、《高性能MySQL》、《亿级网站架构核心技术》、《可伸缩服务架构》、《Java编程思想》
说实话这些书很多只看了一部分,我通常会带着问题看书,不然看着看着就睡着了,简直是催眠良药
最后,附一张自己面试前准备的脑图:
面试前一定少不了刷题,为了方便大家复习,我分享一波个人整理的面试大全宝典
想获取个人高清面试准备的可以私信回复【面试资料】领取及个人也准备了很多面试题含答案的资料提供供你刷!
- Java核心知识整理
Java核心知识
- Spring全家桶(实战系列)
- 其他电子书资料
Step3:刷题
既然是要面试,那么就少不了刷题,实际上春节回家后,哪儿也去不了,我自己是刷了不少面试题的,所以在面试过程中才能够做到心中有数,基本上会清楚面试过程中会问到哪些知识点,高频题又有哪些,所以刷题是面试前期准备过程中非常重要的一点。
以下是我私藏的面试题库:
写在最后
很多人感叹“学习无用”,实际上之所以产生无用论,是因为自己想要的与自己所学的匹配不上,这也就意味着自己学得远远不够。无论是学习还是工作,都应该有主动性,所以如果拥有大厂梦,那么就要自己努力去实现它。