阿里&滴滴面试心得

前段时间面试,成功拿到滴滴和阿里的offer,总结一些面试的心得分享给大家,持续更新中~

Spring
  • 最好要阅读一下源代码,如果没有阅读过或者阅读起来比较困难,请参考笔者的Spring源码解析系列文章。
    https://blog.csdn.net/heroqiang/article/category/7303318
  • bean的生命周期,就是bean的初始化到销毁这一整个过程中比较重要的几个步骤,例如Aware、InitializingBean、BeanPostProcessor等扩展的调用过程等,这个很重要。
    https://blog.csdn.net/heroqiang/article/details/78683060
  • Spring事务传播行为的底层实现过程,例如REQUIRED、REQUIRES_NEW等的实现细节。
    https://blog.csdn.net/heroqiang/article/details/79056280
    https://blog.csdn.net/heroqiang/article/details/79057208
    https://blog.csdn.net/heroqiang/article/details/79058734
    https://blog.csdn.net/heroqiang/article/details/79057925
  • AOP的实现原理,JDK动态代理和Cglib的区别,什么时候使用JDK动态代理什么时候使用Cglib,如何选择等。
    https://blog.csdn.net/heroqiang/article/details/79037741
    https://blog.csdn.net/heroqiang/article/details/78938641
    https://blog.csdn.net/heroqiang/article/details/79056786
  • Spring MVC要知道它的执行过程。
    https://blog.csdn.net/heroqiang/article/details/79037456
  • 书籍推荐《Spring源码深度解析》,这本书中介绍Spring源码时用的版本比较低,不过还是可以看的。
Mybatis
  • Mybatis的考核点个人认为不太多,可以了解一下它的一二级缓存。有兴趣的同学可以参考笔者的Mybatis源码解析系列文章阅读一下源码。
    https://blog.csdn.net/heroqiang/article/category/7390298
Redis
  • Redis一般会问的比较多,可以多了解一下。集群、过期键策略、主从复制、哨兵、AOF持久化、RDB持久化都是比较常见的问题。
  • 底层的数据结构也可以了解一下,例如SDS(Simple Dynamic String,简单动态字符串),跳跃表,还有一些压缩策略(一般为数据大小发生变化后数据结构的变化)。这个面试问到的不多,但是想对Redis有更深了解的同学还是可以了解一下的。
  • 笔者面试的时候曾经被问到过Redis一些操作的时间复杂度,这个当时确实了解不多,答的不太好。
  • Redis的学习可以参考中文官方文档:http://redis.cn。
  • 书籍推荐《Redis设计与实现》。
MySQL
  • 索引、B+Tree、锁(间隙锁、索引记录锁、共享锁、next-key lock…)、MVCC、事务隔离级别、主从同步、缓存等等,需要懂原理,这些内容经常会被作为面试的考点。
  • 关于MySQL的学习同样可以参考官方文档,但没有中文的,这里给出一些笔者对官方文档的翻译文章:https://blog.csdn.net/heroqiang/article/category/7374271。
数据结构和算法
  • 这一项是我的弱项,大学数据结构和算法的课基本都睡觉了- -!。只能靠平时个人的积累和大学的基础了。
  • LRU Cache,这个可以了解一下,问的挺多,java中一般基于LinkedHashMap实现,Mybatis和Dubbo中都有LRU Cache的实现,要了解一下实现原理。
  • 排序、去重、大文件大数据量求最大值最小值、求两个集合的交集等等,这些算法应该都是比较常问到的,不过笔者这次面试经历没有遇到。
RPC框架
  • 世面中比较常见的RPC框架,至少要懂一个,例如京东的JSF(已经开源)、阿里的HSF(开源版为Dubbo)等,看过源码最好,至少懂原理,例如底层的网路通信框架、序列化协议、架构、容灾、服务的注册与发现等。
MQ
  • 至少掌握一个,对于MQ怎么保证消息不丢、怎么保证顺序、持久化、消费幂等性、pull和push模式的各自优缺点,需要掌握。
  • 最好能够多了解业界主流的一些MQ的特性,如kafka、Active MQ、Rabbit MQ、Rocket MQ等,会问到它们的区别和特性。
  • 推荐一篇美团技术的文章:https://tech.meituan.com/2016/07/01/mq-design.html。
Netty
  • 如果你的简历上体现了Netty,那估计一定会问到,Reactor模式、NIO、BIO的一些知识需要掌握,延伸下去各种I/O的特性、I/O多路复用、epoll、select/poll、AIO等都需要了解。
  • 同样阅读过源码最好,有兴趣的同学可以参考笔者的Netty源码解析系列文章。
    https://blog.csdn.net/heroqiang/article/category/7702929
  • 书籍推荐《Netty权威指南》。
Zookeeper
  • zookeeper的角色(都有什么、都是干嘛的),选举leader过程、zxid、watcher机制、分布式锁、羊群效应、崩溃恢复和消息广播的过程等。
  • 另外可能会牵扯到一些分布式事务的内容,也比较重要。
  • 书籍推荐《从Paxos到zookeeper分布式一致性原理与实践》。
JAVA
  • 多线程:不用多说,必问这方面的问题,包括jdk1.5的concurrent包里面的各种并发工具,ConcurrentHashMap、AQS、线程池等,读过源码最好,原理需要懂,synchronized关键字需要懂底层如何控制的。推荐书籍《java并发编程实战》。
    https://blog.csdn.net/heroqiang/article/category/7474432
  • 内存模型&GC:必考,这个不多说,相信大多数人都是有所了解的。推荐书籍《深入理解java虚拟机》。这里还有一个比较重要的点就是当线上出现内存问题、线程问题的时候如何排查,这个主要考察的是对jstack、jmap、jstat的等jdk工具的掌握程度。
  • 集合框架:除了上面提到的ConcurrentHashMap,包括HashMap、各种List、Set等,最好都有所了解,一个比较常见的问题是HashMap为什么线程不安全(在多线程环境下HashMap在扩容时可能出现环状链表导致CPU100%)。
  • java新特性,最好也能了解一下,java基础很重要,需要扎实。
Nginx
  • 与其他类似的WEB服务器相比有什么优点,为什么会有这样优点,主要考察对nginx进程模型的理解。
  • 如何实现平滑重启。
  • 可以了解一些扩展的应用,例如nginx+lua实现在nginx层限流、缓存、降级等。
  • 能了解OpenResty更好。
问题解决方案
  • 给一些场景,要求出方案,比如秒杀啊、大促啊这种高并发大流量的场景的方案。
  • 一些异常情况的降级、后备方案,比如依赖的某个中间件或者数据库挂了,机房挂了等等,要如何设计容灾、降级等方案。
  • 针对你简历中写的系统,提出一些问题,要求给出方案。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值