Java工程师成神之路-北京尚学堂.doc
《Java工程师成神之路-北京尚学堂.doc》由会员分享,可在线阅读,更多相关《Java工程师成神之路-北京尚学堂.doc(17页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Java工程师成神之路一、基础篇1.1 JVM1.1.1. Java内存模型,Java内存管理,Java堆和栈,垃圾回收http:/www.jcp.org/en/jsr/detail?id=1331.1.2. 了解JVM各种参数及调优1.1.3. 学习使用Java工具jps, jstack, jmap, jconsole, jinfo, jhat, javap, http:/www.crashub.org/http:/wiki.cyclopsgroup.org/jmxterm1.1.4. 学习Java诊断工具http:/www.eclipse.org/mat/1.1.5. 自己编写各种outo
2、fmemory,stackoverflow程序HeapOutOfMemoryYoung OutOfMemoryMethodArea OutOfMemoryConstantPool OutOfMemoryDirectMemory OutOfMemoryStack OutOfMemoryStack OverFlow1.1.6. 使用工具尝试解决以下问题,并写下总结当一个Java程序响应很慢时如何查找问题当一个Java程序频繁FullGC时如何解决问题,如何查看垃圾回收日志当一个Java应用发生OutOfMemory时该如何解决,年轻代、年老代、永久代解决办法不同,导致原因也不同1.1.7. 参考资
3、料http:/www.cs.umd.edu/pugh/java/memoryModel/http:/gee.cs.oswego.edu/dl/jmm/cookbook.html1.2. Java基础知识1.2.1. 阅读源代码java.lang.Stringjava.lang.Integerjava.lang.Longjava.lang.Enumjava.math.BigDecimaljava.lang.ThreadLocaljava.lang.ClassLoader & .URLClassLoaderjava.util.ArrayList & java.util.LinkedListjava
4、.util.HashMap & java.util.LinkedHashMap & java.util.TreeMapjava.util.HashSet & java.util.LinkedHashSet & java.util.TreeSet1.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.u
5、til.Collections.sort()Java实现对List去重Java实现对List去重,并且需要保留数据原始的出现顺序Java实现最近最少使用cache,用LinkedHashMap1.2.6. Java IO&Java NIO,并学会使用java.io.*java.nio.*nio和reactor设计模式文件编码,字符集1.2.7. Java反射与javassist反射与工厂模式java.lang.reflect.*1.2.8. Java序列化java.io. Serializable什么是序列化,为什么序列化序列化与单例模式google序列化protobuf1.2.9. 虚引用,
6、弱引用,软引用java.lang.ref.*实验这些引用的回收1.2.10. 熟悉Java系统属性java.util.Properties1.2.11. 熟悉Annotation用法java.lang.annotation.*1.2.12. JMSjavax.jms.*1.2.13. JMXjava.lang.management.*javax.management.*1.2.14. 泛型和继承,泛型和擦除1.2.15. 自动拆箱装箱与字节码1.2.16. 实现Callback1.2.17. java.lang.Void类使用1.2.18. Java Agent,premain函数java.l
7、ang.instrument1.2.19. 单元测试Junit,http:/junit.org/Jmockit,djUnit,http:/works.dgic.co.jp/djunit/1.2.20. Java实现通过正则表达式提取一段文本中的电子邮件,并将替换为#输出java.lang.util.regex.*1.2.21. 学习使用常用的Java工具库commons.lang, commons.*guava-librariesnetty1.2.22. 什么是API&SPIhttp:/en.wikipedia.org/wiki/Application_programming_interfac
8、ehttp:/en.wikipedia.org/wiki/Service_provider_interface1.2.23. 参考资料JDK src.zip 源代码http:/commons.apache.org/http:/netty.io/1.3. Java并发编程1.3.1. 阅读源代码,并学会使用java.lang.Threadjava.lang.Runnablejava.util.concurrent.Callablejava.util.concurrent.locks.ReentrantLockjava.util.concurrent.locks.ReentrantReadWrit
9、eLockjava.util.concurrent.atomic.Atomic*java.util.concurrent.Semaphorejava.util.concurrent.CountDownLatchjava.util.concurrent.CyclicBarrierjava.util.concurrent.ConcurrentHashMapjava.util.concurrent.Executors1.3.2. 学习使用线程池,自己设计线程池需要注意什么1.3.3. 锁什么是锁,锁的种类有哪些,每种锁有什么特点,适用场景是什么在并发编程中锁的意义是什么1.3.4. synchron
10、ized的作用是什么,synchronized和lock1.3.5. sleep和wait1.3.6. wait和notify1.3.7. 写一个死锁的程序1.3.8. 什么是守护线程,守护线程和非守护线程的区别以及用法1.3.9. volatile关键字的理解C+ volatile关键字和Java volatile关键字happens-before语义编译器指令重排和CPU指令重排http:/en.wikipedia.org/wiki/Memory_orderinghttp:/en.wikipedia.org/wiki/Volatile_variable1.3.10. 以下代码是不是线程安全
11、?为什么?如果为count加上volatile修饰是否能够做到线程安全?你觉得该怎么做是线程安全的?public class Sample private static int count = 0; public static void increment() count+; 1.3.11. 解释一下下面两段代码的差别/ 代码1public class Sample private static int count = 0; synchronized public static void increment() count+; / 代码2public class Sample private
12、static AtomicInteger count = new AtomicInteger(0); public static void increment() count.getAndIncrement(); 1.3.12. 参考资料二、 进阶篇2.1. Java底层知识2.1.1. 学习了解字节码、class文件格式http:/en.wikipedia.org/wiki/Java_class_filehttp:/en.wikipedia.org/wiki/Java_bytecodehttp:/en.wikipedia.org/wiki/Java_bytecode_instruction_
13、listingshttp:/www.csg.ci.i.u-tokyo.ac.jp/chiba/javassist/http:/asm.ow2.org/2.1.2. 写一个程序要求实现javap的功能(手工完成,不借助ASM等工具)如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, A
14、rgs_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
15、 line 8: 162.1.3. CPU缓存,L1,L2,L3和伪共享http:/duartes.org/gustavo/blog/post/intel-cpu-caches/http:/mechanical-2.1.4. 什么是尾递归2.1.5. 熟悉位运算用位运算实现加、减、乘、除、取余2.1.6. 参考资料http:/en.wikipedia.org/wiki/Java_class_filehttp:/en.wikipedia.org/wiki/Java_bytecodehttp:/en.wikipedia.org/wiki/Java_bytecode_instruction_list
16、ings2.2. 设计模式2.2.1. 实现AOPCGLIB和InvocationHandler的区别动态代理模式Javassist实现AOPhttp:/www.csg.ci.i.u-tokyo.ac.jp/chiba/javassist/ASM实现AOPhttp:/asm.ow2.org/2.2.2. 使用模板方法设计模式和策略设计模式实现IOC2.2.3. 不用synchronized和lock,实现线程安全的单例模式2.2.4. nio和reactor设计模式2.2.5. 参考资料http:/asm.ow2.org/http:/www.javassist.org/2.3. 网络编程知识2
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 工程师 北京 学堂
限制150内