第一周掌握在 Linux、Mac 和 Windows 下的 Go 环境搭建
掌握如何配置 Goland IDE,以及 Goland IDE 使用小技巧
熟练使用 Go 基本语法
掌握 Go 内置类型(map、切片)使用
掌握 Go 接口定义和结构体定义
掌握 Go 泛型的使用
掌握 Go 语言单元测试写法,单元测试设计思路
学习新语言的时候常常被环境搭建困扰,也会被 IDE 使用困扰
基本语法一学很简单,一写代码就忘记
难以理解 Go 鸭子类型的含义,无法抽象
无法理解 Go 中接收器的含义,难以准确把握在什么时候应该使用什么作为方法接收器
不懂 Go 泛型,或者无法用好 Go 泛型
利用 Go 泛型,设计 map 的工具方法
利用 Go 泛型,设计切片的工具方法
利用 Go 泛型,设计 Set 接口,并提供基于 map 的实现
利用 Go 泛型,设计并实现基于切片的 ArrayList 和 LinkedList
利用 Table Driven 的思路设计测试用例
Go 基本语法
Hello,World!
方法定义与调用、变量定义、常量定义
控制结构:循环、if-else
类型定义:接口定义和结构体定义
Go 内置类型
切片
map
数组
Go 泛型
Go 测试入门
单元测试入门
使用 Table Driven 来设计测试用例
职场刷亮点
利用泛型为公司提供工具包或者辅助类
利用泛型重构公司代码
面试要点
第二周
进一步练习和熟悉 Go 语法
Gin、Gin Session 插件入门
GORM 入门
数据库表结构设计与索引设计入门
掌握最基本的用户登录注册功能实现
掌握在 Go 中获得数据库返回错误码的方法
利用 Gin middleware 完成登录校验
掌握用户密码加密设计要点
掌握前后端分离的基本架构模式
掌握跨域问题及其解决方案,利用 Gin middleware 机制解决跨域问题
想要学习 Gin 或者 GORM,但是不知道从何下手,不知道如何查找官方文档
数据库表结构设计和索引设计全靠直觉,缺乏深入思考
不了解登录和注册过程,不知道如何选择合适的密码加密算法
听过前后端分离,但不知道究竟是指什么,也不知道这样做的好处是啥
听过或者遇到过跨域问题,但是不知道怎么解决,很多时候都是抄网上的代码片段,根本不清楚问题的根源
听说过 Gin,用过 Gin,但却不知道怎么用好 Gin 的 middleware
利用 Gin 和 GORM 设计并实现简单的用户登录、注册功能
利用 Gin middleware 机制解决跨域问题
利用 Gin 的 Session 插件支持登录态,并且利用 Gin middleware 解决登录态校验问题
利用 docker-compose 搭建开发环境
Gin 框架简介与入门
整体设计
核心用法
插件机制:
利用插件解决跨域问题
GORM 简介与入门
整体设计
增删改查写法
Gin Session 插件入门
整体设计
核心用法
Session 与 Cookie 的基本概念
利用 docker-compose 来启动开发所需依赖
用户注册和登录功能设计与实现
数据库表设计与索引设计
获得数据库返回的错误码
密码加密算法选取
职场刷亮点
针对公司需求提供一系列的 Gin 插件,如跨域问题插件
面试要点
第三周
掌握依赖反转和依赖注入的设计思路
掌握单体应用多实例部署要考虑的问题
掌握 JWT 用法,用 JWT 重构系统
掌握 Redis 用法,利用 Redis 来提高应用性能
掌握 Nginx 用法
在单机的情况下直接存储 Session 到内存,等到分布式环境下,系统就无法运作
只会简单的 Redis 用法,没有深入学习和研究 Redis 不同的数据结构
项目结构不合理,整个项目充斥着包变量,缺乏可测试性和可扩展性
没有接触过 Kubernetes,想要学习但是不知道该如何入手
平时没有机会接触到 Nginx,面试的时候也不知道该怎么面
在分布式环境下(单体应用但是多个实例部署),使用 Redis 来存储 Session
JWT 入门,用 JWT 重构系统
使用依赖注入设计模式重构系统,提供系统可测试性
搭建 Kubernetes 环境
在 Kubernetes 上部署用户服务,并且部署多个实例
Redis 入门
Redis 数据结构和底层实现
使用 Redis 来存储 Session
Redis Sentinel 和 Redis Cluster 模式简介
JWT 入门
Kubernetes 入门与应用部署
Nginx 入门,单体应用部署多实例
重构系统,重新设计项目结构
职场刷亮点
使用依赖注入理念,重构公司项目,提高可测试性和可扩展性
面试要点
第四周
第七周
掌握常见的阅读、点赞、收藏功能的设计与实现,深入对比侵入式方案和非侵入式方案对系统可维护性、可测试性和可扩展性的影响
阅读历史功能的设计与实现
掌握 Kafka 的使用,掌握如何运用消息队列来完成异步、解耦
抽象统一的消息发送和消费接口,适配 Kafka,并提供测试支持
掌握识别可异步执行的业务逻辑的小技巧
常见的阅读、点赞功能虽然能做出来,但是设计比较差,可扩展性也比较差,难以支撑高并发
在业务中不知道什么东西可以异步执行,什么东西可以解耦,也难以体会解耦和异步对系统的好处
在使用 Kafka(或者其它消息队列)的地方,代码总是特别难测试
实现常见的帖子阅读、收藏、点赞功能,以及收藏组功能
实现阅读历史功能
在本地环境中启动 Kafka 集群
使用工具查看 Kafka 收发消息的情况
设计一个统一的消息队列接口
优化点赞、阅读性能
设计并实现阅读、收藏、点赞功能
数据库表结构与索引设计
侵入式方案
解耦方案
性能优化方案
设计并实现阅读历史功能
Kafka 入门
Kafka 基本概念和架构设计:Broker、Partition、Consumer 等
抽象统一的消息模块,并为 Kafka 提供适配
集成测试使用消息队列的代码
职场刷亮点
为公司引入统一的消息队列接口,适配不同实现,并且提供测试支持
面试要点
第八周
掌握利用 Gin 和 GORM 的插件机制埋点的方法
掌握可观测性的概念
掌握在业务中埋点的技巧
掌握如何部署可观测性的相关组件,包括 Prometheus、Zipkin
掌握如何搭建一个统一的可观测性平台,并且集成 Grafana
掌握在 Grafana 上配置面板和告警的功能
不同场景下告警频率、告警方式的选择
集成第三方聊天系统(如钉钉),提供告警功能
平时在业务中,只会写代码,排除问题全靠猜,缺乏性能数据和链路数据
知道告警很重要,但是平时自己设置的告警,要么太频繁根本没人理,要么漏报误报
知道埋点很重要,但就是不知道在什么地方应该埋,什么地方不应该埋
不知道如何将数据进行可视化展示,不知道如何集成 Grafana
不知道如何利用 Gin 和 GORM 的 middleware 来接入可观测性
部署 Zipkin 和 Prometheus
部署 Grafana 并且设置 Prometheus 为数据源
为核心功能添加监控
利用 Gin 和 GORM 插件机制添加监控手动在业务关键节点打点
在 Grafana 中配置面板和告警
集成钉钉,发送告警
可观测性的概念和入门
logging
metrics 与 Prometheus、Prometheus 查询语言
tracing 原理与 Zipkin 入门
其它可观测性中间件简介
利用 Gin 和 GORM 的 middleware 机制添加监控
集成 Grafana,配置 Grafana 面板和告警
集成钉钉,发送告警
职场刷亮点
为公司搭建全面的可观测性平台
为自己的业务添加全面监控
面试要点
第九周
掌握定时任务的设计和处理
掌握如何在分布式环境下调度定时任务
掌握热榜功能的设计和实现,理解常见的榜单模型
掌握优化热榜性能、提高可用性的技巧
掌握缓存预加载功能
平时工作中使用过很多定时任务,但对在分布式环境下如何在特定的节点上调度分布式任务缺乏理论和实践
面试定时任务或者分布式任务调度的时候,总是难以刷出亮点
缓存用法单一,没有尝试过本地缓存 + Redis 缓存的用法,或者用过,但不知道怎么解决一致性问题,不知道怎么刷出亮点
处理榜单业务的时候,总是被高并发问题击垮,或者可用性不强
设计并实现热榜功能
使用 Redis 全量缓存热榜数据
引入本地缓存进一步提高性能
解决本地缓存、Redis 缓存一致性和热榜更新的问题
设计并实现一个通用的本地定时任务模块
设计并实现一个基于 MySQL 的分布式任务调度模块
热榜功能的设计和实现
常见的热榜模型
热榜计算指标的时间衰减特性
实时计算热榜的难点
本地缓存使用
本地缓存控制容量
本地缓存淘汰策略
本地缓存与 Redis 缓存结合使用
本地缓存与热榜更新
定时任务的设计与实现
分布式任务调度系统的设计与实现
分布式任务调度系统要考虑的问题
基于 MySQL 的分布式任务调度系统
为热榜功能接入监控和告警
职场刷亮点
在公司内提供一个统一的分布式任务调度框架
面试要点
第十周
掌握微服务与数据库一一对应的设计理念
掌握不停机数据迁移方案
掌握扩展 GORM 底层实现以支持双写的技巧
平时会遇到数据迁移的问题,但都无法做到不停机迁移,每次面试官问起都不知道该如何应对
完全不了解,或者只是听说过不停机的数据迁移方案,但没有实践过,不清楚其中细节
使用过 GORM 的很多功能,比如插件功能等,但更深一层次的功能就从来没用过
扩展 GORM 接口,支持数据库双写
设计并实现全量数据迁移方案
设计并实现全量数据校验方案,并优化性能
设计并实现增量数据校验方案
将单一的数据库拆分为每个微服务对应一个数据库
扩展 GORM 接口,提供双写支持
不停机数据库迁移方案
数据库全量数据迁移
数据库全量数据校验
数据库双写方案
数据库增量校验
数据库流量切换
业务层面校验数据迁移效果
职场刷亮点
统一的数据迁移方案与工具集
面试要点
第十二周
掌握服务注册与发现,能够在实践中根据实际需要选择合适的服务注册与发现中间件
掌握在 Kubernetes 容器内集成服务注册与发现的技巧
掌握在 gRPC 中接入服务注册与发现机制的技巧,了解其它微服务框架如 Kratos、go-zero 等接入服务注册与发现的关键 API
掌握微服务分组功能
掌握微服务可用性保障中的隔离使用技巧
听说过服务注册与发现,但是只知道大概,对于内部的各种细节缺乏了解
服务注册与发现作为微服务架构面试的必面题,每次面试都发挥不好
实际开发中使用了微服务架构,但公司早就决定了服务注册与发现的选型,难以知道他们决策的底层逻辑
在实际开发中使用 gRPC,不知道怎么接入自定义的服务注册与发现功能
在使用服务与注册发现时,遇到问题不知道该如何定位,也难以判断是服务注册过程中的问题,还是服务发现过程中的问题
为 gRPC 提供服务注册与发现的实现,提供基于 etcd 和 Kubernetes 的实现
演示在其它微服务框架如 Kratos、go-zero 中如何接入自定义的服务注册与发现策略
为 gRPC 提供分组功能
利用分组功能设计并实现隔离机制,提高系统可用性
服务注册与发现模型
演进过程
IP 直连基于 DNS 的服务发现基于注册中心的服务注册与发现
基于注册中心的服务注册与发现
详细步骤容错:注册中心崩溃容错:网络异常
基于 etcd 的 gRPC 服务注册与发现接入
基于 Kubernetes 的 gRPC 服务注册与发现接入
分组功能
利用分组功能设计隔离机制
职场刷亮点
为公司的核心业务提供隔离机制,保障可用性
面试要点

评论(0)