如何吃透一个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 ...
随机推荐
- 全局唯一ID的实现方案
为什么需要保证唯一ID? 在单机服务架构中,数据库的每一个业务表的主键ID都是允许自增的,但是在分布式服务架构的分库分表的设计,使得多个库或者多个表存储了相同的业务表,如果没有一个全局的唯一ID设计方 ...
- Object.toString与Object.prototype.toString区别
1.Object原型链上的toString方法可以用于对象类型的判断,如常用的区分数组与普通对象. 例如: Object.prototype.toString.call(''); //[object ...
- 【小白晋级大师】如何设计一个支持10万人用的ChatGPT对接系统
不停地书写,方能不失在人海茫茫. 1.前言 之前给大家写了ChatGPT对接企业微信的教程,具体可看知乎链接: [奶奶看了都会]ChatGPT3.5接入企业微信,可连续对话 文章结尾说了教程只能适用于 ...
- 修复Joe主题静态资源为国内地址
背景 Typecho 是由 type 和 echo 两个词合成的,来自于开发团队的头脑风暴. Type,有打字的意思,博客这个东西,正是一个让我们通过打字,在网络上表达自己的平台.Echo,意思是回声 ...
- [Linux]常用命令之【mkdir/touch/cp/rm/ls/mv】
cp 将来源文件夹packageA下的所有目录及文件复制到新文件夹packageB下,形成: /packageB/... # cp -r /home/packageA/* /home/cp/packa ...
- MordernC++之左值(引用)与右值(引用)
左值与右值 C++中左值与右值的概念是从C中继承而来,一种简单的定义是左值能够出现再表达式的左边或者右边,而右值只能出现在表达式的右边. int a = 5; // a是左值,5是右值 int b = ...
- Spring Boot 整合 Kafka
Kafka 环境搭建 kafka 安装.配置.启动.测试说明: 1. 安装:直接官网下载安装包,解压到指定位置即可(kafka 依赖的 Zookeeper 在文件中已包含) 下载地址:https:// ...
- ROS2的安装与使用(超详细图文教程)
ROS2的安装与使用(超详细图文教程) 如果前面的虚拟机以及Ubuntu22.04镜像都安装好了,根据目录直接跳到ROS2的安装. 资料参考于:古月居 VMware虚拟机的安装 安装地址: 对于不了解 ...
- 基于Canal实现MySQL 8.0 数据库数据同步
前言 服务器说明 主机名称 操作系统 说明 192.168.11.82 Ubuntu 22.04 主库所在服务器 192.168.11.28 Oracle Linux Server 8.7 从库所在服 ...
- MKL稀疏矩阵运算示例及函数封装
Intel MKL库提供了大量优化程度高.效率快的稀疏矩阵算法,使用MKL库的将大型矩阵进行稀疏表示后,利用稀疏矩阵运算可大量节省计算时间和空间,但由于MKL中的原生API接口繁杂,因此将常用函数封装 ...