写在前面
背景
先说下个人情况吧,二本毕业,之前在一家中长工作3年左右,面试阿里也是一个偶然。
公司嘛大家都懂的,最后想着另谋发展,目光渐渐的投向了阿里,光看是肯定进不去的,我先将阿里的招聘需求给下载了下来,根据这些招聘需求,我总结出了一些面试必问的技术:多线程、JVM 、设计模式等等
误入歧途
面过大厂的朋友都知道,这些大厂面试不是说靠背面试题就能进去的。我根据这些面试常问的技术进行了深层次的学习,各种原理源码什么的到网上,书上各种地方翻、看、学,最后发现什么都没学进去。。。
问题分析
意识到不对后,第一时间停止学习,分析自己问题后发现,学习太杂,太乱,不成体系,没有一个合理的规划。就拿Spring源码来说,找个地方点进去就是看,没有合理的规划,看着看着就犯困了,然后就放下Spirng看其他的等等
解决问题
问题清楚了,剩下的就是解决了,先根据自己目前掌握的技术画一个xmind图,然后对比阿里招聘需求罗列出需要学习的技术
再分出轻重缓急,那个需要先学,那个可以先放下后面再学等等。
最后再将需要学习的技术进行细致的分析,找到学习的方向、目标(找不到的朋友可以去看看培训机构的大纲)
面试阿里
经过长达四个月的学习沉淀,发现自己提升确实很大,根据更新后的xmind图修改了自己简历,信心十足的投了阿里,不出所料,成功拿到了面试邀请,面试过程虽然艰难,但最后还是成功拿到了阿里offer
下面是阿里四面面经,感兴趣的朋友可以瞅瞅
技术四面面试题如下
一面(问了数据结构、jvm、锁等):
自我介绍和项目
HashMap底层如何实现?
Hash一致算法?
说说HashMap和ConcurrentHashMap的区别?treemap和HashMap的区别?
java的内存分区?
java对象的回收方式,回收算法?
CMS和G1了解吗?
CMS解决什么问题,说一下回收的过程?
CMS回收停顿了几次?
java栈什么时候会内存溢出,java堆呢,说一种场景?
集合类如何解决这个问题(软引用和弱引用),讲下这个两个引用的区别?
java里的锁了解哪些?
synchronized锁升级的过程(偏向锁到轻量锁再到重量级锁),分别如何实现的,解决的是哪些问题?
Tomcat的基本架构是什么?
什么是类加载器?
说说双亲委派模型机制?
GC的机制是什么?GC算法和回收策略?
未来的职业规划?
二面(线程、数据库、缓存、协议等):
讲一下项目
线程池由哪些组件组成?
有哪些线程池,分别怎么使用?拒绝策略有哪些?
什么时候多线程会发生死锁,写一个例子?
Redis的数据结构是什么? 线程模型说一下?
讲讲Redis的数据淘汰机制?
说说Redis的数据一致性问题?
Redis的分布式怎么做?
RPC讲一下?
三次握手和四次挥手?如果没有三次握手有问题吗?
Http请求过程,DNS解析的过程?
InnoDB支持的四种事务隔离级别名称是什么?有什么却别?说说MySQL隔离级别?
事务的特性及慢查询?
BTree机制说一下?
说说MySQL常用的优化方法?
三面(分布式,消息队列等):
自我介绍
cap了解吗,分别指什么?
强一致性和弱一致性有什么方法来实现的?
负载均衡怎么实现?为什么这么做?
缓存雪崩说下?
MySQL主从复制怎么实现的?具体原理是什么?有什么优缺点?
讲讲分布式事务?
消息队列,用到什么场景(削峰,限流,异步)?
zk的性能瓶颈怎么克服?
讲了下kafka,怎么保证数据不丢失?确保消息不会重复消费?
消息送达确认是怎么实现的?
四面(从项目讲起):
说了自己的项目
主要用到的架构,做了些什么?
比较复杂的业务逻辑讲一下?
遇到很难解决的问题和突破收货
以后的打算和未来的职业发展,谈谈自己的看法
总结
一定要了解自己掌握技术,对自己有个明确的认知,一定要谨慎对待写在简历上的东西,一定要对简历上的东西非常熟悉。因为一般情况下,面试官都是会根据你 的简历来问的;
能有一个上得了台面的项目也非常重要,这很可能是面试官会大量发问的地方,所以在面试 之前好好回顾一下自己所做的项目。
和面试官聊基础知识比如设计模式的使用、多线程的使用等等,可以结合具体的项目场景或者是自己在平时是如何使用的,这是个加分项
建议提前了解一下自己想要面试的公司的价值观,判断一下自己究竟是否适合这个公司。
另外,我个人觉得面试也像是一场全新的征程,失败和胜利都是平常之事。所以,劝各位不要因为面试失败而灰心、 丧失斗志。也不要因为面试通过而度沾沾自喜,等待你的将是更美好的未来,继续加油!