背景
这次是来源大学室友的面试经历分享,三年经验渣本,现在在杭州,做过外包(那是真的苦),由于疫情在家宅了4个月,其实在家苦修,4月拿到朋友给的阿里内推,说实话心里还是有点慌,但不能辜负这4个月的幸苦学习,最终还是侥幸拿到Offer
为什么面试成功,我总结了如下几点:
有明确的目标,有压力才会有动力。保持学习的习惯,每天至少学习两小时,每两个月最少看一本书。你想要三年入大厂,就要三年学习足够的知识,所以让自己疯狂起来吧。
要有精益求精的态度。你可以想象,如果支付宝因为bug停服1分钟会造成多大影响?如果是你写的,那面临的将是五雷轰顶。抱着这种敬畏的态度,不仅要知道API的用处,更要知道它是如何实现的。毕竟是人写的,会有各种问题,了解原理才能避免或者及时更改错误。
对技术和项目深入挖掘。面试官很喜欢问项目的架构、技术的深度和广度。为什么?我们需要保证一个系统健康、高效、可动态扩展(就比如支付宝,不能出bug,必须支持动态扩容等等)。那就需要你了解项目架构,学习如何设计项目;需要你深入了解源码实现和设计理念,知道哪种方式效率最好,你写的代码是否会出现bug,是否可以动态扩展……
另外说一点,为什么要看源码?
看源码可以了解实现原理,让你对框架的使用更得心应手(我以前不知道aop怎么用,看完源码之后就彻底懂了);其次可以避免一些使用上的错误(比如JDK提供的几种默认实现线程池,他有可能造成OOM,因为采用的无限队列存储任务);再者,我们可以学习优秀的设计理念,将来应用到自己的代码中。
可能你会想问,那么多框架都要看吗?那是不可能的!其实框架的设计几乎都雷同,我们只要针对2-3种框架进行深入研究,学明白其中的道道,那么再给你一个新的技术,你也会很快上手,并且结合项目进行学习(最终的目的不就是为公司挣钱嘛,所以用到啥学啥,谁也不可能都学会都学精,别有压力)。
我说了这么多,不知道你是否对自己有了全新的定位,在学习上有了明确的标准?如果你符合我说的,那么恭喜你已经或者即将成功。如果感觉到压力,那更要祝贺你,因为以后就是你蜕变的过程,请享受它!下面是我面试的阿里的经历!
技术一面(基础为主)
先介绍一下自己吧
说一下自己的优缺点
具体讲一下之前做过的项目
你觉得项目里给你最大的挑战是什么?
Hashmap为什么不用平衡树?
AQS知道吗?知道哪一些呢?讲一讲。
CLH同步队列是怎么实现非公平和公平的?
ReetrantLock和synchronized的区别
讲一下JVM的内存结构
JVM 李 new 对象时,对会发生抢占吗?你是怎么去设计JVM的堆的线程安全的?
讲一下redis的数据结构
redis缓存同步问题
讲一讲MySQL的索引结构
你有什么问题要问我吗?
技术二面
根据项目问了一些细节问题
说一下HashMap的数据结构
红黑树和AVL树有什么区别