阿里巴巴暑期实习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协议
白板写下简单算法题,如何去找到字符串中第一个出现一次的字符 白板写下单例模式的几种方式,分析下利弊