【java】:java学习路线图,
分享于 点击 6980 次 点评:42
【java】:java学习路线图,
原帖地址:
http://www.zhihu.com/question/19851109
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
集合
- 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
IO
- Java IO:操作系统的IO处理过程以及5种网络IO模型 · Issue #22 · pzxwhc/MineKnowContainer · GitHub
- Java IO:常见Java IO流介绍(ByteArrayInputStream,ObjectInputStream,BufferedInputStream)
· Issue #23 · pzxwhc/MineKnowContainer · GitHub
小知识点
个人觉得 Java 大体上可以切分为上面4个大部分。但其实还会有很多小知识点。比如说
==============
进阶--看书
《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 等适当调节下。不要小看这些,阿里云上1G内存可是要差不多30块钱呢,够两顿饭钱了。
又或者,如果在你的代码中你要用到集合,这个时候就可以考虑下 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("0".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),慢。 编辑于 2016-05-2221 条评论感谢 收藏•没有帮助•举报•禁止转载 ylxfc,怎么就这么笨啊 29 人赞同 发张前几天专门给团队内部校招新人,列的知识图谱(内部的一些技术已经删除)有兴趣的可以参考下,有问题也可以私信我 发布于 2016-04-029 条评论感谢 收藏•没有帮助•举报•作者保留权利 watchmen,Linux高级程序设计作者,互联网探索者 41 人赞同 对于这个问题我想说一句很多人认为做java==web,这个是一种错误的观点。你学习的路线也要根据你选择的方向决定。
1.对于j2ee工程师而言,主要的工作就是做web,那么这个时候要选择靠前端一点的技术,后端主要目的就是操作数据库等等,相对来说,前端的工作量较大.
2,java服务器工程师,主要从事java网络通信和中间件,大数据等等工作,那么对java基础要求要高很多,特别是线程安全 网络 以及协议栈。那么路线又不一样。
目前手游很火,很多服务器都是用java写的,你可以参考 JAVA初中级开发视频 编辑于 2014-10-146 条评论感谢 收藏•没有帮助•举报•作者保留权利 林毅文,码农 12 人赞同 1、基础java学习。数据库,HTTP神马的。请求分发拦截器还是android还是quartz还是netty啥的。
2、积累基础框架。
举个例子, 前端用EXT的大部分都是管理后台,OA,工作流等;前端用JQUERY的就是web应用。java那块是SSH/SSH2/SPRING MVC是属于万金油搭配,PLAY偏向web应用框架。传统hibernate/ibatis感觉不适合分库分表。具体某个框架的作用是神马, 请自己掌握好。并且在这一步就应该学会用GIT/SVN/HG/MAVEN/ANT。
3、积累项目经验。
学生时代例如一个XX管理系统: 登陆注册模块, 登陆验证拦截模块,某业务模块A,某关联业务A的模块B如何设计, 具体怎么样设计,这里学问就来啦。另外应该有自己的版本控制软件,管理好以前的代码。需要的时候拷贝即可。
3.1、测试能力。有意识地写单元测试,增加代码的可靠性。并且掌握思维导图等工具, 会写测试用例。
3.2、工具开发/积累。此阶段是为了优化工作过程使用的。例如自动化部署脚本,例如ECLIPSE插件开发。。。
3.2、线上问题处理。意识到日志的重要性。并且会通过jstat等工具排查性能问题,隐蔽的问题。艰难地扣出错误stack。。。
4、设计。这个不会说, 求补充。。。 发布于 2014-02-06添加评论感谢 收藏•没有帮助•举报•作者保留权利 阿弎,有点爱分享 20 人赞同 给大家来个更详细的Java学习路线, 每一部都分得很细..【本人也正按着这个路线努力 一起加油】
https://github.com/JiaoPaner/WeiboSpider
最近写了个抓取微博用户信息和粉丝以及粉丝的信息及其粉丝的爬虫[就是不断爬啦]
代码不多 就10个左右类 用到的库:OkHttp,Jsoup
给初学者参考参考 一起学习学习咯
大神看见轻喷 小弟心灵脆弱哎
以下是路线
==============================第一阶段=================================
==============================第二阶段=================================
==============================第三阶段=================================
==============================第四阶段=================================
==============================第五阶段=================================
==============================第六阶段=================================
==============================第七阶段=================================
参考:【爱分享,爱Java】JAVA学习路线【新手可以参考看下】 编辑于 2016-05-1211 条评论感谢 收藏•没有帮助•举报•作者保留权利 EZLippi,乐于造轮子http://www.ezlippi.com 23 人赞同 无论什么语言学习的过程都是循序渐进的,可以按照这样一个步骤:
1.看看headfirst Java和thinking in Java,掌握基础语言知识以及面向对象部分,
继承、接口,封 装、多态、抽象类,要在脑子里形成面向对象编程的概念。
2.掌握了基础之后,再往深入一点研究Java的高级知识,比如注解、NIO、并发、
线程池、同步容器和并发容器、阻塞和非阻塞、反射、以及设计模式的一些东西。
3.学习使用jdbC来连接数据库,掌握基本的SQL语句,插入、查询、结果集resultSet,
再深入一点就是事务管理,看书的时候一定要思考为什么设计成这样,以及这样有什么缺陷。
4.学习各种Java的框架,比如比较流行的Spring,Struts,以及对象关系映射hibernate,
学会配置这些,最后能够把它们整合到一起,可以参考***In Action这些书籍。
发布于 2014-11-092
条评论感谢
收藏•没有帮助•举报•作者保留权利
知乎用户,攻城狮
8 人赞同
一切以jvm开始的学习路线都是耍流氓,你有天大的本事啊,有本事学习计算机网络的时候从汇编开始啊,jvm已经是java高级特性了,涉及到对虚拟机的监控和分析,你叫一个新手这样开始学
发布于 2016-04-033
条评论感谢
收藏•没有帮助•举报•作者保留权利
北极圈,极客导航http://gogeeks.cn代码狗
5 人赞同
基础就那么点,学完赶紧找自己感兴趣的方向学习,可以看看这Java工程师知识图谱
发布于 2015-07-131
条评论感谢
收藏•没有帮助•举报•作者保留权利
知乎用户
4 人赞同
如果有毅力自学的话,推荐你搜索“马士兵+Java”他的教学视频是很不错的。先从Java基础 然后数据库 网页再来就是三大框架。重点还是多写写项目。。。
发布于 2013-07-115
条评论感谢
收藏•没有帮助•举报•作者保留权利
Xiao
Miller,一名死嗑自己的创业人,软件架构师,精通…
13 人赞同
看这个图,史上最全的JAVA学习路线图相关文章
- 暂无相关文章
用户点评