java程序员学习路线以及我的学习经验

java程序员学习路线以及我的学习经验

本文作者为优知学院创始人陈睿(mike),作者有10年以上技术&产品经验,曾任百度研发经理、携程定制旅游CTO。

这是一篇完整的java程序员学习线路图,一共分为六个阶段。

我以java为例,展示完整的学习步骤。

最后,还有我的学习经验思考。

希望,看完此文,你完全可以自学成为一名真正牛逼的程序员。

java程序员学习线路流程

java程序员学习路线以及我的学习经验

第一步:Java语言基础

从最简单的开始,hello world开始Java之旅

1.编程基础

  1. 常量与变量
  2. 数据类型
  3. 运算符
  4. 流程控制语句
  5. 方法
  6. 数组

2.面向对象

  1. 面向对象思想
  2. 类与对象
  3. 成员变量和局部变量
  4. 封装
  5. this关键字
  6. 构造方法

3.集合

  1. 集合概述
  2. 集合特点
  3. ArrayList集合
  4. HashMap集合
  5. 常用集合优劣比较

4.输入/输出 IO

  1. 字符输入流
  2. 字符输出流
  3. 字符缓冲输入流
  4. 字符缓冲输出流
  5. 复制文件
  6. 集合与文件中数据相互读写

5.练习阶段

属于你自己的helloword

第二步:java语言高级

java程序员学习路线以及我的学习经验

再结合java高级部分,里面的部分内容,这个阶段你不一定能理解很彻底。但有一点,如果你今后想进入高阶俱乐部,这些内容你必须掌握牢固。

举个栗子,如果你面试通过进入了公司,我一定会在早期仔细review你的代码。代码的功力是欺骗不了人的,不同人写一个接口,呈现的结果也是千差万别(所以才有了规范)。

1.面向对象

  1. 继承
  2. 多态
  3. 重写(Override)
  4. 重载(Overload)
  5. 封装
  6. 接口
  7. java包 package

2.异常处理

  1. 异常概述
  2. 异常分类
  3. 异常处理方案
  4. 自定义异常

3.多线程

  1. Java线程:概念与原理
  2. Java线程:创建与启动
  3. Java线程:多线程的实现方案
  4. Java线程:线程生命周期
  5. Java线程:线程池
  6. Java线程:线程状态的转换
  7. Java线程:线程的同步与锁
  8. Java线程:线程的交互等等

线程的几个主要概念

在多线程编程时,你需要了解以下几个概念

  • 线程同步
  • 线程间通信
  • 线程死锁
  • 线程控制:挂起、停止和恢复

4.输入与输出IO

  1. 文件和I/O
  2. 读写文件
  3. Java 流(Stream)
  4. 文件(File)
  5. 缓冲流

5.泛型(Generic )

  1. 泛型的使用场景
  2. 泛型类型
  3. 泛型方法
  4. 泛型通配符?

6.网络编程

  1. 网络机制
  2. Socket原理机制
  3. UDP、TCP传输等

7.反射(reflection)

  1. 类加载机制原理
  2. 反射构造方法、字段、方法
  3. Properties配置文件

8.注解(annotation)

  1. 注解的使用和原理
  2. 三种内置annotation
  3. 自定义annotation
  4. 注解类的反射调用
  5. 动态代理类如何处理

9.Java高级特性和类库

  1. java类加载器class loader
  2. java 程序运行的基础知识,java编译后的bytecode的整个运行机制,这一点对应.net的IL(intermediate language)。
  3. 理解Java nio,关于这一点网上有非常多的教程,这一条需要重点掌握,对于高并发的掌握很重要。
  4. java juc(java.util.concurrent)等等

10.JVM原理和调优

JVM最重要的三个部分必须要非常清楚,内存划分、class加载机制以及GC策略。搞清楚这三部分不仅仅是为了面试,也是为了让你对于Java有更深刻的理解,这对于你的Java生涯非常有帮助。

内存划分简单说分为三个部分,Young Generation(年轻代)、Old Generation(年老代)以及Perm Generation(永久代)。其中的Young Generation(年轻代),又分为Eden、From和To,其中From和To又统称为Survivor Spaces(幸存区)。

关于classloader机制的学习,可以结合tomcat去学习,了解清楚tomcat的classloader机制,看tomcat是如何保证各个APP之间的类隔离的。如果可能的话,看一下tomcat中classloader的源码,当中也包含了与tomcat类加载机制相似的部分。

至于GC,需要清楚GC Roots都有哪些,以及如何判断一个对象可以被回收。此外,GC的算法和策略也要有大概的了解。

第三步:java web阶段

java程序员学习路线以及我的学习经验

1.前段技术掌握

  1. html
  2. css
  3. js
  4. jquery
  5. bootstrap

2.动态网页技术

  1. Java Servlet API
  2. Velocity
  3. FreeMarker
  4. JSP等常用模板引擎

比如,淘宝前端层使用的是velocity模板,部分公司采用jsp、freemarker等,基本类似。

3.linux服务器基本命令

在个阶段,也可以结合自己的情况,学习linux系统底层原理。

第四步:java框架阶段

java程序员学习路线以及我的学习经验

1.SSH(struts2 spring hibernate)

2.SSM(springmvc spring mybatis)

备注:如果你仔细,网上有部分叫SSI,I为ibatis,后来ibatis改名为mybatis了。

框架组合,我首推SSM,比SSH灵活强大。

框架的优缺点,我会再单独写文。

如果你还有兴趣,可以自己搭建Lucene、solr框架,以及memcached/ redis、activeMQ、hadoop等等搜索、分布式缓存、异步消息、数据等。

我一般建议自己搭建,从学习效果再到理解深度都不一样。有兴趣,就开始自己搭建。

第五步:开发工具阶段

java程序员学习路线以及我的学习经验

1.web调试工具

  1. firefox
  2. firebug
  3. web developer
  4. yslow
  5. httpwatch
  6. ietester等

这些都是开发必用。

2.集成开发工具

eclipse(首推) ,STS,myEclipse,Idea

eclipse里的插件太多,推荐几个必装插件:

JadClipse 、run-jetty-run(很牛的热部署调试)、veloctiy、freemarker IDE、Subclipse、m2eclipse、mybatis Editor、 Easy Explorer等等。

3.版本控制工具

svn、git(首推)

4.构建工具

maven、nexus搭建maven私服

建议自己搭建一套nexus maven私服,成为你们公司的代码仓库员。

5.java调试工具

  • jProfiler(性能跟踪)
  • jClarity(性能监控和日志分析)
  • Visualvm(性能分析和调优)等

java调试还有很多,以上偏向性能调优和分析

第五步:项目实践阶段(淘宝店铺装修)

java程序员学习路线以及我的学习经验

所谓的项目实践阶段,其实就是把以上的内如付诸于实践。听一万遍还不如自己动手一试。

项目实践的重要性,也许比你以上的学习步骤还来得重要得多,而且学习速度也更快。

如果大家有兴趣,我可以给大家分享,关于淘宝阶段的有技术挑战的项目,从需求收集MRD->需求文档(PRD)->需求评审->写技术设计方案->设计方案评审->写UC(User Case 用户用例)->UC评审->写TC(Test Case测试用例)->TC评审->编码…

当然,以上流程步骤,现在已经有部分变动,但是,万变不离其宗。

备注:

1.淘宝是所有公司里,要写UC的一家公司,其实就是开发写测试用例,开发写得好,测试根本不需要写测试用例。

2.很多同学不太会写设计方案,设计方案其实最好的方式就是借鉴,一个好的设计方案模板很管用。技术设计方案模板和代码规范,其实都是大部分人不断实践后沉淀下的结晶。

我的学习经验

java程序员学习路线以及我的学习经验

首先,自己得有信心。

我之前也仅是表象相信这件事,我也是经历几次跨界学习之后,才从本质认识到这句话的重要性。

如果你从早期就不相信你能做到,基本你也很难做到,更难做好。大部分学习新技能,一看一听再看,彻底被吓退了,从学习气势上就已败下。如果这样的信心没建立起来,其实也不要紧,但至少需要具备这样的思维能力。学习的信心最后也是通过不断的学习积攒起来的。

其实学习本身根不是事,反而是你要学什么,这件事反而变得极其重要了。

要想学好,先从气场上就得暂得先机。

其次,凡事讲究方法。

自信是第一条,但是,光有自信肯定是不行的。

方法论很重要,我比较喜欢研究方法论。关于技术、产品的方法论,如果你是老读者,我之前写了很多类似的方法论。如果你想了解,那就勤快一点,翻翻老文,这里我就不多讲了。

总之,项目实践带动理论,自认为效果最好。

再次,专注是最好的老师。

现在回想起来,只有我早期在newegg、淘宝的阶段是最专注技术的阶段,专注有时候真是一种享受。后面进入百度、携程开始,由于带团队,还要管产品业务,每天一小会,每周两大会,特别是在携程阶段,技术、产品、测试都管、还有部分运营。所以,珍惜你现在的编码阶段吧,对技术的提升其实也在这个阶段。

最后,兴趣能引导你走得更好。

以上的内容,我认为都是平行阶段。如果你想有更大的发展或者造化,我坚信一定是兴趣引导的阶段,也只有这样,才能把自己的潜能最大化。

作者简介

陈睿|mikechen,10年+大厂架构经验,BAT资深面试官,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注作者「mikechen」公众号,获取更多技术干货!

后台回复架构,即可获取《阿里架构师进阶专题全部合集》,后台回复面试即可获取《史上最全阿里Java面试题总结

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧