学习资料篇
入门必学材料
-
【书籍】码出高效-Java开发手册-系统性的理解Java基础
-
【书籍】Java开发手册(黄山版)-Java开发规范要求,必读
-
【书籍】Java 8实战-夯实Java基础
-
【书籍】微服务架构设计模式-系统介绍微服务知识体系,微服务入门必读
-
【书籍】程序员的自我修养-建立对程序员职业素养的认知,成为合格的程序员
-
【书籍】Java工程师修炼之道-职业素养
-
【书籍】Redis开发规范-redis使用必读
-
【书籍】Redis 深度历险:核心原理与应用实践-redis使用必读
-
【书籍】Springboot编程思想
-
【书籍】spring-boot官方文档
-
【书籍】高性能MySQL-Mysql基础必看
-
【书籍】深入理解计算机系统-非科班必备
-
【极客时间】Mysql45讲
-
【极客时间】Redis核心技术与实战
-
【极客时间】深入剖析Kubernetes
-
【慕课网】解读Java规范
https://www.imooc.com/read/55 -
【资料】阿里巴巴云原生技术公开课Kubernetes-学习入门k8s
https://gitbook.cn/gitchat/column/5d68b823de93ed72d6eca1bc
学习网站
- Java demo宝库,可以找到常见的用法Demo
https://www.baeldung.com/category/java/ - Java 编程思想
https://lingcoder.github.io/OnJava8/#/sidebar - Java学习
https://howtodoinjava.com/ - 美团技术团队
https://tech.meituan.com/
新人素质篇
工程师的精进原则
● 原则一:Owner意识:有要性,主要负责能负责的模块
● 原则二:时间观念:抓好二八定律和重要紧急四象限
● 原则三:以终为始:结局是什么,我们差什么
● 原则四:闭环思维:从头到尾考虑全面
● 原则五:保持敬畏:预估到悲观情况,敬畏难度
● 原则六:事不过二:一次做到位
● 原则七:设计优先:先梳理思路,充分与相关人沟通
● 原则八:产出/产能平衡:平衡投入产出比
● 原则九:善于提问:明确表达的你的需求,同时帮助解决问题者快速了解问题上下文
● 原则十:空杯心态:持续学习
软件开发的核心原则
Don’t Repeat Yourself:不要做重复性劳动
Keep it semple stupid:即KISS原则在做软件设计的工作中,很多时候都不要想得过于复杂,也不要过度设计和过早优化,最简单且行之有效的方案也就避免了复杂方案带来的各种额外成本。
You Ain’t Gonna Need It:即YSNGIN原则。只需要将应用程序必须的功能包含进来,而不要试图添加任何其他你认为可能需要的功能。
Done is better than perfect:在面对一个开发任务时,最佳的思路就是先把东西做出来,再去迭代优化。如果一开始就面面俱到,考虑到各种细节,那就很容易钻牛角尖而延误项目进度。
Choose the most suitable things:在做方案选择、技术选择时候一个很重要的原则,在面对许多技术方案、开源实现的时候,务必做到不能盲目求新,要选择最合适的而非被吹的天花乱坠的。
关于读源码
面对源码应采取带着问题探究问题的方式,读源码的目的核心是了解技术核心原理,学习前人优秀的实践经验,注意千万不要为了读源码而读源码。
对于新人,优先需要先会用,找到兴趣和快乐,在没有基础时候阅读源码,可能会走入死胡同。
“看源码”的典型流程
- 阅读该技术的架构文档,了解其总体架构和组成。
- 根据总体架构,将源码文件以模块或者上下层级进行分类。
- 从未阅读过的模块中选择最独立(依赖性最新)的模块代码读起
- 阅读此模块的功能介绍文档
- 阅读此模块的源代码
- 一边阅读一遍整理调用关系(以表或者树的形式)
- 转到第三步
关于面对问题
"XY问题“
什么是XY问题:典型的XY 问题,想做 X,但认为 Y 是实现 X 最好的方法。不问关于 X 的事,反而问起 Y 的事。
XY问题在工作中常常遇到,问题的核心在于对于问题的定位与理解不够深刻,避免XY问题也要求我们能够更好的定位问题,才能更好的解决问题。
如何快速定位问题
- 异常信息定位问题:根据项目执行时抛出的异常堆栈信息,先提取错误类型,然后提取错误信息和发生错误的位置,最后排查解决问题。对于问题的解决方法,需要经验的积累和整理。
- 链路层定位问题:很多bug是逻辑方面的问题,如在前端页面看到数据不对,接下来排查是否前端逻辑错误或显示错误,往下排查接口传入参数与响应结果是否有误,再往下排查缓存或数据库层面是否有错误,最后执行时的sql语句是否符合预期,sql执行结果是否符合预期。自顶向下定位出问题地方,在一个调用链路较长时,应当先排查出问题的环节,再进一步调试查找问题。
- 调试定位问题:通过调试工具,一步步执行代码,找到出问题的地方。
- 经验排查:根据问题情况结合自己或他人经验列出最可能发生问题的地方,经验可能来自相同问题也可能来自同类问题的迁移,最终多翻尝试解决问题。
- 参考资料定位问题:将已知问题信息通过百度、google、官方文档QAQ等了解可能出问题的地方,他人遇到同类的问题排查解决方案,进而辅助排查解决问题。
- 在经验不充足时,个人认为当注重培养资料查找能力,另外就是问题表述能力,只有能够很好的把问题表述给他人,给搜索引擎,才能更快的找到答案。
- 在排查问题时如何证明一个地方有问题?目前用到的主要是对比法,根据输入输出结果对比或者设置参照物,参照对比。
如何彻底解决问题
- 面对问题的心态:逢山开路、遇水搭桥;另辟蹊径、换一条路;描述问题、专人解决;得过且过、听之任之
- 静下心深入分析问题,寻找思考最优解决方案,评估解决方案,同时还需要考虑到解决方案可能带来的副作用,是否会对稳定的模块产生影响,解决问题的彻底性,解决方案需要付出的成本代价等
- 基本功扎实
遇到问题后总结问题,尽量上升一个高度解决一类问题
关于提问
当你拋出一个技术问题时,最终是否能得到有用的回答,往往取决于你所提问和追问的方式。
- 遇到问题时先定位问题,并且能够把问题清晰的描述给搜索引擎,描述给他人。
- 提问前多番尝试,尝试通过搜索文章,wiki,手册,faq等以找到答案,尝试找别人提过的类似的问题以找到答案。
- 思考问题可能的原因解决方案,并且做力所能及的尝试。
- 带着问题和尝试后的结果向高人请教,学习高人的分析解决问题的方法。
【程序员自我修养——提问的智慧】
https://blog.csdn.net/weiwoyonzhe/article/details/104712755?spm=1001.2014.3001.5501
关于学习
【学习之学习】https://blog.csdn.net/weiwoyonzhe/article/details/90728478
Java工程师能力结构图(2019)
https://download.csdn.net/download/weiwoyonzhe/10945586?spm=1003.2166.3001.6637.7