![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
文章平均质量分 66
秦岭熊猫
喜欢运动,喜欢结交朋友,希望可以结识更多的志同道合的朋友一起学习成长。欢迎留言交流。联系邮箱:liinux@qq.com
展开
-
使用内存文件映射MappedByteBuffer读超大文件可能会遇到的问题
使用内存文件映射MappedByteBuffer读超大文件可能会遇到的问题这种方式存在一个致命问题就是依然没法读取超大文件(大于 Integer.MAX_VALUE),因为 FileChannel 的 map 方法中 size 参数会有大小限制,源码中发现该参数值大于Integer.MAX_VALUE 时会直接抛出IllegalArgumentException("Size exceeds Integer.MAX_VALUE") 异常,所以对于特别大的文件其依然不适合。本质上是由于 java.nio..原创 2021-04-27 23:38:45 · 1729 阅读 · 0 评论 -
Java8+函数式开发库Vavr使用入门
Java 8+ 函数式库Vavr功能简介1 概述Vavr 是Java 8+中一个函数式库,提供了一些不可变数据类型及函数式控制结构。1.1 Maven 依赖添加依赖,可以到maven仓库中查看最新版本。<dependency> <groupId>io.vavr</groupId> <artifactId>vavr</artifactId> <version>0.10.3</versio原创 2021-04-17 16:34:10 · 727 阅读 · 0 评论 -
短文本相似度比较:simHash简介以及java实现
SimHash 简介以及 java 实现传统的 hash 算法只负责将原始内容尽量均匀随机地映射为一个签名值,原理上相当于伪随机数产生算法。产生的两个签名,如果相等,说明原始内容在一定概 率 下是相等的;如果不相等,除了说明原始内容不相等外,不再提供任何信息,因为即使原始内容只相差一个字节,所产生的签名也很可能差别极大。从这个意义 上来 说,要设计一个 hash 算法,对相似的内容产生的签名也相近,是更为艰难的任务,因为它的签名值除了提供原始内容是否相等的信息外,还能额外提供不相等的 原始内容的差异程度原创 2021-04-12 23:15:21 · 1035 阅读 · 0 评论 -
Java中Map按照键或者值排序以及TreeMap按照值排序的方法
import java.util.ArrayList;import java.util.Collections;import java.util.Comparator;import java.util.HashMap;import java.util.LinkedHashMap;import java.util.List;import java.util.Map;import java.util.Map.Entry;import java.util.TreeMap;import ...原创 2021-04-12 22:29:29 · 735 阅读 · 0 评论 -
Maven打包SpringBoot项目时分离依赖JAR,配置文件时POM文件的参考配置
背景需求:springboot项目开发完毕后,构建成jar包可直接运行(nohup java -jar xxx.jar &),无需再部署至tomcat,使用起来很方便。 但是实际在公司应用中需要做打包配置,把项目依赖的配置和第三方jar抽取出来,做成如下所示的结构;目的在于:1)实际生产环境的配置和本地配置肯定有区别。这样在实际上线时只需要单独修改配置文件重启即可;2)如果某个依赖jar有修改,则只需要替换依赖的jar并重启即可,不需要重新全部再次打包上传服务器;3)在传统j原创 2021-04-11 14:18:43 · 800 阅读 · 1 评论 -
如何保证API接口数据安全?
前言前后端分离的开发方式,我们以接口为标准来进行推动,定义好接口,各自开发自己的功能,最后进行联调整合。无论是开发原生的APP还是webapp还是PC端的软件,只要是前后端分离的模式,就避免不了调用后端提供的接口来进行业务交互。网页或者app,只要抓下包就可以清楚的知道这个请求获取到的数据,这样的接口对爬虫工程师来说是一种福音,要抓你的数据简直轻而易举。数据的安全性非常重要,特别是用户相关的信息,稍有不慎就会被不法分子盗用,所以我们对这块要非常重视,容不得马虎。如何保证API调用时数据的安全原创 2021-01-31 21:03:47 · 2163 阅读 · 0 评论 -
JDK8下载 (jdk-8u271-windows-x64和jdk-8u271-linux-x64.tar)
jdk-8u271-windows-x64 和 jdk-8u271-linux-x64.tar 国内下载地址:链接:https://pan.baidu.com/s/1UAxEWfbJbL-sAN2s-nwD4A 提取码:1234原地址:https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html下载需要注册,在此放一份备份下。JDK各版本维护时间表:jdk8--十大新特性一...原创 2021-01-17 23:19:33 · 6146 阅读 · 0 评论 -
Java中操作SFTP服务器上的文件下载上传
依赖用的是jsch官网是http://www.jcraft.com/jsch/import com.jcraft.jsch.*;import java.io.File;import java.util.Vector;/** * Created by tomoya at 2019-08-14 */public class SFTPUtil { private static ChannelSftp channel; private static Session sessio...原创 2021-01-10 21:05:46 · 272 阅读 · 1 评论 -
Java使用apache commons连接ftp修改ftp文件名失败原因
今天被ftp上中文名修改坑了好久项目用的是 apache commons 里的 FtpClient 实现的对ftp文件的上传下载操作,今天增加了业务要修改ftp上的文件名,然后就一直的报错,问题是它修改名字的方法只返回一个boolean,没有异常,这就很蛋疼了,找了好久才发现是中文的名字的原因改名直接上代码package net.codejava.ftp;import java.io.IOException;import org.apache.commons.net.ftp.F.原创 2021-01-10 21:04:32 · 276 阅读 · 0 评论 -
基于WebSocket实现的前端实时声音告警提醒功能
原理介绍:项目需求 Web端播放实时音频流,折腾了两天后问题得以解决。记录下开发调试过程,方便后来者。首次想到是利用Audio标签,Audio标签可以直接播放MP3格式,服务端将实时音频流编码成WAV格式通过Http方式传给Web端即可。采用Audio Web API方式播放实时流会出现卡顿现象,以上方法一次性解码的数据可以连续播放,每次解码后要重新创建BufferSource,显而易见这种播放模式播放实时流效率很低,查阅了Audio Web API 文档 播放网络流似乎要利用,基于AudioWorkl原创 2020-12-30 13:46:12 · 2638 阅读 · 0 评论 -
Kafka 可视化工具kafkatool简单使用入门
使用Kafka的小伙伴,有没有为无法直观地查看 Kafka 的 Topic 里的内容而发过愁呢?下面推荐给大家一款带有可视化页面的Kafka工具:Kafka Tool(目前最新版本是2.0.4)Kafka Tool 工具下载下载地址http://www.kafkatool.com/download.html下载界面不同版本的Kafka对应不同版本的工具,个人使用的是0.11,所以下载的是最新的2.0.7版本如果是Windows,直接点击exe文件,一键安装即可。...原创 2020-08-08 20:30:28 · 1649 阅读 · 0 评论 -
Spring Boot + Spring-Kafka 异步配置
近日我们项目组采用 Kafka来做系统日志统一管理,但是天降横祸的让 Kafka集群(3台服务器)都挂了,堪比中大奖的节奏,随之而来的是使用 Kafka发送消息日志的服务全部卡死,经过排查发现居然是 Kafka当机导致了调用 Kafka发送日志服务一直处于阻塞状态。最后我们在检查代码的时候发现,如果无法连接 Kafka服务,则会出现一分钟的阻塞。以上问题有两种解决方案:一、开启异步模式 ( @EnableAsync )@EnableAsync@Configurationpublic...原创 2020-08-02 11:43:12 · 890 阅读 · 2 评论 -
CentOS7安装FTP服务器及默认21端口修改
本文章向大家介绍CentOS7安装及配置vsftpd (FTP服务器FTP账号创建以及权限设置),主要包括CentOS7安装及配置vsftpd (FTP服务器FTP账号创建以及权限设置)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。1,安装vsftpd的yum -y install vsftpd2、设置开机启动systemctl enable vsftpd3、启动ftp服务 systemctl start vsftpd.servi原创 2020-07-26 14:44:28 · 5303 阅读 · 0 评论 -
Antlr4简易快速入门
1. 简介Antlr (ANother Tool for Language Recognition) 是一个强大的跨语言语法解析器,可以用来读取、处理、执行或翻译结构化文本或二进制文件。它被广泛用来构建语言,工具和框架。Antlr可以从语法上来生成一个可以构建和遍历解析树的解析器。2. 谁在使用Hive Spark Oracle Presto Elasticsearch3. 常见的语法分析器Antlr Javacc SqlParser (位于Alibaba的Druid库中)其原创 2020-07-26 11:20:22 · 1218 阅读 · 0 评论 -
Pulsar较Kafka的优势
前言对于开发云原生分布式应用程序的开发人员来说,他们应该把更多的精力放在应用程序和微服务上,而不是把时间浪费在处理复杂的消息基础设施上,他们需要一些解决方案帮助他们管理好这些基础设施。构建消息基础设施的第一步是选择合适的消息中间件技术。在这方面有很多选择,从各种开源框架(如 RabbitMQ、ActiveMQ、NATS)到一些商用产品(如 IBM MQ 或者 RedHat AMQ)。当然,除了这些之外,我们还有 Kafka。不过,我们最后并没有选择 Kafka,而是选择了 Pulsar。为什原创 2020-07-14 00:27:53 · 606 阅读 · 0 评论 -
分布式架构之缓存系统
一个大型稳健成熟的分布式系统的背后,往往会设计众多的支撑组件,将这些支撑系统成为分布式系统的基础设施。进行系统架构设计所依赖的基础设施,还包括分布式协作及配置管理组件、分布式缓存组件、持久化存储组件、分布式消息系统、搜索引擎、以及CDN系统、负载均衡系统、运维自动化系统等,还有实时计算系统、离线计算系统、分布式文件系统、日志收集系统、监控系统、数据仓库等。此处主要讲讲缓存系统组件。缓存组件层缓存系统带来的好处:加速读写。缓存通常是全内存的,比如Redis、Memcache。对内存的直接读写会比传原创 2020-07-14 00:26:30 · 347 阅读 · 0 评论 -
MapReduce计算模型(二)
MapReduce到底解决什么问题?MapReduce准确的说,它不是一个产品,而是一种解决问题的思路,能够用分治策略来解决问题。例如:网页抓取、日志处理、索引倒排、查询请求汇总等等问题。通过分治法,将一个大规模的问题,分解成多个小规模的问题(分),多个小规模问题解决,再统筹小问题的解(合),就能够解决大规模的问题。最早在单机的体系下计算,当输入数据量巨大的时候,处理很慢。如何能够在短时间内完成处理,很容易想到的思路是,将这些计算分布在成百上千的主机上,但此时,会遇到各种复杂的问题,例如:并发计算、数据原创 2020-07-14 00:25:43 · 203 阅读 · 0 评论 -
MapReduce框架Hadoop应用(一)
Google对其的定义:MapReduce是一种变成模型,用于大规模数据集(以T为级别的数据)的并行运算。用户定义一个map函数来处理一批Key-Value对以生成另一批中间的Key-Value对,再定义一个reduce函数将所有这些中间的有相同Key的value合并起来。“Map”(映射)和“Reduce”(简化)的概念和它们的主要思想都是从函数式编程语言借用而来的,还有从矢量编程语言借来的特性。在实现过程中,需指定一个map函数,用来把一组键值对映射成一组新的键值对,再指定并发的reduce函数,用来保原创 2020-07-14 00:24:50 · 208 阅读 · 0 评论 -
关于Pulsar与Kafka的对比
Pulsar和Kafka比较文章中,我将引导您完成我认为重要的几个领域,并且对于人们选择强大,高可用性,高性能的流式消息传递平台至关重要。消息传递模型(Messaging model)是用户在选择流式消息传递系统时应首先考虑的事情。消息传递模型应涵盖以下3个方面:Message consumption(消息消费):如何发送和消费消息 Message Acknowledgement(消息确认):如何确认消息 Message Retention(消息保留):消息要保留多久、出发消息删除的原因以及删除方式原创 2020-07-14 00:21:02 · 2119 阅读 · 0 评论 -
局域网Maven Java包批量上传的方法
局域网批量上传maven仓库所有jar包1.先将本地~/.m2/repository仓库打一个完整的zip压缩包2.上传到linux目录,如:/opt3.解压repository.zip4.进入repository目录5.创建touch 1-LocalJarsBatchImportTool.sh脚本,写入以下内容;#!/bin/bash# copy and run this script to the root of the repository directory contai原创 2020-07-13 23:44:50 · 560 阅读 · 0 评论 -
Java计划任务:ScheduledThreadPoolExecutor
自JDK 1.5 开始,JDK提供了ScheduledThreadPoolExecutor类用于计划任务(又称定时任务),这个类有两个用途:在给定的延迟之后运行任务 周期性重复执行任务在这之前,是使用Timer类来完成定时任务的,但是Timer有缺陷:Timer是单线程模式; 如果在执行任务期间某个TimerTask耗时较久,那么就会影响其它任务的调度; Timer的任务调度是基于绝对时间的,对系统时间敏感; Timer不会捕获执行TimerTask时所抛出的异常,由于Timer是单线程,原创 2020-07-11 11:52:44 · 439 阅读 · 0 评论 -
Java中几种高性能的队列
一、阻塞队列由于阻塞队列(BlockingQueue)是加了锁的,所以在阻塞队列是一个性能瓶颈,影响中间件传输数据速度。二、disruptorDisruptor是一个无锁高性能安全的队列三、JCTools最后采用了一种github上实现的无锁、线程安全的队列(类似于阻塞队列,用atomicLong实现以至于无锁,同时解决了伪共享问题)https://github.com/JCTools/JCToolshttps://github.com/JCTools/J...原创 2020-06-14 23:45:56 · 2205 阅读 · 0 评论 -
正则表达式及常用大全
正则表达式是记录文本规则的代码,常用于文本匹配、文本替换及输入验证。正则表达式由两种基本字符类型组成:原义(正常)文本字符和元字符,然而,元字符是针对单个字符匹配的,要想要同时匹配多个字符的话,还需要借助限定符;下面介绍一些常见的元字符、限定符以及相关概念。基本概念1、常见元字符及限定符元字符 说明 . 匹配除 \n 以外的任何字符(注意元字符是小数点) [abcde] 匹配 abcde 之中的任意一个字符 [a-h] 匹配 a 到 h 之间的任意一个字符.原创 2020-06-14 23:40:41 · 590 阅读 · 0 评论 -
MpscGrowableArrayQueue分析
概要MpscGrowableArrayQueue是JCTools里的一个工具,是对于特定场景化的定制,即MPSC(Multi-Producer & Single-Consumer),在这种场景下,相对于BlockingQueue,能够满足高性能的需要。背景JCTools是一款对jdk并发数据结构进行增强的并发工具,主要提供了map以及queue的增强数据结构。Mpsc**ArrayQueue是由JCTools提供的一个多生产者单个消费者的数组队列。多个生产者同时并发的访问队列是线程安原创 2020-06-14 22:55:05 · 813 阅读 · 0 评论 -
JCTools简介-增强的并发工具
JCTools早在96年就有论文提出了无锁队列的概念,再到后来 Disruptor,高性能已得到生产的验证。此处介绍的 Jctools 中的高性能队列,其性能丝毫不输于 Disruptor。JCTools (Java Concurrency Tools) 提供了一系列非阻塞并发数据结构(标准 Java 中缺失的),当存在线程争抢的时候,非阻塞并发数据结构比阻塞并发数据结构能提供更好的性能。JCTools 是一个开源工具包,在 Apache License 2.0 下发布,并在 Netty、Rxj原创 2020-06-14 18:53:56 · 7658 阅读 · 0 评论 -
HashedWheelTimer时间轮原理分析
概要时间轮是一种非常惊艳的数据结构。其在Linux内核中使用广泛,是Linux内核定时器的实现方法和基础之一。Netty内部基于时间轮实现了一个HashedWheelTimer来优化I/O超时的检测,本文将详细分析HashedWheelTimer的使用及原理。背景由于Netty动辄管理100w+的连接,每一个连接都会有很多超时任务。比如发送超时、心跳检测间隔等,如果每一个定时任务都启动一个Timer,不仅低效,而且会消耗大量的资源。在Netty中的一个典型应用场景是判断某个连接是否idle,如原创 2020-06-14 18:48:32 · 4231 阅读 · 2 评论 -
Echarts 折线图最后一个点发光闪烁效果
效果如下:实现方式:var myChart = echarts.init(document.getElementById('main'));//数据加载完之前先显示一段简单的loading动画//myChart.showLoading();var names = []; //横坐标数组(实际用来盛放X轴坐标值)var values = []; //纵坐标数组(实际用来盛放Y坐标值)var effectValues = []; //闪烁效果$.ajax({ type : "post原创 2020-06-12 23:30:41 · 6179 阅读 · 1 评论 -
HttpClient、HttpURLConnection、OKHttp和Volley
今天突然想起有必要总结一下市面上通用的一些网络请求方式,主要通过分析其优缺点和性能,为以后选择网络请求连接方式提供支持。现在常用的网络请求方式主要有:HttpClient、HttpURLConnection、OKHttp和Volley。一、HttpClient:HttpClient是Apache的一个三方网络框架,网络请求做了完善的封装,api众多,用起来比较方便,开发快。实现比较稳定,bug比较少,但是正式由于其api众多,是我们很难再不破坏兼容性的情况下对其进行扩展。所以,Android团队对.原创 2020-05-28 00:01:02 · 602 阅读 · 0 评论 -
理解WebSocket心跳及重连机制以及加强版的reconnectingwebsocket.js实现
理解WebSocket心跳及重连机制 在使用websocket的过程中,有时候会遇到网络断开的情况,但是在网络断开的时候服务器端并没有触发onclose的事件。这样会有:服务器会继续向客户端发送多余的链接,并且这些数据还会丢失。所以就需要一种机制来检测客户端和服务端是否处于正常的链接状态。因此就有了websocket的心跳了。还有心跳,说明还活着,没有心跳说明已经挂掉了。1. 为什么叫心跳包呢?它就像心跳一样每隔固定的时间发一次,来告诉服务器,我还活着。2. 心跳机制是?心跳机制是每隔..原创 2020-05-24 14:31:07 · 5727 阅读 · 0 评论 -
Java中常见定时任务的实现方式
定时任务实现的几种方式:Timer:这是java自带的java.util.Timer类,这个类允许你调度一个java.util.TimerTask任务。使用这种方式可以让你的程序按照某一个频度执行,但不能在指定时间运行。一般用的较少。 ScheduledExecutorService:也jdk自带的一个类;是基于线程池设计的定时任务类,每个调度任务都会分配到线程池中的一个线程去执行,也就是说,任务是并发执行,互不影响。 Spring Task:Spring3.0以后自带的task,可以将它看成一个轻原创 2020-05-24 11:16:33 · 196 阅读 · 0 评论 -
SpringBoot两种定时任务(Spring Schedule 与 Quartz 整合 )实现
前言最近在项目中使用到定时任务,之前一直都是使用Quartz 来实现,最近看Spring 基础发现其实Spring 提供 Spring Schedule 可以帮助我们实现简单的定时任务功能。下面说一下两种方式在Spring Boot 项目中的使用。Spring Schedule 实现定时任务Spring Schedule 实现定时任务有两种方式 1. 使用XML配置定时任务, 2. 使用 @Scheduled 注解。 因为是Spring Boot 项目 可能尽量避免使用XML配置的形式,主要说原创 2020-05-24 11:10:26 · 407 阅读 · 0 评论 -
Spring Batch开发简单入门实践
什么是 Spring BatchSpring Batch 作为 Spring 的子项目,是一款基于 Spring 的企业批处理框架。通过它可以构建出健壮的企业批处理应用。Spring Batch 不仅提供了统一的读写接口、丰富的任务处理方式、灵活的事务管理及并发处理,同时还支持日志、监控、任务重启与跳过等特性,大大简化了批处理应用开发,将开发人员从复杂的任务配置管理过程中解放出来,使他们可以更多地去关注核心的业务处理过程。更多的介绍可以参考官网:https://spring.io/projects/原创 2020-05-24 11:07:35 · 881 阅读 · 0 评论 -
高效的CSV文本处理利器——univocity-parsers
univocity-parsers简介工作中经常会遇到需要导出或者解析csv的需求,Java中处理csv的开源库也有很多,本文主要介绍通过univocity-parsers来解析和生成csv,univocity-parsers的github地址见此,在写这篇文章的时候univocity-parsers 最新版为2.6.3注: 本文所有例子源码在都在github上。使用详解在详解介绍之前,我们先通过一个简单的例子来看看如何使用univocity-parsers@Slf4jpubl.原创 2020-05-24 10:23:53 · 2453 阅读 · 0 评论 -
基于guava的重试组件Guava-Retryer
一、使用场景在日常开发中,我们经常会遇到需要调用外部服务和接口的场景。外部服务对于调用者来说一般都是不可靠的,尤其是在网络环境比较差的情况下,网络抖动很容易导致请求超时等异常情况,这时候就需要使用失败重试策略重新调用 API 接口来获取。重试策略在服务治理方面也有很广泛的使用,通过定时检测,来查看服务是否存活(Active)。Guava Retrying 是一个灵活方便的重试组件,包含了多种的重试策略,而且扩展起来非常容易。用作者的话来说:This is a small extensio原创 2020-05-19 00:14:17 · 341 阅读 · 0 评论 -
JAVA中加密算法的简单使用入门
在开发应用过程中,客户端与服务端经常需要进行数据传输,涉及到重要隐私安全信息时,开发者自然会想到对其进行加密,即使传输过程中被“有心人”截取,也不会将信息泄露。对于加密算法,相信很多开发者都有了解,比如 MD5加密,Base64加密,SHA-1加密,DES加密,AES加密,RSA加密等等。在这里我主要总结一下常用的加密算法,后续还会不断更新,如果总结的不好,敬请原谅,有错误的地方欢迎大家指出。一、MD5加密1、 概述Message Digest Algorithm MD5(中文名为消息摘要算法第原创 2020-05-17 10:27:49 · 486 阅读 · 0 评论 -
用 RSocket 解决响应式服务之间的通讯
分布式系统中的通讯问题确实,微服务无处不在。从部署和维护非常麻烦的单体应用程序到完全分布式、微型、可扩展的微服务,我们经历了漫长的过程。微服务架构设计有很多好处。但是,它也有缺点。首先,为了向客户交付最终产品,服务之间必须交换大量数据。在单体应用程序中这不是问题,因为它整个通信都在单个 JVM 进程中进行。而在“微服务架构”中,部署在单独的容器中服务需要通过内部或外部网络进行通信。此时,“网络”是一等公民。如果在云上运行应用程序,事情将变得更加复杂。在这种情况下,网络问题和延迟增加将是不可避免的事情。与原创 2020-05-15 22:42:41 · 627 阅读 · 0 评论 -
Springboot2.2.6中的RSocket使用, RSocket 进行反应式数据传输
在微服务架构中,不同服务之间通过应用协议进行数据传输。典型的传输方式包括基于 HTTP 协议的 REST 或 SOAP API 和基于 TCP 字节流的 gRPC 等。HTTP 协议的优势在于其广泛的适用性,有非常多的服务器和客户端实现的支持,但 HTTP 协议本身比较简单,只支持请求-响应模式。gRPC 等基于 TCP 的协议使用二进制字节流传输,保证了传输的效率。不过 gRPC 基于 HTTP/2,不支持其他传输层实现。HTTP/2 协议使用了二进制字节流,但是并没有改变 HTTP/1 协议已有的语义,原创 2020-05-15 22:29:32 · 3594 阅读 · 0 评论 -
neo4j入门(一)概述
neo4j入门创建一个节点CREATE (ee:Person { name: "Emil", from: "Sweden", klout: 99 })寻找节点MATCH (ee:Person) WHERE ee.name = "Emil" RETURN ee;模式匹配MATCH (ee:Person)-[:KNOWS]-(friends)WHERE ee.name = "Emil" RETURN ee, friendsMATCH (js:Person)-[:KNO原创 2020-05-15 13:33:28 · 161 阅读 · 0 评论 -
外排序 External sorting
外排序(External sorting)是指能够处理极大量数据的排序算法。通常来说,外排序处理的数据不能一次装入内存,只能放在读写较慢的外存储器(通常是硬盘)上。外排序通常采用的是一种“排序-归并”的策略。在排序阶段先读入能放在内存中的数据量,将其排序输出到一个临时文件,依此进行,将待排序数据组织为多个有序的临时文件。尔后在归并阶段将这些临时文件组合为一个大的有序文件,也即排序结果。外排序的一个例子是外归并排序(External merge sort),它读入一些能放在内存内的数据量,在内存中排序后输原创 2020-05-15 12:52:31 · 410 阅读 · 0 评论 -
Google的Guava开发库快速快速入门
Guava工程包含了若干被Google的 Java项目广泛依赖 的核心库,例如:集合 [collections] 、缓存 [caching] 、原生类型支持 [primitives support] 、并发库 [concurrency libraries] 、通用注解 [common annotations] 、字符串处理 [string processing] 、I/O 等等。guava类似Apache Commons工具集基本工具包BaseOptionalguava的Optional类似原创 2020-05-15 00:19:55 · 199 阅读 · 0 评论