Java工程师成神之路

一、基础篇

1.1 JVM

 

1.1.1. Java内存模型,Java内存管理,Java堆和栈,垃圾回收

http://www.jcp.org/en/jsr/detail?id=133

http://ifeve.com/jmm-faq/

 

1.1.2. 了解JVM各种参数及调优

 

1.1.3. 学习使用Java工具

jmap, jconsole, jinfo, jhat, javap, …

http://kenai.com/projects/btrace

http://www.crashub.org/

https://github.com/taobao/TProfiler

https://github.com/CSUG/HouseMD

http://wiki.cyclopsgroup.org/jmxterm

https://github.com/jlusdy/TBJMap

 

1.1.4. 学习Java诊断工具

http://www.eclipse.org/mat/

http://visualvm.java.net/oqlhelp.html

 

1.1.5. 自己编写各种outofmemorystackoverflow程序

  • 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://www.cs.umd.edu/~pugh/java/memoryModel/

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. 学会使用ListMapStackQueueSet

上述数据结构的遍历 上述数据结构的使用场景 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设计模式 文件编码,字符集

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 Agentpremain函数

java.lang.instrument

1.2.19. 单元测试

Junit,http://junit.org/

Jmockit,https://code.google.com/p/jmockit/

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/Service_provider_interface

1.2.23. 参考资料

JDK src.zip 源代码

http://openjdk.java.net/

http://commons.apache.org/

https://code.google.com/p/guava-libraries/

http://netty.io/

http://stackoverflow.com/questions/2954372/difference-between-spi-and-api

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的作用是什么,synchronizedlock

1.3.5. sleepwait

1.3.6. waitnotify

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/Volatile_variable

http://preshing.com/20130702/the-happens-before-relation/

 

1.3.10. 以下代码是不是线程安全?为什么?如果为count加上volatile修饰是否能够做到线程安全?你觉得该怎么做是线程安全的?

1
2
3
4
5
6
7
8
9
10
11
publicclassSample {
 
  privatestaticintcount =0;
 
  publicstaticvoidincrement() {
 
    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
 
publicclassSample {
 
  privatestaticintcount =0;
 
  synchronizedpublicstaticvoidincrement() {
 
    count++;
 
  }
 
}
 
// 代码2
 
publicclassSample {
 
  privatestaticAtomicInteger count =newAtomicInteger(0);
 
  publicstaticvoidincrement() {
 
    count.getAndIncrement();
 
  }
 
}

 

1.3.12. 参考资料

http://book.douban.com/subject/10484692/

http://www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html

 

二、 进阶篇

2.1. Java底层知识

千亿网站是多少(www.draway.com)是一家专业的信息技术服务提供商。千亿网站是多少始终秉承“追求千亿网站是多少越,大有作为”的理念,专注于为客户提供专业的信息技术服务,为职员提供优越的工作条件,为社会提供力所能及的贡献!

公司创始人拥有清千亿网站是多少学工商管理硕士学位,曾经留学美国,后回国创业。公司核心团队拥有丰富的互联网、移动互联网及智能设备研发经验,技术能力涵盖手机端、服务端、大数据、云计算、物联网、车联网、虚拟现实VR/AR等。

公司成立于2012年,目前技术团队拥有软硬件开发、测试工程师50余人,核心管理团队拥有近10年的软件技术服务经验。公司是阿里巴巴、小米科技、阳光保险、天宇手机、CNTV等多家知名客户的签约技术服务供应商,并获得高新企业和“双软”资格认证。

梦想是要有的,万一实现了呢?可是,光有梦想是不行的,更要有行动!如果你对人生充满梦想,对自己的能力充满信心,而且愿意脚踏实地、不辞辛劳地为自己的梦想付出努力!那么欢迎你来千亿网站是多少试试!

简历请发送:hr@draway.com

电话:010-62974030

邮箱:contact@draway.com

地址:北京市海淀区上地科实大厦D座8层

免费获取报价

姓名

联系方式

产品介绍

注:提交后,千亿网站是多少方客户经理会与您电话联系,并提供初步报价
提交成功

提交成功,千亿网站是多少将尽快与您联系!