程序员常用工具总结
1.前言
俗话说:“工欲善其事,必先利其器”。
为了助力大家的学习和进阶,本小节介绍几个对 Java 学习非常有帮助的 IDEA 插件,代码反编译和反汇编工具,以及非常不错的网站等。
2. IDEA 插件
首先不必多说,IDEA 是目前 Java工程师最主流的开发工具, IDEA 的强大之处不仅在于自身,还在于提供了丰富的插件(这点和谷歌浏览器非常类似)。
本部分介绍几款强大实用的 IDEA 插件,助力大家开发。
以下插件大都可以通过 IDEA 自带的插件管理中心安装,如果搜不到可以去 IDEA 插件官网下载本地导入。

具体安装界面不同版本 IDEA略有差异,请自行研究。
如果连插件安装都不愿意学、学不会的话,很难成为一名合格的 Java 开发工程师。
2.1 Alibaba Java Coding Guidelines
首先要推荐的是和《手册》配套的阿里巴巴 Java代码规范插件。
安装该插件后,代码超过 80 行、手动创建线程池等,这些和《手册》中的规约不符时,IDEA中会给出警告提示。
建议大家一定一定一定要安装该插件,它会帮助你检查出很多隐患,督促你写更规范的代码。
2.2 jclasslib bytecode viewer
下面要隆重介绍的是一款可视化的字节码查看插件:jclasslib 。
大家可以直接在 IDEA 插件管理中安装(安装步骤略)。
使用方法:
- 在 IDEA 打开想研究的类;
- 编译该类或者直接编译整个项目( 如果想研究的类在 jar 包中,此步可略过);
- 打开“view” 菜单,选择“Show Bytecode With jclasslib” 选项;
- 选择上述菜单项后 IDEA 中会弹出 jclasslib 工具窗口。

那么有自带的强大的反汇编工具 javap 还有必要用这个插件吗?
这个插件的强大之处在于:
- 不需要敲命令,简单直接,在右侧方便和源代码进行对比学习;
- 字节码命令支持超链接,点击其中的虚拟机指令即可跳转到 jvms 相关章节,超级方便。
该插件对我们学习虚拟机指令有极大的帮助。
2.3 Codota
另外一个不得不说的就是专栏中提到的辅助开发神器: Codota。
可以点击下图所示“Add Codota to you IDEA” 了解安装步骤。

该插件的强大之处在于:
- 支持智能代码自动提示,该功能可以增强 IDEA 的代码提示功能;
- 支持 JDK 和知名第三方库的函数的使用方法搜索,可以看到其他知名开源项目对该函数的用法。
当我们第一次使用某个类,对某个函数不够熟悉时,可以通过该插件搜索相关用法,快速模仿学习。

如上图所示,我们想了解 Stream
类中 flatMap
函数的用法,可以使用该插件查看知名开源项目的用法。
插件窗口顶部还给出了该类最常用的函数,可以点击查看相关用法案例,每个案例右侧的 "view source"可以跳转到该片段对应的开源项目的源码中。
2.4 Auto filling Java call arguments
开发中,我们通常会调用其它已经编写好的函数,调用后需要填充参数,但是绝大多数情况下,传入的变量名称和该函数的参数名一致,当参数较多时,手动单个填充参数非常浪费时间。
该插件就可以帮你解决这个问题。
安装完该插件以后,调用一个函数,使用 Alt+Enter 组合键,调出 “Auto fill call parameters” 自动使用该函数定义的参数名填充。
2.5 GenerateO2O、GenerateAllSetter
我们定义好从 A 类转换到 B 类的函数转换函数后,使用这两个插件可以自动调用 Getter 和 Setter 函数实行自动转换。
实际开发中还有一个非常常见的场景: 我们创建一个对象后,想依次调用 Setter 函数对属性赋值,如果属性较多很容易遗漏或者重复。

可以使用这 GenerateAllSetter 提供的功能,自动调用所有 Setter 函数(可填充默认值),然后自己再跟进实际需求设置属性值。
2.6 Material Theme UI
对于很多人而言,写代码时略显枯燥的,如果能够安装自己喜欢的主题将为开发工作带来些许乐趣。
IDEA 支持各种主题插件,其中最出名的当属 Material Theme UI。

安装后,可以从该插件内置的各种风格个选择自己最喜欢的一种。
2.7 Rainbow Brackets
由于很多人没有养成好的编码风格,没有随手 format 代码的习惯,甚至有些同事会写代码超过几百行,阅读起来将非常痛苦。
痛苦的原因之一就是找到上下文,由于括号太多,不确定当前代码行是否属于某个代码块,此时这个插件就会帮上大忙。
插件 github 地址:https://github.com/izhangzhihao/intellij-rainbow-brackets。

大家可以观看其 github 首页的动图体会和学习其强大功能。
2.8 Maven Helper
现在 Java 项目通常会使用 maven 或者 gradle 构建,对于maven 项目来说, jar 包冲突非常常见。
那么如何更容易地查看和解决 jar 包冲突呢?

大家可以安装该插件,安装后 IDEA 中打开 pom.xml 文件时,就会多出一个 “Dependency Analyzer” 选项卡。
如上图所示,该插件支持值插件冲突的 jar 包,可以选择冲突的 jar 包将其 exclude 掉。
2.9 FindBugs
程序员总是想尽可能地避免写 BUG, FindBugs 作为静态代码检查插件,可以检查你代码中的隐患,并给出原因。

当然还有很多类似的静态代码检查插件,大家可以自行了解安装。
2.10 SequenceDiagram
SequenceDiagram 可以根据代码调用链路自动生成时序图,超级赞,超级推荐!
这对研究源码,梳理工作中的业务代码有极大的帮助,堪称神器。
安装完成后,在某个类的某个函数中,右键 --> Sequence Diagaram 即可调出。
如下图是 Netty 的源码,可以通过该插件绘制出当前函数的调用链路。

双击顶部的类名可以跳转到对应类的源码中,双击调用的函数名可以直接调入某个函数的源码,总之非常强大。
2.11 Stack trace to UML
Stack trace to UML 支持根据 JVM 异常堆栈画 UML时序图和通信图。
打开方式 Analyze > Open Stack trace to UML plugin + Generate UML diagrams from stacktrace from debug

2.12 Java Stream Debugger
Stream 非常好用,可以灵活对数据进行操作,但是对很多刚接触的人来说,不好理解。
那么 Java Stream Debugger 这款神器的 IDEA 就可以帮到你。它可以将 Stream 的操作步骤可视化,非常有助于我们的学习。


2.13 Octotree
Octotree是一款浏览器插件,能够看到GitHub源码的目录结构图:

2.14 其它
IDEA 的插件浩如烟海,好的IDEA 插件欢迎留言交流。
另外大家可以通过 IDEA插件官网进行搜索,有海量插件供你选择。
3.反编译和反汇编软件
Java 学习进阶之路离不开Java 反编译和反汇编。
实际开发中需要用到反汇编的典型场景有:
- 自己或者二方上传的包含新的接口 jar 包到maven 仓库,下载下来查看 jar 包检查新的接口是否包含在新的 jar 包中;
- 需要临时查看某个 Jar 包的源码,不想加到本地仓库中;
- 拿不到源码,又想了解其源码究竟是怎么写的;
- 线上代码表现和自己的源码不一致,怀疑线上代码不对,可以反编译去核对。
对于大多数普通 Java 工程师来说,使用反编译的场景多是为了学习研究。
3.1 在线Java反编译工具
有很多在线反编译的网站,其中比较好用的主要是以下两个:

使用简单,直接将 jar 包和 class文件拖到页面即可。
http://www.javadecompilers.com/

功能很强大,支持多种反编译方式,但是浏览效果不如上面网站好。
3.2 离线 Java 反编译工具
3.2.1 反编译软件
很多人担心在线反编译可能会引起代码泄露等,所以倾向于使用本地的反编译工具。
这里推荐两款软件: JD-GUI 和 Luyten。
JD-GUI 是一款可以根据 Java的 class 文件反编译出其源码的工具,界面简单,功能强大。

另外一个非常好用的反编译软件为 Luyten, 它是反编译工具 Procyon 的可视化显示工具。
大家可以在其 github 上下载安装:https://github.com/deathmarine/Luyten/releases。
该软件的用法和 JD-GUI 类似。
图形界面反编译虽然更直观,但是如果我们想反编译Linux服务器上的类文件可咋办呢?
我们可以通过 Jad 、CFR、Procyon、ernflower、 JD等反编译工具。
另外知名的阿里开源 Java诊断工具 arthas 也支持 jad 命令,可以将 JVM 中实际运行的 class 文件的字节码反编译成 Java 代码,便于理解业务和排查问题。
举一个真实发生过的典型的场景:
有一次代码发布上线,但是从功能表现看线上仍然是“旧代码”,但是从发布的 git 提交版本来看是最新版。
此时就可以使用 jad 反编译该类,来核查该问题。
3.2.2 反汇编
这里简单介绍 Java 反编译和反汇编的区别。
这里说的反编译是指:将 class 文件反编译成 Java 源码的过程。
这里说的反汇编是指:将class 文件反解析为更可读的虚拟机指令的过程。
反汇编最权威和强大的当属 JDK 自带的 javap 工具,具体用法直接输入帮助指令javap -help
即可查看:
用法: javap <options> <classes>
其中, 可能的选项包括:
-help --help -? 输出此用法消息
-version 版本信息
-v -verbose 输出附加信息
-l 输出行号和本地变量表
-public 仅显示公共类和成员
-protected 显示受保护的/公共类和成员
-package 显示程序包/受保护的/公共类
和成员 (默认)
-p -private 显示所有类和成员
-c 对代码进行反汇编
-s 输出内部类型签名
-sysinfo 显示正在处理的类的
系统信息 (路径, 大小, 日期, MD5 散列)
-constants 显示最终常量
-classpath <path> 指定查找用户类文件的位置
-cp <path> 指定查找用户类文件的位置
-bootclasspath <path> 覆盖引导类文件的位置
大家一定要自己多动手实践,才能更好地掌握它。
另外一个比较好用的反汇编工具为 jclasslib。

在IDEA 插件中心中还可以搜到该工具的IDEA插件。
当然,还有很多其他好用的 Java 反编译和反汇编软件,希望大家平时多尝试,多练习。
希望大家能够熟练掌握其中一两种,能够快速反编译和反汇编,帮助自己学习知识和解决问题。
4.效率软件
4.1 效率
4.1.1 Alfred
Alfred 可以说是 Mac 系统的效率神器。该软件支持文件搜索、粘贴板管理、快捷短语提示、各种工作流等功能。
具体功能介绍可以看这篇文章。

4.1.2 Wox
有些朋友可能会说,我们系统是 windows 的肿么办?
这里推荐一个 windows 上的 alfred: Wox, 该软件支持软件、文件、浏览器书签等搜索,支持通过快捷键快速搜索网页,还支持丰富的插件,可以查询英语单词、查快递等。

软件效果图(图片来自官网)
4.1.3 Snipaste
另外推荐一个非常好用的截图和贴图软件 Snipaste。
该软件不仅是一款截图工具,还支持将截图贴到屏幕上,使用非常简单, F1 截图,然后 F3 贴图,截图就会桌面置顶显示。

软件效果图(图片来自官网)
我们写技术文章或者开发时可能需要参考多个地方,由于开发的桌面和参考的桌面通常不在一个桌面,如果没有双屏,或者双显示屏还不过还需要切换,就非常浪费时间。此时该软件就有大用途,可以将待参考的内容分别截图、贴图,然后自己随意排列组合在当前页面中供你参考。
4.1.4 Contexts
该软件目前只支持 mac 系统,可以实现窗口的快速切换。

软件效果图(图片来自官网)
4.1.5 Paste
该软件目前只支持 mac 系统。
采用 iOS 多任务卡片切换界面,可以可视化粘贴板历史,支持剪切搜索,热键快速调用,可以快速选取想要的粘贴版历史内容并粘贴到当前应用中。

4.2 画图神器
作为一个合格的程序员,怎能没几个趁手的画图工具呢?
每个人的喜好各有不同,下面推荐几个本人和身边人开发中常用的画图工具。
4.2.1 UML 画图工具
visual-paradigm
推荐 visual-paradigm的理由是该画图工具不仅支持软件本地画图,还支持在线画图,支持最新的语法,并且有丰富的参考示例。
PlantUML
强烈推荐大家画UML 图时使用PlantUML,理由是其他大多数作图软件都采用拖拽式,对于有些强迫症的人会浪费很多时间进行对齐等操作。
该软件还提供了 IDEA 插件,在IDEA中创建 plantUML 的图形支持实时预览。
通过 PlantUML 官网给出的示例,大家可以快速上手。
其它UML画图工具
可以使用 processon 来作图,优势是在线存储。windows 系统用户可以使用 visio,功能强大,画的图也很美观。
4.2.2 思维导图
很多人会有些奇怪,为啥推荐思维导图呢?
其实对于Java工程师来说,思维导图是梳理知识,梳理需求的重要工具。
然而画思维导图并不是照着目录列一遍,而是带上自己的思考,具体再画图篇会讲到。
思维导图软件推荐使用: xmind、mindjet、ithoughts 等。
4.3 辅助开发
4.3.1 PostMan
PostMan 可以模拟前端请求,可以将请求进行分类、保存,支持变量,支持将请求导出为 curl 等其他请求方式,功能非常强大,大家可以根据官方文档多摸索使用。

4.3.2 VisulVM
VisulVM 是 JDK 命令行工具的可视化整合工具,可以在开发和生产中使用。

常规用法是先启动软件,然后选择本地的 Java 进程,或者添加远程机器的 Ip 和端口号监控远程 Java 进程状况。
IDEA 中还有 VisualVM 的插件,可以在本地应用启动时,自动启动 VisualVM。
4.3.3 前端插件助手
推荐一个方便大家开发的插件:前端插件助手。
该插件支持字符串的编解码、JSON串的格式化、代码美化、二维码生成器、页面滚动截屏、图片转Base64 、简易 Postman、Ajax 调试等功能。
虽然名叫“前端插件助手”,其实该插件对我们后端开发帮助也极大。
4.3.4 Print Friendly & PDF
我们平时看很多博客等,想保存为PDF,如果直接使用浏览器打印就会发现有很多广告等信息。
可以使用该插件,生成只包含页面主要内容的 PDF。
大家可以通过该软件的官网 进一步了解该插件。
4.3.5 ModHeader
该插件可以修改请求和响应头,在某种调试场合非常有用。
4.3.6 Ajax Interceptor
该插件非常强大,可以修改页面 Ajax 请求的返回结果。
2.3.7 翻译插件
沙拉查词
很多同学想看英文技术网站,但是英语不是特别好,可以借助该插件聚合多种翻译软件,翻译各种词汇或句子。
最大的好处是可以对比多种翻译插件的结果,得到最准确的理解。

彩云翻译
彩云翻译 提供了中英文对照翻译的能力,如果看某些英文技术文章有些吃力,可以适当使用该插件实现中英文对照理解。

5.很赞的网站
5.1 在线练习网站
很多人想学习某个技术,但是有自己电脑配置限制或者嫌麻烦等各种原因,可能不愿意安装某些环境。
那么有没有可以在线练习的网站呢? 答案是:有。
接下来推荐几个非常强大的在线练习和学习网站。
5.1.1 Git 在线练习
推荐一个在线学习 Git 的趣味网站: https://learngitbranching.js.org/

5.1.2 kafka集群体验
有一个网站提供kafka集群的体验:https://www.cloudkarafka.com/
5.1.3 leetcode
此处,不得不提的是鼎鼎大名的 leetcode。
该网站提供了在算法、数据库和Shell 脚本的练习题。
5.1.4 数据结构可视化
接下来推荐一个数据结构可视化的网站。可以选择某种数据结构,动态添加数据,观察变化过程。

5.1.5 正则表达式
还有很多支持在线学习和验证正则表达式的网站,如 https://regexr.com/、https://c.runoob.com/front-end/854、https://tool.oschina.net/regex。
5.1.6 在线练习SQL
推荐几个可在线练习 SQL 的超赞网站:SQLZOO、SQLBolt、SQL Fiddle。

5.2 实用网站
5.2.1 时间戳转换
时间戳转换工具:https://tool.chinaz.com/tools/unixtime.aspx
5.2.2 JSON相关
JSON格式化
开发中还会经常用到格式化 JSON 串的功能,bejson 提供了 JSON相关的丰富功能,JSON的格式化校验、压缩、转义、去除转义等。
JSON 和 Java实体互转
有很多强大的网站支持 JSON和Java实体互转,如 bejson、jsonschema2pojo 、codebeautify、FreeCodeFormat、site24*7 等。
5.2.3 超赞的英文 Java学习网站
除了咱们的慕课网外,推荐几个非常好的英文学习网站。
首推 baeldung该网站几乎所有的文章都有配套代码,。我们可以直接通过该网站的代码运行学习某些知识点,某些框架等。
其次是 javacodegeeks, 该网站会提供丰富的 Java 教程,还会提供一些英文 PDF 教程。
journaldev 和 jamesdbloom 对技术的讲解非常透彻。
5.2.4 技术电子书百宝箱
Library Genesis 号称是帮助全人类知识传播计划,其网站 http://gen.lib.rus.ec/ 提供了很多英文图书的下载。

我们 Java 开发需要用到知名英文书籍几乎都可以在上面找到电子版。
鸠摩搜书:https://www.jiumodiary.com/
另外也可以搜索自己的百度网盘,腾讯微云,可能之前已经保存了相关的电子书
最后强烈建议大家购买纸质版经典的 Java 技术图书,反复学习。
5.2.5 GitHub
GitHub 也可堪称是百宝箱,大家可以通过它来搜索想学技术的源码和相关示例代码。
大家可以在 Java 的 topic栏目 了解 stars 最多的,最近更新的,最佳的 Java项目等。
5.2.6 搜狗微信搜索
遇到新概念新技术,百度的博文质量可能参差不齐,可以使用搜狗微信搜索,文章质量非常高

5.2.7 stackoverflow
平时遇到代码问题,可以去stackoverflow.com搜索,很多问题搜索引擎可能很难搜索出答案,比如Arrays#sort问题,插入排序对归并排序优化问题,在baidu中搜不到答案,在stackoverflow上就有很多优秀的回答。

另外可以查看一些高赞问题和答案,比如搜索
[java] score:100
查找点赞数超过100的java问题,这些回答会对自己的编程能力会有很大提升。
6.总结
本文重点介绍了 Java 学习和工作中常用的软件、插件、网站等。熟练地使用这些工具,将有助于提高我的开发效率和编程体验。
肯定还有很多好用的插件和软件,由于篇幅有限就不在这里一一介绍,欢迎大家留言分享。