javascript:(自学java大概要多久)
一、怎样学习Java
学习计划
首先,我把Java系统学习分成两个阶段。
第一阶段:建立完整的的技术栈,成为一个有富于生产力的高级软件工程师。
在这个阶段要掌握一系列的基础知识和工具。这些东西前后关联,所以学习过程成线性顺序,要从上往下进行。
下面是第一阶段的学习路线:
第二阶段:这个阶段的目标是成为Java技术专家、架构师,因此必须在上一阶段的技术上,往高处(例如设计模式、大数据)走,往深处(Spring源码、Java虚拟机)走。
这个阶段的知识,并不存在前后的关联。在完成第一阶段的学习之后,完全看工作的需要,以及个人的兴趣,安排学习的优先级。
下面是第二阶段的学习目标:
接下来,我就点一下这个学习计划中的“关键点”。
Servlet
要成为一个优秀的Javaweb专家。无论是你用SpringMVC实现的普通REST接口,还是微服务。往深地走,都要深刻理解Servlet以及容器(例如Tomcat).
因此,在深度学习微服务,以及SpringMVC之前,一定要把Servlet学精,因为他是整个Javaweb的基石。所以,在成为软件专家的路上,Servlet是最基本的垫脚石,务必重视。
SQL
在我作为程序员入行的时候,没少在SQL语言下功夫,尤其是在SQL语言优化方面,包括在存储过程中各种折腾。
但现在,SQL优化在开发过程中的优先级显著降低,有几个原因:
各种ORmap框架(例如Hibernate、Mybatis)的出现,使SQL的工作量大大降低。各种ORmap框架本身也会对编写的、自动生成的SQL进行优化。当前的服务器架构,如果要提高性能,首先应该考虑架构的横向扩展性,而不是在SQL上进行极端优化。但现在也不是说可以完全“任性”地编写SQL。只是说对于程序员,只要掌握最常见的SQL优化原则,做到工整就够了。
缓存、队列
缓存,队列。业界都有了较成熟的方案,例如Redis,ActiveMQ等。在学习的过程中,第一步是掌握核心概念,以及他们要解决的问题。然后就要亲自安装,使用这些软件,建立感性的认识。
其次就是在掌握核心概念的基础上,掌握这些开源软件的JavaAPI,然后试着在此基础上,编写典型的Demo,从而在Java语言层面上彻底掌握。
至于有些朋友提到的把概念再“实现一遍”。不知道朋友指的是使用API,还是把缓存和队列软件,用Java语言实现一下。如果是后者,不是说不可以,关键是太费时间。同时,就业界实践来说,不是特别必要。如果你真有兴趣,把优先级放低一点,作为一个更长期的目标。
Linux
这个学习计划是一个长期的,深入的学习计划。最终是要成长为技术专家、或架构师。那么有必要适时的掌握下Linux。因为在实践中,服务器往往委托于Linux服务器。而且将来,还有不少开源软件只能在linux上运行。
因此,在开始学习缓存和队列前,需要先掌握了Linux的基本用法。然后再学习的过程中,就把这些开源软件在Linux上运行。
这样,在你学习Java的过程中,顺便也把Linux学习了,这远比你将来单独学习Linux要有趣,印象要深刻。
微服务
微服务并不是一门具体的技术,而是一个设计理念,很多语言和框架都可以实现,例如Java中的SpringMVC等。
因此,如果已经掌握了SpringMVC、Springboot。那么对微服务的掌握是水到渠成的事情。你要做的就是注意力放在微服务的应用场景上。
设计模式
设计模式是较为靠上的东西。如果Java基础不是太好的话,很容易陷入空泛,眼高手低。
如果你的Java基础太薄弱,例如没有掌握“抽象类”。那么我建议你先把设计模式学习停一下,先把Java的基础知识补充下,至少要学完《Java核心技术》第六章,也就是掌握完整的现象对象的概念。然后再回来学习设计模式。
在学习设计模式的时候,一定要动手。最起码要把书中列举的设计模式,用Java语言实现一下。如果你阅读时是经典的GOF《设计模式》,其中的代码(用C++描述),就不容易用Java实现。建议你可以参照《HeadFirst设计模式》,其中的demo都是短小精悍,很适合用Java来实现。
这样,一则有利于理解设计模式。二则在学习设计模式的过程中,也进一步增强对Java基础知识的掌握。这种学习过程是一个相互促进的过程。
学习笔记很重要
特别重要的一点,学习的过程中,尽量的写学习笔记,其中包括难点和重点。
因为,系统深入的学习Java必然是一个长期的,综合的过程。到后期,一定会出现学着后面,忘了前面。如果你没有学习笔记,又没有实践中积累的代码,那么就会出现边学边忘的情况。
而有了学习笔记,可以给自己的学习留下了“踪迹”,以后复习的时候用来参考,很快就能把早前学习的记忆“唤醒”。
而且,这些学习笔记在后来的工作中,还能成为自己的参考手册,随用随查。
还有,那就是学习笔记还是一个特别好的面试宝典。因为既然你记下了笔记,这些东西往往经过你深度思考,深度消化的东西,也是你区别于其他工程师的卓越之处。
此回答转自乐字节
二、自学java大概要多久
每天五小时,三年左右可以基本应付工作。。。如果你觉得难以坚持,可以考虑C#。。JAVA能做的C#也都可以。。尤其在游戏开发方面C#比JAVA要强,主要还是C#和JAVA之间的相似度非常高,语法九成都一样,编程思想完全一样,相对比JAVA要稍微容易一些。但也仅仅是稍微容易而已。。本人是JAVA转C#,感觉不错,想转回去也比较容易。。学编程和学中文的道理是一样的,可以分成六个阶段第一阶段:学中文的时候,什么是主语,谓语,宾语。什么是动词、名词、形容词。什么叫段落,什么是标点符号。搞清楚这些,就等于掌握了中文语法。编程语言也是同理,搞清楚什么是判断,循环,数据类型,类,对象,枚举,结构,数组,集合,运算符。就等于掌握了编程语言的语法。这个学习过程,大概需要一个月。第二阶段:掌握了中文语法,到能用中文写句子之间,有多大差距?首先,差在你要认识“字”和“词”。这就需要长期的积累。编程语言也是同理,学完语法之后,你需要掌握足够多的函数和类。这就等于中文的字和词。JAVA大概有3万多个系统函数(不一定准确),和3777个类(JAVA1.6版)。。语法的作用,就是通过组合这些函数与类(对象)。让它们组合成“句子”。要完全掌握几乎是不可能的,但常用的函数与类,花上半年时间,基本是可以掌握的。第三阶段:能写出中文的句子,和能写信之间,有多少差距?差距在于,你不仅要能会写字和词,还要理解它们的意思,并且哪一个词,应该在什么情况下使用。编程语言也是同理,这在编程语言中,并没有特定的叫法,其实就是熟悉的过程,但这个过程非常漫长。。。。但可以靠之后慢慢积累,并不需要在一时之间便全部掌握。第四阶段:能写信,和能写作文的差距有多少?能写信,你只要让对方看懂就可以,对方看完是否觉得舒服,并不重要。。。但写作文,你至少让老师看后不觉得反感,才算及格。编程语言也是同理,而且这个阶段,对于编程来说非常重要。。。这决定你是否能写出大的程序。。。这点无法突破,你就只能写出计算器之类,以KB为单位的小玩具。。。这其中主要涉及“封装”,“多态”的深入理解,以及对“委托”,“事件”,“线程”的正确使用。。还要掌握一些设计模式的使用,其中“工厂模式”“观察者模式”“单例模式”这三个是必须掌握的,且要非常熟练。。。。非常多的人会在这个阶段放弃学习之后改行。。所以这个阶段,其实可以视为淘汰期。。挺过来基本就会了。。挺不过来的,就可以准备改行了。。本人在这个阶段,中途放弃过几次,一共经历了大约两年的时间。第五阶段:作文除了语法通顺,还要常常引经据典,所以就需要一定的背诵能力。也就等同记忆力。套用到编程,就是数据库的使用。。。其实这和编程语言本身并没太大关系。。。但我到今天为止,还从没见过有任何一个完全不懂数据库,却能找到工作的程序员。。。。。写法几乎并不需要思考,基本全靠死记硬背。。。其实到了这一步,就能胜任一些简单的工作了。。。比如做一个人事管理软件。。。由于程序员只需要掌握增删改查,所以这个阶段并不难。。快的话,十天可成。。但在这阶段卡住,一年都背不过的,也不在少数。第六阶段:能写作文,还能写论文的差距有多少?那就在于你除了学会中文,还要学论文相关的专业知识。编程方面,则是针对需要面临的工作,学习相应的框架与基础知识。。。。如果你要做安卓APP,那你就得去学安卓,要明白如何获得GPS定位信息?摄像头的要如何驱动?。。。。如果你要做网站,那你就得明白啥是HTTP协议?啥是GET请求?啥是POST请求?HTML,CSS,JAVASCRIPT怎么写?熟悉MVC。。。到这个阶段,算是功德圆满了。。。
三、java学的到底是什么
一般的java培训的套路都是这么走的:
1.java基础内容培训。
2.web知识入门,包括html、css、js这些
3.sql等数据库相关知识。
4.项目实战,无非一些点餐平台呀这类的。