【置顶】未来学习计划
已经掌握的知识,必须要及时进行复盘与总结,并且进行文字化的输出!
这样许多的问题就能刻入自己的骨髓,不会轻易忘记!
Go 学习前言
Go 语言的应用场景有许多,但是语言主要的优势在以下三大块:
1、云原生 (微服务 + DevOps + PaaS 等中间件)
2、高性能 API
3、服务器端开发
如果职业方向是往以上几个方向发展,那么 Go 语言的学习是至关重要的,市场上初步的任职要求如下:
编程语言: 使用 Go 独立实现一套完整的 Web 服务器
基础知识: 操作系统 / 网络编程 / 数据结构与算法等
常见中间件: MySQL / Redis / Kafka / Nginx等
软技能: 学习 / 沟通 / 抗压 / 解决问题的能力
而本博客,主要为梳理 Go 语言需要掌握知识的细节,以及作为一个刚入行的 Go 新人,需要积累的知识。
1、目前掌握的相关知识
1、Go 基础: 关键字、常量、变量、数据类型、数据结构、流程控制、函数、方法、协程、通道。
2、GMP 模型基础: 包括早期的 GM 模型,以及后期的 GMP 模式设计方法、调度机制等
3、GC 基础: 包括标志清除法、三色标记法、插入写屏障、删除写屏障、混合写屏障。
4、go 语言一些常用包:net/http、sync 等
2、目前的学习计划
1、Go 语言并发编程(鸟窝大佬的极客时间专栏,常见的并发原语:Mutex、RWmutex、Once、Map、WaitGroup、channel 等)
2、Go 内存逃逸、GC 的优化问题、熟练使用 go trace(查频繁的 GC)、pprof(内存泄漏、CPU 过高、程序慢、锁竞争、程序阻塞)。
3、Go 技术栈常用的组件: grpc、protobuf、Prometheus、istio 等
4、学习云原生开源组织的相应的技术分享。
3、Go 服务器开发自我总结
1、工具
1)语言:Go, SQL, JS;
2)IDE:Goland、VScode;
3)版本管理工具:Git、SVN;
4)依赖管理:go mod;
2、生态
1)消息队列:kafka、RabbitMQ;
2)存储:MySQL、Redis、Mongodb、PostgreSQL;
3)web 框架:gin、beego、goframe 等;
4)微服务:go-zero、go-mirco、go-kit 等;
3、容器
1)Swarm (docker);
2)K8S (基本一统江湖);
4、原理
1)通识的 Go 语言原理:GC、GMP、runtime 等;
2)中间件的原理:主要看业务需要。
4、学习方式
主要推荐我旁边的推荐博客:
1、基础推荐七米老师的博客
2、进阶可以看极客兔兔的博客、鸟窝大佬的博客。
3、追求硬核理解的可以看面向信仰编程作者的博客!
5、技术写作规范
详细参考阮一峰的写作规范,个人觉得让他人拥有良好的阅读体验也是软技能之一!
6、晋升分解法
1、目前自己定级 P5 中级(工作 1 ~ 3 年)需要别人带领自己达成任务
2、下一级 P6 (工作 3 ~ 5 年) 能独立完成任务
3、需要专项提升某一项技能的能力,资深技术专家建议:持续花 6 个月时间进行专项提升。
4、比如现在主要提升 Mysql 与 PostgreSQL、Redis 与 Memcache 的技术水平。计划大致如下:
5、Mysql 与 PostgreSQL
1、1.5 个月:(已经完毕!)学完 bilibili SQL进阶课程、通读 High Performance Mysql。
2、3 个月:github 大神的 PostgreSQL 修炼手册学习
3、1.5 个月:实战 Mysql 与 PostgreSQL
6、Redis 与 Memcache
1、1.5 个月:(已经学完!)学完 bilibili redis 基础 + 进阶课程,建立一个完备的 redis 知识体系
2、3 个月:通读+学好 Redis设计与实现 (蓝书)
3、1.5 个月:实战 Redis
7、除此之后,TDD 学习要进行 Java 的学习,除此之外,就是多用 Go + Python 语言,课程 Go + Python 双语言开发 也很好。
Java 学习前言
因为工作后需要,开始转变方向为 Java,但是 go 的学习也不会停止!
转方向为 Java 后,所需要学习的业务中间件远超 go 语言,相应的框架也是如此,不过 Java 技术栈更新也不会太快。
经历一段时间的工作后,自己的人生状态也发生相应的改变,首先需要将自己的业务技能锻炼强。业务能力不等于技术能力,比如业务流程、沟通流程,比纯粹技术性的学习要强很多!
1、Java 基础
Java 基础不是语言类的基础,本次的 Java 基础主要是为了跟 SpringCloud 做区分,比如 JUC 、Spring、Mybatis、SpringMVC、SpringBoot 都是属于 Java 基础,因为这样的东西才构成了 Java 整个语言的生态体系,叫做基础。
而且 408 中有三门课程也是属于 Java 基础:数据结构、操作系统、计算机网络。都是对 Java 基础有重要的支撑作用的。
2、Spring Cloud
首先肯定是 Java 基础,之后就是上框架 SpringBoot + SpringCloud 组成的微服务的架构,体量绝对是足够的。
Spring Cloud 也包含许多组件,不是特别需要说明的都在此处举出:
nginx、SpringCloud GateWay、nacos、RPC、oauth2 等等。
3、Message Queue
ActiveMQ、RabbitMQ、RocketMQ、Kafka
目前主攻研究 RocketMQ,提升自己以及团队的研发能力!
4、 ELK
ElasticSearch + Logstash + Kibana 组成的经典的业务日志管理集群