=Start=
缘由:
制定学习计划,明确学习目标,提高学习效率
正文:
参考解答:
第一阶段 Java基础
基础语法
面向对象
常用类
集合
异常处理
IO
多线程
网络编程
反射
数据库(JDBC)
#《Java语言程序设计(基础篇)》/《Java核心技术》/《MySQL必知必会》#
#《Java编程思想》/《Effective Java》/《Java并发编程实战》#
第二阶段 Java Web
HTML/CSS/JavaScript/jQuery/Ajax/BootStrap/…
Servlet/JSP
Tomcat/Jetty
#《JavaScript DOM编程艺术》/《Head First HTML与CSS(第2版)》/《Head First Servlets & JSP》#
第三阶段 Java 框架
SpringMVC/MyBatis
Lucene/Solr
…
#《深入分析Java Web技术内幕》/《深入理解java虚拟机》/《How Tomcat Works》/《Struts2技术内幕》/《Spring技术内幕》#
#《大话设计模式》/《设计模式》#
第四阶段 项目实践
爬虫
CRM
…
大数据方向(网上找的一些资料以及我个人的使用经历,仅供参考……)
使用:Hadoop/Storm
深入:CS + Math(Statistics/…)
其它需要注意的事项:
-
勤查API文档
-
多Google
-
学习开源软件的设计思想
编程的学习是贵在坚持,有了规划就应该一步一步的打牢基础,多实战,多Google,多思考,这样才会有进步,共勉。
参考链接:
=
- 我的Java后端书架 (2016年暮春3.0版)
http://calvin1978.blogcn.com/articles/javabookshelf.html - 我的Java后端书架 (2016年暖冬版)
http://calvin1978.blogcn.com/articles/bookshelf16.html - Java后端工程师学习大纲
http://www.rowkey.me/blog/2016/06/27/java-backend-study/
=END=
《 “Java学习路线图” 》 有 30 条评论
Java研发技术学习成长路线
https://mp.weixin.qq.com/s?__biz=MzAwNTQ4MTQ4NQ==&mid=2453559460&idx=1&sn=d754b62b5db49fefa8abf64534b450d4
Java书单——由入门到上天
https://mp.weixin.qq.com/s?__biz=MzAwNTQ4MTQ4NQ==&mid=2453559533&idx=1&sn=8fb6a9187b63b0545c602393050f0332
项目开发框架-SSM
https://juejin.im/post/59f3ef5c51882534aa0691b2
SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)
http://blog.csdn.net/zhshulin/article/details/37956105
SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)
http://www.cnblogs.com/zyw-205520/p/4771253.html
SSM(一)框架的整合
https://crossoverjie.top/2016/06/28/SSM1/
搞定Java SSM框架开发
http://www.imooc.com/course/programdetail/pid/59
求Github上质量较好的java web项目?想fork下下
https://www.zhihu.com/question/28832908
使用Sonar进行Java代码质量管理
https://mp.weixin.qq.com/s/6MaQrrtH9518FVk5lNKTlA
微软开源扫描工具Sonar
https://github.com/sonarwhal/sonar
魔鬼在细节中
http://javatar.iteye.com/blog/1056664
`
根据平时写代码时的一习惯,总结了一下在写代码过程中,尤其是框架代码,要时刻牢记的细节,
可能下面要讲的这些,大家都会觉得很简单,很基础,但要做到时刻牢记,
在每一行代码中都考虑这些因素,是需要很大耐心的,
大家经常说,魔鬼在细节中,确实如此。
1. 防止空指针和下标越界
2. 保证线程安全性和可见性
3. 尽早失败和前置断言
4. 分离可靠操作和不可靠操作
5. 异常防御,但不忽略异常
6. 缩小可变域和尽量final
7. 降低修改时的误解性,不埋雷
8. 提高代码的可测性
`
GOOGLE 十年 JAVA 技术栈
http://www.pythonpub.com/google%20java.html
Spring、Spring MVC 、Spring Boot 的区别是什么呢?
https://www.v2ex.com/t/317141
spring boot与spring mvc的区别是什么?
https://www.zhihu.com/question/64671972
`
Spring 是一个“引擎”;
Spring MVC 是基于Spring的一个 MVC 框架;
Spring Boot 是基于Spring4的条件注册的一套快速开发整合包。
`
Spring Boot 开源代码示例集合
https://github.com/ityouknow/spring-boot-examples
十倍效能提升——Web 基础研发体系的建立
http://www.cnblogs.com/sskyy/p/8613393.html
后端开发人员的路线图 2018 版
https://zhuanlan.zhihu.com/p/35620194
https://medium.com/tech-tajawal/modern-backend-developer-in-2018-6b3f7b5f8b9
如何学习后端技术?
http://www.rowkey.me/blog/2018/04/13/how-to-study-tech/
`
扎实的计算机基础知识
知其然更要知其所以然
动手实践
频繁练习
持续学习
自我总结
学会规划
`
2018年 阿里,百度,腾讯 等公司:对于Java开发者的招聘标准
https://mp.weixin.qq.com/s/EwX1rdsClkg8yvRfm_35yQ
`
扎实的计算机专业基础,包括算法和数据结构,操作系统,计算机网络,计算机体系结构,数据库等
具有扎实的Java编程基础,理解IO、多线程等基础框架
熟练使用Linux系统的常用命令及shell有一定了解
精通多线程编程,熟悉分布式,缓存,消息队列等机制;熟悉JVM,包括内存模型、类加载机制以及性能优化
精通spring mvc、orm框架(ibatis或hibernate)、模板引擎(velocity)、关系型数据库设计及SQL
具备良好的面向对象编程经验,深入理解OO、AOP思想,具有很强的分析设计能力,熟悉常用设计模式
有大型分布式、高并发、高负载、高可用性系统设计和稳定性经验
熟悉面向对象设计开发,熟悉各种常用设计模式,并有在具体的应用场景落地经验
熟悉Spring、iBatis,等开源框架及消息,存储等常用中间件。 有通读过开源框架源码
熟悉基于Oracle或者Mysql的设计和开发、Linux操作系统
熟悉SOA,有平台化实施经验者,有大数据量、高并发系统和大型网站构建经验
分布式系统应用架构设计与研发经验,精通Java EE、SOA、OSGI等相关技术
对各种开源的框架如Spring、Hibernate等有深入的了解,对框架本身有过开发或重构者可优先考虑
`
【干货合集】Java其实很好学,但是你需要知道在“爪哇”的世界里“你究竟在哪?”
https://yq.aliyun.com/articles/574069
JavaMail(2)——给多人发送、抄送
http://willow-na.iteye.com/blog/1465028
http://www.blogjava.net/kissyan4916/articles/279128.html
https://stackoverflow.com/questions/13854037/send-mail-to-multiple-recipients-in-java
`
message.addRecipient(Message.RecipientType.CC, InternetAddress.parse(“[email protected]”));
message.addRecipient(Message.RecipientType.CC, InternetAddress.parse(“[email protected]”));
message.addRecipient(Message.RecipientType.CC, InternetAddress.parse(“[email protected]”));
// 或
message.addRecipients(Message.RecipientType.CC, InternetAddress.parse(“[email protected],[email protected],[email protected]”));
`
JavaMail使用SMTP协议发送电子邮件
http://outofmemory.cn/code-snippet/2423/JavaMail-usage-SMTP-protocol-send-dianziyoujian
[原]Java通过Http Post Json数据
https://blog.csdn.net/dutsoft/article/details/79802577
Java后端基础设施
https://github.com/superhj1987/pragmatic-java-engineer/blob/master/book/chapter1-servertech/server-basic.md
`
1.1 统一请求入口-API网关
1.2 业务应用和后端基础框架
1.3 缓存、数据库、搜索引擎、消息队列
1.4 文件存储
1.5 统一认证中心
1.6 单点登录系统
1.7 统一配置中心
1.8 服务治理框架
1.9 统一调度中心
1.10 统一日志服务
1.11 数据基础设施
数据高速公路
离线数据分析
实时数据分析
数据即席分析
1.12 故障监控
`
Web后端工程师进阶指南(2018)
https://jiajunhuang.com/articles/2018_08_29-become_a_better_programmer.md.html
https://jiajunhuang.com/articles/2018_03_10-interview.md.html
`
技能分类
书籍推荐
我该学什么语言?为什么推荐这几门语言?
我需要加入什么样的公司?
`
全面理解Java内存模型
https://blog.csdn.net/suifeng3051/article/details/52611310
`
Java内存模型即Java Memory Model,简称JMM。JMM定义了Java 虚拟机(JVM)在计算机内存(RAM)中的工作方式。JVM是整个计算机虚拟模型,所以JMM是隶属于JVM的。
如果我们要想深入了解Java并发编程,就要先理解好Java内存模型。Java内存模型定义了多线程之间共享变量的可见性以及如何在需要的时候对共享变量进行同步。原始的Java内存模型效率并不是很理想,因此Java1.5版本对其进行了重构,现在的Java8仍沿用了Java1.5的版本。
`
深入理解Java内存模型(一)——基础
http://www.infoq.com/cn/articles/java-memory-model-1
从实际案例聊聊Java应用的GC优化
https://tech.meituan.com/jvm_optimize.html
从一次 FULL GC 卡顿谈对服务的影响
http://blog.jobbole.com/104265/
详解CMS垃圾回收机制
http://www.cnblogs.com/littleLord/p/5380624.html
看完一遍Java+JSP+Servlet+MySQL,如何有效的复习之前学的东西(比如Java基础)?
https://www.zhihu.com/question/314478081
https://github.com/ZhongFuCheng3y?tab=repositories
`
学完了之后,可以做点小项目,在做小项目的过程中会发现很多之前自己不了解的问题。
`
代码结构中Dao,Service,Controller,Util,Model是什么意思,为什么划分?
https://www.zhihu.com/question/58410621/answer/623496434
`
1.为什么需要一个好的代码结构
2.什么样才是一个好的结构
3.每一个分类代表什么含义
4.是否适用于WEB,Android和IOS?
5.进一步的学习的话,是要学习系统架构么?
名词解释:
DAO = Data Access Object = 数据存取对象,一般而言,都是用来和底层数据库通信,负责对数据库的增删改查
Service = 服务,它的重点是在于提供一个服务
Controller = 控制器,控制中心,所有的指令,调度都从这里发出去
Util = 工具,常常用来描述和业务逻辑没有关系的数据处理
Model = 模型,承载的作用就是数据的抽象
`
互联网 Java 工程师进阶知识完全扫盲:涵盖高并发、分布式、高可用、微服务等领域知识,后端同学必看,前端同学也可学习
https://github.com/doocs/advanced-java
https://doocs.github.io/advanced-java/#/
觉得自己学不到东西了,为啥面试却总通不过? | 答水友问
https://mp.weixin.qq.com/s/nfEtzXlTcKB3uwyQ_YWERQ
`
我们不妨问问自己:
(1)基本功打牢了么?
(2)工具熟练了么?
(3)业务搞透了么?
(4)架构合理么?
(5)是公司技术最牛逼的人了么?
别说工作中用的东西千篇一律,别说一直在做业务,别说没有技术含量,再问问自己:
(1)监控到位么?
(2)自动化程度如何?
(3)做类似的业务,扩展性如何?
(4)高可用保证了么?
(5)知道系统瓶颈在哪里么?
问过自己之后,或许你会发现,并不是自己没有提高,而是过于浮躁。不是没有东西学,而是内心的惰性,不愿意去发觉自己不懂的东西。
真的,脚踏实地的,持续学习和提高吧!
`
Mybatis极简配置
https://mp.weixin.qq.com/s/SmxFvQTFc-wqCWizMpNiRQ
Mybatis 增强工具 MyBatis-Plus
https://mp.weixin.qq.com/s/_QelpsDplfY-1pyfcYKk4A
Java 看什么书比较好? – 知乎
https://www.zhihu.com/question/68487168/answer/803319170
`
《阿里毕玄:推荐给Java程序员的7本好书》
我主要还是个Java程序员,所以进阶类型的书就推荐Java相关的。
1. 《Java并发编程实战》 并发是高级语言里都需要掌握的稍微高级一些的技巧,这本书尽管是2012年的书了,但我觉得仍然是无比经典,绝对是必读书。
2. 《Netty实战》 Netty是Java中通信框架实现的典范,非常值得通过这个来学习好语言中IO相关的知识,以及优秀的通信框架的写法。
3. 《深入理解Java虚拟机(第2版)》 这本书我自己没看过,但听很多读过的同学的评价都是不错的,要真正的理解Java语言,就必须真正的去了解Java虚拟机,这样才能知道它的运行机制,例如Java编译、Java线程机制、Java内存管理等。
4. 《Java性能优化权威指南》 这书是大神级人物写的,绝对值得一看,对排查问题、性能优化都有不小的帮助。
5. 《Oracle JRockit: The Definitive Guide》 这书也是一本老书了,2010年写的,同样也是大神级人物写的,只有英文版,当年读这书对我学习JVM起到了很大的帮助,尽管Java同学主要用的是OpenJDK,而不是JRockit,而正因为有了对比,会对Java语言的实现有更深的理解。
6. 《垃圾回收算法手册:自动内存管理的艺术》 中文版是2016年的,英文版是2011年的,这书对深刻的理解自动内存管理会有很大的帮助,毕竟其实自动内存管理这个领域的实现原理很多年是没有太大改变的,但实现的细节上有了很多的优化。
7. 《性能之巅:洞悉系统、企业与云计算》 这书放在自己的想读列表里很久了,看评价应该是不错的,之前也说过,对于编程进阶的能力而言,查问题的能力是非常重要的一方面,这书应该有帮助,看过的同学也欢迎回复评价下。
还有很多书,先就推荐这些了,不过发现如果是论编程进阶相关的书,看起来还真有点缺,大部分书都是多年前写的。
系统设计相关
1. 《架构即未来:现代企业可扩展的Web架构、流程和组织(原书第2版)》 这书没看过,不过英文版我记得有点印象,评价好像不错的,欢迎看过的同学来说说。
2. 《大型网站系统与Java中间件开发实践》 老伙伴华黎几年前写的书,对于开发大型的Web系统的同学而言是很值得学习的。
3. 《SRE:Google运维解密》 理论上这不算系统设计的书,但运维其实是系统设计中很重要的要考虑的环节,我以前见过有些架构师设计的系统到上线的时候才发现少考虑了东西,导致上线没法上,我自己其实也干过这样的书,所以对于架构师而言,通过读这些书来扩充视野是非常重要的。
系统设计相关的书写的好的还真是有点少,当然也有原因是我看这方面的书很少。
其他
1. 《智能时代》吴军 很值得推荐,看这书能更充分的感受到智能时代带来的冲击,例如智能+工业可能会发生什么。
看这些类型的书对自己在技术方向的判断上是能有不错的帮助的。
1. 《人类简史》 很多地方都在推荐,对我来说是看了后才更加明白了人类发展,例如人类的协同演进。
2. 《大学之路》 吴军 可能很多人都觉得这书是在讲怎么选美国的大学,以及怎么考,但看了后我觉得最值得推荐的是看这书才明白了高等教育的两个主流理念,以及美国、英国这些大学是怎么建设的,为什么和国内的高等教育会不同,强烈推荐。
3. 《鞋狗》 看Nike的创始人是怎么把Nike做起来的,挺有意思的,可能是也很对胃口吧,兴趣和专业,是能做起来的关键。
杂书其实可以推荐的还真很多,不过也就这么点时间,还是不写太多了。
大家有什么值得推荐的书,也欢迎回复。
作者:毕玄
文章来源:微信公众号HelloJava
`
【技术干货】如何设计TinyURL
https://mp.weixin.qq.com/s/MJTASuSx72hKXNOQcsSYWw
经典系统设计面试题解析:如何设计TinyURL(最终篇)
https://mp.weixin.qq.com/s/Jo9UM9XQXHbHO-4j3HQvCA
https://www.educative.io/courses/grokking-the-system-design-interview/m2ygV4E81AR
`
1. Why do we need URL shortening?
2. Requirements and Goals of the System
3. Capacity Estimation and Constraints
4. System APIs
5. Database Design
6. Basic System Design and Algorithm
a. Encoding actual URL
b. Generating keys offline
7. Data Partitioning and Replication
8. Cache
9. Load Balancer (LB)
10. Purging or DB cleanup
11. Telemetry
12. Security and Permissions
`
如何设计一个高并发网关
https://mp.weixin.qq.com/s/EHExEBDEYFMkGi5U7PMSoA
汇总java生态圈常用技术框架、开源中间件,系统架构、数据库、大公司架构案例、常用三方类库、项目管理、线上问题排查、个人成长、思考等知识
https://github.com/aalansehaiyang/technology-talk
上面的评论是肿么了呀?
每天学自学 3~4 小时 java ,一年后能到什么程度?
https://www.zhihu.com/question/449001544/answer/2304855581
`
自学,不参与真实项目,很多东西你是没机会体验到的,也就很难有机会借此获得提高,成长受限。
====
我可以这样说,哪怕你每天学8个小时,一年后还在学,没去工作,虽然可能你掌握了很多java技能,但不想办法通过做项目变现,这一年你属于白学。
为什么这样说呢?
1 学习java的模式和工作中用Java的方式截然不同。
2 这就导致了通过自学掌握的java技能和项目里用到的Java技能完全不同。
3 更何况,项目里用到的很多java技术或项目级经验,通过自学没法学到,或很难学好。这就就不说分布式组件这种平时自学甚至连环境都搭不好的技术,还是拿最基础的java集合举例。
所以如果仅靠自学,哪怕你通过视频和各种资料完成了各种所谓学习路线,可能也就堆砌些api的用法,说穿了可能也就通过运行一些好看的代码来自欺欺人,真的要达到能干活的程度,基本不大可能,甚至估计连找工作面试的资格都没。那一般是怎么通过自学找到Java的活呢?
1 第一周,搭建jdk,idea环境,mysql数据库环境。
2 第二周到第一个月,运行书里的代码,熟悉Java核心技术和jdbc,入门Java可以看这本书。
3 第二个月,入门spring boot,关键掌握通过该框架+JPA做增删改查业务的能力,这方面可以用我出版的书。
`
初级Java程序员如何快速提升自己的能力(真心求教)?
https://www.zhihu.com/question/38082180/answer/2302260486
`
在讲自学Java的方法和路径前,首先明确如下的观点。
1 学Java的唯一目标是找工作,所以只需要学到能帮你找到工作的最低限度。而本文给出的学习路径会让你只学到这个最低限度。至于之上的其它Java技能,等你找到工作后在项目中学,这比你自学的效率不知道要高多少。
2 找工作时,面试官只根据简历来筛选候选人,只根据面试来考核候选人的技能。一定不是根据候选人看了多少书运行通多少个项目来判断候选人的能力。所以不仅要学好Java,还要写好简历,更要掌握相关面试技巧。
3 学习Java技能,一定得分两个步骤,第一个步骤是入行,找到并从事第一份java工作,在此基础上再考虑提升的事情。在没入行的阶段,可以只学能帮你找到第一份工作的技能,这样一方面能最大程度上压缩你的学习时间,从而不会让你走过多的弯路,另一方面,一些高级的Java技能,比如数据库调优或分布式技能,不仅面试不会问,而且这些技能一定只能在项目中通过实际场景学,自学未必能学好。说了那么多其实想表达的意思是:在没入行阶段,别拔苗助长,先只学能帮你找到工作的技能。其实如果能在短时间(比如2,3个月)内学好这些技能,也是一个很大的挑战。
随后再讲自学Java的路线,可以分Java核心(Java Core),数据库和Spring Boot方向来学。
总结:
1 自学java一定要以找工作为目标。因为衡量学习成败的标准不是运行通多少项目,掌握了多少技能点,只能是“是否找到Java相关工作”
2 本文不仅讲述了自学Java的路线,而且还讲述了写简历和面试的相关技巧。这些技巧是我从辅导我朋友和学员的诸多案例中总结出来的,对大家多少会有些帮助。
3 学习Java一定得分两步走,先入行再提升,在入行阶段一定别过多学习高深的技能。
`