java学习的指南
一,基础篇
1.1 JVM
1.1.1 Java
内存模型,
Java
内存管理,
Java
堆栈,
Java
垃圾回收
1.1.2 了解 JVM 各种参数及调优
1.1.3 学习使用 Java 工具, jps 、 jstack 、 jmap 、 jconsole 、 jinfo 、 jhat 、 javap
1.1.4 自己编写各种 OutOfMomory 、 StackOverFlow 程序
HeapOutOfMemory
Young OutOfMomery
MethodArea OutOfMomery
ConstantPool OutOfMomery
DirectMemory OutOfMomery
Stack OutOfMomery
Stack OverFlow
1.1.5 ,使用工具尝试解决以下问题,并写下总结
当一个 Java 程序响应很慢时如何查找问题;
当一个 Java 程序频繁 FullGC 时如何解决问题;
如何查看垃圾回收日志;
当一个 Java 应用发生 OutOfMemory 时该如何解决;
1.2 Java 基础知识
1.2.1 阅读源代码
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.util.Array.sort()
Java.util.Collection.sort()
Java 实现对 List 去重,并且要求保留数据原始的出现顺序
Java 实现最近最少使用 Cache ,用 LinkedHashMap
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 单元测试
1.2.20 Java 实现正则表达式提取一段文本中的电子邮件,并将 @ 替换成 # 输出
java.lang.util.regex.*
1.2.21 学习使用常用的 Java 工具库 commons.lang , commons.*
1.2.22 什么是 API 和 SPI
1.3 Java 并发编程
1.3.1 阅读源代码,并学会使用
java.lang.Thread
java.lang.Runnable
java.util.concurrent.Callable
java.util.concurrent.locks.ReentrantLock
java.util.concurrent.locks.ReentrantReadWriteLock
java.util.concurrent.atomic.Atomic
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 关键字的理解
二,进阶篇
2.1 Java 底层知识
2.1.1 学习了解字节码、 class 文件格式
2.1.2 写一个程序,要求实现 javap 的功能(手工完成,不借助 ASM 等工具)
2.1.3 CPU 缓存 L1 、 L2 、 L3 和 伪共享
2.1.4 什么是尾递归
2.1.5 熟悉位运算 用位运算实现加减乘除取余
2.2 设计模式
2.2.1 实现 AOP
CGLIB 和 InvocationHandler 的区别
动态代理模式, Javassist 实现 AOP
ASM 实现 AOP
2.2.2 使用模板方法设计模式和策略设计模式实现 IOC
2.2.3 不用 synchronizeed 和 lock ,实现线程安全的单例模式
2.2.4 nio 和 reactor 设计模式
2.3 网络编程知识
2.3.1 Java RMI 、 Socket 、 HttpClient
2.3.2 用 Java 写一个简单的静态文件的 HTTP 服务器
2.3.3 了解 nginx 和 Apache 服务器的特性,并搭建一个对应的服务器
2.3.4 用 Java 实现 FTP 、 SMTP 协议
2.3.5 什么是 CDN ,如何实现? DNS 起到什么作用
2.4 框架知识
Spring 、 SpringMVC ,阅读主要源代码,
ibatis 阅读主要源代码
2.5 应用服务器知识 tomcat
三,高级篇
3.1 编译原理知识
3.1.1 用 Java 实现以下表达式解析并返回结果
3.1.2 实现对一个 List 通过 DSL 筛选
QList<Map<String,Object>> mapList =new QList<Map<String,Object>>
mapList.add({"name":"hattertest"});
mapList.add({"id":-1,"name":"hattertest"});
mapList.add({"id":0,"name":"hattertest"});
mapList.add({"id":1,"name":"testtest"});
mapList.add({"id":2,"name":"hattertest"});
mapList.add({"id":3,"name":"testhatter"});
mapList.query("id is not null and id>0and name like '%hatter%'");
要求返回列表中匹配的对象,即最后 2 个对象。
3.2 操作系统知识
使用 linux ,熟悉 shell 脚本
3.3 数据存储知识
3.3.1 关系数据库 MySQL 如何看执行计划,如何搭建; MySQL 主备 binlog 是什么
3.3.2 NoSQL
Redis 、 HBase 、 Bigtable
3.4 大数据知识
3.4.1 Zookeeper ,在 linux 上部署 ZK
3.4.2 Hadoop
3.4.3 分布式日志收集 flume 、 kafka 、 logstash
3.4.4 数据挖掘 mahout