基础:
不要知其然而不知其所以然,我认为应该能够做到将自己“掌握”的东西,准确地表达出来。爱因斯坦曾经说过:“如果你不能把它简单地解释出来,那说明你还没有很好地理解它”。从了解 - 掌握 - 精通,这是我们队失误掌握的一个循序渐进的过程。我很少在简历上写我精通某个技术,因为我知道我做的还不够,我需要更加深入的去探究它。
学习技巧:
1、动手实践
纸上谈兵谁都会,真正让你去实现某个功能,你就会遇到很多很多问题,通过解决问题的方式,你对它的理解才会有一定的深度;
2、交流沟通
一般将自己的理解整理成文字输出、交流是个非常好的提高方式。
阅读源码:
为什么?
1、理解高质量的代码,能够提高我们自己的分析、设计等能力;
2、快速定位问题往往需要黑盒结合白盒的能力,对内部一无所知,可能就没有思路;
3、通用平台、开源框架,不见得能够满足业务需求,只有深入源代码层面进行定制或者自研,才能实现。
怎么做?
1、多看;
2、分析别人的架构、实现,分析其历史上掉过的坑。
什么程度?
1、带着问题和明确目的去阅读,比如以某个BUG的角度,结合实践去验证;
2、一定要有输出,记录下来,整理心得,交流、验证、提高。
面试:
1、技术素养好,能够进行深度思考,而不是跳脱地夸夸其谈;
2、职业精神,是否表现出认真对待每一个任务;
3、是否hands-on,是否主动。
书单:
虽然书是一个好的系统化知识来源,但更多提高还是来源于实践、阅读源码、技术交流等,毕竟书籍也很难完全跟上技术和架构的变革。
Java基础:
Bruce Eckel《Java编程思想》、《Java核心技术》、《Effective Java》、《Head First 设计模式》
并发、JVM:
Brian Goetz《Java并发编程实战》、周志明《深入理解Java虚拟机》
性能优化:
Charlie Hunt、Binu John《Java性能优化权威指南》
开源软件、互联网架构:
《Spring实战》、《Netty实战》、《Cloud Native Java》
架构:
《大型分布式网站架构设计与实践》、《深入分布式缓存:从原理到实践》