如何吃透一个Java项目?
现在Austin的文档我觉得还是比较全的,但到了看代码的时候,可能有的同学就不知道应该怎么看,有想知道模块之间的调用链路,有想一点一点把细节给全看了。这时候就很可能在项目里犯迷糊了,绕不出不来了。
Java开源项目消息推送平台推送下发【邮件】【短信】【微信服务号】【微信小程序】【企业微信】【钉钉】等消息类型。
我工作了几年,也接手过很多新的业务,这里聊聊我的经验。
1、在看代码之前,先整体认识下当前的系统,到底是干什么的。由几个模块组成,上下游的关系是怎么样的。
这个对于Austin来说就很简单啦,就发送消息。核心就是由接入层->MQ->消费逻辑层给组成,另外提供一个后台管理以及一个流处理模块
| 工程模块 | 作用 |
|---|---|
| austin-common | 项目公共包:存储着项目公共常量/枚举/Bean |
| austin-support | 项目工具包:对接中间件/组件 |
| austin-cron | 定时任务模块:对xxl-job封装和项目定时任务逻辑 |
| austin-web | 后台管理模块:提供接口给前端调用 |
| austin-service-api | 消息接入层接口定义模块:只有接口和必要的入参依赖 |
| austin-service-api-impl | 消息接入层具体实现模块:真实处理请求 |
| austin-handler | 消息处理逻辑层:消费MQ下发消息 |
| austin-stream | 实时处理模块:利用flink实时处理下发链路数据 |
| austin-data-house | 数据仓库模块:消费MQ数据写入hive |
2、了解了当前系统之后,这时候把代码给下载到本地,看看有没有办法在本地运行,或者在测试环境中远程debug。这一步就是为了能让自己真实体验下功能,试着追下整体逻辑(不用细看)。
这块Austin也好办,因为在本地就可以起来,发消息本地也是正常发送的。就从接入层的发送接口开始,一步一步的bug,方法我这边基本都会有注释,有“难懂”的代码应该都有文档告诉你当时我是怎么设计的。
这时候不用去看很细的内容,比如某个字段是怎么拼接的,比如我做去重功能的时候key是什么,value是什么。反正先大体把每一个方法给过一遍,知道会有这些处理,最后就发送了一条消息。
3、整体逻辑过完了以后,再次回到架构图或者功能图,看看是不是又理解些了。这时候就应该不会感到抽象,应该已经又进一步明白了系统的整体功能了,甚至了解到了写代码的人的风格。
4、继续debug!看细节!探索为什么要这样设计代码,如果是你写有没有更好的写法,或者现有这写法有没有值得吐槽的。
这时候就得看一些你疑惑的细节功能是怎么实现的,比如之前可能不知道去重在redis 是怎么实现的,这时候就看看key是什么,value是什么。可能不知道数据隔离是怎么实现的,原来现在用的是SpringBoot Kafka 新版本提供的特性(在创建kafka容器前就可以动态去更改groupId)。比如为什么我要在这一步打上日志,看看发送消息时,打印的日志是哪些,这条日志打下来是干什么的。
接触一个新的项目,永远都是:先看大纲->再看细节,有debug条件是最好的,配合日志看看处理链路。
如果想学Java项目的,强烈推荐我的项目消息推送平台Austin(8K stars),可以用作毕业设计,可以用作校招,可以看看生产环境是怎么推送消息的。消息推送平台推送下发【邮件】【短信】【微信服务号】【微信小程序】【企业微信】【钉钉】等消息类型。
最近有在不同的地方看到了我的开源项目austin,每次都能让我窃喜一番。以至于给我感觉很有戏,或许能成为网红项目。
austin消息推送平台从零开写更新了一年多,Gitee 4.9k+stars,GitHub 4k+ stars,能达到这成果,一方面是我孜孜不倦地运营,另一方面是有不少看过这个项目的小伙伴在默默地帮我推荐。
我从来没有跟别的博主主动推荐过我的项目,让他们帮忙宣传宣传。这个是可以做到的,但我没去这样做。
austin目前跟谷粒商城/瑞吉外卖/淘淘商城这种Java网红项目在知名度上还没法比,还远着。现在应该还不会有面试官看完简历知道是austin,也应该不会被提到:你们项目组挺大啊。
austin跟商城/外卖这种项目不一样的是:只要有点规模的公司,都会有消息推送平台这种系统,不会受到公司具体业务的影响。
至于有很多人会提到这系统能不能写在简历上,它离生产环境的项目还有多远,是不是只是一个学习项目。
1,这系统能写在简历上,我两年前写的就是它,能用作面试,也通过了面试。我这也有股东在校招通过它拿了大厂的offer的。
2,不要觉得生产环境的项目有多牛逼,这项目是能上生产环境的,也已经有人在线上部署了。我相信肯定不止一个,我看Git的fork记录也有其他公司的,要是你也部署了,还劳烦在Git填一下。
3,这系统适合学习,主要是它的业务不复杂,但可玩性还是挺高的(看我列举了一堆的技术栈就知道了)
如果想学Java项目的,强烈推荐我的项目消息推送平台Austin(8K stars),可以用作毕业设计,可以用作校招,可以看看生产环境是怎么推送消息的。消息推送平台推送下发【邮件】【短信】【微信服务号】【微信小程序】【企业微信】【钉钉】等消息类型。
如何吃透一个Java项目?的更多相关文章
- 初学者如何吃透一个Java项目
不少初学者朋友在学习Java过程中,会对着视频敲Java项目,其中遇到的BUG还能解决,但就是每次敲完一个项目,就感觉很空虚,项目里面的知识点感觉懂了但又好像没懂 这些朋友应该怎样才能掌握一个项目所用 ...
- 在Eclipse中,如何把一个java项目变成web项目
经常在eclipse中导入web项目时,出现转不了项目类型的问题,导入后就是一个java项目.解决步骤:1.进入项目目录,可看到.project文件,打开.2.找到<natures>... ...
- java学习笔记(一):开始第一个java项目
这里使用IntelliJ IDEA 来新建第一个java项目 在新建项目向导,你可以选择你的项目支持的技术,你正在做一个普通的Java项目,只需单击下一步. 下一步,新建一个test的项目. 新建一个 ...
- 【系列教程1】Gradle入门系列二:第一个Java项目
这篇教程的主要内容是讲解如何用Gradle编译和打包一个简单的Java项目. 该Java项目只有一个需求:我们的构建脚本必须创建一个可执行的Jar文件,换句话说,我们必须能够使用命令java -jar ...
- 作为Java新手,如何才能快速的看透一个Java项目?
前言 技术学习是一个总结.纠错.触类旁通的过程,而不是单纯重复练习的过程,如果你问一个做过5年以上Java的老码农,他们很多人都会有很强的"搬砖感",这种"搬砖感&quo ...
- [IntelliJ IDEA入门] 新建一个Java项目
新建一个Project 是否有JDK配置 选择JavaEE 点击Next 项目路径和文件 .idea (directory based) 创建项目的时候自动创建一个 .idea 的项目配置目录来保存项 ...
- Gradle入门(3):构建第一个Java项目
Gradle插件通过引入特定领域的约定和任务来构建你的项目.Java插件是Gradle自身装载的一个插件.Java插件提供的基本功能远比源代码编译和打包多.它为你的项目建立了一个标准的项目布局,并确保 ...
- JetBrains Fleet初体验,如何运行一个java项目
序言 各位好啊,我是会编程的蜗牛,JetBrains 日前宣布其打造的下一代 IDE Fleet 正式推出公共预览版,现已开放下载.作为java开发者,对于JetBrains开发的全家桶可以说是印象深 ...
- 如何创建一个Java项目
目录 新建项目 项目信息配置 创建Java类 编译和运行 新建项目 首先双击eclipse进入到eclipse页面. 菜单"File"下的"New"里" ...
- 一个Java项目的学习
1. java命令行的启动 首先是gradle build 其次是:java -Dabc.appid=1234 -classpath "a.jar:b.jar" com.ctri ...
随机推荐
- Quicker快速开发,简单的网页数据爬取(示例,获取天眼查指定公司基础工商数据)
前言 有某个线上项目,没有接入工商接口,每次录入公司的时候,都要去天眼查.企查查或者其他公开数据平台,然后手动录入,一两个还好说,数量多了的重复操作就很烦,而且,部分数据是包含超链接,一不注意就点进去 ...
- Windows系统下载最新版Windows10 iso映像
在电脑PC端如何下载最新版的完整Windows10 iso映像?打开https://www.microsoft.com/zh-cn/software-download/windows10/页面,是不能 ...
- git的Rebase和Merge之间的区别
有人会说Merge更好,因为它保留了最完整的工作历史.其他人则认为,Rebase变得更整洁,这使审阅者的生活更轻松,更高效.本文将解释合并和重新设置之间的区别是什么,使用它们之一有什么好处. 从根本上 ...
- 关于Docker compose值IP与域名的映射 之 extra_host
公司的所有项目都是采用Docker容器化部署,最近有一个项目需要使用定时任务调用第三方Api,正式web环境服务器的网络与第三方网络是通畅的,但是当将代码发布到正式环境,调用接口却显示 System. ...
- Hugging News #0407: Google AI 的 Pix2Struct 来啦、开发者资源页面发布
每一周,我们的同事都会向社区的成员们发布一些关于 Hugging Face 相关的更新,包括我们的产品和平台更新.社区活动.学习资源和内容更新.开源库和模型更新等,我们将其称之为「Hugging Ne ...
- 最新版本 Stable Diffusion 开源 AI 绘画工具之图生图进阶篇
目录 图生图基本参数 图生图(img2img) 涂鸦绘制(Sketch) 局部绘制(Inpaint) 涂鸦蒙版(Inpaint sketch) 上传蒙版(Inpaint upload) 图生图基本参数 ...
- Golang一日一库之 日志库 zap
简介 在开发过程中 会使用到日志库去记录错误的日志,尤其是golang中 有无穷无尽的error 如果不记录,当你的代码出错,就无从排错了. zap 是开源的 Go 高性能日志库 主要有以下特点: 支 ...
- Zabbix_sender基础命令浅析
zabbix_sender是Zabbix监控系统中用于向Zabbix服务器发送数据的命令行工具.以下是zabbix_sender基础命令教学: 语法: zabbix_sender -z <ser ...
- Django基于一对多的正向查询和反向查询
1.正向查询 obj = models.User.objects.get(name='longge') name = obj.group.name print(name) # 肖邦组 2.反向查询 & ...
- c/c++零基础坐牢第一天
c/c++从入门到入土(1) 开始时间2023-04-12 22:37:21 结束时间2023-04-13 00:02:26 前言:恭喜大家打开信息时代的大门,每个时代都有代表性的炫酷技能:原始时代的 ...