价格: 29 学币

分类: 职业进阶

发布时间: 2021年12月8日 22:59

最近更新: 2021年12月19日 01:03

资源类型: SVIP

〖课程介绍〗:

  • 课程设计对标字节跳动 2-2,教学贴近大厂真实场景
  • 资深 Go 工程师手把手带你实现能力进阶
  • 资深 Go 工程师,某互联网公司技术总监
  • 毛剑有近十年的服务端研发经验,他擅长高性能、高可用的服务端研发。毛剑是忠实的 Go 语言粉丝,也是一名 Go 语言老手,他曾在 GitHub 上开源了几个基于 Go 语言的项目,如果你想了解他的技术实力,可以点进去看看,毕竟,Talk is cheap,Show you the code。
  • 另外,毛剑作为嘉宾,也在 QConArchSummitGopherChina 等业界知名会议上做过 Go 相关的技术干货分享。
  • 作为资深架构师,他参与了某大型互联网公司从单体架构到微服务架构的完整转型,并从中收获了很多经验,这其中包括微服务治理、可用性设计、数据一致性设计、缓存、消息队列、监控、日志、负载均衡,以及 RPC 框架等。
  • 作为公司的技术专家,他还负责公司的 Go 工程师招聘,所以他非常了解一线互联网公司对于 Go 工程师的能力要求,以及 Go 工程师在成长过程中,可能会遇到的问题。
  • 熟练掌握 Go 语言,熟悉 Goroutine、Channel、锁、GC 等核心特性;
  • 具备 3 年以上后端开发经验,并具有 1 年以上 Go 语言服务端开发经验;
  • 熟练掌握 Golang 常用框架,深入了解框架提供的特性及其实现原理细节;
  • 熟悉常见的中间件技术,包括但不限于 MySQL、RPC、MQ、Redis 等;
  • 了解分布式技术,具备扎实的工程经验和软件设计能力;
  • 熟悉微服务架构,具有高并发或大型 Go 项目经验者优先。

 

 

〖课程目录〗:

模块一:Go 语言实践 – Runtime

教学目标

  1. 了解 Go 语言中 Goroutine 的调度原理
  2. 了解 Go 语言中的内存模型
  3. 了解 Go 语言中 GC(垃圾回收)的原理
  4. 了解 Go 语言中 channel 的消息通讯原理

学习和工作中的痛点

  1. 分不清 Goroutine 和线程的区别
  2. 不熟悉 Go 的内存分配机制
  3. 搞不懂 GC 三色标记算法
  4. 不了解 channel 的底层实现

详细内容

  1. Goroutine 的实现、GPM 调度模型、调度状态及流转、调度原理、协作式抢占以及和网络库的协作
  2. Go 内存分配的内部结构和分配机制
  3. Go GC 介绍、三色标记的实现原理、GC 的流程以及 GC 的一些优化方案
  4. Go channel 的通讯机制、环形队列的结构、调度和唤醒的原理

模块二:Go 语言实践 – 并行编程

教学目标

  1. 了解 Go 语言中的 Memory Model
  2. 了解 Go 语言的并发特性并发编程模式:Timeout、Pipeline、Cancellation、Fanout、errgroup 等模式
  3. 了解 Go 语言中 Context 的原理并掌握其使用方法

学习和工作中的痛点

  1. 搞不清楚 Go 中内存模型和同步语义
  2. 无法熟练使用基于 channel 通讯方式的并行编程模式
  3. 不明白 Context 传播式传递有什么意义

详细内容

  1. 内存模型:Happens Before、同步语义、channel 通讯、锁
  2. 利用 channel 完成并行开发的设计模式,包含超时控制、管道、扇出、errgroup 并发
  3. 使用 Go 标准库 Context 的原理和最佳实践,包含超时控制、元数据传递、生命周期控制

模块三:Go 语言实践 – 网络编程

教学目标

  1. 熟练掌握 Go 语言中的 TCP 网络编程
  2. 熟练掌握 Go 语言中的 HTTP 网络编程

学习和工作中的痛点

  1. 不知道怎么用 Go 实现高性能的 TCP Server
  2. HTTP 框架有不少,但不知道怎样做选型
  3. 不会针对业务需求对 HTTP 框架做针对性的扩展

详细内容

  1. 结合 goim 项目了解 Go 语言中 TCP Server 的基础库和性能优化方案
  2. 结合 gin 项目了解 Go 语言中的 HTTP Server 的基础库和框架

模块四:Go 语言实践 – 异常处理

教学目标

  1. 了解 Go 语言中 error 的处理方法
  2. 了解 Go 语言中业务错误的处理方法

学习和工作中的痛点

  1. error 的处理复杂,不会正确使用
  2. 业务错误定义和 error 整合难度较高

详细内容

  1. Go 语言中的 error 处理实践:检查错误、定义错误、追加上下文
  2. Go 项目中的业务错误码如何结合 error 的最佳实践

模块五:Go 工程化实践

教学目标

  1. 了解 Go 项目中良好的项目目录组织原则和规范
  2. 了解 Go 项目中 API 的设计方法和规范
  3. 了解 Go 项目中 Package 的管理和设计方法
  4. 了解 Go 项目中的单元测试方法

学习和工作中的痛点

  1. 不知道怎么做 Go 项目的标准化管理
  2. 总是设计出各种不合理的 API
  3. 不知道怎么做包管理

详细内容

  1. 良好的 Go 项目中的分层目录结构组织和代码规范
  2. Go 项目中 API 的设计原则和方法:定义、状态和业务错误码处理
  3. Go 项目中包的设计和最佳实践、go mod 的使用
  4. go test 工具链的使用方法、单元测试的最佳实践以及 Mock 技术

模块六:Go 架构实践 – 分布式架构(前端负载均衡)

教学目标

  1. 掌握高可用 DNS 的最佳实践
  2. 了解 CDN 的架构和应用场景
  3. 深入理解 4/7 层负载均衡的原理

学习和工作中的痛点

  1. 缺乏对在线服务的全链路视野
  2. 不了解应用服务上层的负载均衡

详细内容

  1. DNS 的原理、防劫持的方法、HTTPDNS + IP 长连接
  2. CDN 的系统架构、应用领域以及保证数据一致性的方法
  3. LVS、Nginx 4/7 层负载均衡的原理和实践

模块七:Go 架构实践 – 分布式架构(数据分片)

教学目标

  1. 掌握数据 Sharding 的设计原则
  2. 了解 Hash 分片的算法和演进历史

学习和工作中的痛点

  1. 不了解 Sharding 的应用场景,不会合理使用
  2. 搞不清楚各种变种 Hash 算法的使用场景

详细内容

  1. 架构设计中的数据分片设计,如:分库分表、多活的 Shard 设计等等
  2. 分片算法的 Hash 实现和演进:Hash 求余、一致性 Hash、有界负载一致性 Hash、节点映射

模块八:Go 架构实践 – 微服务(微服务概览与治理)

教学目标

  1. 了解微服务的演进历史及它的优缺点
  2. 了解微服务的设计方法
  3. 了解微服务中 RPC 的底层原理

学习和工作中的痛点

  1. 不理解微服务的服务角色:API Gateway、BFF 还是 Service?
  2. 不知道怎么做微服务拆分
  3. 不理解 RPC 的原理,不知道如何进行微服务 RPC 框架的选型

详细内容

  1. 微服务的原理、概念,以及微服务的实现细节
  2. API Gateway、BFF、Service 等概念精讲
  3. 微服务通讯 RPC 框架的细节和选型

模块九:Go 架构实践 – 微服务(可用性设计)

教学目标

  1. 掌握可用性设计的最佳实践
  2. 了解可用性设计的几大关键点:隔离、超时控制、过载保护、限流、容错&重试

学习和工作中的痛点

  1. 不知道如何设计高可用的分布式服务
  2. 不清楚如何提升服务自愈能力

详细内容

  1. 微服务的隔离实现,以及架构设计中的隔离实现
  2. 进程内超时控制和跨进程超时控制
  3. 程序自保护避免过载,抛弃一定的流量完成自适应限流
  4. 单机限流、多租户场景的分布式限流
  5. 节点故障的容错逻辑、重试容错的策略和设计

模块十:Go 架构实践 – 中间件(日志、指标、链路追踪)

教学目标

  1. 了解 Go 项目中的日志收集
  2. 了解 Go 项目中的监控指标体系
  3. 了解 Go 项目中的分布式链路追踪

学习和工作中的痛点

  1. 不知道如何解决微服务的可观测性难题
  2. 不清楚怎么做微服务的可视化和标准化
  3. 出故障后,难以对微服务进行问题诊断

详细内容

  1. 实现一个可以集中收集所有微服务实例的日志,并能统一查看和检索的日志采集架构
  2. 指标监控、使用 Prometheus 解决监控可视化、指标采集
  3. 微服务中的跨服务性能问题诊断,结合 Jaeger 实现分布式链路追踪

模块十一:Go 架构实践 – 中间件(缓存、数据库)

教学目标

  1. 了解 Redis、Memcache 的原理和实战技巧
  2. 了解 MySQL 的常用设计和优化方法

学习和工作中的痛点

  1. 不会解决缓存的一致性问题
  2. 不知道怎样合理地设计 MySQL 的表

详细内容

  1. Redis、Memcache 的应用场景、最佳实践,以及缓存的一致性设计
  2. MySQL 的表设计、常用优化手段,以及如何解决分布式事务

模块十二:Go 架构实践 – 中间件(消息队列、服务发现)

教学目标

  1. 深入理解消息队列的原理,掌握基于消息队列的架构设计方法
  2. 服务发现原理、选型策略,以及服务发现实现的微服务多租户架构

学习和工作中的痛点

  1. 不会做消息解耦的架构设计
  2. 不清楚如何实现服务发现对平滑发布的支持
  3. 不知道怎样利用多租户实现多测试环境

详细内容

  1. Kafka 的实现原理、异步消息系统的架构设计
  2. RPC 服务发现、动态地址的选型和实现原理,以及基于服务发现的平滑重启和多租户架构

〖视频截图〗: