Java
文章平均质量分 80
write once,run anywhere
别团等shy哥发育
硕士在读,对分布式、中间件、容器、微服务、深度学习、机器学习与数据挖掘方面感兴趣,希望可以在这些方面和大家交流学习方法。
后续文章会搬到这里:www.codeleader.top
展开
-
CompletableFuture异步回调
在进行传统的RPC(远程调用)时,同步调用RPC是一段耗时的过程。该方法是对runAfterBoth()方法和thenCombine()方法的特点进行了折中,调用thenAcceptBoth()方法,第三个任务可以接收其合并过来的第一个任务、第二个任务的处理结果,但是第三个任务(合并任务)却不能返回结果。从方法的声明可以看出,thenRun()方法同thenApply()方法类似,不同的是前一个任务处理完成后,thenRun()并不会把计算的结果传给后一个任务,而且后一个任务也没有结果输出。原创 2023-10-04 20:44:17 · 1244 阅读 · 0 评论 -
浅谈泛型擦除
getFirst擦除类型后的返回类型是Object。在编码阶段使用泛型时加上的类型参数,会被编译器在编译阶段去掉,这个过程叫做泛型擦除。编写一个泛型方法调用时,如果擦出了返回类型,编译器会插入强制类型转换。注意,类型参数T已经被擦出了,只留下了限定类型Comparable。(erased),并替换为其限定类型(或者,对于无限定的变量则替换为。这个原始类型的名字就是去掉类型参数后的泛型类型名。无论何时定义一个泛型类型,都会自动提供一个相应的。不过擦除类型后,它们都会编程原始的Pair类型。原创 2023-10-04 00:20:09 · 421 阅读 · 0 评论 -
CompletableFuture异步编排
Future是Java 5添加的类,用来描述一个异步计算的结果。你可以使用isDone方法检查计算是否完成,或者使用get阻塞住调用线程,直到计算完成返回结果,你也可以使用cancel方法停止任务的执行。在Java 8中, 新增加了一个包含50个方法左右的类:,提供了非常强大的Future的扩展功能,可以帮助我们简化异步编程的复杂性,提供了函数式编程的能力,可以通过回调的方式处理计算结果,并且提供了转换和组合的方法。类实现了Future接口,所以你还是可以像以前一样通过get。原创 2023-04-19 22:56:15 · 1365 阅读 · 1 评论 -
Arrays类
为了简化对数组的操作,JDK1.2在`java.util`包下增加了一个Arrays类(数组工具类),里面提供了一系列静态方法,用于对数组进行排序、查找等。Arrays类常见方法如表所示。原创 2022-10-07 13:18:20 · 652 阅读 · 0 评论 -
java中的包装类
里面维护的基本数据类型的变量value,也是final修饰的,不能更改,即一旦创建对象,其内容就不能修改。通过这六个方法,数值类型的包装类可以互相转换这六种数值,但是需要注意的是当大范围的数值转换为小范围的数值时,可能会溢出或损失精度。数值类型的包装类都继承自Number类,Number类是抽象类,要求它的子类必须实现如下六个方法。方式一:直接拼接空字符串。将一个char类型的基本数据类型值包装为Character类型的对象通常有两种方式。包装类是引用数据类型,数值类型的包装类创建对象的方式通常有两种。原创 2022-10-06 23:22:53 · 1127 阅读 · 0 评论 -
Map集合
同一个Map中的key是不允许重复的,key和value之间存在单向一对一关系,即通过指定的key总能找到唯一的、确定的value,Map中的key和value可以是任何引用类型的数据。是Map系列接口的根接口,其中包含一个静态内部接口Entry,它是(key,value)映射关系的根接口,Entry接口中提供了getKey和getValue的方法,所有实现Map接口的实现类,也都要用内部类实现Entry接口。:将另一个map中的键值对添加到当前Map集合中,如果key相同,则会出现value覆盖的现象。原创 2022-10-05 14:29:29 · 656 阅读 · 3 评论 -
Set集合
Set接口也是Collection的子接口,Set接口没有提供额外的方法。Set集合支持的遍历方式也和Collection集合一样,使用foreach和Iterator遍历。原创 2022-10-04 16:48:53 · 378 阅读 · 0 评论 -
List集合
在构建ArrayList集合对象时,如果没有显示指定容量,那在JDK1.6及其之前版本的内部数组初始化容量默认为10,之后的版本初始化容量为长度为0的空数组,在添加第一个元素时再创建一个长度为10的数组。因为List接口是Collection接口的子接口,因此之前Collection接口的方法,List接口也同样适用,Collection集合的遍历方式也同样适用于List接口的集合。Collection接口没有提供直接的实现类,而是提供了更加具体的子接口的实现类,其中一个最常用的子接口就是List接口。原创 2022-10-03 15:52:06 · 378 阅读 · 0 评论 -
Lambda表达式与Stream API
Java8最具革命性的两个新特性是Lambda表达式和Stream API,它们都是基于函数式编程的思想,函数式编程给Java注入了新鲜的活力。原创 2022-10-02 18:38:09 · 2951 阅读 · 0 评论 -
代理设计模式
在Java开发中,我们也会遇到一些代理类的场景,这些代理类可以帮其他被代理类完成一些它没有或不方便完成的事情,而且还不会改变被代理类原来的功能。案例需求:需要在所有的Dog、Person、Bird等接口的实现类的所有实现方法的方法执行之前加上一句"xx方法开始执行",执行之后加一句“xx方法执行完毕”,并要求不修改这些实现类的代码。上述代码可以实现代理工作,但是代理类DogProxy只能给Dog一个借口实现代理工作,如果此时另一个接口的实现类也有相同的代理工作要求,则需要编写另一个代理类。原创 2022-10-01 18:13:57 · 287 阅读 · 0 评论 -
java中的多线程
线程是进程中一个小的执行单位,线程是不能脱离进称独立存在的,一个进程中可以有一个或多个线程。原创 2022-09-28 22:05:02 · 2861 阅读 · 0 评论 -
java中的IO流
如果new的File对象所表示的文件或目录并不存在,那么并不会应位new了一个File对象,操作系统就在对应的路径下创建所对应的文件和目录,它仅仅是在JVM的堆中new了一个File对象而已。java为了避免这种类型安全性问题的发生,使序列化接口类在每次编译时,自动生成一个序列化版本ID,用以区别不同的版本,当序列化和反序列化的版本不一致时,就会失败,抛出异常。然而,有些修改并不影响对象的反序列化,如类中加入了新的实例变量,而序列化的数据中并没有新实例变量的值,那么它在反序列化的过程中可以使默认值。原创 2022-09-26 22:01:57 · 2146 阅读 · 0 评论 -
java中的泛型
符号进行连接,并且规定在这多个上限中,至多有一个父类上限,但可以有多个接口上限,表明该类型形参必须是其父类的子类(包括其父类本身),并且可以实现多个上限接口,父类在前接口在后。为了解决这个问题,JDK1.5引入了泛型的概念,让我们可以在程序中用某种方式表示完全未知的类型,使得程序顺利编写并通过编译,等到使用时再确定它的具体类型。假如我们有一个新需求,要求学生类的成绩仍然是未确定的类型,但它必须是如下的数字类型之一,不能是String等其他非数字类型。也可以指定上限,这两种的语法格式和要求是一样的。原创 2022-09-25 20:56:28 · 1292 阅读 · 0 评论 -
Collection集合
不过优先级队列和LIFO队列(或堆栈)除外,前者根据系统提供的比较器或元素的自然顺序对元素进行排序,后者按LIFO(后进先出)的方式对元素进行排序。进一步提供关于键得总体排序的Map,该映射是根据键的自然顺序进行排序的,或者根据通常在创建有序映射时提供的Comparator排序。接口的实现类对象,该对象用于迭代集合中的元素。:从当前集合中删除所有与coll集合中元素相等的元素,相当于从当前集合中删除它们的交集,即。:当前集合仅保留与coll集合中元素相等的元素,相当于当前集合中仅保留两个集合的交集,即。原创 2022-09-24 17:18:41 · 735 阅读 · 0 评论 -
java中的日期类
中包含了所有关于本地日期(LocalDate)、本地时间(LocalTime)、本地日期时间(LocalDateTime)、时区(ZonedDateTime)和持续时间(Duration)的类。类是一个抽象类,它为特定瞬间与一组诸如YEAR、MONTH、DAY_OF_MONTH、HOUR等日历字段之间的转换提供了一些方法,并为操作日历字段(如获得下星期的日期)提供了一些方法。通过API或源码,可以看出Date类的大部分方法已经过时,已被第二代日期类Calendar代替,剩下的Date类常见方法如下所示。原创 2022-09-22 16:34:12 · 4284 阅读 · 0 评论 -
Object类
类是类层次结构的根类,每个类(除了`Object`类本身)都使用`Object`类作为超类。一个类如果没有显示声明继承另一个类,则相当于默认继承了`Object`类。换句话说,Object类的变量可以接收任意类型的对象。Java规定`Object[]`可以接收任意类型对象的数组,但是不能接收基本数据类型的数组。原创 2022-09-20 19:21:46 · 1072 阅读 · 0 评论 -
异常和异常处理
Java将程序执行过程中发生的不正常情况成为异常。Java使用统一的异常机制来提供一致的错误报告模型,从而使程序更加健壮。编程的错误分为语法错误、逻辑错误、异常三种,其中语法错误和逻辑错误不属于异常。因为如果发生语法错误,Java程序根本无法运行;而如果发生逻辑错误,Java程序也不可能得到正确的结果。我们说的异常是指程序既没有语法错误,也没有逻辑错误,而是在运行过程中遇到一些程序以外的错误,导致Java程序发生异常,从而导致Java程序崩溃。异常类型虽然也是一个Java类,但不是所有的Java。原创 2022-09-19 17:38:00 · 857 阅读 · 0 评论 -
抽象类和抽象方法
当通过arr[i]调用area()和detail()方法时,编译器会去抽象类中找是否声明了这两个方法,如果没有声明,那么将会发生找不到该方法的编译错误,但是运行时是执行子类重写的area()和detail()方法,这又体现了多态性的使用。父类要体现所有子类的共同特征,在设计某些方法(行为特征或功能)时,我们发现父类中无法给出合理的具体实现,而应该交由子类来实现,那么这样的方法就应该设计为抽象方法,而包含抽象方法的类就必须为抽象类。虽然不能直接创建抽象类的对象,但是子类在创建对象时,一定会调用父类的构造器。原创 2022-09-17 15:46:30 · 954 阅读 · 0 评论 -
JWT实现跨域身份验证
JWT实现跨域身份验证1、JWT简介2、JWT的结构2.1 头部(header)2.2 载荷(payload)2.3 签证(signature)3、JWT的原则4、JWT的用法5、JWT的问题和趋势6、整合JWT令牌6.1 在模块中添加jwt工具依赖6.2 创建JWT工具类1、JWT简介 JWT(JSON Web Token)是目前流行的跨域认证解决方案,是一个开放标准(RFC 7519),它定义了一种紧凑的、自包含的方式,用于作为JSON对象在各方之间安全地传输信息。该信息可以被验证和信任,因为它是原创 2022-01-07 19:18:22 · 1322 阅读 · 0 评论 -
springboot实现树形结构的分类显示
文章目录1、实现效果2、数据库中的表结构3、后端接口实现3.1 针对返回的数据创建对应的实体类3.2 编写具体封装代码3.3 swagger测试1、实现效果我们在开发中都会遇到树形控件,今天就来实现这个凡人的功能,我这里这树形结构比较简单,只有二级分类,这里只写出后端实现,前端你只需要把数据拿到赋值给vue的树形控件即可,前端实现方式太简单,这里不做讨论。我们最终想要的数据结构为: "list": [ { "id": "1178214681118568449",原创 2021-10-31 14:31:32 · 2659 阅读 · 1 评论 -
矩阵乘法的java实现
文章目录1、算法思想2、代码实现1、算法思想最近老是碰到迭代问题,小数太多手算又算不过来,写个矩阵乘法辅助一下吧。有两个矩阵A和B,计算矩阵A与B相乘之后的结果C。A的列数必须等于B的行数用矩阵A的第i行的值分别乘以矩阵B的第J列,然后将结果相加,就得到C[i][j]。矩阵A的行等于C的行,矩阵B的列等于C的列,这两个数值用来控制循环的次数,但是每一步中需要把行和列中对应的乘机求和,所以再加一个内循环控制乘法求和就行。下面我们进行矩阵乘法的测试A=[123456789111]B=[1原创 2021-10-11 21:36:41 · 1743 阅读 · 0 评论 -
用Java实现Redis限流
用Java实现Redis限流1、概述2、zset有序集合相关命令与限流3、zset有序结合与限流1、概述 限流的含义是在单位时间内确保发往某个模块的请求数量小于某个数值,比如在实现秒杀功能时,需要确保在10秒内发往支付模块的请求数量小于500个。限流的作用是防止某个段时间段内的请求数过多,造成模块因高并发而不可用。2、zset有序集合相关命令与限流 zset也叫有序集合,是Redis的一种数据类型,在其中每个值(value)都会有一个对应的score参数,以此来描述该值的权重分值。可以通过如下形原创 2021-09-24 16:02:04 · 2151 阅读 · 1 评论 -
java比较日期大小
测试用例: String beginTime=new String("2021-04-25 11:22:22"); String endTime=new String("2021-04-25 11:22:22");方法一:用Date的before()和after()方法返回值方法描述booleanafter(Date when)测试日期是否在指定日期之后booleanbefore(Date when)测试此日期是否在指定日期之前 St原创 2021-04-25 12:55:49 · 849 阅读 · 0 评论 -
线程通信问题练习
文章目录问题一:涉及方法:代码实现:总结问题一:使用两个线程打印 1-100。线程1, 线程2 交替打印涉及方法:wait():一旦执行此方法,当前线程就进入阻塞状态,并释放同步监视器。notify():一旦执行此方法,就会唤醒被wait的一个线程。如果有多个线程被wait,就唤醒优先级高的那个。notifyAll():一旦执行此方法,就会唤醒所有被wait的线程。说明:1.wait(),notify(),notifyAll()三个方法必须使用在同步代码块或同步方法中。2.wait(原创 2021-04-22 20:46:36 · 197 阅读 · 0 评论 -
线程同步练习:存钱问题
1、问题描述有两个储户分别向同一个账户存3000元,每次存1000,存3次。每次存完打印账户余额。问题:该程序是否有安全问题,如果有,如何解决?提示:1,明确哪些代码是多线程运行代码,须写入run()方法2,明确什么是共享数据。3,明确多线程运行代码中哪些语句是操作共享数据的。2、分析1.是否是多线程问题? 是,两个储户线程2.是否有共享数据? 有,账户(或账户余额)3.是否有线程安全问题?有4.需要考虑如何解决线程安全问题?同步机制:有三种方式(同步代码块、同步方法、Lock锁原创 2021-04-22 19:01:36 · 251 阅读 · 0 评论 -
使用Lock锁解决线程安全问题
文章目录1、Lock锁2、Lock锁解决线程安全问题3、总结3.1、synchronized 与 Lock的异同?1、Lock锁java.util.concurrent.locks.Lock接口是控制多个线程对共享资源进行访问的 工具。锁提供了对共享资源的独占访问,每次只能有一个线程对Lock对象 加锁,线程开始访问共享资源之前应先获得Lock对象。ReentrantLock 类实现了 Lock ,它拥有与 synchronized 相同的并发性和 内存语义,在实现线程安全的控制中,比较常用的是Re原创 2021-04-22 18:14:31 · 257 阅读 · 0 评论 -
java同步机制解决多线程安全问题
java同步机制解决多线程安全问题一、问题描述二、解决方式2.1、同步代码块2.1.1、使用同步代码块解决实现Runnable接口的线程安全问题2.1.2、使用同步代码块解决继承Thread类的线程安全问题2.2、同步方法2.2.1、使用同步方法解决实现Runnable接口的线程安全问题2.2.2、使用同步方法处理继承Thread类的方式中的线程安全问题三、总结一、问题描述创建三个窗口卖票,总票数为100张,会出现重复票、错票等现象。出现了线程安全问题二、解决方式 当一个线程a在操作ticket的原创 2021-04-22 00:08:34 · 182 阅读 · 0 评论 -
java:线程入门
文章目录一、线程概念二、并行与并发三、创建线程1、继承Thread类2、实现Runnable接口四、Thread中的常用方法:五、线程的优先级一、线程概念程序(program)是为完成特定任务、用某种语言编写的一组指令的集合。即指一 段静态的代码,静态对象。进程(process)是程序的一次执行过程,或是正在运行的一个程序。是一个动态 的过程:有它自身的产生、存在和消亡的过程。——生命周期如:运行中的QQ,运行中的MP3播放器程序是静态的,进程是动态的进程作为资源分配的单位,系统在运行时会为每个原创 2021-04-21 21:37:40 · 145 阅读 · 0 评论 -
Stream API练习实例
文章目录1、实体类2、实例1、实体类交易员类//交易员类public class Trader { private String name; private String city; public Trader() { } public Trader(String name, String city) { this.name = name; this.city = city; } public String getName() { return name; }原创 2021-04-20 20:52:26 · 282 阅读 · 0 评论 -
java8新特性--并行流与串行流
并行流与串行流1、概述2、实例1、概述并行流就是把一个内容分成多个数据块,并用不同的线程分 别处理每个数据块的流。Java 8 中将并行进行了优化,我们可以很容易的对数据进行并 行操作。Stream API 可以声明性地通过 parallel() 与 sequential() 在并行流与顺序流之间进行切换。2、实例若我们需要计算从0到1000000000L的累计和,若是普通的从0加到1000000000L,势必对cpu的利用率不高,我们做个测试1、普通的累加和:long start = Sys原创 2021-04-20 20:09:46 · 525 阅读 · 0 评论 -
java8新特性--Stream API
java8新特性--Stream API一、StreamAPI概述二、创建Stream1、获取流的方法2、由数组创建流:3、由值创建流4、由函数创建流:创建无限流三、Stream的中间操作1、映射:2、排序1、自然排序2、定制排序:四、Stream的终止操作1、查找与匹配2、规约五、Stream的终止操作1、收集一、StreamAPI概述Stream 是 Java8 中处理集合的关键抽象概念,它可以指定你希望对 集合进行的操作,可以执行非常复杂的查找、过滤和映射数据等操作。 使用Stream API 对原创 2021-04-19 22:15:13 · 199 阅读 · 0 评论 -
Java8新特性--Lambda表达式
Java8新特性--Lambda表达式一、简介二、Lambda表达式语法2.1:无参,无返回值,Lambda 体只需一条语句2.2: 有一个参数,并且无返回值2.3: 若只有一个参数,小括号可以省略不写2.4: 有两个以上的参数,有返回值,并且 Lambda 体中有多条语句2.5: 若 Lambda 体中只有一条语句, return 和 大括号都可以省略不写2.6:Lambda 表达式的参数列表的数据类型可以省略不写三、 Lambda 表达式需要“函数式接口”的支持3.1 什么是函数式接口?3.2自定义函数原创 2021-04-11 20:43:37 · 193 阅读 · 0 评论 -
用IDEA生成javadoc文档
文章目录一、前言二、IDEA生成API的步骤1、Tools->Genearte javaDoc2、设置1、参数解释:2、生成文档3、文档结构如下:一、前言 javadoc是Sun公司提供的一个技术,它从程序源代码中抽取类、方法、成员等注释形成一个和源代码配套的API帮助文档。也就是说,只要在编写程序时以一套特定的标签作注释,在程序编写完成后,通过Javadoc就可以同时形成程序的开发文档了。 javadoc命令是用来生成自己API文档的,使用方式:使用命令行在目标文件所在目录输入javado原创 2021-03-26 17:13:35 · 223 阅读 · 0 评论 -
mybatis基于注解的多对多关联操作
文章目录一、前言二、实体类:1、角色类RoleInfo2、权限类:ModuleInfo3、中间表ModuleRole三、多对多操作1、向中间表插入数据2、删除关联表数据3、获取角色列表并查明每个角色的权限四、数据库表结构1、角色表roleInfo2、权限表moduleInfo3、中间表moduleRole一、前言一名角色对应多种权限,一种权限也会被多个角色同时拥有,所以角色表和权限表是多对多关系,这时需要引入中间表(角色-权限表)来映射,角色表与中间表和权限表与中间表都是一对多关系。二、实体类:1、原创 2021-03-25 12:09:07 · 487 阅读 · 0 评论 -
java后台判断用户浏览器类型
//判断用户使用的浏览器类型 public static String judgeBrowser(HttpServletRequest request){ String agent=request.getHeader("user-agent"); //判断字符串,Edge、Chrome、Safari、Firefox、IE浏览器或其它 if (agent.contains("Edge")) { return "Edge"; ..原创 2021-03-05 14:11:00 · 968 阅读 · 0 评论 -
SpringMVC实现文件下载
文章目录前言前端关键代码:Control层代码:实现效果:前言引入依赖: <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.3</version> </dependency>前端关键代码: &原创 2021-03-03 23:30:09 · 252 阅读 · 1 评论 -
java中BigDecimal类型比较大小和绝对值计算
文章目录前沿关键方法:代码测试:将equals()方法和compareTo()作比较前沿涉及到BigDecimal类型的比较,最好使用compareTo()方法,不要用equals()方法(除非对精度有要求)。关键方法:修饰符方法描述BigDecimalcompareTo(BigDecimal val)将此 BigDecimal与指定的BigDecimal进行 比较,小于返回-1,等于返回0,大于返回1代码测试:import java.math.BigDecima原创 2021-03-01 16:27:41 · 7745 阅读 · 0 评论 -
java中Date日期类型的大小比较
文章目录方法一:CompareTo()方法二:getTime()方法一:CompareTo()调用CompareTo(Date anotherDate)方法,API如下:public int compareTo(Date anotherDate)参数:anotherDate—要比较的Date结果:如果参数Date等于此Date,则值为0 ; 如果此日期在Date参数之前,该值小于0 ; 如果此日期在Date参数0则值大于0异常:NullPointerException - 如果 anothe原创 2021-02-27 11:30:57 · 621 阅读 · 0 评论 -
java计算指定日期的上个月
文章目录java计算指定日期的上个月Calendar类API代码实现java计算指定日期的上个月Calendar类 Calendar类是一个抽象类,可以为在某一特定时刻和一组之间的转换的方法calendar fields如YEAR , MONTH , DAY_OF_MONTH , HOUR ,等等,以及用于操纵该日历字段,如获取的日期下个星期。 时间上的瞬间可以用毫秒值表示,该值是从1970年1月1日00:00 00:00.000 GMT(Gregoria原创 2021-02-21 20:31:25 · 1684 阅读 · 0 评论 -
Maven项目中配置Log4j
Log4j(百度百科)Log4j是Apache的一个开源项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件,甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。一、在pom.xml中添加依赖:<!-- https://mvnrepository.com/a原创 2020-12-26 22:05:09 · 962 阅读 · 0 评论