给您推荐Java学习路线图,是菊厂童鞋做开发经常使用的一些技术和工具,希望能帮助到您~
前端部分:
1)HTML:网页的核心语言,构成网页的基础
2)CSS:使网页更加丰富多彩灿烂的利器
3)JavaScript:使网页动起来的根本,加强了网页和用户之间的交互
4)HTML DOM:换一种更加形象化的角度来看待网页,让我们更加方便的控制网页
5)HTML BOM:与浏览器交互不可或缺的工具
6)JavaScript库,主要是:jQuery及其插件、YUI及其插件,使编写网页更加的方便快捷和健壮的强大工具
7)AJAX:异步提交,增强了用户使用网页的良好交互体验
8)JSON:比 XML更小、更快,更易解析的数据传输工具
9)FLEX:提供丰富多彩的动画效果
10)普元工作流:更加清晰明了的帮助用户处理业务流程上面的工作
11)JSP:Servlet的展示层,使网页逻辑与网页设计的显示分离
12)JSTL:加强和简化了JSP页面的开发
13)EL:使JSP页面写起来更加简单
后台部分:
1)JAVA语言编程基础部分:内容丰富是Java知识体系结构的核心和基础
2)JDBC:提供了一种基准,据此可以构建更高级的工具和接口,使Java开发人员能够编写数据库应用程序
3)JavaMail:用于电子邮件的相关的编程工作
4)JUnit:单元测试,整个变成工作测试的地位始终非常重要
5)Log4j:使我们能够更加细致地控制日志的生成过程
6)Servlet:JavaWeb的核心
7)Struts2:JavaWeb编程中明星级的框架,优点多功能强使编程工作更简单,主要用于控制跳转
8)Spring:JavaWeb编程中明星级的框架,同样优点多功能强使编程工作更简单,主要用于管理对象
9)iBatis:JavaWeb编程中明星级的框架,同样也是优点多功能强使编程工作更简单,主要用于程序和数据库之间的交互
10)SQL:与数据库交互式编程的必备工具
版本控制:
1)SVN:版本控制,方便团队协同工作
WEB服务器:
1)Tomcat:优秀免费的中小型WEB服务器
2)Weblogic:功能很强大的WEB服务器
开发工具:
1)Eclipse:开源强大的Java编程工具
2)MyEclipse:在eclipse基础上加上自己的插件开发而成的功能强大的企业级集成开发环境
数据库:
1)Oracle:数据库业界老大,这个常用一点当然,也仅仅是常用一些常用的功能而已,需要加强
2)MySQL:最好的关系型数据库之一
3)SqlServer:最好的关系型数据库之一
数据库客户端:
1)Toad:非常棒的数据库客户端软件
操作系统:
1)Windows
2)Linux
远程登录的会话工具:
1)SSH:一直在用,非常不错
其他:
各种种类和版本的浏览器(推荐使用FireFox)、office办公软件系列、各种文本编辑器(推荐Sublime)、各种阅读器等等
下面是从网上找的三幅图片,比较好的说明了作为一个Java程序员的学习路线图,这里作为一种自我提醒的工具,不时看看,并且会赶紧修补自己的知识树!
1、Java的知识体系结构
2、JavaWeb开发的基本学习路线图
3、JavaWeb开发的成长路线图
1、工程化专题
我们的工程化专题有五大内容:Maven、Nexus 、jenkins、代码审查 、Git/SVN
一共耗时一个月
2、源码分析专题
源码分析有三大内容: spring的源码分析,里面包括FactoryBean和MVC和事务处理与Spring源码中设计模式分析;持久层 ;企业级开发前瞻,一共耗时2个月
3、高并发与高性能
高并发与高性能有四大内容:并发编程, 里面又包含有线程安全和NIO和AIO 。异步通信,里面包含有本地队列和消息中间件。分布式协调技术,里面包含有Zookeeper和服务锁 。NoSqI: 里面包含有 MongoDB和Redis和Memcached 。一共耗时2个月
4、高可用性与可扩展
高可用性与可扩展有两大内容: 分布式架构介绍,里面有导流技术和服务设计和存储设计。服务调用,里面包含有WebService和Dubbo。 一共耗时2个月
5、性能优化
性能优化有四大内容:优化技巧,如何寻找性能瓶颈。JVM优化。数据库优化。服务器优化。一共耗时2个月
上面这五大专题,是几位工作经验十多年的大牛,根据自己往年的工作经验与经历,在根据现在科技发展的实际情况,历经几个月的时间编写而成,换句话说,上面的五大专题,也就是他们这十几年精华总结,现在,您只要按照上面的课题学习,只需要花费掉七个月多的时间,就能够学会与理解几位大牛十多年总结出来的精华。学完这些,还怕公司老总不给涨工资和升职么?
学什么东西都一样,小宅相信大家也是一样,在学东西的时候,总会安排好自己阶段性的学习,这样才能有效的提升自己与有效的理解和认知所学的知识。合理安排好,才能起到事半功倍的效果。
阶段一:
阶段二:
阶段三:
阶段四:
阶段五:
更多关于Java内容可以关注 华为云技术宅基地
编辑于 2018-09-11 11:46
赞同 90335 条评论
分享
收藏喜欢
收起
继续浏览内容
知乎
发现更大的世界
打开
Chrome
继续
更多回答
hasaki
5,983 人赞同了该回答
举个例子好了:我现在是个懵懂的小白,老师让我用java做一个图书管理系统:
展开阅读全文赞同 5983316 条评论
分享
收藏喜欢
继续浏览内容
知乎
发现更大的世界
打开
Chrome
继续
萝魏紫
春暖花开,知乎有你,滴-
谢邀
感谢 @拉勾 邀请创作
209 人赞同了该回答
其实关于如何学习JAVA这个问题,知乎上隔三岔五都有相关的邀请,很多时候问题都重复了,希望可以增强问题合并功能。所以有的时候我已经不回答了。不过上次我有个回答,随手用了拉勾教育的几个图来说明我对现在线上培训的认可。没想到官方来联系我了。把我吓一跳,刚开始还以为要问我收图片版权费呢。笑。
和线上教育机构的交流也不是第一次了,所以就聊了聊,拉勾教育是想邀请我,以我过来的经验给他们的课程把把关,所以我和拉勾深入聊了一下。看了看他们的课程,提了不少建议。同时被邀请来这个问题,再好好地梳理梳理,提供些经验。所以现在我可以肆无忌惮地用他们的图啦。
桀桀桀桀。
我入行的时候,是2004年的时候,那时候JAVA还不是十分流行。线上培训班这种互联网时代的东西,是完全没有的。线下培训班倒是有一些,老师都是公司里淘汰下来的。当时的学习过程主要还是前辈带。我其实算是0基础入JAVA行业的,因为我们那时候大学并不教授JAVA,除了计算机专业课以外,编程我用的是VB6.0和C,还不是C++。我入行的过程并不曲折,其实和现在的孩子的流程差不多。首先我是内推的面试。我的毕业论文老师的前几届学生在那个公司,学长就把我内推去了那家公司。因为有学长内推,同时他们还不单单内推,还讲解了一下主要的面试技巧,然后我就通过了那家公司的面试。一干就是十年。
事实上,我个人的JAVA能力,是在工作中提高起来的。主要分成两个阶段,一个是入门阶段,大概是前1,2年的时候,然后是第二个阶段,差不多5年左右。两个阶段的主要内容是不同的。
第一个阶段,主要还是培养从学生学习,到JAVA生态的过度。事实上,我入行的时候,JAVA的难度和你们现在相比,可以说是既更难了,又更简单了。当时JAVA的东西还没现在那么多,但是每一个都充满了坑,连JDK自己都充满了坑。。。而现在对于新手,学生啊,转行的来说,JAVA入门的难度在于广度太广。JAVA牵涉到的知识点太过于庞杂。一个项目,牵涉到的技术,可能有几十种,比如一个基本上能通用在各个领域JAVA公司的项目,大约是这么些技术,
PS: 这张图只是这个项目所需的知识点介绍,想要完整的项目介绍可以从这个链接获取
https://kaiwu.lagou.com/crmForm/form/b5ae93ca3b68417797f784a91a5df97e
你可以考虑下,对于学习这些技术,会需要多少时间?自学的话,除非是天赋异禀,极端聪明了。反正我是做不到的。不过幸好,当时我去的公司,有不少学长。在实际项目上学习JAVA是一个重要的方法。为什么?原因出乎意料。因为JAVA生态之所以如此庞杂,主要就是因为他们要解决层出不穷的实际问题。所以有很多东西,如果你只是像网上的“JAVA学习大佬”讲的,“看Spring源码!写编译器!写操作系统!”这样闭门造车,是一辈子不会明白,为什么这个技术会产生,为什么这个技术要这样使用。比如我们随手从图上挑几个技术。springboot为什么要用,初学者对springboot最大的疑惑在于“为什么这个东西这样一搞就跑起来了?”过去我们的application依赖于大量的参数,也就是配置文件,spring在早期被称为XML地狱,拥有海量的xml参数配置,如果你只是看看源码,玩玩,是没感觉的,但是实际上个项目,就能体会到XML地狱带给你的精神伤害,所以spring团队在spring4.0之后提出了springboot这个概念,其最重要的两个概念就是开箱即用和约定优于配置。通过注解来减少配置,通过约定优于配置,减少了大量的配置工作。这在spring4之后的发展当中,属于主流概念了,对于初学者来说,就造成非常大的困惑,但是一旦上了实际项目,实际做一下以后,就会发现,这样子减少了相当多的额外配置,这种体会和学习,不上项目是学不会的。
又比如docker技术,事实上,如果你只是玩玩,docker技术比传统的装个tomcat把jar,war包往里扔更麻烦,还要写docker file,还要跑docker服务,乃至于后面还要和k8s集成,一集成,又多了一大堆东西,什么仓库啊,路由啊,负载均衡啊。但事实上,如果是实际项目当中去走一遍,从开发环境到测试环境,从测试环境到集成环境,乃至于客户的各个环境跑一圈,你就会充分理解docker的概念,他的优势,以及解决的问题。解决了容器在不同环境的依赖,这能省下非常多的精力。
比如现在最流行的前后端分离,很多人来和我聊过,说学不会,觉得太复杂。关键是因为学的方法不对,没有上实际项目。虽然框架很难,但其实,没有这些框架更难,而且难得多。我曾经在项目上手写JS,HTML,CSS为了控制一个简单的外观需要上百行jsp,而使用框架,就马上解决了。
所以说,第一个阶段,也就是入门,要学得好,就是要上手做项目。不管你JAVA基础多烂都应该上项目。我当时进公司之前,只买了几本书,看了几个星期,再之前,连JAVA这个词都没接触过。要说基础弱,当时的我没人比得上。我觉得JAVA这么复杂,用上初中高中的方式学,是没用的,只有实际上项目,就像毛主席讲的,在游泳中学会游泳,在战争中学会战争。比如int转string,这种,可能大部分人会去背书,而我就是在要做这个事情的时候,去项目中其他的代码里找而学会的。这样子,比背出来记得更牢的多。我现在入行15年+,我仍然能清晰地记得我入行前几年写的垃圾但可用的代码的逻辑,就是因为这是实操。
当然有人会说,你运气好啊,能进个单位有学长教。现在哪有这样的机会?对也不对。现在有很多线上的培训机构都有实操项目的培训,与其上网刷抖音,不如上网看培训?现在的一线线上培训机构,比如拉勾教育等等,实战项目的累积,已经非常丰富,几乎可以说比普通中小型企业的实际项目还要多。毕竟线上培训拥有资料面,合作面广这个巨大优势,和互联网发展一结合,实战项目是非常丰富的。
第二个阶段,我自己的体会是大约从我自己工作三年到五年左右,一个提高的过程,这个过程伴随着我的三次连续加薪升职,从薪水是当时上海房价的一半,到一倍的样子。JAVA世界如果要精进事实上是比入门更难的事情,因为有很多内容其实完全和纯写代码无关,没人告诉你,或者无法接触到的话,你根本不知道该学。有很多人长期囚困于增删改查想提高却无法提高就是这个原因。事实上,这层纸是很容易捅破的,但是没人指导是最为致命的。幸好当时我遇到了我一辈子的恩师,当时带我的老大,现在人家早已经是那个公司的总架构师了。
有很多内容,在日常编码过程当中是接触不到的。比如我们再拿个例子,看看下图
同样的,想要完整的大纲内容可以从这个链接拿到
https://kaiwu.lagou.com/crmForm/form/b5ae93ca3b68417797f784a91a5df97e
一般来说,高并发在日常你看不到,一到生产环境就是生产责任事故。尤其是你如果自己做研究,更难研究通,不太会有人像我一样自己买上五六台电脑组个网来玩分布式的,我会这么做,也是因为工作中有需要研究的地方。很多时候,在5年这个节点上,要摒弃的是“手里有个锤子,什么都是钉子”这个想法。因为到了四五年工作经验的时候,很多人在一个公司掌握的内容都差不多了,非常数量了,这时候非常容易自己的视野被困死,什么样的工作,都想要用之前的技术解决。这是很致命的。在五年以上,精进技术的方法是广,要更多的接触其他大厂,大佬的技术栈,充分去了解市场上,最常见,最稳定,大家用得最多的技术。比如分布式,比如云计算,比如容器化。虽然大家都会讲高并发,但是实际上真正的高并发,只有很少人见过,那么高并发的时候,系统是怎么样的情况,用什么软件监测,用了容器和没用容器的区别,在本地集群和云集群的区别,同步的高并发和异步的高并发,这些都是不同的。要去实际了解,没有通过现实的,真实的项目,以真实的方式去学习,靠自己去想,事实上是无法想象的。
我曾经处理过一个负载均衡集群。两个软负载完全一模一样,版本,配置什么都一样,但是就是一个常挂,一个基本运作正常。最终发现是因为系统采用了粘性连接,负载均衡实际上没有起很大的作用。这种层面的理解,不是遇到过,或者真实遇到过的人给你讲,靠你自己去设想来学习,是根本不可能的。
过去十五年,我指导过很多很多我们JAVA的后辈,有刚参加工作的,也有工作很久的,现在的JAVA学习,也可以说既更容易了,也更难了。
过去我们那时候学习,最难的难度在于学习资料的缺乏。整个互联网上,本来JAVA的资源就很少,那时候我们也没有视频资料,乃至于成形的网课。都是靠论坛,BBS,邮件组口口相传。而现在,不仅仅视频已经普及了,而且网课已经发展得非常好了。我们那时候,正规的渠道只有买书,而书,在IT技术这种急速发展的过程当中,就像传统媒体被新媒体取代了一样,逐渐由于更新速度不够快而淘汰了。这是更简单的部分。
而更难的部分在于,信息太多了以后,又造成了良莠不齐 。我们常说,中文技术里面,一直有一个CSDN博客地狱。经过五六年无数人弃而不舍地复制粘贴,你在中文环境下查任何东西,都能在百度前三页看到无数一模一样的错误答案。这其实导致了很高的自学成本。我前几天教一个工作五年的孩子一个新技术,他查了一整个星期都没查对,就是因为这个CSDN博客地狱。而我用一份英文的资料,半小时就给他讲通了。
比如你去百度里面直接搜JAVA学习路线图,一定会出现各种各样的脑图。
很多里面还有struts这种根本不再主流的框架,或者是CVS这种早就落后的版本控制工具,更不要说对于各种技术的理解完全错误,很多脑图的作者根本不懂什么是框架,什么是技术,什么是技术的实现,什么组件,什么是容器,总之就是一堆词堆上去。我可以负责的说,我review完了以后,上面每个图,起码每个能找出5个以上的错。
这是因为过去十年,中国的软件行业蓬勃发展,导致很多质量不佳的内容出现在网上。过去内容还不多,八九不离十,尚且没太大的伤害,而现在技术存量太大了以后,就出现了通篇的错误。
我和拉勾的专家聊他们的课程的时候也专门聊过这个问题。中国的软件大发展已经过了野蛮生长的过程了,需要更多的,专门的专家来搞专门的教育,而线下肯定做不过线上,唯一的原因就是线上的培训,师资力量是灵活的,所以可以以更合理的价格提供更恰当的教育。
比如他们的基础课里面,以XML,HTML,CSS,JS的顺序来讲,这个就是更恰当的
因为HTML本身就是基于XML的,而JS又能通过操作CSS和HTML对网页进行改变。又比如用RabbitMQ作为知识点,而不是常见的activeMQ,这就是比较专业的做法。因为虽然同样是MQ,但是一个是ADMQ,一个只是JMS。在商业领域的应用量级完全不同。
事实上,专业的线上培训已经非常常见了,每个大型跨国公司都在使用,我自己所在的公司也购买了线上培训作为一种员工福利提供给技术人员。而现在的线上培训已经做得非常成熟了,从知识的深度和广度,到实战项目的“实际度”,再到培训推荐一体化,都已经脱离了十几年前一个线下教室加一个被大厂淘汰了的程序员当老师的线下模式了。
现在的技术世界发展和规模,和十几年前完全不同了,那时候,最大的还是十八摸,现在灯,等等灯灯早已经被FLAG甩到天边了。连oracle都要报价收购抖音海外版了。这个最大的变化对我们来说,是学习的周期和频率变得越来越快。过去你可以通过1年的学习来获得的知识,现在逼迫你6个月就学会,否则就落后于技术的变化。这样以来,自学的性价比就没有那么高了,虽然你省了几百块人民币,多吃了两顿火锅,但是你的比其他人多损失了一年时间,这其实是得不偿失的。