从事java字节码工作十几年,遇到最多的一个问题就是如何学好java。
记得高三第一次接触java的时候,听说java好找工作,就下定决心要学好。在网上查了很多资料,说《java编程思想》是本好书,就买了本书啃。这并不重要,这让我几乎怀疑我的生活和我是否适合它。我在网上找鸡汤,灌了鸡汤,又开始带血嚼。一个月后,我放弃了。我真的无法理解。不知道推荐初学者入手这本书是为了什么?是为了减少抢工作的人吗?

回顾过去的十年,我确实走了很多弯路,浪费了很多时间。直到做完新浪旅游频道、农业银行门户等几个大项目,我才开始对java有了深入的了解。然后转战培训领域,指导了很多零基础的同学找到java开发工作。
我也在不断总结学习java的最佳方法,根据自己十几年的经验写这篇文章。如果你是java零基础,仔细看完会觉得很贴心。你会遇到什么阻碍,你会采取什么态度,都会说得清清楚楚,明明白白。
建议初学者把视频和书籍结合起来,以视频为主线,书籍为辅。视频里有操作细节,书本的理论部分会更透彻。可以看51cto的“玩java”系列的视频,从java基础到javaWeb都非常详细,可以在里面找到。我在介绍书籍的每个模块时都会做相应的推荐。
我把java学习分为四个阶段,学习顺序和技能点可以如下图所示。当然,相比一些路线图,我给的这张可能没那么详细。我站在一个初学者的角度,兼顾学习时间和技能树给出的完整路线图,旨在让初学者少走弯路,直奔找工作的目的。至于java本身,真的是深不见底,没有十年的积累也不能说精通。还是需要在工作中积累。
第一阶段:java入门:
java入门由基本语法、面向对象、高级、进阶三部分组成,难度逐渐增加。对于零基础的新手来说,树立信心最重要。如果一开始就打击他们,以后就很难坚持了。
自考最大的问题是,你要忍受一个人孤军奋战带来的迷茫、彷徨和焦虑。有时候,你会觉得自己好像陷入了泥潭,一眼看不到尽头,挣扎着,看不到希望。
为了克服这种心理,我开了两个药方:
1.一定要多做练习。看完一章做习题,你会发现,学完一个知识点,你会有一种模糊的感觉,类似于道德经的境界。这个时候做习题,先从简单的开始,做的过程中难免会遇到问题。遇到问题就复习巩固。这样的循环可以给你确定感和踏实感,也可以建立自信。最怕的就是学的快。一切都是半生不熟,学完就忘了前面。看似学得快,其实基础不稳,风一吹就倒。
2.写一份研究总结。学完一章,写一章。在写作过程中,可以对所学内容进行梳理和复习,或者寻找知识盲点。如果你开始写,你会发现,总结之后,你的记忆会深刻很多,你会更透彻地理解知识点之间的联系。有时候,学的时候不懂的,总结的时候就懂了。
如果你能做到以上两点,你会觉得自己很踏实,稳扎稳打,坚持下去,嫁给白,到达人生巅峰的那一天就不远了。
给大家推荐一本经典的入门书,Head First JAVA,从初学者的角度出发,图文并茂,通俗易懂。
解释Swing的那一章可以跳过,因为很少用到。
有了一本书,我们需要两样重要的东西,一个叫jdk的软件开发工具包,也叫java语言。顾名思义,它其实就是一个软件,想学Java开发必须安装。还有一个叫IntelliJ IDEA,是用来开发java程序的软件。有了它,我们的java开发可以变得和跑酷一样快。当然,也有公司使用“eclipse”作为他们的软件,但是建议你使用“IntelliJ IDEA”。谁知道它的好处?
重点来了。十年前,我讲过我的坑经历。请原谅我的胡言乱语。如果这些经历真的能让你少走一些弯路,我就满足了。java se包括三个主要部分:
1.基本语法:这部分包括:常用dos命令、jvm和跨平台、安装jdk、配置环境变量、java编码规范、数据类型、变量和常数、运算符、类型转换、随机数、流控制语句、循环语句、程序调试、数组、数组类、方法和方法重载。
对于零基础的学生来说,在这里配置环境变量会花费更多的时间,但是这个知识点不难理解,就是一定要小心。键入错误的字母或标点符号将导致效果失败。
数据类型和变量将是您遇到的第一个障碍。在这里,你必须了解什么是数据类型和变量,打下坚实的基础,然后在后面学习。磨刀不误砍柴工。
然后是第二个难的循环语句。很多同学会在这里晕一会儿,主要是因为流通量大。以前涉及流通的知识点都是涉及一堆新东西。如果掌握好循环的语法,多做练习,基本上所有的同学都能顺利度过这个难关。
如果一直卡在这里,就要考虑是否适合发展。在这个阶段,基本上,这些就是你会遇到的症结。做好心理准备,遇到任何困难都不要放弃。刚接触java的时候写代码很慢,而且很容易打错代码。有时候你看笔记的时候会打错代码。小心点,慢慢来,你会克服的。
2.面向对象:这部分包括:类、对象、构造方法、封装、继承、多态、抽象类、包、访问修饰符、接口、final关键字、static关键字、匿名对象、内部类、代码块、异常。
真正的挑战已经开始。从以前的面向过程到面向对象,大部分同学都会觉得不适应。再学一遍,他们就不知道到处都是什么类,什么对象了。
这里有一个思维方式的转变。给自己一点时间慢慢消化这些来自铺面的新概念。面向对象的内容比较抽象,单从概念上不容易理解。多做练习,直到建立类和对象的模型。
很多自考的学生在这个阶段很容易放弃,认为自己不适合学习java。我想说的是坚持住,因为不是只有你一个人觉得难。
3.高级:这部分包括:通用API、集合、多线程、网络编程、IO流、反射、注释、范型。
这才是距离真正被拉大的地方。就像高考既有总题又有分题,每道题的内容都很丰富,难度也很大。这也是面试问题堆积的地方,尤其是集合和多线程,几乎每次面试都要用到。这一阶段花费的时间很可能比前两个阶段的总和还要多。
除了收藏,这里的内容一定要完全掌握。如果其他内容实在难以理解,可以先放在一边,留待以后学习,以后再复习,对后续学习不会有太大影响。但是要想进一步提高这些知识点,是绕不开的,尤其是反思、注释、范式等。是许多框架的基石。

第二阶段java web:
这部分内容比较复杂全面,前端基础需要学习:HTML、CSS、Javascript、jQuery、Bootstrap。
相比后端,前端部分相对简单,简洁直观。敲东西,马上就能看到效果。对抽象思维的要求没有后端高。只要努力练习,相信大部分人都能掌握的很好。前端也是热门方向,工资也挺不错的。对前端比较感兴趣的同学也可以专攻前端。当然,那样的话,我们需要多学习前端部分,尤其是javascript,还要学习一些前端框架比如Vue,React。如果做java开发,对前端的要求会相对低一些。我这里的路线也是针对java开发的。
Html是网页的骨架。我们平时浏览网站看到的网页都是用html编写的,每个网页构成一个完整的网站。如果没有css,你看到的网页会非常单调,甚至不堪入目。css就像一个化妆师,给html制作的网页穿上漂亮的衣服,涂上漂亮的颜色。出现在我们面前的是一个漂亮的网页。这两件事不难学,如果你每天能抽出两个小时的话。
Bootstrap是html和css的框架。说白了就是html和css的封装。使用Bootstrap可以轻松制作出精美的网页,特别适合css基础不好的后端程序员。
这部分内容可以直接看官网的教程,很详细。你可以在网上查bootstrap中文网找到官网的教程。学习的时候可以重点学习网格布局。按顺序过一遍其他部分,你会有一个大概的印象。如果你以后用,你会有更深的印象。学了就很快忘了,浪费时间。
javascript是网页上的脚本语言,语法类似于Java。有了Java的基础学习javascript会非常简单,只需要学习一些网页特有的操作。使用javascript可以让网页动起来,注册验证等功能也是用javascript完成的。推荐书籍:
Jquery是一个javascript脚本库,实际上是javascript的封装。javascript能做的事情jquery也能做。推荐书籍:。
这部分,有了java基础,应该学的很快,两个星期就够了。
这些是前端部分。如今,前端和后端的分离越来越流行。但有些中小公司还是要求全栈,即前端和后端都可以学习前端部分,这样可以更清晰地把握项目的整体结构。作为java程序员,这部分也是必不可少的。
目前在一些数据库中有三种主流数据库,oracle,mysql,SQL Server,Java开发。一般Oracle和MySQL用的比较多。事实上,学习这三个数据库中的一个和另外两个是很容易的。可以从互联网公司用的mysql开始。数据库可以让你的网页动态显示内容。比如我们看新浪的新闻,今天看到的和昨天看到的不一样,是因为数据是从数据库中读取的。要了解这个,可以看MySQL必知。
Servlet和jsp:servlet是java web的核心和基础。无论框架如何演变,它的底层都是servlet,所以我们必须不遗余力地学习servlet。对以后的学习很有帮助。jsp实际上是一个servlet。现在,随着前端分离的日益流行,jsp已经濒临被淘汰的边缘。除了一些小项目和老项目,jsp在新项目中的使用越来越少。对于jsp学习,掌握它。这里推荐的“Head First: Servlet和JSP”很好理解。
Redis是使用最广泛的非sql数据库。很多公司的缓存解决方案都是redis,所以在这里,Redis被列为必备技能。
Tomcat是最流行的web服务器。我们做的网站和web项目,需要部署在web服务器上,对外提供服务,让别人看到。tomcat服务器需要掌握它的功能、配置、文件夹的作用,并在idea上配置Tomcat。
Http协议:如果你想了解更多关于javaWeb的知识,有必要学习http协议,它可以让你从底层看到我们是如何访问一个站点的。
Xml:现在很多框架配置文件都是xml格式的,学习xml很有必要。但是现在因为json更多的是用于网络之间的数据传输,所以我们只需要了解它的语法,能够简单的操作xml就可以了。
Ajax:ajax有一种神奇的力量,可以局部刷新你的站点,让体验变得优秀。本质上是异步的javascript和xml,基本上所有的网站都会用到这种技术。
linux:因为我们做的项目最后大概率会部署到linux上,而且很多工具大多运行在Linux上,所以我们还是需要掌握Linux的基本操作。
Mavean:mavean是一个用于项目构建和依赖管理的工具。大多数项目都使用它,它可以使我们对jar包的管理变得极其简单。
Svn和git:这两个工具是协作开发和版本管理工具。现在的项目一般都是团队完成的,大家开发的代码都不能在qq上传来传去。svn和git是用来整合大家开发的代码,也可以用来管理版本,让你的代码永远不会丢失。这两个工具功能相同,在公司中广泛使用。
学习以上内容不需要太多时间。可以看一些优秀的博客。
第三阶段:spring java:
现在流行的框架是ssm,是Spring、Spring MVC和MyBatis的缩写。大多数企业项目使用这三个框架或基于它们的包。学好这三个框架,即使不直接用于企业,也能快速上手。
Mybatis是一个数据库访问框架。其功能类似于jdbc,用于访问数据库。它封装了jdbc,sql语句放在配置文件中,所以修改和编写都非常简单方便。
SpringMvc是一个表示层的框架,功能类似于jsp。
Spring充当了胶水的角色,它提供了ioc容器,我们用它来管理对象。

现在春靴也很流行,已经要找工作了。它极大地简化了ssm框架的集成步骤,对约定大于配置这一思想的巧妙运用,使我们能够用很少的配置构建一个可用的ssm项目。
Ssm可以看《Spring+MyBatis企业应用实践》,spring boot可以看《简单的springBoot》
Vue是一个前端框架,可能是因为这个框架的作者是中国人,在国内很受欢迎,甚至超过了react。很多公司都在用,确实好用,功能强大。作为后端开发人员需要掌握一个流行的前端框架。很多公司面试的时候会问vue.vue可以看《vue.js实战》这本书吗?
最后,如果你想找一份java开发岗的工作,一个你能拿到的项目是必须的。
如果以上你都学会了,就可以试着找工作了。当然,dubbo spring cloud等分布式框架在互联网公司也有广泛应用,所以还有很长的路要走。加油,兄弟,修远!


