怎么才能吃透java?


 

1.目标不清晰

在项目学习之前,是否有认真梳理和思考过,希望通过项目学习到哪些技术、重点需掌握哪些知识点?这些知识点又属于自己技术体系中哪个环节,是需要必须熟练掌握还是了解原理即可?相信只有明确目标之后才有学习侧重点和方向。

2. 学习方法

项目学习过程中,是否有带着问题和思考?比如项目核心需要解决的问题场景、使用了哪些技术方案,为什么需要这些技术,方案选择考虑主要有哪些?系统模块这样分层和实现的好处是?这个方法的实现,性能是否可以进一步优化等等。

如果只是纯粹跟着视频将项目代码机械敲一遍,我认为跟练习打字没任何区别,写出来的代码也是没有灵魂如行尸走肉。我相信只有结合自己的思考和理解,才可能赋予新的灵魂,做到知其然知其所以然,相关知识点也才能真正转化为自己的技术。

3. 复习与应用

纸上得来终觉浅,绝知此事要躬行,相信对编程而言更是如此,唯有实践才能出真知。对项目中学到的相关技术、知识点需要在不同场景反复练习和应用,并对过程中遇到的问题不断总结和反思。

其次,回到题主问题,如何吃透一个Java项目?

从个人经验来看,大致可以从以下几方面入手:

1.项目背景了解

学习之前,先对项目业务背景和技术体系做大致的了解,这点非常重要,一是为了解项目核心要解决问题域,二是知道系统涉及哪些技术体系,这样在学习之前可以有相关技术知识准备,以便更轻松高效学习。另外,学习完之后也可以清楚知道,什么样问题可以使用什么技术、什么方案来解决、如何解决的。

2.系统设计文档学习

对项目和系统大概了解之后,可以开始对系统设计文档熟悉,建议按照架构文档、概要设计、详细设计方式递进。通过设计文档的学习,可以快速对各系统模块有个框架性认识,知道什么各系统职责、边界、如何交互、系统核心模型等等。

对于设计文档的学习,切不可走马观花,一定要带着问题和思考。比如项目背景中的核心业务问题,架构师是如何转化成技术落地,方案为什么要这样设计,模型为什么要这样抽象,这样做的好处是什么等等?同时,对不理解的问题做需好笔记,以便后续向老师或其他同事请教或讨论等等。

3.系统熟悉和代码阅读

通过设计文档的学习,对系统设计有整体了解之后,接下来就可以结合业务场景、相关问题去看代码如何实现了。不过代码阅读,需要注意方式方法,切不可陷入代码细节,应该自顶向下、分层分模块的阅读,以先整体、后模块、单功能点的方式层层递进。先快速走读整个代码模块逻辑,然后再精读某个类、方法的实现。

代码阅读过程中,建议一边阅读一边整理相关代码模块、流程分支、交互时序,以及类图等,以便更好理解,有些IDE工具也可根据代码自动生成,比如IntelliJ IDEA。

代码阅读除了关注具体功能的实现之外,更重要的是需要关心代码设计上的思路和原理、性能考究、设计模式、以及设计原则的应用等。同样,阅读代码注释也非常重要,在研究一个API或方法实现时,先认真阅读代码注释会让你事半功倍,尽可能不要做从代码中反推逻辑和功能的事情

最后,对于核心功能代码建议分模块精读,不明白部分可借助代码调试。
 

然后,对于技术学习这块我给几点个人建议,以供题主参考:

1.制定学习规划

梳理一份适合自己的技术规划,并制定明确的学习路线和计划,让学习更有方向和重点。同样在视频课程的选择上也会更清晰,知道什么样视频该学、什么不该学,也不容易感到迷茫和空虚。如今网上各种学习资料、视频汗牛充栋,学会如何筛选有效、适合自己的信息非常重要。

2.思考与练习

对于技术编程,无捷径可言,思考和练习都非常重要,需要不断学习、思考、实践反复操练。从了解、会用、知原理、优化不断演进。结合学习计划,可以给自己制定不同挑战,比如学习spring可以尝试自己实现一个ioc容器等等。另外,工作或学习过程中遇到的问题,也是你快速提升技术能力的一个好方法,也请珍惜你遇到的每个问题的机会。时间允许的话,也请尽可能去帮助别人解答问题,像stackoverflow就是个非常不错的选择,帮助别人的同时提升自己。

3.分享与交流

保持思考总结的习惯,将学到的技术多与人分享交流,教学相长。多与优秀的程序员一起、多参与优秀的开源项目等。

结合上文所述,首先我会将TTL项目相关文档issues列表认真阅读一遍,让自己对项目能有个大体的认识,并梳理出项目一些关键信息,比如:

  • 核心要解决的问题
    • 用于解决「在线程池或线程会被复用情况下,如何解决线程ThreadLocal传值问题
  • 有哪些典型业务场景
    • 分布式跟踪系统或全链路压测(即链路打标)
    • 日志收集记录系统上下文
    • Session级Cache
    • 应用容器或上层框架跨应用代码给下层SDK传递信息
  • 使用到的技术
    • 有线程、线程池、ThreadLocal、InheritableThreadLocal、并发、线程安全等。

然后,再结合使用文档编写几个测试demo,通过程序代码练习和框架使用,一步步加深对框架的理解。比如我这里首先会拿TTL与原生JDK InheritableThreadLocal进行不同比较,体验两者的核心区别。

当然了解java之前一定是要掌握它的基础,java基础

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值