一、创作由来 Hello 大家好,我是l拉不拉米,今天给大家分享10个阿里巴巴开源的顶级项目,都是Java开发必备利器。 这10个项目均来自Github上阿里巴巴公开的开源项目。 都是java3c在工作中用过或者之前学习过的项目,也有写过个别项目的文章,但是从没有整理到一起过。周末花了大概半天的时间,一一整理出来,方便大家阅读学习。 阿里巴巴的github地址 二、项目介绍 1、arthas 截至目前,github上有27.4k个星和6k的fork,是阿里巴巴最受欢迎的开源项目。 Arthas 是Alibaba开源的Java诊断工具,深受开发者喜爱。 当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决: 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception? 我改的代码为什么没有执行到?难道是我没 commit?分支搞错了? 遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗? 线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现! 是否有一个全局视角来查看系统的运行状况? 有什么办法可以监控到JVM的实时运行状态? 怎么快速定位应用的热点,生成火焰图? 怎样直接从JVM内查找某个类的实例? Arthas 提供管理界面在线排查问题,无需重启;动态跟踪Java代码;实时监控JVM状态。 Arthas 支持JDK 6+,支持Linux/Mac/Windows,采用命令行交互模式,同时提供丰富的 Tab 自动补全功能,进一步方便进行问题的定位和诊断。 Github: github.com/alibaba/art… 文档: arthas.aliyun.com/doc/ 超过120家公司登记了使用: 2、p3c p3c是阿里巴巴开发的Java规约检查插件,可以继承到idea和eclipse中。 相信不少搞Java开发的同学都了解过阿里巴巴出品《Java开发手册》,主要整理了阿里内部使用的Java开发的规范。 p3c插件实现了开发手册中的的53条规则,大部分基于PMD实现,其中有4条规则基于IDEA实现,并且基于IDEA Inspection实现了实时检测功能。部分规则实现了Quick Fix功能(快速修复)。 目前插件检测有两种模式:实时检测、手动触发。 主要功能一览: 3、druid Druid 是一个 JDBC 组件库,与c3p0、dbcp齐名,包含数据库连接池、SQL Parser 等组件,被大量业务和技术产品使用或集成,经历过最严苛线上业务场景考验。 Druid连接池 Druid连接池是阿里巴巴开源的数据库连接池项目。Druid连接池为监控而生,内置强大的监控功能,监控特性不影响性能。功能强大,能防SQL注入,内置Loging能诊断Hack应用行为。 Github项目地址 github.com/alibaba/dru… 文档 github.com/alibaba/dru… 下载 repo1.maven.org/maven2/com/… 监控DEMO http://120.26.192.168/druid/index.html 竞品对比 4、fastjson fastjson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。 fastjson的优点 1、速度快 fastjson相对其他JSON库的特点是快,从2011年fastjson发布1.1.x版本之后,其性能从未被其他Java实现的JSON库超越。 2、使用广泛 fastjson在阿里巴巴大规模使用,在数万台服务器上部署,fastjson在业界被广泛接受。在2012年被开源中国评选为最受欢迎的国产开源软件之一。 3、测试完备 fastjson有非常多的testcase,在1.2.11版本中,testcase超过3321个。每次发布都会进行回归测试,保证质量稳定。 4、使用简单 fastjson的API十分简洁。
1 2 3 |
String text = JSON.toJSONString(obj); <span class="hljs-comment">//序列化</span> VO vo = JSON.parseObject(<span class="hljs-string">"{...}"</span>, VO.class); <span class="hljs-comment">//反序列化</span> <span class="copy-code-btn">复制代码</span> |
5、easyexcel EasyExcel是一个基于Java的简单、省内存的读写Excel的开源项目。在尽可能节约内存的情况下支持读写百万行级别的Excel。 Java解析、生成Excel比较有名的框架有Apache poi、jxl。但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问题,但POI还是有一些缺陷,比如07版Excel解压缩以及解压后存储都是在内存中完成的,内存消耗依然很大。easyexcel重写了poi对07版Excel的解析,一个3M的excel用POI sax解析依然需要100M左右内存,改用easyexcel可以降低到几M,并且再大的excel也不会出现内存溢出;03版依赖POI的sax模式,在上层做了模型转换的封装,让使用者更加简单方便。 举个例子:64M内存1分钟内读取75M(46W行25列)的Excel 还有极速模式能更快,但是内存占用会在100M多一点。 6、canal 阿里巴巴 MySQL binlog […]
View Details1、复制到剪贴板 使用 navigator.clipboard.writeText 轻松将任何文本复制到剪贴板。
1 2 |
const copyToClipboard = (text) => navigator.clipboard.writeText(text); copyToClipboard("Hello World"); |
2、检查日期是否有效 使用以下代码段检查给定日期是否有效。
1 2 3 |
const isDateValid = (...val) => !Number.isNaN(new Date(...val).valueOf()); isDateValid("December 17, 1995 03:24:00"); // Result: true |
3、找出一年中的哪一天 查找给定日期的哪一天。
1 2 3 |
const dayOfYear = (date) => Math.floor((date - new Date(date.getFullYear(), 0, 0)) / 1000 / 60 / 60 / 24); dayOfYear(new Date()); // Result: 272 |
4、将首字符串大写 Javascript 没有内置的大写函数,因此我们可以使用以下代码。
1 |
const capitalize = str => str.charAt(0).toUpperCase() + str.slice(1)capitalize("follow for more")// Result: Follow for more |
5、找出两日期之间的天数 使用以下代码段查找给定 2 个日期之间的天数。
1 |
const dayDif = (date1, date2) => Math.ceil(Math.abs(date1.getTime() - date2.getTime()) / 86400000)dayDif(new Date("2020-10-21"), new Date("2021-10-22"))// Result: 366 |
6、清除所有 Cookie 你可以通过使用 document.cookie 访问 cookie 并清除它来轻松清除存储在网页中的所有 cookie。
1 2 3 |
const clearCookies = document.cookie.split(';').forEach(cookie => document.cookie = cookie.replace(/^ +/, '') .replace(/=.*/, `=;expires=${new Date(0).toUTCString()}; path=/`)); |
7、生成随机十六进制 你可以使用 Math.random 和 padEnd 属性生成随机十六进制颜色。
1 2 3 |
const randomHex = () => `#${Math.floor(Math.random() * 0xffffff).toString(16).padEnd(6, "0")}` console.log(randomHex()); //Result: #92b008 |
8、从数组中删除重复项 你可以使用 JavaScript 中的 Set 轻松删除重复项。
1 2 3 |
const removeDuplicates = (arr) => [...new Set(arr)]; console.log(removeDuplicates([1, 2, 3, 3, 4, 4, 5, 5, 6])); // Result: [ 1, 2, 3, 4, 5, 6 ] |
9、从 URL 获取查询参数 你可以通过传递 window.location 或原始 URL goole.com?search=easy&page=3 从 url 轻松检索查询参数
1 2 3 4 5 6 |
const getParameters = (URL) => { URL = JSON.parse('{"' + decodeURI(URL.split("?")[1]).replace(/"/g, '\"').replace(/&/g, '","').replace( /=/g, '":"') + '"}'); return JSON.stringify(URL); }; getParameters(window.location) // Result: { search : "easy", page : 3 } |
10、从日期记录时间 我们可以从给定日期以小时::分钟::秒的格式记录时间。
1 2 3 |
const timeFromDate = date => date.toTimeString().slice(0, 8); console.log(timeFromDate(new Date(2021, 0, 10, 17, 30, 0))); // Result: "17:30:00" |
11、检查数字是偶数还是奇数
1 2 |
const isEven = num => num % 2 === 0;console.log(isEven(2)); // Result: True |
12、求数字的平均值 使用 reduce 方法找到多个数字之间的平均值。
1 2 3 |
const average = (...args) => args.reduce((a, b) => a + b) / args.length; average(1, 2, 3, 4); // Result: 2.5 |
13、反转字符串 你可以使用 split、reverse 和 join 方法轻松反转字符串。
1 2 |
const reverse = str => str.split('').reverse().join('');reverse('hello world'); // Result: 'dlrow olleh' |
14、检查数组是否为空 检查数组是否为空的简单单行程序将返回 true […]
View Details