【置顶】未来学习计划
本文最后更新于 4 天前
前言
对于已经掌握的知识,必须要及时进行复盘与总结,并且进行文字化的输出!Go 学习前言
Go 语言的应用场景有许多,但是语言主要的优势在以下三大块:
1、云原生 (微服务 + DevOps + PaaS 等中间件)
2、高性能 API 工具开发
3、服务器端开发
如果职业方向是往以上几个方向发展,那么 Go 语言的学习是至关重要的,市场上初步的任职要求如下:
1、编程语言: 使用 Go 独立实现一套完整的 Web 服务器
2、基础知识: 操作系统 / 网络编程 / 数据结构与算法等
3、常见中间件: MySQL / Redis / Kafka / Nginx等
4、软技能: 学习 / 沟通 / 抗压 / 解决问题的能力
而本博客,主要为梳理 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、RocketMQ;
2)存储:MySQL、Redis、Mongodb、PostgreSQL;
3)web 框架:gin、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 年) 能独立完成任务((已于2023年达成升职达到此层级,未来目标 p7)
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 基础:数据结构、操作系统、计算机网络。
2、Java 企业级开发框架
首先肯定是 Java 基础,之后就是上框架 SpringBoot、 SpringCloud 组成的单体与微服务的架构,中小型公司基本上以此两种框架为主流。
当然也有 solon 等国产化的后起之秀,但是在技术选型上需要进行权衡,比如人员的学习成本、后续排查问题的成本,如使用的话需要考虑好。
而后需要进行理解的就是框架中使用的技术组件:jpa、mybatis
此处也推荐 Java 社区中比较活跃的脚手架
- 1、ruoyi-vue 脚手架,最经典的脚手架,会教会很多技术组件的使用、业务相关的理解:如权限管理、多数据源、定时任务、代码生成器等。
- 2、yudao-boot 脚手架,基于 ruoyi-vue 脚手架进行二次开发,会进一步理解好的企业级脚手架是如何建立,集成度较高,适合快速进行业务开发与使用。
3、基础设施中的中间件
1、负载均衡中间件:Nginx、Nacos、ApiSix、Kong、Envoy 等
2、数据库中间件:Mysql、PostgreSQL、Sqlite、MongoDB、TiDB、OceanBase、ElasticSearch
3、缓存中间件:Redis、Memcache、Tair、Codis
4、消息中间件:RocketMQ、Kafaka、RabbitMQ
精通与熟练都是需要时间进行打磨,高级程序员、架构师的要求也是不仅局限于使用的层次,到底层技术细节实现的理解也一直比较重要,技术能力的提升与理解都是在不断的学习中进行的,也如大厂晋升指南中体现: