首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >从啥也不会到可以胜任最基本的JavaWeb工作,推荐给新人的学习路线(二)

从啥也不会到可以胜任最基本的JavaWeb工作,推荐给新人的学习路线(二)

作者头像
剽悍一小兔
发布2018-05-17 15:12:21
6380
发布2018-05-17 15:12:21
举报

1482457766457011227.jpg

在上一节中,主要阐述了JavaScript方面的学习路线。先列举一下我朋友的经历,他去过培训机构,说是4个月后月薪过万,虽然他现在还未达到这个指标。

培训机构一般的套路是这样:先教JavaSE,什么都讲一讲,可是都讲不透,基础差一点的只有越听越糊涂,被面向对象的概念,接口,抽象类,搞得头都大了。一天到晚盯着几个干巴巴的案例看。

JavaSE大概持续讲两个月,最后会让你做一个控制台的小屁项目,可能是ATM管理系统,也可能是图书管理啥的。

然后,开始讲html、css,这两样东西一般就是1到2天,讲了等于没有讲,让他做一个小网站的前端页面根本不可能,他只会用div画几个五颜六色的框框。定位也不会,总是凭着老师课堂上讲的那几个例子,写写 position:absolute。然后郁闷得一塌糊涂,这个div怎么就移不过去呢,怎么就是不动呢??为什么老师的代码可以,我写的代码就不行??去问老师,老师说,我们是Java培训,这个是附带的,没关系,你们到时候也不会写这种代码,你们是写Java的。(呵呵了)

不管那么多了,接下来几天马上学习JavaScript,第一天,着重讲了讲var是什么,js的几种基础数据类型。然后讲function,alert怎么用。大概3到5天的样子吧,JavaScript就讲完了。

最后一天用来讲jQuery,发现好神奇啊,可是$是啥,为什么会这样,就不知道了。只会写写 $("#id")这样的代码。可是不管怎么样,jQuery已经讲完了。懂不懂是你的事。

我朋友直到毕业,都不知道json是啥,ajax是啥?就最后两个礼拜讲了SSH,带了一下。

JavaScript讲完后,立刻开始数据库,数据库一般还是教的Oracle。第一天,啥也不做,Oracle太大了,也不教你怎么安装,反正就告诉你老师的主机已经安装好了,那个培训机构的电脑可承受不起oracle。数据库教了1个礼拜,什么都涉及一点,包括触发器,但是没有存储过程。反正学完以后,我朋友只会 select * from student了。left join,right join 没看懂,只记得老师花了半天时间解释啥叫笛卡尔积,什么是三大范式?好像很厉害,然后... ...不懂。

接下来就是tomcat,JSP,这段时间对他来说就是噩梦了,反正最后差点弃坑。最后半个月,终于,万众瞩目,SSH闪亮登场。OK,培训结束,去月薪过万吧。

因为关系比较好,我和他经常保持联系,后来一段时间,他去了外包。因为太辛苦,后来又辞职了。

说了这么多,我在此提出质疑,个人认为,这种学习路线绝对有大问题。对于一个没有什么编程基础的人,这种学习路线肯定会害了他。我个人推崇的路线应该是这样:

第一步:不学任何后台语言,从Html + css开始。

这个阶段,你可以花费一到两周的时间,看各种视频外加各种操练。最起码,你得有一些绘制网页的能力吧。虽然如同easyui的框架非常流行,可是你起码也要有点这方面的基础吧。用户的需求千变万化,你不可能永远依赖easyui的。你不要跟我说什么bootstrap,如果你连div + css都不懂,bootstrap你真的能用得溜吗?在我现在看来,bootstrap只是一种工具罢了,一些前辈把很多经常用到的代码封装起来,方便自己和他人使用,仅此而已。你不要觉得有多么难,毫无疑问,这种工程,我想最开始的时候肯定是一个人做的,后来随着名气越来越大,可能会有一个团队来维护。但是,最早最早的时候,肯定来源于一个人的想法和思考。

第二步:深入学习JavaScript。

JavaScript轻巧,灵活,只需要一个浏览器,就能立即看到效果,没有环境搭建方面的疑虑。另外,JavaScript兼具面向对象语言的各种特点,再加上现在前端这么火,你学习JavaScript吃不了亏。当然,我说的学习,不是泛泛而学,而是有目的地去深入学习。仔细体会其中的乐趣和奥妙,最起码,你得达到能够自己封装一个弹窗组件的程度。

我学习JavaScript后,再学JavaSE,真的就是一个水到渠成的过程,每学到一个地方,脑海中立马就闪现 “这不就是JavaScript中的XXX吗?”的念头。最好的学习方法就是类比。记得牢,而且可以融会贯通。就好像玄幻小说里面描写的那样,当你对某一个技能或者法则达到了很高深的境界,那么对于其他任何流派就都能融会贯通了。

第三步:突袭JavaSE

为什么说突袭JavaSE?因为我现在明白过来,对于JavaWeb开发而言,没必要对JavaSE做太多的深入。如果你的JS功底足够,那么JavaSE对你来说就太简单了,因为JS比Java难入门得多。以下的学习清单是我整理所得:

理解什么是类?

你不要去管什么面向对象还是不面向对象了,我认为面向对象这种概念很难用语言描述清楚,更多的是当你代码写多了,产生的一种直观的觉悟。你是去查资料也好,看视频也罢,先理解什么是类。然后自己尝试着写几个类。你不要去写什么Person类,Animal类了,有什么意思呢?随便打开一个网页,比如百度贴吧,你有百度账号的话,你就想想,一个百度账号会有哪些属性?用户名,密码,头像,是否可用,等等。用这些信息来写Java类。

一个Java类,无非就是属性和方法,大部分情况下,方法无非就是用来给属性赋值的。属性是干嘛用的,不就是用来存储数据的吗?你说对不对呢?Java有八种基本数据类型:分别为整型 int,短整型 short,长整型 long,字节型 byte,布尔型 boolean,字符型 char,单精度浮点数 float,双精度浮点数 double。

就比如说int,Java编译器规定int占四个字节,也就是4个byte,一个字节占8位,一个位就是一个bit。bit是计算机中最小的单位,它只有0和1两种状态。我们常说一个文件有多少兆,这个兆就是MB,1MB有1024KB,1KB有1024个字节。当你定义了一个int类型的变量,在运行的时候就会在Java虚拟机中申请一个4个字节的空间。1MB有1024KB,1KB有1024个字节。所以说1MB可以存放 (1024 * 1024 / 4) = 262144 个int变量。Java虚拟机的默认内存是64MB,所以最多应该能存放16777216个int类型的变量。当你定义一个int类型的变量,那么运行的时候,虚拟机的剩余内存就会被减掉4个字节。所以,属性是干嘛用的,我们在写Java类的时候,为什么要定义属性。我觉得没有别的含义了,定义属性就是为了存储数据的嘛。

我们写一个

private int a;

Java虚拟机(JVM)跑起来,一旦我们new了这个对象。这个a变量就会被放到JVM的内存中,然后JVM就会专门开辟一个空间,来装载这个数据。然后,我们才可以在计算机中操作这些个数据。你总不可能说,我有一个数字100,就要计算机对这个数字进行加减乘除的运算吧。计算机怎么知道这个事情呢?你是不是必须要告诉计算机有一个数字100,它才会知道?

为了装载这些数据,所以才有了八种基本数据类型,每一个数据类型就好比一个篮子,有的篮子大一点,比如long类型,可以放好长好长的数字。有的篮子小一点,比如byte类型,只能放一点点大的数字。Java类,我的理解就是一个模板,因为我学过JS,所以我会类比。但是这些类比,仅限于我个人,在此就不多说了。

Java类,,我更愿意把它称为一个 数据模板。它只是一个模板而已,不是一个实实在在的对象,这一点首先要确定。就好像工厂生产一个产品,首先是不是要有一个模板和设计图纸,这个模板决定了你这个产品是一种怎样的形状,以及可能会具备哪些功能?图纸则决定了功能的具体实现。比如生成一部手机,模板开出来就是一个扁平的长方体的样子,可是光有模板还不行,你还得规定它的一些具体细节。这些细节就好比是Java类的构造方法,以及其他的一些方法实现。

但是,你光给客户模板和图纸行吗?一般来说是不行的。

至于静态方法,我们知道,我们调用静态方法的时候,不需要先生成一个实例,可以通过类名直接调用。这就相当于,在弄模版的时候,这些功能就已经定制在里面了。你买手机的时候,里面不是经常有一些内置的应用吗?有些删都删不掉,这不就相当于静态方法吗?

(我只是举一个例子啊,你不要非得较真说我可以ROOT一下啊)

如果模板里面已经有了一些做好的功能,今后任何根据这个模具生成出来的产品也自带了这些功能。如果模板里面已经做好了一些功能,那么我的确可以使用这个模板,而不需要真正拿到一个产品。比如生产一部手机,它的模板里面已经做好了一个手电筒的功能,那么,你即便不给我一个真正的产品,仅仅给我一个模板,我是不是也可以用它的手电筒功能呢?

这就是静态方法。所以我们常说,静态方法和静态属性为所有实例共用,不就是这个道理吗?

所以,正常情况下,我们调用一个类的非静态方法,是不是必须要先new一个对象?

2.基础知识

这部分包括:包的知识,java中数据类型的分类(值类型,引用类型),继承以及继承的特点等。快速过一遍就行了,不要去深究,就算你深究了其实也没啥用。以后代码写多了,自然就会烂熟于心。

3.数组和其他一些常用类

数组的话,会用即可,不要深究。其他常用类,比如Date类,最好都去学一下,但是同样不要深究。

4.集合

集合框架,只需要掌握两个,一个是ArrayList,一个是HashMap,知道怎么用就行了。其他集合都可以不去管它,你不要老是觉得,我学这些会不会不够啊?等你以后成为了老司机,还不是学什么会什么?现在功利一些也无妨。有余力的,去研究源码,没有余力的话,不研究也没事。

对于ArrayList,我写过两篇文章,还差一篇才完结,以后补上。

5.泛型

能看懂 List<Map<String,Object>> 是啥意思即可,其他都不要管。你又不去写框架,就算真有这种雄心壮志,也是若干年后的事情了,现在你的当务之急还是找一份工作。

6.设计模式

不要管,最多去学一下单例和工厂。其他的暂时不需要考虑,刚工作那会,就是做一些增删改查,先找到工作,稳定下来再去提升。

7.IO流

其实这部分真无所谓,还不如直接学文件上传。即便是文件上传,一般公司都有现成的类给你调用,也不需要你自己去写。所以,IO流,不学都没关系。

8.Awt,Swing

有多远,扔多远,不要问我为什么。有精力学这个不如去学SWT,虽然99%你学了还是用不到。Swing有啥用,我能想到的只有去网上接一些课程设计啥的私活了。

9.反射

不需要,你又不去写框架,暂时不必关心。

10.新特性

不需要,不是你初学者该考虑的。等你以后工作稳定了再说吧。

11.JDBC

这个,你仅仅需要知道如果导入驱动包,在项目里面成功拿到链接就行了。其他都不用管,最原始的JDBC1.0规范,不学也没事。还不如重点去学一下Mybatis。关键在于,你要学会配置文件怎么配。至于SQL,顺带着学一下就行了。

再说一遍,直接去学MyBatis之类的现成框架,不要再JDBC上浪费太多时间。

我相关的文章:

http://www.jianshu.com/p/8944864f5161

JavaSE,我认为初学的话,能做到这样就可以了。毕业标准就是自己能够做一个完整地增删改查出来。你会测试就行,比如用JUnit测试,不要去写那种什么控制台项目了,有什么意思呢?直接写DAO层,然后体会一下其中的流程即可。

学完JavaSE,就是JSP、Servlet,这一块要相当用心地去学。它是基础,我个人认为比框架更重要。这些内容会在下一篇中讲到。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016.12.23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 第一步:不学任何后台语言,从Html + css开始。
  • 第二步:深入学习JavaScript。
  • 第三步:突袭JavaSE
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档