java学习路线
Posted 午时的海
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java学习路线相关的知识,希望对你有一定的参考价值。
补充些网站:
- 并发编程网
- cmsblogs-chenssy-记录、分享JAVA技术
- Java并发编程 (海子的博客园)
- 依然didala (自己的一个网站,当然和上述是没法比,但对一些 Java 技术也花了点时间研究)
———————————以下原文———————————
可以参考从这几方面来看Java:
JVM
Java JVM:总结 · Issue #63 · pzxwhc/MineKnowContainer
垃圾算法和垃圾收集器相关
- Java JVM:垃圾收集算法 - 标记清除算法(伪代码实现与深入分析) · Issue #86 · pzxwhc/MineKnowContainer
- Java JVM:垃圾收集算法 - 标记整理算法(伪代码实现与深入分析) · Issue #87 · pzxwhc/MineKnowContainer
- Java JVM:垃圾收集算法 - 复制算法(伪代码实现与深入分析) · Issue #88 · pzxwhc/MineKnowContainer
- Java JVM:CMS 垃圾收集器 - 工作原理,浮动垃圾,三色标记法等 · Issue #89 · pzxwhc/MineKnowContainer
- Java JVM:G1 垃圾收集器概述 · Issue #90 · pzxwhc/MineKnowContainer
- Java JVM:垃圾收集器(转载) · Issue #61 · pzxwhc/MineKnowContainer
内存相关
- Java JVM:内存结构 · Issue #24 · pzxwhc/MineKnowContainer
- Java JVM:垃圾回收(GC 在什么时候,对什么东西,做了什么事情) · Issue #26 · pzxwhc/MineKnowContainer · GitHub
- Java JVM:编译加载机制与自定义类加载器 · Issue #27 · pzxwhc/MineKnowContainer · GitHub
多线程
- Java 多线程:多线程生成的原因(Java内存模型与i++操作解析) · Issue #6 · pzxwhc/MineKnowContainer · GitHub
- Java 多线程:生产者消费者问题 · Issue #8 · pzxwhc/MineKnowContainer · GitHub
- Java 多线程:Lock关键字(接口方法分析,ReentrantLock,ReadWriteLock) · Issue #16 · pzxwhc/MineKnowContainer · GitHub
- Java 多线程:Condition关键字 · Issue #10 · pzxwhc/MineKnowContainer · GitHub
- Java 多线程:synchronized 关键字用法(修饰类,方法,静态方法,代码块) · Issue #7 · pzxwhc/MineKnowContainer · GitHub
- Java 多线程:volatile关键字 · Issue #11 · pzxwhc/MineKnowContainer · GitHub
- Java 多线程:ThreadLocal关键字 · Issue #12 · pzxwhc/MineKnowContainer · GitHub
- Java 多线程:InheritableThreadLocal 实现原理 · Issue #20 · pzxwhc/MineKnowContainer · GitHub
- Java 多线程:线程池实现原理 · Issue #9 · pzxwhc/MineKnowContainer · GitHub
- Java 多线程:CAS 与 AtomicInteger(乐观锁) · Issue #17 · pzxwhc/MineKnowContainer · GitHub
记忆方法:产生的原因(内存模型)--> 解决的办法(synchronized,Lock,Condition,volatile,ThreadLoad,AtomicInteger,CAS)--> 优化(生产者消费者模式(从源头分析),Condition)
集合
- Java 集合总结(Collection系列与Map系列) · Issue #75 · pzxwhc/MineKnowContainer · GitHub
- Java 集合:Collection,List,ArrayList,Vector,LinkedList(实现方式,对比) · Issue #18 · pzxwhc/MineKnowContainer · GitHub
- Java 集合:HashMap(put方法的实现与哈希冲突) · Issue #19 · pzxwhc/MineKnowContainer
- Java 集合:LinkedHashMap工作原理及实现 · Issue #76 · pzxwhc/MineKnowContainer
- Java 集合:TreeMap 的使用(不包括原理,仅仅是简单的使用 demo) · Issue #82 · pzxwhc/MineKnowContainer
- Java 集合:HashSet ,TreeSet 实现原理 · Issue #21 · pzxwhc/MineKnowContainer
- 扩展 — 第6条:WeakHashMap扩展知识1(原理与Reference相关):依然didala
- 第5章:Java 丰富的并发基础构建模块1 - 容器部分:依然didala
记忆方法:Collection系列(当你分析他们的原理 ArrayList,LinkedList,Vector 作为一类记比较好),Map系列(HashMap,HashTable,ConcurrentHashMap作为一类记)
IO
- Java IO:操作系统的IO处理过程以及5种网络IO模型 · Issue #22 · pzxwhc/MineKnowContainer · GitHub
- Java IO:常见Java IO流介绍(ByteArrayInputStream,ObjectInputStream,BufferedInputStream) · Issue #23 · pzxwhc/MineKnowContainer · GitHub
记忆方法:重点理解 IO模型(阻塞式IO,非阻塞式IO,IO复用,信号驱动IO,异步IO)理解了这些,会有助于理解 NIO,AIO。另外,需要知道 设计模式中的装饰器模式,会比较好理解Java的IO包。
小知识点
个人觉得 Java 大体上可以切分为上面4个大部分。但其实还会有很多小知识点。比如说
- Java 关键字:abstract,final,static 等。
- 关键类:Object类的几个方法, String类,Thread类,栈,队列,Arrays,Collections 等其他Java常用类。
- 其他关于Java的知识,比如 jdk8的新特性(重点lambda+集合的流式操作),UML类图等。
==============
看书
- 入门,教材类型:《Java核心技术 卷1》(没看过,但是很多推荐,所以应该也不差,我的入门是大学有点红色封面那本耿祥义那本)《Thinking in Java》(挑章节看了一点,我同事说他大学(211,985) 的教材就是这本)
- 进阶:《深入理解Java虚拟机》《垃圾回收的算法与实现》(R大推荐的)
- 要有几W的编码量:《Effective Java》《Java并发编程实战》
这些书 都是 Java 领域比较有名的书了,分别再从 虚拟机,多线程,一些小的要注意点等方面进一步提高自己的Java能力。
==============
看框架代码
Spring 系列的一些:
- Spring:AOP(JDK动态代理与CGLIB代理) · Issue #28 · pzxwhc/MineKnowContainer · GitHub
- Spring:DI原理(包括如何创建实体和具体注入) · Issue #30 · pzxwhc/MineKnowContainer · GitHub
- Spring:异常统一处理的三种方式与Rest接口异常的处理 · Issue #29 · pzxwhc/MineKnowContainer · GitHub
SpringMVC 系列的一些:
- SpringMVC:Servlet 体系结构与 ServletContext,ServletConfig · Issue #32 · pzxwhc/MineKnowContainer · GitHub
- SpringMVC:FrameworkServlet(主要用于初始化WebApplicationContext) · Issue #34 · pzxwhc/MineKnowContainer · GitHub
- SpringMVC:DispatcherServlet(流程) · Issue #35 · pzxwhc/MineKnowContainer · GitHub
还有:
- 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 变少,变短。
- 得结合设计模式改代码结构了,不单单是语法层面上的了。
==============
最后,问老师傅一个问题:公司项目不足的情况下(也就是项目不咋地),如果不考虑跳槽,该怎么更好的提升自己的经验(而不是纸上谈兵)?(此处有一可怜的表情...)
知乎:https://www.zhihu.com/question/19851109
https://github.com/waylau/essential-java
以上是关于java学习路线的主要内容,如果未能解决你的问题,请参考以下文章