目录

工欲善其事

实践出真知

活跃标签: linux java mysql 待分类 js springboot win10 电路 vue macOS nginx esp32 git docker windows idea maven esp8266 python Arduino

存档:

标签: java (35)

Java compareTo返回值为-1 、 1 、 0代表的意义总结

Comparable接口和Compatator接口都可以实现排序,那就是: 重写 compareTo(Object obj) 方法的规则(两个对象通过该方法的返回值来比较大小): 如果当前对象this大于形参对象obj,则返回正整数; 如果当前对象this小于形参对象obj,则返回负整数; 如果当前对象this等于参数对象obj,则返回零。 int compareTo(T o) 比较此对象与指定对象的顺序。如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数。 升序(默认,即官方定义,毕竟代码实现就是基于这个写的): < -1 = 0 //或者 1效果是一样的;-1相同元素会发生位置调整 1 降序: < 1 = 0 //或者 1效果是一样的;-1相同元素会发生顺序调整 -1 倒序: //直接 return -1; 不改变顺序: //直接 return 0或者1; 很多人总结了权重的问题: 1是前者权重大,-1是后者。JAVA则按照权重由小到大排序。 这样说法也好理解: 如果当前值<传递过来的值,返回-1,则后者权重大,升序排列 如果想要降序,则需要....

Java启动参数详解

Java启动参数的内容是JVM调优的必备知识,也是学习JVM的必经之路,这篇文章就用于记录相关知识。 java启动参数分类: 标准参数(-),所有的JVM实现都必须实现这些参数的功能,而且向后兼容; 非标准参数(-X),默认JVM实现这些参数的功能,但是并不保证所有JVM实现都满足,且不保证向后兼容; 非Stable参数(-XX),此类参数各个JVM实现会有所不同,将来可能会随时取消,需要慎重使用; 本文基于JDK8获取的参数,仅供参考。 一、标准参数(-) 获取:java -help PS C:\Users\Administrator> java -help 用法: java [-options] class [args...] (执行类) 或 java [-options] -jar jarfile [args...] (执行 jar 文件) 其中选项包括: -d32 使用 32 位数据模型 (如果可用) -d64 使用 64 位数据模型 (如果可用) -client 选择 "client" VM -server 选择 "server" VM 默认 VM 是 client. ....

Spring Boot注解@Cacheable与Redis缓存关于LocalDateTime(反)序列化问题

由于项目中使用Spring Boot 2.0,以及需要将包含LocalDateTime的对象通过注解@Cacheable存入缓存。若不做配置,存入缓存会成功(redis数据类型为HEX,不便阅读),取出对象时则会报错反序列化失败。下面是具体解决办法: 需要增加一个修改RedisCacheManager序列化格式的RedisConfig类,包含LocalDateTime类型属性不需要添加任何注解。 import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; import java.time.format.DateTimeFormatter; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configur....

配置Java环境变量

setx /M JAVA_HOME "C:\Program Files (x86)\Java\jdk1.8.0_144" setx /M CLASSPATH ".;%%JAVA_HOME%%\lib\dt.jar;%%JAVA_HOME%%\lib\tools.jar" setx /M PATH "%PATH%;%%JAVA_HOME%%\bin"

Java 文件操作 有更新!

字节数组转文件 OutputStream out = new FileOutputStream("/Users/liguanglei/tmp/" + UUID.randomUUID().toString() + ".jpg"); out.write(bytes, 0, bytes.length); out.flush(); out.close();

Java 中文字符转码

只要有跨应用数据交换的地方,都可能产生编码和解码。 出现乱码问题唯一的原因都是在 char 到 byte 或 byte 到 char 转换中编码和解码的字符集不一致导致的。 几个常用的类: String name = "I am 君山"; byte[] utf8 = name.getBytes("UTF-8"); String n = new String(utf8, "UTF-8"); Charset charset = Charset.forName("UTF-8"); ByteBuffer byteBuffer = charset.encode(string); CharBuffer charBuffer = charset.decode(byteBuffer); 几种常见的编码格式 为什么要编码 不知道大家有没有想过一个问题,那就是为什么要编码?我们能不能不编码?要回答这个问题必须要回到计算机是如何表示我们人类能够理解的符号的,这些符号也就是我们人类使用的语言。由于人类的语言有太多,因而表示这些语言的符号太多,无法用计算机中一个基本的存储单元—— byte 来表示,因而必须要.....

Java开启代理

String proxyHost = "127.0.0.1"; String proxyPort = "19180"; System.setProperty("http.proxySet", "true"); // 对http开启代理 System.setProperty("http.proxyHost", proxyHost); System.setProperty("http.proxyPort", proxyPort); // 对https也开启代理 System.setProperty("https.proxyHost", proxyHost); System.setProperty("https.proxyPort", proxyPort);

private修饰的方法可以通过反射访问,那么private的意义是什么?

在一个类中,为了不让外界访问到某些属性和方法,通常将其设置为private,用正常的方式(对象名.属性名,对象名.方法名)将无法访问此属性与方法,但有没有其他方法可以访问呢?答案是有的,这就是java反射带来的便利。利用反射访问类的私有属性及方法如下: public class Reflect { private String name; private int age; private Reflect(int age) { this.age = age; } private void speak(String name) { System.out.println("My name is" + name); } public Reflect(String name) { this.name = name; } } 首先,我们要了解三个反射包中的类: Constructor:代表类的单个构造方法,通过Constructor我们可执行一个类的某个构造方法(有参或者无参)来创建对象时。 Method:代表类中的单个方法,可以用于执行类的某个普通方法,有参或无参,并可以接收返回值。 Fiel.....

java8 小技巧保证分组groupingBy后排序不变

问题: 遇到一个小问题,查询出来一组数据后,按照其中的属性进行groupBy 分组 ,分组后要保证顺序不变。但是实际用groupBy进行分组后,返回的数据是杂乱无章的,没有按照原来list 的顺序返回 排查 首先去api中查找解决,查看Java 的 java.util.stream 包 Collectors 类 groupingBy 方法实现,结果如下: //一个参数 public static <T, K> Collector<T, ?, Map<K, List<T>>> groupingBy(Function<? super T, ? extends K> classifier) { return groupingBy(classifier, toList()); } //两个参数 public static <T, K, A, D> Collector<T, ?, Map<K, D>> groupingBy(Function<? super T, ? extends K> ....

Java项目中 实体类(ENTITY,VO,DTO)理解

最近看开源项目偶尔看到了VO就查了一下,下面是整理网上的 一、ENTITY Entity(PO) 每个属性基本上都对应数据库表里面的某个字段。完全是一个符合Java Bean规范的纯Java对象,没有增加别的属性和方法。持久对象是由insert数据库创建,由数据库delete删除的。基本上持久对象生命周期和数据库密切相关。 二、VO 这个有两种理解,在我接触的项目中更加偏向 第二种 表现层对象(View Object) VO:值对象(Value Object),通常用于业务层之间的数据传递,和Entity一样也是仅仅包含数据而已。但应是抽象出的业务对象,可以和表对应,也可以不,这根据业务的需要。 VO:表现层对象(View Object),主要对应展示界面显示的数据对象,用一个VO对象来封装整个界面展示所需要的对象数据。 三、DTO DTO:数据传输对象(Data Transfer Object),是一种设计模式之间传输数据的软件应用系统。数据传输目标往往是数据访问对象从数据库中检索数据。数据传输对象与数据交互对象或数据访问对象之间的差异是一个以不具有任何行为除了存储和检索的数据(访问....

对Request.parameter中参数进行添加或修改 (转)

很多时候在传输数据时我们把数据加密了,每次拿到后都需要解密在创建对象这样就很麻烦,写的多了也不美观,很容易造成代码冗余。毕竟解密的步骤都是一样的不如把解密这部分提出来放在拦截器中,把解析的值放回 Parameter中就可以在 Controller直接拿到。 import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequestWrapper; import java.util.Enumeration; import java.util.HashMap; import java.util.Map; import java.util.Vector; /** * request.parameter * * @author SanLi * Created by 2689170096@qq.com/SanLi on 2018/1/28 */ public class ParameterRequestWrapper extends HttpServletRequestWrapper { p....

Java 中isAssignableFrom()方法与instanceof关键字用法

isAssignableFrom()方法与instanceof关键字的区别总结为以下两个点: isAssignableFrom()方法是从类继承的角度去判断,instanceof关键字是从实例继承的角度去判断。 isAssignableFrom()方法是判断是否为某个类的父类,instanceof关键字是判断是否某个类的子类。 使用方法: 父类.class.isAssignableFrom(子类.class) 子类实例 instanceof 父类类型 isAssignableFrom()方法的调用者和参数都是Class对象,调用者为父类,参数为本身或者其子类。 instanceof关键字两个参数,前一个为类的实例,后一个为其本身或者父类的类型。

Java Stream 流的编程思想

常用方法   流模型的操作很丰富,这里介绍一些常用的API。这些方法可以被分成两种:  延迟方法:返回值类型仍然是 Stream 接口自身类型的方法,因此支持链式调用。(除了终结方法外,其余方法均为延迟方法。) 终结方法:返回值类型不再是 Stream 接口自身类型的方法,因此不再支持类似 StringBuilder 那样的链式调用。本小节中,终结方法包括 count 和 forEach 方法。   1、逐一处理:forEach     虽然方法名字叫 forEach ,但是与for循环中的“for-each”昵称不同。 | 1 | void forEach(Consumer super T&gt; action); | | - | - |     该方法接收一个 Consumer 接口函数,会将每一个流元素交给该函数进行处理。    Consumer 接口 | 12 | java.util.function.Consumer接口是一个消费型接口。Consumer接口中包含抽象方法``void accept(T t),意为消费一个指定泛型的数据。 | | - | - |    ....

Java 反应式框架Reactor中的Mono和Flux (转载)

Java反应式框架Reactor中的Mono和Flux 1. 前言 最近写关于响应式编程的东西有点多,很多同学反映对Flux和Mono这两个Reactor中的概念有点懵逼。但是目前Java响应式编程中我们对这两个对象的接触又最多,诸如Spring WebFlux、RSocket、R2DBC。我开始也对这两个对象头疼,所以今天我们就简单来探讨一下它们。 2. 响应流的特点 要搞清楚这两个概念,必须说一下响应流规范。它是响应式编程的基石。他具有以下特点: 响应流必须是无阻塞的。 响应流必须是一个数据流。 它必须可以异步执行。 并且它也应该能够处理背压。 背压是反应流中的一个重要概念,可以理解为,生产者可以感受到消费者反馈的消费压力,并根据压力进行动态调整生产速率。形象点可以按照下面理解: 3. Publisher 由于响应流的特点,我们不能再返回一个简单的POJO对象来表示结果了。必须返回一个类似Java中的Future的概念,在有结果可用时通知消费者进行消费响应。 Reactive Stream规范中这种被定义为Publisher<T> ,Publisher<T>....

Java 为什么上传服务器后下载的jar不能执行

jar文件上传服务器后下载到本地执行提示 Error: Invalid or corrupt jarfile XXX.jar 问题出现在ftp下载过程中修改了jar文件的格式问题导致,而wget可以确保格式不受损。。解决方法是使用wegt或者ssh等命令,如下: wget ftp://ip:port/download/XXX.jar --ftp-user=username --ftp-password=password