阿里巴巴暑期实习Java四轮面经
  更新:牛客许愿真的很灵,上午发完帖,中午就收到了阿里的意向书😂  
   ----------------------------------------------------------------------------------------------------- 
   已经hr面完好几天了,整理了一下前面四轮的面经,希望可以对大家有用。许愿我可以面试通过,早点收到offer 
 一面
- 你的参与的运维项目里redis集群如何部署,gossip协议,如何实现容错呢
 - redis的基本数据类型,备份如何实现
 - 为什么redis单线程比较快
 - 如何去实现一个跳表的数据结构
 - Go语言的并发是如何去做的,goroutine模型,协程数如何设置,如何最大化系统的性能
 - go语言channel的原理,使用的时候遇到的问题
 - Java的lock和synchronized的区别,lock如何实现,看过源码吗,说一下具体的过程
 - 读写锁如何实现,锁升级和锁降级
 - volatile关键字的原理
 - CAS是怎么实现的,在哪些地方会有使用
 - MySQL的索引了解吗,哈希索引和B+树索引
 - 如何去优化数据库索引
 - Java的HashMap concurrentHashmap 1.7,1.8区别,红黑树具体是什么样的
 - JUC包里还有哪些东西,说说所有你知道的,解释一下
 - rehash的问题一般怎么去解决,举几个例子
 - TCP和UDP协议了解吗,具体讲一下,DNS的过程
 
二面
  这一面总共面了我1小时30分钟,感觉是压力面
  
     
   
 - 讲一下负载均衡有哪些做法,你知道的都说一下
 - 然后给了一个场景,服务端和客户端的分别怎么去做
 - 每回答一点,就会被问考虑XX问题了吗,然后继续深入问一下,这个场景题说了大概有半个小时
 - 两阶段提交中,如果rollback了,这个具体过程是什么样的
 - 如何去处理数据库大表join的问题,说了一些mapreduce的思路,让我继续去想优化,最后给了提示回答出来了
 - redis集群如何去保证可用性,为什么要采用这样的机制,如果让你去设计,如何去做。raft协议的原理
 - 反问环节,给出了对我回答方式的一些建议。
 
三面
- Java深拷贝浅拷贝,深拷贝如何去做(递归clone,还有序列化反序列化)
 - JAVA BIO与NIO、AIO了解吗,具体讲一下
 - Java反射的时候可以修改类的属性吗,如果可以,如何修改
 - 如何去防止SQL注入
 - MySQL行级锁和表级锁
 - 系统压测的话应该关注什么样的指标
 - 类加载机制,不同版本的同名类如何去区分
 - Java锁机制,lock实现
 - Java里面如何去关闭一个线程
 - Java线程池的原理和实现,一些机制
 - redis的应用场景,缓存击穿和缓存雪崩
 - redis主从如何保持一致性,主从同步的具体过程
 - Go语言设计上主要有哪些优势,适用于哪些场景
 - redis cluster集群如何设置,通信协议具体讲讲,如果遇到热点key访问如何解决
 - 挑一个项目讲一下
 - 具体讲一下你这个项目里面的图像检索算法是怎么做的,为什么会用这个检索库,算法的原理。为什么系统设计成分布式的结构能加速检索,文件索引如何去设计。
 
四面(交叉面)
- http缓存
 - TCP seqNum机制
 - 如何设计TCP重传机制
 - http状态码
 - http头部有哪些信息
 - cookie和session,session的数据怎么存储
 - 错误和异常时抛出还是直接处理,如何选择
 - redis为什么这么快
 - redis和memchache的区别,为什么redis单线程
 - 如何根据业务去规划redis集群容量
 - hashmap的原理
 - redis有哪些数据结构,应用到哪些场景
 - MySQL查询的时候怎么解决offset很大影响查询性能的问题
 - 项目,觉得收获比较大的时什么
 - redis cluster官方版本的集群原理,gossip协议
 - 白板写下简单算法题,如何去找到字符串中第一个出现一次的字符
 - 白板写下单例模式的几种方式,分析下利弊
 - 反问环节
 



