Java学习
Java学习
分类:
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":"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%'");
要求返回列表中匹配的对象,即最后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
一,基础篇
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":"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%'");
要求返回列表中匹配的对象,即最后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