这21 张思维导图,足足让我肝了半个月的「后端技术学习路线」长啥样?(附全套Java资料)

Java后端以及部分前端思维导图 今天分享一下我在Java前后端的学习内容,将我学过的知识汇聚成了思维导图,仅供参考,仅仅只是我个人所掌握的,一定是还有很多的技术,可能是我没有学到,也可能是我忘记写入,总之这份导图只代表我个人所学,请大佬见谅,有哪里不足或者有更好的建议,欢迎各位留言吐槽,有哪里不懂的可以私信我,我会一一作答,话不多说,上图. Java 前端 HTML5 语义化标签 header nav article section aside 阅读详情

 

写的文章也都是围绕着这个主题,这位读者的问题让我突然意识,我忽略了读者群体里有很多是初学编程,或者刚接触计算机的同学。

作为一个普通大学非计算机专业,自学后端技术进入腾讯从事后端开发工作,我自己也是非科班自学计算机成功转行软件开发(有想听转行之路经历的吗,可以留言告诉我,人多就写写),体会过当初想学又不知从何学起的迷茫,还好最后摸索出了一条正确学习的路线。

思来想去,学习方向和路线很重要。比起具体的技术细节,可复制的经验、清晰的学习路线,是大部分人更加需要的东西。

朝着正确的方向努力否则只会离目标越来越远,不是吗?

只顾着写各种技术,不告诉大家这个知识点在后端技术图谱的什么位置,有点盲人摸象不知全貌的感觉,很多在我看来大家都懂的内容,其实只是我以为,信息差是客观存在的,抹平信息差是分享的价值所在。

所以这一期文章柠檬哥足足花了半个月时间,整理了一张后端技术学习路线思维导图,来和你聊聊:

要成为一个符合 BAT、TMD 大厂要求的后端技术工程师,到底需要学哪些技术?后端技术学习路线是怎样的?

学习路线

话不多说,直接上刚画完的后端技术学习路线思维导图框架:

图中的每一个节点都可以点开,我都做了细分,在后面章节逐个展开介绍。

后端技术学堂开课半年以来,写了 30+ 篇原创文章,内容有Linux、数据库、算法、架构、微服务、甚至中间还写了一个系列的Golang基础教程,真算得上是天马行空,这就是才华横溢吧(狗头)。

历史文章都在后端知识体系范畴内,你甚至可以对照下我历史文章分享的内容,都可以在我今天整理的这张学习路线图中找到相应的位置,后续更新的文章我也会归类到其中,方便大家归纳复习。

计算机基础

不管是后端开发还是前端开发,说到底我们所有的软件开发都是在计算上编写程序,虽然对于大部分人来说,真正开始写代码的时候很少会让你去解决计算机底层的问题,不接触不代表不重要,计算机基础是最重要的。

后端开发工作中经常用到 Java、C++、Python、Golang 这些语言称为高级编程语言,称为高级是它们接近我们日常交流的自然语言,离计算机底层远,但所有的高级语言最终都会转化成汇编->计算机指令->控制流操控计算机硬件,所以学习计算机构成和工作原理、操作系统这些基础知识,能够加深我们队高级语言的理解。

那我们一直说的计算机基础到时是什么?计算机科学技术 CS(Computer Science)作为一门专业课程,就和其他工科课程一样有自己的理论体系,如果你是计算机专业的同学不用我来教该学什么,计算机专业大学四年学校教的那些就是基础,别小看你在学校学的那些看起来没啥用的课程。我这有一份中中科大的计算机技术本科主要课程结构安排。

一流大学的计算机专业要学什么可以对照着看下,从学科数学理论基础、计算机体系结构、软件工程方法等等维度展开。

那如果你不是计算机相关专业的想转行,也不要被吓到了,毕竟这是人家四年时间的学习内容,本科的培养目标不仅仅是培养出一个软件工程师,本科学习还是面向硕士博士的基础培养,注意是计算机科学专业,名字里有个词叫「科学」,我这篇文章要说的 BAT 公司后台软件开发,可以认为是「工学」方向,更多的是服务于工程开发。

如果只是面向后台开发和工作面试,或者你是非计算机专业想转行,社畜没有太多时间去学习大学那些理论课程,那帮我把计算机基础的范围缩小到下面这 4 门专业课:计算机组成原理、计算机网路、操作系统、数据结构。

计算机组成原理

这门课程让你了解计算机的组成和工作原理,要学习的内容包括:

  • 数据在计算机中的表示和运算(柠檬说:计算机不识数,只认得高低电平,所以数据在计算机内部都用二进制的0和1表示)

  • 存储系统(柠檬说:数据和程序指令都要存储下来,学习计算机的存储层次,内存、外存、高速缓存、虚拟存储技术)

  • 指令系统(柠檬说:写的代码最终都要被翻译成计算机指令,指令格式和寻址方式有多种,控制器来控制指令执行)

  • 中央处理器(也就是 CPU 计算机的大脑,主要构成是运算器和控制器)

  • 总线(柠檬说:计算机的血管动脉,连接计算机各功能组件,用来传输数据、地址信号、控制信号)

  • 输入输出系统(柠檬说:Input/Output 也叫 IO 系统,连接和管理各种外部设备比如键盘、显示器等等)

计算机网络

世界上第一台通用计算机「ENIAC」于 1946 被发明出来,如其名字一样仅仅是用于计算,在后来计算机越来越多,如果没有网络每台计算机都将成为一个孤岛,也不会有现在互联网的繁荣,「计算机网络」这门课程的学习路线非常清晰,就是围绕着如何让地理位置上不同的计算机连接起来,并高效可靠的交换数据信息,实现人在家中做,天下事尽知。

计算机网络有分层次,根据各层属性和特点,分为:

  • 物理层

  • 数据链路层

  • 网络层

  • 传输层

  • 应用层

这个层次划分从上到下就是一个网络数据包的接收路径,反之就是发送路径。既然要交换信息肯定得商量一套通用的协议,就像我们和老外交流,要么他们学中文要么我们学英文,反正得统一出一个标准语言出来,这在计算机网络中称之为「通信协议」。如上述的网络分层,每层都有各自适配的协议,所以计算机网络的学习基本就是围绕着分层协议的学习。

操作系统

操作系统也是一种软件。你熟悉的微软Windos操作系统,后台开发熟悉的各种发行版的 Linux 系统,都是通过软件的形式安装在计算机上。

只不过这个软件和我们平常接触的应用程序软件不同,它比较特殊,因为它向下和计算机硬件(就是我们在计算机组成原理中学习的那些硬件)打交道,向上给其他应用程序和用户提供通用的交互的接口,说白了操作系统就是个中介和管家的角色。它帮我们做了下面这些事情:

  • 进程管理(柠檬说:你写的程序运行起来才能干活,运行起来的程序称为进程,进程是资源的最小单位)

  • 内存管理(柠檬说:计算机内存又贵又少,动不动又要来个高并发,内存管理大有学问)

  • 文件管理(柠檬说:计算机中的资料和信息需要通过文件系统来保存、管理)

  • 输入输出管理(柠檬说:各种外部设备如何接入计算机和接入之后又如何管理)

数据结构

数据结构大家最熟悉,即使毫无计算机基础或是想转行计算机,第一个遇到的就是数据结构,因为面试刷的算法题本质上就是对各种数据结构的运用。所以单纯对面试功利的角度来说,数据结构也是必须要掌握的计算机基础,数据结构要学到:

  • 线性表(链表、数组、循环链表)

  • 栈和队列

  • 树和各种二叉树(二叉排序树、平衡二叉树、哈夫曼树、B树、B+树、Trie树)

  • 图(图的存储结构、BFS、DFS、最短路径、最小生成树、拓扑排序、关键路径)

  • 查找算法(二分查找、B树查找、HASH表、KMP字符串模式匹配)

  • 排序算法(插入排序、冒泡排序、归并排序、基数排序、堆排序)

  • 贪心算法

  • 位运算

  • 分治算法

  • 动态规划

好了,计算机基础四大专业课已经大概过了一遍,当然这是我给没有计算机基础同学的实用主义建议,等你学完这四门课程也只能够说入门计算机了,不过这已经比很多人厉害了。如果想真正的了解计算机这门学科,可以等学完了这 4 门基础课程之后,再花写时间挑一些上面培养方案中的课程去学习,做一个知识体系完备的计算机软件后端开发工程师。

Linux

在后台开发领域,你所能接触到的后端服务不敢说 100%,至少也有 90% 以上是运行在 Linux 系统之上,因为它开源、便利、功能强大,需要学习以下技术点:

Linux系统使用

所以如果你想走后端开发这条路线,我建议你趁早使用 Linux ,越早越好。可以是在个人 PC 上装 Linux 虚拟机,或者装个双系统,我在大学就是这么玩的,那时候云服务器还没现在这么普及,现在我觉得买个 Linux 云服务器最方便,如果是学生还有教育优惠也不贵。

有了Linux系统之后干嘛呢?把它作为你的常用系统,经常登录进去对照着「鸟哥的 Linux 私房菜」从头到尾操作一遍,ok,Linux的基础操作你就掌握了。

Linux 高级编程

Linux「高级编程」的意思是比上面的 Linux 基础操作更深入一个层次。

相关历史文章:万字长文,别再说你不懂Linux内存管理了(合辑),30 张图给你安排的明明白白

学会了 Linux 的使用还不算是一个真正的开发人员,使用系统是成为开发者最基本要求,会操作Linux 就像使用 Windows 系统一样,只不过是学习成本的问题,如果这个世界没有 Window 系统,你女朋友花点时间也能掌握 Linux 系统基本操作。

要想进阶成为后端开发人员,就要懂得如何使用 Linux 系统提供的各种系统API(系统调用接口)进行编程开发,程序员用你写的代码来控制系统,普通用户只会用鼠标操纵。这个阶段需要学习:

  • Unix 系统实现 Linux、基本系统数据类型

  • 文件操作函数: open 、read close write dup fcntl ioctl stat chmodaccess chdir ...

  • 系统编程接口的基本特性和高级特性

  • Linux进程环境、如何创建进程、线程,程序的存储空间分配、环境变量

  • 进程组、会话以及任务控制、进程优先级和调度

  • 动态库和静态库

  • 进程间通信:管道和FIFO、消息队列、信号量、共享内存、内存映射

  • 套接字和网络编程

总之,这一阶段需要学习的是在 Linux 环境下的高级编程技巧,通过对这些内容的学习也能让你更深入的理解 Linux 系统是如何工作和运行的,并且真正的踏入 Linux 系统编程大门。

网络编程

网络编程是通过网络套接字 socket 方式实现的通信,所以也属于进程间通信 IPC(Inter-Process Communication)。

由于现在的后台服务基于服务端/客户端模型,两者之间基于网络通信,你在家用手机点个外卖的服务请求,也是通过网络通信发给某团的后台服务器,所以后台服务开发,说到底还是网络编程,以及建立在网络编程数据之上的应用层开发。

网络编程学什么:

  • 什么是socket套接字

  • 套接字选项

  • TCP/UDP 套接字编程

  • Unix domain 协议和编程

  • 原始套接字编程

  • IO多路复用:select 、poll、epoll、kqueue

  • 序列化技术

  • 零拷贝技术

  • 开源网络库:muduo、libevent

学完以上内容你大概可以写一个类似QQ一样的网络聊天小工具。

不在在工作中,都有成熟的网络框架或网络通信库,大公司比如鹅厂大部分是自研网络通信框架,小公司用开源项目,这让很多后台开发人员不必关心底层的网络通信细节,除了部分基础架构的开发同学,大部分后台开发同学工作都是在做业务系统的开发。

但了解底层网络编程原理,是后台开发人员的核心能力,这点对于 C/C++ 后台开发程序员尤为重要。它能拔高你看问题的高度,不了解底层原理,就像是在黑盒编程一样,出了问题无从下手排查。

学完了以上内容,基本是具备了从事后台开发的基础能力,也能开发出一个简单的后台服务器了。

数据库

除非是单纯的转发路由类后台服务,一般来说后台开发的web服务器后台程序,后台服务程序说白了就是个死循环:

接收客户端数据包 -> 处理数据包 -> 业务逻辑处理 -> 保存必要的数据 -> 回复响应数据给客户端

这其中会伴随对各种数据的处理,比如电商系统会处理订单数据、用户数据,游戏后台会处理角色数据和装备数据等等,有数据就会涉及到存储系统,数据一般都存储到数据库。

主要学习 2 大类数据库:

关系型数据库是指采用了关系模型来组织数据的数据库,简单理解就是二维表格模型。

非关系型数据库一般指的是 key-value 形式存储数据的 NoSQL 数据库,数据和键值是简单的映射关系。

关系型数据库

 

相关历史文章:

面试官:你说对MySQL事务很熟?那我问你10个问题

掌握了这30道MySQL基础面试题,我成了面霸

数据库存储引擎大揭秘,不看不知道这里面的骚操作可真多!

非关系型数据库

  • redis 基本操作和使用

  • redis 设计与实现原理

  • MongoDB

  • levelDB

  • memcache

  • HBase

  • CKV+ 腾讯自研

后台开发服务还需要学会解决三高问题:高并发、高可用、高性能。

高并发

利用到目前为止学习的内容,我们的开发的后台服务器应付一些小并发场景绰绰有余,但是随着互联网应用业务量的上涨,对后台服务端的请求数剧增,高并发需求随之而来,高并发指的就是高 TPS 和高 QPS

  • TPS (Transactions Per Second)每秒事务数

  • QPS(Query Per Second)每秒查询数等。

对于高并发服务必须改变传统的单进程模型,才能处理的过来如此海量的请求。

多进程

对于高并发的服务请求,由于后台服务一般都是 IO 密集型应用,IO 密集型应用就是大部分 CPU 时间用在网络 IO 上,相对的是 CPU 密集型应用大部分时间花在数据计算上。

大多数的后台服务程序都是 IO 密集型的应用,网络 IO 的时候 CPU 等待白白浪费时间, 这就告诉我们 CPU 的潜力还没有完全发挥,所以当一个进程的处理能力达到上限,我们可以多创建几个进程,这就是多进程模型。

多线程

多线程与多进程类似,实际在Linux系统中线程是由轻量级的进程 LWP(Light-weight process)实现,多线程方式实现的后台服务相对于多进程更加轻量,因为多线程是在同一个进程内部实现。

不过多线程也会带来新的问题,比如全局数据竞争和同步问题,引入线程锁还要防止死锁的发生。

协程

那什么是协程呢?协程 Coroutines 是一种比线程更加轻量级的微线程。类比一个进程可以拥有多个线程,一个线程也可以拥有多个协程,因此协程又称微线程和纤程。可以粗略的把协程理解成子程序调用,每个子程序都可以在一个单独的协程内执行。

异步回调

所谓异步回调就是,服务端发起 IO 请求的线程不等网络 IO 线程操作完成,就继续执行随后的代码,一般请求线程需要先注册一个回调函数,当IO 完成之后网络IO线程通过调用之前注册的回调函数来通知发起 IO 请求的线程,这样发起请求的线程就不会阻塞住等待结果,提高了服务处理性能。

高性能

按以上服务模型可以提高服务本身处理能力,高性能后台服务往往还会利用多种技术、从多个维度优化提高性能。比如采用CDN(Content Delivery Network)内容分发网络,存储和分发使用户就近获取内容,缩短响应时间;采用池化技术,避免频繁的资源分配与回收;采用服务集群,横向扩展服务能力;采用缓存技术,热点数据加入缓存,减少数据库访问。

  • CND 内容分发技术

  • 池化技术:数据库连接池,线程池

  • 集群化

  • 缓存技术

高可用

高可用即保证服务的稳定性,不出现重大问题或宕机,常见的解决高可用思路是冗余和负载均衡。冗余的意思就是多部署几台服务器,当其中一台挂掉另外一台能顶上。通过负载均衡技术实现对流量的动态调配,不至于出现大量流量冲击某台机器出现请求不均匀,软件负载均衡技术可以通过DNS、Nginx、LVS等技术实现。这里主要学习的技术有:

  • 负载均衡技术,软硬件负载均衡

  • 限流隔离降级技术

  • 应用层容灾,资源隔离熔断

  • 异地多活

设计模式

设计模式代表着软件开发的一种最佳实践。已经经历了很长一段时间的发展,它们提供了软件开发过程中面临的一般问题的最佳解决方案。学习这些模式有助于经验不足的开发人员通过一种简单快捷的方式来学习软件设计,当设计大规模软件时遵循必要的设计模式能让写出的代码更加健壮和可扩展。

设计模式 6 大原则:

  • 开闭原则:对扩展开放,对修改关闭,多使用抽象类和接口。

  • 里氏替换原则:基类可以被子类替换,使用抽象类继承,不使用具体类继承。

  • 依赖倒转原则:要依赖于抽象,不要依赖于具体,针对接口编程,不针对实现编程。

  • 接口隔离原则:使用多个隔离的接口,比使用单个接口好,建立最小的接口。

  • 迪米特法则:一个软件实体应当尽可能少地与其他实体发生相互作用,通过中间类建立联系。

  • 合成复用原则:尽量使用合成/聚合,而不是使用继承。

常见设计模式分类

  • 工厂模式

  • 单例模式

  • 建造者模式

  • 适配器模式

  • 桥接模式

  • 过滤器模式

  • 装饰器模式

  • 外观模式

  • 享元模式

  • 代理模式

  • 责任链模式

  • 解释器模式

  • 迭代器模式

  • 观察者模式

  • ...

分布式

为什么会出现分布式?随着业务的体量不断增长,单个节点的处理能力无法满足日益增长的计算、存储任务的时候,且硬件的提升(加内存、加磁盘、使用更好的CPU)高昂到得不偿失的时候,应用程序也不能进一步优化的时候,我们才需要考虑分布式系统。

分布式系统是由一组通过网络进行通信、为了完成共同的任务而协调工作的计算机节点组成的系统。分布式系统的出现是为了用廉价的、普通的机器完成单个计算机无法完成的计算、存储任务。其目的是利用更多的机器,处理更多的数据。

分布式系统要解决的问题本身就是和单机系统一样的,而由于分布式系统多节点、通过网络通信的拓扑结构,会引入很多单机系统没有的问题,为了解决这些问题又会引入更多的机制、协议。这里需要学习的内容包括:

  • 分布式一致性算法:PAXOS、Raft、Zab

  • 分布式事务:2PC、3PC、TCC

  • 分布式唯一 ID 生成:雪花算法、UUID、淘宝 TDDL SEQUENCE方案、美团 Leaf

  • 一致性HASH算法

  • 扩展性设计,设计可扩展的软件架构

  • 分布式文件系统:HDFS、FastDFS

  • 微服务架构设计,服务注册、服务发现、服务路由

安全

本质上后台服务在网络上运行,需要和各种网络环境交互,在正常情况下能够工作,但互联网中有很多针对后台服务的恶意攻击,因此网络安全也是后台开发工程师需要学习的内容。这里主要包括:

  • web安全:CSRF、SQL注入、XSS

  • DDos防范

  • 加解密算法:对称加密、哈希算法、非对称加密

  • 网络隔离:内外网分离、跳板机

  • 授权认证算法:OAuth2.0、OIDC、2FA、单点登录SSO

监控与统计

后台服务运行我们如何了解其运行状态和健康度?如果只是开发小玩具监控和统计大可不必,只需记录本地日志即可,对于成熟的大型后台服务系统,监控、统计、追踪必不可少,无监控,不运营。

开源的监控软件有:Prometheus、Zabbix、Open-Falcon。

追踪系统也非常重要,特别是目前微服务化,一次服务请求需要经历多个不同的微服务处理,给分布式追踪带来新的挑战,主要包含以下三个方面:

  • 通过收集日志(Logging),记录程序的调试信息或错误信息,对系统和各个服务的运行状态进行监控

  • 通过收集量度(Metrics),比如累加量,对系统和各个服务的性能进行监控

  • 通过分布式追踪(Tracing ),追踪服务请求是如何在各个分布的组件中进行处理的细节

业界也有一些成熟的开源软件用于监控与追踪:SkyWalking、Pinpoint、Zipkin、CAT大众点评开源。不过大公司一般都有自研的一套监控与追踪系统,比如腾讯内部就有多套自研监控与调用链追踪系统。

搜索引擎

我们讨论的是全文搜索引擎,什么是全文搜索引擎?

全文搜索引擎是目前广泛应用的主流搜索引擎。它的工作原理是计算机索引程序通过扫描文章中的每一个词,对每一个词建立一个索引,指明该词在文章中出现的次数和位置,当用户查询时,检索程序就根据事先建立的索引进行查找,并将查找的结果反馈给用户的检索方式。这个过程类似于通过字典中的检索字表查字的过程。

数据分为结构化数据与非结构化数据

像数据库表这种的数据是结构化数据;而对于像HTML、XML、文档这样不定长度且无固定格式的数据我们称之为非结构化数据。非结构化数据也称为全文数据,对非结构化数据的搜索可以用全文检索的方式,

目前两大主流的全文搜索引擎「Solr」和「Elasticsearch」都是基于 Lucene 建立。搜索引擎需要学习的内容:

  • 搜索引擎原理,搜索引擎利用倒排索引技术来实现对全文数据的高效检索。

  • Lucene,Apache Lucene 是一个开源的全文搜索引擎工具包。

  • Elasticsearch 原理与使用

  • Solr 原理与使用

大数据

大数据,又称为巨量资料,指的是在传统数据处理应用软件不足以处理的大或复杂的数据集的术语。随着后台服务用户数增加和数据的积累,产生海量有待挖掘价值的数据,分析利用这些数据可以反馈线上决策,优化运营策略,产生数据价值。

海量数据也可以定义为来自各种来源的大量非结构化或结构化数据。

在软件开发领域的大数据概念自 20 世纪 90 年代的数据仓库开始,对于大数据的处理也导致各种海量数据的统计和处理技术发展。

主要包含以下的技术点需要学习:数据存储、离线分析、流式计算。

  • 大数据存储:Hadoop 框架,HDFS、HBase、YARN 架构、Apache Kudu

  • 离线分析:Hive、MapReduce、Spark

  • 流式计算:Flink、Storm、Kafka Stream、Spark Streaming

虚拟化

虚拟化,是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机。

虚拟化的好处

  • 灵活性:在同一硬件上同时运行多个操作系统

  • 敏捷性:移动操作系统的方式与将文件或图片从一台物理服务器移动到另一台物理服务器的方式相同。

  • 容错:当物理服务器出现故障时,管理软件会自动将实例迁移到可用服务器,甚至无感知物理硬件故障。

  • 降低成本:您不再需要过多的物理服务器,操作和维护所需的费用也随之减少。

常见的虚拟化技术:KVM、Xen、OpenVZ、Docker

虽然对于大多数后台服务程序来说, 很多服务都是部署在 Docker 容器里,但 Docker 共用了底层系统的 kernel,所有容器共用一部分的运行库,因此隔离性相比 KVM 之类的虚拟化技术差一点,KVM 与 Docker 有各自的使用场景,未来很长一段时间是共存状态。

OpenStack 管理 VM(Virtual Machine)虚拟机的工具;Kubernetes 简称 K8s ,是管理 container 容器的工具。

中间件

在后端开发中你可能经常听说到「中间件」这个词,那什么是中间件?看下Wiki上的定义:

中间件技术创建在对应用软件部分常用功能的抽象上,将常用且重要的过程调用、分布式组件、消息队列、事务、安全、链接器、商业流程、网络并发、HTTP 服务器、Web Service 等功能集于一身或者分别在不同品牌的不同产品中分别完成。

中国科学院软件所研究员仲萃豪把中间件定义为「平台+通信」。这个定义限定了只有用于分布式系统中的此类软件才能被称为中间件,同时此定义也把中间件与实际应用的应用软件区分开来。

大白话来说,中间件就是把分布式系统中一些通用功能的抽象出来提供服务的一类软件统称。它屏蔽掉了底层操作系统的复杂性,向上提供一个统一的开发环境,降低了软件系统开发的复杂度,由于中间件是介于操作系统和应用软件之间,为应用软件提供服务功能的软件,由于介于两种软件之间,所以称为中间件。

常见的的开源中间件有下面几种,组合起来就能搭建一个完整的分布式后台服务系统:

  • web server 中间件,Nginx、OpenResty、Tomcat...

  • 缓存中间件,服务端缓存包括 Redis、Memcached...

  • 消息队列中间件,Kafka、RabbitMQ、ActiveMQ...

  • RPC框架,Tars、Dubbo、gRPC、Thrift

  • 数据库中间件,Sharding jdbc

  • 日志系统中间件,ELK B指的是一套解决方案,是 Elasticsearch、Logstash 、 Kibana、Beats  是这 4 种软件产品的首字母缩写。

  • 配置中心中间件,Apollo、zookeeper统一配置管理

  • API网关,开源项目有 Tyk、kong、zuul、orange...

 

版本控制

大型软件项目的代码量巨大,如何有效组织和管理源码和版本,于是产生了版本控制系统。版本控制系统就是我们常说的SVN 或 Git,用来追踪、维护源码、文件以及配置文件等等的改动,并且提供控制这些改动控制权的程序。

常见的版本控制系统分为两大类:集中式版本控制和分布式版本控制。作为后端开发工程师,版本控制系统的使用也是必须掌握的基础技能,不过这些系统一般都是边使用边熟悉,刚开始熟悉一些常用操作就好。

  • 常见的有集中式版本控制系统,代表是SVN;

  • 分布式版本控制系统,代表是Git

工具

一些和后端开发或者说软件开发相关的工具推荐,主要是编辑器和 IDE。

编辑器

在 Linux 下开发肯定离不开 Vim 或者 Emacs,这两个都是常用的编辑器,已经形成了两大爱好者阵营。特别是 Vim 编辑器,学习成本有点高,配合上各种插件和配置,有些 Vim 爱好者已经把它当成 IDE 来用了,一旦掌握可以大幅提升工作效率,值得你去学习。

当然除了 Vim 如果是文字编辑工作,比如写 README 文档或者写技术博客,那么强烈推荐学习下 Markdown 语法,这是一种种轻量级标记语言,它允许人们使用易读易写的纯文本格式编写文档,注重内容本身不用过多的调整排版。Markdown 编辑器推荐 Typora 、有道云笔记 Markdown 编辑器、VSCode Markdown插件。

IDE

编辑器作为小工程还可以胜任,不过后端开发工作中,一般都是大型的软件工程项目,所以不大可能用编辑器来管理,这时候就需要学习使用专业的集成开发工具。

集成开发环境(IDE,Integrated Development Environment )是用于提供程序开发环境的应用程序,一般包括代码编辑器、编译器、调试器和图形用户界面等工具。

磨刀不误砍柴工,挑一把趁手的兵器再去编程世界遨游。各语言 IDE 五花八门,推荐 JetBrains 系列和 VS Code ,JetBrains 产品包括各语言开发的一系列的 IDE,特别是Java 的Intellij IDEA 口碑非常不错,部分对应的产品系列如下。

  • CLion - 跨平台的C/C++ IDE 开发工具,支持C++11 、C++14、libc++以及Boost。

  • GoLand - Go语言的集成开发环境。

  • IntelliJ IDEA - 2001年发布。一套智能的 Java 集成开发环境,特别专注与强调程序师的开发撰写效率提升。

  • PhpStorm - PHP IDE开发工具。

  • PyCharm - 一款结合了Django框架的Python IDE开发工具。

  • AppCode - Swift 和 Objective-C IDE开发工具。

Visual Studio Code(简称VS Code)是一个由微软开发,同时支持Windows 、 Linux和macOS等操作系统的免费代码编辑器,它支持测试,并内置了Git 版本控制功能,同时也具有开发环境功能,例如代码补全(类似于 IntelliSense)、代码片段和代码重构等。该编辑器支持用户个性化配置,例如改变主题颜色、键盘快捷方式等各种属性和参数,同时还在编辑器中内置了扩展程序管理的功能。

在2019年的 Stack Overflow 组织的开发者调研中,VS Code被认为是最受开发者欢迎的开发环境。

 

测试

软件工程师不仅要写代码,还要做测试,软件测试和软件开发是相伴相生,测试能让保证我们写出代码更加健壮和可维护。

TDD是测试驱动开发(Test-Driven Development)的英文简称,是敏捷开发中的一项核心实践和技术,也是一种设计方法论。TDD的原理是在开发功能代码之前,先编写单元测试用例代码,根据测试代码确定需要编写什么产品代码。需要掌握和了解以下测试技术和方法。

  • 单元测试

  • 压力测试

  • 全链路测试

  • A/B 测试,灰度发布,蓝绿部署

学习顺序

总结下,后端技术学习的内容还是很多的,不可能一蹴而就。

这篇文章能看到这里的同学,如果是初学者,可能就想问直接问我从哪里开始学习?那我就不卖关子,如果你不知道从哪开始学,对于学习路线各个节点,我就按个人的学习经验并结合认识的大厂高 P 给的建议,给你把以上技术路线学习优先级做个排序,你照着学就行,排序规则:

星级越高,排名越靠前,重要程度越高,优先安排时间学习。

计算机基础  5星

Linux  5 星

数据库 5 星

设计模式 5 星

工具 5 星

中间件 4 星

分布式 4 星

高并发、高可用、高性能  4 星

搜索引擎 4 星

测试 3 星

监控与统计 3 星

虚拟化 3 星

安全 3 星

大数据 3 星

语言的困惑

细心的读者应该发现了,到目前为止本文讨论的后端技术学习路线内容,并没有提及特定编程语言,不提及并不是说不重要,语言是很多技术的前置知识。打个比方来说,编程语言是砖瓦,高大上的项目都是一砖一瓦堆砌而成。

其实你在学习上述技术点的过程中,会自然而然的接触到各种编程语言的中间件或是开源项目,不管用什么语言做后端服务开发,都是没有问题的,并且都不有很多优秀的开源框架可以借鉴学习,关键是要有清晰的学习路线,主流的后端开发语言包括 Java、C++、PHP、Python、Go ,那学哪个呢?

如果你是在校的学生,时间充足,我建议可以都可以尝试下,不试过怎么知道不合适?然后结合自己偏爱和未来打算从事的岗位方向选择一门语言深入学习;

如果你是职场社畜,那就要适应团队,产品业务需要用什么语言开发那就学哪个。万变不离其宗,后端技术的知识都是相通的,不要被特定语言所束缚,这些通用的后端技术掌握后,剩下的就只是编程语言学习,很快啊,很快的。

结语

说来惭愧有些我画在导图上的技术我也只是懂点皮毛,但整个后端技术栈的学习路线和方向是没问题的,我都画出来了,大家参考着学习和查漏补缺,在技术上我也需要继续精进学习,咱们共勉。

下面给大家分享这套2021年最强Java核心面试资料需要的小伙伴可以直接扫码

致内容包括了: Java 集合、JVM、多线程、并发编程、设计模式、Spring全家桶、Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、MongoDB、Redis、MySQL、RabbitMQ、Kafka、Linux、Netty、Tomcat等大厂面试题等、等技术栈!

笔记目录展示:

 

阿里工作6年,熬到P7就剩这份学习笔记了,已助朋友拿到7个Offer

 

阿里工作6年,熬到P7就剩这份学习笔记了,已助朋友拿到7个Offer

 

阿里工作6年,熬到P7就剩这份学习笔记了,已助朋友拿到7个Offer

 

阿里工作6年,熬到P7就剩这份学习笔记了,已助朋友拿到7个Offer

 

阿里工作6年,熬到P7就剩这份学习笔记了,已助朋友拿到7个Offer

 

阿里工作6年,熬到P7就剩这份学习笔记了,已助朋友拿到7个Offer

 

阿里工作6年,熬到P7就剩这份学习笔记了,已助朋友拿到7个Offer

 

阿里工作6年,熬到P7就剩这份学习笔记了,已助朋友拿到7个Offer

 

阿里工作6年,熬到P7就剩这份学习笔记了,已助朋友拿到7个Offer

 

阿里工作6年,熬到P7就剩这份学习笔记了,已助朋友拿到7个Offer

 

部分内容截图:

阿里工作6年,熬到P7就剩这份学习笔记了,已助朋友拿到7个Offer

 

阿里工作6年,熬到P7就剩这份学习笔记了,已助朋友拿到7个Offer

 

阿里工作6年,熬到P7就剩这份学习笔记了,已助朋友拿到7个Offer

 

阿里工作6年,熬到P7就剩这份学习笔记了,已助朋友拿到7个Offer

 

阿里工作6年,熬到P7就剩这份学习笔记了,已助朋友拿到7个Offer

 

Java零基础自学路线图:15张思维导图带你从入门到进阶 Java作为一门面向对象的编程语言,其核心在于通过类与对象的概念来模拟现实世界,实现代码的封装、继承和多态,从而构建出结构清晰、易于维护的复杂软件系统。掌握Java不仅能够进行桌面应用开发,更是进入企业级Web开发、大数据处理和Android移动开发等广阔领域的基石。对于初学者而言,系统性地学习Java语法、集合框架、多线程和网络编程等核心知识,是构建扎实技术功底的关键。本文围绕一份专为零基础学习者设计的《Java完全自学手册》,通过15张结构化的思维导图,清晰拆解了从环境搭建、核心语法、面向对象思想到高级 阅读详情

相关推荐

Java学习路线总结(思维导图篇)

优快云最强Java专栏,包含全部Java基础知识点、Java8新特性、Java集合、Java多线程、Java代码实例,理论结合实战,实现Java的轻松学习。

学Java,找哪吒 19万+

智慧城市平台的技术路线和系统要求

它基于 ECMAScript (w3c制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。随着移动互联网和用户体验的发展,可视化(Visual)程序设计越来越受到重视,可视化设计是一种全新的程序设计方法,避免许多繁琐的代码语句。SOA是为了要解决多个不同系统之间业务集成的需要,通过连接能完成特定任务的独立功能实体实现的一种软件系统架构。由于Web服务技术是基于标准和松散耦合的,与具体厂商的解决方案、技术平台无关。这对于日后新建设系统的选型和迁移提供了很大的灵活性和扩展性。

关注博文底部公众号,发送标题关键字获取文档。 3412

优快云技术库的知识图谱高清合集(50张)

资源来自优快云:http://geek.youkuaiyun.com/news/detail/110921 50份高清知识图谱,只为分享传播,不需资源分

IT:后端进阶技术路线图(初级→中级→高级)、后端开发工程师(技术方向分类之后台业务开发/中间件/内核/分布式架构)基础知识简介、技术路线/技术趋势指南(如何选择自己的技术方向)之详细攻略

IT:后端进阶技术路线图(初级→中级→高级)、后端开发工程师(技术方向分类之后台业务开发/中间件/内核/分布式架构)基础知识简介、技术路线/技术趋势指南(如何选择自己的技术方向)之详细攻略目录后端进阶技术路线图(初级→中级→高级)初级(技术基础、编程工具)技术基础(网络/操作系统/基本前端知识/编程语言/算法与数据结构/数据库)编程工具(版本管理/构建工具/编辑器/IDE)相关学习资源中级(编程框架/JVM/消息队列/存储/工程)高级(编程范式/设计原则/分布式系统)一、后台业务开发大佬——后台架构/业务目

头部AI社区如有邀博主AI主题演讲请私信—心比天高,仗剑走天涯,保持热爱,奔赴向梦想!低调,专注,谦虚,自律,反思,成长,还算比较正能量的博主,公益免费传播…内心特别想在AI界做出一些可以推进历史进程影响力的技术(兴趣使然,有点小情怀,也有点使命感呀 1万+

便携式水下动态实时视频色彩还原设备,一键快速实现对水下偏色视频和图像的色彩还原处理

便携式水下动态实时视频色彩还原,一键快速对水下图像进行色彩校正,清晰度提升和亮度均衡处理,为水下资源勘探和科学考古,海洋生态环境监测,水下机器作业等应用提供有力的协助

weixin_43518680的博客 633

避开STM32中断优先级配置的坑:HAL_NVIC_SetPriority()参数你真的用对了吗?

本文深入解析STM32中断优先级配置中的关键问题,重点剖析HAL_NVIC_SetPriority()函数的正确使用方法。通过实际案例揭示优先级分组设置、抢占优先级与子优先级的区别,提供多中断系统中的优化策略和调试技巧,帮助开发者避免常见配置错误,提升系统稳定性。

weixin_42532938的博客 423

21 张思维导图,你想知道我肝了半个月的「后端技术学习路线」长啥样么?

话不多说,直接上刚画完的「后端技术学习路线」思维导图框架:图中的每一个节点都可以点开,我都做了细分,在后面章节逐个展开介绍。计算机基础不管是后端开发还是前端开发,说到底我们所有的软件开发...

程序员吴师兄的博客 2372

RV1126B SDK移植实战:从DDR配置到USB烧写全解析

本文详细解析了RV1126B SDK移植的核心实战流程,重点攻克了DDR初始化失败与USB烧写两大难题。文章从理解启动流程入手,提供了DDR配置错误的排查步骤、SDK编译配置要点,并深入讲解了USB烧写的完整操作与常见问题解决方案,旨在帮助开发者高效完成系统移植与稳定运行。

weixin_29164497的博客 542

30 张Java 的思维导图,全面梳理构建 Java 的知识体系

小编这几天在网上收集了 30 张大佬制作的 Java 知识点总结的思维导图,整理成了这篇文章分享给大家,帮助大家梳理构建 Java 的知识体系。 这份思维导图包含从Java的简介、主要特性、发展历史到语法、数据类型、修饰符、运算符、类、数组、框架、面向对象的编程思想等大大小小的知识点。一方面可供初学者参考,另一方面,便于大家结合思维导图深入学习、理解、思考;建议大家可以先收藏下,慢慢看; 本文按顺序依次展示以下内容的思维导图:附高清下载 1、Java 简介 2、Java 主要特性 3、Ja

java9875的博客 4433

comsol 多物理场仿真流程-以开关柜为例

1、主要方法 在SolidWorks中对于开关柜的内部与外部结构进行建模,生成能够导入软件计算的3D模型。将SolidWorks中的模型导入comsol软件中,设置参数进行多物理场耦合仿真。 1、具体步骤 删除高压开关柜中对其内部电磁环境无较大影响的结构,如低压测量柜、断路器内部结构等。 导入模型:将厂家提供的3D模型转化为solidworks结构模型。 修复模型:修复已转化模型中转化错误的部分、修复已转化模型中非实体部分、修复已转化模型中重叠实体部分 化简模型:去除过于...

健忘16的博客 7020

从零到一:手把手部署用友T3标准版11.2及SQL Server 2008R2环境

本文详细介绍了从零开始部署用友T3标准版11.2及SQL Server 2008R2环境的完整流程,包括环境准备、SQL Server安装、环境检测与修复、T3标准版安装实战以及初始化配置与测试。通过手把手的步骤指导和常见问题解决方案,帮助用户顺利完成部署,确保系统稳定运行。

weixin_28339967的博客 455

2024年Java学习路线【超详细超实用】

JavaSE> 贪吃蛇游戏-->多线程下载器-->图书管理系统-->在线聊天项目-->MySQL-->JDBC -->前端必修课-->Vue--> JavaWeb -->Ajax -->Maven入门篇-->Maven进阶篇-->MyBatis-->Spring-->SpringMVC-> Linux--> - > Git-->SpringBoot3 -->Redis7 -->Spring Security--> MyBatis Plus-->动力云客-->动力恒合仓储项目 --> RabbitMQ--

m0_47946173的博客 6160

PyQt5简介和安装

在initUI方法中,设置了窗口的标题和大小,并创建了一个按钮。PyQt5是一个功能强大的Python界面开发框架,可以轻松创建跨平台的图形用户界面应用程序。本文介绍了PyQt5的简介和安装方法,并提供了一个简单的示例应用程序来演示PyQt5的基本用法。PyQt5是一个功能强大的Python界面开发框架,它提供了丰富的工具和组件,用于创建跨平台的图形用户界面(GUI)应用程序。信号是控件发出的事件,槽是与之关联的处理函数。接下来,我们将编写一个简单的PyQt5应用程序,以演示PyQt5的基本用法。

XdKwargs的博客 222

贼好用的Java学习路线集合,PDF超过6000页

由于篇幅有限,这里就不一一罗列了,20道常见面试题(含答案)+21条MySQL性能调优经验小编已整理成Word文档或PDF文档还有更多面试复习笔记分享如下SQL性能调优经验**小编已整理成Word文档或PDF文档[外链图片转存中…(img-JHYVIN8E-1710825529742)]还有更多面试复习笔记分享如下[外链图片转存中…(img-ET2rFJXL-1710825529742)]点击传送门,即可免费领取!

Y1567409的博客 898

微信小程序 “net::ERR_CONNECTION_REFUSED” 报错大揭秘与破解之道

在微信小程序开发与运行过程中,“net::ERR_CONNECTION_REFUSED” 报错是开发者常遇难题。该错误意味着小程序与服务器连接建立失败,会导致功能无法使用、数据加载异常等问题,严重影响用户体验和业务运转。本文系统剖析此错误,从网络环境不佳、服务器异常、小程序配置有误等常见触发场景入手,提供网络、服务器、配置、代码等多维度排查步骤,给出针对性解决策略,如修复网络、处理服务器故障、修正配置与代码错误,还提出开发与运维阶段的预防措施,助力开发者高效解决该报错问题。

邓邓子的博客 6134

YOLOv13:目标检测的全面攻略与实战指南

本文是关于 YOLOv13 的全攻略文章。先回顾 YOLO 系列发展,点明 YOLOv13 在该系列中的创新地位,阐述其基于 HyperACE、FullPAD 和轻量级卷积替换等技术的独特优势。深入剖析各核心技术原理,通过与其他版本及实际场景对比展现其性能优势。介绍项目结构与使用方式,分享数据增强、锚框优化等实用技巧,并列举安防监控、自动驾驶等领域应用案例。最后总结 YOLOv13 价值,展望目标检测技术未来发展趋势,为读者提供全面的 YOLOv13 学习与实践指导。

邓邓子的博客 3434

腾讯大佬亲自总结出“Java知识地图+学习路线”从点到面一应俱全!不看血亏

在目前流行的互联网架构中,对一个应用来说,Tomcat是首,SSM是中,JVM是尾,我们通常对于SSM是比较了解的,而忽略了首尾,而Tomcat在目前的网络编程中是举足轻重的,但是我们其实对Tomcat中很多原理性的东西不太了解,如果能够掌握Tomcat的原理,那么是非常有用的。SSM框架,是Spring + Spring MVC + MyBatis的缩写,这个是继SSH之后,目前比较主流的Java EE企业级框架,适用于搭建各种大型的企业级应用系统,也是Java程序员必须要掌握的技术。

2401_84435768的博客 391

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

零基础小白如何才能学好网络安全?(附:学习路线图及学习资料)

经常有小伙伴在后台留言,问如何才能学好网络安全。比如有小伙伴说,听人说可以先学网页基础,但是自己学了html、CSS,感觉跟网络安全挨不着边,不知道如何入手学习。其实,网络安全没有大家想的那么神秘,不要被他的名字唬住,网络安全说难其实也不难。要想学好网络安全,我们要解决2个方面的问题:学习路线和学习资料。首先,我们来说说学习路线。为什么说学习路线很重要呢?在我们想要学习某个技术时,一定要清楚自己的目标是什么,更何况我们是想学完之后能够从事网络安全方面的工作,找到一份高薪的工作。

2301_77160226的博客 644

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

【21天学习挑战赛】哪吒邀你参加Java研讨班

优快云与每一位学习者同行 平台优质专栏作者带队精准学习 精选高质量专栏学习资料活动期内限时特价 此刻开启学习打卡之路,收货知识,赢取豪礼更能结交志同道合的博友

学Java,找哪吒 3778

为了面个好公司!拼了!3.5W字的Java面试题整理(答案+学习路线)上!

前言: 本文是在网上看了各种面试指南收集的题目及答案。无意冒犯各位原创作者,如果在您的博客或者写作平台有相似问题答案可以跟我说,我给您链接加上,我只是为了方便以后自己需要的时候刷一刷,不用在到处找题。 Spring MVC(20题)(Spring全家桶学习路线图谱) JVM(30题)(学习路线图谱) Mybatis(25题) Redis(29题)(含学习图谱) 并发编程(15题) HashMap(21题) 如果你觉得我整理的这些东西对你有帮助的话, 记得点赞+评论+关注哈!

豆汁 1万+

华为普工面试经历,2024最新阿里Java面试流程

每年转行想做程序员的人都不少,这个行业不像销售一样,你不必要懂那么多人情世故;也不像某些“安稳岗位”一样,工资较低。程序员靠技术恰饭,没有那么多职场周旋,工资也很可观,因此就成为了大多数转行人的第一选择。Java作为世界上最主流的编程语言之一,也是应用最广泛的编程语言,属于编程语言中老大哥般的存在,是绝大多数人的第一选择。Java广泛的应用市场也直接决定了Java涉及的领域:手机开发(安卓基于Java)、游戏开发(英雄联盟)、银行、金融系统、互联网、电信行业、电商行业、云计算、大数据、科学计算等等。

m0_60721823的博客 1002

最新2024年火遍全网的Java全家桶学习路线,真香,GitHub重磅官宣

DOS常用命令JVM、JRE、JDK之间的关系Java开发环境的搭建:安装JDK,配置环境变量Java入门程序(Java的开发流程)Java的注释,标识符、标识符的命名规范Java基本数据类型变量和常量的定义及初始化Java的运算符运算符的优先级Java分支语句之if…else循环的嵌套方法的定义方法的形参和实参方法的递归调用。

2401_84585339的博客 537

2024Java零基础自学路线(Java基础、Java高并发、MySQL、Spring、Redis、设计模式、Spring Cloud)

篇篇经典,字字珠玑

学Java,找哪吒 2万+

7个月吐血整理!Android面试相关文章及Github学习资料(标星3(1)

!最后放上一个大概的Android学习方向及思路(详细的内容太多了~),提供给大家:对于程序员来说,要学习的知识内容、技术有太多太多,这里就先放上一部分,其他的内容有机会在后面的文章向大家呈现出来,不过我自己所有的学习资料都整理成了一个文档,一直在不断学习,希望能帮助到大家,也节省大家在网上搜索资料的时间来学习,也可以分享动态给身边好友一起学习!为什么某些人会一直比你优秀,是因为他本身就很优秀还一直在持续努力变得更优秀,而你是不是还在满足于现状内心在窃喜!Android架构师之路很漫长,一起共勉吧!

2301_79098336的博客 294
上一篇: 面试大厂不看这两份Java面试核心知识点原理篇+框架篇,有个屁用?食屎啦泥?
下一篇: 网易加小米多位顶级工程师倾力打造出:HBase原理与实践笔记
Java王富贵
博客等级 码龄6年 175粉丝 59原创
评论 9
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值