• 开发时长一年半golang工程师应该具备什么样的技术能力?


    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开发学习技术资源包

  • 相关阅读:
    ansible中的任务执行控制
    Docker中php安装redis扩展
    案例-注册页面(css)
    Elasticsearch 注册为Windows服务
    elementUI 年份范围选择器实现
    vue3-setup中如何通过ref调用子组件的函数
    Java成品网站推荐 毕设从这起步就够了
    一次生产环境OOM排查
    结合Elementplus源码讲解BEM的使用
    react路由拦截(路由守卫)
  • 原文地址:https://blog.csdn.net/qq_28581269/article/details/127939259