java学习路线

https://www.zhihu.com/question/19851109

 

补充些网站:

  1. 并发编程网
  2. cmsblogs-chenssy-记录、分享JAVA技术
  3. Java并发编程 (海子的博客园)
  4. 依然didala (自己的一个网站,当然和上述是没法比,但对一些 Java 技术也花了点时间研究)

———————————以下原文———————————
可以参考从这几方面来看Java:

JVM
Java JVM:总结 · Issue #63 · pzxwhc/MineKnowContainer
垃圾算法和垃圾收集器相关

内存相关


多线程

记忆方法:产生的原因(内存模型)–> 解决的办法(synchronized,Lock,Condition,volatile,ThreadLoad,AtomicInteger,CAS)–> 优化(生产者消费者模式(从源头分析),Condition)

集合

记忆方法:Collection系列(当你分析他们的原理 ArrayList,LinkedList,Vector 作为一类记比较好),Map系列(HashMap,HashTable,ConcurrentHashMap作为一类记)

IO

记忆方法:重点理解 IO模型(阻塞式IO,非阻塞式IO,IO复用,信号驱动IO,异步IO)理解了这些,会有助于理解 NIO,AIO。另外,需要知道 设计模式中的装饰器模式,会比较好理解Java的IO包。

小知识点
个人觉得 Java 大体上可以切分为上面4个大部分。但其实还会有很多小知识点。比如说

  1. Java 关键字:abstract,final,static 等。
  2. 关键类:Object类的几个方法, String类,Thread类,栈,队列,Arrays,Collections 等其他Java常用类。
  3. 其他关于Java的知识,比如 jdk8的新特性(重点lambda+集合的流式操作),UML类图等。

==============
看书

  • 入门,教材类型:《Java核心技术 卷1》(没看过,但是很多推荐,所以应该也不差,我的入门是大学有点红色封面那本耿祥义那本)《Thinking in Java》(挑章节看了一点,我同事说他大学(211,985) 的教材就是这本)
  • 进阶:《深入理解Java虚拟机》《垃圾回收的算法与实现》(R大推荐的)
  • 要有几W的编码量:《Effective Java》《Java并发编程实战》

这些书 都是 Java 领域比较有名的书了,分别再从 虚拟机,多线程,一些小的要注意点等方面进一步提高自己的Java能力。

==============
框架代码

Spring 系列的一些:

SpringMVC 系列的一些:

还有:

  • C3P0 数据库连接池。可以看下 Connection 究竟保存在哪里,怎么存取的。
  • Zookeeper 的 watcher 机制。
  • Quartz Java 定时器的原理

 

==============
最后,结合工作
本人工作经验是比较欠缺的,这部分估计得老师傅带路了。

我个人理解的是:
如果没有工作,那么可以:

  • 自己做个个人博客,用Java搭建后端,部署到阿里云。
  • 对框架进行扩展,比如说 Quartz 你会发现是不支持集群的,那么怎么扩展让它支持集群。(这部分我想做,但是还没做,纸上谈兵ing,囧)
  • 翻译:比如说 G1 垃圾回收器这里:Getting Started with the G1 Garbage Collector,又可练习英文。

如果有工作:

  • 优化代码,如下可以使用一些 jdk8 的 lambda。或者 一些 数组的初始化注意一下。
List<Account> accounts = accountRepo.findAccountsByEntityCode(entityCode);
		
if(accounts != null) {
    //如果不是叶子节点,那么重新计算
    accounts
	.parallelStream()
	.filter(param -> {
	    AccountType accountType = accountTypeService.findAccountTypeById(param.getAcctCode());
	    if(StringUtils.isEmpty(accountType.getIsLeaf())){
	        if("0".equals(accountType.getIsLeaf())){
                    return true;
                } else {
                    return false;
                }
            } else { 
		    return true;
	    }
	})
	.forEach(param -> getAccount0(param));
}

定义 ArrayList 的时候,就不要这样子了:

List<Object> list = new ArrayList<>();

而是先估算容量大小,这样子(估算不出那就算了):

List<Object> list1 = new ArrayList<>(10);
  • 拿工作中的项目,得到它的 gc log,试试改一些 垃圾收集器,让 gc 变少,变短。
  • 得结合设计模式改代码结构了,不单单是语法层面上的了。

==============

 

Leave a Reply

Your email address will not be published. Required fields are marked *