后端开发能力模型(后端)v1.0

能力模型(后端)
   T3T4T5T6T7T8
岗位职责业务能力业务梳理和设计Xa. 能清晰的梳理和描述完整的业务流程,理解并指导开发工作b. 能指出明显的业务流程错误和不足a. 能发现业务流程中较深入的问题a. 帮助业务方设计合理的流程b. 用逻辑和数字作为辅助工具a. 使用数字和逻辑主动发现流程问题b. 主动推进流程的设计和改进 
开发能力




需求分析a. 能理解并分解小规模的需求并指导开发小规模 < 3pda. 能理解并分解中等规模的需求并指导开发中规模 < 10pda. 能理解并分解大规模的需求并指导开发大规模 < 30pd经验要求. 领导3个以上 10~20pd级别的项目a. 能理解并分解超大规模需求并指导开发超大规模 >= 30经验要求. 领导3个以上超过30pd的项目a. 有能力领导超过100pd的需求经验要求. 领导过5个以上超过50pd的项目 
架构设计XXa. 能理解架构设计原理b. 能理解自己参与的系统架构c. 能设计小规模的系统架构d. 能在设计中考虑并处理高并发问题/大数据量问题a. 深入理解架构设计和常用模式b. 能进行大规模的系统架构设计或大规模系统重构经验要求. 参与3个以上部门内系统架构的设计与实现,并至少负责其中1个子系统的设计与实现a. 能主导设计部门级系统架构b. 能参与规划公司的架构模型和演进方向c. 在设计中充分考虑并平衡 业务要求/可扩展性/并行开发能力/高并发要求/大数据量要求/高可恢复性 等经验要求. 领导3个以上部门内架构的设计与实现经验要求. 参与制定过部门级的年度技术规划a. 能主导设计公司级别的系统架构经验要求. 领导2个以上跨部门系统架构的设计与实现经验要求. 参与制定过公司级的年度技术规划
详细设计和编码a. 能理解设计的目的和常用设计模式,范式/反范式b. 能够使用UML图/ER图等工具c. 规避并处理常见的边界问题/异常问题等d. 代码严谨并符合代码规范e. 能够进行简单的领域建模a. 熟练掌握设计过程和工具b. 能在设计中考虑并处理幂等问题/一致性问题c. 代码高效d. 能处理基本的性能优化e. 熟练掌握常用的领域建模方法并用于实践a. 代码优雅,可扩展性强b. 掌握性能优化的常用规律和方法,能处理日常遇到的绝大多数性能问题c. 能优化领域模型或者重构a. 除个别case外完全处理日常遇到的各种技术问题和性能问题b. 具备丰富的领域建模经验,理解业务本质经验要求. 编写或抽取系统核心代码或核心结构,有效的提升开发效率和可读性经验要求. 编写过框架/中间件级别代码,能高效的处理一类业务问题 
测试a. 掌握单测和集成测试方法b. 构思工作中的测试方法并实现a. 掌握测试的常见场景和方法,能快速识别风险和影响范围,给出高效的测试方案b. 积累日常测试的工具和用例a. 设计相对长期的测试方法和测试用例,提升测试效率b. 掌握从可测试行角度出发设计和实现的能力c. 能从测试的角度出发影响详细设计和编码a. 能从测试的角度出发影响架构设计  
前端技能      
运维技能a. 能合理埋点和设置监控b. 使用shell/python分析问题c. 习惯性查看监控/日常并处理问题a. 高效的排查和解决问题b. 积累日常运维的工具和用例a. 能梳理和设计高效的监控体系/日志体系   
技术技能a. 基础过关,能熟练使用常用框架b. 知道常用组件的使用方法c. 知道常用中间件的使用方法a. 了解常用中间件的原理并用于排查问题a. 深入理解常用中间件中的至少一类b. 能够快速学习新知识技能,直接用于简单的日常应用a. 有擅长的技术,熟知其实现和原理,在团队内形成优势互补a. 是某一领域的专家,公司内解决该问题的大拿 
领导能力制定标准XX经验要求. 领导制定过团队内的标准经验要求. 参与制定过部门内的标准经验要求. 参与制定过公司级别的标准 
团队管理Xa. 能指导低级别工程师进行日常开发a. 有能力带领2-3人b. 敢于公开表扬a. 有能力带领5人以上的团队b. 了解每个人的能力,为每个人制定发展规划并实施c. 敢于维护公司的价值观并用于团队管理a. 有能力带20人以上的团队 
通用素质学习能力 a. 能快速了解任务和简单业务b. 能快速学习一个技术的用法a. 能迅速并深入理解新的业务和系统 a. 理解技术领域的最新动态并推进团队使用b. 对使用的技术有体系性的认知,在某一方面有特长并持续学习  
逻辑思维 a. 具备基本的逻辑思维能力和数字感b. 能简单的用于日常工作a. 能理解具备一定深度的逻辑链条 a. 能主动作有一定深度的逻辑思考b. 能利用手边的工具获取数据证明自己的观点a. 主动用严密的逻辑来规划工作和方案b. 具备用全面而恰当的数据证实或者证伪的能力  
沟通能力 a. 能在team内分享技术和业务,时间不少于30分钟a. 能在团队内分享技术和业务,时间不少于1个小时b. 能掌控并转换自己的表达方式以让对方听懂a. 在团队内做过有深度的分享,描述清楚并让大家听懂经验要求. 领导3个10pd以上跨团队项目的沟通工作a. 具备面试更低级别工程师的能力经验要求. 领导3个30pd以上跨团队项目的沟通工作经验要求. 做过公司级的分享经验要求. 领导5个以上超过50pd的跨团队项目的沟通工作 

后端开发技能树

atop工具

背景

1、某次收到某个应用一台机器14:32:02挂掉的报警。

2、于是一顿操作猛如虎,然后一脸懵逼:究竟是什么导致了系统挂掉!

3、于是求助了公司ops热线,发现一个好用的工具。解决了这个疑惑。这个工具就是atop。

先上一张图来加深印象:

正是从上图,得知,是有同学在14:32:02秒执行了less命名导致了系统cpu飙升。(这里先不分析为什么less会导致cpu飙升,本文主要讲解atop工具)。

现在开始介绍atop工具。

简介

 atop是一款用于监控Linux系统资源与进程的工具,它以一定的频率记录系统的运行状态,所采集的数据包含系统资源(CPU、内存、磁盘和网络)使用情况和进程运行情况,并能以日志文件的方式保存在磁盘中,服务器出现问题后,我们可获取相应的atop日志文件进行分析,其比较强大的地方是其支持我们分析数据时进行排序、视图切换、正则匹配等处理。

监控字段的含义

ATOP列:该列显示了主机名、信息采样日期和时间点

PRC列:该列显示进程整体运行情况

  1. sys、usr字段分别指示进程在内核态和用户态的运行时间
  2. #proc字段指示进程总数
  3. #zombie字段指示僵死进程的数量
  4. #exit字段指示atop采样周期期间退出的进程数量

CPU列:该列显示CPU整体(即多核CPU作为一个整体CPU资源)的使用情况,我们知道CPU可被用于执行进程、处理中断,也可处于空闲状态(空闲状态分两种,一种是活动进程等待磁盘IO导致CPU空闲,另一种是完全空闲)

  1. sys、usr字段指示CPU被用于处理进程时,进程在内核态、用户态所占CPU的时间比例
  2. irq字段指示CPU被用于处理中断的时间比例
  3. idle字段指示CPU处在完全空闲状态的时间比例
  4. wait字段指示CPU处在“进程等待磁盘IO导致CPU空闲”状态的时间比例

CPU列各个字段指示值相加结果为N00%,其中N为cpu核数。

cpu列:该列显示某一核cpu的使用情况,各字段含义可参照CPU列,各字段值相加结果为100%

CPL列:该列显示CPU负载情况

  1. avg1、avg5和avg15字段:过去1分钟、5分钟和15分钟内运行队列中的平均进程数量
  2. csw字段指示上下文交换次数
  3. intr字段指示中断发生次数

MEM列:该列指示内存的使用情况

  1. tot字段指示物理内存总量
  2. free字段指示空闲内存的大小
  3. cache字段指示用于页缓存的内存大小
  4. buff字段指示用于文件缓存的内存大小
  5. slab字段指示系统内核占用的内存大小

SWP列:该列指示交换空间的使用情况

  1. tot字段指示交换区总量
  2. free字段指示空闲交换空间大小

PAG列:该列指示虚拟内存分页情况

swin、swout字段:换入和换出内存页数

DSK列:该列指示磁盘使用情况,每一个磁盘设备对应一列,如果有sdb设备,那么增多一列DSK信息

  1. sda字段:磁盘设备标识
  2. busy字段:磁盘忙时比例
  3. read、write字段:读、写请求数量

NET列:多列NET展示了网络状况,包括传输层(TCP和UDP)、IP层以及各活动的网口信息

  1. XXXi  字段指示各层或活动网口收包数目
  2. XXXo 字段指示各层或活动网口发包数目

视图模视

1、默认视图(Generic information)

进入atop信息界面,我们看到的就是进程信息的默认视图(上图下半部分),按g键可以从其他视图跳到默认视图。以简介里的截图为例,我们可以看到PID为31085的find进程在退出前在内核模式下占用了0.45秒CPU时间,在用户模式下占用了0.10秒CPU时间,相对10分钟采样周期,CPU时间占用比例为3%,ST列表示进程状态,N表示该进程是前一个采样周期新生成的进程,E表示该进程已退出,EXC列指示进程的退出码。从进程名在“<>”符号中,我们亦可知该进程已退出。

2、内存视图(Memory consumption)

内存视图展示了进程使用内存情况,按m键可进入内存视图。如下图:

上图下半部分展示了每个进程占用的虚拟内存空间(VSIZE)、内存空间(RSIZE)大小,以及在上一个采样周期中虚拟内存和物理内存增长大小(VGROW、RGROW),MEM列指示进程所占物理内存大小。从上图的PAG列的信息,我们可以知道此时系统内存负载较高,页交换比较频繁,而且可以看出物理内存几乎完全不可用,swap分区也比较繁忙,从进程视图中VGROW和RGROW列可看出 lekker 进程占用内存量大量增长,部分进程占用的内存减少(VGROW或RGROW字段为负值),为lekker进程腾出空间。

3、命令视图(Command line)

这个对于查看具体某个命令的详细参数,很容易通过该模式下查看到。比如,我们有多个java程序,普通视图下,可能看到的只显示为java ,但通过命令模式,我们可以方便的区分出,到底是哪个java程序占用资源比较高。如下图:

4、磁盘视图

通过按键d 可以进入磁盘视图,可以查看每个进程占用IO的情况。

快捷键汇总

进入atop目录: /var/log/atop

读取atop日志文件: atop  -r  XXX

读取atop日志文件(更具时间范围): atop -r atop_20190325 -b 14:34 -e 14:35

前进翻页: t

后退翻页: T

进程列表前进翻页: ctrl + f

进程列表后退翻页: ctrl + b

按时间跳转:

 b

 Enter new time (format hh:mm):

 按hh:mm格式输入时间

进程视图:

g   —— 默认输出

m  —— 内存相关输出

d   —— 磁盘相关输出

n   —— 网络相关输出

c   —— 命令行输出

u  查看对应的用户资源使用情况

p  显示所有每个进程的所有信息占用情况(disk、mem、io)

P(大写) 正则匹配,显示所有匹配到的进程

退出atop:q

更加详细的说明:http://www.361way.com/atop/5162.html