如何吃透一个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 ...
随机推荐
- Install Ansible on CentOS 8
环境准备: 1.至少俩台linux主机,一台是控制节点,一台是受控节点 2.控制节点和受控节点都需要安装Python36 3.控制节点需要安装ansible 4.控制节点需要获得受控节点的普通用户或r ...
- Barplot/pie/boxplot作图详解——R语言
当数据以简单的可视化的形式呈现时,数据便更具有意义并且更容易理解,因为人眼很难从原始数据中得出重要的信息.因此,数据可视化成为了解读数据最重要的方式之一.条形图和箱线图是了解变量分布的最常用的图形工具 ...
- Cesium案例(六) Time Dynamic Wheels
Cesium.Ion.defaultAccessToken = "token"; const viewer = new Cesium.Viewer( ...
- 在Ubuntu 18.04上安装NVIDIA
安装NVIDIA显卡驱动风险极大,新手注意. 在Ubuntu 18.04上安装NVIDIA有三种方法: 使用标准Ubuntu仓库进行自动化安装 使用PPA仓库进行自动化安装 使用官方的NVIDIA驱动 ...
- pandas之聚合函数
在<Python Pandas窗口函数>一节,我们重点介绍了窗口函数.我们知道,窗口函数可以与聚合函数一起使用,聚合函数指的是对一组数据求总和.最大值.最小值以及平均值的操作,本节重点讲解 ...
- BPM工作流中的一些业务场景
会签 会签是指两个或多个节点同时审批完,才能到下一节点. 案例: 合同流程 1.媒体合同需要CS.财务两部门共同审批确认:2.两个部门无审批顺序之分:3.需要两个部门全部审批通过后,流程才能往下走. ...
- day16:Linux常用命令
Linux中目录含义 /bin 存放普通用户的命令文件/boot 存放系统启动文件/cdrom 存放读取光盘的相关文件/dev 设备文件 /etc 配置文件/home 家目录/lib 库文件/lib6 ...
- Redis(四)主从复制
主从复制 简介 主机数据更新之后根据配置和策略,自动同步数据到备机的Master/Slaver机制,Master以写为主,Slaver以读为主. 这样的机制能够实现: 读写分离:Master以写为主, ...
- 关于Java中方法重载和方法重写
方法重写是子类继承父类(默认继承Object类)后覆盖父类的方法 需要保证同名 同参 同返回值 且访问权限范围不能缩小(public>protected>default>privat ...
- [C++核心编程] 4.3、类和对象-C++对象模型和this指针
文章目录 4.3 C++对象模型和this指针 4.3.1 成员变量和成员函数分开存储 4.3.2 this指针概念 4.3.3 空指针访问成员函数 4.3.4 const修饰成员函数 4.3 C++ ...