也许今天的你在公司作着 CRUD 的工做,也许你还在为面试造火箭、工做拧螺丝悻悻不已,也许挣扎了许久却找不到进步的方向。java
不是计算机相关专业的我,从开始学习 Java 到进入阿里,用了一年多点的时间,不少人以为是进步比较快的,问我怎么学习 Java 才能快速进步,微信一一回复难以说的太明白,今天整理一下个人思考分享给你们。程序员
打好计算机基础面试
计算机基础是全部编程语言的根基,不理解计算机运做原理就没法真正理解编程的意义。就像咱们大一要从计算机基本原理开始学习同样,若是你想真正吃透一门语言,就须要理解进程、线程、堆栈、内存寻址、函数调用……算法
这些内容与任何一门语言都没有关系,倒是全部计算机语言的根基。打好计算机基础之后,对你来讲不一样的语言就真的只是语法和特性的差别,在语言之间转换就变得很容易。当我从 C 语言转向 Java 的时候,看了一天 Java 基础语法就开始写业务代码了。spring
自学和培训的小伙伴每每在计算机基础上比较薄弱,一旦学习到比较复杂的概念就会感受比较吃力,这个时候你须要好好补一下计算机基础知识。别说你没时间,今天不努力,明天就后悔。编程
熟练掌握 Java设计模式
《Java 编程思想》没有完整看完大致读懂两遍就不要说掌握了 Java。会用 Java 写代码只能说你入门了能够干活了,但也仅仅是初级阶段。缓存
我遇到过不少工做了三五年的人,作过不少项目,Java 水平却和工做了一年的应届生没多大区别。大部分人迷茫和没法进步的根本缘由就在于你仅仅掌握了java基础,看不到 Java 的无限可能,也不知道作什么能够继续进步。微信
熟练掌握 Java 须要你学习到 Java 特性的每一个角落,不须要记住每一个类和方法,但须要深入理解每一个特性的意义。工做中 SSM 框架为咱们屏蔽了不少技术细节,Java 的特性可能并不常常用到。须要你主动学习,至少要把《Java 编程思想》看两遍以上,其中反射、泛型、容器、注解、并发须要重点掌握。数据结构
熟练掌握框架
不少人参加培训是从 JavaEE 开始的,问我如何学好 JavaEE?我想说的是 JavaEE 其实已通过时了,如今要学 SSM。
掌握框架的第一步是学会使用。学习 SSM 的基本用法可以帮助你完成绝大多数开发任务,掌握了高级用法可以提出更好的解决方案。学习框架没有捷径,在工做中一遍一遍地练习是惟一的方式。
掌握框架的第二步是理解原理。不少人面试阿里失败就败在原理上,只知其一,不是其二,稍微问的深刻一点就答不上来了。理解原理就是理解 SSM 框架的灵魂,这也是一个程序员从体力劳动进阶到脑力劳动的门槛。
不理解原理只能作写代码的工具,理解原理才能成为真正的开发工程师。多思考、多总结、多请教,保持好奇心,多问一句是什么、为何,才能探索到框架的奥秘。
掌握框架的第三步是设计框架。试着去写一个简化版的 spring,实现 IOC 功能,你就会发现真 TM 难。泛型、容器、反射、注解、设计模式、重构等都会用到,经过设计框架,可以深入地理解这些 Java 特性和框架的设计原理。若是你尚未写过框架,尝试着写一个吧,边作边思考,好好体会下框架的秘密。
掌握应用技术
随着技术的发展,分布式、缓存等使用愈来愈普遍。Java 程序员须要掌握的应用技术也愈来愈多,好比 spring boot、spring cloud、dubbo、Redis、RabbitMQ、ZooKeeper ……不使用这些技术也能写出很好的单机程序,但掌握这些技术才能作好大型架构。学习这些技术也很简单,就是多加练习。
众所周知,阿里内部基本都是使用本身的技术,好比 hsf、diamond、metaq ……业界流行的这些技术用的不多。在阿里呆久了会感受与社会脱节,因而我就天天抽出时间去看这些技术的文档,作本身的项目使用这些技术,经过日复一日的练习来掌握这些不经常使用技术。
理解编程的本质
前面说了那么多,其实都是编程的术。相对于武功来讲,都是外在的招式。掌握了招式能够御敌,但想要再上一层则须要掌握心法。对于程序员来讲,编程的心法就是道。而我也是在阿里工做了好久才体会到道的意义。
想必不少人都知道“程序等于算法加数据结构”的说法。算法和数据结构听起来都很高大上,也是大部分作业务的同窗难以接触到的东西。不少人告诉我在公司本身是个 CRUD boy 不知道如何提升本身的能力,也有人抱怨“面试造火箭,工做拧螺丝”不知道该怎么办。
实际上在平常工做中,程序 = 控制 + 逻辑 + 数据,也就是算法能够拆分为控制加逻辑。优秀的框架都实现了控制、逻辑、数据的分离,实现了很好的解耦和灵活性,这也是全部框架的演进方向。
数据容易理解,就是程序的配置、静态数据和运行时数据;
控制是程序的主流程,通常在微内核或框架底层实现,控制逻辑通常与具体业务逻辑关系不大,只是定义了流程;
逻辑就是具体的业务逻辑,在特定约束下被控制流程调用生产出符合预期的数据。
试着从控制、逻辑、数据的维度去理解框架、设计框架、优化代码,你很快就能成为优秀的程序员。若是你以为在公司作业务很难提升技术,不妨尝试一下梳理出控制、逻辑、数据,而后进行重构。
Java学习思路架构
大部分程序员都会「写」代码,或者至少会抄代码和改代码。可是,会读代码的并不在多数,会读代码又真正读懂一些大项目的源码的,少之又少。由于它是两个缘由形成的:
1:咱们全部的教育和培训都在强调怎么写代码,并无教你们如何读代码
2:大多数工做场景都是一个萝卜一个坑,咱们只须要了解一个系统的局部便能开展工做,读不相干的代码,彷佛没用
因此,要养成源码三问的习惯:
“为何要有这样的架构”
“他是什么样子的”
“他是怎么工做的”
首先须要说明的是,分布式系统是一个复杂且宽泛的研究领域,学习一两门在线课程,看一两本书可能都是不能彻底覆盖其全部内容的。
相信你们都了解业务愈来愈复杂,服务分层,微服务架构是架构升级的必由之路,而对于微服务的优势相信你们都不陌生。
好比:易于开发与维护 / 微服务相对小,易于理解 / 启动时间短,开发效率高 / 独立部署 / 伸缩性强 / 每一个服务均可以在横向和纵向上扩展 / 微服务架构能够更好将架构和组织相匹配 / 每一个团队独立负责某些服务,得到更高的生产力 / 下降尝试新技术的成本......
总有人问这个东西好像用不上,因而要不要学这样的问题,而后又总有人担忧一直搬砖整天作些重复没提高的东西。
若是你这辈子只甘心作一个平庸的Java码农,那么你彻底没有必要去学习JVM相关的知识。
在IT产业中,寡头化出现表明着创业公司减小--没人再去用声势浩大的发布会讲故事、没人再去宣传本身拿了多少融资。
这一代中国人自小的教育不比欧美的STEAM,而是重学术、轻手艺。咱们每每会为工科和产能过剩画上等号。强大的资本和技术门槛为这些产业蒙上了一层神秘的面纱,让普通人很难真正了解到其中技术和工艺的复杂程度,也就更难明白其中的价值。可正是由于中国的工程化能力,才让咱们有机会走到AI时代的第一梯队,而不只仅是靠学术研究能力。
假如没有靠谱的公司,接触不到高并发的业务场景怎么办?你永远解决的是小问题,工做10年技术也未必提高多少。
不少程序员也常常找我说,没有经验就没有靠谱的公司收,没有靠谱的公司也就没有经验,我看了无数的书,本身作了无数的实验拼命想找个靠谱公司去深刻,可是感受好难,简直是个死循环
你们都比较关注高并发,缘由很简单,想去BAT这样的大公司,你必需要有高并发的经验。今天普及下高并发的知识,但愿你们对高并发有一个正确的认识。
有人说:项目实战相信不少程序员都多少会有的,但是咱们这个还要学习什么呢?
个人回答是:那就要看你想不想成为一个架构师了,为何98%的程序员工做10年,一生还只是一个开发者,程序员们都要想想这个问题,我是否是须要提高了。
我认为,学习项目实战最重要的仍是学习项目管理,做为程序员,都应该学点项目管理。
凡事皆为“项目”项目的两类属性(复杂的逻辑,庞大的信息量)
这才是咱们学习“项目实战”的终极意义。
想进BATJ大型互联网企业上班,提高本身技术能力 学习的能够来看看
这里我也分享本身收集的系统的学习资料,和几套学习路径图给你们,真心的但愿能帮助到你们。
**资料获取方式:加群:794812436领取以上架构学习资料
转发+转发+转发才可领取
加群:794812436领取以上架构学习资料