后端工程师的技能树

工作快一年了,工作内容涉及到log收集、应用的部署和维护、后端开发等,这里结合网络上的相关知识点总结下后端开发需要掌握的知识。以此评估自己的技能水平,也是自身发展的一种引导。

元知识

获取其它知识的知识和方法,可以通过这些知识,获取下面的知识和技能。

基础

  • 操作系统
    • 进程/线程
    • 并发/异步/同步
    • IO
  • 计算机网络
    • HTTP协议
    • 四层网络模型
    • 三次握手/四次握手
    • SSL/TLS
    • TCP/UDP/Socket
  • 数据结构和算法
    • 时间复杂度/空间复杂度
    • ADT(抽象数据类型)
      • 队列
    • 排序
    • 递归
    • 动态规划
    • LeetCode

语言

  • 语言的通用知识点(理解原理)
    • 解释型语言/编译型语言
    • 静态类型/动态类型
    • 类型系统
      • 基本数据类型
      • 可变数据类型/不可变数据类型
      • 参数的引用传递/副本传递
    • 条件语句
      • if else
      • switch
      • for
      • while
    • 逻辑表达式
      • &
      • ||
      • !
    • 面向对象/面向过程
      • 类和对象(实例)
      • 属性/状态
      • 方法/函数
    • 内存模型
      • 程序执行时是如何在内存中分配的
      • 堆和栈
      • 递归时的内存分配
      • 符号表
    • 访问控制
      • public/private/protect--Java
      • __init__,__all__,_func--Python
      • Public,private--Golang
    • os/sys/io/net/stdin|out|err等模块熟练掌握
      • 输入/输出
      • db模块
      • 字符串处理
    • 并发/多线程
    • 并行/多进程
    • 异步/同步

对于语言学习,熟悉以上知识就可以开发应用了,重点是学习认识不同语言自身的优缺点,想Golang中的协程、对并发的支持,Python的开发效率和简洁等。

数据库

  • SQL
    • MySQL
  • NoSQL
    • Cassandra
    • MongoDB
    • Redis
    • Memcache
  • ORM

熟悉MySQL原理,分库分表,主从架构

工具

  • Git
  • Shell/Bash/Zsh
  • Vim
  • vscode/atom
  • chrome
  • Linux
  • Docker
  • Ansible

工程实践

  • 编码规范(JSLint/各种Lint)
  • 测试
    • 单元测试
    • 集成测试
    • 黑盒测试
    • AB测试
  • 代码分析(Code Climate)
  • 构建工具
    • Makefile
    • shell scripts
  • CICD
    • Jenkins

软技能

  • 沟通交流
  • 百度脑图
  • 思维导图
  • Blog

总结

本文主要是对自己工作中内容的总结,这篇文章还需要不断修改和打磨,文末会列出几个参考网站,以供读者参考。