先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7
深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Golang全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
如果你需要这些资料,可以添加V获取:vip1024b (备注go)
正文
答: 跳槽。跳槽到别的公司的中间件团队。
这里就涉及到了一个中间件团队需要哪些技能。因为跳槽肯定就要面试,如果你面试的是中间件岗位,那么自然,就需要准备中间件的相关知识。
另外,还有一点,在这个分工明确的时代,即使是中间件,也有很多种类,我这里稍微分一下,可能不是很准确。
- 服务治理中间件,例如 RPC 相关中间件,限流熔断,链路追踪,分布式配置中心等等。你可以从 SpringCloud 里找到相关的产品。当然国内也有很多优秀的产品。
- 存储中间件,例如缓存,MQ等等,如果存储涉及到分布式(通常都会涉及),那么要求相对较高。
- 各种 Proxy,不论是数据库,还是 Cache,还是各种存储,通常单机无法承载海量数据,比较简单的办法就是使用 Proxy 进行代理,让应用透明的使用集群。出于性能考虑,这里通常会使用性能较高的产品,例如 goLang,C++ 等。Java 的长处——开发效率,在这个地方权重不大。
- 各种分布式中间件,例如 ZK 这种,这个我个人认为难度是较大的。分布式向来是软件开发中比较困难的一个点。特别是涉及到存储和一致性。
- 容器相关,k8s,docker等,容器化已经是大势所趋,其实我也不是很懂😀(听大佬们说的)。
回到之前的话题: 一个中间件开发者需要哪些素质?
- 语言基础。从 Java 程序员的角度,基础通常就是:集合,并发,JVM,Netty,IO、NIO(mmap,sendfile)
- 计算机基础,由于中间件开发人员经常和 OS 打交道,所以计算机基础也必不可少,例如文件系统(IO/磁盘),进程线程,内存管理。
- 网络基础,搞后台的人员,肯定要对网络熟悉了,熟悉在 Linux 下排查网络问题,熟悉 Epoll 原理等。
- 分布式相关知识,互联网海量数据背景下,分布式知识必不可少,CAP, Paxos,Raft,zab,2pc,3pc,base等等。最好能根据这些理论写出实现代码。
- 熟悉开源实现,即使你是业务开发人员,你也 100% 会接触开源项目,例如 Spring,那么,通常你需要对这种常用的开源代码有深刻的理解,不仅知晓其原理,也领会其设计。从大的角度看,你得看清整个框架的背景,设计和取舍,从小的角度看,你得看清框架的内部实现细节,有哪些有趣的地方(通常这种框架都会进行性能优化)。
- 了解行业风向标,中间件行业和业务开发稍有不同,每个中间件的版本升级都会让该领域的开发者们侧目(类似 iPhone 发布会),了解其特性,进而了解行业趋势,最后成为行业引领。
如何成为中间件开发人员?
好,说完了中间件开发人员需要哪些素质,自然,如何成为中间件开发人员,就不言自明了。
说白了,以上 6 个点,都是硬骨头。
- 对于已经开始工作的人来说,需要平时深刻的积累,说的难听一点,如果你的业务开发任务很重,你很难搞定上门的这些内容。
- 对于还在上学的同学来说,很爽,你可以用学校(不仅仅指大学,据我所知的大神,通常是初中/小学就开始编程,但这不是必须的)里大把的时间来学习,一个个的搞定这些知识点,和社招不同,如果你的知识达到上面的水平,那么 SP offer 应该是随便拿了 :)
我这里重点和那些平时开发任务不重,想搞中间件的同学聊聊。
我假设你是一个工作 3 年以内的 Java 开发人员,且你可能是培训生,半路出家,科班生,大专生,初中生,且你不在大厂,通常在一个后台开发不超过 200 人的创业公司,title 是 “Java 开发工程师”,并且有一个程序员的梦想,不想 get、set,不想 crud,不想 html 填空,不想和产品同学讨论,也不想和测试同学点点点…(感觉这里会得罪人 =_=||)
你可能想跳槽。
那么你大概需要做以下准备:
- 巩固 Java 基础,集合源码,并发源码,JVM 原理,Netty 原理源码,IO 相关(涉及到零拷贝文件存储),这些都是 Java 基础,通常是必须的。
- 分布式原理,最起码知晓理论知识,最好能写一个,哪怕参照开源的也行。
- 源码,Spring Mybatis Tomcat 等等,这些代码通常是你最先接触的,不妨从这里开始。RPC 中间件相关的,Dubbo,Motan,SOFA,挑一个吧,推荐 SOFA。
- 再熟悉熟悉(熟悉指源码和设计)分布式的相关产品,假设你是 Java 开发,推荐 RocketMQ,Apollo 配置中心等等中间件,其实都可以,MQ 相对复杂。
- 操作系统,通常,你在研究上面的内容时,会遇到操作系统的疑问,遇到不要绕过,尽量弄明白。
- 自己的产品,有就最好了,例如公众号,博客,教学视频,GitHub 项目等等,总之,是拿得出手的东西。
- 加大牛好友,了解行业风向标。也许你是一个矜持的人,但从事了这个行业,你有必要和行业里优秀的人学习(看看朋友圈就好)。
三、MySQL和NoSQL
之前写了一篇关于数据库的基础博客:数据库基础、使用C语言构建一个数据库、SQL语言、MySQL
下面来看看NoSQL的含义。
关系型数据库是什么?
关系型数据库建立在关系型数据模型的基础上,是借助于集合代数等数学概念和方法来处理数据的数据库。现实世界中的各种实体以及实体之间的各种联系均可用关系模型来表示,市场上占很大份额的 Oracle、MySQL、DB2 等都是面向关系模型的 DBMS。
关系型数据库基本概念
在关系型数据库中,实体以及实体间的联系均由单一的结构类型来表示,这种逻辑结构是一张二维表。图 1 所示的学生选课系统中,实体和实体间联系在数据库中的逻辑结构可通过图 2 所示。
图 1:关系型数据库
图 2:学生选课系统数据库逻辑结构
关系型数据库以行和列的形式存储数据,这一系列的行和列被称为表,一组表组成了数据库。图 3 所示的员工信息表就是关系型数据库。
图 3:员工信息表
属性说明:
- 二维表:也称为关系,它是一系列二维数组的集合,用来代表与存储数据对象之间的关系。它由纵向的列和横向的行组成。
- 行:也叫元组或记录,在表中是一条横向的数据集合,代表一个实体。
- 列:也叫字段或属性,在表中是一条纵行的数据集合。列也定义了表中的数据结构。
- 主属性:关系中的某一属性组,若它们的值唯一地标识一个记录,则称该属性组为主属性或主键。主属性可以是一个属性,也可以由多个属性共同组成。在图 1-5 中,学号是学生信息表的主属性,但是课程信息表中,学号和课程号共同唯一地标识了一条记录,所以学号和课程号一起组成了课程信息表的主属性。
结构化查询语言
关系型数据库的核心是其结构化的查询语言(Structured Query Language, SQL),SQL 涵盖了数据的查询、操纵、定义和控制,是一个综合的、通用的且简单易懂的数据库管理语言。同时 SQL 又是一种高度非过程化的语言,数据库管理者只需要指出做什么,而不需要指出该怎么做即可完成对数据库的管理。
SQL 可以实现数据库全生命周期的所有操作,所以 SQL 自产生之日起就成了检验关系型数据库管理能力的“试金石”,SQL 标准的每一次变更和完善都引导着关系型数据库产品的发展方向。
SQL 包含以下四个部分。