子墨子了解Pisces Zone

Java学习路线图

2015-03-27  本文已影响14217人  Jabari

Java是一个通用的编程语言,其实可以干很多事,怎么学Java就看怎么用了,但有一些一般的步骤:


接下来就看具体要做哪方面的应用了,看需求。比如(下面的没有顺序)

  1. 关于语言

    • 如果学Java学得不舒服了,学Python。
    • 如果对面向对象编程的概念有点不习惯,学Smalltalk。(Ruby也行,但不如Smalltalk经典。Ruby的文档是一大硬伤。)
    • 如果嫌Java太啰嗦,学Python
    • 如果嫌Java太啰嗦,又想用JVM,自己又有精力,学Scala
    • 如果对对象之间的关系有点晕,学一学UML,以及它的一些图,可以对程序和运行进行直观的建模。你的IDE也许有插件可以生成UML图。但是不要太沉迷于这些方法论。
  2. 调试和辅助工具

学习一下你的集成开发环境提供的调试工具,加一些断点试试。

  1. 多线程

学习Java的多线程编程以及lock、condition的用法(包括传统Java的synchronized语句以及新加的java.util.concurrent.*),学习一下如何让线程停下来,以及为什么要频繁确认isInterrupted()而不要用Thread.stop()。了解一下多核处理器、缓存、内存的关系,以及为什么多线程编程这么难。

  1. 反射、元编程

    • 学习Java的反射机制,以及Annotation的用法。
    • 如果还舒服,试试java.lang.reflect.Proxy的用法。
    • 如果仍然还舒服,玩一玩CGLib(一个第三方的库)。
  2. 网络编程

学习一下IP,TCP协议(计算机专业的应该学过,复习一下),学习Socket编程(注意垃圾回收器不会帮你关掉Socket)。

  1. 数据库

学习一下关系数据库(计算机专业的应该学过,复习一下),包括SQL。选一个数据库管理系统熟悉一下(比如MariaDB,或者(如果你不讨厌Oracle的话)用被Oracle收购了的MySQL。先脱离Java单独学学)。然后看它们的官方文档教你怎么用Java连接这种数据库。这中间会涉及到JDBC接口。同时一定要知道SQL注入安全漏洞,以及掌握如何用PreparedStatement防止注入!!。建议看 http://bobby-tables.com/

  1. 日志记录

学习一下slf4j和logback的用法。

  1. 构建(build)系统

学习一下Ant的用法。

  1. 版本控制

学习一种分布式版本控制器(如Git、Mercurial、Bzr、Darcs等,推荐Git)的基本用法,以及如何用它管理Java工程。希望你已经开始使用Maven了,并且知道为什么把IDE生成的工程文件(如eclipse的.project,.classpath和.metadata)放入版本控制器不好。然后了解一下如何在IDE中使用版本控制(Eclipse自带Git插件)。

  1. 持续集成

自己(或者为你们实验室)搭建一个持续集成(Continuous Integration)服务器,如Jenkins,定期编译你的程序。建议同时使用Git等分布式版本控制器。

  1. 零碎工具

淘一淘java.nio.files里面有什么好用的东东,然后再淘一淘Apache Commons Lang和Commons IO里有什么好用的工具。Commons Logging就不要再用了,用SLF4j和Logback。

  1. XML

学学XML、DOM、XPath。XML这东西到处都可能用到。也可以用它写自己的配置文件。

  1. 语法分析和编译器

学学Antlr或者别的Parser Generator的用法

  1. 高效容器

学学FastUtil或者Trove,如果你需要进行大量数值运算的话。

  1. 分布式计算

学学MapReduce的思想以及它的实现。

  1. 进程间通信

看看ActiveMQ、MINA和RMI。

  1. 其他语言(JVM)

学习另一门跑在JVM上的语言或者实现(如Groovy、Scala、Clojure、JRuby、Jython、JavaScript……)

  1. 其他语言(非JVM)

学习另一门通用脚本语言(如Python、Ruby,其实perl也行,但不推荐),知道什么时候Java不是最好的选择。

  1. Java语言和Java虚拟机

通读一遍(一目十行地读,不用细读)Java Language Specification,以及Java Virtual Machine Specification。

  1. 内存管理

学学垃圾回收的几种基本算法,包括mark-sweep、mark-compact、semi-space、generational、mark-region等,各自的性能,以及为什么朴素的reference counting是不完整的。知道为什么finalizer性能很糟糕,而且标准并不要求finalizer在程序退出前一定会执行。

  1. 动态装载

学学Java的动态装载(class loading)

  1. 本地/外语接口

学习一下Java Native Interface(JNI),试着写一个Java和C语言混合编程的程序。

  1. 密码学

学一学密码学,包括编码、密码分析、攻击、对称密钥、公钥系统、数字签名、哈希算法等,看看Java有没有实现。

  1. 移动终端

学一学Android开发。

  1. 历史

如果觉得有些无聊,就去挖一挖历史上比较火的可能和Java相关技术,比如:


其实Java不算完全面向对象的语言。Java更偏实用性,很多控制流(if语句、while循环、for循环等)来自面向过程的语言;基本数据类型(int, char, double等)也不是对象。但另一些语言,比如SmallTalk,更偏向纯粹的面向对象的设计,包括基本的数据类型都是对象,if/while/for等也用对象和方法来实现。比如:

基本数据类型也是对象,可以接受消息(即方法),比如:

(a + b) sqrt

这里面,a+b其实是向a发送“+”消息,参数是b。sqrt也是一个消息,发给一个数。

if分支是这样做的:

(x < y) ifTrue: [ 
       max := y. 
       i := j 
     ] ifFalse: [ 
       max := x. 
       i := k 
     ]

ifTrue:ifFalse: 是一个Boolean对象的一个方法,取两个参数,每个是一个“块”,分别在真和假的情况下执行。

还有while循环是这样做的:

[i < 100] whileTrue: [ 
       sum := sum + i. 
       i := i + 1 
     ]

whileTrue是“块”的一个方法,每次对块求值,如果是真,就反复执行第一个参数(也是“块”)。

所以,相对其他面向对象的语言,Java并不算很“面向对象”。所以需要补充一些对面向对象语言的了解。



上一篇下一篇

猜你喜欢

热点阅读