
java相关
文章平均质量分 83
java相关
一名技术极客
在代码的海洋里,我是一名不断航行的探索者。热爱Java,热衷于深入挖掘技术细节,享受解决复杂问题的成就感。这里是我的优快云博客,记录我在编程路上的学习笔记、项目实践和对新技术的思考。
作为一名拥有多年开发经验的Java程序员,我深知学习过程中的困难与挑战。因此,我的博客会尽量用简明的语言去阐释复杂的概念,分享实用的编程技巧,以及那些在我工作过程中积累的宝贵经验。无论是初学者还是资深开发者,我都希望这里的内容能对您有所帮助。
在这个快速变化的技术世界,让我们一起保持好奇心,不断学习,共同进步。欢迎留言讨论,期待与您一起探讨编程之美!
展开
-
SpringBoot一键提取身份证与营业执照信息
在处理图像以进行文字识别的上下文中,OpenCV可以用于多种预处理步骤,比如调整图像大小、转换为灰度图、应用滤波器、边缘检测等,以增强图像中的文字部分,从而提高OCR的准确性。以下是在上面的OCR示例中如何使用OpenCV进行图像预处理的代码示例。在这个示例中,我们首先将图像转换为灰度图,然后应用高斯模糊来平滑图像,最后使用Canny算法进行边缘检测。这些步骤可以帮助突出图像中的文字,使其在OCR过程中更容易被识别。OCR可以协同工作,提高图像中文字识别的准确率。来识别图像中的文本,然后使用。原创 2025-01-17 08:31:04 · 790 阅读 · 0 评论 -
探索 Java 中的 Math 函数:常用方法大集合
在Math函数中,还有许多关于数字的基本运算,但是基本上常用的一些方法都在上文有详细的列举,对于这些常用的方法还是需要熟练运用,避免在开发过程中或平时做任务遇到时,不知所措。原创 2024-12-23 08:30:00 · 907 阅读 · 0 评论 -
线程池 —— 警惕!坑中之王的潜在风险
线程池是 Java 中处理多线程的强大工具,但它不仅仅是“直接用就完事”的工具。很多小伙伴在用线程池时,因为配置不当或忽略细节,踩过许多坑。今天跟大家一起聊聊线程池中容易踩的 10 个坑,以及如何避免这些坑,希望对你会有所帮助。线程池是强大的工具,但如果我们日常工作中用得不好也非常容易踩坑。这篇文章通过实际代码示例,我们可以清楚看到线程池的问题所在及改进方法。希望这些内容能帮你避免踩坑,写出高质量的线程池代码!线程池用得好,效率杠杠的;用得不好,程序天天崩!原创 2024-12-13 10:04:43 · 909 阅读 · 0 评论 -
Collection - PriorityQueue 源码解读
前面以为例讲解了Stack和Queue,其实还有一种特殊的队列叫做,即优先队列。优先队列的作用是能保证每次取出的元素都是队列中权值最小的(Java的优先队列每次取最小元素,C++的优先队列每次取最大元素)。这里牵涉到了大小关系,元素大小的评判可以通过元素本身的自然顺序(),也可以通过构造时传入的比较器(Comparator,类似于C++的仿函数)。Java中实现了Queue接口,不允许放入null元素;其通过堆实现,具体说是通过完全二叉树(原创 2024-11-29 10:19:08 · 645 阅读 · 1 评论 -
Collection - ArrayDeque 源码解读
要讲栈和队列,首先要讲Deque接口。Deque的含义是“double ended queue”,即双端队列,它既可以当作栈使用,也可以当作队列使用。说明add(e)addLast(e)向队尾插入元素,失败则抛出异常offer(e)向队尾插入元素,失败则返回falseremove()获取并删除队首元素,失败则抛出异常poll()获取并删除队首元素,失败则返回nullelement()getFirst()获取但不删除队首元素,失败则抛出异常peek()获取但不删除队首元素,失败则返回null。原创 2024-11-29 10:02:17 · 1015 阅读 · 0 评论 -
Collection - LinkedList 源码解读
LinkedList同时实现了List接口和Deque接口,也就是说它既可以看作一个顺序容器,又可以看作一个队列(Queue),同时又可以看作一个栈(Stack)。这样看来,LinkedList简直就是个全能冠军。当你需要使用栈或者队列时,可以考虑使用LinkedList,一方面是因为Java官方已经声明不建议使用Stack类,更遗憾的是,Java里根本没有一个叫做Queue的类(它是个接口名字)。原创 2024-11-29 09:39:23 · 549 阅读 · 0 评论 -
Collection - ArrayList 源码解析
ArrayList实现了List接口,是顺序容器,即元素存放的数据与放进去的顺序相同,允许放入null元素,底层通过数组实现。除该类未实现同步外,其余跟Vector大致相同。每个ArrayList都有一个容量(capacity),表示底层数组的实际大小,容器内存储元素的个数不能多于当前容量。当向容器中添加元素时,如果容量不足,容器会自动增大底层数组的大小。前面已经提过,Java泛型只是编译器提供的语法糖,所以这里的数组是一个Object数组,以便能够容纳任何类型的对象。原创 2024-11-29 09:30:51 · 508 阅读 · 0 评论 -
Java 导出 Excel 利器:JXLS
jxls是一个轻量级的Java库,用于基于模板的Excel报表生成。jxls作为一个开源工具,提供了一种高效且易于维护的方式来处理复杂的Excel导出需求。它允许用户通过在Excel模板中放置特定的标记或注释来定义数据的输出格式和布局,从而避免了编写大量重复且易出错的代码。原创 2024-11-29 09:16:17 · 833 阅读 · 0 评论 -
java之lambda表达式&stream流式编程操作集合最佳实践以及示例代码
Stream API 的主要特点包括:Stream API 提供了一种简洁的方式来处理集合数据,使得代码更加易读、易写。Stream API 的操作可以链式调用,使得代码更加清晰、易读。Stream API 支持并行处理,可以充分利用多核处理器的能力。Stream API 的操作是惰性求值的,即只有在需要结果时才会执行操作。Stream API 的无状态操作不会改变流中的元素,也不会改变流的状态。Stream API 的有状态操作会改变流的状态,或者依赖于流中的其他元素。原创 2024-11-28 18:49:16 · 1147 阅读 · 0 评论 -
深入掌握Flowable并将其与Spring Boot集成实现工作流
目前工作流框架最火的就是Activiti和Flowable,该文章介绍如何使用flowable,如果不想看理论的概念,可以直接跳到第五部分springboot集成flowable。Flowable起源于Activiti工作流引擎,由Activiti的主要开发者在2016年创建。它继承了Activiti的众多优点,并在此基础上进行了优化和改进,以提供更加稳定、高效的工作流管理解决方案。Flowable与Activiti有着共同的祖先,即jbpm,并随着技术的发展和需求的变化,逐渐发展成为独立且功能强大的工作流原创 2024-11-28 17:52:43 · 1705 阅读 · 0 评论 -
再见 MybatisPlus,阿里推出新 ORM 框架更牛X
Fluent Mybatis, 是一款 Mybatis 语法增强框架, 综合了 Mybatis Plus, Dynamic SQL, JPA 等框架特性和优点, 利用 annotation processor 生成代码。@Datasubject,#{item}看完 3 个框架对同一个功能点的实现, 各位看官肯定会有自己的判断,笔者这里也总结了一份比较。原创 2024-11-22 14:09:43 · 1111 阅读 · 0 评论 -
一个注解,优雅的实现接口幂等性!
简单来说,就是对一个接口执行重复的多次请求,与一次请求所产生的结果是相同的,听起来非常容易理解,但要真正的在系统中要始终保持这个目标,是需要很严谨的设计的,在实际的生产环境下,我们应该保证任何接口都是幂等的,而如何正确的实现幂等,就是本文要讨论的内容。/*** 参数名,表示将从哪个参数中获取属性值。* 获取到的属性值将作为KEY。* @return*//*** 属性,表示将获取哪个属性的值。* @return*//*** 参数类型* @return*/原创 2024-11-22 13:53:36 · 898 阅读 · 0 评论 -
使用Java和Proj4j计算两个地理坐标点的最小矩形包围盒
今天小编碰到个需求,要求通过两个坐标点位向外扩大500米半径,通过这两个500米半径的圆给前端地图提供可画出长方形的四个坐标点。原创 2024-11-19 17:11:06 · 428 阅读 · 0 评论 -
探寻优雅之法:实现高效在线人数统计功能
在线人数统计这个功能相信大家一眼就明白是啥,这个功能不难做,实现的方式也很多,这里说一下我常使用的方式:使用Redis的有序集合(zset)实现。zadd命令有三个参数key:有序集合的名称。score1、score2 等:分数值,可以是整数值或双精度浮点数。等:要添加到有序集合的成员。例子:向名为myzsetkey:指定的有序集合的名字。min 和 max:定义了查询的分数范围,也可以是-inf 和 +inf(分别表示“负无穷大”和“正无穷大”)。key:指定的有序集合的名字。原创 2024-11-18 11:04:53 · 741 阅读 · 0 评论 -
不好意思,HttpClient 该换了,来感受下Retrofit的魅力
Retrofit是适用于Android和Java且类型安全的HTTP客户端,其最大的特性的是支持通过接口的方式发起HTTP请求。而spring-boot是使用最广泛的Java开发框架,但是Retrofit官方没有支持与spring-boot框架快速整合,因此我们开发了。实现了Retrofit与框架快速整合,并且支持了诸多功能增强,极大简化开发。接口必须使用注解标记!http相关注解可参考官方文档:retrofit官方文档。通常情况下,通过注解属性动态创建对象能够满足大部分使用场景。原创 2024-11-14 15:07:12 · 645 阅读 · 0 评论 -
这款轻量级 Java 表达式引擎,真不错!
aviator本来是一个轻量级、高性能的基于JVM的表达式引擎。不过从5.0.0版本开始,aviator升级成为了aviatorScript,成为一个高性能、轻量级寄宿于JVM (包括 Android 平台)之上的脚本语言。Sequence。原创 2024-11-14 14:23:11 · 983 阅读 · 0 评论 -
JVM 调优难题何解?探秘优化性能的隐藏密码!
左右,而在下单场景中,一般对象几秒内就会变成垃圾对象了,像这么长时间都还没被回收的话,其实可以早点放到老年代,这样也不会占用新生代的内存了,比如通过设置参数-JVM 逃逸分析,逃逸分析也是一种优化手段,JVM 如果分析确定一个对象不会逃逸于方法之外,那么这个对象会被分配在栈上,而不是在堆上,这样一定程度上就可以。以秒杀为例,大型电商系统会拆分多个微服务,比如订单服务,商品服务,优惠服务,库存服务,支付服务等等。这样设置,而在下单场景,大多对象都是短期存活的,这样设置因为动态对象年龄判断原则导致频繁出发。原创 2024-11-08 09:13:57 · 1014 阅读 · 0 评论 -
比MyBatis快100倍的开源ORM框架!
对于java程序员来说,myBatis、Hibernate等都是常见的 ORM框架,对于一些简单的CRUD,事务支持非常不错。但是有时候用起来可能比较繁琐,比如接下来我们要聊的话题,比 MyBatis 效率快 100 倍的条件检索引擎,天生支持联表,使一行代码实现复杂列表检索成为可能,绝无夸张之语!支持 实体多表映射支持 动态字段运算符支持 分组聚合 查询支持 Select | Where | From 子查询支持 实体类嵌入参数支持 字段转换器支持 Sql 拦截器。原创 2024-11-08 09:12:29 · 949 阅读 · 0 评论 -
Java 操作 PDF:从零开始创建功能丰富的PDF文档
本文将详细介绍如何使用Java来实现PDF文档的一键生成、文字插入、表单字段添加、电子签名以及公章盖章等高级功能。通过上述步骤,我们已经成功地实现了使用Java和iText库来生成PDF文档、插入文字、添加表单字段、应用电子签名以及嵌入公章图像。希望这篇文章能为你提供一个良好的起点,帮助你在项目中更高效地操作PDF文档。为PDF添加数字签名不仅增加了文档的安全性,也提高了其可信度。这段代码展示了如何加载图像文件并将其作为固定位置的元素添加到PDF中。的文本框,并将其放置在PDF的第一页上。原创 2024-12-31 08:53:54 · 1715 阅读 · 0 评论 -
后端开挂:3 行代码写出 8 个接口!
今天在我的技术群里面看到了有同学在讨论,如何用 3 行代码搞定 8 个接口!作为一个老程序员,刚听到这个说法的时候,我的第一反应也是 怎么可能?。我们都知道,传统后端开发中,为了实现一个完整的增删改查接口,往往要写很多重复代码:定义路径、配置参数、处理逻辑、验证权限,甚至返回的 JSON 格式都要细细斟酌。如果要做一个复杂点的业务接口,几十行代码只是起步,百来行也是家常便饭。可最近,我接触到一个“神器”——APIJSON,它几乎颠覆了我对后端接口开发的认知。原创 2024-11-06 16:22:56 · 1030 阅读 · 0 评论 -
SpringBoot 如何实现多租户架构?
多租户架构是指在一个应用中支持多个租户(Tenant)同时访问,每个租户拥有独立的资源和数据,并且彼此之间完全隔离。通俗来说,多租户就是把一个应用按照客户的需求“分割”成多个独立的实例,每个实例互不干扰。原创 2024-11-05 14:48:16 · 1151 阅读 · 0 评论 -
弃用 RestTemplate,来了解一下官方推荐的 WebClient !
在 Spring Framework 5.0 及更高版本中,RestTemplate 已被弃用,取而代之的是较新的 WebClient。这意味着虽然 RestTemplate 仍然可用,但鼓励 Spring 开发人员迁移到新项目的 WebClient。设置请求超时不会有任何影响总的来说,虽然 RestTemplate 可能仍然适用于某些用例,但 WebClient 提供了几个优势,使其成为现代 Spring 应用程序的更好选择。原创 2024-11-05 14:47:58 · 982 阅读 · 0 评论 -
如何设计一个支撑数亿用户的系统?
要设计出一套能支撑几十亿人的系统是很困难的。对于软件架构师来说,这一直是一项很大的挑战,但是,从现在开始,看完我的文章,你就会觉得容易很多了。在这篇文章里,我不打算谈论诸如容错、可靠性、高可用性等高性能计算的通用术语。原创 2024-11-01 15:45:09 · 1057 阅读 · 0 评论 -
SpringBoot 快速实现 api 加密!so easy~
使用RSA加密方式对API接口返回的数据加密,让API数据更加安全。别人无法对提供的数据进行破解。Spring Boot接口加密,可以对返回值、参数值通过注解的方式自动加解密。首先我们当然是了解RSA加密RSA加密是一种非对称加密。可以在不直接传递密钥的情况下,完成解密。这能够确保信息的安全性,避免了直接传递密钥所造成的被破解的风险。是由一对密钥来进行加解密的过程,分别称为公钥和私钥。两者之间有数学相关,该加密算法的原理就是对一极大整数做因数分解的困难性来保证安全性。原创 2024-11-01 15:27:39 · 1449 阅读 · 0 评论 -
Spring在多线程环境下如何确保事务一致性
注解完成的,声明式事务优点就在于让事务代码与业务代码解耦,通过Spring中提供的声明式事务使用,我们也可以发觉我们只需要编写业务代码即可,而事务的管理基本不需要我们操心,Spring就像使用了魔法一样,帮我们自动完成了。本文给出的只是一个方法,为了实现多线程事务一致性,我们还有很多方法,例如和本文一样的思想,直接利用JDBC提供的API来手动控制事务提交和回滚,或者可以尝试采用分布式事务的思路来解决问题。一次事务的完成通常都是默认在当前线程内完成的,又因为一次事务的执行过程中,涉及到对当前数据库连接。原创 2024-11-01 09:30:08 · 934 阅读 · 0 评论 -
Java8中一个极其强悍的新接口,炸裂!很多人没用过(非常实用)
定义一个抛出异常的形式的函数式接口, 这个接口只有参数没有返回值是个消费型接口/*** 抛异常接口/*** 抛出异常信息* @param message 异常信息创建一个名为的函数式接口,接口的参数为两个Runnable接口。这两个两个Runnable接口分别代表了为true或false时要进行的操作/*** 分支处理接口/*** 分支操作* @param trueHandle 为true时要进行的操作* @param falseHandle 为false时要进行的操作。原创 2024-07-30 10:35:07 · 876 阅读 · 0 评论 -
推荐一款贼好用的低代码报表、大屏设计工具JimuReport,开源免费!
JimuReport是北京国炬信息技术有限公司旗下的平台,是一款免费的数据可视化报表工具,主要用于报表和大屏设计。用户可以通过在线拖拽的方式,像搭建积木一样设计报表,报表设计、图形报表、打印设计、大屏设计等,完全免费!秉承“简单、易用、专业”的产品理念,极大的降低报表开发难度、缩短开发周期、解决各类报表难题。它采用了纯Web在线技术,可以快速集成到SpringBoot的脚手架项目中,只需引入依赖即可。用户无需编写大量代码,即可快速制作各种报表,大大降低了报表开发的难度,缩短了开发周期。原创 2024-06-07 17:19:56 · 1438 阅读 · 0 评论 -
Spring Boot + URule 实现可视化规则引擎,太优雅了!
规则引擎其实是一种组件,它可以嵌入到程序当中。将程序复杂的判断规则从业务代码中剥离出来,使得程序只需要关心自己的业务,而不需要去进行复杂的逻辑判断;简单的理解是规则接受一组输入的数据,通过预定好的规则配置,再输出一组结果。DroolsAviatorEasyRules等等。但是URule,它可以运行在等各种类型的操作系统之上,采用纯浏览器的编辑模式,不需要安装工具,直接在浏览器上编辑规则和测试规则。当然这款规则引擎有开源和pro版本的区别,至于pro版是啥,懂的都懂,下面放个表格,了解下具体的区别。原创 2024-06-07 09:48:24 · 1056 阅读 · 0 评论 -
深入解析Spring Boot启动机制:从原理到实践
下图代码说明了,Spring在初始化全部 单例Bean以后,会执行接口。SpringBoot 会在Spring完全启动完成后,才开启Http流量。这给了我们启示:应该在Spring启动完成后开启入口流量。Rpc和 MQ流量也应该如此,所以建议大家 在或者等位置 注册服务,开启流量。例如服务发现组件,就是在中注册服务的!原创 2024-05-24 09:46:05 · 1224 阅读 · 0 评论 -
java中的Stack解析
Stack就是栈,是一个重要的数据结构,它具有 先进后出的特点。栈的入栈和出栈操作都在栈顶进行,也可以说是在栈的尾部进行。所以先存的要在后面才能取出来,所以栈具有先进后出的特点。原创 2024-05-06 09:02:39 · 381 阅读 · 0 评论 -
Spring AI 来了,打造Java生态大模型应用开发新框架!
尽管 Python 长期主导 AI 大模型应用开发领域,但 Java 并未熄火!Spring AI 来了,正式告别实验期,迈向广泛应用新阶段!这意味着 Spring 生态体系的广大开发者,迎来 AI 大模型应用开发的新里程。原创 2024-04-07 08:48:33 · 6043 阅读 · 1 评论 -
restemplate请求乱码之content-encoding=“gzip“
使用请求文本数据接口,发现解码后的字符串是乱码。此时除了编码格式问题外就可以怀疑是不是服务器响应了压缩后的数据。解决这个问题,先尝试移除请求头,告诉服务器,客户端不需要压缩响应体。如果服务器还是响应压缩后的数据,尝试读取服务器的头,根据服务器的压缩编码,自己再进行解压缩。原创 2024-03-28 11:42:09 · 1687 阅读 · 0 评论 -
HTTP探秘:揭开互联网传输的神秘面纱,让你的网络之旅更顺畅!
HTTP 协议 是(HyperText Transfer Protocol,超文本传输协议)是因特网上应用最为广泛的一种网络传输协议,所有的 WWW 文件都必须遵守这个标准HTTP是一个基于 TCP/IP 通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)原创 2024-03-28 01:57:11 · 1596 阅读 · 0 评论 -
Springboot中使用@Async注解7大失效场景及解决方案
在Spring Boot中,@Async注解就像一把瑞士军刀,能帮你轻松处理那些耗时的任务,让主线程可以继续忙别的事儿。不过,跟所有强大的工具一样,用不好它也可能出岔子。有时候,你可能因为 线程池没配好、异常没处理好,或者 Spring代理没生效等原因,导致@Async没按你期望的那样工作。为了避免这些坑,咱们得深入了解下@Async是怎么工作的,还要知道怎么用才能不出问题。接下来,咱们就来聊聊七种常见的@Async失效情况,还有怎么搞定它们。这样,大家在享受异步编程带来的好处时,也能心里更有底儿。原创 2024-03-20 15:42:28 · 3698 阅读 · 0 评论 -
java 解析路径中的参数(&与=拼接的参数)
【代码】java 解析路径中的参数(&与=拼接的参数)原创 2024-02-01 17:46:26 · 370 阅读 · 0 评论 -
java 工具类实现Base64二维码图片识别
【代码】java 工具类实现Base64二维码图片识别。原创 2024-02-01 17:18:13 · 298 阅读 · 0 评论 -
IDEA 28 个天花板技巧,yyds!
注意:不同idea版本菜单、目录可能有细微差别,自己稍加分析都能找到。原创 2024-01-30 19:08:14 · 1146 阅读 · 0 评论 -
Java基础 LinkedHashMap
LinkedHashMap是HashMap和双向链表的合二为一,即一个将所有Entry节点链入一个双向链表的HashMap(LinkedHashMap = HashMap + 双向链表)LinkedHashMap和HashMap是Java Collection Framework 的重要成员,也是Map族(如下图所示)LinkedHashMap是HashMap的子类(拥有HashMap的所有特性)原创 2024-01-30 17:49:41 · 1112 阅读 · 0 评论 -
7 种提升 SpringBoot 吞吐量神技!
这两个方法如果在不指定线程池的情况下,都是在 ForkJoinPool.common 线程池中执行,而这个线程池中的所有线程都是 Daemon(守护)线程,所以,当主线程结束时,这些线程无论执行完毕都会退出系统。CompletableFuture.supplyAsync 方法构造一个 CompletableFuture 实例,在 supplyAsync() 方法中,它会在一个新线程中,执行传入的参数。使用异步注解 @aysnc、启动类:添加 @EnableAsync 注解。这里不给大家举例,可自行尝试。原创 2024-01-16 11:52:10 · 433 阅读 · 0 评论 -
7个理由:从Java8升级到Java17
从Java 8 到 Java 20,Java 已经走过了漫长的道路,自 Java 8 以来,Java 生态系统发生了很多变化。最显着的变化是 Java 的发布节奏。Java 8 于 2014 年发布,Java 17 于 2021 年发布。这两个版本之间相隔了 7 年。Java17是一个长期支持(LTS)的版本,会有更稳定和持久的维护和更新。如果你和我一样,已经使用Java 8很长时间了,觉得需要了解一下Java的新特性,那么这篇文章就是为你准备的。原创 2024-01-16 11:35:49 · 992 阅读 · 0 评论