[Java工程师成神之路](http://www.importnew.com/17389.html)
[TOC]
原文出处: [hollischuang(@Hollis_Chuang)](http://www.hollischuang.com/archives/489)
**一、基础篇**
**1.1 JVM**
**1.1.1\. Java****内存模型,****Java****内存管理,****Java****堆和栈,垃圾回收**
[http://www.jcp.org/en/jsr/detail?id=133](http://www.jcp.org/en/jsr/detail?id=133)
[http://ifeve.com/jmm-faq/](http://ifeve.com/jmm-faq/)
**1.1.2. ****了解****JVM****各种参数及调优**
**1.1.3. ****学习使用****Java****工具**
[jps](http://www.hollischuang.com/archives/105), [jstack](http://www.hollischuang.com/archives/110), [jmap](http://www.hollischuang.com/archives/303), jconsole, jinfo, jhat, javap, …
[http://kenai.com/projects/btrace](http://kenai.com/projects/btrace)
[http://www.crashub.org/](http://www.crashub.org/)
[https://github.com/taobao/TProfiler](https://github.com/taobao/TProfiler)
[https://github.com/CSUG/HouseMD](https://github.com/CSUG/HouseMD)
[http://wiki.cyclopsgroup.org/jmxterm](https://github.com/CSUG/HouseMD)
[https://github.com/jlusdy/TBJMap](https://github.com/jlusdy/TBJMap)
**1.1.4. ****学习****Java****诊断工具**
[http://www.eclipse.org/mat/](http://www.eclipse.org/mat/)
[http://visualvm.java.net/oqlhelp.html](http://visualvm.java.net/oqlhelp.html)
**1.1.5. ****自己编写各种****outofmemory****,****stackoverflow****程序**
* HeapOutOfMemory
* Young OutOfMemory
* MethodArea OutOfMemory
* ConstantPool OutOfMemory
* DirectMemory OutOfMemory
* Stack OutOfMemory Stack OverFlow
**1.1.6. ****使用工具尝试解决以下问题,并写下总结**
当一个Java程序响应很慢时如何查找问题 当一个Java程序频繁FullGC时如何解决问题,如何查看垃圾回收日志 当一个Java应用发生OutOfMemory时该如何解决,年轻代、年老代、永久代解决办法不同,导致原因也不同
**1.1.7. ****参考资料**
[http://docs.oracle.com/javase/specs/jvms/se7/html/](http://docs.oracle.com/javase/specs/jvms/se7/html/)
[http://www.cs.umd.edu/~pugh/java/memoryModel/](http://www.cs.umd.edu/~pugh/java/memoryModel/)
[http://gee.cs.oswego.edu/dl/jmm/cookbook.html](http://gee.cs.oswego.edu/dl/jmm/cookbook.html)
**1.2\. Java****基础知识**
**1.2.1. ****阅读源代码**
java.lang.String java.lang.Integer
Java.lang.Long
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
**1.2.2. ****熟悉****Java****中各种变量类型**
**1.2.3. ****熟悉****Java String****的使用,熟悉****String****的各种函数**
**1.2.4. ****熟悉****Java****中各种关键字**
**1.2.5. ****学会使用****List****,****Map****,****Stack****,****Queue****,****Set**
上述数据结构的遍历 上述数据结构的使用场景 Java实现对Array/List排序java.uti.Arrays.sort() java.util.Collections.sort() Java实现对List去重 Java实现对List去重,并且需要保留数据原始的出现顺序 Java实现最近最少使用cache,用LinkedHashMap
**1.2.6\. Java IO&Java NIO****,并学会使用**
java.io.* java.nio.* nio和reactor[设计模式](http://www.amazon.cn/gp/product/B001130JN8/ref=as_li_qf_sp_asin_il_tl?ie=UTF8&tag=importnew-23&linkCode=as2&camp=536&creative=3200&creativeASIN=B001130JN8 "设计模式:可复用面向对象软件的基础") 文件编码,字符集
**1.2.7\. Java****反射与****javassist**
反射与工厂模式 java.lang.reflect.*
**1.2.8\. Java****序列化**
java.io. Serializable 什么是序列化,为什么序列化 序列化与单例模式 google序列化protobuf
**1.2.9. ****虚引用,弱引用,软引用**
java.lang.ref.* 实验这些引用的回收
**1.2.10. ****熟悉****Java****系统属性**
java.util.Properties
**1.2.11. ****熟悉****Annotation****用法**
java.lang.annotation.*
**1.2.12\. JMS**
javax.jms.*
**1.2.13\. JMX**
java.lang.management.* javax.management.*
**1.2.14. ****泛型和继承,泛型和擦除**
**1.2.15. ****自动拆箱装箱与字节码**
**1.2.16. ****实现****Callback**
**1.2.17\. java.lang.Void****类使用**
**1.2.18\. Java Agent****,****premain****函数**
java.lang.instrument
**1.2.19. ****单元测试**
Junit,[http://junit.org/](http://junit.org/)
Jmockit,[https://code.google.com/p/jmockit/](https://code.google.com/p/jmockit/)
djUnit,[http://works.dgic.co.jp/djunit/](http://works.dgic.co.jp/djunit/)
**1.2.20\. Java****实现通过正则表达式提取一段文本中的电子邮件,并将****@****替换为****#****输出**
java.lang.util.regex.*
**1.2.21. ****学习使用常用的****Java****工具库**
commons.lang, commons.*… guava-libraries netty
**1.2.22. ****什么是****API&SPI**
[http://en.wikipedia.org/wiki/Application_programming_interface](http://en.wikipedia.org/wiki/Application_programming_interface)
[http://en.wikipedia.org/wiki/Service_provider_interface](http://en.wikipedia.org/wiki/Application_programming_interface)
**1.2.23. ****参考资料**
JDK src.zip 源代码
[http://openjdk.java.net/](http://openjdk.java.net/)
[http://commons.apache.org/](http://commons.apache.org/)
[https://code.google.com/p/guava-libraries/](https://code.google.com/p/guava-libraries/)
[http://netty.io/](http://netty.io/)
[http://stackoverflow.com/questions/2954372/difference-between-spi-and-api](http://stackoverflow.com/questions/2954372/difference-between-spi-and-api)
[http://stackoverflow.com/questions/11404230/how-to-implement-the-api-spi-pattern-in-java](http://stackoverflow.com/questions/11404230/how-to-implement-the-api-spi-pattern-in-java)
**1.3\. Java****并发编程**
**1.3.1. ****阅读源代码,并学会使用**
java.lang.Thread
java.lang.Runnable
java.util.concurrent.Callable java.util.concurrent.locks.ReentrantLockjava.util.concurrent.locks.ReentrantReadWriteLockjava.util.concurrent.atomic.Atomic* java.util.concurrent.Semaphorejava.util.concurrent.CountDownLatch java.util.concurrent.CyclicBarrierjava.util.concurrent.ConcurrentHashMap java.util.concurrent.Executors
**1.3.2. ****学习使用线程池,自己设计线程池需要注意什么**
**1.3.3. ****锁**
什么是锁,锁的种类有哪些,每种锁有什么特点,适用场景是什么 在并发编程中锁的意义是什么
**1.3.4\. synchronized****的作用是什么,****synchronized****和****lock**
**1.3.5\. sleep****和****wait**
**1.3.6\. wait****和****notify**
**1.3.7. ****写一个死锁的程序**
**1.3.8. ****什么是守护线程,守护线程和非守护线程的区别以及用法**
**1.3.9\. volatile****关键字的理解**
C++ volatile关键字和Java volatile关键字 happens-before语义 编译器指令重排和CPU指令重排
[http://en.wikipedia.org/wiki/Memory_ordering](http://en.wikipedia.org/wiki/Memory_ordering)
[http://en.wikipedia.org/wiki/Volatile_variable](http://en.wikipedia.org/wiki/Volatile_variable)
[http://preshing.com/20130702/the-happens-before-relation/](http://preshing.com/20130702/the-happens-before-relation/)
**1.3.10. ****以下代码是不是线程安全?为什么?如果为****count****加上****volatile****修饰是否能够做到线程安全?你觉得该怎么做是线程安全的?**
|
1
2
3
4
5
6
7
8
9
10
11
|
`public` `class` `Sample {`
`private` `static` `int` `count =` `0``;`
`public` `static` `void` `increment() {`
`count++;`
`}`
`}`
|
**1.3.11. ****解释一下下面两段代码的差别**
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
`// 代码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.3.12. ****参考资料**
[http://book.douban.com/subject/10484692/](http://book.douban.com/subject/10484692/)
[http://www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html](http://www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html)
**二、****进阶篇**
**2.1\. Java****底层知识**
**2.1.1. ****学习了解字节码、****class****文件格式**
[http://en.wikipedia.org/wiki/Java_class_file](http://en.wikipedia.org/wiki/Java_class_file)
[http://en.wikipedia.org/wiki/Java_bytecode](http://en.wikipedia.org/wiki/Java_bytecode)
[http://en.wikipedia.org/wiki/Java_bytecode_instruction_listings](http://en.wikipedia.org/wiki/Java_bytecode_instruction_listings)
[http://www.csg.ci.i.u-tokyo.ac.jp/~chiba/javassist/](http://www.csg.ci.i.u-tokyo.ac.jp/~chiba/javassist/)
[http://asm.ow2.org/](http://asm.ow2.org/)
**2.1.2. ****写一个程序要求实现****javap****的功能(手工完成,不借助****ASM****等工具)**
如Java源代码:
|
1
2
3
4
5
6
7
8
9
10
11
|
`public` `static` `void` `main(String[] args) {`
`int` `i =` `0``;`
`i +=` `1``;`
`i *=` `1``;`
`System.out.println(i);`
`}`
|
编译后读取class文件输出以下代码:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
`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`
|
**2.1.3\. CPU****缓存,****L1****,****L2****,****L3****和伪共享**
[http://duartes.org/gustavo/blog/post/intel-cpu-caches/](http://duartes.org/gustavo/blog/post/intel-cpu-caches/)
[http://mechanical-sympathy.blogspot.com/2011/07/false-sharing.html](http://mechanical-sympathy.blogspot.com/2011/07/false-sharing.html)
**2.1.4. ****什么是尾递归**
**2.1.5. ****熟悉位运算**
用位运算实现加、减、乘、除、取余
**2.1.6. ****参考资料**
[http://book.douban.com/subject/1138768/](http://book.douban.com/subject/1138768/)
[http://book.douban.com/subject/6522893/](http://book.douban.com/subject/6522893/)
[http://en.wikipedia.org/wiki/Java_class_file](http://en.wikipedia.org/wiki/Java_class_file)
[http://en.wikipedia.org/wiki/Java_bytecode](http://en.wikipedia.org/wiki/Java_bytecode)
[http://en.wikipedia.org/wiki/Java_bytecode_instruction_listings](http://en.wikipedia.org/wiki/Java_bytecode_instruction_listings)
**2.2. ****设计模式**
**2.2.1. ****实现****AOP**
CGLIB和InvocationHandler的区别 [http://cglib.sourceforge.net/](http://cglib.sourceforge.net/)
动态代理模式 Javassist实现AOP [http://www.csg.ci.i.u-tokyo.ac.jp/~chiba/javassist/](http://www.csg.ci.i.u-tokyo.ac.jp/~chiba/javassist/)
ASM实现AOP [http://asm.ow2.org/](http://asm.ow2.org/)
**2.2.2. ****使用模板方法设计模式和策略设计模式实现****IOC**
**2.2.3. ****不用****synchronized****和****lock****,实现线程安全的单例模式**
**2.2.4\. nio****和****reactor****设计模式**
**2.2.5. ****参考资料**
[http://asm.ow2.org/](http://asm.ow2.org/)
[http://cglib.sourceforge.net/](http://cglib.sourceforge.net/)
[http://www.javassist.org/](http://www.javassist.org/)
**2.3. ****网络编程知识**
**2.3.1\. Java RMI****,****Socket****,****HttpClient**
**2.3.2. ****用****Java****写一个简单的静态文件的****HTTP****服务器**
实现客户端缓存功能,支持返回304 实现可并发下载一个文件 使用线程池处理客户端请求 使用nio处理客户端请求 支持简单的rewrite规则 上述功能在实现的时候需要满足“开闭原则”
**2.3.3. ****了解****nginx****和****apache****服务器的特性并搭建一个对应的服务器**
[http://nginx.org/](http://nginx.org/)
[http://httpd.apache.org/](http://httpd.apache.org/)
**2.3.4. ****用****Java****实现****FTP****、****SMTP****协议**
**2.3.5. ****什么是****CDN****?如果实现?****DNS****起到什么作用?**
搭建一个DNS服务器 搭建一个 Squid 或 Apache Traffic Server 服务器 [http://www.squid-cache.org/](http://www.squid-cache.org/)
[http://trafficserver.apache.org/](http://trafficserver.apache.org/)
[http://en.wikipedia.org/wiki/Domain_Name_System](http://en.wikipedia.org/wiki/Domain_Name_System)
**2.3.6. ****参考资料**
[http://www.ietf.org/rfc/rfc2616.txt](http://www.ietf.org/rfc/rfc2616.txt)
[http://tools.ietf.org/rfc/rfc5321.txt](http://tools.ietf.org/rfc/rfc5321.txt)
[http://en.wikipedia.org/wiki/Open/closed_principle](http://en.wikipedia.org/wiki/Open/closed_principle)
**2.4. ****框架知识**
spring,spring mvc,阅读主要源码 ibatis,阅读主要源码 用spring和ibatis搭建java server
**2.5. ****应用服务器知识**
熟悉使用jboss,[https://www.jboss.org/overview/ ](https://www.jboss.org/overview/)
熟悉使用tomcat,[http://tomcat.apache.org/ ](http://tomcat.apache.org/)
熟悉使用jetty,[http://www.eclipse.org/jetty/](http://www.eclipse.org/jetty/)
**三、****高级篇**
**3.1. ****[编译原理](http://www.amazon.cn/gp/product/B001NGO85I/ref=as_li_qf_sp_asin_il_tl?ie=UTF8&tag=importnew-23&linkCode=as2&camp=536&creative=3200&creativeASIN=B001NGO85I "编译原理")知识**
**3.1.1. ****用****Java****实现以下表达式解析并返回结果(语法和****Oracle****中的****select sysdate-1 from dual****类似)**
|
1
2
3
4
5
6
7
|
`sysdate`
`sysdate -` `1`
`sysdate -` `1``/``24`
`sysdate -` `1``/(``12``*``2``)`
|
**3.1.2. ****实现对一个****List****通过****DSL****筛选**
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
`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%'"``);`
|
要求返回列表中匹配的对象,即最后两个对象;
**3.1.3. ****用****Java****实现以下程序(语法和变量作用域处理都和****JavaScript****类似):**
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
`代码:`
`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`
|
**3.1.4. ****参考资料**
http://en.wikipedia.org/wiki/Abstract_syntax_tree https://javacc.java.net/ http://www.antlr.org/
**3.2. ****操作系统知识**
Ubuntu Centos 使用linux,熟悉shell脚本
**3.3. ****数据存储知识**
**3.3.1. ****关系型数据库**
MySQL 如何看执行计划 如何搭建MySQL主备 binlog是什么 Derby,H2,PostgreSQL SQLite
**3.3.2. [NoSQL](http://blog.jobbole.com/1344/ "8种Nosql数据库系统对比")**
Cache Redis Memcached Leveldb Bigtable HBase Cassandra Mongodb 图数据库 neo4j
**3.3.3. ****参考资料**
[http://db-engines.com/en/ranking](http://db-engines.com/en/ranking)
[http://redis.io/](http://redis.io/)
[https://code.google.com/p/leveldb/](https://code.google.com/p/leveldb/)
[http://hbase.apache.org/](http://hbase.apache.org/)
[http://cassandra.apache.org/](http://cassandra.apache.org/)
[http://www.mongodb.org/](http://www.mongodb.org/)
[http://www.neo4j.org/](http://www.mongodb.org/)
**3.4. ****大数据知识**
**3.4.1\. Zookeeper****,在****linux****上部署****zk**
**3.4.2\. Solr****,****Lucene****,****ElasticSearch**
在linux上部署solr,solrcloud,,新增、删除、查询索引
**3.4.3\. Storm****,流式计算,了解****Spark****,****S4**
在linux上部署storm,用zookeeper做协调,运行storm hello world,local和remote模式运行调试storm topology。
**3.4.4\. Hadoop****,离线计算**
Hdfs:部署NameNode,SecondaryNameNode,DataNode,上传文件、打开文件、更改文件、删除文件
MapReduce:部署JobTracker,TaskTracker,编写mr job
Hive:部署hive,书写hive sql,得到结果
Presto:类hive,不过比hive快,非常值得学习
**3.4.5. ****分布式日志收集****flume****,****kafka****,****logstash**
**3.4.6. ****数据挖掘,****mahout**
**3.4.7. ****参考资料**
[http://zookeeper.apache.org/](http://zookeeper.apache.org/)
[https://lucene.apache.org/solr/](https://lucene.apache.org/solr/)
[https://github.com/nathanmarz/storm/wiki](https://github.com/nathanmarz/storm/wiki)
[http://hadoop.apache.org/](http://hadoop.apache.org/)
[http://prestodb.io/](http://prestodb.io/)
[http://flume.apache.org/](http://flume.apache.org/)
[http://logstash.net/](http://logstash.net/)
[http://kafka.apache.org/](http://kafka.apache.org/)
[http://mahout.apache.org/](http://mahout.apache.org/)
**3.5. ****网络安全知识**
**3.5.1. ****什么是****DES****、****AES**
**3.5.2. ****什么是****RSA****、****DSA**
**3.5.3. ****什么是****MD5****,****SHA1**
**3.5.4. ****什么是****SSL****、****TLS****,为什么****HTTPS****相对比较安全**
**3.5.5. ****什么是中间人攻击、如果避免中间人攻击**
**3.5.6. ****什么是****DOS****、****DDOS****、****CC****攻击**
**3.5.7. ****什么是****CSRF****攻击**
**3.5.8. ****什么是****CSS****攻击**
**3.5.9. ****什么是****SQL****注入攻击**
**3.5.10. ****什么是****Hash****碰撞拒绝服务攻击**
**3.5.11. ****了解并学习下面几种增强安全的技术**
http://www.openauthentication.org/
HOTP http://www.ietf.org/rfc/rfc4226.txt
TOTP http://tools.ietf.org/rfc/rfc6238.txt
OCRA http://tools.ietf.org/rfc/rfc6287.txt
http://en.wikipedia.org/wiki/Salt_(cryptography)
**3.5.12. ****用****openssl****签一个证书部署到****apache****或****nginx**
**3.5.13. ****参考资料**
[http://en.wikipedia.org/wiki/Cryptographic_hash_function](http://en.wikipedia.org/wiki/Cryptographic_hash_function)
[http://en.wikipedia.org/wiki/Block_cipher](http://en.wikipedia.org/wiki/Block_cipher)
[http://en.wikipedia.org/wiki/Public-key_cryptography](http://en.wikipedia.org/wiki/Public-key_cryptography)
[http://en.wikipedia.org/wiki/Transport_Layer_Security](http://en.wikipedia.org/wiki/Transport_Layer_Security)
[http://www.openssl.org/](http://www.openssl.org/)
[https://code.google.com/p/google-authenticator/](https://code.google.com/p/google-authenticator/)
**四、****扩展篇**
**4.1. ****相关知识**
**4.1.1. ****云计算,分布式,高可用,可扩展**
**4.1.2. ****虚拟化**
[https://linuxcontainers.org/](https://linuxcontainers.org/)
[http://www.linux-kvm.org/page/Main_Page](http://www.linux-kvm.org/page/Main_Page)
[http://www.xenproject.org/](http://www.xenproject.org/)
[https://www.docker.io/](https://www.docker.io/)
**4.1.3. ****监控**
[http://www.nagios.org/](http://www.nagios.org/)
[http://ganglia.info/](http://ganglia.info/)
**4.1.4. ****负载均衡**
[http://www.linuxvirtualserver.org/](http://www.linuxvirtualserver.org/)
**4.1.5. ****学习使用****git**
[https://github.com/](https://github.com/)
[https://git.oschina.net/](https://git.oschina.net/)
**4.1.6. ****学习使用****maven**
[http://maven.apache.org/](http://maven.apache.org/)
**4.1.7. ****学习使用****gradle**
[http://www.gradle.org/](http://www.gradle.org/)
**4.1.8. ****学习一个小语种语言**
Groovy Scala LISP, Common LISP, Schema, Clojure R Julia Lua Ruby
**4.1.9. ****尝试了解编码的本质**
了解以下概念 ASCII, ISO-8859-1 GB2312, GBK, GB18030 Unicode, UTF-8 不使用 String.getBytes() 等其他工具类/函数完成下面功能
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
`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的? 写个程序自动判断一个文件是哪种编码
**4.1.10. ****尝试了解时间的本质**
* 时区 & 冬令时、夏令时 [http://en.wikipedia.org/wiki/Time_zone ](http://en.wikipedia.org/wiki/Time_zone)
* [ftp://ftp.iana.org/tz/data/asia ](ftp://ftp.iana.org/tz/data/asia)
* [http://zh.wikipedia.org/wiki/%E4%B8%AD%E5%9C%8B%E6%99%82%E5%8D%80](http://zh.wikipedia.org/wiki/%E4%B8%AD%E5%9C%8B%E6%99%82%E5%8D%80)
* 闰年
* [http://en.wikipedia.org/wiki/Leap_year](http://en.wikipedia.org/wiki/Leap_year)
* 闰秒 [ftp://ftp.iana.org/tz/data/leapseconds](ftp://ftp.iana.org/tz/data/leapseconds)
* System.currentTimeMillis() 返回的时间是什么
**4.1.11. ****参考资料**
* [http://git-scm.com/](http://git-scm.com/)
* [http://en.wikipedia.org/wiki/UTF-8](http://en.wikipedia.org/wiki/UTF-8)
* [http://www.iana.org/time-zones](http://en.wikipedia.org/wiki/UTF-8)
**4.2. ****扩展学习**
**4.2.1\. JavaScript****知识**
**4.2.1.1. ****什么是****prototype**
修改代码,使程序输出“1 3 5”: [http://jsfiddle.net/Ts7Fk/](http://jsfiddle.net/Ts7Fk/)
**4.2.1.2. ****什么是闭包**
看一下这段代码,并解释一下为什么按Button1时没有alert出“This is button: 1”,如何修改: [http://jsfiddle.net/FDPj3/1/](http://jsfiddle.net/FDPj3/1/)
**4.2.1.3. ****了解并学习一个****JS****框架**
jQuery ExtJS ArgularJS
**4.2.1.4. ****写一个****Greasemonkey****插件**
http://en.wikipedia.org/wiki/Greasemonkey
**4.2.1.5. ****学习****node.js**
[http://nodejs.org/](http://jsfiddle.net/FDPj3/1/)
**4.2.2. ****学习****html5**
ArgularJS,[https://docs.angularjs.org/api](https://docs.angularjs.org/api)
**4.2.3. ****参考资料**
* [http://www.ecmascript.org/](http://www.ecmascript.org/)
* [http://jsfiddle.net/](http://jsfiddle.net/)
* [http://jsbin.com/](http://jsbin.com/)
* [http://runjs.cn/](http://runjs.cn/)
* [http://userscripts.org/](http://runjs.cn/)
**五、****推荐书籍**
《深入Java虚拟机》
《深入理解Java虚拟机》
《[Effective Java](http://www.amazon.com/gp/product/B000WJOUPA/ref=as_li_qf_sp_asin_il_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=B000WJOUPA&linkCode=as2&tag=job0ae-20 "Effective Java")》
《七周七语言》
《七周七数据》
《Hadoop技术内幕》
《Hbase In Action》
《Mahout In Action》
《这就是搜索引擎》
《Solr In Action》
《深入分析Java Web技术内幕》
《大型网站技术架构》
《高性能MySQL》
《[算法导论](http://www.amazon.cn/gp/product/B0011BVTRK/ref=as_li_qf_sp_asin_il_tl?ie=UTF8&tag=importnew-23&linkCode=as2&camp=536&creative=3200&creativeASIN=B0011BVTRK "算法导论")》
《[计算机程序设计艺术](http://www.amazon.cn/gp/product/B00478TO44/ref=as_li_qf_sp_asin_il_tl?ie=UTF8&tag=importnew-23&linkCode=as2&camp=536&creative=3200&creativeASIN=B00478TO44 "计算机程序设计艺术")》
《[代码大全](http://www.amazon.cn/gp/product/B0011BYWL0/ref=as_li_qf_sp_asin_il_tl?ie=UTF8&tag=importnew-23&linkCode=as2&camp=536&creative=3200&creativeASIN=B0011BYWL0 "代码大全")》
《[JavaScript权威指南](http://www.amazon.cn/mn/detailApp/ref=as_li_qf_sp_asin_tl?_encoding=UTF8&tag=importnew-23&linkCode=as2&asin=B0012UMVYA&camp=536&creative=3200&creativeASIN=B0012UMVYA "JavaScript权威指南")》
- JVM
- 深入理解Java内存模型
- 深入理解Java内存模型(一)——基础
- 深入理解Java内存模型(二)——重排序
- 深入理解Java内存模型(三)——顺序一致性
- 深入理解Java内存模型(四)——volatile
- 深入理解Java内存模型(五)——锁
- 深入理解Java内存模型(六)——final
- 深入理解Java内存模型(七)——总结
- Java内存模型
- Java内存模型2
- 堆内内存还是堆外内存?
- JVM内存配置详解
- Java内存分配全面浅析
- 深入Java核心 Java内存分配原理精讲
- jvm常量池
- JVM调优总结
- JVM调优总结(一)-- 一些概念
- JVM调优总结(二)-一些概念
- VM调优总结(三)-基本垃圾回收算法
- JVM调优总结(四)-垃圾回收面临的问题
- JVM调优总结(五)-分代垃圾回收详述1
- JVM调优总结(六)-分代垃圾回收详述2
- JVM调优总结(七)-典型配置举例1
- JVM调优总结(八)-典型配置举例2
- JVM调优总结(九)-新一代的垃圾回收算法
- JVM调优总结(十)-调优方法
- 基础
- Java 征途:行者的地图
- Java程序员应该知道的10个面向对象理论
- Java泛型总结
- 序列化与反序列化
- 通过反编译深入理解Java String及intern
- android 加固防止反编译-重新打包
- volatile
- 正确使用 Volatile 变量
- 异常
- 深入理解java异常处理机制
- Java异常处理的10个最佳实践
- Java异常处理手册和最佳实践
- Java提高篇——对象克隆(复制)
- Java中如何克隆集合——ArrayList和HashSet深拷贝
- Java中hashCode的作用
- Java提高篇之hashCode
- 常见正则表达式
- 类
- 理解java类加载器以及ClassLoader类
- 深入探讨 Java 类加载器
- 类加载器的工作原理
- java反射
- 集合
- HashMap的工作原理
- ConcurrentHashMap之实现细节
- java.util.concurrent 之ConcurrentHashMap 源码分析
- HashMap的实现原理和底层数据结构
- 线程
- 关于Java并发编程的总结和思考
- 40个Java多线程问题总结
- Java中的多线程你只要看这一篇就够了
- Java多线程干货系列(1):Java多线程基础
- Java非阻塞算法简介
- Java并发的四种风味:Thread、Executor、ForkJoin和Actor
- Java中不同的并发实现的性能比较
- JAVA CAS原理深度分析
- 多个线程之间共享数据的方式
- Java并发编程
- Java并发编程(1):可重入内置锁
- Java并发编程(2):线程中断(含代码)
- Java并发编程(3):线程挂起、恢复与终止的正确方法(含代码)
- Java并发编程(4):守护线程与线程阻塞的四种情况
- Java并发编程(5):volatile变量修饰符—意料之外的问题(含代码)
- Java并发编程(6):Runnable和Thread实现多线程的区别(含代码)
- Java并发编程(7):使用synchronized获取互斥锁的几点说明
- Java并发编程(8):多线程环境中安全使用集合API(含代码)
- Java并发编程(9):死锁(含代码)
- Java并发编程(10):使用wait/notify/notifyAll实现线程间通信的几点重要说明
- java并发编程-II
- Java多线程基础:进程和线程之由来
- Java并发编程:如何创建线程?
- Java并发编程:Thread类的使用
- Java并发编程:synchronized
- Java并发编程:Lock
- Java并发编程:volatile关键字解析
- Java并发编程:深入剖析ThreadLocal
- Java并发编程:CountDownLatch、CyclicBarrier和Semaphore
- Java并发编程:线程间协作的两种方式:wait、notify、notifyAll和Condition
- Synchronized与Lock
- JVM底层又是如何实现synchronized的
- Java synchronized详解
- synchronized 与 Lock 的那点事
- 深入研究 Java Synchronize 和 Lock 的区别与用法
- JAVA编程中的锁机制详解
- Java中的锁
- TreadLocal
- 深入JDK源码之ThreadLocal类
- 聊一聊ThreadLocal
- ThreadLocal
- ThreadLocal的内存泄露
- 多线程设计模式
- Java多线程编程中Future模式的详解
- 原子操作(CAS)
- [译]Java中Wait、Sleep和Yield方法的区别
- 线程池
- 如何合理地估算线程池大小?
- JAVA线程池中队列与池大小的关系
- Java四种线程池的使用
- 深入理解Java之线程池
- java并发编程III
- Java 8并发工具包漫游指南
- 聊聊并发
- 聊聊并发(一)——深入分析Volatile的实现原理
- 聊聊并发(二)——Java SE1.6中的Synchronized
- 文件
- 网络
- index
- 内存文章索引
- 基础文章索引
- 线程文章索引
- 网络文章索引
- IOC
- 设计模式文章索引
- 面试
- Java常量池详解之一道比较蛋疼的面试题
- 近5年133个Java面试问题列表
- Java工程师成神之路
- Java字符串问题Top10
- 设计模式
- Java:单例模式的七种写法
- Java 利用枚举实现单例模式
- 常用jar
- HttpClient和HtmlUnit的比较总结
- IO
- NIO
- NIO入门
- 注解
- Java Annotation认知(包括框架图、详细介绍、示例说明)