【Todo】Java学习路线(方向指导)
在网上搜了下Java学习路线(关键词:学习,因为众所周知,实践出牛人,在平时工作不怎么深入的情况下,才强调学习的方向的重要性 ^_^)
发现下面知乎这个回答写的真好。mark如下:
https://www.zhihu.com/question/19851109
&&&&&&&&&&&分隔线,以下为转载&&&&&&&&&&&&&&&&
依然didala:
有评论指出下面说的不是Java的开始学习路线。其实也对,当时在大学是先学了一遍《Java程序设计》,其实也是停留在只懂写 private,类,对象这些,很浅。然后网上认识了个网易的老师傅,就带入门了,就开始看一些Java内存结构什么的,就是如下的这些内容,然后后来就自己分类了学。希望对大家有帮助(当然,有些可能个人能力问题说得不对,希望大家可以帮忙指出,谢谢)。
———————————8.25更新———————————
补充些网站(Ps:没有利益相关,只是觉得他们写得真蛮好):
- 并发编程网
- 金丝燕网 - 一个严谨的网站!
- 沈玮 | Wei SHEN
- Java并发编程 (海子的博客园)
———————————以下原文———————————
可以参考从这几方面来看Java:
JVM
- Java JVM:内存结构和相关参数含义 · Issue #24 · pzxwhc/MineKnowContainer · GitHub
- Java JVM:内存溢出(栈溢出,堆溢出,持久代溢出以及 nable to create native thread) · Issue #25 · pzxwhc/MineKnowContainer · GitHub
- 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 · GitHub
- Java 集合:HashSet,HashTable,以及 ConcurrentHashMap 概念 · Issue #21 · pzxwhc/MineKnowContainer · GitHub
- Java 集合:LinkedHashMap工作原理及实现(转载) · Issue #76 · pzxwhc/MineKnowContainer · GitHub
- Java 集合:TreeMap工作原理及实现(转载) · Issue #77 · pzxwhc/MineKnowContainer · GitHub
记忆方法: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类图等。
==============
进阶--看书
《Effective Java》《Thinking in java》《深入理解Java虚拟机》《Java并发编程实战》这四本 是 Java 领域比较有名的书了,分别再从 虚拟机,多线程,一些小的要注意点等方面进一步提高自己的Java能力。
进阶--研究框架代码
考本题的 EZLippi 的答案,此时可以看下一些 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 ,Spring Security 的源码流程 也是比较好的,毕竟这些都是比较流行的基于Java的一些技术:
- SpringMVC:Servlet 体系结构与 ServletContext,ServletConfig · Issue #32 · pzxwhc/MineKnowContainer · GitHub
- SpringMVC:FrameworkServlet(主要用于初始化WebApplicationContext) · Issue #34 · pzxwhc/MineKnowContainer · GitHub
- SpringMVC:DispatcherServlet(流程) · Issue #35 · pzxwhc/MineKnowContainer · GitHub
在这里,可能会对编译期和运行期不太熟悉,对反射不太了解,对Java的异常之前好像也没怎么接触过,又或者,不知道 abstract,final,try-catch-finally 的实际运用场景是什么。这里都可以接触到。
==============
最后--把知识用在工作中或者自己的项目中
例如,如果没有工作,那么就自己做个个人博客,用Java搭建后端,部署到阿里云。这时候可以监控下自己的Java使用了多少内存,例如简单的使用 jstat 就可以:

这时候你可以看到 新生代,老年代,eden区域,survivor区域等,可以看下他们的占比,利用-xmx,-xms,-xmn,-xss 等适当调节下。
又或者,如果在你的代码中你要用到集合,这个时候就可以考虑下 JDK8 的新特性,集合的流式处理是JDK8 的一大特性,如下是我在工作中使用的代码举例(写得不太好,不过意思就是这样):
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("".equals(accountType.getIsLeaf())){
return true;
} else {
return false;
}
} else {
return true;
}
})
.forEach(param -> getAccount0(param));
}
再另外,如果分析了 ArrayList,LinkedList,会发现,ArrayList 的性能消耗主要是扩容所引起了,那么定义 ArrayList 的时候,就不要这样子了:
ArrayList<Object> list = new ArrayList<Object>();
而是先估算容量大小,这样子(估算不出那就算了):
ArrayList<Object> list1 = new ArrayList<Object>(10);
==============
最后,Java 只是一个工具,要配合好设计模式,以及算法,数据结构。比如说对数组排序,如果使用冒泡,选择算法,Java代码写得再好,再明了清晰,复杂度也是 O(n^2),效率不是很高。
【Todo】Java学习路线(方向指导)的更多相关文章
- 【强烈推荐】可能是最适合你的 Java 学习路线和方法
如遇链接无法打开,建议使用 https://github.com/Snailclimb/JavaGuide/blob/master/docs/questions/java-learning-path- ...
- 分享篇——我的Java学习路线
虽然之前我是开发出身,但是我学习的语言是Objective-c,这个语言使用起来范围比较窄,对于自动化学习来说也是无用武之地,所以我自己学习了Java,对于一个有开发经验的人来说学习一门新语言相对来说 ...
- java学习路线(好资源大家分享)
对于入门java将近两年的时间,曾经迷惘过,一直想知道java的具体学习路线,看过了许许多多的java经验分享的帖子,评论,以及其他各种培训机构所谓的学习路线,发现没有一个符合我个人需求的学习路线,根 ...
- 最新java学习路线:含阶段性java视频教程完整版
最新java学习路线:带阶段性java视频教程版本 第一阶段:Java基础 学习目标: 掌握基本语法.面向对象.常用类.正则.集合.Io流.多线程.Nio.网络编程.JDK新特性.函数式编程 知识点细 ...
- 一份最中肯的Java学习路线+资源分享(拒绝傻逼式分享)
这是一篇针对Java初学者,或者说在Java学习路线上出了一些问题(不知道该学什么.不知道整体的学习路线是什么样的) 第一步:Java基础(一个月左右) 推荐视频: 下面的是黑马内部视频,我比较推荐的 ...
- java学习路线推荐,希望能帮到你
很多小白刚开始学习java时,肯定迷惘过,因为对java基本是啥也不懂的,一直想知道java的具体学习路线,我曾经也看了许许多多的java经验分享的帖子,评论,以及其他各种培训机构所谓的学习路线,特别 ...
- Java学习路线|转至CodeSheep
Java学习路线 基础知识 . 基本语法 基本网络知识:tcp/ip http/https 工具方面 . 操作系统:linux (CentOS\Ubuntu\Fe..) 代码管理:svn/git 持续 ...
- 从入门到精通,Java学习路线导航
引言最近也有很多人来向我"请教",他们大都是一些刚入门的新手,还不了解这个行业,也不知道从何学起,开始的时候非常迷茫,实在是每天回复很多人也很麻烦,所以在这里统一作个回复吧. Ja ...
- 从入门到精通,Java学习路线导航(附学习资源)
原文链接:https://blog.csdn.net/qq_42453117/article/details/100655512 引言 最近也有很多人来向我"请教",他们大都是一些 ...
随机推荐
- 自建NAS如何使用大于2TB的硬盘(从分区开始)
目录 自建NAS如何使用大于2TB的硬盘(从分区开始) 对分区进行格式化 挂载到某一目录(需设置开机自动挂载) 上传文件测试: 补充 自建NAS如何使用大于2TB的硬盘(从分区开始) 需求说明: 自建 ...
- 带有命名空间的xml解析,C#
前一段时间做花旗的接口,返回的xml格式是带有命名空间的,可是难倒了我,找了好久才找到解决办法,给大家分享下,少走弯路. 1,直接进入正题,先看一段带有命名空间的xml,这段xml大概的意思是,前面是 ...
- NHibernate N+1问题实例分析和优化
1.问题的缘起 考察下面的类结构定义 public class Category { string _id; Category _parent; IList<Category> _chil ...
- apache 虚拟主机配置(根据不同的域名映射到不同网站)
最近弄了台香港服务器做测试,Web服务器软件用的是Apache2.2,机器只有一台,ip只有一个,但是想测试几个站点,于是尝试了下Apache的虚拟主机配置.之前已经写过一篇博文了——<Apac ...
- 编绎调试HotSpot JVM及在Eclipse里调试HotSpot一些步骤
编绎整个OpenJDK要很久,而且有很多东西是不需要的.研究HotSpot的话,其实只要下HotSpot部分的代码就可以了. 下面简单记录下编绎调试HotSpot一些步骤. 一.编绎 进入hotsop ...
- ZOJ-3953 Intervals,t
Intervals 题意:给出n个区间,求最少删除多少个区间使得任意三个区间都不相交. 思路:按区间左端点排序,每次选取r最大的两个与当前比较,如果能放更新r,否则删除r最大的.关键就在怎么删除r最大 ...
- 【Luogu】P2774方格取数问题(最大点权独立集)
题目链接 不知道为啥坠大点权独立集的做法跟最大权闭合图差不多? qwq 放个链接 #include<cstdio> #include<cstring> #include< ...
- [luoguP2601] [ZJOI2009]对称的正方形(二维Hash + 二分 || Manacher)
传送门 很蒙蔽,不知道怎么搞. 网上看题解有说可以哈希+二分搞,也有的人说用Manacher搞,Manacher是什么鬼?以后再学. 对于这个题,可以从矩阵4个角hash一遍,然后枚举矩阵中的点,再二 ...
- hdu 3613 KMP算法扩展
Best Reward Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total ...
- mybatis原理源码大牛连接
mybatis讲解的非常好的连接: https://www.jianshu.com/nb/5226994 执行流程简介参考:http://www.cnblogs.com/dongying/p/4142 ...