前言

阶段一:Go语言基础入门和编程思维

  • 01.Go语言基础知识
    • 准备
      • 1-1 G0工程师体系课导学
      • 1-2 go语言的安装
      • 1-3 goland的安装
    • 基础语法
      • 2-1 变量定义
      • 2-2 内建变量类型
      • 2-3 常量与枚举
      • 2-4 条件语句
      • 2-5 循环
      • 2-6 函数
      • 2-7 指针
    • 内建容器
      • 3-1 数组
      • 3-2 切片的概念
      • 3-3 切片的操作
      • 3-4 Map
      • 3-5 Map例题
      • 3-6 字符和字符串处理
    • 面向“对象”
      • 4-1 结构体和方法
      • 4-2 包和封装
      • 4-3 扩展已有类型
      • 4-4 实用内嵌来扩展已有类型
    • Go语言的依赖管理
      • 5-1 依赖管理
      • 5-2 GOPATH 和 GOVENDOR
      • 5-3 go mod的使用
      • 5-4 目录的整理
  • 02.Go语言编程思想
    • 面向接口
      • 1-1 接口的概念
      • 1-2 duck typing的概念
      • 1-3 接口的定义和实现
      • 1-4 接口的值类型
      • 1-5 接口的组合
      • 1-6 常用系统接口
    • 函数式编程
      • 2-1 函数式编程
      • 2-2 函数式编程例一
      • 2-3 函数式编程例二
    • 错误处理和资源管理
      • 3-1 defer调用
      • 3-2 错误处理概念
      • 3-3 服务器统一出错处理_浏览器需放大
      • 3-4 服务器统一出错处理2
    • 测试与性能调优
      • 4-1 测试
      • 4-2 代码覆盖率和性能测试
      • 4-3 使用pprof进行性能调优
      • 4-4 测试http服务器(上)
      • 4-5 测试http服务器(下)
      • 4-6 生成文档和示例代码
    • Goroutine
      • 5-1 goroutine
      • 5-2 go语言的调度器
    • Channel
      • 6-1 channel
      • 6-2 使用Channel等待任务结束
      • 6-3 使用Channel进行树的遍历
      • 6-4 Select
      • 6-5 传统同步机制
      • 6-6 并发模式(上)
      • 6-7 并发模式(下)
      • 6-8 并发任务的控制
    • 迷宫的广度优先搜索
      • 7-1 迷宫_算法
      • 7-2 迷宫代码实现
    • http及其他标准库
      • 8-1 http标准库
      • 8-2 json数据格式的处理
      • 8-3 第三方API数据格式的解析技巧
      • 8-4 gin框架介绍
      • 8-5 为gin增加middleware
    • 开始实战项目
      • 爬虫项目介绍
      • 爬虫的法律风险
      • 新爬虫的选择
      • 总体算法
    • 单任务版爬虫
      • 获得初始页面内容
      • 正则表达式
      • 提取城市和url
      • 单任务版爬虫的架构
      • Engine 与 Parser
      • 测试CityListParser
      • 城市解析器
      • 用户信息解析器
      • 单任务版爬虫性能
    • 并发版爬虫
      • 并发版爬虫架构
      • 简单调度器
      • 并发调度器
      • 队列实现调度器
      • 重构和总结
      • 更多城市
      • 更多用户与去重
    • 数据存储和展示
      • ItemSaver的架构
      • Docker和ElasticSearch介绍
      • Docker的安装和使用
      • ElasticSearch入门
      • 向ElasticSearch存储数据
      • 完整爬虫的运行与数据存储
      • 添加URL与ID
      • 重构与运行
      • 标准模板库介绍
      • 实现前端展示页面
      • 完善前端展示
    • 分布式爬虫
      • 分布式系统简介
      • 分布式爬虫架构
      • jsonrpc的使用
      • ItemSaver服务
      • 整合ItemSaver服务
      • 解析器的序列化
      • 实现爬虫服务
      • 完整分布式爬虫的运行
      • 使用连接池链接爬虫集群
      • 实战项目总结
      • 进一步的工作
    • 总结
      • 体会Go语言的设计

阶段二:租辆酷车小程序与TypeScript

  • 01.小程序极速上手与租辆酷车初体验
    • 1-1 小程序的优缺点
    • 1-2 小程序营销案例
    • 1-3 小程序账号配置
    • 1-4 小程序开发工具
    • 1-5 vscode的安装和配置
    • 1-6 小程序的配置
    • 2-1 小程序的运行机制与setdata渲染(上)
    • 2-2 小程序的运行机制与setdata渲染(下)
    • 3-1 小程序的生命周期
    • 3-2 页面的生命周期和页面栈
    • 3-3 调试工具的使用
    • 4-1 给小程序添加地图组件(上)
    • 4-2 给小程序添加地图组件(下)
    • 4-4 Docker简介
    • 4-5 汽车位置实时更新展示
  • 02.极速上手TypeScript应用
    • 第1章 TS环境搭建与配置
      • 1-1 node和typescript的安装
      • 1-2 typescript小程序代码的生成
      • 1-3 typescript小程序代码的生成
      • 1-4 gitignore的配置
    • 第2章 Typescript与javascript
      • 2-1 typescript简介
      • 2-2 回顾javascript
    • 第3章 Typescript语法基础
      • 3-1 基本数据类型
      • 3-2 基本数据类型
      • 3-3 逻辑控制
      • 3-4 枚举类型
    • 第4章 TS进阶之数组、对象、函数与方法
      • 4-1 数组(上)
      • 4-2 数组(下)
      • 4-3 对象
      • 4-4 函数的定义
      • 4-5 为对象定义方法
  • 03.精通Typescript
    • 第1章 初识TS函数式编程
      • 1-1 函数式编程引导
    • 第2章 高阶函数与函数闭包
      • 2-1 一等公民与高阶函数
      • 2-2 函数的闭包
      • 2-3 函数的闭包
    • 第3章 函数式编程总结与应用
      • 3-1 函数式编程总结
      • 3-2 函数式编程在小程序中的应用
    • 第4章 数组的变换
      • 4-1 数组的变换
    • 第5章 Promise
      • 5-1 回调函数的缺点
      • 5-2 Promise的创建和使用
      • 5-3 同时等待多个Promise
      • 5-4 将小程序API改写成Promise
      • 5-5 获取用户头像1
      • 5-6 获取用户头像2
      • 5-7 async-await 语法糖
    • 第6章 TS之面向对象:接口、类、泛型
      • 6-1 接口
      • 6-2 接口的高级技巧
      • 6-3 类
      • 6-4 用类来实现接口
      • 6-5 泛型
    • 第7章 TS总结
      • 7-1 typescript总结
  • 04.前端知识体系速成
    • 第1章 租辆酷车小程序原型的开发目标
      • 1-1 小程序开发目标
    • 第2章 WXML模版与CSS入门
      • 2-1 WXML简介
      • 2-2 CSS选择器
      • 2-3 CSS相关问题的提问方法
    • 第3章 快速掌握最重要的CSS知识点
      • 3-1 控制元素的位置
      • 3-2 文本样式
      • 3-3 flex布局
      • 3-4 在小程序中使用css

阶段三:“租辆酷车”共享出行产品设计与研发

  • 01.租辆酷车小程序-前端设计初级
    • 1-1 框架的选择
    • 2-1 首页地图页的实现(上)
    • 2-2 首页地图页的实现(下)
    • 2-3 汽车位置的移动
    • 3-1 注册页面布局
    • 3-2 注册表单的实现_1
    • 3-3 注册表单的实现_2
    • 3-4 注册页面的状态转换
    • 4-1 开锁页面的实现_1
    • 4-2 开锁页面的实现_2
  • 02.租辆酷车小程序-前端设计进阶
    • 第1章 行程页面布局与行程计费设计实现
      • 1-1 行程中页面的实现(上)
      • 1-2 行程中页面的实现(下)
    • 第2章 实战事件参数绑定与页面跳转
      • 2-1 行程费用计算
      • 2-2 Swiper控件(上)
      • 2-3 Swiper控件(下)
      • 2-4 页面的带参数跳转(上)
      • 2-5 页面的带参数跳转(下)
      • 2-6 页面跳转的强类型化重构(上)
      • 2-7 页面跳转的强类型化重构(下)
    • 第3章 页面导航设计与实现
      • 3-1 垂直导航之Scroll-View(上)
      • 3-2 垂直导航之Scroll-View(下)
      • 3-3 控制右侧内容的滚动
      • 3-4 控制左侧导航滚动
    • 第4章 前端核心能力拓展-自定义组件
      • 4-1 自定义组件之模态对话框
    • 第5章 前端总结
      • 5-1 前端开发的总结
  • 03.租辆酷车后端-接入微服务GRPC
    • 第1章 Go语言vscode配置
      • 1-1 Go语言之vscode配置
    • 第2章 初识微服务框架gRPC与protobuf
      • 2-1 GRPC的作用
      • 2-3 ProtoBuf编译器的安装
      • 2-4 ProtoBuf的使用
      • 2-5 复合类型和枚举类型
      • 2-6 ProtoBuf字段的可选性
    • 第3章 微服务gRPC进阶
      • 3-1 GRPC服务器及客户端
      • 3-2 REST vs RPC
      • 3-3 GRPC Gateway的作用
      • 3-4 GRPC Gateway的实现
    • 第4章 小程序结合微服务应用实战
      • 4-1 小程序访问GRPC Gateway
      • 4-2 数据类型的统一填坑
      • 4-3 小程序项目结构的调整
      • 4-4 小程序请求的强类型化(上)
      • 4-5 小程序请求的强类型化(下)
  • 04.微服务与存储设计+实战登录服务
    • 第1章 微服务进阶实战-租辆酷车服务划分设计与实现
      • 1-1 进一步理解微服务
      • 1-2 租辆酷车后端的微服务划分
      • 1-3 小程序登陆过程分析
      • 1-4 登陆服务的框架
      • 1-5 登陆服务的框架
      • 1-6 获取OpenID_1
      • 1-7 获取OpenID_2
    • 第2章 租辆酷车小程序存储设计实战-基于NoSQL之MogoDB
      • 2-1 关系型数据库 vs 非关系型数据库
      • 2-2 用docker来启动MongoDB
      • 2-3 MongoDB的CRUD操作
      • 2-4 用MongoDB Playground模拟用户登陆
      • 2-5 通过go语言来操作MongoDB
    • 第3章 租辆酷车登录服务设计与实战
      • 3-1 实现微信登录数据绑定
      • 3-2 数据绑定的代码重构
      • 3-3 用Go语言来控制Docker启动MongoDB
      • 3-4 建立针对MongoDB的测试库
      • 3-5 表格驱动测试的实践
      • 3-6 表格驱动测试的实践
      • 3-7 登陆服务阶段性总结
  • 05.租辆酷车权限设计与JWT实战
    • 第1章 权限验证JWT与RSA非对称加密算法
      • 1-1 JWT简介
      • 1-2 用RSA非对称密钥签名JWT
    • 第2章 JWT+Go语言应用
      • 2-1 JWT的Go语言实现
      • 2-2 JWT的Go语言实现
      • 2-3 验证JWT Token
      • 2-4 验证JWT Token
    • 第3章 Context上下文与登录拦截实战
      • 3-1 Context的概念
      • 3-2 Context的示例
      • 3-3 创建TripService
      • 3-4 实现登陆状态拦截器
      • 3-5 实现登陆状态拦截器
    • 第4章 重构实践+Identifier Type设计模式应用
      • 4-1 重构
      • 4-2 应用Identifier Type设计模式
    • 第5章 客户端登录携带token+登录重试实战
      • 5-1 客户端携带token
      • 5-2 客户端登陆的重试
  • 06.租辆酷车后端-行程服务实战+后端最佳实践
    • 第1章 行程服务的标准化流程
      • 1-1 行程服务的定义(上)
      • 1-2 行程服务的定义(下)
      • 1-3 行程的创建
      • 1-4 行程的获取
      • 1-5 对于ID的进一步重构
      • 1-6 获取行程的测试
      • 1-7 创建行程的测试
    • 第2章 批量获取和乐观锁保护
      • 2-1 批量获取行程
      • 2-2 用乐观锁更新行程(上)
      • 2-3 用乐观锁更新行程(下)
    • 第3章 行程服务整合
      • 3-1 创建行程服务及防入侵(上)
      • 3-2 创建行程服务及防入侵(下)
      • 3-3 创建行程服务的测试(上)
      • 3-4 创建行程服务的测试(下)
      • 3-5 创建行程前后端联调
      • 3-6 获取行程及行程列表的前后端联调
      • 3-7 行程更新服务
      • 3-8 行程生命周期的测试
  • 07.租辆酷车后端-身份服务与认证实战+云存储
    • 第1章 租辆酷车-身份服务设计与实战
      • 1-1 身份服务的定义
      • 1-2 身份服务的实现
      • 1-3 客户端的对接
      • 1-4 微信数据双向绑定
      • 1-5 与行程服务的联调
    • 第2章 租辆酷车-云存储设计与实战
      • 2-1 对象存储的简介和使用
      • 2-2 用Go语言和小程序操作对象存储
      • 2-3 获取图片内容的流程分析
      • 2-4 存储服务的定义
      • 2-5 存储服务的数据库实现
      • 2-6 存储服务的完整实现
      • 2-7 使用GRPC客户端检查存储服务
    • 第3章 租辆酷车-身份认证设计与实战
      • 3-1 与身份认证服务的关联
      • 3-2 身份认证服务的测试以及修改
      • 3-3 身份认证模块的前后端联调
      • 3-4 阶段小结

阶段四:“租辆酷车”架构演进之高性能位置更新与服务部署

  • 01.租辆酷车-实时位置服务
    • 1-1 汽车服务引导
    • 1-2 物联网简介
    • 2-1 RabbitMQ简介
    • 2-2 使用go语言进行收发
    • 2-3 使用go语言实现pub-sub
    • 3-1 汽车服务的设计
    • 3-2 汽车服务的定义
    • 3-3 汽车服务CRUD的实现
    • 3-4 汽车状态更新的发布
    • 3-5 汽车状态更新的发布
    • 4-1 汽车状态模拟1
    • 4-2 汽车状态模拟
    • 4-3 汽车状态模拟
  • 02.租辆酷车-实时位置更新的处理和展示
    • 1-1 WebSocket简介
    • 1-2 WebSocket链接的断开
    • 2-1 给汽车服务添加websocket
    • 2-2 客户端的开锁处理
    • 3-1 位置模拟服务的使用
    • 3-2 位置实时更新的后端实现
    • 3-3 行程位置更新
    • 3-4 用户身份的Impersonation
    • 3-5 控制GRPC Gateway的头部映射
    • 4-1 首页头像的实时更新
    • 4-2 首页头像实时更新的展示
    • 4-3 汽车服务及全部开发总结
  • 03.租辆酷车服务的k8s集群部署
    • 1-1 Kubernetes的历史
    • 1-2 集群的配置及版本
    • 1-3 kubectl的安装
    • 1-4 用kind来配置本地集群
    • 1-5 用kubectl来连接集群
    • 1-6 容器
    • 1-7 节点及物理层
    • 1-8 服务与网络
    • 2-1 构建Docker镜像
    • 2-2 Dockerfile指令详解
    • 2-3 为Docker镜像瘦身
    • 2-4 flag与环境变量的使用
    • 2-5 提取所有的参数
    • 2-6 为所有服务制作镜像
    • 2-7 上传镜像

阶段五:电商项目- 微服务基础

  • 01.从0开始理解rpc和grpc
    • 1-1 课程学习前的说明 - 很重要!!
    • 1-2 课程中需要用到的开发环境介绍
    • 1-3 windows中安装centos7虚拟机
    • 1-4 xshell的安装和使用
    • 1-5 git的安装和配置
    • 1-6 docker和docker-compose的安装
    • 1-7 mysql和navicat的安装和配置
    • 1-8 windows下安装go和goland的配置 - 很重要!!
    • 1-9 linux下go开发环境搭建
    • 1-10 windows下安装nodejs开发环境
    • 1-11 linux下安装和配置nodejs开发环境
    • 1-12 代码提示神器 - kite的安装和配置
    • 2-1 gopath开发模式和go modules开发模式对比
    • 2-2 go编码规范-1
    • 2-3 go编码规范-2
    • 2-4 什么是rpc?rpc开发的挑战是什么?-1
    • 2-5 什么是rpc?rpc开发的挑战是什么?- 2
    • 2-6 通过http完成add服务端的功能
    • 2-7 通过http完成add客户端的功能
    • 2-8 rpc架构技术要点
    • 3-1 go快速体验rpc开发
    • 3-2 替换rpc的序列化协议为json
    • 3-3 替换rpc的传输协议为http
    • 3-4 进一步改造rpc调用的代码-1
    • 3-5 进一步改造rpc调用的代码-2
    • 4-1 什么是grpc和protobuf
    • 4-2 grpc开发环境的搭建
    • 4-3 goland下配置protobuf插件
    • 4-4 protobuf和json的直观对比
    • 4-5 为什么我们需要安装protoc和protoc-gen-go?
    • 4-6 go下grpc快速体验
    • 4-7 grpc的流模式的定义
    • 4-8 grpc的单向流,双向流代码实现
  • 02.grpc和protobuf进阶
    • 1-1 protobuf的基本类型和默认值
    • 1-2 option go_package的作用
    • 1-3 proto文件同步时的坑
    • 1-4 proto文件中import另一个proto文件?
    • 1-5 嵌套的message对象
    • 1-6 protobuf中的enum枚举类型
    • 1-7 map类型
    • 1-8 使用protobuf内置的timestamp类型
    • 1-9 grpc的metadata机制
    • 1-10 grpc拦截器
    • 1-11 通过拦截器和metadata实现grpc的auth认证
    • 1-12 grpc的验证器
    • 1-13 1-12-2grpc的验证器
    • 1-14 grpc的状态码
    • 1-15 grpc中的错误处理
    • 1-16 grpc的超时机制
    • 1-17 protoc生成的go的源码里面有什么?
  • 03.yapi文档管理、gorm详解
    • 1-1 如何启动电商系统和后台管理系统
    • 1-2 后台管理系统需求
    • 1-3 电商系统需求分析
    • 2-1 单体应用如何部署?
    • 2-2 单体应用开发痛点
    • 2-3 单体应用的架构演变
    • 2-4 服务拆分变动
    • 2-5 微服务的基本拆分
    • 2-6 分层微服务架构
    • 2-7 微服务需要解决的问题 - 重要!!
    • 3-1 前后端分离的系统开发演变过程
    • 3-2 接口文档管理之痛
    • 3-3 yapi的安装和配置
    • 3-4 yapi基本功能使用
    • 3-5 接口的导入和导出
    • 4-1 什么是orm?如何正确看待orm?
    • 4-2 gorm连接数据库
    • 4-3 快速体验auto migrate功能
    • 4-4 gorm的Model的逻辑删除
    • 4-5 通过NullString解决不能更新零值的问题
    • 4-6 表结构定义细节
    • 4-7 通过create方法插入记录
    • 4-8 批量插入和通过map插入记录
    • 4-9 通过take,first、last获取数据
    • 4-10 gorm的基本查询
    • 4-11 gorm的更新操作
    • 4-12 gorm的软删除细节
    • 4-13 表的关联插入
    • 4-14 通过preload和joins查询多表
    • 4-15 has many关系
    • 4-16 gorm处理多对多的关系
    • 4-17 gorm的表名自定义、自定义beforecreate逻辑
  • 04.gin快速入门
    • 1-1 gin的helloworld体验
    • 1-2 使用New和Default初始化路由器的区别
    • 1-3 gin的路由分组
    • 1-4 获取url中的变量
    • 1-5 获取get和post表单信息
    • 1-6 gin返回protobuf
    • 1-7 登录的表单验证
    • 1-8 注册表单的验证
    • 1-9 表单验证错误翻译成中文
    • 1-10 表单中文翻译的json格式化细节
    • 1-11 自定义gin中间件
    • 1-12 通过abort终止中间件后续逻辑的执行
    • 1-13 gin的中间件原理源码分析
    • 1-14 gin返回html
    • 1-15 加载多个html文件
    • 1-16 static静态文件的处理
    • 1-17 gin的优雅退出

阶段六:从0到1实现完整的微服务框架

  • 01.用户服务的grpc服务
    • 1-1 定义用户表结构
    • 1-2 同步表结构
    • 1-3 md5加密
    • 1-4 md5盐值加密解决用户密码安全问题
    • 1-5 定义proto接口
    • 1-6 用户列表接口
    • 1-7 通过id和mobile查询用户
    • 1-8 新建用户
    • 1-9 修改用户和校验密码接口
    • 1-10 通过flag启动grpc服务
    • 1-11 批量生产用户
    • 1-12 测试用户微服务接口
    • 1-13 课后作业
  • 02.用户服务的web服务
    • 1-1 新建项目和目录结构构建
    • 1-10 viper集成到gin的web服务中
    • 1-2 go高性能日志库 - zap使用
    • 1-3 zap的文件输出
    • 1-4 集成zap和理由初始到gin的启动过程 - 1
    • 1-5 集成zap和理由初始到gin的启动过程 - 2
    • 1-6 gin调用grpc服务-1
    • 1-7 gin调用grpc服务-2
    • 1-8 配置文件 - viper
    • 1-9 viper的配置环境开发环境和生产环境隔离
    • 2-1 表单验证的初始化
    • 2-2 自定义mobile验证器
    • 2-3 登录逻辑完善
    • 2-4 session机制在微服务下的问题
    • 2-5 json web token的认证机制
    • 2-6 集成jwt到gin中
    • 2-7 给url添加登录权限验证
    • 2-8 如何解决前后端的跨域问题
    • 2-9 获取图片验证码
    • 2-10 阿里云发送短信
    • 2-11 redis保存验证码
    • 2-12 用户注册接口
  • 03.服务注册
    • 发现、配置中心、负载均衡
      • 第1章 注册中心-consul
        • 1-1 什么是服务注册和发现以及技术选型
        • 1-2 consul的安装和配置
        • 1-3 服务注册和注销
        • 1-4 go集成consul
        • 1-5 为grpc服务添加viper和zap
        • 1-6 grpc服务如何进行健康检查?
        • 1-7 将grpc服务注册到consul中
        • 1-8 gin集成consul
        • 1-9 将用户的grpc连接配置到全局共用
      • 第2章 负载均衡
        • 2-1 动态获取可用端口
        • 2-2 什么是负载均衡,负载均衡的策略有哪些?
        • 2-3 常用负载均衡算法
        • 2-4 gin从consul中同步服务信息并进行负载均衡-1
        • 2-5 grpc从consul中同步服务信息并进行负载均衡-2
        • 2-6 gin集成grpc的负载均衡
      • 第3章 分布式配置中心
        • 3-1 为什么需要配置中心
        • 3-2 配置中心选型-apollo vs nacos
        • 3-3 nacos的安装
        • 3-4 nacos的组、配置集、命名空间
        • 3-5 通过api获取nacos的配置以及nacos的配置更新
        • 3-6 gin集成nacos
        • 3-7 service集成nacos

阶段七:微服务实现电商系统

  • 01.商品微服务的grpc服务
    • 1-1 需求分析-数据库实体分析
    • 1-2 需求分析-商品微服务接口分析
    • 1-3 商品分类表结构设计应该注意什么?
    • 1-4 品牌、轮播图表结构设计
    • 1-5 商品表结构设计
    • 1-6 生成表结构和导入数据
    • 1-7 定义proto接口
    • 1-8 快速启动grpc服务
    • 1-9 品牌列表实现
    • 1-10 品牌新建,删除、更新
    • 1-11 轮播图的查询、新增、删除和修改
    • 1-12 商品分类的列表接口 - 1
    • 1-13 商品分类的列表接口 - 2
    • 1-14 获取商品分类的子分类
    • 1-15 商品分类的新建,删除和更新接口
    • 1-16 品牌分类相关接口
    • 1-17 商品列表页接口 - 1
    • 1-18 商品列表页接口 - 2
    • 1-19 商品列表页接口 - 3
    • 1-20 批量获取商品信息、商品详情接口
    • 1-21 新增、修改和删除商品接口
  • 02.商品微服务的gin层和oss图片服务
    • 1-1 快速将用户的web服务转换成商品的web服务
    • 1-2 商品的列表页接口 - 1
    • 1-3 商品的列表页接口 - 2
    • 1-4 如何设计一个符合go风格的注册中心接口
    • 1-5 gin的退出后的服务注销
    • 1-6 用户的web服务服务注册和优雅退出
    • 1-7 新建商品
    • 1-8 获取商品详情
    • 1-9 商品删除,更新
    • 1-10 商品分类的接口
    • 1-11 轮播图接口和yapi的快速测试
    • 1-12 品牌列表页接口
    • 1-13 品牌分类接口
    • 2-1 为什么要使用阿里云oss
    • 2-2 oss的基本概念介绍
    • 2-3 使用代码控制文件上传
    • 2-4 前端直传oss的流程
    • 2-5 gin集成前端直传文件
    • 2-6 为什么我们需要内网穿透
    • 2-7 内网穿透技术解决前端直传的回调
    • 2-8 将oss集成到gin微服务中
  • 03.库存服务和分布式锁
    • 第1章 库存服务
      • 1-1 库存服务的重要性
      • 1-2 表结构设计
      • 1-3 proto接口设计
      • 1-4 快速启动库存服务
      • 1-5 设置库存和获取库存接口
      • 1-6 本地数据库事务解决库存扣减的失败问题
      • 1-7 订单超时归还的重要性
      • 1-8 测试库存接口
      • 1-9 为所有的商品添加库存信息
    • 第2章 分布式锁
      • 2-1 并发场景下的库存扣减不正确的问题
      • 2-2 通过锁解决并发的问题
      • 2-3 什么是分布式锁
      • 2-4 悲观锁机制和mutex有什么关系?
      • 2-5 mysql的for update语句实现悲观锁
      • 2-6 gorm实现for update悲观锁
      • 2-7 基于mysql的乐观锁实现原理
      • 2-8 gorm实现基于mysql的乐观锁
      • 2-9 基于redsync的分布式锁实现同步
      • 2-10 redsync集成到库存服务中
      • 2-11 redis分布式锁源码解析 - setnx的作用
      • 2-12 redis分布式锁源码解析 - 过期时间和延长锁过期时间机制
      • 2-13 redis分布式锁源码解析 -如何防止锁被其他的goroutine删除?
      • 2-14 redis的分布式锁在集群环境之下容易出现的问题
      • 2-15 redlock源码分析
  • 04.订单和购物车微服务
    • 第1章 订单和购物车服务-service
      • 1-1 需求分析
      • 1-2 订单相关表结构设计
      • 1-3 proto接口定义
      • 1-4 启动订单服务
      • 1-5 购物车列表和添加商品到购物车接口
      • 1-6 更新购物车、删除购物车记录接口
      • 1-7 订单列表页接口
      • 1-8 查询订单详情接口
      • 1-9 新建订单的流程分析
      • 1-10 订单微服务连接商品和库存微服务
      • 1-11 调用商品微服务查询商品基本信息
      • 1-12 调用库存微服务扣减库存
      • 1-13 通过mysql本地事务确保订单新建过程的顺利
      • 1-14 更新订单的状态接口
      • 1-15 订单服务接口调试 -1
      • 1-16 订单服务接口调试-2
    • 第2章 订单和购物车服务-web层
      • 2-1 快速启动订单服务
      • 2-2 购物车列表页接口
      • 2-3 添加商品到购物车
      • 2-4 更新和删除购物车记录
      • 2-5 订单列表页
      • 2-6 订单详情接口开发和测试
      • 2-7 新建订单接口开发和测试
  • 05.支付宝支付、用户操作微服务、前后端联调
    • 第1章 支付宝支付
      • 1-1 支付宝沙箱环境开发流程
      • 1-2 私钥、公钥的概念以及支付宝如何解决订单的安全性问题
      • 1-3 支付宝的公钥、私钥和回调url配置
      • 1-4 生成支付宝的支付url
      • 1-5 gin集成支付宝支付
      • 1-6 支付宝回调通知url逻辑接口
    • 第2章 收藏、收货地址、留言服务开发
      • 2-1 需求分析
      • 2-2 定义用户操作服务的表结构
      • 2-3 定义proto接口
      • 2-4 启动用户服务
      • 2-5 service的handler源码解读
      • 2-6 web服务启动
      • 2-7 gin的api源码解读
      • 2-8 通过yapi测试接口
  • 06.elasticsearch实现搜索微服务
    • 第1章 elasticsearch常用接口
      • 1-1 我们为什么要用elasticsearch进行搜索_音频
      • 1-2 安装elasticsearch和kibana
      • 1-3 elasticsearch中的基本概念
      • 1-4 通过put和post方法添加数据
      • 1-5 通过url和query body查询数据
      • 1-6 通过es更新数据的坑
      • 1-7 通过bulk和mget批量操作数据
      • 1-8 一个完整的查询api是如何的-match查询?
      • 1-9 es是如何通过倒排索引查询数据的?(1:30-2:30 代码小)
      • 1-10 match_phrase进行短语查询
      • 1-11 通过multi_match指定查询字段权重
      • 1-12 query_string查询和match_all查询
      • 1-13 term查询有哪些需要注意的地方
      • 1-14 range区间查询、exists查询、fuzzy模糊查询
      • 1-15 bool复合查询- must、must_not、should、filter
      • 1-16 mapping中的keyword和text类型区别
      • 1-17 match查询原理分析 - analyzer查询过程
      • 1-18 分词对于elasticsearch为什么很重要
      • 1-19 ik分词器的安装和使用
      • 1-20 自定义分词器词库
    • 第2章 将elasticsearch集成到项目中
      • 2-1 go实现match查询
      • 2-2 将es中的对象转换为struct类型
      • 2-3 保存数据到es中
      • 2-4 通过go语言完成mapping的新建
      • 2-5 有哪些接口需要使用es
      • 2-6 mysql和es分别在系统中的角色是什么?
      • 2-7 建立商品对应的struct和mapping
      • 2-8 启动gin的初始化过程新建index和mapping
      • 2-9 将mysql中的商品数据同步到es中
      • 2-10 如何通过mysql和es协作完成商品的查询-1
      • 2-11 如何通过mysql和es协作完成商品的查询-2
      • 2-12 确保商品添加到es中的事务一致性

阶段八:分布式系统核心、微服务的部署

  • 01.分布式理论基础、分布式事务解决方案
    • 1-1 为什么订单会有超时机制
    • 1-2 数据库事务的ACID特性
    • 1-3 分布式系统中出现哪些故障会导致数据不一致?
    • 2-1 cap理论
    • 2-2 BASE理论
    • 2-3 2pc两阶段提交分布式事务
    • 2-4 TCC分布式事务实现方案
    • 2-5 TCC分布式事务实现方案 - 订单服务的tcc接口
    • 2-6 TCC分布式事务实现方案 - tcc实现难点
    • 2-7 基于本地消息的最终一致性方案
    • 2-8 基于可靠消息的最终一致性
    • 2-9 最大努力通知方案
  • 02.学习rocketmq实现幂等性机制等
    • 1-1 mq的应用场景
    • 1-2 mq消息队列技术选型
    • 2-1 rocketmq的安装和配置
    • 2-2 rocketmq的基本概念
    • 2-3 rocketmq的消息类型
    • 2-4 go发送普通消息
    • 2-5 通过pushconsumer消费消息
    • 2-6 为什么要使用延迟消息解决库存超时归还问题?
    • 2-7 通过TransactionProducer发送事务消息
    • 2-8 测试rocketmq的事务消息
    • 3-1 订单新建过程中会出现哪些不可控因素导致数据不一致的问题?
    • 3-2 先扣减库存和后扣减库存是否能解决分布式事务的问题?
    • 3-3 tcc在解决库存扣减中的问题
    • 3-4 基于可靠消息最终一致性方案在库存服务上的不足
    • 3-5 如何通过基于可靠消息实现库存的一致性
    • 3-6 在createorder中发送事务消息
    • 3-7 ExecuteLocalTransaction本地事务的逻辑
    • 3-8 本地事务消息回查应该如何做?
    • 3-9 库存扣减服务中表结构的设计
    • 3-10 gorm定义具备嵌套对象的列
    • 3-11 库存服务的sell逻辑修改和归还逻辑重构
    • 3-12 测试库存服务和库存扣减历史记录
    • 3-13 测试rocketmq的事务回查后的库存归还
    • 3-14 在订单服务中发送延时消息解决库存归还的问题
    • 3-15 rocketmq中shutdown造成的坑
    • 4-1 什么是服务雪崩
    • 4-2 超时、重试和幂等性机制
    • 4-3 哪些情况下需要考虑幂等性问题
    • 4-4 使用grpc-middleware实现grpc调用的重试
    • 4-5 常用的幂等性解决方案
  • 03.链路追踪、限流、熔断、降级
    • 1-1 为什么我们需要链路追踪
    • 1-2 链路追踪技术选型
    • 1-3 jaeger的安装和架构介绍
    • 1-4 opentracing中的tracer、span、spancontext
    • 2-1 go通过jaeger-client发送单个span
    • 2-2 go发送多级嵌套span
    • 2-3 go下通过grpc发送span消息
    • 2-4 gin中添加拦截器实现jaeger注入
    • 2-5 修改grpc_opentracing源码
    • 2-6 配置订单服务的web层逻辑
    • 2-7 grpc集成opentracing的原理
    • 2-8 grpc的server端如何获取客户端的span
    • 3-1 什么是限流、熔断和降级
    • 3-2 sentinel和hystrix对比
    • 3-3 sentinel的qps限流
    • 3-4 sentinel的预热和冷启动
    • 3-5 sentinel的Throttling配置策略
    • 3-6 sentinel的熔断接口
    • 3-7 sentinel的熔断接口-基于错误数
    • 3-8 sentinel的熔断接口-基于错误率和慢请求
    • 3-9 gin集成sentinel实现限流
  • 04.api网关、部署
    • 1-1 什么是api网关
    • 1-2 api网关具备的功能有哪些?
    • 1-3 api网关技术选型
    • 1-4 kong的安装
    • 2-1 kong的8001、800和1337端口号的关系
    • 2-2 基本的路由转发配置
    • 2-3 kong的service、routes、upstream的请求过程
    • 2-4 kong集成consul实现服务发现和负载均衡
    • 2-5 kong配置jwt实现登录校验
    • 2-6 kong配置反爬和ip黑名单
    • 3-1 敏捷开发中的持续集成痛点
    • 3-2 安装jenkins和关闭防火墙
    • 3-3 jenkins构建服务器流程
    • 3-4 安装jenkins常用插件
    • 3-5 通过free style构建项目
    • 3-6 将构建服务器上的代码上传到运行服务器
    • 3-7 通过pipeline实现持续集成
    • 3-8 通过jenkinsfile管理构建pipeline脚本
    • 3-9 通过远程和其他工程触发构建
    • 3-10 定时构建和轮询SCM构建
    • 3-11 参数化pipeline构建项目
    • 4-1 有哪些服务器我们需要部署?
    • 4-2 前端代码上传到git并启动
    • 4-3 nginx中部署vuejs
    • 4-4 jenkens部署vuejs项目
    • 4-5 通过go build构建go微服务
    • 4-6 发布go项目到远程服务器上
    • 4-7 通过shell脚本启动gin服务