要说程序员最想要进入的大厂,阿里,腾讯,百度必定是首当其冲,而互联网大厂必定是阿里巴巴首当其冲,今天就来分享一下我面试阿里的一些经历与心得。
不想进大厂的程序员不是好程序员!
“80%的oer掌握在20%的人手中”这句话也不是不无道理的。决定你面试能否成功的因素中实力固然占有很大一部 分比例,但是如果你的心态或者说运气不好的话,依然无法拿到满意的 oer。运气暂且不谈,就拿心态来说,千万 不要因为面试失败而气馁或者说怀疑自己的能力,面试失败之后多总结一下失败的原因,后面你就会发现自己会越来越强大。
本人也是经历了大半年的准备才拿到了阿里的offer
普通专科毕业,12年转行进入软件开发行业。在杭州工作两年,14年来到深圳,从事java开发一晃8年。尝试过2次开发方向的转变,一次是2014年左右,移动APP的浪潮时期,自学了安卓开发半年,结果还没等转开发方向成功,移动开发的浪潮就逐渐过去,第一次转变尝试就这样胎死腹中,白忙活一场。第二次是2015~16年,这个时间点正是大数据开发最热门的时期,自学各种大数据框架,无奈受限于学历,并没有找到满意的工作,只能回归java。
盲目的追逐了几次技术浪潮,但是又没有真正对自己的职业生涯有多大的帮助。
总的来说,工作8年,做过一些尝试和努力,但可能没有遇到好的机会或者选择的方向错了,导致至今混得不尽如人意。
出于对现状的不满,我决定要努力奋斗了!
因为觉得这样确实是在浪费自己时间,(看着同期的同学都在茁壮成长) 与其坐以待毙,不如我自己先出去试试水,去一家能够迅速成长的公司。提完离职申请,我开始有意识看些面试问题,重拾培训时的笔记,背题目,看些基本的知识问题……
人生的路,一步慢,步步慢。如果在一开始就落后的话,只会与那些早有准备的人越离越远。
这段时间看过的书
《Java核心知识》《Java面试宝典》《高并发与多线程》《Java程序性能优化》、《Spring实战》、《Zookeeper》、《高性能MySQL》、《亿级网站架构核心技术》、《可伸缩服务架构》、《Java编程思想》
这些书也只是看了一部分,并没有全部看完,有时会经常带着问题就进入了梦乡,所以这段时期我的进展并没有太大明显。
分享下这段时期面试总结的一些经验
1、面试一定要带简历,这是态度问题,不然容易第一印象就不好。
2、简历上最核心的2点,1是自己掌握的技术栈说明,让面试官清楚知道你掌握技术栈;2是项目中使用了哪些技术栈,体现自己对这些技术栈的实际项目的运用情况。
另外简历不要超过3页。很多早期的项目经验和大篇幅的项目功能介绍,并没有什么意义。
3、准时,实在有突发情况,要提前打电话商量修改面试时间。
4、至少提前几周准备面试,因为java知识体系真的很庞大,不复习下直接面试,就像送人头一样,很容易错失难得的面试机会。
5、java基础一定要掌握好,不然丢分非常严重。之前面试一个高级java,竟然回答不出年轻代的垃圾回收机制,一下子我都不想继续聊下去了。
6、框架的核心特性要熟悉,并对其实现原理有一定的了解。比如:Spring Boot有哪些新的特性?他的核心特性自动化配置的原理了解吗?
7、主流中间件的工作原理和调优有一定的了解。
8、数据库一般也是必问的,索引,锁,事务,sql优化都必须了解。
9、听清楚面试问题再回答,不要答非所问,太过自由发挥。你和面试官聊得越有共鸣,你通过的几率越高。不知道可以直接说不知道,然后再阐述下自己的认知和了解,以探讨的方式让面试官和你互动,这样也能偷师点东西。
10、了解不深的技术栈名词和机制,尽量回避,不然只要你提到,面试官就可能展开深入的问下去。
11、多积累一些技术圈的人脉,很多时候内推进入会容易很多。
12、多积累一些可展示的技术成就和作品,比如参与了某某著名网站或者APP的核心模块开发,在GitHub上开源了什么框架或者参与了什么开源框架的开发,著名博客网站的一些排名,运营某某技术公众号。
由于我自己学习的过程过于杂乱无章,所以这段时期面试的效果并不理想
小转折
经过这段时期面试的失败我总结了一个道理:学习需要的也不是一腔热血,需要的是长期的规划,这里分享一个思维导图,大家可以自行进行查漏补缺和规划:
对应阿里P7架构师路径图
spring
Spring Cloud 是一套完整的微服务解决方案,基于 Spring Boot 框架,准确的说,它不是一个框架,而是一个大的容器,它将市面上较好的微服务框架集成进来,从而简化了开发者的代码量。
K8S
Kubernetes是Google 2014年创建管理的,是Google 10多年大规模容器管理技术Borg的开源版本。它是容器集群管理系统,是一个开源的平台,可以实现容器集群的自动化部署、自动扩缩容、维护等功能。
zookeeper
zookeeper是一个分布式服务框架,是Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。简单来说zookeeper=文件系统+监听通知机制。
Netty
Netty 是一个利用 Java 的高级网络的能力,隐藏其背后的复杂性而提供一个易于使用的 API 的客户端/服务器框架。
它活跃和成长于用户社区,像大型公司 Facebook 和 Instagram 以及流行 开源项目如 Infinispan, HornetQ, Vert.x, Apache Cassandra 和 Elasticsearch 等,都利用其强大的对于网络抽象的核心代码。
经历了这段时期系统性的学习后,筹备了半年终于又一次得到了去阿里面试的资格。
1.技术一面考察范围:
重点问了Java线程锁:synchronized 和ReentrantLock相关的底层实现
线程池的底层实现以及常见的参数
数据结构基本都问了一遍:链表、队列等
Java内存模型:常问的JVM分代模型,以及JDK1.8后的区别,最后还问了JVM相关的调优参数
分布式锁的实现比较
2.技术一面:
1.自我介绍
2.擅长哪方面的技术?
3. Java有哪些锁种类? (乐观锁&悲观锁、可重入锁&Synchronize等)
4.比较重要的数据结构,如链表,队列,栈的基本理解及大致实现
5. J.U.C下的常见类的使用。ThreadPool的深入考察; BlockingQueue的使用
6. Java内存分代模型,GC算法, JVM常见的启动参数; CMS算法的过程。
7. volatile关键字有什么用(包括底层原理)
8.线程池的调优策略
9. spring cloud的服务注册与发现是怎么设计的?
10.分布式系统的全局id如何实现
11.分布式锁的方案,redis和zookeeper哪个个好,如果是集群部署,高并发情况下哪个性能更好。
1.技术二面考察范围:
问了项目相关的技术实现细节
数据库相关:索引、索引底层实现、mysql相关的行锁、表锁等
redis相关:架构设计、数据一致性问题
容器:容器的设计原理等
2.技术二面:
1.参与的项目,选一个,技术难度在哪里?
2. Collections.sort底层排序方式
3.负载均衡的原理
4.设计模式与重构,谈谈你对重构的理解
5.谈谈Redis相关的集群有哪些成熟方案?
6.再谈谈-致hash算法(redis)?
7.数据库索引,B +树的特性和建树过程。
8. mysql相关的行锁,表锁;乐观锁,悲观锁
9.谈谈多线程和并发工具的使用
10.讲讲Redis的架构和组件
11. Redis的数据一致性问题(分布式多节点环境&单机环境)
12. docker容器
1.技术三面考察范围
主要谈到了高并发的实现方案
以及中间件:redis、rocketmq、kafka等的架构设计思路
最后问了平时怎么提升技术的
2.技术三面题目
1.高并发情况下,系统是如何支撑大量的请求的?
2.接着上面的问题,延伸到了中间件,kafka、 redis、 rocketmq、 mycat等 设计思路和适用场景等
3.最近上过.上哪些技术站点; 最近在看哪些书。
4.工作和生活中遇见最大的挑战,怎么去克服?
5.未来有怎样的打算
最后,你懂的,主要就是HR走流程了,主要问了未来的职业规划。
针对性的了解相关的知识
这半年多时间一直都在针对学习路线找相关的资料,也通过一位京东的朋友要到了一份京东架构师写的Java面试宝典(284篇)我把京东架构师给我的一份Java面试宝典啃完了,从而还找了Java后端以及一些大厂的面试场景和面试题不断刷题提高自己的眼界
Java核心面试宝典复习知识
这本Java核心知识把每个知识点解析的很深,对大家应该很有帮助,它把大部分的Java知识集结在一起深入的解析出来(非常建议大伙看一看)
关注我后台私信回复【面试】领取获取往期Java高级架构资料、源码、笔记、视频。Dubbo、Redis、设计模式、Netty、zookeeper、Spring cloud、分布式、高并发等架构技术
高并发
Redis
Spring cloud
Spring/Netty/Dubbo/JVM
微服务架构
根据自身面试经历整理以及不断收集的(珍藏版)
相关的电子书、底层源码
阿里巴巴必备学习知识点
很多人感叹“学而无用”,实际上之所以产生无用论,是因为自己想要的与自己所学的匹配不上,这也就意味着自己学得远远不够。无论是学习还是工作,都应该有主动性,所以如果拥有大厂梦,那么就要自己努力去实现它。
以上学习资料均免费放送,最后祝愿各位身体健康,顺利拿到心仪的offer!