初级开发工程师指南
1. 前言
相关信息
希望你经过一段时间的学习,有一副人情练达的肉体和一个勇往无前的灵魂。
1.1 简介
这是一个互联网十年老狗的一些总结,主要是帮助为大三,大四以及想要入门的同学快速了解一下GO语言作为后端主力开发语言的发展情况,以及成为初级开发工程需要掌握的基础技能,顺便帮助你快速了解互联网开发的基本面,为之后的工作奠定一个可靠的基础。
1.2. 写给学弟学妹们的一些话
我知道大多数的大学生在大三,大四那会都非常的焦虑,容易陷入精神内耗的漩涡里无法自拔,总是迷茫,抱怨,质疑,进而否定自己。这其实是人生的一种常态,人在杂乱无章的生活中寻找一个出口时,总是茫然无措的。可问题是,这样的状态还要多久?有些人可能很快就能找到出口,而有些人会一直茫茫然,直到考研失利,求职碰壁,恋爱翻车,人生无趣。上了四年大学除了年龄长了点,其他好像什么也没变。
从另一个角度来看,焦虑与内耗也有积极的一面。当一个人焦虑时,至少说明你对现在的状态是不满意的,是有心去寻求突破的。那么如何突破呢?《六祖坛经》里说:迷时师度,悟了自渡。你需要一个朋友,一个老师,和他聊聊现在的生活,说说你现在的困惑,然后听听他的看法,他的建议。
有些建议是适合自己的,有些却不一定,解除内耗往往还需要从自己内心开始。如果你能很快的解开心结,就会对自己有一个更清醒的认识,能完整的看到自己,好的坏的,优秀的,有竞争力的,以及短板,不足,性格上的缺陷等等。结合自己的情况,采纳适合的建议,一定可以快速走出精神内耗。
其实,人生无常,内耗是常态。如果你现在能走出内耗,那么之后在遇到相似的困惑,我想你一定能很快走出来。
祝你好运。
2. 编程技能
2.1. 语言
2.1.1. 语言基础
- 熟练使用GO语言,对于基础的数据结构和语法有深入的认识。
- 了解并能够使用其他任何一门语言,C/C++,JAVA,Python,PHP等。
- 掌握面向对象的概念并能熟练使用。
- 能独立开发一个完整的小项目。并对这个项目有一个深入的认识。
2.1.2. 框架
- 至少熟练掌握一两个WEB框架
- 了解一两个RPC或者微服务框架
- 熟练使用GORM等中间件的程序包
- 熟练使用常见的日志,异常等第三方包。
2.1.3 进阶
- GO并发编程
- 大流量场景优化
2.1.4. 源码
提示
这里只是给出了几个包的建议,可以按照自己的安排来
- Http
- Context
- Slice
- Gin的路由实现和中间件实现。
2.2. 各种中间件
2.2.1. MySQL
- 设计表,包括字段,类型,索引,主键,外键等。
- 日常的增删改查,能读写SQL。
- explain 分析SQL语句的性能。
- 分页问题。
- 索引的创建和原理。
- 事务的分级,以及都解决了哪些问题,如何解决的。
- 锁的概念和设计。
- 数据膨胀后,如何对数据库优化:水平切分,垂直切分,主从与集群
2.2.2. Redis
- 基础数据结构,以及他们底层数据结构分别有哪些。
- 网络IO模型
- 缓存的淘汰机制
- 缓存的持久化问题
- 缓存的设计和使用问题(结合基础架构设计)
- 主从,集群,哨兵机制
- 基于Redis实现一个分布式锁或者延迟队列
2.2.3. 消息队列(了解基础概念和设计)
- Kafka或者RocketMQ
- 架构设计和数据流向。有哪些模式。
- 消息是如何保证不丢不重的。
2.2.4. MongoDB
一种非关系型的数据库,结构简单可靠。可以简单了解下,需要仔细区分他和MySQL的区别,以及适用场景。
2.2.5. PostgreSQL
MySQL的同级替代品,目前有超越MySQL的趋势。因为历史原因,现在还没有完全成为主流。感兴趣可以自己看下,重点区分它和MySQL有什么异同,为什么要这么设计。
3. 基础架构设计
3.1. 必知必会
- 常见的缓存设计
- 基础设计模式:简单工厂,单例,生产者消费者,观察者模型,发布订阅模型
- Restful 接口设计
- Grpc 接口设计
3.2. 微服务入门
- 为什么会有微服务,解决了哪些问题,又引入了哪些问题。
- 服务治理和服务发现是怎么做的。
- 完整的微服务都应该有哪些基础设施。
3.3. 常见场景的解决方案
- 用户注册与登录:[seasion,cookie][jwt鉴权] [oauth2.0]
- 常见权限管理 rbac,auth等
- 分页-> 无限分页,page分页
- 高流量,高并发场景。
- 某些特殊业务场景。
4. 算法
4.1. 基础数据结构
- 队列,栈
- 链表,双向链表,环
- 树,二叉树,红黑树,B树等
- 图
4.2. 基础算法
- 时间复杂度,空间复杂度
- 常见的排序算法:冒泡,快排,堆排,插归等。
- 二分查找,翻转二分查找。
- 常见的链表,枚举等。
- 深度优先,广度优先。
- 贪心和动态规划。
5. 计算机基础
- 计算机组成原理
- 操作系统
- 计算机网络
- 软件工程
- 数据库
6. 其他
6.1. Git
熟悉常用的git命令,有一定的使用经验即可,不需要太过深入的研究。
6.2. Docker
容器化的基础,一个非常抽象的概念,可以适当了解下概念,场景等。
6.3. Linux
操作系统,需要熟悉常用的命令,有一定排障的能力。尤其是用来排查日志的几个命令需要完全掌握
7. 工作技能
7.1. 沟通能力
沟通能力是一个很基础的能力。很多人有一个错误的看法:技术人员只要专业技术厉害就可以了,其他的不需要。甚至有些从业者也这么认为。这直接导致了程序员里的直男最多。
在我们技术领域,无论做什么业务,搞什么技术,都需要很强的沟通能力。需要你能清楚的表达自己的观点,并能够准确的理解对方的需求。否则的话,容易产生GAP,很多加班赶工都是因为前期沟通不足,或者沟通有问题导致的。
7.2. 学习能力
这个没啥说的。程序员的圈子,每三年就有新技术出现,如果不学习很快就会脱离时代。
7.3. 自律
大家都是成年人了,别扯那些有的没的。
7.4. 抗压能力
抗压能力在职场上主要是两个方面需要:
重要
- 应对项目责任带来的压力。
- 反击不合理的PUA。
8. 其他技能
8.1. 画图
软件行业必备技能。现在可以不会,以后需要系统训练。
常用的一些图:
思维导图,流程图,架构图,UML,时序图,鱼骨图等等。
8.2. 写作
如果你准备在“互联网技术行业”有一个长远的发展,那么写作能力是必备的,这不仅仅是会写,你还得写好,写得漂亮。
短期而言,主要是解决三个场景:
重要
- 周报
- 技术文章
- 晋升答辩
8.3. 业余爱好
一定要有那么几个业余爱好,否则人会变得很无聊。我之前遇到过工作能力强,并且日子也过得很惬意的同行,都至少有一两个长期的爱好,而且他们舍得在爱好上花精力和钱。有些人的爱好很大众,比如音乐,运动,读书;有些人比较冷门,比如养爬行动物,喝酒,脱口秀。
开始的时候,爱好真的只是爱好。后来,爱好慢慢变成调节心理、消磨时间的工具。最后,发现它已经是自己生活的一部分了。
如果你一定要我讲一个理由。我只能告诉你,在互联网技术行业里,没有人知道光荣退休和加班猝死,哪一个先来。