阿里巴巴校招四面经验分享
总结
06.20我从北京xxxx有限公司离职,结束了一年的见习生涯。07.05-08.04在帮我姐夫做翻译;毕竟这段时间比较空闲,在空闲的时候我都是在准备面试,不管是Java基础、JVM、数据库、数据结构、分布式、集群还是项目都准备的差不多,期间我看过《数据结构与算法分析》和《Java编程思想》等书籍。08.03我回到深圳,08.04开始的阿里一面到08.22的四面,今天得知四面挂了感觉很可惜,毕竟差Offer仅一步之遥,但又在意料之中;你选择公司,公司同样也选择你,如果你没有足够优秀,那么对不起-你只是一个过客,而我就是那么一个过客而已。我也留了退路,毕竟阿里没有十足的把握;在这段时间我也去面过三家公司都是自身产品研发,很巧很幸运也都拿到了Offer;公司没有好坏之分,你选择公司的原因无非看在该公司是否能够给予我们期望的salary、行业的前景和对自身的成长空间,这些之中阿里无非是首选。从阿里的这趟面试经历中,给我最大的领悟就是:只有自己足够优秀,才有选择的余地。
一面(30分钟)
你最近在干吗?(********)、你能说下服装外贸的流程吗?、集合底层原理、介绍项目、介绍下buddo、如果我发了两笔相同的转账你是怎么处理的?(项目上,采用redis:单线程)、redis挂了怎么办?(采取集群模式,能够持久化:命令行log和持久化到本地或者是远程服务器存储)、你能讲下对账吗?、你有什么要问我的吗?
二面(45分钟)
介绍一下自己、介绍一下项目、问了个交易场景是怎么处理的、你做过jvm的优化吗(答:没有,因为在项目上有专门的架构团队,他们负责这些工作,但我有简单了解过)?那你在项目上优化过什么没有?(答:将数据库数据放入缓存、因为这些数据是不常改的)你除了学习java还有学习其他语言吗?(答:有了解过python偶尔会去看一些视频,毕竟现在我还处在学习阶段,我觉得我现在应该先把java基础先打牢,然后再去把其他语言作为第二或者第三语言)、你看过redis、dubbo的源码吗?(答:没有,但我简单了解过;看源码就是看别人写的好的代码思想,因为看源码需要有足够的能力才有看得懂,我觉得java的基础得先掌握牢固,比如:设计模式啊、jdk源码啊等)你除了在项目上学的东西还有哪些途径获取知识(公众号、书)、你关注的公众号有哪些?(Hollis、Java后端技术、Java思维导图、Java技术栈、Java面试笔试)、在最近的一篇文章你学到了什么(JVM,开始巴拉巴拉)、你参加过世界知名的大赛吗?(如:ACM,答:我参加过蓝桥杯、创新大赛,ACM没能力去啊)、你的成绩怎样?(开始巴拉巴拉)
三面(49分钟,交叉面)
- 前戏
A:你面的是ICBU(国际技术事业部)是吗?
B:是的,之前填的是这个部门
A:来我们部门(业务平台事业部)吧?现在阿里的重心在我们部门,ICBU的话不是公司的业务核心(面试官在憨笑)
B:可以啊,可以转部门吗?可以的话我就转过来(在憨笑)
A:可以转,不过一般是要在正式两年之后才可以
A:你之前面试过吗?你是第轮面试了啊?
B:这是第三面了
A:你现在人在哪里呢?
B:我现在在深圳这边
A:来杭州吧,深圳那边的话是一个研发基地,杭州是总部基本核心业务部门都在这里
B:可以的,听从安排,毕竟阿里牛人多,哪里需要去哪里(在笑着)
A:好吧,现在开始我们的面试吧
- 面试
A:自我介绍下......
B:巴拉巴拉
A:你做过哪些项目
B:开始叙述......(先讲做过的项目,然后挑一个熟悉的项目精讲:包括项目背景、项目系统架构、用到的技术、模块的各个功能)
A:为什么要用分布式?我集成模式也可以啊?
B:分布式系统的话有这些优点:qps、运行可靠性、可扩展性、可维护性、解耦等(还好多,多巴拉巴拉)
A:那分布式的数据一致性问题怎么解决?
B:在我们项目的话,内部通讯主要采用的是MQ,MQ在一定程度上市可以保证书屋的一致性的
A:MQ如何保证一致性的?
B:比如A模块发了一个消息到Topic1,B模块监听Topic1;如果B获取了消息就会往下执行,如果没有获取则消息还在
A:如果此时我B系统奔溃了怎么办?这个怎么处理?(这个问题主要问的是分布式、集群的特点了)
B:因为分布式系统在集群模式下,每一个服务实例都有运行数据的拷贝;比如B奔溃了导致线程中断,因为分布式有容灾的特性在每个B系统的集群实例都有相关数据的备份,即使B挂了也没事,还有B1、B2、B3......
A:xxxxx模块是干什么的?
B:巴拉巴拉
A:为什么网关要用restful接口方式?
B:为了兼容之前的系统,客户化的时候去掉了网关模块;现在统一采用的是dubbo接口,因为dubbo也有错误重试、软负载、服务自动发现等优点(建议在回答的时候尽量要回答为什么,自己主动说而不是别人问)
A:缓存你们一般用来干嘛?
B:在我们项目的话,主要用于两个方面;一是:基础配置数据,二是:异步缓存
A:基础配置数据的话是你们服务起来的时候一个一个启动吗?
B:是的,我们用的@PostConstruct注解,当服务一启动的时候就将数据库的配置加载到本地缓存;如果在应用程序中,某个请求拿不到缓存的话就去数据库查询(适当改编,因为之前是没有去数据库拿数据这一步,毕竟有可能缓存你拿不到消息)
A:项目问完了,现在问下java基础
A:StringBuffer、StringBuilder的区别
B:巴拉巴拉
A:ArrayList、LinkedList的区别以及使用场景
B:巴拉巴拉
A:泛型用过吗?
B:用过,比如List、Set、Map这些都有用到过泛型
A:泛型的优点是什么?
B:避免了CastClassException的异常;在没有泛型之前是用Object,但这有一个问题是会有类转换异常;泛型有类型擦除,在编译期间这行类型是不会保留的
A:再来讲讲集合吧,HashMap是线程安全的吗?
B:非线程安全,线程安全的有HashTable、ConCurrentHashMap
A:设计模式用过吗?
B:具体没用过,但了解过;比如IO的适配器模式和装饰器模式
A:使用单例模式的时候需要注意什么?
B:侧重双重校验锁(再巴拉巴拉其他的)
A:web开发了解吗?
B:了解过一些
A:问个简单的,post与get的区别?
B:巴拉巴拉
A:cookie与session的区别?
B:巴拉巴拉
A:好的差不了了解了,你还有什么想问的吗?
B:我问下的,阿里校招难吗?容不容易进啊?
A:挺难的,现在我们部门一个都还没过,一个Offer都还没发。你这边我觉得没什么问题
B:阿里对待校招生有怎样的培养计划?
A:进去之后都是有师兄带着的,也有全部的新人做一个项目............
B:转正难不难啊?
A:也不算难,转正的时候会参考以往的工作外加考核
B:好的,我差不多了解了
A:好的,谢谢,再见
B:谢谢啊,拜拜
四面(57分钟,交叉面)
A:清算与结算有什么区别?
A:你觉得Java跟其他高级语言有什么区别?
A:Java的最新版本是什么?有什么特性?
A:StringBuffer、StringBuilder的区别
A:线程安全的概念
A:代理模式
A:异常分为哪些,运行时异常与非运行时异常的区别,自定义异常属于什么异常
A:final与finally的区别
A:B_IO、N_IO、A_IO的区别
A:JVM
A:JMM
A:如果一个应用隔三天就会发生OutOfMemory,这个问题你会怎么排查?(jmap工具)
A:MySQL怎么备份(mysqldump -h127.0.0.1 -uroot -ppass myweb > d:/backupfile.sql)
A:复合索引的问题
A:MySQL的存储引擎有哪些,他们有哪些不一样
A:MySQL事务的四个特性
A:xxxxx项目分为哪几个模块?
A:适配器用来干嘛的?
A:你们项目的幂等校验
A:我大概了解了;结果的话这个星期会出,你注意下手机或者邮件。先这样了,再见
A:谢谢,拜拜
......(还有其他的,记不起来了)