2021年Linux服务器开发的知识技术合集(基础入门到高级进阶)

程序员小灰 · · 3517 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

前言

本文介绍下Linux从入门到高级进阶的学习路线。

整个路线体系专注于服务器后台开发,知识点包括C/C++,Linux,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK等等

(技术点目尾都提供免费视频,关注+qun832218493取资料)

资源列表:

1:linux零基础入门

2:linux服务器开发

3:架构师开发

4:linux内核

5:webrtc入门到精通

6:音视频FFmpeg

7:神器Git入门到精通

什么是Linux?

Linux是一个操作系统软件。与Windows不同的是,Linux是一套开放源代码程序的、并可以自由传播的类Unix操作系统,它是一个支持多用户、多任务、多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。

Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

linux零基础入门:如何快速入门,需要哪些知识点?

1:linux环境专栏

linux系统安装

linux开发环境ssh与Samba配置

linux开发环境Gcc配置

linux的命令操作8条目录操作与5条文件操作

2:shell 脚本编程案例

3:统计文件单词数量(文本操作)

状态机实现文件单词统计

4:实现通讯录(结构体)

通讯录实现的架构设计与需求分析

链表的实现与数据结构的定义

架构接口层的实现

业务逻辑的分析与实现

通讯录人员操作代码的调试

通讯录人员操作代码调试与运行

通讯录删除人员操作的调试与BUG解决

文件保存于加载的接口层实现

文件保存业务实现

通讯录调试与运行

5:并发下的技术方案(锁)

多线程并发锁的项目介绍

多线程并发锁的方案一互斥锁

多线程并发锁的方案一自旋锁

多线程并发锁的方案一原子操作

附:

linux服务器开发

Linux后端服务器开发是针对有Linux基础的,想从事Linux后端服务器开发的。

Linux后端服务器开发一起是由八个维度所组成,

详细知识点:

1. 算法与设计专题

千里之行,始于足下。不积跬步,无以致千里。既能仰望星空又能脚踏实地。

排序与查找

插入排序

快速排序

希尔排序

桶排序

基数排序

归并排序

常用算法

布隆过滤器

字符串匹配 KMP算法

回溯算法

贪心算法

推荐算法

深度优先,广度优先

常用的数据结构

平衡二叉树

红黑树

B-树

KMP算法

栈/队列

布隆过滤器

常用的设计模式

单例模式

责任链模式

过滤器模式

发布订阅模式

代理模式

工厂模式

2. 后台组件编程专题

工欲善其事,必先利其器。后台组件是开发的入门石。

持久化 MySQL

MySQL安装配置与远程连接

项目:数据操作源于SQL语句

项目:存储过程与事务处理

项目:SQL函数,运算,临时表

项目:防数据丢失 备份与恢复

项目:MySQL建库建表建索引

消息队列 ZeroMQ

ZMQ编译安装与开发环境搭建

项目:publisher-subscriber模式实现

项目:request-response模式实现

项目:Router-Dealer模式实现

项目:史上最快的消息队列—性能分析

缓存 Redis

Redis编译安装配置

项目:客户端全局唯一ID保存机制

项目:Redis消息队列机制 发布订阅

项目:Redis事务实战

项目:Redis安全性能,数据备份与恢复

项目:Redis分布式锁详解

反向代理 Nginx

Nginx开发介绍

项目:反向代理负载均衡配置详解

项目:自定义协议upstream开发

项目:子域名映射

项目:服务器后台攻击预防

项目:nginx双虚拟主机

Restful Http

Http第三方接口实现

项目:异步Http请求

项目:ngrok与Restlet

项目:长连接与短链接

协调服务 ZooKeeper

ZK编译安装与C API开发环境

项目:集群管理与服务注册

项目:节点创建与监控

项目:分布式锁的实现

项目:ZK伪集群部署与服务管理

NoSQL MongoDB

MongDB安装与开发介绍

项目:MongoDB备份与恢复

项目:MongoDB文档操作

项目:全文检索与正则表达式

项目:MongoDB建库建集合

3. 代码工程化专题

优秀的工程师有优秀的代码组织能力与代码迭代能力。

架构工程

工程参数配置与编译 cmake

代码规范与命名规则

文件命名与变量命名规则

脚本配置工具 autoconf

代码工程组织架构 Makefile

管理代码

分布式版本控制系统 git

远程仓库,标签管理

github与码云

创建仓库,导入,checkout

svn环境搭建与原理

分支管理 冲突解决

产品代码版本管理 SVN

4. 网络服务专题

网络IO是网络通信的血管,数据是血液。血液的流动是不能离开血管的。

源码实现

服务器IO核心— epoll编程实战

客户端多网络连接机制poll

文件IO管理select实战

框架实战

高性能的时间循环 libev

跨平台异步I/O libuv

跨平台的C++库 Boost.Asio

事件通知库 libevent

理论详解

阻塞型 BIO

异步IO AIO

非阻塞型IO NIO

5. 开源框架专题

欲穷千里目,更上一层楼。站在巨人的肩膀上,看到窗外的景色。

TCP协议栈

基于DPDK的高性能用户态协议栈 f-stack

基于Netmap单线程协议栈 NtyTcp

精简版tcp协议栈 LWIP

并发性

用OpenCL的C++ GPU计算库 Boost.Compute

Intel线程构件块 Intel TBB

并行编程的异构系统的开放标准 OpenCL

C++11的反应性编程库 C++ React

数据库

Redis数据库的C客户端库 hiredis

Facebook的嵌入键值的快速存储 RocksDB

用于Sqlite3的C++对象关系映射 hiberlite

国际化

Unicode 和全球化支持的C、C++ 和Java库 IBM ICU

不同字符编码之间的编码转换库 libiconv

GNU gettext

压缩

非常紧凑的数据流压缩库 Zlib

快速压缩和解压缩 Snappy

非常快速的压缩算法 LZ4

单一的C源文件,紧缩/膨胀压缩库 Miniz

日志

设计非常模块化,并且具有扩展性 Boost.Log

灵活添加日志到文件,系统日志 Log4cpp

添加日志到你的C++应用程序 templog

C++日志库,只包含单一的头文件 easyloggingpp

多媒体库

开源音频库—跨平台的音频API OpenAL

网络实时流媒体通信 WebRTC

音频和音乐数字信号处理库 Maximilian

C++易用和高效的音频合成 Tonic

序列化

快速数据交换格式和RPC系统 Cap'n Proto

协议缓冲,谷歌的数据交换格式 ProtoBuf

高效的跨语言IPC/RPC Thrift

内存高效的序列化库 FlatBuffers

XML库

Gnome的xml C解析器和工具包 LibXml2

简单快速的C++CML解析器 TinyXML2

简单快速的XML解析器 PugiXML

C++的xml解析器 LibXml++

脚本

小型快速脚本引擎 Lua

谷歌的快速JavaScript引擎 V8

嵌入式脚本语言 ChaiScript

Json库

进行编解码和处理Jason数据的C语言库 Jansson

C语言中的JSON解析和打印库 ibjson

轻量级的JSON库 libjson

C/C++的Jason解析生成器 Frozen

数学库

高质量的C++线性代数库 Armadillo

数学图形模板库 GMTL

用于个高精度计算的C/C++库 GMP

高级C++模板头文件库 Eigen

安全

SSL,TLS和DTLS协议的安全通信库 GnuTLS

功能齐全的,开源加密库 Openssl

有关加密方案的免费的C++库 Cryto++

Web应用框架

安全快速开源Web服务器 Lighttpd

基于Qt库的web框架 QDjango

高性能的HTTP和反向代理web服务器 Nginx

网络库

C异步网络开发库 Dyad.c

多协议文件传输库 Curl

高速模块化的异步通信库 ZeroMQ

C++面向对象网络工具包 ACE

异步事件

事件通知库 libevent

跨平台异步I/O libuv

功能齐全,高性能的时间循环 libev

网络和底层I/O编程的跨平台的C++库 Boost.Asio

协程

纯c版的协程框架 ntyco

C++11实现协程库, golang风格 libgo

微信支持8亿用户同时在线的底层IO库 libco

6. 性能测试专题

学而不思则罔,思而不学则殆。从技术反馈中理解知识的原理。

调试库

Boost测试库 Boost.Test

内存调试性能分析工具 Valgrind

谷歌C++测试框架 GoogleTest

内存分配跟踪库 MemTrack

测试库

单元测试框架 minUnit

测试用例编写 libtap

轻量级的C++单元测试框架 UnitTest++

自动化测试用例 gtest和luatest

性能工具

高性能代码构建系统 tundra

Http压测工具 WRK

网站压测工具 webbench

高性能构建系统 FASTBuild

7. Linux系统专题

上帝关闭一扇门,就会打开一扇窗,Linux是程序员世界的另一扇窗。

系统命令工具

进程间通信设施状态 ipcs

Linux系统运行时长 uptime

CPU平均负载和磁盘活动 iostat

监控,收集和汇报系统活动 sar

监控多处理器使用情况 mpstat

监控进程的内存使用情况 pmap

系统管理员调优和基准测量工具 nmon

密切关注Linux系统 glances

查看系统调用 strace

基础命令工具

系统进程状态 ps

虚拟内存统计工具 vmstat

控制台的流量监控工具 vnstat

进程监控工具 atop,htop

内存使用状态 free

网络参数工具

Linux网络统计监控工具 netstat

显示和修改网络接口控制器 ethtool

网络数据包分析利刃 tcpdump

远程登陆服务的标准协议 telnet

获取实时网络统计信息 iptraf

显示主机上网络接口带宽使用情况 iftop

磁盘参数工具

磁盘卸载 umount

读取、转换并输出数据 dd

文件系统系统 df

磁盘挂载 mount

日志监控工具

实时网络日志分析器 GoAccess

多窗口之下日志监控 MultiTail

日志分析系统 LogWatch/Swatch

参数监控工具

监控apache网络服务器整体性能 apachetop

ftp 服务器基本信息 ftptop

IO监控 iotop

电量消耗和电源管理 powertop

监控 mysql 的线程和性能 mytop

系统运行参数分析 htop/top/atop

8. 物联网云广播实战专题

实践结合理论。从生产项目中,体会计算机世界的瑰宝;从产品中,体会业务需求的魅力

项目需求

物联网云广播项目介绍

项目需求规格说明

架构设计和接口说明

工程代码

socket TCP服务器编程

UDP编程与广播多播

TCP的长连接还是短连接

MYSQL库表设计

第三方登陆 微信OAuth2授权登陆

高德地图显示

进程间通信方案

用户注册短信验证

账户充值微信支付

内存池ringbuffer设计

功能测试

用户连接测试用例

tcp与udp数据包测试用例

用户注册测试用例

内存管理测试用例

数据库吞吐量测试用例

产品发布

自动启动之shell脚本

网络组安全与防火墙

产品上云公网发布

附:

linux架构开发

Linux高级互联网架构师是针对有Linux后端服务器开发经验的,想从事架构师相关工作的是从九个维度,系统提升的。比Linux后端服务器开发的课程内容更深入。课程内容也是关注在产品架构,与技术深度的。

  1. 源码分析是针对后端常用的技术组件,进行源码分析,从源码提升代码能力。
  2. 中间件开发,包括协程设计,消息队列等等,自己动手来设计开源组件。
  3. 集群设计,将后端服务器组件集群化设计,来提升性能与稳定性
  4. Linux系统,注重Linux内核部分,文件系统,网络IO,网卡原理,协议栈等等。是从Linux内核中来了解设计。
  5. 音视频是以流媒体与编解码来进行项目实战的。
  6. 性能测试与优化,提升系统的整体吞吐量。
  7. 运维统计,主要是针对持续集成,与docker镜像管理。
  8. 分布式架构设计,是从一线互联网大厂产品架构,总结出来的。了解大厂的技术架构。
  9. IM即时通讯项目实战,一个上市公司的即时通讯产品实现。

详细知识点:

1. 源码分析专题

源码阅读能力是提升技术必不可少的途径

Nginx源码

Nginx基础架构

HTTP架构

进程间的通信机制

Nginx高级数据结构

slab共享内存

upstream机制设计

Redis源码

Redis存储系统原理

数据模型与键值映射

内存操作与磁盘同步

主从同步,原子操作

底层IO实现解析

ZeroMQ源码

消息模型 发布订阅/推拉模型

通信协议 inproc/ipc/tcp/pgm

性能分析与经典MQ对比

底层网络通信实现机制

zmq系统架构与实现原理

2. 中间件开发专题

要有造轮子的能力,也要有不造轮子的觉悟,SDK是高级开发必须要有的封装能力

高性能组件

如何设计内存池

高并发场景下的消息队列

协程框架的实现

手写线程池

异步请求池

连接池

高并发网络IO

select,poll和epoll模型的区别

Linux系统IO模型

理解Linux 服务器高并发编程

网络接入层架构设计

你必须懂得Epoll玩法

并发性

多线程与线程安全

事务的隔离级别

公平锁&非公平锁

CopyOnWrite容器

悲观锁&乐观锁&CAS&ABA问题

事务ACID特性

Web服务

反向代理Nginx

最广泛的web服务器 Httpd

高性能 Web 平台OpenResty

定时调度

触发器按时启动原理

Linux定时任务cron配置

消息队列

消息总线VS消息队列

Redis 消息推送

如何保证消费者接收消息的顺序

分布式定时调度 Opencron

Web安全

CSRF原理及防范

高级Dos攻击-Hash碰撞攻击

脚本注入文件上传漏洞

SQL注入

XSS攻击原理与解决方案

搜索引擎

搜索引擎原理

分布式全文搜索 ElasticSearch

全文检索 Solr

基于MySQL,PostgreSQL全文检索 Sphinx

全文检索引擎工具包 Lucene

网络协议栈

tcp/udp/ip/eth

多进程实现高并发

滑动窗口

延迟确认

定时重传

流量控制

tcp握手挥手

3. 集群专题

必须要有的产品级技能。

MySQL集群

MySQL Cluster 评估指南

读写分离 分库分表

Binlog机制分析

健全性检查与故障排除

数据模型与查询设计

Redis集群

Redis Cluster方案

节点自动发现

master/slave 选举,集群容错

ASK转向/MOVED转向机制

FastDFS集群

tracker与storage节点

文件上传/下载测试

fastdfs-nginx-module的原理

fastdfs的实现原理

K8S集群

K8S核心组件

无缝对接新应用

快速部署应用与扩展

自动部署、管理容器化

Nginx集群

Nginx的实现原理

经典应用场景

高可用方案的实现机制

LVS与Nginx集群

MongoDB集群

高可用的MongoDB集群方案

文档管理机制与实现

配置分片的表与片键

MongoDB集群环境部署

Zookeeper集群

zookeeper的概念与集群环境部署

zk的特性与数据结构

原理及其内部选举机制

zk集群实现机制

4. Linux系统专题

Linux是每个工程师都会讨论的话题

环境编程

系统文件操作 一切设备接文件

信号量 mmap 共享内存

系统时间 时间戳 定时器

网络IO编程 epoll机制

锁机制 互斥锁 spinlock 条件变量 原子操作

进程/线程 数据同步机制

系统运维

系统日志管理与配置

服务器环境搭建与配置

集成化工具安装

shell命令 文件操作

内核编程

跨越进程的障碍 内核通信组件实现

内核配置与编译

网卡驱动的实现

5. 音视频专题

世界因声音与图片而精彩,音视频技术也是互联网技术栈必备技能

流媒体

音视频编码原理详解

AAC, H264主流编码格式

H264视频格式文件走读

WebRTC音视频

WebRTC交互机制详解

X264编码详解

编解码

ffplay音视频同步分析

ffplay控制原理分析

实现WebRTC点对点通话

RTMP与RTSP编码分析

播放器开发基础

6. 性能与测试专题

程序优化是所有程序产品必不可少的话题

理解性能优化

容量评估 平均QPS 高峰QPS 单机QPS

CDN网络加速原理

连接池的性能优化

性能优化方法论

MySQL调优

理解MySQL底层原理 B+Tree机制

索引优化揭秘

SQL语句优化

SQL执行机制详解

测试理论

深度解析 TDD 测试驱动开发

全链路压测经验

Nginx根据IP进行灰度发布 A/B Test

真实流量测试工具 tcpcopy

单元测试minUnit

Linux调优

内核代码组织架构

系统IO参数调优配置

网络协议栈参数配置

内核代码编译与内核更换

GCC调优

快速编译工程Makefile编写

编译机制 编译原理

7. 运维统计专题

团队合作,产品开发,必须要有代码管理能力

Jenkins

搭建Jenkins自动化部署环境

testpreproduction 多环境发布

Jenkins集成git实现自动部署

Jenkins多环境配置,权限管理及插件使用

虚拟化

Xen虚拟化搭建与原理详解

KVM经典详解

OpenStack架构知识梳理

开源Linux容器 OpenVZ

Docker

Dockerfile的编译与镜像编译

Docker-Compose部署与编排

Docker命令与镜像版本提交

Docker的原理

8. 分布式架构专题

以铜为镜,可以正衣冠;以古为镜,可以知兴替;以人为镜,可以明得失。从互联网一线产品的技术架构,提高自己的视野

架构实战

新浪门户负载均衡方案解析

京东海量存储哈希存储引擎解密

虎牙核心视频直播架构技术揭秘

京东分布式K-V存储设计与挑战

阿里网络故障智能化治理解决方案

小艾叮咚语音核心技术语音合成实战

微信安全开放性云平台架构探秘

爱奇艺大数据平台的构建之路

架构中间件

远程调用rpc从入门到精通

多进程高效通信之共享MM全攻略

Nginx进程间通信剖析

高性能服务器为什么需要内存池

百度大规模时序指标自动异常检测实战

架构策略

订阅者发布者模式实现高并发架构

阿里云Elasticsearch架构解析与性能优化实践

两段提交与多段提交

UDP分片原理分析及其实现方法

Reactor模式和线程池实现高并发服务

架构原理

消息驱动式架构设计方法论

动态域名解析和CDN原理

Zookeeper原理

分布式锁的原理

P2P去中心化原理

应用层协议设计方法论

9. IM实时流媒体项目实战专题

理论结合实战

项目需求

IM实时流媒体项目介绍

项目需求规格说明

架构设计和接口说明

工程代码

IM消息服务器

文件传输服务器

文件存储服务器

路由服务器

数据库代理服务器

登陆服务器

HTTP服务器

单聊与群聊

本地持久化

模块化设计

功能测试

用户连接测试用例

tcp与udp数据包测试用例

用户注册测试用例

内存管理测试用例

缓存测试用例

数据库吞吐量测试用例

产品发布

自动启动之shell脚本

持续集成与线上更新

网络组安全与防火墙

产品上云公网发布

附:

linux内核

Linux内核知识体系分为五个部分

1:linux内核开发环境搭建

linux内核研习与项目实战专栏介绍

linux内核编译与升级

linux内核学习方法

2:跨越进程的障碍,实现进程通信(一)

进程间6种通信方式

多个进程之间通信,如何实现通信组件

内核模块操作

进程通信组件,架构实现

系统调用的过程剖析

3:跨越进程的障碍,实现进程通信(二)

主次设备号与private-data的作用

insmod与模块初始化的流程

模块open的流程

rmmod与模块退出的流程

模块write的流程与实现

poll的实现原理与等待队列wait-queue

模块编译与Makefile编写

4:网卡驱动的实现

内核模块安装与mknod

应用程序编程与内核模块调试

Docker的虚拟网卡与网卡的作用

网卡作用于网卡驱动的运行环境

如何设计适配市面上网卡的nic子系统

nic网卡驱动的架构实现

nic网卡驱动的recv与sk-buff

nic网卡初始化与原理分析

nic网卡open与stop实现

5:最后自主思考项目

nic的编译与自主思考题,用户态协议栈

附:

webrtc入门到精通

(1)WebRTC入门

(2)WebRTC开发环境搭建

(3)Coturn穿透和转发服务器搭建

(4)音视频采集和播放

(5)Nodejs实战

(6)手把手实现音视频一对一通话(包含信令协议设计、Web to Web、Android to Web、 Android to Android)

(7)开源方案介绍

(8)AppRTC开源方案搭建

附:

音视频FFmpeg

FFmpeg的学习方向,主要涉及知识点:

1.FFmpeg的转码流程是什么?

2.常见的视频格式包含哪些内容吗?

3.如何把这些内容从视频文件中抽取出来?

4.如何从一种格式转换为另一种格式?

5.如何放大和缩小视频?

6.如何旋转,翻转,填充,裁剪,模糊,锐化视频?

7.如何给视频加logo,删除logo?

8.如何给视频加文本,动态文本?

9.如何处理图片?

10.如何录像,添加动态logo,截图,马赛克视频?

附:

神器Git入门到精通

Git基础

1.1 课程概述

1.2 Linux上安装git

1.3 Mac OS上安装git

1.4 Windows上安装git

1.5 配置git环境

1.6 获取帮助

git常用命令

2.1 创建仓库

2.2 搭建git服务器

2.3 git的基础原理

2.4 提交修改并push到远程仓库

2.5 合并commit为一个

2.6 修改commit的message

2.7 查看commit的信息

2.8 版本回退

2.9 删除文件

2.10 查看不同提交的指定文件的修改

2.11 多客户端之间的同步

2.12 处理突发事件

2.13 指定不需要git管理的文件

2.14 如何解决项目之间的依赖

2.15 如何备份git仓库到本地

2.16 git的基础常用命令

git分支与tag

3.1 创建与合并分支

3.2 解决冲突

3.3 分支管理策略

3.4 Bug分支

3.5 Feature分支

3.6 多人协作

3.7 创建标签

3.8 操作标签

3.9 标准化的开发工作流

全球最大的开源项目管理基地github

4.1 初识 GitHub

4.2 加入 GitHub

4.3 Git 速成

4.4 向GitHub 提交代码

4.5 启用issue跟踪需求和缺陷

4.6 如何保证团队开发质量

企业里为什么喜欢使用gitlab

5.1 搭建gitlab

5.2 gitlab权限管理

5.3 gitlab的codereview

5.4 团队知识管理方法

附:

关注+qun:832218493取资料

最后,希望大家都学有所成。


有疑问加站长微信联系(非本文作者)

本文来自:Segmentfault

感谢作者:程序员小灰

查看原文:2021年Linux服务器开发的知识技术合集(基础入门到高级进阶)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

3517 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传