其他
干货:18 张思维导图,后端技术学习路线长这样!
The following article is from 后端技术学堂 Author LemonCoder
话不多说,直接上后端技术学习路线思维导图框架:
计算机基础
计算机组成原理
数据在计算机中的表示和运算(柠檬说:计算机不识数,只认得高低电平,所以数据在计算机内部都用二进制的0和1表示) 存储系统(柠檬说:数据和程序指令都要存储下来,学习计算机的存储层次,内存、外存、高速缓存、虚拟存储技术) 指令系统(柠檬说:写的代码最终都要被翻译成计算机指令,指令格式和寻址方式有多种,控制器来控制指令执行) 中央处理器(也就是 CPU 计算机的大脑,主要构成是运算器和控制器) 总线(柠檬说:计算机的血管动脉,连接计算机各功能组件,用来传输数据、地址信号、控制信号) 输入输出系统(柠檬说:Input/Output 也叫 IO 系统,连接和管理各种外部设备比如键盘、显示器等等)
计算机网络
物理层 数据链路层 网络层 传输层 应用层
操作系统
操作系统也是一种软件。你熟悉的微软Windos操作系统,后台开发熟悉的各种发行版的 Linux 系统,都是通过软件的形式安装在计算机上。
进程管理(柠檬说:你写的程序运行起来才能干活,运行起来的程序称为进程,进程是资源的最小单位) 内存管理(柠檬说:计算机内存又贵又少,动不动又要来个高并发,内存管理大有学问) 文件管理(柠檬说:计算机中的资料和信息需要通过文件系统来保存、管理) 输入输出管理(柠檬说:各种外部设备如何接入计算机和接入之后又如何管理)
数据结构
线性表(链表、数组、循环链表) 栈和队列 树和各种二叉树(二叉排序树、平衡二叉树、哈夫曼树、B树、B+树、Trie树) 图(图的存储结构、BFS、DFS、最短路径、最小生成树、拓扑排序、关键路径) 查找算法(二分查找、B树查找、HASH表、KMP字符串模式匹配) 排序算法(插入排序、冒泡排序、归并排序、基数排序、堆排序) 贪心算法 位运算 分治算法 动态规划
Linux
Linux系统使用
Linux 高级编程
Unix 系统实现 Linux、基本系统数据类型 文件操作函数: open 、read close write dup fcntl ioctl stat chmod access chdir ... 系统编程接口的基本特性和高级特性 Linux进程环境、如何创建进程、线程,程序的存储空间分配、环境变量 进程组、会话以及任务控制、进程优先级和调度 动态库和静态库 进程间通信:管道和FIFO、消息队列、信号量、共享内存、内存映射 套接字和网络编程
网络编程
什么是socket套接字 套接字选项 TCP/UDP 套接字编程 Unix domain 协议和编程 原始套接字编程 IO多路复用:select 、poll、epoll、kqueue 序列化技术 零拷贝技术 开源网络库:muduo、libevent
数据库
接收客户端数据包 -> 处理数据包 -> 业务逻辑处理 -> 保存必要的数据 -> 回复响应数据给客户端
关系型数据库
MySQL 数据库架构 MySQL索引使用和优化 innoDB存储引擎 查询性能优化 聚集索引、非聚集索引 事务隔离,ACID,MVCC 锁机制,乐观锁、悲观锁、读锁、写锁、意向锁 日志 数据备份与恢复
非关系型数据库
redis 基本操作和使用 redis 设计与实现原理 MongoDB levelDB memcache HBase CKV+ 腾讯自研
TPS (Transactions Per Second)每秒事务数 QPS(Query Per Second)每秒查询数等。
多进程
多线程
协程
异步回调
高性能
CND 内容分发技术 池化技术:数据库连接池,线程池 集群化 缓存技术
高可用
负载均衡技术,软硬件负载均衡 限流隔离降级技术 应用层容灾,资源隔离熔断 异地多活
设计模式
开闭原则:对扩展开放,对修改关闭,多使用抽象类和接口。 里氏替换原则:基类可以被子类替换,使用抽象类继承,不使用具体类继承。 依赖倒转原则:要依赖于抽象,不要依赖于具体,针对接口编程,不针对实现编程。 接口隔离原则:使用多个隔离的接口,比使用单个接口好,建立最小的接口。 迪米特法则:一个软件实体应当尽可能少地与其他实体发生相互作用,通过中间类建立联系。 合成复用原则:尽量使用合成/聚合,而不是使用继承。
工厂模式 单例模式 建造者模式 适配器模式 桥接模式 过滤器模式 装饰器模式 外观模式 享元模式 代理模式 责任链模式 解释器模式 迭代器模式 观察者模式 ...
分布式
分布式系统是由一组通过网络进行通信、为了完成共同的任务而协调工作的计算机节点组成的系统。分布式系统的出现是为了用廉价的、普通的机器完成单个计算机无法完成的计算、存储任务。其目的是利用更多的机器,处理更多的数据。
分布式一致性算法:PAXOS、Raft、Zab 分布式事务:2PC、3PC、TCC 分布式唯一 ID 生成:雪花算法、UUID、淘宝 TDDL SEQUENCE方案、美团 Leaf 一致性HASH算法 扩展性设计,设计可扩展的软件架构 分布式文件系统:HDFS、FastDFS 微服务架构设计,服务注册、服务发现、服务路由
安全
web安全:CSRF、SQL注入、XSS DDos防范 加解密算法:对称加密、哈希算法、非对称加密 网络隔离:内外网分离、跳板机 授权认证算法:OAuth2.0、OIDC、2FA、单点登录SSO
监控与统计
通过收集日志(Logging),记录程序的调试信息或错误信息,对系统和各个服务的运行状态进行监控 通过收集量度(Metrics),比如累加量,对系统和各个服务的性能进行监控 通过分布式追踪(Tracing ),追踪服务请求是如何在各个分布的组件中进行处理的细节
搜索引擎
全文搜索引擎是目前广泛应用的主流搜索引擎。它的工作原理是计算机索引程序通过扫描文章中的每一个词,对每一个词建立一个索引,指明该词在文章中出现的次数和位置,当用户查询时,检索程序就根据事先建立的索引进行查找,并将查找的结果反馈给用户的检索方式。这个过程类似于通过字典中的检索字表查字的过程。
搜索引擎原理,搜索引擎利用倒排索引技术来实现对全文数据的高效检索。 Lucene,Apache Lucene 是一个开源的全文搜索引擎工具包。 Elasticsearch 原理与使用 Solr 原理与使用
大数据
大数据存储:Hadoop 框架,HDFS、HBase、YARN 架构、Apache Kudu 离线分析:Hive、MapReduce、Spark 流式计算:Flink、Storm、Kafka Stream、Spark Streaming
虚拟化
虚拟化的好处
灵活性:在同一硬件上同时运行多个操作系统 敏捷性:移动操作系统的方式与将文件或图片从一台物理服务器移动到另一台物理服务器的方式相同。 容错:当物理服务器出现故障时,管理软件会自动将实例迁移到可用服务器,甚至无感知物理硬件故障。 降低成本:您不再需要过多的物理服务器,操作和维护所需的费用也随之减少。
中间件
中间件技术创建在对应用软件部分常用功能的抽象上,将常用且重要的过程调用、分布式组件、消息队列、事务、安全、链接器、商业流程、网络并发、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
工具
编辑器
IDE
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开发工具。
测试
单元测试 压力测试 全链路测试 A/B 测试,灰度发布,蓝绿部署