从小白到大神的java架构师成长之路~

  一、基础篇

  1.1 JVM

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

  jcp/en/jsr/detail?id=133ifeve/jmm-faq/

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

  1.1.3. 学习使用Java工具

  jps, jstack, jmap, jconsole, jinfo, jhat, javap, …kenai/projects/btracecrashub/github/taobao/TProfilergithub/CSUG/HouseMDwiki.cyclopsgroup/jmxtermgithub/jlusdy/TBJMap

  1.1.4. 学习Java诊断工具

  eclipse/mat/visualvm.java/oqlhelp.html

  1.1.5. 自己编写各种outofmemory,stackoverflow程序

  HeapOutOfMemoryYoung OutOfMemoryMethodArea OutOfMemoryConstantPool OutOfMemoryDirectMemory OutOfMemoryStack OutOfMemoryStack OverFlow

  1.1.6. 使用工具尝试解决以下问题,并写下总结

  当一个Java程序响应很慢时如何查找问题当一个Java程序频繁FullGC时如何解决问题,如何查看垃圾回收日志当一个Java应用发生OutOfMemory时该如何解决,年轻代、年老代、永久代解决办法不同,导致原因也不同

  1.1.7. 参考资料

  docs.oracle/javase/specs/jvms/se7/html/cs.umd/~pugh/java/memoryModel/gee.cs.oswego/dl/jmm/cookbook.html  1.2. Java基础知识

  1.2.1. 阅读源代码

  java.lang.Stringjava.lang.Integerjava.lang.Longjava.lang.Enumjava.math.BigDecimaljava.lang.ThreadLocaljava.lang.ClassLoader & java.net.URLClassLoaderjava.util.ArrayList & java.utiledListjava.util.HashMap & java.utiledHashMap & java.util.TreeMapjava.util.HashSet & java.utiledHashSet & 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设计模式文件编码,字符集

  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.utilperties

  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,junit/Jmockit,code.google/p/jmockit/djUnit,works.dgic.co.jp/djunit/

  1.2.20. Java实现通过正则表达式提取一段文本中的电子邮件,并将@替换为#输出

  java.lang.util.regex.*

  1.2.21. 学习使用常用的Java工具库

  commons.lang, commons.*…guava-librariesnetty

  1.2.22. 什么是API&SPI

  enpedia/wiki/Application_programming_interfaceenpedia/wiki/Service_provider_interface

  1.2.23. 参考资料

  JDK src.zip 源代码openjdk.java/commons.apache/code.google/p/guava-libraries/netty/stackoverflow/questions/2954372/difference-between-spi-and-apistackoverflow/questions/11404230/how-to-implement-the-api-spi-pattern-in-java

  1.3. Java并发编程

  1.3.1. 阅读源代码,并学会使用

  java.lang.Threadjava.langnablejava.util.concurrent.Callablejava.util.concurrent.locks.ReentrantLockjava.util.concurrent.locks.ReentrantReadWriteLockjava.util.concurrent.atomic.Atomic*java.util.concurrent.Semaphorejava.util.concurrent.CountDownLatchjava.util.concurrent.CyclicBarrierjava.util.concurrent.ConcurrentHashMapjava.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指令重排enpedia/wiki/Memory_orderingenpedia/wiki/Volatile_variablepreshing/20130702/the-happens-before-relation/

  1.3.10. 以下代码是不是线程安全?为什么?如果为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 static AtomicInteger count=new AtomicInteger(0);public static void increment() {count.getAndIncrement();}}

  1.3.12. 参考资料

  book.douban/subject/10484692/intel/content/www/us/en/processors/architectures-software-developer-manuals.html

  二、 进阶篇

  2.1. Java底层知识

  2.1.1. 学习了解字节码、class文件格式

  enpedia/wiki/Java_class_fileenpedia/wiki/Java_bytecodeenpedia/wiki/Java_bytecode_instruction_listingscsg.ci.i.u-tokyo.ac.jp/~chiba/javassist/asm.ow2/

  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, Args_size=10: iconst_01: istore_12: iinc 1, 15: iload_16: iconst_17: imul8: istore_19: getstatic #2; //Field java/lang/System.out:Ljava/io/PrintStream;12: iload_113: invokevirtual #3; //Method java/io/PrintStream.println:(I)V16: returnLineNumberTable:line 4: 0line 5: 2line 6: 5line 7: 9line 8: 16

  2.1.3. CPU缓存,L1,L2,L3和伪共享

  duartes/gustavo/blog/post/intel-cpu-caches/mechanical-sympathy.blogspot/2011/07/false-sharing.html

  2.1.4. 什么是尾递归

  2.1.5. 熟悉位运算

  用位运算实现加、减、乘、除、取余

  2.1.6. 参考资料

  book.douban/subject/1138768/book.douban/subject/6522893/enpedia/wiki/Java_class_fileenpedia/wiki/Java_bytecodeenpedia/wiki/Java_bytecode_instruction_listings  2.2. 设计模式

  2.2.1. 实现AOP

  CGLIB和InvocationHandler的区别cglib.sourceforge/动态代理模式Javassist实现AOPcsg.ci.i.u-tokyo.ac.jp/~chiba/javassist/ASM实现AOPasm.ow2/

  2.2.2. 使用模板方法设计模式和策略设计模式实现IOC

  2.2.3. 不用synchronized和lock,实现线程安全的单例模式

  2.2.4. nio和reactor设计模式

  2.2.5. 参考资料

  asm.ow2/cglib.sourceforge/javassist/

  2.3. 网络编程知识

  2.3.1. Java RMI,Socket,HttpClient

  2.3.2. 用Java写一个简单的静态文件的HTTP服务器

  实现客户端缓存功能,支持返回304实现可并发下载一个文件使用线程池处理客户端请求使用nio处理客户端请求支持简单的rewrite规则上述功能在实现的时候需要满足“开闭原则”

  2.3.3. 了解nginx和apache服务器的特性并搭建一个对应的服务器

  nginx/httpd.apache/

  2.3.4. 用Java实现FTP、SMTP协议

  2.3.5. 什么是CDN?如果实现?DNS起到什么作用?

  搭建一个DNS服务器搭建一个 Squid 或 Apache Traffic Server 服务器squid-cache/trafficserver.apache/enpedia/wiki/Domain_Name_System

  2.3.6. 参考资料

  ietf/rfc/rfc2616.txttools.ietf/rfc/rfc5321.txtenpedia/wiki/Open/closed_principle

  2.4. 框架知识

  spring,spring mvc,阅读主要源码ibatis,阅读主要源码用spring和ibatis搭建java server

  2.5. 应用服务器知识

  熟悉使用jboss,jboss/overview/熟悉使用tomcat,tomcat.apache/熟悉使用jetty,eclipse/jetty/

  三、 高级篇

  3.1. 编译原理知识

  3.1.1. 用Java实现以下表达式解析并返回结果(语法和Oracle中的select sysdate-1 from dual类似)

  sysdatesysdate - 1sysdate - 1/24sysdate - 1/(12*2)

  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%'");

  要求返回列表中匹配的对象,即最后两个对象;

  3.1.3. 用Java实现以下程序(语法和变量作用域处理都和JavaScript类似):

  代码:

  var a=1;var b=2;var c=function() {var a=3;println(a);println(b);};c();println(a);println(b);

  输出:

  3212

  3.1.4. 参考资料

  enpedia/wiki/Abstract_syntax_treejavacc.java/antlr/

  3.2. 操作系统知识

  UbuntuCentos使用linux,熟悉shell脚本

  3.3. 数据存储知识

  3.3.1. 关系型数据库

  MySQL如何看执行计划如何搭建MySQL主备binlog是什么Derby,H2,PostgreSQLSQLite

  3.3.2. NoSQL

  CacheRedisMemcachedLeveldbBigtableHBaseCassandraMongodb图数据库neo4j

  3.3.3. 参考资料

  db-engines/en/rankingredis/code.google/p/leveldb/hbase.apache/cassandra.apache/mongodb/neo4j/

  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 jobHive:部署hive,书写hive sql,得到结果Presto:类hive,不过比hive快,非常值得学习

  3.4.5. 分布式日志收集flume,kafka,logstash

  3.4.6. 数据挖掘,mahout

  3.4.7. 参考资料

  zookeeper.apache/lucene.apache/solr/github/nathanmarz/storm/wikihadoop.apache/prestodb/flume.apache/,logstash/,kafka.apache/mahout.apache/

  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. 了解并学习下面几种增强安全的技术

  openauthentication/HOTP ietf/rfc/rfc4226.txtTOTP tools.ietf/rfc/rfc6238.txtOCRA tools.ietf/rfc/rfc6287.txtenpedia/wiki/Salt_(cryptography)

  3.5.12. 用openssl签一个证书部署到apache或nginx

  3.5.13. 参考资料

  enpedia/wiki/Cryptographic_hash_functionenpedia/wiki/Block_cipherenpedia/wiki/Public-key_cryptographyenpedia/wiki/Transport_Layer_Securityopenssl/code.google/p/google-authenticator/

  四、 扩展篇

  4.1. 相关知识

  4.1.1. 云计算,分布式,高可用,可扩展

  4.1.2. 虚拟化

  linuxcontainers/linux-kvm/page/Main_Pagexenproject/docker/

  4.1.3. 监控

  nagios/ganglia/

  4.1.4. 负载均衡

  linuxvirtualserver/

  4.1.5. 学习使用git

  github/git.oschina/

  4.1.6. 学习使用maven

  maven.apache/

  4.1.7. 学习使用gradle

  gradle/

  4.1.8. 学习一个小语种语言

  GroovyScalaLISP, Common LISP, Schema, ClojureRJuliaLuaRuby

  4.1.9. 尝试了解编码的本质

  了解以下概念ASCII, ISO-8859-1GB2312, GBK, GB18030Unicode, UTF-8不使用 String.getBytes() 等其他工具类/函数完成下面功能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. 尝试了解时间的本质

  时区 & 冬令时、夏令时enpedia/wiki/Time_zoneftp://ftp.iana/tz/data/asiazhpedia/wiki/%E4%B8%AD%E5%9C%8B%E6%99%82%E5%8D%80闰年enpedia/wiki/Leap_year闰秒ftp://ftp.iana/tz/data/leapsecondsSystem.currentTimeMillis() 返回的时间是什么

  4.1.11. 参考资料

  git-scm/enpedia/wiki/UTF-8iana/time-zones

  程序员

  4.2. 扩展学习

  4.2.1. JavaScript知识

  4.2.1.1. 什么是prototype

  修改代码,使程序输出“1 3 5”:jsfiddle/Ts7Fk/

  4.2.1.2. 什么是闭包

  看一下这段代码,并解释一下为什么按Button1时没有alert出“This is button: 1”,如何修改:jsfiddle/FDPj3/1/

  4.2.1.3. 了解并学习一个JS框架

  jQueryExtJSArgularJS

  4.2.1.4. 写一个Greasemonkey插件

  enpedia/wiki/Greasemonkey

  4.2.1.5. 学习node.js

  nodejs/

  4.2.2. 学习html5

  ArgularJS,docs.angularjs/api

  4.2.3. 参考资料

  ecmascript/jsfiddle/jsbin/runjs/userscripts/

  五、 推荐书籍

  《深入Java虚拟机》

  《深入理解Java虚拟机》

  《Effective Java》

  《七周七语言》

  《七周七数据》

  《Hadoop技术内幕》

  《Hbase In Action》

  《Mahout In Action》

  《这就是搜索引擎》

  《Solr In Action》

  《深入分析Java Web技术内幕》

  《大型网站技术架构》

  《高性能MySQL》

  《算法导论》

  《计算机程序设计艺术》

  《代码大全》

  《JavaScript权威指南》

  然后今天就讲到这里啦,大家记得点赞收藏,分享转发哦~

posted @   linjingyg  阅读(125)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示