带你进阶 Go + 云原生高级开发工程师
Go + 云原生高级开发工程师能力标准
孔令飞的云原生实战营 的一个核心课程目标是零基础带你进阶为 Go 语言高级开发工程师。那么 Go 语言高级开发工程师如何定义呢?需要具备哪些能力?本文就来详细介绍下。
本课程的一个核心课程目标是零基础带你进阶为 Go + 云原生高级开发工程师。那么 Go + 云原生高级开发工程师如何定义呢?需要具备哪些能力?本文就来详细介绍下。
因为每个公司对 Go 语言高级开发工程师、云原生高级开发工程师的定义不一样。为了给出一个相对靠谱的定义,这里我调研了一线互联网大厂腾讯对高级开发工程师的要求。
在调研了腾讯 > 60 个高级开发工程师(T9、T10、T11)岗位的任职要求,并结合我大量的面试经验和行业经验之后,我总结出了高级开发工程师的能力标准。能力标准分为以下 2 个阶段,每个阶段包含 3 个部分:
- 第 1 个阶段:Go 语言高级开发工程师,包含基础能力、进阶能力、业务能力;
- 第 2 个阶段:云原生高级开发工程师,包含 Docker 能力、Kubernetes 能力、业务能力。
Go 语言高级开发工程师面试要求
Go 语言高级开发工程师能力要求分为以下 3 个方面:
- 基础能力(必须掌握): 基础能力几乎是 Go/Java 等后端服务开发岗位都普遍需要的技能要求。
- 进阶能力(最好掌握): 进阶能力可以理解为一个加分项,这些加分项甚至可以左右一次面试结果,建议 Go 后端开发者掌握,以最大化提高面试通过率。
- 业务能力(最好掌握): 跟岗位相关的业务能力。这些能力要求跟当前岗位相匹配,比如:一个负责存储的研发岗位,需要具有 Hadoop、HDFS、Mongodb、Dynamodb 相关的开发经验。
基础能力
- 计算机相关专业本科及以上学历
- 具备良好的团队合作精神,善于协调沟通,具备较强的问题定位和推动解决能力;
- 具备良好的分析解决问题能力,能独立承担开发任务,有系统进度把控能力。
进阶能力
- 熟悉分布式系统理论; 有大规模分布式系统设计架构经验(包含了负载均衡);
- 熟悉 Docker、Kubernetes、微服务并有实践者更佳;
- 熟悉 DevOps 工作流、CI/CD 相关技术和研发经验优先;
- 开源社区的活跃贡献者优先。
业务相关能力
业务相关的能力对面试结果的影响也是两极分化,如果(基础能力+进阶能力)够强,面试官可能会减少这部分的评分,因为跟业务相关的能力可以后期培养。另外,如果这个岗位需要一个具有相关工作经验的大牛来帮助团队解决技术难点或者帮助提升整个团队的业务能力,那这部分经验就非常重要,而且候选人,也往往具备很强的经验、能力和背景。也就是说,对于业务能力的要求,要么是很资深,要么是弱要求。显然,资深这部分不适合学员,也就是说可以从培训教程中,剔除业务能力这部分。
云原生高级开发工程师面试要求
云原生技术栈很多,但最普适的技能是围绕着 Kubernetes 相关的技能,因为 Kubernetes 是云原生的底座。所以,这里的云原生高级开发工程师,我聚焦在云原生最普适的技术栈上 Kubernetes 上。如果具备了 Kubernetes 相关的开发经验,找工作时,也是可以面其他类型的云原生开发岗,例如:云原生监控、DevOps 等。
因为 Kubernetes 是用 Go 语言构建的,所以想要成为云原生/Kubernetes 高级开发工程师,首先要是 Go 语言高级开发工程师。在此基础上,你还需要具备以下能力:
- 熟悉 Docker 等容器运行时的架构和设计,理解实现原理。深入了解 Namespace、Cgroup 等隔离技术;
- 熟悉 Kubernetes 的架构和设计,理解实现原理;
- 熟悉 Kubernetes 源码,有 Kubernetes 二次开发经验(Operator 开发);
- 【可选】有云原生相关项目开源贡献者优先,例如:Docker、Kubernetes 等;
除了具备上述基础的能力外,有相关岗位的开发经验会更好。例如:
- 如果是 云原生高级研发工程师 - 资源调度方向的岗位,那么如果你具有大规模集群资源调度的开发、实践经验面试会更占优势;
- 如果是云原生高级研发工程师 - 可观测性方向的岗位,那么如果你具有大规模集群可观测性的开发、实践经验,熟悉 Prometheus 面试会更占优势。