Java的核心理念症结是习题太多!
后方预警系统:看三百三十一提问你可能会想舍弃。生前Java全靠自修并通过校招领到腾讯offer,撷取一下生前自修Java的认识论。
本提问将近2万+字,而且十分庞克,提议大家可以雅雷珍藏避免误入。
Java控制技术栈说毕竟的习题十分多,绝更为重要是学两门词汇和两个资料库那么单纯。
要让他们的流程标识符在网络流量洪水下还能确保结论恰当,他们须要处置好mammalian难题。
前述生产自然环境中他们的应用应用领域很大是分布式系统的,他们还须要加进各种架构(rpc服务项目架构、NSS、除关系型资料库还可能加进nosql、newsql),还须要掌控分布式系统结构设计科学知识。
当流程碰到缓存飙升的难题他们摸查的时候须要掌控JVM科学知识。
在直面繁杂销售业务情景为了写下典雅、可移植性强的标识符他们须要掌控流程词汇以及DDD(应用领域驱动力结构设计)。
部分大数据情景他们还须要加进动态排序架构flink或spark。先贴两张生前归纳的Java控制技术栈脑图:
C词汇的自学很大要遵从两个核心理念准则:“方法论+课堂教学”,逐渐插值环环相扣的过程。
如前所述生前的实战经验归纳了两个自学新科学知识的认识论:
这里难忍重新整理了一些课堂教学中踩坑归纳的实战经验,希望大家少走弯路。
很大要方法论结合课堂教学,不要只看书,很大要多动手看标识符、写标识符。不要一开始就抱着大块头的书去啃,也不要从头到尾啃,要抓重点。一开始掌控最基本的科学知识就可以,然后就可以开始课堂教学了。自学提议看书+视频结合的方式,视频会更生动,不会那么枯燥。下面再详细讲讲应该如何自学Java?
(一)排序机基础课程
打牢基础!打牢基础!打牢基础!重要的事情说三遍!
基础十分重要,不管你以后从事什么方向,应用应用领域开发也好,大数据开发也要,客户端工程师也好,要想吃得开必须依赖这些基础课程:操作系统、组成原理、排序机网络、数据结构、算法、资料库。
排序机基础课程的自学,我之前有提问过,大家直接戳下面的提问,这里不做赘述:
(二)Java词汇基础
Java词汇基础科学知识主要包含如下内容:
集合:list、map、set等。反射mammalian:synchronized、volatile、final关键字。IO:基本IO的体系包括有InputStream , OutputStream, Reader/Writer,文件读取,各种流读取等。 NIO、AIO的区别和使用情景。异常异常类继承体系:
java 8 函数式编程书籍推荐:
(1)入门强烈推荐《head first java》
词汇十分轻松,相比《java编程思想》而言更适合入门。
(2)mammalian编程自学推荐《javamammalian编程实战》
豆瓣评分9.0分。深入浅出地介绍了java线程和mammalian,是一本完美的javamammalian参考手册。英文功底好的可以直接阅读原版,翻译的并不是那么好。
关于Java词汇从入门到进阶的书籍阅读顺序,可以直接看下面这个文章:
这些书籍的电子版已经重新整理好了。
须要的直接戳这里领:排序机必看经典书籍(附pdf下载),请注意查收~
须要的戳下面链接下载这份书单对于CS自学的同学帮助十分大且十分系统,这些书籍的电子版已经重新整理好了。
须要的直接戳这里领:排序机必看经典书籍(附pdf下载),请注意查收~
(三)JVM
JVM体系结构概览:
核心理念习题重新整理:
书籍推荐:
(1)jvm自学推荐《深入理解java虚拟机》
对于理解java虚拟机缓存管理、类加载机制、常用调优方法十分有用。
(2)另外推荐一本网络书籍《深入理解java缓存模型》
书中首先介绍了java缓存模型的抽象以及happens-before。然后详细讲解了重排序以及顺序一致性原理,最后介绍了volatile的缓存语义实现以及锁机制。
(四)资料库
1、关系型资料库-mysql习题归纳:
推荐书籍:
(1)入门篇-《MySQL必知必会》
十分薄,只有200来页,花几天时间就能刷完,SQL 语法入门好书,推荐!
这本书的特点是注重实用性,紧贴实战须要,基本没有什么方法论的堆砌,完完全全就是一本课堂教学指南。读懂后基本mysql的用没难题了。
(2)进阶篇-《高性能mysql》
本书深度讲解了mysql引擎架构、索引结构设计、SQL查询优化的实战技巧、复制、分片等原理,还有运维技能。
书很厚,内容十分全面,适合精读,弄清整本书,也就能精通资料库了。
这些书籍的电子版已经重新整理好了。
须要的直接戳这里领:排序机必看经典书籍(附pdf下载),请注意查收~
2、SQL VS NoSQL VS NewSQL的区别是什么?
sql通常用来指结构化查询词汇或者代指关系型资料库如mysql、PostgreSQL。
NewSQL:关系型数据模型,并提供了良好的伸缩性等特性。
他们三者之间的核心理念差别是什么呢?
特性SQLNoSQLNewSQL是否关系模型关系模型不遵从关系模型是ACID是否,CAP是SQL支持支持schema-free两者都支持(schema-free/schema-fixed)OLTP支持不佳不支持支持的十分好伸缩性(scaling)垂直伸缩水平伸缩都支持是否分布式系统资料库否是是应用应用领域情景大数据,社交网络,IOT电商,通信示例MySQL,PostgreSQLHbase,Cassandra,DynamoDB,MongoDBVoltDB, CockroachDB, NuoDB推荐书籍:
《Hbase权威指南》
《Cassandra权威指南》
这些书籍的电子版已经重新整理好了。
须要的直接戳这里领:排序机必看经典书籍(附pdf下载),请注意查收~
(五)并发编程
生产自然环境中,他们的标识符通常要应对巨大的网络流量,因此他们必须处置后mammalian难题。mammalian难题处置不好,会造成不可预料的损失,严重会造成巨大资损。典型的情景有库存扣减、抢优惠券等。
mammalian编程习题重新整理:
来自网友归纳:https://www.processon.com/mindmap/60f618351efad454a76e1fa7 https://github.com/CL0610/Java-concurrency
推荐书籍:《Javamammalian编程实战》
这些书籍的电子版已经重新整理好了。
须要的直接戳这里领:排序机必看经典书籍(附pdf下载),请注意查收~
(六)常用开发架构-spring
spring是两个轻量级java开发架构,最早由Rod Johnson,目的是解决企业级应用应用领域开发的销售业务逻辑层和其他各层的耦合难题。其最根本的使命是解决企业级应用应用领域开发的繁杂性。
spring的核心理念:控制反转(IOC)和面向切面编程(AOP)。
spring的优点:
解耦,简化开发。开发者可以将所有对象创建和依赖关系维护,交给spring管理。AOP编程的支持。可以方便的实现对流程进行权限拦截、监控等功能。十分方便集成各种优秀架构。如mybatis、hibernate。降低javaee api的使用难度,进行了比较好的封装。spring模块组成
Spring Core:Spring核心理念模块,包含控制反转(IOC)和依赖注入(DI)。
spring-beans 模块:提供了BeanFactory工厂模式的两个经典实现(Spring将管理对象称为Bean)
Spring Context:访问定义和配置对象的媒介。
Spring AOP:面向切面编程AOP实现,以动态代理控制技术为基础,允许定义各种拦截器,方便解耦。
Spring JDBC:提供了JDBC的抽象层,消除JDBC编码的繁琐工作和不同资料库厂商的处置逻辑,简化JDBC。
Spring JMS:JAVA消息发送和接收服务项目。
Spring ORM:ORM架构支持,集成了hibernate、jpa和jdo用于资源管理、dao的实现和事务。
Spring Web:为创建Web应用应用领域流程提供支持。
Spring Test:提供了对 JUnit 和 TestNG 测试的支持。
Spring Aspects:该模块为与AspectJ的集成提供支持。
Spring Web:Spring架构支持与Struts集成,为如前所述web的应用应用领域流程提供了上下文。从用户视角看:
spring在面试中问的频率十分高,是他们必须掌控使用和结构设计原理的开发架构。
(七)常用开发架构-mybatis
MyBatis 是一款优秀的持久层架构,它支持自定义 SQL、存储过程以及高级映射。
MyBatis 可以通过单纯的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为资料库中的记录。
官网:https://mybatis.org/mybatis-3/zh/index.html
(八)流程词汇
流程词汇是一套被反复使用、多数人知晓、经过分类的、标识符结构设计实战经验的归纳。
使用流程词汇的作用是为了标识符可重用性、增加可移植性,让标识符更容易被他人理解、确保标识符可靠性。流程词汇使标识符编写真正工程化。
遵从流程词汇七大准则:单一职责准则、开闭准则、里氏代换准则、依赖倒转准则、接口隔离准则、迪米特法则、合成/聚合复用原则
使用流程词汇能够增加系统的健壮性,易修改性和可扩展性,当你进行开发的软件规模比较大的时候,良好的流程词汇会给编程带来便利,让系统更加稳定,这些在自己编写小流程的时候是体现不出来的。 须要掌控23种核心的流程词汇:
https://refactoringguru.cn/design-patterns/catalog
(九)分布式系统
生产自然环境中他们的应用应用领域部署通常是分布式系统、多机器部署的,因此会涉及分布式系统难题的处置,如服务项目跨机房调用、消息通信、分库分表等等。是十分重要且有难度的一块。
这是网上搜到的淘宝3.0架构:服务项目化。
自学路径:
(1)这里首先推荐书籍《数据密集型应用应用领域系统结构设计》
这本书科学知识面十分广,涵盖了分布式系统结构设计的方方面面,将深奥的分布式系统科学知识深入浅出的讲解,十分容易懂。英文较好的可以直接读影印版,难度不大。看完这本书后,方法论基本上入门了。
网上的评价都十分高:
(2)然后还须要课堂教学。
课堂教学可以看经典的公开课,然后做配套的lab。
这里推荐mit 6.824: https://pdos.csail.mit.edu/6.824/ https://pdos.csail.mit.edu/6.824/schedule.html
(十)大数据排序
随着他们进入DT时代,数据成为最重要的资产,数据的处置变得越来越重要。
Flink 诞生于欧洲的两个大数据研究项目 StratoSphere。该项目是柏林工业大学的两个研究性项目
早期,Flink 是做 Batch 排序的,但是在 2014 年,StratoSphere 里面的核心理念成员孵化出 Flink,同年将 Flink 捐赠 Apache,并在后来成为 Apache 的顶级大数据项目,同时 Flink 排序的主流方向被定位为 Streaming,即用流式排序来做所有大数据的排序。
flink资料推荐:《如前所述Apache Flink的流处置》
Apache Flink PMC成员力作,书中展示了如何使用Flink DataStream API实现可伸缩的流式应用应用领域,以及怎么样在销售业务自然环境中持续运行和维护这些应用应用领域。对于入门是十分好的一本书。
(十一)实战项目推荐
最后,要想打好Java基础,很大要多练手实战项目。推荐几个优质的练手的项目,github star都十分高。
这些项目都十分贴近前述应用应用领域,麻雀虽小五脏俱全。
1、电商系统mall
mall项目是一套电商系统,包括前台商城系统及后台管理系统,如前所述SpringBoot+MyBatis实现,采用Docker容器化部署。
前台商城系统包含首页门户、商品推荐、商品搜索、商品展示、购物车、订单流程、会员中心、客户服务项目、帮助中心等模块。 后台管理系统包含商品管理、订单管理、会员管理、促销管理、运营管理、内容管理、统计报表、财务管理、权限管理、设置等模块。
系统架构:
销售业务架构:
github:macrozheng/mall
2、秒杀系统
两个完整的秒杀系统,加进了诸多开发架构:MQ、SpringBoot、Redis、Dubbo、ZK、Maven,lua。
github:qiurunze123/miaosha
3、两个如前所述Spring Boot & MyBatis的种子项目
用于快速构建中小型API、RESTful API项目~
github: lihengming/spring-boot-api-project-seed
4、两个博客系统ForestBlog
如前所述Spring+SpringMVC+Mybatis
github:saysky/ForestBlog
不过!上面推荐的这些项目虽然star很高,但是做的人也十分多。
此类XXX管理系统些在简历上目前大厂是一点竞争力都没有的,面试官都疲了,培训机构清一色的XXX管理系统,springboot全家桶。必须得差异化竞争。
如果你想让自己的项目样面试官眼前一亮,我在这里给大家推荐几个优秀的项目,后面我也会逐个实现给大家:自己实现spring ioc/aop、RPC架构、MQ架构、KV存储、分布式系统锁。欢迎大家关注+STAR:
这些项目和互联网大厂控制技术栈无缝结合,通过自己实现分布式系统组件「也就是大家平时说的造轮子」,为什么要造轮子?一方面是避免成为调包侠或CRUD工程师,另一方面是提高自己的控制技术深度,让自己的职业道路更宽。
这一系列文章我目前已经写了5篇,后面会在我的宫伀号陆续撷取给大家,大家可以关注我的宫伀号【编程自学指南】追更。
目前已经更新的2篇给大家贴上:
我撸的这2个项目已经被很多同学用来做毕设和面试加分了:
另外,在实战阶段,应该重点关注以下几点:
l 文档编写:编写详细结构设计文档也是流程员必须具备的一项技能,要自学结构设计文档的编写格式,编写规范。
l 流程词汇: 标识符编写时要注意流程词汇,尽可能提高标识符的可读性、可重复使用性。
l 边界条件的校验和处置:在前述开发过程中,系统出现最多的难题都集中在边界条件的校验和处置上,所以在前述开发过程中,应该要有意识的考虑这些难题。下面这些高赞提问你可能也会感兴趣:
希望归纳的这几Cybard自学认识论能对你有所帮助。
如果觉得不错,可以给个赞。