大家好,我是柠檬。
柠檬哥最近在思考公众号的内容方向问题,如何让"大众年夜众号持续供应有代价的内容给大家,之以是会有这样的思考,起因是来自与一位读者的对话,这位读者加了我微信,问我下面的问题:
相信有很多读者关注到这里,是由于看到「后端技能学堂」这个"大众号名字,正如"大众号的先容:

帮你构建后端技能知识体系,是你学习编程的教室。
写的文章也都是环绕着这个主题,这位读者的问题让我溘然意识,我忽略了读者群体里有很多是初学编程,或者刚打仗打算机的同学。
柠檬哥作为一个普通大学非打算机专业,自学后端技能进入腾讯从事后端开拓事情,我自己也是非科班自学打算机成功转行软件开拓(有想听柠檬哥转行之路经历的吗,可以留言见告我,人多就写写),体会过当初想学又不知从何学起的迷茫,还好末了摸索出了一条精确学习的路线。
思来想去,学习方向和路线很主要。比起详细的技能细节,可复制的履历、清晰的学习路线,是大部分人更加须要的东西。
朝着精确的方向努力否则只会离目标越来越远,不是吗?
只顾着写各种技能,不见告大家这个知识点在后端技能图谱的什么位置,有点盲人摸象不知全貌的觉得,很多在我看来大家都懂的内容,实在只是我以为,信息差是客不雅观存在的,抹平信息差是分享的代价所在。
以是这一期文章柠檬哥足足花了半个月韶光,整理了一张后端技能学习路线思维导图,来和你聊聊:
要成为一个符合 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 chmod access 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 数据库架构MySQL索引利用和优化innoDB存储引擎查询性能优化聚拢索引、非聚拢索引事务隔离,ACID,MVCC锁机制,乐不雅观锁、悲观锁、读锁、写锁、意向锁日志数据备份与规复干系历史文章:
口试官:你说对MySQL事务很熟?那我问你10个问题
节制了这30道MySQL根本口试题,我成了面霸
数据库存储引擎大揭秘,不看不知道这里面的骚操作可真多!
后台开拓做事还须要学会办理三高问题:高并发、高可用、高性能。
高并发利用到目前为止学习的内容,我们的开拓的后台做事器搪塞一些小并发场景绰绰有余,但是随着互联网运用业务量的上涨,对后台做事真个要求数剧增,高并发需求随之而来,高并发指的便是高 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注入、XSSDDos戒备加解密算法:对称加密、哈希算法、非对称加密网络隔离:内外网分离、跳板机授权认证算法: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被认为是最受开拓者欢迎的开拓环境。
干系历史文章:
干货:用好VSCode这13款插件和8个快捷键,事情效率提升10倍
手把手教你配置VS Code远程开拓工具,事情效率提升N倍
测试软件工程师不仅要写代码,还要做测试,软件测试和软件开拓是相伴相生,测试能让担保我们写出代码更加健壮和可掩护。
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 ,那学哪个呢?
如果你是在校的学生,韶光充足,我建议可以都可以考试测验下,不试过怎么知道不得当?然后结合自己偏爱和未来打算从事的岗位方向选择一门措辞深入学习;
如果你是职场社畜,那就要适应团队,产品业务须要用什么措辞开拓那就学哪个。万变不离其宗,后端技能的知识都是相通的,不要被特定措辞所束缚,这些通用的后端技能节制后,剩下的就只是编程措辞学习,很快啊,很快的。
结语说来惭愧有些我画在导图上的技能我也只是懂点皮毛,但全体后端技能栈的学习路线和方向是没问题的,我都画出来了,大家参考着学习和查漏补缺,在技能上我也须要连续精进学习,咱们共勉。
学习路线和高清路线大图我会放在我的 Github 项目上,这篇文章只是个开始,也不是终极版,我会持续在 Github 更新和完善本文内容,我这个项目的地址是:
https://github.com/imcoderlemon/CodeClass
点击文末「理解更多」链接,直达 Github 项目主页,记得点个 star 这样我更新了内容你就能收到关照。
公众年夜众号后台回答「学习路线」获取后端技能学习路线高清思维导图!
这篇文章没写之前我就预感会很长,写到这里已经 1 万多字了。
对付每个技能点还可以展开聊聊我是如何学习的,那样就更长了阅读体验不好,柠檬哥作为一名普通大学非科班选手,自学后端技能进入鹅厂,我的学习履历或许能给你一点借鉴。
如果大家感兴趣,也可以分享下细分技能领域的学习路线,比如打算机根本学习路线、数据库学习路线、Linux技能学习路线...如果大家想看的话就 「点赞、转发」给我点动力,就再写写详细的学习路线。
顺便做个调查,接下来你最想看柠檬哥分享哪个方向技能的详细学习路线:
这篇文章我从月初开始整理内容、绘制思维导图,真真是肝了半个月之久,大家一定要点赞和分享呀,让我看到输出是有代价的
感谢各位的阅读,文章的目的是分享对知识的理解,技能类文章我都会反复求证以求最大程度担保准确性,若文中涌现明显疏忽也欢迎指出,我们一起在磋商中学习。
Hi,我是堂主柠檬,一线互联网大厂后端程序员一枚,个人技能gzh紧张分享后端开拓干系的技能学习,每篇文章都是我精心创作,如果文章对你有帮助,这次一定不要白piao,点赞 或 分享 给须要的朋友,这对柠檬很主要,在此先谢过各位大佬了!
我是柠檬,我们下期再见。
微信搜索"大众年夜众号「 后端技能学堂 」回答「1024」获取50本打算机电子书,回答「学习路线」获取超详细后端技能学习路线思维导图,文章每周持续更新,我们下期见!
点击下方「理解更多」下载思维导图学习资源