想对大家说的话

一路走来很不容易,刚好收到很多朋友的私信问我最近在忙些什么,趁着现在没事做、时间多,脑子里还有点货,就借这个机会在博客上记录一路走来的历程,很励志,希望能给那些正在或准备走编程行业的人一些正能量。内容有点长,感兴趣的就当做励志小说阅读吧。


这篇博客背后的故事

收到一些朋友的微博私信,说能不能给 Java 开发的新手们一些指导,我只能说指导谈不上,毕竟我也很多东西正在学习中,与此同时一大学同学准备转行 JavaWeb ,可以说是从头开始,那么我就姑且以一个过来人的身份给一些建议,只希望大家在学习的过程中能够少走写弯路。


关于我

没错我就是别人眼中的那个“offer收割机”

很多朋友好奇我的年龄,那么我今天就透露下,本人在读大四学生,就读于武汉一所普通 211 高校, 2018 届毕业生。经历过秋招后的自己,如今收获了美团、滴滴出行、斗鱼、拼多多以及苏宁的校招 offer ,因为不太喜欢北上广的生活节奏,所以选择了南京苏宁的 offer ,以后就是苏宁集团的Java研发工程师了。(2018.1.20日再更:已弃坑,和苏宁毁约并赶在春招前签了另一家更好的公司)


写在前边的话

早前自学 Android 开发,在知乎上搜到 stormzhang 给大家写的 Android 自学方向,对于当时没有一点 Android 方向及基础的我甚至于一些新手来学习 Android 都受益匪浅。如今3年多后,自己也来写篇博客记录自己的 Java 学习之路,以便给后来初学者提供一点方向上的参考。(划重点了

想写这篇文章很久了,一方面是为了记录自己大学的奋斗历程供以后回味,让以后稍有成就的自己感谢现在努力的自己;另一方面也是为了给那些不知道如何学习 Java 的人提供自己的学习路线以供参考。

为了证实自己脑中还是有点货的,所以先附上自己大二、大三两年来看过的书籍吧:

可以看出我看过的书籍比较杂,大三下学期从寝室搬出去住了,后来看过的一些例如高并发、多线程啥的进阶书籍都分散放在不同的地方了,我也懒得再把这些书籍都拼凑在一起重新拍照了。

想了想有必要给下上述图片的出处——来自 2017 年 1 月 21 号朋友圈的截图:

(日常打广告):对于很多还不知道我 Github 地址的朋友们,特地为你们附上 Github 传送门: codingXiaxw 的 github (也可以直接拉到文章最后面查看链接

有人问我 Github 上怎么不活跃了,因为我已经很久没有写项目了呀,目前也已经拿到了想要的 offer ,剩下的大四时光当然要好好珍惜和朋友们一起玩耍 + 打游戏了呢。

先来说说我的故事吧。


我的故事

灯光师准备,舞台准备,麦克风准备。

1.高考 — 年少轻狂

都说高考前是一个分手季,所以高考前一个月别人忙着分手,而我却因为沉浸在新结的一段恋爱中忘乎所以不能自拔,所以高考后不幸被告知分数只能上一所普通的 211 高校,坐标武汉,学校叫华中师范大学(我们校友一般称呼它广埠屯女子大学或是雄楚大道停水大学

既然是师范大学,所以学校的名牌专业肯定就是师范专业,顶尖的教育资源肯定也是师范,所以对于我们这种计科专业的学生,老师教的专业知识其实都是一些基础一些皮毛,进阶的道路当然都需要靠自己的自学。(以至于我上了大二以后就没去教室听课了,大四的时候成绩单发下来才发现自己曾今挂了好多科,当然了这些都是后话

2.大一 — 彷徨

大一一年算是过的很迷茫,参加了点社团,打了打篮球,中国各地到处走了走,刷了刷美剧,谈了谈恋爱,这一年也就昏过去了。以至于我到现在都还在抱怨那时候的自己,”要是自己从大一开始就自学 Java 编程,那我现在不早就成大神了啊”。当然也不能算是白过,学校大一给开的c语言我学的挺认真,期末考 100 分的总分我拿了 98 分,算是为自己的 Java 编程道路开了一个好头吧。另外参加的社团有滑板社、街舞社、粤语社、魔术社、 B-Box 社,所以大一过去后的自己也算是学到了不少的特长吧。

大一的暑假,才算是揭开了自己在 Java 编程道路上的帷幕吧。那时候学校给开的Java课程安排在大二下学期,我在一哥们的带领下就自己自学起了 Java ,当时买的一个叫《 Java 从入门到精通》的书籍,对自己入门 Java 也起到了不少的帮助。花了一个月的时间用来看完这本书,当然我说的看完不只是单单的看完了,而是在自己的电脑上搭建好相关的 Java 环境后根据书中的每行代码,都试着在自己的电脑上敲出并运行然后检查 bug 然后再修改 bug 。加了很多学习 Java 的 qq 群,在里面看到不少前辈给新人推荐使用《 head in first 》系列,所以我又买了这本书进行阅读,算是对巩固自己的 Java 基础起到了很大的巩固作用吧。

学完 Java 的语法,需要写一些项目巩固自己学到的知识,这里推荐路人甲整理的一些项目源代码有哪些适合新手的 Java 项目

3.大二 — 呐喊

写过几个 Java 项目后想进阶继续学习,所以又到了所谓的迷茫期了,就上知乎搜了搜很多人关于如何系统学习 Java 知识的资料(当时自己还没有 JavaWeb 这个词的观念),但是不像学习 Android、前端知识样别人都提供了详细的系统学习资料,这一块的资料少之又少,其实根本就没有前辈指点。看到身边有在学 Android 的前辈,知道了 Android 是用 Java 语言进行开发的,就想着,好吧,那我也学习 Android 吧,至少还有人可以请教方向,然后他给了我 stormzhang 发表的那篇著名的 Android 学习道路,从此便开始了我半年之久的 Android 的学习道路。这里我就不说如何系统学习 Android 了,想看的自己点击链接进去阅读吧,我这里主要介绍的就是自己的 JavaWeb 过程。

这个大二走来真是不容易,我算是先耗费了大半年的时间在 Android 开发上,写了很多的app(项目源码请参考我的 Github ),然后转战 JavaWeb 花了半年时间学完了 JavaWeb 的基本知识以及三大框架,也写了很多的 Web 项目(参考我的 Github )。

当然我真的超级感谢大二这一年的自己,沉住气来将全部时间花费在编程上,帮助积累了大量的知识和项目经历,让我在大三新学期开学就较身边的同学们提前走在了去公司实习的道路上。(至于这一年里我是如何系统的学习 JavaWeb ,参考下面的“ Java 学习路线”标题。

4.大三 — 朝花夕拾

大三当然就凭借自己大二一年积累的知识与项目经验,顺利拿到了学校附近几家科技公司的实习 offer ,然后便开始了长达一年的在公司与学校宿舍之间二点一线的码农生活。

也感谢大三这一年自己每天奔波在公司与学校宿舍这两点一线之间,这些丰富的实习经历又让我在 2017 年 3 月份的春招和 2017 年 9 月份的秋招中荣获了不少大公司的青睐,以至于最后得到了自己满意的 offer 。

5.大四 — 感恩

感恩室友,感恩朋友,感恩亲人,感恩那些所有该感恩的

最累的就是大三的暑假和大四开学的前几个月了,17年3月份为了准备阿里、腾讯等公司的春招,因为大公司注重算法,所以我就辞掉了自己的实习工作,在图书馆准备了长达3个月的面试准备,具体表现在: LeetCode 上的题我刷了两遍、剑指 offer 上的题我刷了两遍、算法的书我看了不少、网上搜到的面经我也背了不少。总之,快临近大三期末的时候我就是各种电话面试、笔试以及现场面试。

因为不满意自己春招时找到的实习公司,所以暑假和大四我又早早的就开始了秋招的准备,后来就又是背面经、刷算法、写项目、笔试、面试,东奔西跑,真是累的一匹,好在皇天不负苦心人,最后的自己终于也成了别人眼中的” offer 收割机”,也终于完美的结束了自己的秋招。


永远不要嫌晚

不管何时何地做你想做的事永远都不嫌晚,如果你发现生活不如意,我希望你有勇气重来。 —出自《本杰明.巴顿奇事》

我为什么要在拿出干货前给大家介绍我这么无聊的经历呢?是想告诉大家永远不要嫌晚,你看我大一暑假开始学习编程,从一个编程小白到学完有关 JavaWeb 的所有基础知识点用了多久?真正花在 JavaWeb 上的时间不超过半年,而这半年里我还学了好多好多其他的互联网知识。所以大家永远不要嫌晚,即使你现在都已经大四了面临找工作了,也不要放弃不要急躁,只要下定决心从现在起开始学习,毕业前也一定会收获让你满意的 offer 。

好了道理扯了这么多了,很多人也该不耐烦了,特此奉上你们想要的干货:(请滑动你的鼠标


我的JavaWeb学习路线

更:有人觉得我下面提供的 JavaWeb 自学路线九个阶段还是过于抽象,所以我在文章最下方开了一个“更新”章节,觉得抽象的请将下拉框拉到文章最底部自行进行查看另一种关于“我推荐的JavaWeb学习路线”的说法,仅供参考,有不足还请多多指教。

  • 第一阶段: Java 基础,包括 Java 语法,面向对象特征,常见API,集合框架。(基础)
  • 第二阶段:Java API:输入输出,多线程,网络编程,反射注解等,Java 的精华部分。(重点)
  • 第三阶段:数据库 SQL 基础,包括增删改查操作以及多表查询。Oracle Mysql 二选一吧。(我的项目都是用的 Mysql
  • 第四阶段: JDBC 编程:包括 JDBC 原理, JDBC 连接库, JDBC API,虽然现在 Hibernate 比 JDBC 要方便许多,但是 JDBC 技术仍然在使用, JDBC 思想尤为重要。
  • 第五阶段: JDBC 深入理解高级特性:包括数据库连接池,存储过程,触发器, CRM 思想(高级)这个比较不好懂,有时间的可以学习。
  • 第六阶段: Servlet 开发,从此开始踏入 JavaWeb 开发的重要一步,包括XML, Tomcat 服务器的安装使用操作, HTTP 协议简单理解,Servlet API 等, Java Web 开发的基础。(重要)
  • 第七阶段: JSP 开发: JSP 语法和标签,自定义标签, EL , JSTL 库了解以及 MVC 三层架构的设计模式理念。
  • 第八阶段:三大框架- Spring 、 SpringMVC 、 MyBatis , JavaWeb 的精华部分(重要)
  • 第九阶段:当学习完这些知识后,你就可以深层次的学习一些企业框架, Maven 、 redis 、 log4j 等等。

记住每当学完一个知识点,要结合相应的项目来巩固自己学到的知识,可以参考我的博客,上面的所有文章就是按照学习 JavaWeb 时纪录下的全过程,看完我的博客你们就可以看到我的成长了。

学完这些阶段你就可以出去找个实习了,只有在外面接触到实践项目了,你才会发现在公司学的东西跟你在学校老师讲的有多大区别。很多人问我,大三就出来实习那学校的课程怎么办?这个得看看自己学校的规定了,我们学校老师本着“教人为本”的思想,只要我们学生掌握了这门课的精髓并在期末考试中拿到了60分,便也没有再去听这门课的必要了。


用正确的方法

1.硬件

  • 电脑-推荐Mac

首先声明我不是果粉,个人 Windows , Linux , Mac OX 系统均用过, 只能说 Windows 上面的开发工具简直难以恭维,尤其命令行超级难用,而 Linux 自己必须得花不少时间在折腾中,更是不适合新手了, Max OS 是我认为迄今为止最好用的系统,没有之一, 所以如果你不差钱的话,强烈建议入手一台 Mac ,推荐 Pro 系列, 当然它的价格确实比较昂贵,如果暂时入手有困难,推荐以后手头宽裕的时候再入手吧,会带给你质的体验。( Google 的工程师们都在用 Mac ,应该比较有说服力吧)

2.开发环境

现在很多钟爱 eclipse 的工程师都在搬向 IDEA ,网上可以搜到很多资料,都说 IDEA 比 eclipse 强大。我是从 eclipse 转向 IDEA 的,过程确实很艰难,但熟悉了 IDEA 的编程环境后发现” IDEA 比 eclipse 强大”这句话不是没有根据的。当然,我这里只是建议你用 IDEA ,具体使用权还是在你的手里。

  • Google

技术问题还是尽量 Google 吧,所以需要你有一台会翻墙的电脑,就不要吝啬了买个 vpn 吧。俗话说,不会翻墙的程序员不是好程序员.

  • Git

作为版本管理工具的 svn 与 git ,现在相信处在技术一线的大家应该都改为被 Github 带火了的 git 了吧。

  • Github

一个免费的远程仓库,如果是个人的开源项目,放到 GitHub 上是完全没有问题的;还是一个开源协作社区,通过 GitHub ,既可以让别人参与你的开源项目,也可以参与别人的开源项目。大家有写过的项目就往上面放好了,另外想告诉大家的是,现在很多公司在招聘人才时都会查看面试者的 Github ,我当初轻松的就找到了实习工作很大原因就是 Github 上的项目丰富,所以面试时简单被面试官问了点技术问题就很轻松的被录用了。

  • Linux命令

学习中因为用的 mac ,所以当然经常在 Linux 系统下编程,对于一些基本的 Linux 命令也是非常熟悉的。我也没有刻意买一本书去学习这些命令,我是遇到啥 Linux 命令了就会打开 google 搜点教程学习一下,当然需要的话大家也可以买一本书去学,这里推荐《鸟叔的 Linux 私房菜》。至于为什么要学 Linux ?自己上网搜搜吧。

一个程式设计领域的问答网站,开发过程中要是遇到解决不了的 bug 信息,只要把 bug 信息往这上面一放,基本就能搜到你要的解决方法了,当然了这个网站有点考验你的英文功底,当然也需要翻墙才能访问了。

建议大家擅用开发工具,好的工具会给自己的开发带来很大的帮助。

3.不同水平的人用不同的方法

在这里我必须强烈推荐新手们结合视频学习,身为过来人我的很清楚一开始入门很难,只是看书或者资料难以理解,而这时候结合视频讲解,加上自己的书籍与实战,会起到事半功倍的效果。所以不要小看了视频的作用,当然现阶段的我完全不需要去看视频,因为视频讲解的有些慢,但是对于新手们的作用非常巨大。视频学习有很多,但大都差不多,我也没法推荐最好的给你,只是以我自己的角度觉得质量还不错。

当然了,看视频的时候也是要跟着视频敲代码的,当然别忘了随时记下笔记,我就搭建了这样一个博客,用于记录自己学习 JavaWeb 的整个历程。说到这里,我有必要插一个插曲。记笔记的好处很多:你可以网上搜搜“我为什么要写博客”,讲这些好处的人非常多,因为人都是健忘的,你很难保证今天学了这些知识然后就让这些知识永远记录在你的脑海中了,这是不可能的,所以记下笔记,会很方便你以后忘记这些知识时然后回过头来进行复习加深印象,不然后面吃到亏可别怪我没提醒你 。当入门这种技术后,当然还是看书,当然别忘了随时记下笔记,记住一定要写的详细,其实我写过的一些 JavaWeb 项目都很简单,但却得到了很多人的 star ,我仔细思索了下原因,不是因为我很牛,大概是因为我的开发文档写的很详细十分适合那些刚入门的新人进行学习吧。至于视频,网上搜一下马士兵 Java 视频教程,资料很多,据说这个老师是 Java 讲的最好的一个讲师了。

当然那些有些基础的人,就直接撸书籍吧,毕竟视频讲的比较慢,较书籍需要花费的时间太多。


题外话

语言只是你学习编程技术的第一道选择,对于语言的学习你可以选择 java 、 c++ 、 php 、 python ,看个人兴趣吧;入门这种语言后,你要经历的是第二道选择,例如我学的是 Java ,入门后接下来你要进行第二道选择,我们需要思考可以用 Java 这门语言去干嘛,所以你需要从 web 系统的开发(就是写后台嘛,称为 JavaWeb 开发人员)、或是 Android 开发者中选择其一。学习的时候一定要记住经常思考,带着问题去编程。

每天坚持10小时的代码开发,如果不能做到?建议洗洗睡吧,当然很多时候你都会感到枯燥,这事正常的,我很多时候也会觉得枯燥,问了身边志同道合的人,大多数人都会这样,坚持一下吧,当然兴趣还是最好的老师。毕竟看到一个新鲜的技术,你难道不想自己学习好这门技术后自己写一个漂亮的东西吗?

我在学习 Android 的时候就是看到什么就写什么,每天早上得要闹钟叫起吧?那我就自己写一个闹钟,何必借助系统自己的呢?想随时观看自己所在城市的天气预报,但又不喜欢系统的界面?我当时就搜到气象局的天气预报 API 接口,然后自己写了一个天气预报的 app 。这样的 Android 项目写了很多,代码都上传至了 Github 。


序幕

学习是一个漫长的过程,需要大家不断克服路途中遇到的困难,要始终坚持心中的信念。太久没写技术博客都有点生疏了,本篇是一直在我的文件里憋着,这几天熬了几个通宵耐着性子就给大家整理出来了,可能比较杂,这两天想到什么细节了再补充。最后希望大家都能学有所成,祝大家都能收获满意的 offer 。

交流

update in 2018.3.19 : 欢迎加入我的Java交流1群:659957958。**

2018.4.21更:如果群1已满或者无法加入,请加Java学习交流2群:305335626


更新

2018.1.31更

赶在18年春招开始之前补充点信息,收到很多人的私信问除了上面介绍的Java基础和项目经验,还需要具备哪些技能才能在春招中展露头脚,我这里补充点信息再教大家一个面试前的准备小技巧。

基础知识和框架之类的,加上自己所做的项目应付小公司的面试应该没多大问题了。但春招基本都是大公司才有的,除了上面说的基础,大公司对算法、数据结构、网络、计算机基础、Linux系统相关命令、JVM内存模型、GC算法啥的都挺看重的。

大家也不要针对某一点就去买相关的书籍去看,这样效率太低下了,教大家一个准备面试的小技巧,打个比方,就是如果你想去面阿里巴巴,你就直接在搜索引擎中搜“阿里巴巴面试经验”,然后针对别人的面经列举出来的面试题啥的,针对你不会的题再去搜索引擎中搜相应的博客查看知识讲解,这样效率最高了,当然要是实在有摸不清的就建议撸书籍吧,像之前我为了摸清JVM相关知识,特地花了3天时间看完了《深入理解JVM虚拟机》,撸完就记忆深刻了。另外在校学生要是有丰富的实习经历,也是会成为春招以及今后秋招的一个闪光点的~

2018.6.30更

很多小白对我写的方向还是感到过于抽象,也收到很多人的私信能否让我给想入门计算机的小白一个清晰的路线,想了很多,下面这段话是我给一位在读985大三在纠结是出国考研还是即刻就入计算机的读者写的方向,大家可以参考下:

**首先要定方向,本科毕业只能搞开发,开发又分很多种,那么你想从事那行开发呢?定好方向你就要学一门编程语言,对于我熟悉并擅长的 Java 编程语言,以后可以搞Android、web后台、服务器;可以选 python 编程语言,以后可以搞机器学习、人工智能(这门编程语言适合读研的人学);可以选 c++ ,也是用来写后台的语言,类似于 Java ,但市场上 Java 比 c 要更火,不过 c 往往用来搞和硬件打交道的东西,比如嵌入式开发,可以选 js ,用来搞前端。现在市场上最缺的就是前端工程师和 Java 开发工程师了。那么“学完所有的知识”是什么意思呢?比如你选择了 Java ,想要从事 web 后台开发,那么接下来你就要学习 Java 基础知识(1个月),然后用Java基础知识模仿别人的项目写几个小项目,(半个月),学习项目链接在我的第一篇博客中给出过,然后接下来就是JavaWeb基础知识(1个月,基本就是 servlet + jdbc + jsp ),然后用 servlet + jdbc 写个项目,可以参照我 github上 的 customer 项目(1周),然后去学 JavaWeb 三大框架 ssm (半个月),学完用 ssm 写个项目,参考我 GitHub 上的 seckill 项目(半个月)。搞定。当然,这只是 Java 语言方面的,找公司时面试官还会考你算法、数据结构、计算机网络、Linux,这些知识你可以买相应的书籍在学习 Java 的同时翻一翻看一看。反正我大学期间都是每天花费10小时在这些知识上,你看你能不能坚持吧。其实编程不难,而且你是 985 ,简历那关很好过的,只要过了后面的技术面试,就能拿到 offer 。这是针对你打算本科毕业就工作我谈的,接下来谈谈你读研的事。如果觉得时间太紧的话,那就只有读研了,秋招在9月份开始,考研在12月,如果觉得一定考研,那么现在开始就先主要准备考研的知识点吧,穿插着可以学些上面跟你说的 Java 知识,如果12月份考研失利,这样你还可以在12月份过后继续寻找一份软件开发工程师的岗位.


联系

If you have some questions after you see this article,you can tell your doubts in the comments area or you can find some infos by clicking these links.

记得扫一扫领一下红包再走哦