img

一、为什么会有人选择golang?

其实无非是被动和主动。

**被动:**面试新公司后,被领导调岗现学golang,因为公司需要。

**主动:**觉得这个方向有前景,大厂有需求,学了可以升职加薪!

所以不管是主动还是被动,都不可否认现在golang开发工程师在目前IT市场的前景是很可观的。毕竟我们绝大多数人都是面向薪资编程,如果它好用,大厂需求量大,又简单易学,语言特性又好。尤其是当自己掌握了docker和K8S之后,升职加薪就不远了,这样的活谁不愿意呢?

img

愿意是自我意识,想学每个人都可以,但是

二、什么样背景的更适合去学习或是去转行去做golang呢?

1.科班毕业,有一定的语言基础,也初步学习过golang(这种普遍见于校招,公司招聘回去从零开始培养,从零开始搭建业务。)

2.有较强的Java、c/c++、PHP的技术底子,入职之后通过企业内训转岗golang,大厂较为常见。(这种在面试时就会考查你的自主学习能力,毕竟其他语言技术不差的朋友,学习能力都不弱,何况golang初学起来还是相对简单的)

3.本身就是golang开发经验丰富的老手,进公司熟悉之后就能接手项目。(这种薪资一般都不低!)

那如果你既不在这三种之中又正在学习golang的话,也能面golang开发岗吗?

当然是可以的。只是说上面的这三类人群在面试时会更具优势。

核心能不能面,我们首先要了解的是:一般大厂面试时都考查什么?

这里整理了一些互联网公司的考查面试题,数量太多就全部腾过来了。需要的朋友可以自行下载获取!

【点击领取】golang开发学习技术资源包

img

问过身边的一些朋友,目前golang面试还不像Java、c/c++后端开发那样,有一堆的面试八股文需要你去记,核心就是考查一些语言基础,中间件以及技术在项目中的实际用法,还是会以经验为主。所以如果目前你是有一些不错的项目经验,面试这个岗位来说还是相对容易的。

回归题目,作为一个一年左右的golang开发工程师,需要具备什么样的技术能力,以及往上再去提高自己的技术能力和薪资的话,应该往哪方面去努力?

三、golang开发工程师技术能力图

img

1、GO入门必备

①第一个golang程序

  • main函数与main包
  • 编译与运行
  • 包与文件夹
  • 包与访问修饰符
  • go mod 依赖管理

②golang实现ping操作

  • 命令行参数接收
  • 创建ICMP连接
  • ICMP校验和计算
  • 发送ICMP请求和并接收响应

③课程管理系统

  • 数据存储实现
  • 数据访问层实现
  • 对象工具方法实现
  • 业务接口实现

④内存缓存系统

  • 接口的实现
  • 工具方法实现
  • 通过协程清空过期缓存
  • 单元测试与缓存系统调用

⑤文件读写

  • 将日志写入到文件
  • IO操作
  • 第三方库解析yaml文件
  • 字符串操作解析yaml文件

⑥mysql数据库读写

  • mysql驱动引用
  • 连接池初始化
  • 增删改查基本操作
  • 事务

⑦redis读写

  • redigo的引用
  • redis连接池的创建与使用
  • redis面向对象的抽象

⑧生产者消费者模式

  • 生产者消费者四种情形介绍
  • 异步IO输出
  • —对一模式
  • —对多模式
  • 多对一模式
  • 多对多模式

⑨TCP文件传输

  • TCP Server端
  • TCP Client端
  • TCP文件上传
  • TCP文件下载

⑩UDP实现DNS请求

  • DNS请求报文结构讲解
  • UDP Server端
  • UDP Client端
  • 构建DNS请求数据
  • 发送DNS请求并接收响应
  • DNS响应报文解析
  • DNS请求验证

2.Go编程基础与核心技能

①语法基础

  • 错误处理
  • 包定义以及导入
  • 结构体定义
  • 反射原理
  • 闭包
  • 值传递,引用传递,defer函数

②并发编程

  • goroutine
  • 锁(读写锁、互斥锁)
  • 通道channel
  • runtime 包解析
  • context 使用原则

③网络编程

  • tcp 编程
  • udp编程
  • http 实现
  • websocket

④http编程

  • post、get、head请求处理
  • 简单web模板

⑤对象池

  • 原理分析
  • 应用和性能测试

3.Go后台中间件编程

①redis

  • redis整体结构、存储结构
  • string 命令及存储原理,对象存储、累加器、分布式锁、位运算应用
  • list命令及存储原理,栈、队列、异步队列、阻塞队列、固定窗口记录应用
  • hash命令及存储原理,对象存储应用
  • set命令及存储原理,唯—无序应用、关系应用
  • zset命令及存储原理,排行榜、延迟队列、时间窗口限流应用
  • redigo基本操作,管道和事务,发布订阅、stream

②mysql

  • OLTP、OLAP、体系结构、连接池、事务介绍
  • 基本操作:表创建删除、数据表操作(CRUD)
  • 表查询及案例:基础查询、聚合查询、分组查询、联表查询
  • 索引:主键索引、唯—索引、普通索引、组合索引
  • 索引与约束
  • 索引实现-存储结构以及B+树
  • 最左匹配原则以及覆盖索引
  • 索引失效、索引优化、SQL优化
  • explain分析以及慢日志查询
  • 事务控制语句,事务的acid特性,事务隔离级别
  • 锁以及mvcc原理:加锁流程、释放锁流程,当前读以及快照读
  • 读异常、死锁原理以及案例分析

③mongodb

  • mongodb bson解析
  • mongodb crud操作
  • mongodb 索引操作、复合索引查询、聚合查询
  • mongodb 文档管理
  • mongodb go driver操作
  • mongodb 连接池实现

④kafka

  • kafka介绍
  • kafka体系结构以及读写机制
  • kafka典型应用场景:异步处理、系统解耦、流量削峰、日志处理
  • kafka 驱动包操作:生产者消息生产策略、生产者ack策略、消费者组rebalance机制

⑤etcd

  • etcd v2与v3比较,etcd体系结构
  • etcd APls:数据版本号机制、CURD、监听、事务、租约
  • etcd索引以及B+树
  • etcd读写机制以及事务ACID特性分析
  • Raft共识算法:leader选举和日志复制,Raft 运行机理详解
  • etcd go驱动包操作
  • etcd典型应用:服务发现、负载均衡、leader选举、分布式锁

⑥elasticsearch

  • es介绍:倒排索引、lucene、es-head以及kibana
  • es集群以及原理:集群健康值检查、es索引操作以及文档操作、es读写机制
  • es查询:匹配查询、范围查询、多条件查询、中文分词、聚合查询
  • es应用: es go驱动包操作、索引以及文档操作、es高级查询: term、match、aggregation

⑦grpc

  • grpc体系结构,grpc典型应用,protobuffer语法、生成编译、模板接口
  • grpc关键特性:拦截器、超时控制,重试
  • unary API细节处理以及应用场景
  • client stream API细节处理以及应用场景
  • server stream API细节处理以及应用场景
  • bidirectional stream API细节处理以及应用场景

⑧http gin

  • gin框架分析
  • RESTful API实践
  • URL参数查询
  • query接收数组和Map
  • 表单参数处理
  • 上传文件
  • 分组路由
  • 中间件鉴权
  • json、xml、yaml、protobuf序列化

⑨gorm

  • 数据库连接
  • 创建表
  • 增删改查
  • 事务

【点击领取】golang开发学习技术资源包

4.Go项目实战开发(解决方案)

①微信后台公众号实战

  • 公众号开发逻辑
  • 注册、权限处理、消息回复
  • http get方法token认证
  • http post方法处理消息回复
  • 微信公众号签名验证方法
  • XML解析、CDATA解析
  • 交换协议、接收消息协议、被动回复消息协议

②流媒体网站开发

  • 流媒体直播框架分析
  • 前后端分离设计
  • RESET API设计,包括用户、视频、评论处理
  • 用户、评论、会话、待删除视频数据库设计
  • meddleware handler机制
  • 登录注册
  • 视频上传
  • 视频评论
  • 流控算法

③OAuth2.0

  • OAuth2.0协议流程分析
  • 授权码、隐藏式、密码式、客户端凭证流程分析以及应用场景
  • 授权码详细流程分析以及restful api详解
  • go OAuth2.0第三方登录应用

④Admin后台管理系统

  • Go Admin工程安装
  • 架构分析和各模块精讲
  • cobra命令行实战
  • casbin权限管理
  • RBAC实践、多租户实践
  • 添加新应用
  • 添加新模块
  • 自动生成代码
  • 配置权限
  • swagger api

⑤分布式日志系统

  • 传统elk解决方案及其弊端
  • 日志收集服务开发
  • etcd管理主要信息收集
  • 配置文件热更新
  • kafka日志收集
  • elasticsearch日志分析

⑥goim千万级高并发推送

  • 支持单个、多个、广播消息推送
  • 心跳检测(应用心跳和tcp、keepalive、http log pulling)
  • 接入层支持多协议(websocket,tcp,http)
  • 可拓扑的架构job、logic模块可动态无限扩展)
  • 基于Kafka做异步消息推送
  • 注册发现服务
  • 消息协议设计(基于protobuf)
  • goim推送服务架构分析
  • grpc客户端服务端编程

5.Go云原生

①Docker

  • 基本架构、涉及概念、隔离机制
  • 操作命令及案例:生命周期管理、容器运维操作、镜像及镜像仓库,负载均衡案例
  • Docker镜像:镜像构建,Dockerfile
  • 存储:数据共享、数据备份和还原
  • 网络: bridge驱动、host驱动
  • Docker Compose:操作命令、配置文件
  • Swarm集群:集群管理、节点管理、服务管理、Compose Deploy
  • 容器监控与Cl/CD:监控命令、监控工具,gitlab持续集成案例

⑤k8s

  • 基本概念和术语、安装与升级
  • kubectl命令操作:基本语法、基础操作、应用部署、集群管理、故障排除和调试命令
  • Pod定义语法
  • Pod中运行容器、Init容器、Pod中容器生命周期函数
  • Pod中容器健康检查:存活检查、就绪检查、启动检查
  • Pod的部署:Deployment部署Pod、DaemonSet部署Pod、静态Pod
  • Service定义语法
  • Service的四种发布类型:ClusterlP、NodePort、ExternalName、LoadBalancer
  • 无选择符Service
  • 无头Service:有选择符Service、无选择符Service
  • Service发现机制
  • Service TLS案例
  • Ingress与Ingress Controller
  • Ingress暴露Service:默认后端、扇出、基于名称的虚拟托管
  • lngress TLS案例
  • MetalLB与Service LoadBalancer、Ingress
  • 配置:ConfigMap与Secret
  • 存储: hostPath、emptyDir、ConfigMap、Secret、PVC

6.公有云项目实战

①短信服务

  • 短信签名与短信模板
  • 短信发送接口实现
  • 验证码短信发送实现

②邮件推送服务

  • 邮件及邮件模板
  • ses邮件推送
  • smtp邮件推送

③验证码

  • 控制台操作
  • 客户端接入
  • 服务端接入

④对象存储

  • 静态网站托管
  • 图片压缩与图片样式
  • web数据直传
  • 私有读与CDN鉴权

⑤日志服务

  • 日志服务控制台
  • SDK方式采集日志

⑥云直播

  • 域名配置
  • 直播流管理
  • 延播管理

⑦云点播

  • 拉取上传
  • 服务端上传
  • 媒体资源信息获取

⑧文字识别

  • 车牌识别
  • 通信行程卡识别

⑨人脸核身

  • 照片人脸核身
  • 活体人脸核身
  • 活体人脸对比

核心来讲,首先是要掌握语言编程基础以及中间件的相关技术,结合着一些项目实战的经验,就可以对应一般的技术面试,再进阶学习掌握docker、k8s这些大厂面试必备的技术点,就可以对自己的薪资会有进一步涨幅!

四、劝退

虽然golang这门语言目前还是新贵,各个互联网公司也是需要这方面岗位的人才。但是语言再好,也是有所缺点。所以golang它并不是目前还是零基础的同学选择的最合适的入门语言。如果你目前还只是编程小白或是对go语言的了解仅停留在互联网只言片语的信息了解上的话,还是谨慎选择。

五、资源分享

最后分享给大家一些学习过程中的一些资源,仅供参考。

1.电子书籍

img

2.文档与技术文章

img

img

3.视频源码资源

img

4.社区论坛及博客

img

img

5.系统进阶教程路线

img

【点击领取】golang开发学习技术资源包

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐