Java后端,最全知识点

你可能有所感悟。零散的资料读了不少,可是很难有提高。处处是干货,可是并没什么用,简单来讲就是缺少系统化。另外,噪音太多,雷同的框架一大把,我不至于全都要去学了吧。java

这里,根据基础、Java基础、Java进阶给分了下类,挑的也都是最经常使用最重要的工具。python

 

 

基础知识

数据结构

基本的数据结构是很是重要的,不管接触什么编程语言,这些基本数据结构都是首先要掌握的。具体的实现,就体如今java的集合类中。这些数据结构,就是这些复杂工具的具体原始形态,要烂记于心。程序员

 

 

经常使用算法

算法是某些大厂的门槛。毫无疑问,某些参加过ACM的应届生,可以秒杀大多数工做多年的码农。算法可以培养逻辑思惟能力和动手能力,在刚参加工做的前几年,是很是大的加分项。但随着工做年限的增长,它的比重在能力体系中的比重,会慢慢下降。web

算法的学习方式就是经过不断的练习与重复。不精此道的同窗,永远不要试图解决一个没见过的问题。一些问题的最优解,可能耗费了某个博士毕生的精力,你须要的就是理解记忆以及触类旁通。最快的进阶途径就是刷leetcode。面试

对于普通研发,排序算法和时间复杂度是必需要掌握的,也是工做和面试中最经常使用的。时间充裕,也可涉猎动态规划、背包等较高阶的算法知识,就是下图的左列。算法

 

 

书籍

《算法导论》
《编程之美》
《数学之美》数据库

数据库基础 MySQL

MySQL是应用最广的关系型数据库。除了了解基本的使用和建模,一些稍底层的知识也是必要的。编程

MySQL有存储引擎的区别。InnoDB和MyISAM是最经常使用的,优缺点应该明晓。ACID是关系型数据库的基本属性,须要了解背后的事务隔离级别。脏读、幻读问题的产生缘由也要了解。后端

为了加快查询速度,索引是数据库中很是重要的一个结构,B+树是最经常使用的索引结构。因字符集的问题,乱码问题也是常常被说起的。设计模式

专业的DBA一般能帮你解决一些规范和性能问题,但并不老是有DBA,不少事情须要后端本身动手。

 

 

书籍

《MySQL技术内幕——InnoDB存储引擎》
《高性能MySQL》
《高可用MySQL》

网络基础

网络通讯是互联网时代最有魅力的一个特色,能够说咱们的工做和生活,每时每刻都在和它打交道。

链接的三次握手和四次挥手,至今还有不少人很是模糊。形成的后果就是对网络链接处于的状态不慎了解,程序在性能和健壮性上大打折扣。

HTTP是使用最普遍的协议,一般都会要求对其有较深刻的了解。对于Java来讲,熟悉Netty开发是入门网络开发的捷径。

爬虫是网络开发中另一个极具魅力的点,但建议使用python而不是java去作。

 

 

书籍

《HTTP权威指南》
《TCP/IP详解 卷一》

操做系统 Linux

科班出身的都学过《计算机组成机构》这门课,这很是重要,但很枯燥。结合Linux理解会直观的多。鉴于目前大多数服务器环境都是Linux,提早接触可以相辅相成。

须要搞清楚CPU、内存、网络、I/O设备之间的交互和速度差异。对于计算密集型应用,就须要关注程序执行的效率;对于I/O密集型,要关注进程(线程)之间的切换以及I/O设备的优化以及调度。这部分知识是开发一些高性能高可靠中间件的前提,没法绕过。

对于Linux,首先应该掌握的就是平常运维,包括经常使用命令的使用和软件安装配置。正则也是必需要掌握的一个知识点。

脚本编程对后端来讲是一个很是大的加分项。它不只能增长开发效率,也能在一些突发问题上使你游刃有余。

 

 

书籍

《UNIX环境高级编程(第3版)》
《鸟哥的Linux私房菜》
《Linux内核设计与实现》
《Linux命令行大全》

相关文章

《Linux上,最经常使用的一批命令解析(10年精选)》

Java基础

JVM

Java程序员的最爱和噩梦。以oracle版本为准,各个jvm版本之间有差异。JVM的知识包含两方面。一个是存储级别的,一个是执行级别的。

以存储为例,又分为堆内的和堆外的两种,各有千秋。垃圾回收器就是针对堆内内存设计的,目前最经常使用的有CMS和G1。JVM有很是丰富的配置参数来控制这个过程。在字节码层面,会有锁升级以及内存屏障一类的知识,并经过JIT编译来增长执行速度。

JVM还有一个内存模型JMM,用来协调多线程的并发访问。JVM的spec很是庞大,但面试常常说起。

另外,jdk还提供了一系列工具来窥探这些信息。包含jstat,jmap,jstack,jvisualvm等,都是最经常使用的。

 

 

书籍

《深刻理解Java虚拟机》

JDK

如今,终于到了java程序员的核心了:JDK,一套依据jvm规范实现的一套API。咱们日常的工做,就是组合这些API,来控制程序的行为。

jdk的代码很是庞大,内容也很是繁杂。最重要的大致包括:集合、多线程、NIO、反射、文件操做、Lambda语法等。这部份内容加上下面的SSM,基本上就是大多数小伙伴玩耍的地方。

假如说数据结构和算法是理论,这里就是支撑理论的实现。Java玩的好很差,就是说这里。

 

 

书籍

《Effective Java 中文版》
《数据结构与算法分析:Java语言描述》

SSM

你可能会用SSM开发项目,以为编程无非就这些东西。设计模式烂记于心,IOC、AOP手到擒来。这里集中了大部分同行,有些可能到此为止就Ok了,由于有些同窗接下来的重点是项目管理,而不是技术。

SSM最擅长的是Web开发。目前的表现形式逐渐多样化,随着先后端分离的盛行,Restful这种有着明确语义的模式逐渐流行。

 

 

书籍

《Head First 设计模式》
《Spring揭秘》
《SpringBoot揭秘》
《MyBatis技术内幕》
《深刻剖析Tomcat》

其实跟着文档走一遍就好了,不少书籍就是翻译而已。

并发编程

如今的服务器都是多核的了,并发编程也来越多。java有多种建立多线程的方式,不过目前使用线程池的多一些。线程池的基础就是AQS,基于AQS,又有不少的工具类扩展。

java同时有不少加锁和线程同步的方式,锁有乐观锁/悲观锁之分,又有公平锁/非公平锁之分,写一段死锁代码仍是有点难度的。

有两个问题被考察的频率很是高,一个是ABA,一个是伪共享。并发编程通常和网络编程配对,提供对某个问题的一系列解决方案。

这是java中一块难啃的骨头。

 

 

书籍

《Java核心技术系列:Java多线程编程核心技术》
《Java性能权威指南》
《Java并发编程实战》

性能优化 & 故障排查

有人认为这应该是SRE的范畴,但一般最熟悉业务的倒是开发,技术并无什么明显的界限。掌握这些内容,会让你在芸芸大众中脱颖而出。

从操做系统的内核优化到数据库的索引和事务优化,这部分的技能是创建在牢固的基础之上的。也就是操做系统的基础。

操做系统的每一个组件都有可能出现问题,对于一个java后端来讲,要可以很是容易的定位到这些问题。好比常见的内存溢出问题。

 

 

书籍

《性能之巅:洞悉系统、企业与云计算》
《高性能Linux服务器构建实战》

Java进阶

下面有些知识点,界限是很是模糊的。它们你中有我,我中有你,能够说是一个总体。

Redis

缓存能够说是计算机系统中应用最普遍的技术了。对于分布式缓存来讲,最经常使用的就是Redis了。因为其数据结构丰富,被应用的场景愈来愈多。

基本的5种数据类型都知道,但你要说出其余几种,给人的印象就不同了。Redis有主从和Cluster两种集群模式,高可用配置也不相同。

Redis几乎能适应除搜索外的全部互联网业务,对于其使用来讲,一些规范限制是很是有必要的。通常速度越快的系统,越容易被长尾操做给拖死。因此,对于info命令的内容,也应有了解。

有三个点要尤为注意:分布式锁、限流,以及和源数据的同步问题。

 

 

书籍

《Redis实战 》
《Redis开发与运维》
《Redis设计与实现》

相关文章

《这多是最中肯的Redis规范了》

Kafka

MQ是分布式系统中很是重要的组件,目前使用最普遍的就是Kafka。除了用在大数据场景中,Kafka也可以在业务系统中使用。

Kafka的速度很是快,根据ACK的级别配置,可靠性会增长,但速度会减缓。对于消息系统来讲,监控报警是很是重要的一环,可以提早预知系统的问题。Kafka的集群自身就是高可用的,依赖Zookeeper组件,了解一些基本概念,包括ISR,可以更加详细的了解这个过程。

 

 

书籍

《Kafka入门与实践》
《Kafka技术内幕》

相关文章

《Kafka基础知识索引》

分库分表 ShardingJDBC

随着数据的增加,MySQL自己出现了瓶颈。分库分表是针对关系型数据库的一套解决方案,把它改形成分布式数据库。

根据切分层次,最像回事的是在代理层和驱动层进行切入。ShardingJDBC就是在驱动层的一个组件。

组件自己只是一个问题。在真正的切分以前,会有垂直拆分和水平拆分之分。咱们的线上业务也要不停机的进行拆分和切换,一个全量和增量同步工具都是须要的。

有条件经历这个过程的,都是一笔宝贵的财富。它不只在技术上,并且在流程上都有诸多挑战。你会体验到技术、流程、管理,是不分家的。

 

 

相关文章

《“分库分表" ?选型和流程要慎重,不然会失控》

微服务 & 中间件

目前最火的微服务架构就是SpringCloud。这对熟悉SSM开发的同窗来讲, 是很是容易上手的。微服务有注册中心、RPC、负载均衡、熔断限流、网关等关键组件,有些组件有不少不一样的替代品。

 

 

微服务拆分后又引伸出一些列问题,须要一些其余中间件支持。好比监控报警、ELKB、配置中心、调度中心、调用链等。虽然没有微服务也须要它们,但明显组合起来,效果会好的多。 各类A/B测试,金丝雀,灰度等,基本是终极目标之一。
微服务是一个复杂的总体,同时融合了技术和流程管理方面的内容。

书籍

《可伸缩服务架构:框架与中间件》
《Spring Cloud与Docker微服务架构实战》
《架构修炼之道》

分布式

当服务器数量增长,一些服务,包括上面提到的微服务,都须要进行协调和交互。这就是分布式系统。

分布式的理论基础有CAP、BASE等。针对一致性,有特别多的算法,其中Raft做为易懂的新贵,使用愈来愈普遍。

这部分侧重于理论,一旦开始进入实践,写出来的都是些你们伙。这里有一篇文章,虽然不是很全,聊表心意吧。

 

 

相关文章

《也浅谈下分布式存储要点》

书籍

《NoSQL精粹》
《ZooKeeper:分布式过程协同技术详解》
《从Paxos到Zookeeper分布式一致性原理与实践》

支撑技术

基本运维

我倾向于基础架构和运维不分家,由于它们有太多重合和类似的地方。基本运维和架构配合起来,典型的特色就是平台化+规范化。

这里是检验综合素质的地方,有广度也有深度。

 

 

相关文章

《这么多监控组件,总有一款适合你》

书籍

《奔跑吧Ansible》
《Docker——容器与容器云》
《Kubernetes权威指南》
《Jenkins权威指南》
《深刻理解Nginx》

安全

安全无小事,建筑工地和系统安全同样的道理。熟悉一些经常使用的攻击和加密解密算法是必要的。

就像是你给家里的门上锁:可以阻挡大部分心怀不轨的人,但没法阻挡无所顾忌的暴徒。

 

 

End

你可能发现并无本身关注的组件。这不奇怪,好比我的喜欢的的ES,就找不到一个合适的位置。这里只是最主要的一点内容,就已显繁杂,一个大杂烩并不见得好。

值得提醒的是,这些知识,是众多发展路线上的一个分支。可能有的朋友,目前只在其中的一个点上面奋斗,缺少所谓的广度;也可能有的朋友,有着全栈的标签,却作着SSM的工做。不一样的公司须要的技术水平不尽相同。一个专一ERP业务的公司,会在项目管理上多些文章;一个专作IM的团队,可能对网络开发倒背如流。

相关文章
相关标签/搜索