| 能力模型(后端) | ||||||||
|---|---|---|---|---|---|---|---|---|
| T3 | T4 | T5 | T6 | T7 | T8 | |||
| 岗位职责 | 业务能力 | 业务梳理和设计 | X | a. 能清晰的梳理和描述完整的业务流程,理解并指导开发工作b. 能指出明显的业务流程错误和不足 | a. 能发现业务流程中较深入的问题 | a. 帮助业务方设计合理的流程b. 用逻辑和数字作为辅助工具 | a. 使用数字和逻辑主动发现流程问题b. 主动推进流程的设计和改进 | |
| 开发能力 | 需求分析 | a. 能理解并分解小规模的需求并指导开发小规模 < 3pd | a. 能理解并分解中等规模的需求并指导开发中规模 < 10pd | a. 能理解并分解大规模的需求并指导开发大规模 < 30pd经验要求. 领导过3个以上 10~20pd级别的项目 | a. 能理解并分解超大规模需求并指导开发超大规模 >= 30经验要求. 领导过3个以上超过30pd的项目 | a. 有能力领导超过100pd的需求经验要求. 领导过5个以上超过50pd的项目 | ||
| 架构设计 | X | X | a. 能理解架构设计原理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. 是某一领域的专家,公司内解决该问题的大拿 | |||
| 领导能力 | 制定标准 | X | X | 经验要求. 领导制定过团队内的标准 | 经验要求. 参与制定过部门内的标准 | 经验要求. 参与制定过公司级别的标准 | ||
| 团队管理 | X | a. 能指导低级别工程师进行日常开发 | 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列:该列显示进程整体运行情况
- sys、usr字段分别指示进程在内核态和用户态的运行时间
- #proc字段指示进程总数
- #zombie字段指示僵死进程的数量
- #exit字段指示atop采样周期期间退出的进程数量
CPU列:该列显示CPU整体(即多核CPU作为一个整体CPU资源)的使用情况,我们知道CPU可被用于执行进程、处理中断,也可处于空闲状态(空闲状态分两种,一种是活动进程等待磁盘IO导致CPU空闲,另一种是完全空闲)
- sys、usr字段指示CPU被用于处理进程时,进程在内核态、用户态所占CPU的时间比例
- irq字段指示CPU被用于处理中断的时间比例
- idle字段指示CPU处在完全空闲状态的时间比例
- wait字段指示CPU处在“进程等待磁盘IO导致CPU空闲”状态的时间比例
CPU列各个字段指示值相加结果为N00%,其中N为cpu核数。
cpu列:该列显示某一核cpu的使用情况,各字段含义可参照CPU列,各字段值相加结果为100%
CPL列:该列显示CPU负载情况
- avg1、avg5和avg15字段:过去1分钟、5分钟和15分钟内运行队列中的平均进程数量
- csw字段指示上下文交换次数
- intr字段指示中断发生次数
MEM列:该列指示内存的使用情况
- tot字段指示物理内存总量
- free字段指示空闲内存的大小
- cache字段指示用于页缓存的内存大小
- buff字段指示用于文件缓存的内存大小
- slab字段指示系统内核占用的内存大小
SWP列:该列指示交换空间的使用情况
- tot字段指示交换区总量
- free字段指示空闲交换空间大小
PAG列:该列指示虚拟内存分页情况
swin、swout字段:换入和换出内存页数
DSK列:该列指示磁盘使用情况,每一个磁盘设备对应一列,如果有sdb设备,那么增多一列DSK信息
- sda字段:磁盘设备标识
- busy字段:磁盘忙时比例
- read、write字段:读、写请求数量
NET列:多列NET展示了网络状况,包括传输层(TCP和UDP)、IP层以及各活动的网口信息
- XXXi 字段指示各层或活动网口收包数目
- 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):
进程视图:
g —— 默认输出
m —— 内存相关输出
d —— 磁盘相关输出
n —— 网络相关输出
c —— 命令行输出
u 查看对应的用户资源使用情况
p 显示所有每个进程的所有信息占用情况(disk、mem、io)
P(大写) 正则匹配,显示所有匹配到的进程
退出atop:q