阿里五面,终不能成
前言
经常面试阿里和旗下子公司,和大家分享一下面试经历。
面试题目选优
1.缓存穿透,设计一个防止缓存穿透的解决方案,简单的就是存null值,但肯定会深究,可以结合布隆过滤器
2.设计分布式系统,里面又会问到流量分发到具体过滤器服务的方式,比如一致性hash算法,怎么调用?比如dubbo直连、等等细节会边说边问。
3.限流,设计一个侵入性最小的限流服务。
4.项目中碰到的问题,建议说框架本身问题,能提现个人能力,也避免问题太低级。
5.dubbo服务调用过程。
6.NIO、BIO区别,NIO解决了什么问题,Netty线程模型(源码拷问)。
7.限流标准(并发数? qps?并发数和qps关系?说出了3种限流方案和对应算法原理)。
8.dubbo调用端怎么在jvm中生成对应服务?dubbo服务端和调用端超时时间设置和区别、dubbo长连接。
9.mysql行锁最大并发数?
10.设计秒杀系统,异步方式,怎么优化?改为了同步的方式,异步和同步区别?
11.秒杀系统,会涉及到多个库表的更新,分布式事务怎么解决,我说的
消息最终一致性,异步?有没有更好的方案?同步TCC方式,TCC方式原理?
面试总结
1)多线程(ThreadLocal(问了父子线程怎么共享数据 interitable ThreadLocals)、lock和sync区别(问HashMap1.7、1.8区别时带出)、
AQS原理(执行过程源码,入队出队的细节)、CountDownLatch和CyclicBarrier的区别, volatile从指令重排序,内存屏障,聊到总线风暴)所占比重较大。
2)数据库(mysql索引(聚集索引、非聚集索引、索引结构(顺带会问各种树的特性)、执行计划、count1*区别、举例优化sql、MVCC和事务隔离级别的关系、间隙锁、行锁(和多线程混合问的,乐观锁悲观锁等)、唯一索引和普通索引的区别聊到了changeBuffer,聊了页分裂合页合并)比重较大。
3)jvm调优(可达性分析算法中根节点有哪些、cms和G1区别、怎样GC调优、怎样排查CPU彪高、内存彪高、逃逸分析)。
4)redis数据结构、跳跃表、redis qps能上多少,怎么知道的、sentinel和cluster区别和各自适用场景、redis cluster集群同步过程、redis单线程为什么快、多大叫大key、热key产生原因和后果以及怎么解决、本地缓存需要高时效性怎么办?
5)spring的作用、spring循环依赖怎么解决(说出三级缓存源码细节)、spring aop原理(动态代理)、spring bean生命周期(源码细节,以及各个位置的设计思路,有什么可扩展的)。
6)dubbo服务暴露和引用过程,负载均衡策略,容错机制在哪里实现的源码。
7)项目中碰到的问题。
8)为什么换工作?