JAVA
文章平均质量分 63
天涯共明月
路漫漫其修远兮,吾将上下而求索
欢迎关注我的微信公众号《java学习积累》
展开
-
使用TreeSet把对象数组按某些字段自定义去重
使用TreeSet把对象数组按某些字段自定义去重// 模拟数据List<LogBean> logList = new ArrayList<>();logList.add(LogBean.builder().id(100).appType("抖音").desc("应用日志").createTm(LocalDate.parse("2021-12-12", DateTimeFormatter.ofPattern("yyyy-MM-dd"))).build());logList.原创 2022-02-26 14:40:02 · 567 阅读 · 0 评论 -
Java同步工具类:CountDownLatch\CyclicBarrier\Semaphore
CountDownLatch :允许一个或多个线程等待其他线程完成操作CyclicBarrier:同步屏障,它要做是事情就是让一组线程到达一个屏障(也可以叫同步)时被阻塞,直到最后一个线程到达屏障时,屏障才会开门,所有被屏障拦截的线程才会继续运行。Semaphore :信号量,只有拿到了信号量,才能执行,执行完后,归还信号量,没有拿到需要等待原创 2021-07-01 14:50:52 · 186 阅读 · 0 评论 -
Java基础:实现Bean转Map
Java Bean 转 Map目录Java Bean 转 Map1、Apache commons-beanutils 方式2、Fastjson 方式3、Spring Cglib 方式4、Java 内省机制 的 方式项目中经常遇到需要实现 Java bean转Map,比如:调用第三方接口传参等总结了几种方式实现:apache commons-beanutils 方式fastjson 方式spring cglib 方式java 内省机制 的 方式1、Apache commons-be原创 2021-06-29 15:44:06 · 11818 阅读 · 0 评论 -
Java实现对已有的PDF添加页码 加 总页码(二)
Java实现对已有的PDF添加页码 加 总页码上一篇文章已经写了《Java实现对已有的PDF添加页码》有看过上一篇文章的读者,问如何添加总页码的问题,这次是对上一篇的文章的一个补充,加 总页码1.思路其实思路很简单,对PDF添加页码是采用新生成一个PDF文件,对源PDF文件一页一页的复制后触发页码监听器,我们可以在添加页码监听器时,传入源PDF文件的总页码// 读取 源PDF文件,进行一页一页复制,才能触发 添加页码的 页面监听事件PdfReader reader = new PdfR原创 2021-06-06 11:30:26 · 1729 阅读 · 1 评论 -
算法题 - 求数组的子集合
求数组的子集合记录面试算法题,便于回顾题目一:给出一个数组 list = [1,2,3,4,5,6]求此数组的所有子集合输出:[1],[1,2],[1,2,3]…题目二:给出一个数组 list = [1,2,3,4,5,6]求此数组的所有子集合中和为6的子集输出:[6,[2,4],[1,5],[1,2,3]解题思路:方式一:递归方式二:全排列方式方式一:递归算法package com.tianya.java.algorithm;import java.util.原创 2021-06-05 11:07:34 · 2838 阅读 · 3 评论 -
算法题 - 最低分数线问题
最低分数线问题记录面试算法题,便于回顾问题描述题目: 某比赛已经进入了淘汰赛阶段,已知共有n名选手参与了此阶段比赛,他们的得分分别是a_1,a_2….a_n,小美作为比赛的裁判希望设定一个分数线m,使得所有分数大于m的选手晋级,其他人淘汰。 但是为了保护粉丝脆弱的心脏,小美希望晋级和淘汰的人数均在[x,y]之间。 显然这个m有可能是不存在的,也有可能存在多个m,如果不存在,请你输出-1,如果存在多个,请你输出符合条件的最低的分数线。输入:n x y n个选手的得分输出:原创 2021-06-01 20:08:21 · 577 阅读 · 0 评论 -
Java中注解
Java中注解目录Java中注解使用语法元注解完整注解反射API使用语法采用@符合 和 interface 添加到注解名称前面,跟定义接口类似简单定义一个 名称叫 NotAuth 的注解public @interface NotAuth { // 内容 参数等}但是这个注解不完整,需要添加一些描述,称为 元注解元注解描述注解的注解称为元注解Java内置的元注解有四种:@Target 目标,表示该注解运用到什么地方,作用到的目标类型(常用类型枚举:java.lang.原创 2021-05-27 21:45:09 · 265 阅读 · 3 评论 -
二叉树的前中后序遍历
二叉树的遍历二叉树的遍历口诀:前序遍历:根左右中序遍历:左根右后序遍历:左右根前序遍历:ABDEGCF中序遍历:DBGEACF后序遍历:DGEBFCA经常会遇到给出其中两个遍历顺序求出另一个顺序题?解题思路:(1)前序遍历第一个节点为根节点(2)中序遍历特性中间为根,左侧为左子树,右侧为右子树(3)后序遍历最后一个节点为根节点比如:前序:ABDEC中序:DBEAC求后序?解:第一步:根据前序遍历第一个节点为根节点得知,A为根第二步:根原创 2021-05-18 22:20:19 · 1187 阅读 · 0 评论 -
Java基础积累:序列化
Java序列化目录Java序列化方式一:Serializable工具类待序列化对象实现接口:Serializable操作方式二:Externalizable待序列化对象实现接口:Externalizable操作两种方式对比序列化:Java中一种机制,序列化(serialization)就是把对象的状态信息转换成可以存储或传输的形式的过程,一般写入IO流中,以二进制形式流传。反序列化:则是将序列化好了的对象写入文件后,可以从文件中读取出来,并且对它进行反序列化,也就是说,对象的类型信息、对象的数据,还有原创 2021-05-17 22:24:23 · 252 阅读 · 5 评论 -
Freemarker自动生成JavaBean代码
Freemarker自动生成JavaBean代码目录Freemarker自动生成JavaBean代码1. 导入freemarker依赖2. 编写生成Java类所需要的描述3. 编写描述Bean的属性类4. 制定生成Java类的模板5. 测试生成Java类6. 生成Java类效果项目中经常会遇到根据数据库表,编写Java bean,一旦表多,字段多,就很麻烦,所以需要自动生成代码学习使用freemarker模板语言来自动生成代码1. 导入freemarker依赖pom.xml<!-- spr原创 2021-05-05 10:38:06 · 1311 阅读 · 1 评论 -
Java实现对PDF文件添加水印
Java实现对PDF文件添加水印目录Java实现对PDF文件添加水印导入依赖工具方法效果最近项目中遇到对PDF添加水印,实现有多种,采取的是itextpdf导入依赖<!-- 对PDF文件的操作 --><dependency> <groupId>com.itextpdf</groupId> <artifactId>itextpdf</artifactId> <version>5.5.13.1原创 2021-04-29 22:24:22 · 8257 阅读 · 3 评论 -
基础知识积累:缓存/缓存穿透/击穿/雪崩/预热/热备
1、缓存目录1、缓存1.1、缓存穿透1.2、缓存击穿1.3、缓存雪崩1.4、缓存预热1.5、缓存热备1.1、缓存穿透缓存穿透是说收到一个请求,但是该请求缓存中不存在,只能去数据库中查询,然后放进缓存。但当有好多请求同时访问同一个数据时,业务系统把这些请求全发到了数据库;或者恶意构造一个逻辑上不存在的数据,然后大量发送这个请求,这样每次都会被发送到数据库,最终导致数据库挂掉。【解决的办法】对于恶意访问,一种思路是先做校验,对恶意数据直接过滤掉,不要发送至数据库层;第二种思路是缓存空结果,就是对查原创 2021-04-27 21:55:39 · 150 阅读 · 0 评论 -
Java积累:volatile 和 synchronized
volatileVolatile用来对共享变量的访问进行同步。上一次写入操作的结果对下一次读取操作是肯定可见的。 在写入volatile变量值后,CPU缓存中的内容会被写回主存中;在读取volatile变量时,CPU缓存中的对应内容会被置为失效状态,重新从主存中读取。 将变量声明为volatile相当于单个变量的读取和写入添加了同步操作。但是volatile在使用时不需要利用锁机制,因此性能要优于synchronized关键词。 Volatile的主要作用是确保对一个变量的修改被正确地传播到其原创 2021-04-20 21:48:46 · 202 阅读 · 0 评论 -
Java 8 新的日期时间操作API
新的日期时间API,这儿只是些常用的API,剩下的操作其实有很多,JDK给我们提供了非常丰富的API操作,使其更加方便,更加灵活。包括:新老日期时间之间的转换如:date 和 LocalDateTime、LocalTime、LocalDate、Instant 直接的转换原创 2021-04-18 22:45:32 · 660 阅读 · 2 评论 -
Java基础积累:阻塞队列
队列目录队列阻塞队列**常用方法****常用队列****实现原理**阻塞队列阻塞队列(BlockingQueue)是一个支持如下两个附加操作的队列。**A、支持阻塞的插入方法:**意思是当队列满时,队列会阻塞插入元素的线程,直到队列不满**B、支持阻塞的移除方法:**意思是在队列为空时,获取元素的线程会等待,直到队列为空常用方法满/空时抛出异常返回特殊值一直阻塞超时退出插入方法add(e)offer(e)put(e)offer(e,time,unit)原创 2021-04-17 21:09:19 · 437 阅读 · 4 评论 -
Java 8 新特性:Optional
Optional文章目录Optional常用方法实例ofofNullableisPresentmapJava 8 新语法是一个可以承载null的一个容器,一定程度上,可以防止空指针异常,使其对 对象判断是否为null,更加方便,简洁。对比而言,optional可以避免大量的if/else判空处理,并且搭配Lambda表达式一起使用,显得更加简洁。java.util.Optional常用方法// 创建一个容器,不能为空,否则报空指针异常public static <T> Opti原创 2021-04-14 22:22:47 · 783 阅读 · 2 评论 -
maven引入依赖时,识别不到本地仓库jar包问题
maven引入依赖时识别不到本地jar包问题目录maven引入依赖时识别不到本地jar包问题一、本地环境问题二、仓库问题**问题描述:**本地仓库存在jar包,maven引入依赖时却报错,提示找不到jar包问题一、本地环境问题1.maven安装路径中 配置文件:conf/settings.xml 修改成自己本地仓库地址<localRepository>E:\\repository</localRepository>2.IDE中查看maven配置的仓库地址是否是与本地仓库原创 2021-04-08 19:51:26 · 14764 阅读 · 4 评论 -
http请求工具:Feign在springboot、spring下使用
Feign目录Feign一、在spring boot环境体系下使用二、不在springboot体系下使用feign,实现请求第三方接口,作为一个 http请求工具.常在springboot项目中使用feign,作为HTTP请求工具,类似Rest Template,也可以单独作为工具类使用在springboot项目中使用feign,作为HTTP请求工具,类似 Rest Template在spring、springMVC环境下使用,也可以单独使用,类似 http client一、在spring原创 2021-04-06 22:26:36 · 1354 阅读 · 0 评论 -
Java8 新语法 stream 流操作
Stream目录Stream过滤 filter排序 sorted求最大 max求和 reducelist转Map分组 groupingByJava8 API新出的语法,以一种声明式的方式处理数据,类似于SQL,更直观,是对Java集合运算更高级的语法。可以让处理集合数据更高效、更简洁、更直观,使代码一目了然。Stream 其实可以看成工厂流水线工作,是把需要处理的数据集合看作一种流,在管道中传输,每个环节是依次完成,经过中间操作处理后,最后由最终操作得到处理后的结果;也有并行流。实际操作一下:模原创 2021-03-31 22:40:07 · 382 阅读 · 0 评论 -
Java实现FTP文件上传下载
Java实现FTP文件上传下载在Java中使用FTP技术实现上传文件到文件服务器或者从文件服务器上拉取文件到本地采用 apache commons-net工具包实现maven pom.xml导入依赖<!-- apache commons-net 工具包 --><dependency> <groupId>commons-net</groupId> <artifactId>commons-net</artifactId>原创 2021-03-30 21:12:59 · 614 阅读 · 4 评论 -
Java - Stream 分组操作 groupingBy
StreamJava8 API新出的语法,以一种声明式的方式处理数据,类似于SQL,更直观,是对Java集合运算更高级的语法。可以让处理集合数据更高效、更简洁、更直观,使代码一目了然。Stream 其实可以看成工厂流水线工作,是把需要处理的数据集合看作一种流,在管道中传输,每个环节是依次完成,经过中间操作处理后,最后由最终操作得到处理后的结果;也有并行流。分组 groupingBy模拟数据,实际中可以是数据库、网络数据、本地文件数据等学生基本信息:Student(sid=11, name=张三原创 2021-03-28 18:31:34 · 3568 阅读 · 0 评论 -
Spring 实现屏幕捕获-屏幕共享
Spring 实现屏幕捕获-屏幕共享使用服务端推送技术SSE+屏幕截屏,实现一个简单的屏幕共享功能SseEmitter 实现服务端推送功能java.awt.Toolkit 获取屏幕截屏屏幕截屏使用JDK自带工具 java.awt.Toolkit 实现屏幕截屏/*** 捕获屏幕,生成图片*/public static String capture() { // 获取屏幕大小 Dimension screenSize = Toolkit.getDefaultToolkit原创 2020-09-18 12:23:40 · 1453 阅读 · 2 评论 -
Java实现对已有的PDF添加页码
Java实现对已有的PDF添加页码一、思路对现有的PDF文档,进行读取,然后一页一页的复制,进行触发 页面页码监听事件,自定义的页码监听事件功能是在一页文档结束时,进行绘画页码文本到内容去itextpdf 提供了对页面监听事件的方法: PdfWriter writer = PdfWriter.getInstance(document, fos); // 设置页面监听事件,必须在open方...原创 2019-12-28 22:36:59 · 3784 阅读 · 10 评论 -
Java中获取方法参数名称
获取方法参数名称文章目录获取方法参数名称核心类工具类实现场景核心类核心类:org.springframework.core.LocalVariableTableParameterNameDiscoverer实现接口:org.springframework.core.ParameterNameDiscovererpublic interface ParameterNameDiscov...原创 2019-11-03 12:41:54 · 1196 阅读 · 0 评论 -
java-并发工具类-CountDownLatch
并发工具类CountDownLatchCountDownLatch允许一个或多个线程等待其他线程完成操作。可以实现join的功能且比join更加强大。 CountDownLatch的构造函数接受一个int类型的等待线程数N, 其中countDown方法,可以使N减一,await方法会阻塞当前线程,直到N为零。CountDownLatch使用场景(需等待多个线程完成后,再执行本线程)...原创 2019-10-20 14:02:54 · 333 阅读 · 0 评论 -
java多线程-Java线程池的工作原理-ThreadPoolExecutor
线程池优点: 第一:降低资源消耗,创建线程和销毁十分浪费资源,线程池预先创建好线程,并重复利用线程,降低资源消耗。 第二:提高响应速度,任务不需要等待线程的创建就能直接执行。 第三:提高线程的可管理性,线程是稀缺资源,如果无限制创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一管理、分配、调优、监控等。1.线程池的使用线程池的创建:ThreadPoolExec...原创 2019-10-19 17:45:48 · 295 阅读 · 0 评论 -
java 之 内部类全面解析
内部类是一种非常有用的特性,它可以把一些逻辑相关的类组织在一起,并控制位于内部的类的可视性,下文中内部类均指非静态内部类。内部类的学习分为以下10个知识点:1.创建内部类与连接外部类 2.内部类与向上转型 3.局部内部类 4.匿名内部类 5.局部内部类和匿名内部类 6.嵌套类 7.内部类的继承 8.内部类可以被覆盖吗 9.为什么需要内部类 10.内部类标识符 1、创建内部类与连接外转载 2017-05-26 19:29:32 · 386 阅读 · 0 评论 -
java 之 智力题(面试/笔试)
java智力题java面试/笔试的智力题1、持灯过桥 题目:现在小明一家过一座桥,过桥时候是黑夜,所以必须有灯。现在小明过桥要1秒,小明的弟弟要3秒,小明的爸爸要6秒,小明的妈妈要8秒,小明的爷爷要12秒。每次此桥最多可过两人,而过桥的速度依过桥最慢者而定,而且灯在点燃后30秒就会熄灭。问小明一家如何过桥? 参考答案:第一步,小明与弟弟过桥,小明回来,耗时4秒;第二步,小明与原创 2017-04-26 17:45:35 · 7297 阅读 · 3 评论 -
java基础 -- Apache POI将PPT转换成图片
Apache POI 简介Apache POI 是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程式对Microsoft Office格式档案读和写的功能。 可以查看官方文档 Apache POI官网 Apache POI操作PPT文档有两种方式:POI-HSLF 对应的 Powerpoint ‘97(-2007) 的文件格式 – 后缀名为 .原创 2017-03-30 18:47:38 · 10978 阅读 · 12 评论 -
Java 之 Log4J配置详解
Log4JLog4J是Apache的一个开源的项目。通过使用Log4J,程序员可以控制日志信息输送的目的地,包括控制台,文件,GUI组件和NT事件记录器,也可以控制每一条日志的输出格式,或通过定义每一条日志信息的级别,更加细致地控制日志的生成过程。log4j是一种可靠、快速和灵活的日志框架(api)用Java编写的,log4j是一个用Java编写的流行的日志包。log4j已经移植到C,c++,c#,原创 2017-01-10 10:52:23 · 797 阅读 · 0 评论 -
随笔录 之 spring 自学杂记(四) -- AOP(二)
Spring AOPspring AOP(面向方面编程)框架,用于在模块化方面的横切关注点。 简单得说,它只是一个拦截器拦截一些过程,在方法执行之前或之后添加额外的功能。基于xml配置文件的管理方式:使用spring配置文件定义切面及切点。原创 2016-12-16 16:37:55 · 312 阅读 · 0 评论 -
随笔录 之 spring 自学杂记(三) -- AOP(一)
Spring AOPSpring AOP(面向方面编程)框架,用于在模块化方面的横切关注点。 简单得说,它只是一个拦截器拦截一些过程,在方法执行之前或之后添加额外的功能。API有 4 种类型通知(advices)的支持:通知(Advice)之前 - 该方法执行前运行通知(Advice)返回之后 – 运行后,该方法返回一个结果通知(Advice)抛出之后 – 运行方法抛出异常后环绕通知 –原创 2016-12-15 16:10:54 · 381 阅读 · 0 评论 -
排序算法 -- (二)希尔排序
希尔排序 用法:对于直接插入排序问题,数据量巨大时 针对直接插入排序的下效率问题,有人对次进行了改进与升级,这就是现在的希尔排序。 希尔排序,也称 递减增量排序算法,是插入排序的一种更高效的改进版本。希尔排序是非稳定排序算法。1、原理1、将数的个数设为n,取奇数k=n/2,将下标差值为k的书分为一组,构成有序序列。2、再取k=k/2 ,将下标差值为k的书分为一组,构成有序序列。3、原创 2017-06-29 09:38:54 · 792 阅读 · 0 评论 -
排序算法 -- (三)简单选择排序
简单选择排序 用法:常用于取序列中最大最小的几个数时1、原理1、遍历整个序列,将最小的数放在最前面。2、遍历剩下的序列,将最小的数放在最前面。3、重复第二步,直到只剩下一个数。2、实现1、首先确定循环次数,并且记住当前数字和当前位置。2、将当前位置后面所有的数与当前数字进行对比,小数赋值给key,并记住小数的位置。3、比对完成后,将最小的值与第一个数的值交换。4、重复2、3步。3、代码简单选择原创 2017-06-29 09:50:18 · 487 阅读 · 0 评论 -
排序算法 -- (四)堆排序
堆排序 对简单选择排序的优化。 1、原理1、将序列构建成大顶堆。2、将根节点与最后一个节点交换,然后断开最后一个节点。3、重复第一、二步,直到所有节点断开。堆排序模拟流程图:2、实现public class HeapSort { /* 堆排序 */ public static void sort(int[] a){ int len=a.length;原创 2017-06-29 10:02:36 · 324 阅读 · 0 评论 -
排序算法 -- (五)冒泡排序
冒泡排序 使用冒泡排序为一列数字进行排序的过程最坏时间复杂度: O(n^{2}) 最优时间复杂度: O(n) 平均时间复杂度:O(n^{2}) 空间复杂度 总共 :O(n),需要辅助空间 :O(1)1、原理1、将序列中所有元素两两比较,将最大的放在最后面。2、将剩余序列中所有元素两两比较,将最大的放在最后面。3、重复第二步,直到只剩下一个数。2、实现冒泡排序:/* 冒泡排序 */p原创 2017-06-29 11:34:47 · 326 阅读 · 0 评论 -
排序算法 -- (一)直接插入排序
java中 排序算法是经常会遇到的,回顾一下(一)直接插入排序 直接插入排序: 就是把新的数据插入到已经排好的数据列中1、原理1、将第一个数和第二个数排序,然后构成一个有序序列2、将第三个数插入进去,构成一个新的有序序列。3、对第四个数、第五个数……直到最后一个数,重复第二步。2、过程3、代码实现java实现public class InsertSort { /* 直原创 2017-06-27 17:27:12 · 339 阅读 · 0 评论 -
Java垃圾回收器与内存分配策略
概述说起垃圾收集器(Garbage Collection,GC),大部分人都把这项技术当做Java的伴生产物。实际上GC的历史远比Java久远,1960年诞生于MIT的Lisp是第一门真正使用内存动态分配和垃圾收集技术的语言。当Lisp还在胚胎时期时,人们就在思考GC需要完成的3件事情: 那些内存需要回收? 什么时候回收内存? 如何回收? 垃圾收集器关注那些数据区域转载 2017-08-29 22:09:43 · 380 阅读 · 0 评论 -
Java 之 序列化和反序列化的工具类
Java 中的序列化和反序列化的工具类是自己平时使用积累的,有需要的可以进行获取查看。 SerializeUtil.java 码云地址https://gitee.com/tianyagongmingyue/JavaUtils.gitA、序列化对象 /** * 序列化 对象 * @author tianya * @param o * @return原创 2017-12-06 23:01:54 · 1148 阅读 · 0 评论 -
H2内嵌数据库的使用
文章目录@[toc]H2内嵌数据库的使用运行方式JDBC URLJava应用中的使用操作实例Java web 应用中的使用H2服务的启动1.命令行启动服务2.Servlet的方式3.maven插件方式数据库初始化1.maven方式2.spring方式H2内嵌数据库的使用H2是一个开源的嵌入式数据库引擎,采用java语言编写,不受平台的限制。同时H2提供了一个十分方便的web控制台用于操作和...原创 2019-03-19 15:06:22 · 5106 阅读 · 0 评论