如何看待学习:
被动学习和主动学习
提出好问题并解决问题
四个维度:
魂:为什么学?深层次需求是什么?
道:学习的方法论,主动学?被动学?学习的指导方法是什么? 《如何阅读一本书》
术:目标什么?方法是什么? 计划什么?
器:把计划细化、落地、执行。
什么是知识?
看过好多书,过段时间全忘记了,为什么?
知识的四个层次:
信息:消息、概念
知识:和自我的结合,我如何理解、对我有什么用、我怎么用。(成甲在《好好学习》这本书中是这么说的:“在我的定义里,只有能够改变你行动的信息才是知识。”)
经验:用习得的知识指导自己行为,积累出来的可行性、验证性知识。
方法论:把自己的经验和知识根据问题领域抽象、固化。
研发技能的三个维度(纵向、横向、垂直)
技能树按照软件开发阶段:
需求分析和概要设计需要的相关技能:
该需求设计的相关行业知识,对于分析需求是否合理,概要设计的抽象是否准确很有必要。
对需求进行抽象化,把抽象的模型再带入需求进行分析验证,这块做的突出的化可选发展方向:系统分析师、业务架构师,这个是产品和技术交叉的领域。
把抽象模型表达出来涉及的主要工具和知识:UML、领域建模等等
系统设计和详细设计:
架构上的高可用、高性能
数据模型的可扩展性、性能、严谨
系统的部署模型
抽象层次,设计模式等等
研发阶段:
代码的组织方式和结构
代码的抽象和扩展
代码的可测试性,单元测试
代码中性能瓶颈的考虑:死锁、资源抢占、消峰、吞吐量
系统异常处理:跨系统调用的超时、并发调用、幂等、异常降级、异常限流。
系统异常的监控埋点和监控
项目中涉及的框架和资源核心设计思路熟悉程度:dubbo、redis、activemq、spring、mybatis、cat、oracle
上线及产线运营阶段:
发布依赖的问题,接口的版本依赖
新老数据兼容问题
db变更的影响评估
回滚的方案
产线如何验证
产线问题排查:问题链路分析和定位、操作系统资源分析(cpu、内存、网络、磁盘、IO等)、应用(错误日志、死锁、监控、应用运行时分析-java内存分析)、依赖中间件分析(redis、mq、dubbo、德鲁伊等等)
技能树按照技能领域:
数据库:
事务,事务的隔离级别以及隔离级别实现的思路,mvcc
分布式事务,以及如何做到的
索引以及索引的机制和核心算法
Sql相关概念,内连接,外连接,性能
数据库锁,表锁,行锁,悲观锁,乐观锁,那些操作会导致表锁
数据库各种操作的性能
Jvm相关:
内存模型,和垃圾回收算法
Java类加载
Java性能分析工具和方法
网络相关:
阻塞io,nio,aio
Tcp/ip,以及网络中间件所处的层次
部署拓扑结构,单点、扩容、负载、容灾
进程、线程、协程、并发
并发和并行
可见性、独占和共享、资源、可变
线程池,有界队列,丢弃策略
锁,计数,异步
Linux:
基本概念,目录结构,常用命令,权限
性能分析和问题定位
简单的shell或者python脚本能力
数据结构和算法
时间复杂度
各种常见集合
查找排序算法:b+树,红黑树
分布式的相关算法
框架和中间件
Spring
Dubbo
Mybatis
Nosql
缓存
架构
企业架构模式
分布式应用
高可用、高性能
安全
容灾
平滑扩容,自动化运维
服务治理
软件工程:
uml
领域建模
面向对象
设计模式
单元测试和测试驱动开发
敏捷软件开发
版本管理
技能树按照问题领域:
救火领域
代码的质量(健壮性、可扩展、可维护)
高性能
高可用
高安全
网友评论