写在开篇的思路
2020年是多灾难的一年,对于我们每个人来说,健康地活着比什么都重要。受到疫情的影响,很多公司都过得比较艰难,裁员更是普遍,所以对大部分来说保住饭碗就很不错了,更别说什么跳槽晋升了。

但今年的我,似乎要比很多人幸运,专科出身,起点很低了,在看重学历的一众大厂中杀出一条血路。工作两年我就跳槽进入了苏宁,在苏宁待了3年,现在竟到了阿里。身边很多人都好奇,我究竟是怎么做到的?下面就来分享一下我这些年是怎么快速晋升的,希望能够给你带来一些启发和帮助吧。

本文主要分享4个点,可按需来阅读:

Share1:阿里Java岗面试题
Share2:苏宁开发三年,我如何积累经验?
Share3:5年开发经验,如何跳槽阿里?
Share4:如何提升阿里社招面试通过率?
图片说明
专科出身,2年进入苏宁,5年跳槽阿里,论我是怎么快速晋升的?
Share1:阿里Java岗面试题
(1)Zookeeper 部分

CAP定理
ZAB协议
leader选举算法和流程
(2)Redis 部分

Redis的应用场景
Redis支持的数据类型(必考)
zset跳表的数据结构(必考)
Redis的数据过期策略(必考)
Redis的LRU过期策略的具体实现
如何解决Redis缓存雪崩,缓存穿透问题
Redis的持久化机制(必考)
Redis的管道pipeline
(3)Mysql 部分

事务的基本要素
事务隔离级别
如何解决事务的并发问题(脏读,幻读)?
MVCC多版本并发控制?
binlog,redolog,undolog都是什么,起什么作用?
InnoDB的行锁/表锁?
myisam和innodb的区别,什么时候选择myisam?
为什么选择B+树作为索引结构?
索引B+树的叶子节点都可以存哪些东西?
查询在什么时候不走(预期中的)索引?
sql如何优化?
explain是如何解析sql的?
order by原理
(4)JVM 部分

运行时数据区域(内存模型)
垃圾回收机制
垃圾回收算法
Minor GC和Full GC触发条件
GC中Stop the world
各垃圾回收器的特点及区别
双亲委派模型
JDBC和双亲委派模型关系
(5)Java 基础部分

HashMap和ConcurrentHashMap区别
ConcurrentHashMap的数据结构
高并发HashMap的环是如何产生的?
volatile作用
Atomic类如何保证原子性(CAS操作)
synchronized和Lock的区别
为什么要使用线程池?
核心线程池ThreadPoolExecutor的参数
ThreadPoolExecutor的工作流程
如何控制线程池线程的优先级
线程之间如何通信
Boolean占几个字节
jdk1.8/jdk1.7都分别新增了哪些特性?
Exception和Error
(6)Spring 部分

Spring的IOC/AOP的实现
动态代理的实现方式
Spring如何解决循环依赖(三级缓存)
Spring的后置处理器
Spring的@Transactional如何实现的?
Spring的事务传播级别
BeanFactory和ApplicationContext的联系和区别
(7)其他部分

高并发系统的限流如何实现?
高并发秒杀系统的设计
负载均衡如何设计?
图片说明
专科出身,2年进入苏宁,5年跳槽阿里,论我是怎么快速晋升的?
Share2:苏宁开发三年,我如何积累经验?
(1)善于利用碎片时间,学习提升自我

从初级程序员升到资深开发,没有别的捷径可走,从始至终我都奉信:进步得靠学习,学习得靠时间堆砌。现在互联网行业基本上都是996趋势,程序员加班情况更为明显,所以利用碎片时间来学习,才是提升自己最合适的方式。

先算算我个人的学习时间账(可参考,可借鉴):

每天早上起床后,大概30min(上厕所,吃早餐,通勤等)
每天上班时,利用别人划水的时间搜一些技术资料,逛逛技术博客,约30min。
晚上通勤、吃饭(这个阶段我一般会休息+娱乐来调整自己状态,刷刷微博、朋友圈)
晚上到家后,不管再累都会抽出12个小时来学习,看书+看视频。
*这样计算下来,一天大概平均在2
3小时,一周5天至少10个小时,不包括周末。

专科出身,2年进入苏宁,5年跳槽阿里,论我是怎么快速晋升的?
(2)解决Bug积累经验(提升自己优化能力)

论坛上流行一种说法:大部分的程序员都是通过BUG来积累经验的,你解决的每一个BUG都是你的经验。

实际上,这观点并不在强调BUG的重要性,而是意味着程序员可以通过改Bug来提升自己的优化能力,但这个“改”就非常关键了。

如何“改”?

我在开发过程中,总会遇到大大小小的问题,在遇到问题时,我首先考虑的是凭自己个人的能力去解决,会看一下相关的源码,或者Google一下相关的资料或技术博客。如果问题太大,实在解决不了,就会去请教大佬,不会纠结来纠结去,浪费时间还没效果,耽误自己的项目进度。请教大佬也有讲究,不是让他直接帮你解决好问题,而在是建议或思路的基础上自己去思考。
另一层意思则是需要我们主动地去提升自己的优化能力了。我在写代码的过程中,会主动地引入面向对象思想和设计模式;会考虑性能优化(如何让sql语句更快,如何让虚拟机内存性能更好);在“单机版”程序的基础上问自己,如何搭建集群?如何利用现有的面向集群的组件?(比如可以用Eureka搭建服务治理的集群,在集群中用Ribbon做负载均衡)
最后,技多不压身,还要学一些redis,消息中间件,JVM调优,MySQL优化以及Spring Cloud方面的内容。
(3)参与开源项目

其实,在很多面试攻略和分享中,我们都能get到一个信息:参与过开源项目的面试者往往更吃香,更容易获得offer。

那么,为什么参与过开源项目的程序员会更吃香更抢手呢?

大型的开源项目几乎都是大型团队构建的,且非常复杂,由此可以推断出你个人的能力和素质都是过关的;
开发开源项目,说明个人的综合能力得到极大提高,这些能力包括“书面沟通能力”、“了解如何挑选和协商要处理的事情”、“完善Git流程/GitLab流程”、“理解语言语法”等等;
其他:建立线上声誉、保持个人的进步的动力等等。
(4)提升自己的软实力,让自己更专业

按照我个人的理解来说,初级程序员更像学生,而高级程序员则需要拥有“独当一面”的能力,而这个过渡是需要时间的,也是我前两年来努力的方向之一。

提升自己的软实力,成为更专业的程序员:

要学会积极主动沟通;
提升自己解决问题(bug)的能力,积累解决问题(bug)的经验;
协调(扯皮)的能力:工作方面积极主动协调部门;
学会合作,一起完成一个任务或目标。
图片说明
专科出身,2年进入苏宁,5年跳槽阿里,论我是怎么快速晋升的?
Share3:5年经验如何跳槽阿里?
Step1:知己知彼(了解岗位职责,规划职业成长路径)

①岗位职责

求职时,我们往往更注重简历,却忽略了“岗位职责”这个关键词,实际这往往也会影响到我们的面试结果。

俗话说“知己知彼,百战不殆”,岗位职责非常清晰明确地标注了应该干什么,怎么干,干到什么标准,对于程序员来说,技术掌握程度以及之后的开发内容都要了解清楚。
图片说明

专科出身,2年进入苏宁,5年跳槽阿里,论我是怎么快速晋升的?
随便找的公司为例,就更不用说BAT一线大厂了

②成长路径

在第一次正式工作后,我就非常认真仔细的思考过自己日后的发展方向,实际上程序员的成长轨迹(晋升路径)越早确定越好。程序员的方向大致分为技术岗和管理岗,而这两个方向所看重的能力还是有很大本质区别的。

成长路径如下:

管理岗:初做者→技术经理→技术总监→副总裁→总裁
技术岗:初做者→高级工程师→技术专家→领域专家→领域权威
图片说明
专科出身,2年进入苏宁,5年跳槽阿里,论我是怎么快速晋升的?
Step2:制定目标(制定明确的、可衡量的、可达到的、有时间限制的目标)

在职场中,一定要制定自己的的目标,这样才不免被沦为“咸鱼”,想要快速晋升,就得从目标下手,目标需要满足SMART原则:

具体的(Specific)
可以衡量的(Measurable)
可以达到的(Attainable)
具有相关联性的(Relevant)
有明确的时间截止的(Time-based)
简单来说,我的操作就是将自己的目标进行阶段性的拆分,比如我1-3年需要达到一个什么阶段,3-5年要达到什么阶段,然后在这个阶段里继续进行拆分,树立一个一个小目标,然后构成一个大目标,总目标,这样就会容易达到得多了。

Step3:善于思考(培养逆向思维、优化思维)

不想机械式的码代码,快速晋升之道首先就要转变自己的思维,要开始慢慢调整,善于思考一些问题,培养逆向思维和优化思维。

所谓的逆向思维,就是要多问自己为什么?如:

为什么需要这些数据?
为什么要做这些事?
为什么要做总结?
为什么要做规划?
为什么要做代码审核?
而优化思维,则是把事情做得更好,即使是繁琐杂事,也有优化的空间,包括效率和效果,任何事都是有优化空间的,缺少的是发现的眼睛。
图片说明
专科出身,2年进入苏宁,5年跳槽阿里,论我是怎么快速晋升的?
Share4:如何提升阿里社招面试通过率?
(1)准备简历

面试是会根据简历来进行对你提问的,尤其是对于开发人员来说,看到你的项目经历后,或多或少都会问相关的问题,甚至一线互联网公司会针对项目进行提问,所以准备简历这一环节就尤为重要。

准备简历时,一定要真实,简历作假是职场大忌,切记切记。其次,要分清楚“了解、熟悉、精通”三词的区别,对技术栈的掌握程度跟面试题难度密切相关。
图片说明
专科出身,2年进入苏宁,5年跳槽阿里,论我是怎么快速晋升的?
当然,为了帮助各位能够顺利过了简历,我也准备了一些模板大礼包,包括我自己的个人简历也在里面,欢迎大家参考:
图片说明
专科出身,2年进入苏宁,5年跳槽阿里,论我是怎么快速晋升的?
(2)尽量找内推

校招容易,社招难。这是一线互联网的普遍现象,对于应届生的要求相对来说还是比较宽松的,但对于有一定工作年限的人来说,技术要求就比较高了,因此很多中途想要进一线大厂的人都说社招实在太难了,简历都过不了。

那其实也是有一些“捷径”可走的,可以找一些内推机会,相对直接社招来说,几率大大提升了。

(3)对技术要掌握一定的广度和深度

既然是技术岗,那么企业对于技术掌握的广度和深度是有自己相应的要求的,学历在技术面前都显得没那么重要了,因此努力提升自己的技术水平是程序员的首要目标。

那么,技术要掌握到什么程度呢?特梳理了一下技术路线,如下图谱:
图片说明
专科出身,2年进入苏宁,5年跳槽阿里,论我是怎么快速晋升的?
对于现在流行的一些技术框架,我又掌握得如何了呢?实际上,我是有一个记录学习心得,做学习笔记的习惯,所以我对一些技术也有自己的总结和经验。

Java核心成长笔记:
图片说明
专科出身,2年进入苏宁,5年跳槽阿里,论我是怎么快速晋升的?
SpringBoot核心技术笔记
图片说明
专科出身,2年进入苏宁,5年跳槽阿里,论我是怎么快速晋升的?
SpringMVC开发核心笔记:
图片说明
专科出身,2年进入苏宁,5年跳槽阿里,论我是怎么快速晋升的?
Spring源码深度解析:
图片说明
专科出身,2年进入苏宁,5年跳槽阿里,论我是怎么快速晋升的?
Redis学习总结
图片说明 专科出身,2年进入苏宁,5年跳槽阿里,论我是怎么快速晋升的?
(4)面的是什么部门?面试的时候喜欢问什么?

在面试前,事先要清楚自己面试的是什么部门,要做好功课。比如,支付宝、蚂蚁金服这类的事业部,项目多与金融相关,淘宝、拼多多则是电商,这些区别也会影响面试的侧重点。

至于面试官喜欢问什么,则需要依靠平时的刷题来积累了,刷刷题,做到举一反三,对面试还是有很大的帮助的。
图片说明
图片说明

专科出身,2年进入苏宁,5年跳槽阿里,论我是怎么快速晋升的?
写在文末的箴言
读万卷书,行万里路。作为程序员,都说职业生涯到35岁就结束了,实际上大可不必相信这种年龄焦虑,35岁上的程序员也有不少,要不想被市场淘汰,首先你的有价值,你没有了价值,无论是什么职业都被社会淘汰的。

学习,永远不会辜负你,靠学习得到的,永远是你最宝贵的财富。

以上文章中,提及到的所有的思维图、笔记内容、面试题等资料,均可以免费分享,只需要你:【点赞转发】+【评论】文章,点击文章开头链接即可免费领取。