[Home]   [TOC]

Study_List_Devloper  
Java工程师的学习列表
Updated Feb 10, 2014 by jht5...@gmail.com

Moved to: http://p.rogram.me/java.study.list/

This page will not update.

Java工程师的学习列表

一、Java基础知识

  1. 看一下以下类的源代码
    • java.lang.String
    • java.lang.Enum
    • java.math.BigDecimal
    • java.lang.ThreadLocal
    • java.lang.ClassLoader & java.net.URLClassLoader
    • java.util.ArrayList & java.util.LinkedList
    • java.util.HashMap & java.util.LinkedHashMap & java.util.TreeMap
    • java.util.HashSet & java.util.LinkedHashSet & java.util.TreeSet
  2. 浏览一下以下类的接口及说明
    • java.io.*
    • java.lang.*
    • java.lang.management.*
    • java.lang.ref.*
    • java.lang.reflect.*
    • java.util.*
    • java.net.*
  3. Java实现对Array/List排序
    • java.uti.Arrays.sort()
    • java.util.Collections.sort()
  4. Java实现对List去重
  5. Java实现对List去重,并且需要保留数据原始的出现顺序
  6. Java实现通过正则表达式提取一段文本中的电子邮件,并将 @ 替换为 # 输出
  7. 学习使用常用的Java工具库
    • commons.lang, commons.*, ...
    • guava-libraries
    • netty
  8. 什么是 API & SPI ?
  9. 学习使用Java工具
  10. 学习Java诊断工具
  11. 使用工具尝试解决以下问题,并写下总结 【 没有问题也要创造问题、解决问题
    • 当一个Java程序响应很慢时如何查找问题?
    • 当一个Java程序频繁 FullGC 时如何解决问题?
    • 当一个Java应用发生 OutOfMemoryError 时该如何解决?

相关资料

[1]. JDK src.zip 源代码
[2]. http://commons.apache.org/
[3]. https://code.google.com/p/guava-libraries/
[4]. http://netty.io/
[5]. http://stackoverflow.com/questions/2954372/difference-between-spi-and-api
[6]. http://stackoverflow.com/questions/11404230/how-to-implement-the-api-spi-pattern-in-java

二、Java并发编程

  1. Java内存模型是什么?
  2. synchronized的作用是什么?
  3. volatile的作用是什么?
  4. 以下代码是不是线程安全?为什么?如果为count加上volatile修饰是否能够做到线程安全?你觉得该怎么做是线程安全的?
  5. public class Sample {
      private static int count = 0;
    
      public static void increment() {
        count++;
      }
    }
  6. 学会使用 java.uti.concurrent.**
    • java.util.concurrent.locks.ReentrantLock
    • java.util.concurrent.locks.ReentrantReadWriteLock
    • java.util.concurrent.atomic.Atomic*
    • java.util.concurrent.ConcurrentHashMap
    • java.util.concurrent.Executors
    • ...
  7. 分析并解释一下下面两段代码的差别:
  8. // 代码1
    public class Sample {
      private static int count = 0;
    
      synchronized public static void increment() {
        count++;
      }
    }
    
    // 代码2
    public class Sample {
      private static AtomicInteger count = new AtomicInteger(0);
    
      public static void increment() {
        count.getAndIncrement();
      }
    }

相关资料

[1]. http://www.cs.umd.edu/~pugh/java/memoryModel/
[2]. http://gee.cs.oswego.edu/dl/jmm/cookbook.html
[3]. http://book.douban.com/subject/10484692/
[4]. http://www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html

三、Java底层知识

  1. 学习了解字节码、class文件格式
  2. 写一个程序要求实现javap的功能(手工完成,不借助ASM等工具)
  3. 如Java源代码:
      public static void main(String[] args) {
        int i = 0;
        i += 1;
        i *= 1;
        System.out.println(i);
      }
    
    编译后读取class文件输出以下代码:
    public static void main(java.lang.String[]);
      Code:
       Stack=2, Locals=2, Args_size=1
       0:	iconst_0
       1:	istore_1
       2:	iinc	1, 1
       5:	iload_1
       6:	iconst_1
       7:	imul
       8:	istore_1
       9:	getstatic	#2; //Field java/lang/System.out:Ljava/io/PrintStream;
       12:	iload_1
       13:	invokevirtual	#3; //Method java/io/PrintStream.println:(I)V
       16:	return
      LineNumberTable: 
       line 4: 0
       line 5: 2
       line 6: 5
       line 7: 9
       line 8: 16
  4. 使用CGLIB做一个AOP程序
  5. 使用ASM实现上述CGLIB实现的功能

相关资料

[1]. http://book.douban.com/subject/1138768/
[2]. http://book.douban.com/subject/6522893/
[3]. http://en.wikipedia.org/wiki/Java_class_file
[4]. http://en.wikipedia.org/wiki/Java_bytecode
[5]. http://en.wikipedia.org/wiki/Java_bytecode_instruction_listings
[6]. http://asm.ow2.org/
[7]. http://cglib.sourceforge.net/

四、网络编程知识

  1. 用Java写一个简单的静态文件的HTTP服务器
    • 实现客户端缓存功能,支持返回304
    • 实现可并发下载一个文件
    • 使用线程池处理客户端请求
    • 使用nio处理客户端请求
    • 支持简单的rewrite规则
    • 上述功能在实现的时候需要满足“开闭原则”
  2. 了解 nginxapache 服务器的特性并搭建一个对应的服务器
  3. 用Java实现FTP、SMTP协议
  4. 什么是CDN?如果实现?DNS起到什么作用?

相关资料

[1]. http://www.ietf.org/rfc/rfc2616.txt
[2]. http://tools.ietf.org/rfc/rfc5321.txt
[3]. http://en.wikipedia.org/wiki/Open/closed_principle

五、网络安全知识

  1. 什么是DES、AES?
  2. 什么是RSA、DSA?
  3. 什么是MD5,SHA1?
  4. 什么是SSL、TLS,为什么HTTPS相对比较安全?
  5. 什么是中间人攻击、如果避免中间人攻击?
  6. 什么是DOS、DDOS、CC攻击?
  7. 什么是CSRF攻击?
  8. 什么是CSS攻击?
  9. 什么是SQL注入攻击?
  10. 什么是Hash碰撞拒绝服务攻击?
  11. 了解并学习下面几种增强安全的技术
  12. 用openssl签一个证书部署到apache或nginx

相关资料

[1]. http://en.wikipedia.org/wiki/Cryptographic_hash_function
[2]. http://en.wikipedia.org/wiki/Block_cipher
[3]. http://en.wikipedia.org/wiki/Public-key_cryptography
[4]. http://en.wikipedia.org/wiki/Transport_Layer_Security
[5]. http://www.openssl.org/
[6]. https://code.google.com/p/google-authenticator/

六、JavaScript知识

  1. 什么是prototype?
  2. 什么是闭包?
    • 看一下这段代码,并解释一下为什么按Button1时没有alert出“This is button: 1”,如何修改:
  3. 了解并学习一个JS框架
    • jQuery
    • ExtJS
    • Dojo
    • AngularJS
  4. 写一个Greasemonkey插件
  5. 用node.js写个程序

相关资料

[1]. http://www.ecmascript.org/
[2]. http://jsfiddle.net/
[3]. http://jsbin.com/
[4]. http://runjs.cn/
[5]. http://userscripts.org/

七、编译原理知识

  1. 用Java实现以下表达式解析并返回结果(语法和Oracle中的select sysdate-1 from dual类似):
  2.  sysdate
     sysdate - 1
     sysdate - 1/24
     sysdate - 1/(12*2)
  3. 实现对一个List通过DSL筛选
  4.   QList<Map<String, Object>> mapList = new QList<Map<String, Object>>;
      mapList.add({"name": "hatter test"});
      mapList.add({"id": -1,"name": "hatter test"});
      mapList.add({"id": 0, "name": "hatter test"});
      mapList.add({"id": 1, "name": "test test"});
      mapList.add({"id": 2, "name": "hatter test"});
      mapList.add({"id": 3, "name": "test hatter"});
      mapList.query("id is not null and id > 0 and name like '%hatter%'");
    
    要求返回列表中匹配的对象,即最后两个对象;
  5. 用Java实现以下程序(语法和变量作用域处理都和JavaScript类似):
  6. 代码:
    var a = 1;
    var b = 2;
    var c = function() {
      var a = 3;
      println(a);
      println(b);
    };
    c();
    println(a);
    println(b);
    
    输出:
    3
    2
    1
    2

相关资料

[1]. http://en.wikipedia.org/wiki/Abstract_syntax_tree
[2]. https://javacc.java.net/
[3]. http://www.antlr.org/

八、数据库知识

  1. 关系型数据库
    • MySQL
      • 如何看执行计划?
      • 如何搭建MySQL主备?
      • binlog是什么?
    • Derby, H2, PostgreSQL (任选一个)
    • SQLite
  2. 图数据库
    • neo4j
  3. 宽表数据库
    • Cassandra
    • HBase

相关资料

[1]. http://db-engines.com/en/ranking

九、其他知识

  1. 学习使用git
  2. 学习使用gradle
  3. 学习一个小语种语言
    • Groovy
    • Scala
    • LISP, Common LISP, Schema, Clojure
    • R
    • Julia
    • Lua
    • Ruby
    • ...
  4. 尝试了解编码的本质
    • 了解以下概念
      • ASCII, ISO-8859-1
      • GB2312, GBK, GB18030
      • Unicode, UTF-8
    • 不使用 String.getBytes() 等其他工具类/函数完成下面功能
    •     public static void main(String[] args) throws IOException {
              String str = "Hello, 我们是中国人。";
              byte[] utf8Bytes = toUTF8Bytes(str);
              FileOutputStream fos = new FileOutputStream("f.txt");
              fos.write(utf8Bytes);
              fos.close();
          }
      
          public static byte[] toUTF8Bytes(String str) {
              return null; // TODO
          }
    • 想一下上面的程序能不能写一个转GBK的?
    • 写个程序自动判断一个文件是哪种编码
  5. 尝试了解时间的本质

相关资料

[1]. http://git-scm.com/
[2]. http://en.wikipedia.org/wiki/UTF-8
[3]. http://www.iana.org/time-zones

十、综合应用

  1. 参考node.js用Java实现一个 :)

相关资料

[1]. 以上大部分相关资料



【别人学什么】

前端工程师学什么? https://github.com/JacksonTian/fks
@章炎-友盟 http://dirlt.com/
七天学会NodeJS http://nqdeng.github.io/7-days-nodejs/
算法面试大全 http://blog.csdn.net/v_july_v/article/details/6543438

【推荐阅读】

大型网站技术架构 http://book.douban.com/subject/25723064/
高性能MySQL http://book.douban.com/subject/23008813/
七周七语言 http://book.douban.com/subject/10555435/
JavaScript权威指南 http://book.douban.com/subject/10549733/
深度探索C++对象模型 http://book.douban.com/subject/1091086/
支撑处理器的技术 http://book.douban.com/subject/20271450/
深入Java虚拟机(原书第2版) http://book.douban.com/subject/1138768/
深入理解Java虚拟机 http://book.douban.com/subject/6522893/
代码大全(第2版) http://book.douban.com/subject/1477390/
重构 http://book.douban.com/subject/1229923/
Effective Java 中文版 http://book.douban.com/subject/1103015/