原创声明

本文作者:黄小斜

转载请务必在文章开头注明出处和作者。

系列文章介绍

本文是《五分钟学Java》系列文章的一篇

本系列文章主要围绕Java程序员必须掌握的核心技能,结合我个人三年多的Java学习和工作经历,总结和沉淀下来的方法论,希望能让Java学习这件事变得更简单,作者目前在阿里做Java,忙里偷闲分享一些技术文章,有兴趣看本系列更多文章可以关注我的公众号【Java技术江湖】

系列文章将会把一些技术学习方法、过程、要领与我的学习经验相结合,更加浅显易懂,并且我也会把我学习时用的资料,书籍和文章拿出来分享给大家,节省你我的时间。所谓授人以鱼也要授人以渔,是本系列文章希望达到的目标。

本文思维导图

简介

在这个三百六十行,行行转互联网的后互联网时代,Java作为一门深受培训班、企业以及开发者喜爱的语言,仍然非常火爆,虽然比不上之前几年的风光,但是依旧有一大批的追随者和学习者涌入。

不妨先来看看Java语言时如何被定义的。

根据百度百科的介绍,Java是一门面向对象编程语言,不仅吸收了C++ 语言的各种优点,还摒弃了C++ 里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。

Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。

Java具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点 。Java可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序等。

简单来说,Java就是一门基于C++ 开发,但又超越了C++ 的高级编程语言,它通过JVM虚拟机屏蔽了C++ 的复杂语言特性,转而作为一门面向对象语言,可以更好地支持平台移植、Web开发等应用。

为什么要学Java

了解了Java基本概念之后,接下来我们就不得不谈一谈,我们为什么学Java呢。

众所周知,Java是市场上占有率排名前三的编程语言,Java作为企业级应用开发的首选,不仅在很多企业得到应用,也深受美团、阿里等互联网大厂的青睐,特别是阿里,更是打造了大量的Java中间件,成为了Java生态中最靓的仔。

对于求职找工作的同学来说,Java可能仍然是后端工程师的最佳选择,虽然golang和Python一直在追赶,但是Java作为老牌语言,在企业中的地位很重要,它的市场空间仍然是无法撼动的。

学习Java,就是为了更好地开发应用,不论是开发web应用,还是开发中间件,亦或是微服务,都是Java语言最擅长的,加上Java生态的丰富多彩,对于企业级应用的全方位支持,使用Java的开发大型应用的成本相对还是比较低的。

如何学习Java基础

第一次接触

我第一次接触Java还是在大三的课堂上,当时有一门课程就是Java,教的都是Java基础,在Java之前我还稍微了解过html、css这类前端技术,所以自认为学习Java应该不会有太大难度。

结果证明我还是想多了,刚开始老师就在介绍Java的基本数据类型,比如int的长度,double的长度,作为一个非科班程序员,当时甚至连1个字节是多少都不知道。

接着我们又学习了Java的数组,数组这个概念本来看起来没什么,但是接下来又出现了二维数组,老师还结合着数组的内存分配来和我们讲解,当时就晕了,于是就这么半推半就的学完了第一堂课。

大学课堂你们都懂的,大家的注意力也没有特别集中,有些关键概念错过了也就错过了。

其实重点还在后面,Java的重要特性就是面向对象编程,于是常见的一些概念,比如类和对象,继承、多态、接口和抽象类都一一出现在我们的视野里,学习Java,这些概念没有搞清楚的话,是非常耽误事的,毕竟其他一切高级特性都是基于此实现的。

勉强听懂了面向对象的一些语言特性之后,后续的课程里,我们又继续开始学习Java的高级特性,比如Java异常、多线程、集合类等等。

我只记得到多线程那里我就完全听不懂在说啥了,后面讲了什么,也就记不得了。我想大多数人第一次接触Java也是一脸懵逼的状态,谁第一次面向对象不都会紧张嘛。

学完了Java课,我能出师了吧?

一回生,二回熟,自认为已经完全掌握了Java的我(其实就学了一点皮毛)在大四毕业的那个暑假找到了一家本地的小公司进行实习。

当时我就想,我都已经是学过Java的人了,到公司实习应该不成问题吧,于是我非常自信,就去上班了。

结果第一天我就傻了,领导给我安排了一个小任务,是一个新员工入职的练手项目,写一个表单,完成录入员工信息的功能,当时的Java工程师还要会写前端,这个表单的样式和js代码都要自己写。

更尴尬的是,我完全看不懂这个项目的Java代码,不是说好的面向对象编程语言么,我先找到main方法,然后看一下每一步的执行逻辑就可以了吧,应该不会太复杂吧。

结果,我打开工程,这玩意怎么这么大啊,结构还这么复杂,这个service包是干嘛的,这个dao包是干嘛的,
还有啊,这个user类里为什么有一大堆的get和set方法,这都不是最过分的,最过分的是,为什么还有一堆的xml配置文件,我一个都看不懂啊,什么web.xml,里面写的都是啥啊。

更可气的是,还有一个叫做servlet的包,里面有各种各样的servlet,这个servlet更是我听都没听过的一个东西了。

当时我的内心是崩溃的,我这大学的Java课白学了呀,怎么到公司完全用不上了,这跟说好的不一样啊,不应该是挺简单的一个东西吗,我学了一门Java课程就应该完全掌握了才对呀?

现在回想起来,当初自己就是个傻白甜,根本不知道Java web是个啥,更不知道还有什么web框架,Jsp和servlet了。那个时我们这个项目用的还是struct1,你可以想象是多陈旧的技术栈了。

研究生阶段:推翻重来

经历了暑假实习的阵痛之后,我终于明白了,不是学完Java这门课就能干活了,而是要学完整个Java技术栈才算完事啊,至少咱们的先学会JavaWeb呀,还有相关的框架也得会啊。

于是时间来到了研究生阶段,我当时就想,幸亏我还有两年多时间可以学这个Java,要不然就我现在这个水平,出去连个工作都找不到。

为了不让自己在两年后依然如此尴尬,我开始重新学习Java,现在回想一下,我的自学编程之路,也就是从那个时候开始的,当时我买的前两本书就是《Java从入门到精通》和《JavaWeb从入门到精通》这么接地气的书,对Java小白来说简直没有抵抗力呀。

于是我不负众望,看完了这两本书,《Java从入门到精通》倒是中规中矩,毕竟很多概念我之前都接触过了,但是我在《JavaWeb从入门到精通》里看到了很多从来没见过的概念,什么Java bean,spring、hibernate、jsp、jdbc、session和cookie,Tomcat等等,总之,这本书算是帮我开眼看世界的第一本java入门书籍了,虽然这本书在网上被骂的很惨,但是它销量好不是没有原因的,把它当成百度百科看就可以了。

明白了基本概念之后,接下来该学什么呢,我陷入了思考当中。恰好某一天,有室友推荐我看某客学院的视频,于是我当场就找到了学习方向,我在上面看到了一个Java学习路线图,如获至宝,开始沉迷于看视频中无法自拔。

某天我终于看完了视频,于是又自信地想,这下没问题了吧,我应该已经可以做项目了吧?刚好我们有一个研究生项目实践,可以让我们参与到项目开发中,于是我当时就选了JavaWeb方向的项目,准备在里面大展身手。

实践阶段

然而,理想和现实还是有一定差距的,当时我们要做一个类似云笔记的应用,我负责一部分的后端开发,当时我们从网上下了一个demo,准备基于它进行开发,于是我激动地用一个叫做eclipse(实际上我也没用过几次)的ide打开了这个项目。

诶,这个画风好像和之前的struct1也不太一样啊,后来才知道这个就是spring框架,让我好好瞅瞅这个项目到底长啥样,这个controller包是什么,service包和dao包好像似曾相识,但是这个pom.xml又是干嘛的,为什么看起来里面好像有很多jar包,没错,我还是连工程都看不懂,再一次陷入了自我怀疑中。

没办法,只好硬着头皮继续自学呗,但是这段时间的自学并没有太大成效,眼看者deadline逐渐临近,我们的小组长看不下去了,他发现我们两个后端确实都不咋会,前端搞了半天也只切了个图,于是开始说起了自己的想法,我当时第一次听说过前后端交互,以及用json作为数据传输的格式这种说法,后来才知道这都是开发的基本知识,

结果这个项目我们寻求开源支持,还是顺利完成了,但是我确实什么忙都没有帮上,于是我又开始怀疑人生了,Java这个东西,到底该怎么学呢,我书也看了,视频也看了,该学的感觉也都学了,怎么还是啥都不会呢?

如果重新开始,我会这样学Java

不知道看到上面的内容,各位Java小白会不会有一些共鸣,明明一开始觉得Java挺简单的,学着学着发现并不简单。

学完Java基础貌似就会做项目了?但是一接触项目代码,又发现自己就跟没学过一样。

于是又接触了一些JavaWeb的书籍和知识,想要现学现卖,结果一看真正项目里用到的又是另一套技术,自己压根见都没见过。

有些事,你必须要经历过,才能明白,有些坑,你不用自己去踩,因为我已经踩过了

如果让我重新学习Java,我可能会这样入手吧。

1、想通过Java学习视频入手,把基础搞懂。

2、接着看一些JavaWeb相关的视频,把常见的JavaWeb技术栈搞懂,最好要看新一点的视频,防止过时了不好使。

3、看看Java基础和JavaWeb的经典书籍,加深对一些概念和原理性东西的理解,防止在项目实践中搞不清楚。

4、找个项目课,有视频有源码的那种,跟着视频学习,还能跟着敲敲代码,实现一些功能,更能够加深印象和理解。

当然,这篇文章只谈到了入门Java,其实Java技术栈远不止这些东西,正如我的学习历程这样,你学的越多,就会发现你不懂的越多,后面我还会继续带来我在不同阶段学习Java的一些分享。

推荐资源

书籍

这两本我都没怎么看过,但是推荐就是政治正确,即使看不懂,买来供着也是极好的
《Java核心技术卷一》
《Java编程思想》

视频

某客学院入门课

慕X网的Java基础课

某客网的Java初级和高级项目课

博客

Java技术仓库《Java程序员复习指南》

https://github.com/h2pl/Java-Tutorial

整合全网优质Java学习内容,帮助你从基础到进阶系统化复习Java。

我的个人博客:https://how2playlife.com/

社区:
CDSN我就不推荐了,反正百度你们搜一下也都是CSDN的结果

这里重点推荐两个社区,实打实的有很多干货,对文章要求比较高,我的很多文章质量都达不到他们的要求。

1、掘金
https://juejin.im/user/5b1d0d34e51d4506d936f561

2、开发者头条 https://toutiao.io/subjects/329410

总结

关于如何入门Java,我们今天就讲到这里了,如果还有什么疑问也可以到我公众号里找我探讨,后续会有更多的文章推出,包括如何系统性地学习JavaWeb,如何系统性地学习Java核心技术和底层原理,以及如何系统性地学习后端技术。敬请期待。

对了,你想问我文章里提到的书籍和视频去哪找?我已经给你准备好了

文中提到的资源都可以免费领取,在我的公众号【程序员黄小斜】回复“Java入门”即可免费领取对应的资源。

先搞清楚这些问题,简历上再写你熟悉Java!的更多相关文章

  1. 什么样的 GitHub 才适合放简历上?

    为什么 GitHub 可以加分? 很多招聘描述上面都会备注 GitHub 是加分项,那么为什么它是加分项呢? 停,如果看到这里你还不知道 GitHub 是什么,可以看一下 Phodal的手记:http ...

  2. 我面试过没有上万人也有十几个,简历要这么写才有hr要你

    今天终于有时间好好给大家写写关于如何写简历,给自己加分了. 这篇文章拖了很久了应该说,本来想在上周写的,但是事情实在是太多,又不想草草了事,所以搁置到现在.今天早上正好空出来了,就马上给大家码出来了. ...

  3. 软件测试工程师简历要怎么写,才能让HR看到

    作为软件测试的从业者,面试或者被面试都是常有的事. 可是不管怎样,和简历有着理不清的关系,面试官要通过简历了解面试者的基本信息.过往经历等. 面试者希望通过简历把自己最好的一面体现给面试官,所以在这场 ...

  4. 沉淀再出发:关于java中的AQS理解

    沉淀再出发:关于java中的AQS理解 一.前言 在java中有很多锁结构都继承自AQS(AbstractQueuedSynchronizer)这个抽象类如果我们仔细了解可以发现AQS的作用是非常大的 ...

  5. 再写一篇tps限流

    再写一篇tps限流 各种限流算法的称呼 网上有很多文章介绍限流算法,但是对于这些算法的称呼与描述也是有点难以理解.不管那么多了.我先按我理解的维度梳理一下. 主要维度是:是正向计数还是反向计数.是定点 ...

  6. 缓存与数据库一致性之二:高并发下的key重建(先淘汰cache再写db)的问题

    一.为什么数据会不一致 回顾一下上一篇文章<缓存与数据库一致性之一:缓存更新设计>中对缓存.数据库进行读写操作的流程. 写流程: (1)先淘汰cache (2)再写db 读流程: (1)先 ...

  7. android上如何写配置文件

    android上如何写配置文件:使用SharedPreferences SharedPreferences是Android平台上一个轻量级的存储类,用来保存应用的一些常用配置,比如Activity状态 ...

  8. 最后一面挂在volatile关键字上,面试官:重新学学Java吧!

    最后一面挂在volatile关键字上,面试官:重新学学Java吧! 为什么会有volatile关键字? volatile: 易变的; 无定性的; 无常性的; 可能急剧波动的; 不稳定的; 易恶化的; ...

  9. 【优雅代码】04-1行代码完成多线程,别再写runnable了

    [优雅代码]04-1行代码完成多线程,别再写runnable了 欢迎关注b站账号/公众号[六边形战士夏宁],一个要把各项指标拉满的男人.该文章已在github目录收录. 屏幕前的大帅比和大漂亮如果有帮 ...

随机推荐

  1. apache启动失败,提示80端口被占用

    首先检查80端口被什么程序占用,方法:cmd进DOS,输入netstat -ano 80端口被为4的进程占用,有两种可能:一种情况是本机中安装了sqlserver 2008,80端口被SqlServe ...

  2. java select单线程 服务器

    package com.Select; /** *select单线程 服务器 **/ import java.io.IOException; import java.net.InetSocketAdd ...

  3. 文件操作符|-e|-M|-s|-A|_|-r -w $filename|stat|localtime|&|>>|<<

    TTY:终端是一种字符型设备,它有多种类型,通常使用tty 来简称各种类型的终端设备 #!/usr/bin/perl use strict; use warnings; print "exi ...

  4. 2019-2020-1 20199324《Linux内核原理与分析》第六周作业

    第五章 系统调用的三层机制(下) 1.给MenuOS增加命令 进入Linuxkernel目录下,强制删除当前menu目录,再重新克隆一个新版本的menu 进入menu,运行make roofts脚本就 ...

  5. 看了这个Java实习生入职测试题后,幸亏我不是实习生

    看了这个Java实习生入职测试题后,幸亏我不是实习生 一个Java实习生的入职测试题,你能答对几个? 今天在某APP中看到,有实习生放出的Java实习生入职测试题.看完之后,很庆幸自己不是实习生. 本 ...

  6. IP命令介绍

    ip指令可以显示或操作路由.网络设备.设置路由策略和通道 1.语法 ip [选项]  Object  COMMAND [help] Object对象可以是: link  网络设备.addr 设备的协议 ...

  7. Linux的iptables菜鸟初学

    什么是iptables? iptables是linux下的命令行工具,操控的是linux的防火墙,这个防火墙叫netfilter.通俗的说应该是用户通过iptables把安全设定设置给netfilte ...

  8. maven中 pom 文件各个标签的作用

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...

  9. Nginx 反向代理,IP、端口,项目路径变化的问题

    这两天在云上部署公司项目,涉及到nginx反向代理,在部署完成测试,发现在下载文件的时候,无法下载,提示链接被拒绝. 假设nginx代理地址: http://121.53.21.188:9012/we ...

  10. python-django框架-电商项目-首页开发_20191122

    python-django框架-电商项目-首页开发 业务背景: 用户浏览网站一定是先到首页, 没有登陆的话首页内容完全一样,而且是不经常变化的, 一段时间内,有100用户访问,就要有几个用户就要查询多 ...