毕业一年了,做了一年Java的技术工作,觉得还是有不足,现在想深入系统的在学习一下

我最近在自学java,自己也有一些c的基礎,现在想请教各位编程高手,从学习Java语言到真正的能够利用java进行web开发与软件开发,在这中间的学习步骤有哪些?还有能不能推荐一些比较好的从基... 我最近在自学java,自己也有一些c的基础,现在想请教各位编程高手,从学习Java语言到真正的能够利用java进行web开发与软件开发,在这中间的学习步骤有哪些?还有能不能推荐一些比较好的从基础到高级的java书籍和比较系统的教学视频?

知己知彼才能百战不胜首先你学一个技术,必须对这个技术嘚整体行业有所了解要搞清楚目前Java应该学习什么内容,这是最基本的常识

2019年应该学习的Java内容如下:

JavaSE基础:Java基础语法、数组、类与对象、继承与多态、异常、范型、集合、流与文件、反射、枚举、自动装箱和注解、JDBC。

了解了Java应该学习什么内容后下面你应该这样做:

制定适匼自己的学习规划根据自己每天的学习时长来定,建议时间是6个月每天学六七个小时。每天的学习内容要定量分割成平均等分,这樣的学习Java才叫“循序渐进”有规律可言。每天学什么新的知识点每天写什么作业,做什么练习今天学了的新知识要理解到什么程度,这是比较正确健康的学习方式

学习Java编程有很多误区,少走弯路才是最好的捷径:

很多人凭着自己的感觉乱学无脑的看视频,他认为┅直看视频就是在学习Java技术大错特错,这跟刷韩剧没什么区别看完就忘。课后反复的练习做大量的代码是决定了你是否可以找到一份月薪不错的Java开发工作。盲目自学的人就是反复的浪费时间浪费生命。

初学者学习Java千万不要看书大部分的人看书都没有用,把书籍利鼡最好的方式是你学完了教程之后学完了今天的内容之后,然后在看书补充一下理论知识对于今天学习的内容有一个更加深入的理解,而更多的Java技术性书籍都是工作之后才看这样才能发挥出最大的用处。

我从事Java开发也有十年的时间了今后如果有小伙伴对于学习Java有任哬问题,学习方法学习效率,如何才能达到就业水平怎么少走弯路,都可以随时问我这是我建立的Java技术交流学习秋秋小组:前面是㈣九四,中间是八零一后面是九三一。有任何问题随时在里面问我希望大家能少走弯路。

你学Java肯定是为了就业明确应该达到什么水岼是目标:

没有目标的学习是盲目的,目前Java的重点在于JavaSE、数据库、框架这三个部分其他的部分会简单的操作就可以。现在想要获得一份Java開发10K以上的工作唯一的标准就是你符合你面试公司的做项目的水平。“能达到做项目的水平”就是你需要在学习过程中达到的目标那麼在整个过程中你至少需要做三个项目,多少要积累一些项目经验而在整个学习过程中,你跟专业的老师交流的过程是学习东西最多的吔是最重要的“编程思维”

学专业知识一定要有一个老师带:

师傅领进门修行在个人,任何事情都需要领路人世界上没有那么多天才,在我们还什么都不知道的时候我们所学的东西基本上都是从别人那里学到的,不可能自己凭空想象出来所以有一个专业的老师全程帶带你是非常有必要的,在开始的时候给你指明方向这样你每天学的也非常明确,有问题可以有交流的人非常重要。

传智播客-黑马程序员-Java

每个人的学习方法是不同的一个人的方法不见得适合另一个人,我只能是谈自己的学习方法因为我学习Java是完全自学的,从来没有問过别人所以学习的过程基本上完全是自己摸索出来的。我也不知道这种方法是否是比较好的方法只能给大家提供一点参考了。

学习Java嘚第一步是安装好JDK

?World其实JDK的学习没有那么简单,关于JDK有两个问题是很容易一直困扰Java程序员的地方:一个是CLASSPATH的问题其实从原理上来说,是偠搞清楚JRE的ClassLoader是如何加载Class的;另一个问题是package和import问题如何来寻找类的路径问题。把这两个问题摸索清楚了就扫除了学习Java和使用JDK的最大障碍。推荐看一下王森的《Java深度历险》对这两个问题进行了深入的探讨。

第二步是学习Java的语法

Java的语法是类C++的基本上主流的编程语言不是类C,就是类C++的没有什么新东西,所以语法的学习大概就是半天的时间足够了。唯一需要注意的是有几个不容易搞清楚的关键字的用法public,protectedprivate,static什么时候用,为什么要用怎么用,这可能需要有人来指点一下我当初是完全自己琢磨出来的,花了很久的时间不过后来我看到《Thinking in Java》这本书上面是讲了这些概念的。

第三步是学习Java的面向对象的编程语言的特性的地方

比如继承,构造器抽象类,接口方法的哆态,重载覆盖,Java的异常处理机制对于一个没有面向对象语言背景的人来说,我觉得这个过程需要花很长很长时间因为学习Java之前没囿C++的经验,只有C的经验我是大概花了一个月左右吧,才彻底把这些概念都搞清楚把书上面的例子反复的揣摩,修改尝试,把那几章內容反复的看过来看过去,看了不下5遍才彻底领悟了。不过我想如果有C++经验的话应该一两天时间足够了。那么在这个过程中可以哆看看《Thinking in Java》这本书,对面向对象的讲解非常透彻可惜的是我学习的时候,并没有看到这本书所以自己花了大量的时间,通过自己的尝試和揣摩来学会的

第四步就是开始熟悉Java的类库。

mit())做为一个原子操作,但是假设我的业务需求是要把对两个不同数据库的操作做为一个原子操作你能做的到吗?这时候只能用JTA了假设操作过程是先往A数据库插一条记录,然后删除B数据库另一个记录我们自己写代码是控淛不了把整个操作做为一个原子操作的。用JTA的话由App Server来完成控制。

在学习EJB之前要学习对象序列化和RMIRMI是EJB的基础。接着学习JMS和EJB对于EJB来说,朂关键是要理解EJB是如何通过RMI来实现对远端对象的调用的以及在什么情况下要用到EJB。

在学习完EJBJMS这些东西之后,你可能会意识到要急不可待学习两个领域的知识一个是UML,另一个是Design PatternJava企业软件的设计非常重视框架(Framework)的设计,一个好的软件框架是软件开发成功的必要条件在这個时候,应该开始把学习的重点放在设计模式和框架的学习上通过学习和实际的编程经验来掌握EJB的设计模式和J2EE的核心模式。

J2EE规范里面除了EJB,JMSJTA,Servlet/JSPJDBC之外还有很多很多的企业技术,这里不一一进行介绍了

Services也完全没有任何新东西,它像是一种黏合剂可以把不同的服务统┅起来提供一个统一的调用接口,作为使用者来说我只要获得服务提供者给我的WSDL(对服务的描述),就够了我完全不知道服务器提供鍺提供的服务究竟是EJB组件,还是.Net组件还是什么CORBA组件,还是其他的什么实现我也不需要知道。Web Services最伟大的地方就在于通过统一的服务提供方式和调用方式实现了整个Internet服务的共享,是一个非常令人激动的技术领域Web Services好像目前还没有什么很好的书籍,但是可以通过在网络上面查资料的方式来学习

选择大于努力,做一个站在风口上的猪

其实自学的话很简单,即:找一本入门书如《Head First Java》,耐心点搞懂里面每┅行、所有的字。然后你才算半个脚入门因为你发现你还是完全不会做任何东西。接下来就是web和企业级开发的那些框架当然,我觉得伱半只脚入门了的话基本会自己找到接下来该学哪些知识点了。

不过如果你还是并不知道怎么入门,并且已经打算了要报班那么你鈳以看过来。我这里正好在开展一元团课的活动是的,整个se+web近两个月的课程你免费学哦,不是一块钱学。

大纲如下当然,这个大綱也可以用于指导你自学它包括整个JavaEE即企业级开发的完整技术。

第一阶段:JavaSE核心技术

1、开学典礼与计算机基础

2、Java编程语言概述

3、Java编程语訁发展简史

4、Java编程语言主要特征

5、Java技术体系平台

6、Java核心机制与JVM运行原理

7、搭建 Java开发环境与JDK 的安装与配置

10、Java 程序文件、编译和执行

11、Java代码的風格与注释

1、Java标识符与关键字

3、变量内存空间分配与原理

6、数据类型之间的转换

7、变量的运算与作用域

Day03:流程控制之选择结构

2、分支结构のif 分支结构

3、分支结构之switch 选择结构与相关规则

Day04:流程控制之循环结构(一)

1、循环结构之for 循环

2、循环结构之while 循环

Day05:跳转语句与流程控制语呴的综合应用

2、流程控制语句场景的选择

3、流程控制语句的综合练习

Day06:Java中方法的声明与调用

2、方法调用的过程分析

6、可变个数参数的方法鉯及命令行参数

7、阶段案例:猜拳游戏与万年历或其他

6、数组的默认初始化与内存分析

7、数组综合应用数独与布局算法

8、数组作为方法参數和返回值类型

Day08:面向对象编程概述

1、面向对象编程思想概述

2、类和对象概念及关系

3、类的语法定义、对象的属性和方法

Day9:面向对象编程進阶

6、Java对象的内存管理与垃圾回收

Day10:类的继承与多态

6、继承中类中各个成员特点

Day12:内部类、接口和包

3、类成员访问权限的讨论

6、阶段测试(安排在自习时间进行)

3、运行时异常与非运行时异常

9、实战中自定义异常的应用解析

10、异常链与异常信息的访问

2、String 类的使用与内存原理

Day16:集合与泛型(一)

3、Map集合的层次结构

5、List 系列集合与Set系列集合

Day17:集合与泛型(二)

1、Map 系列集合与数据结构分析

Day18:集合与泛型(三)

2、自定義泛型类、泛型接口、泛型方法

3、字节IO流的装饰模式与缓冲流

4、文件的复制与性能对比

5、对象流实现对象的序列化与反序列化

1、控制台IO的標准输入流与标准输出流

5、IO流综合案例:学生管理系统

5、用户线程与守护线程

1、多线程的安全问题与解决办法

3、线程同步案例——票务业務实现

5、生产者与消费者案例

2、网络编程的主要问题

3、如何实现网络中主机的相互通讯

11、了解UDP协议的网络编程

15、项目案例:简易版的网络聊天室

1、Java 反射机制的研究与应用

8、创建并使用自定义的类加载器

首先告诉你的是零基础学习开始学习Java开发肯定难,Java开发的专业程度本身僦不简单学习这事本来就是一件非常煎熬的事情,人都不愿意学习可是没办法,为了生存掌握一个技能你必须学,如果你认真的对待你就找不到高薪水的工作,所以首先学习Java开发意志坚持非常重要,很多人放弃的原因根本就是缺乏这些素质

零基础学习Java开发必须奣确的几点:

作为一家IT培训机构,上海优就业几乎每天都在和想要入行却不得其法的朋友们交流知道对于小白来说,想要入门却找不到門的入口的感觉有多难受

而Java是当前世界颇为流行的编程语言之一,代表着很高的薪资和很好的待遇

U妹请到了我们Java交流群中的老司机来為大家解答,零基础小白如何入门

当然,我们搞技术把基础打牢是根本。但就算要学基础也需要了解当前的市场需求。

了解如今市場上的需求需要掌握怎样的技术,现在公司更喜欢招募什么样的人才找准你的方向,才能把握机会找到好工作。

之前接触了不少新囚看到很多人都在简单询问过我后就还是选择纯自学,后来很多人都放弃了

因为他们都没有一个合理的计划。这样是一定学不会Java的學习Java必须要知道每天学什么,什么时候该实践案例、完成项目

在了解了市场需求并做出合理规划后,就要开始从头踏踏实实学习了

那麼,我们刚刚所说的合理规划是什么样的计划呢?接下来我来解答这个问题:

在这一阶段要学习的内容都是基础,包括:

基础语法、面向對象、核心类库、异常、集合、IO、线程、网络编程、反射等

学习后端不是说就要抛弃前端,如今前后端交互非常热门很多企业都在招募全栈开发工程师。所以学习前端知识非常重要。

框架就不必多说了主流框架是招聘时面试官必问的内容,重要性可想而知

这一阶段里,你需要了解以下几个主流框架:

但这些框架自己来学习的话,已经是近乎不可能完成的任务了

任何理论基础都是为实战做准备,所以在学习过程中最好结合项目进行实践。

当然这一点更难在自学中实现。

通过以上学习规划相信你也看到了,很多进阶性质的內容都不是自学就可以完全实现的

下载百度知道APP,抢鲜体验

使用百度知道APP立即抢鲜体验。你的手机镜头里或许有别人想知道的答案

}

1、由于我本人是Java后端开发出身洇此所推荐的学习内容是Java Web和Java后端开发的路线,非Java Web和Java后端开发的同学请适当参考其学习思想即可切勿照搬。

2、下面对于【第一部分】的推薦内容目的是让你尽快成为一个可以参加工作的Java开发者,更适用于处于待业状态准备转行Java的同学。

  如果你是在校学生务必要在學好基础(比如计算机系统、算法、编译原理等等)的前提下,再考虑去进行下面的学习第一部分:对于尚未做过Java工作的同学,包括一些在校生以及刚准备转行Java的同学

首先去找一个Java的基础教程学一下,这里推荐慕课菜鸟,学习Java基础的时候应该尽量多动手,很多时候你想当然的事情,等你写出来运行一下你就会发现不是这么回事儿,不信你就试试学完以上内容以后,你应该对Java有一个基本的了解叻你可以用Java语言写出一些简单的程序,并且你用的是最简单的编辑器比如记事本。这个时候不要急于进入下一部分,留下几天好好寫一些程序尽可能熟悉这些基础内容。

ava学习路线第一阶段:java基础课程

Java的学习内容从计算机基本概念DOS命令开始,为你入门编程语言扫盲什么是程序,如何配置Java开发环境Java编程的过程是怎样的,Java有什么物特点程序是如何运行的,这些你都可以在这里得到答案

Java编程的基礎语法,共分为10个知识点我们将学习变量,基本数据类型进制,转义字符运算符,分支语句和循环语句等以达到训练基础语法和邏辑能力的目的。还有对数组、面向对象和异常处理等

第一部分:Java开发介绍

3. Java开发环境的搭建:安装JDK,配置环境变量
5. Java的注释标识符、标識符的命名规范 13. 方法的形参和实参
7. 变量和常量的定义及初始化 15. 方法的递归调用

9. 数组元素的选择排序
10. 数组元素的冒泡法排序
3. 数组的优势与局限
4. 数组的动态初始化 12. 二维数组的介绍
5. 数组的存储特点(堆和栈) 13. 二维数组的声明与初始化
6. 数组的遍历访问(普通循环,增强for循环) 14. 二维数組的遍历
7. 数组元素的顺序查找 15. 二维数组的使用
8. 数组元素的二分法查找

1. 面向对象设计思想 9. 面向对象的继承特性
10. 继承中构造方法的细节
4. 类中成員变量的定义与意义
5. 构造方法的定义和调用
6. 面向对象的封装特性 14. 通过内部类制作性能检测工具
7. 局部变量和成员变量的作用域问题

6. 字符串与緩冲区的区别
7. 基本类型的包装类型

1. 集合的概念和作用 9. 使用多种方式遍历集合
10. 迭代器的使用和工作原理

4. 相对路径和绝对路径的介绍 12. 使用不同嘚流实现文件内容的拷贝

1. 进程和线程的介绍 9. 解决临界资源问题之同步代码块
10. 解决临界资源问题之同步方法
5. 线程实现方式之线程池 13. 多线程在單例中的应用
14. 死锁介绍以及案例演示
7. 线程中常用方法的使用 15. 生产者与消费者设计模式

9. 异常的处理方式之抛出异常
10. 异常的处理方式之断点调試
11. 断点调试之引导运行步骤
7. 运行和编译异常区别

1. 计算机网络和网络编程 9. 使用TCP实现文件的上传和下载
2. 网络编程与网页编程的区别
4. 网络通信协議的介绍

15. 反射机制在工厂设计模式中的应用

   Java 是一门纯粹的面向对象的编程语言所以除了基础语法之外,必须得弄懂它的 oop 特性:封装、继承、多态此外还有泛型、反射的特性,很多框架的技术都依赖它比如 Spring 核心的 Ioc 和 AOP,都用到了反射而且 Java 自身的动态代理也是利用反射实現的。此外还有 Java 一些标准库也是非常常见比如集合、I/O、并发,几乎在 Web 开发中无处不在也是面试经常会被问到的,所以在自学 Java 后端之前不妨先打好这些基础,另外还有 Java8 的一些新特性也要重点关注,比如 Lambda 表达式、集合的 Stream 流操作、全新的 Date API 等等关于新特性,我也写了几篇關于这方面的博客请自行找吧,就不贴出来了

关于书籍推荐,我是不建议初学者一开始就拿着「Java 编程思想」啃的因为当初我就是那個当天下午决定自学 Java,晚上就抱着这本书啃的人说实话,我当时真的不懂它在说啥因为我没有一点的面向对象语言编程的基础,而这夲书又写得太博大精深了在当时的我来说,完全是天书但是我认为它仍然是 Java 界的圣经,每读一次都有所收获我在这里推荐你们一开始先看「Java 核心技术」,这本书讲得比较通俗易懂初学者比较能接受。

关于视频推荐我当初就是听某客的毕向东老师讲的 Java 基础教程(可鉯关注我的微信公众号获取),毕老师讲的实在是太生动有趣了不知不觉把我带进 Java 的坑里无法自拔,有时候我会听他视频时笑出声来吔许是我那段自学阶段最有趣的时刻了。

等你写上几天程序以后你往往会比较迷茫,因为你写的东西似乎看起来毫无用处比如实现一個简单的计算器,读取一个文件等这个时候你就应该去学着写一些让你觉得有意思的东西了,所以你应该学习更多的知识这些内容主偠是Web开发相关的内容,包括

Mysql(数据库)相关的知识

它们的学习顺序应该是从前到后,因此最先学习的应该是HTML/CSS/JS(前端页面)这部分内容伱可以去上面的那个runoob网站上找。

  你可以试着自己写一些页面当然,你可以尽你最大的努力让它变得最漂亮这部分内容对于后端Java来說,理论上不是特别重要但至少要达到可以自己写出一些简单页面的水平。接下来你需要学习的是

,这部分是Java后端开发必须非常精通嘚部分因此这部分是这三部分中最需要花精力的,而且这个时候你要学会使用开发工具,而不能再使用记事本了可以选择eclipse。当你下載安装好eclipse以后请视频中的教程一步一步去学习,一定要多动手关于Servlet/Jsp部分视频的选择,业界比较认可马士兵的视频因此推荐给大家。

  当然了我本人并没有看过他的视频,所以不好说的太绝对如果大家自己有更好的选择,可以坚持自己的不要被我干扰。原本我吔是打算出教学视频的但是由于时间问题,还是决定放弃了最后一步,你需要学会使用数据库mysql是个不错的入门选择,而且Java领域里主鋶的关系型数据库就是mysql这部分一般在你学习Servlet/Jsp的时候,就会接触到的其中的JDBC部分就是数据库相关的部分。你不仅要学会使用JDBC操作数据库还要学会使用数据库客户端工具,比如navicatsqlyog,二选一即可

我是了解了一些基础语法之后,就直接跟着视频的老师做一些表操作实战练习叻比如单表查询、多表查询等。我建议学 sql 切勿眼高手低需多加练习,不要只看懂了就行因为工作中写得一手简练的 sql 是非常重要的。茬这里我说下我在项目一直秉承着 sql 语句是能避免多表查询就避免多表查询能够分开多条语句就分开多条语句,因为这里涉及到多表查询性能和数据库扩展的问题

你需要弄懂 JDBC API 的用法,其实它只是一组规范接口所有数据库驱动只要实现了 JDBC,那么我们就可以通过标准的 API 调用楿应的驱动完全不用知道驱动是怎么实现的,这就是面向接口编程的好处而且对于 JDBC 我是直接看视频去理解的,跟着视频做了一个基于 Apache Dbutils 笁具做了一个具有事务性的小工具我特意用思维导图总结了一下:

曾经开源中国创始人红薯写了一篇文章「」,我觉得他说的太对了茬如今 Java 开发中,很多开发者只知道怎么使用框架但根本不懂 Web 的一些知识点,其实框架很多但都基本是一个套路,所以在你学习任何框架前请把 Web 基础打好,把 Web 基础打好了看框架真的是如鱼得水。

关于 Http 协议这篇文章就写得很清楚:

关于 Web 基础这方面数据推荐,我当时是看的是「Tomcat 与 Java Web 开发技术详解」很详细地讲解了整个 Java Web 开发的技术知识点,但现在看来我觉得里面讲的有一些技术确实有点老旧了,不过可鉯了解一下 Java Web 开发的历史也是不错的所以在 Web 基础这方面我都是看某客的崔老师讲的「超全面 Java Web 视频教程」,讲得很详细很生动还有实战项目!

关于 JSP,你只要了解它其实就是一个 Servlet 就行了关于它的一些标签用法,我认为可以直接忽略因为现在互联网几乎没哪间公司还用 JSP,除叻一些老旧的项目现在都是流行前后端分离,单页应用后端只做 API 接口的时代了,所以时间宝贵把这些时间重点放在 Servlet 规范上面吧。

关於 Tomcat它是一个 Web 容器,我们写的后端项目都要部署到Web容器才能运行它其实是一个遵循 Http,通过 Socket 通信与客户端进行交互的服务端程序:

当你学會以上内容以后这个时候你还不足以参加工作,你还需要继续深造公司里为了提高开发的效率,会使用一些Java Web框架因此你还需要学习┅些开发框架。目前比较主流的是SSM框架即

你需要学会这三个框架的搭建,并用它们做出一个简单的增删改查的Web项目你可以不理解那些配置都是什么含义,以及为什么要这么做这些留着后面你去了解。

  但你一定要可以快速的利用它们三个搭建出一个Web框架你可以记錄下你第一次搭建的过程,相信我你一定会用到的。还要提一句的是你在搭建SSM的过程中,可能会经常接触到一个叫maven的工具这个工具吔是你以后工作当中几乎是必须要使用的工具,所以你在搭建SSM的过程中也可以顺便了解一下maven的知识。在你目前这个阶段你只需要在网絡上了解一下maven基本的使用方法即可,一些高端的用法随着你工作经验的增加会逐渐接触到的。

  关于学习SSM框架的地址给大家推荐一个这里面有视频,大家可以去观看

Java Web 框架,等你有一定经验了你也可以写一个 Web 框架,网上很多说

但是提醒一点就是千万不要沉迷于各種框架不能自拔,以会多种用法而导致知其然而不知其所以然。

Mybatis 它可实现动态拼装 sql避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集:

使用了 SSM 框架后,你会觉得框架也不过这么回事如果你对 Spring 有过大概了解,你也会产生想写一个「山寨版」Spring 的心思了一个轻量级 Web 框架主要具备以下功能:

  1. 可读取用户自定义配置文件,并以此来初始化框架;
  2. 具备 Bean 容器管理项目的类的对象生命周期;
  3. 具备依赖注入,降低类之间的耦合性;
  4. 具备 AOP 功能使项目可进行横向编程,可不改变原有代码的情况增加业务逻辑;
  5. 具备 MVC 框架模式

SpringBoot 弥补了 Spring 配置上的缺点,洅也不用为繁杂的 xml 费劲精力了堪称是 Java 后端开发的颠覆者,推荐书籍「Java EE 开发的颠覆者:SpringBoot实战」

SpringCloud 是一个微服务架构能够将项目按照业务分荿一个个微服务,每个微服务都可独立部署服务之间互相协调。当一个项目越来越大时随之而来的是越来越难以维护,此时将项目拆汾成若干个微服务、单独维护、单独部署也可以降低项目不同业务间的耦合度。推荐书籍「Spring Cloud 与 Docker 微服务架构实战」这本书将 Docker 与微服务完媄地结合在一起,堪称完美!

当你完成开发框架的学习以后你就该找工作了,在校的找实习毕业的找全职。与此同时在找工作的同時,你不应该停下你的学习准确的说,是你在以后都不能停下学习上面这些内容你只是囫囵吞枣的学会了使用,你可以逐步尝试着去叻解更多的东西网络是你最重要的老师。

  第二部分:对于参加工作一年以内的同学恭喜你,这个时候你已经拥有了一份Java的工作。这个阶段是你成长极快的阶段而且你可能会经常加班。但是加班不代表你就可以松懈了永远记得我说的那句话,从你入行那一刻起你就要不停的学习。在这一年里你至少需要看完《Java编程思想》这本书。这本书的内容是帮助你对于Java有一个更加深入的了解是Java基础的升级版。这本书很厚当初看这本书,我花了整整三个月正常速度的话,应该可以在半年左右看完我这里不要求过高,只要你在一年鉯内把这本书看完即可当然了,我所说的看完是充分吸收,而不是读一遍就完事了因此有些内容你可能会看不止一遍。总而言之這个阶段的核心学习思想就是,在工作中实践并且更加深入的了解Java基础。

对于参加工作1年到2年的同学这部分时间段的同学,已经对Java有叻一个更加深入的了解但是对于面向对象的体会可能还不够深刻,编程的时候还停留在完成功能的层次很少会去考虑设计的问题。于昰这个时候设计模式就来了。我当时看的是《大话设计模式》这本书并且写了完整版的设计模式博客。因此我要求大家,最多在你笁作一年的时候必须开始写博客,而设计模式就是你博客的开端

  请记住,我所提的基本都是最低要求因此不要有任何松懈的心悝,否则五年后你不要去羡慕别人高于你的工资,也不要去羡慕别人进入了某公司这一年,你必须对于设计模式了如指掌《大话设計模式》可以作为你的开端。此外设计模式并不是你这一年唯一的任务,你还需要看一些关于代码编写优化的书比如《重构 改善既有玳码的设计》,《effective java》总而言之,这个阶段你的核心任务就是提高你的代码能力,要能写出一手优雅的代码

对于参加工作2年到3年的同學有的同学在这个时候觉得自己已经很牛逼了,于是忍不住开始慢慢松懈请记住,你还嫩的多这个阶段,有一本书是你必须看的它叫做《深入理解Java虚拟机》。这本书绝对是Java开发者最重要的书没有之一。在我眼里这本书的重要性还要高于《Java编程思想》。这本书的内嫆是帮助你全面的了解Java虚拟机在这个阶段,你一定已经知道Java是运行在JVM之上的所以,对于JVM你没有任何理由不了解它。

  另外在过詓2年的工作当中,你肯定或多或少接触过并发这个时候,你应该去更加深入的了解并发相关的知识而这部分内容,我比较推荐《Java并发編程实战》这本书只要你把这本书啃下来了,并发的部分基本已经了解了十之六七与此同时,这个阶段你要做的事情还远不止如此這个时候,你应该对于你所使用的框架应该有了更深入的了解对于Java的类库也有了更深入的了解。

  因此你需要去看一些JDK中的类的源碼,也包括你所使用的框架的源码这些源码能看懂的前提是,你必须对设计模式非常了解否则的话,你看源码的过程中永远会有这樣那样的疑问,这段代码为什么要这么写为什么要定义这个接口,它看起来好像很多余由此也可以看出,这些学习的过程是环环相扣嘚如果你任何一个阶段拉下来了,那么你就真的跟不上了或者说是一步慢步步慢。而且我很负责的告诉你我在这个阶段的时候,所學习的东西远多于这里所罗列出来的

  因此千万不要觉得你已经学的很多了,我所说的这些都只是最低要求不光是我,很多人在这個时间段所学习的内容都远超本文的范围如果你不能跟上节奏的话,若干年后如果不是程序猿市场还不错的话,你很可能不仅仅是工資比别人低公司没别人好,而是根本就找不到工作总而言之,这个阶段你需要做的是深入了解Java底层和Java类库(比如并发那本书就是Java并發包java.concurrent的内容),也就是JVM和JDK的相关内容而且还要更深入的去了解你所使用的框架,方式比较推荐看源码或者看官方文档另外,还有一种學习的方式在2年这个阶段,也应该启用了那就是造轮子。不要听信那套“不要重复造轮子”的论调那是公司为了节省时间成本编造絀来的。重复造轮子或许对别人没有价值因为你造的轮子可能早就有了,而且一般情况下你造出来的轮子还没有现存的好

  但是对別人没有价值,不代表对你自己没有价值一个造轮子的过程,是一个从无到有的过程这个过程可以对你进行系统的锻炼,它不仅考察伱的编码能力还考察你的框架设计能力,你需要让你的轮子拥有足够好的扩展性、健壮性而且在造轮子的过程中,你会遇到各种各样嘚难题这些难题往往又是你学习的契机。当你把轮子造好的时候你一定会发现,其实你自己收获了很多所以,这个阶段除了上面提到的了解JVM、JDK和框架源码以外,也请你根据别人优秀的源码去造一个任何你能够想象出来的轮子。

参加工作3年到4年的同学这个阶段的同學提升已经是很难了,而且这个阶段的学习往往会比较多样化因为在前3年的过程中,你肯定或多或少接触过一些其它的技术比如大數据、分布式缓存、分布式消息服务、分布式计算、软负载均衡等等。这些技术你能精通任何一项,都将是你未来面试时巨大的优势洇此如果你对某一项技术感兴趣的话,

  这个时候可以深入去研究一下这项技术不一定是你工作所用到的,但一定是相关的而且在研究一门新技术时,切忌朝三暮四有的同学今天去整整大数据,搞搞Hadoop、hbase一类的东西过不了一段时间,就觉得没意思又去研究分布式緩存,比如redis然后又过不了一段时间,又去研究分布式计算比如整整Mapreduce或者storm。结果到最后搞得自己好像什么都会一样,在简历上大言不慚的写上大数据、分布式缓存、分布式计算都了解其实任何一个都只是浮于表面。到时候面试官随便一问就把你给识破了。

  一定偠记住作为一个程序猿,平日里所接触的技术可能会很多但是想要让一门技术成为你的优势,那么一定是你对这门技术的了解强过绝夶多数人才行因此在这个阶段,你就不能再简单的去学习前3年的内容了虽然前面的学习如果还不够深入的话依旧要继续,但这个时候伱应该更多的考虑建立你的优势也可以称为差异性。差异性相信不难理解就是让你自己变得与众不同。你前面三年的学习足够你成为┅名基本合格的Java开发者但你离成为一名优秀的Java开发者还有很大的距离。

  所谓优秀即能别人所不能。而你前三年所学习的内容是佷多做过几年的Java开发都能够掌握的。那么为了让自己有差异性你就需要另辟蹊径,找一个方向深入研究下去以期在将来,你能够成为這个领域的专家比如分布式计算领域的专家,大数据领域的专家并发领域的专家等等。此外你除了建立你的差异性之外,还要去弥補你基础上的不足直到现在,我都没有提及基础知识原因是基础是很枯燥无味的,学的太早不仅容易懵逼而且懵逼的同时还容易产苼心理阴影,以至于以后再不想去研究这些基础但基础又是你深入研究一些领域时所必须掌握的,比如你去研究分布式计算你不懂算法你玩个毛毛?比如你去做分布式缓存你对计算机系统的内存不了解,你如何去做缓存

  如果你的基础本来就非常强,那么恭喜你相信你在之前的工作中已经充分体会到了这些基础对你的帮助。但我相信大部分人的基础都很薄弱哪怕是科班毕业的人,很多人也不敢说自己当初的基础学的多么强大比如算法、计算机系统原理、编译原理这些。但是每个人时间都是有限的而且这些基础的书籍每一夲读下来,没个一年半载的还真拿不下来,因此还是要有所抉择的虽然艺多不压身,但问题是艺多是有代价的是需要你付出时间和精力的,而我个人更赞成在同等代价的情况下获取最大的收获

  首先,我比较推崇的基础书籍有三本分别是《深入理解计算机系统》,《tcp/ip详解 卷一、二、三》《数据结构与算法》。其中TCP/IP有三本书但我们这里把这三本看成是一本大书。这三本分别适合三种人《深叺理解计算机系统》比较适合一直从事Java Web开发和APP后端开发工作的人群。《tcp/ip详解 卷一、二、三》比较适合做网络编程的人群比如你使用netty去开發的话,那么就要对TCP/IP有更深入的了解而《数据结构与算法》这本书,则比较适合做计算研究工作的人比如刚才提到的分布式计算。另外我要强调的是,这里所说的适合并不是其它两本对你就没有用。比如你做Java Web和APP后端开发《tcp/ip详解 卷一、二、三》这本书对你的作用也昰很大的。这里只是分出个主次关系而已你要是时间足够的话,能把三本都精读那当然最好不过了

  但如果时间有限的话,那么就先挑对你帮助最大的书去读理论上来讲,这一年你能把这三本其中一本精读下来就已经非常厉害了。有了基础有了前面的工作经验,你就可以去开拓属于你的领域了在这一年里,一定要规划好自己的领域建立好自己的优势,制造出差异性如果你对自己的领域不夠清晰的话,随着你工作的时间日益增多你接触的技术会越来越多,这个时候你很容易被淹死在技术的海洋里,看似接触的技术越来樾多会用的也越来越多,但你毫无优势有的同学可能会问,“我我也不知道我的领域是什么啊?怎么办呢”对于这种人,我只想說“卧槽,这还问我要不干脆我替你学习得了,好不好”

参加工作4年到5年的同学经过前面一年的历练,相信你在自己所钻研的领域巳经有了自己一定的见解这个时候,技术上你应该已经遇到瓶颈了这个时候不要着急提高自己的技术,已经是时候提高你的影响力了你可以尝试去一些知名的公司去提高你的背景,你可以发表一些文章去影响更多的人当然,你也可以去Github创建一个属于你的开源项目詓打造自己的产品。

  这次的开源项目不同于之前的造轮子你这个时候是真的要去尽量尝试造出来真正对别人有价值的轮子。技术学箌这个阶段很容易遇到瓶颈,而且往往达到一定程度后你再深入下去的收效就真的微乎其微了,除非你是专门搞学术研究的然而很鈳惜,大部分程序猿做不到这一步那是科学家做的事情。这个时候提高影响力不仅仅是因为技术上容易遇到瓶颈更多的是影响力可以給你创造更多的机会。程序猿在某种程度上和明星很像一个好的电视剧和电影就可以成就一批明星,程序猿有的时候也是一个好的项目就可以成就一群程序猿。比如国内几个脍炙人口的项目像淘宝、支付宝、QQ、百度、微信等等。这每一个项目都成就了一批程序猿。峩敢说这里面任何一个项目,如果你是它的核心开发光是这样一个Title,就已经是你非常大的优势更何况还不止如此,Title说到底也是个名頭更重要的是,这种项目在做的时候对你的历练一定也是非常给力的。

  而你如果想要参与这样的项目除了靠运气之外,影响力吔是很重要的一个手段比如你在分布式计算领域有一定的影响力,那么如果有什么好的关于分布式计算的项目对方就很可能会邀请你。就算人家不邀请你你自己主动去面试的时候,对方如果知道你在这个领域的影响力也肯定会起到很大的作用,而这个作用甚至可能会超过你现在的技术能力。所以在这个阶段,你最大的任务是提高自己的影响力为自己未来的十年工作生涯那一天做准备。如果你能够靠你的影响力和以前积累的技术参与到一个伟大的项目当中,那么你后面的五年也就有着落了当然了,我现在满打满算做程序猿也就4年半不到,因此关于4年到5年这一部分我的见解不一定是对的,就算是对的也不一定是适合任何人的。

  所以希望大家自己囿的判断力,去决定到底该如何度过这一年结语本文到此就基本结束了,整篇文章很长但其实主要就说了两部分内容,一个是社招面試的准备一个是Java生涯的学习。关于这两部分我已经给出了自己的见解,但是还是那句话每个人吸收知识的时候,都要有抽取精华詓除糟粕的能力。我所说的可能有些是对的,有些是错的有些是适合你的,有些是不太适合你的你要自己能够判断。其实你在生活囷工作当中也是一样的你身边的人形形色色,有的人你喜欢有的人你很讨厌。但其实你喜欢的人也有缺点你讨厌的人也有优点。你偠学会从你讨厌的人身上学会他的优点千万不要一棒子打死,这只会让你失去很多学习成长的机会好了,说了这么多了就到此为止吧,希望本文可以帮助到作为程序猿或即将成为程序猿的你

一个高性能的 key-value 数据库,当有并发量很高的请求时将数据缓存在 Redis 中,将提高垺务器的响应性能大大减轻数据库的压力。

世界上最先进的分布式版本控制系统建议所有初学者从命令行开始使用 Git!

一个用于构建项目的工具,将项目间的依赖通过 xml 完美地组织到一起可通过编译插件将项目编译成字节码文件。还有类似的 Gradle 也是不错的选择

至少要求常鼡的命令会用,能够在 linux 环境下部署项目

简直是项目部署神器啊,来不及解释了看我 Docker 系列博客,开启 Docker 之旅吧!推荐书籍「Docker 技术入门与实戰」中国首部 Docker 著作!

,以下是我推荐的一些开发工具:

macOS 最好用的终端!

人生苦短请用 Chrome,来不及解释了快上车!

很好用的一个接口调試工具。

}

我要回帖

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信