工具unit
文章平均质量分 78
这孩子叫逆
要么不做,要么做好
展开
-
聊聊保证线程安全的9个小技巧
weakCompareAndSetInt()方法中,通过偏移量offset从对象o中获取字段的当前值,然后比较当前值和传入的期望值是否相等,如果相等,则将字段的值更新为x,返回true,如果不相等,则不会执行更新操作,返回false。1、单独操作:上述我们的demo中,出现了两个线程A、B,它们分别调用get()、put()方法,虽然看起来像是在组合操作,但实际上对于单个线程而言,这是单独操作,是线程安全的。如果synchronized(其他对象),则锁的对象是你指定的对象。原创 2024-11-06 19:47:33 · 1028 阅读 · 0 评论 -
常见的排序算法
算法的学习也是有着阶段性的,从入门到简单,再到复杂,再到简单。最后的简单是当你达到一定高度之后对于问题能够准确的找到最简单的解答。就如同修仙一样,真正的高手一招足以击退万马千军!算法里边最常用也是最基本的就是排序算法和查找算法了,本文主要讲解算法里边最经典的十大排序算法。在这里我们根据他们各自的实现原理以及效率将十大排序算法分为两大类:非线性比较类排序:非线性是指算法的时间复杂度不能突破(nlogn),元素之间通过比较大小来决定先后顺序。原创 2024-10-30 21:22:43 · 533 阅读 · 0 评论 -
Netty介绍,Jetty与Netty区别
Netty是一个高性能的nio网络通信框架用于开发高性能的网络服务器和客户端 提供了简单强大的Api使得网络编程更加简单。原创 2024-10-29 21:26:26 · 286 阅读 · 0 评论 -
读懂类的加载过程及双亲委派设计
我们知道 Java 是先通过编译器将.java类文件转成.class字节码文件,然后再通过虚拟机将.class字节码文件加载到内存中来实现应用程序的运行。那么虚拟机是什么时候加载class文件?如何加载class文件?class文件进入到虚拟机后发生了哪些变化?今天我们就一起来了解一下,虚拟机是如何加载类文件的。如果要查找类加载器,通过方法可以获取。从运行结果可以看到,当前的类加载器是,它的上一级是,再上一级是null。其实的上一级是有类加载器的,它叫。原创 2024-10-29 14:15:41 · 956 阅读 · 0 评论 -
如果你提交任务时,线程池队列已满,这时会发生什么?
• 创建一个简单的。原创 2024-10-28 20:17:24 · 774 阅读 · 0 评论 -
调用链追踪MDC如何使用?
MDC(Mapped Diagnostic Context,映射调试上下文)是日志框架(如log4j、logback等)提供的一种功能,允许开发者在日志消息中嵌入额外的上下文信息。这些信息可以在日志处理过程中跨多个日志语句和跨多个线程传递,非常适合用于链路追踪。在微服务架构中,MDC成为了调用链追踪的利器,帮助开发者追踪请求在整个系统中的处理流程。原创 2024-10-28 20:11:13 · 583 阅读 · 0 评论 -
类加载机制与类加载器
类加载机制与类加载器是Java虚拟机(JVM)中非常重要的概念,它们共同管理着Java类的加载过程,确保类的正确性和安全性。原创 2024-10-28 20:06:58 · 1066 阅读 · 0 评论 -
Java如何实现动态代理?
1.JDK动态代理• 只能代理接口。• 无需第三方库,JDK原生支持。• 实现简单,性能较高。2.CGLIB动态代理• 可以代理类和接口。• 需要引入第三方库(CGLIB)。• 实现稍复杂,性能稍低(因为生成子类并重写方法)。通过这两种方式,可以在运行时动态生成代理对象,从而实现方法调用的拦截、增强等功能,广泛用于AOP(面向切面编程)等场景。原创 2024-10-28 11:07:14 · 800 阅读 · 0 评论 -
【多线程与高并发】ReentrantLock示例讲解
是 Java 提供的显式锁(明确地进行锁定和解锁操作),相对于隐式锁而言,提供了更多的功能和灵活性。例如,它可以支持公平锁、非公平锁、尝试获取锁、可中断锁等。原创 2024-10-25 21:09:31 · 552 阅读 · 0 评论 -
幂等设计的8种实现方式
接口幂等性就是用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因为多次点击而产生了副作用。比如:公交车刷卡,用户上车后刷码支付扣款成功,如果用户再次点击按钮刷卡并扣款成功,用户查询余额返发现多扣钱了,流水记录也变成了两条,这就没有保证接口的幂等性。因此,当你重复刷卡时,会提示:刷码重复。注意:数据库可能产生幂等性问题,但是幂等性问题不只发生在数据库。原创 2024-10-25 21:07:04 · 687 阅读 · 0 评论 -
雪花算法结合Hutool工具:唯一ID工具-IdUtil
这10位可以进一步细分为数据中心ID和工作机器ID,各占5位,以支持最多32个数据中心和每个数据中心最多32个工作节点。leaf是专门生成id的应用,上面的服务才是业务服务,leaf是中间生成id的服务,是靠基于数据库去生成的id,每次取一次id,去更新服务,更新加1000,可以水平扩容。第四部分 用12个bit位来表示递增的序列号 (用于标识同一毫秒内生成的不同ID,支持每个节点每毫秒产生4096个唯一的ID)的一个算法 ,他会得到一个64位长度的long类型的数据,其中这64位的数据,有四个部分组成。原创 2024-10-24 19:38:52 · 1284 阅读 · 0 评论 -
分布式唯一Id(雪花算法)原理+对比+方案
雪花算法(Snowflake)是由Twitter开源的一种分布式ID生成算法,其核心思想是将64位的long型ID分为四个部分,分别为:符号位、时间戳、工作机器ID、序列号。原创 2024-10-24 14:02:41 · 890 阅读 · 0 评论 -
什么是单点登录,SpringBoot实现单点登录的实现详解
在介绍实现单点登录之前,让我们先了解一下JWT。JWT是一种基于JSON格式的开放标准(RFC 7519),用于在不同的应用程序之间安全地传输信息。标头(Header):包含JWT的类型和使用的签名算法。负载(Payload):包含实际的信息。签名(Signature):使用私钥生成的签名,用于验证JWT的真实性。JWT通常在身份验证过程中使用,以便在不需要存储用户信息的情况下验证用户身份。由于JWT是基于标准化的JSON格式构建的,因此在多种编程语言中都可以轻松地实现和解析。原创 2024-10-24 10:55:26 · 926 阅读 · 0 评论 -
线程池原理最全详解(图文全面总结)
当任务队列已满,且线程池中的线程数已经达到 maximumPoolSize 时,线程池无法接纳更多任务,这时线程池会使用预设的 饱和策略 来处理这个任务。如果核心线程数小于 corePoolSize,或者有核心线程处于空闲状态,线程池会直接创建一个新的核心线程来执行这个任务。如果核心线程都在执行任务,且线程数量已经达到 corePoolSize,则任务不会立即创建新的线程,而是进入任务队列。比如:创建一个固定大小的线程池,当所有线程都在执行任务时,新的任务会进入任务队列等待执行。原创 2024-10-23 19:25:17 · 305 阅读 · 0 评论 -
远程调用的几种常见方式
它通过发送和接收消息来实现系统之间的通信。RPC是一种远程调用协议,最经典的框架就是dubbo,在老一些的分布式系统中dubbo还是很常用的,RPC最明显的优点就是使用简单,它屏蔽了底层通信细节,允许客户端直接调用服务器上的函数或服务,在形式上可以像调用本地函数或服务一样去调用远程的函数或服务,使用过dubbo的应该对此深有感触,这也是其区别于HTTP的重要之处。这里说的远程调用指的是进程间的交互,我们常用的前后端通过HTTP接口发起的网络请求也是属于远程调用,那么,除了HTTP外,还有哪些常见方式呢?原创 2024-10-23 19:21:24 · 124 阅读 · 0 评论 -
synchronized和volatile的区别
在这里总结一下,在使用synchronized关键字的时候,本质上是否获得锁,是通过修改锁对象头中的markword的内容来标记是否获得锁,并由虚拟机来根据具体的应用场景来锁进行升级。原创 2024-10-23 16:39:09 · 821 阅读 · 0 评论 -
sychronized和ReentrantLock的区别?
1.实现方式是Java关键字,由JVM实现;是一个具体的类。2.锁的获取和释放自动获取和释放锁;需要显式地调用lock()和unlock()方法。3.灵活性提供了更多的功能,如尝试获取锁、中断等待锁的线程、超时获取锁等。4.锁的公平性可以指定为公平锁或非公平锁;只能是非公平锁。5.使用范围可以修饰方法和代码块;只能用于代码块。原创 2024-10-23 15:55:49 · 641 阅读 · 0 评论 -
同步: 同步就是发起一个调用后,被调用者未处理完请求之前,调用不返回。
I/O模型,它使用单个线程来处理多个请求,这些请求可以同时被这个线程处理,它通过轮询的方式来处理I/O请求,如果有I/O请求就处理,没有就继续轮询。异步就是发起一个调用后,立刻得到被调用者的回应表示已接收到请求,但是被调用者并没有返回结果,此时我们可以处理其他的请求,被调用者通常依靠事件,回调等。BIO NIO AIO 是Java中用于I/O操作的三种不同的编程模型。I/O模型,这种模型不需要为每个请求创建一个线程,由操作系统内部的线程来处理I/O请求,同时它也具有非阻塞的特性,I/原创 2024-10-23 15:47:37 · 401 阅读 · 0 评论 -
SpringBoot动态加载pdf
iText 7 是 iText 软件的一个主要版本,它是一个用于处理 PDF 文档的强大 Java 库。iText 7 提供了一系列的功能,使得开发者能够创建、修改、合并、分割、保护和转换 PDF 文件。与之前的版本相比,iText 7 在架构上进行了重大改进,并且增加了许多新特性。3.1、模块化架构。原创 2024-10-23 15:39:08 · 834 阅读 · 0 评论 -
说说你了解的分布式锁实现
同时,数据库锁没有失效时间,未获得锁的进程只能一直等待已获得锁的进程主动释放锁,可能导致死锁问题。• 基于ZooKeeper的锁实现使用了Curator框架,该框架提供了更高层次的抽象和简化的API来与ZooKeeper交互。由于基于数据库的锁实现通常依赖于数据库的唯一约束,因此这里给出一个简化的SQL语句示例,而不是完整的Java代码。• 基于Redis的锁实现使用了Jedis客户端库,并展示了如何尝试获取锁和释放锁。当需要获取锁时,向数据库中插入一条记录,如果插入成功,则表示获取锁成功;原创 2024-10-22 22:01:42 · 685 阅读 · 0 评论 -
如何实现接口幂等性?
接口幂等性简单来说,就是需要确保一个操作无论执行多少次,其结果和对系统状态的影响都与执行一次相同。换个维度,也可以理解为对于相同的请求,无论请求多少次,都应该返回相同的结果。(即重复请求获得相同的响应,而不应该产生额外的副作用)。注:幂等性的概念并不局限于分布式系统,它同样适用于单机架构。幂等性是一种设计原则,确保了操作的一致性和可预测性。原创 2024-10-22 16:04:22 · 488 阅读 · 0 评论 -
Excel上传和下载
【代码】Excel上传和下载。原创 2024-10-22 15:55:31 · 422 阅读 · 0 评论 -
蚂蚁拼车小程序开发
src/api原来这种:封装请求为对象中的方法直接定义请求函数感受:原来的更直观一些 看起来更明了直接定义请求函数其中:baseUrl 使用的ip地址 不建议使用 localhost 后面如果真机调试 无法使用uni.getStorageSync() 和 uni.setStorageSync() 是在多端应用开发框架中,用于操作本地存储的方法。这些方法是同步的uni.clearStorageSync() 用于清除所有通过 uni.setStorageSync 存储在本地缓存中的数据。原创 2024-10-21 20:55:20 · 541 阅读 · 0 评论 -
RuoYi 前后端分离
ruoyi框架优秀的性能表现、多种组件的支持、强大的代码生成器以及丰富的代码示例使得它成为了一个优秀的轻量级开源快速开发框架,完全可以满足一些需求不高的开发。若依框架的优缺点优点:1、高度集成的开发框架,支持快速开发和部署。2、代码简单清晰明了,易于维护。3、提供了自定义组件等功能,可满足各种需求。4、采用前后端分离的设计思路,使应用更加灵活,易于扩展。缺点:1、使用ruoyi框架需要一定的JavaWeb开发经验,在没有JavaWeb基础的情况下,上手可能会困难。原创 2024-10-21 20:45:08 · 647 阅读 · 0 评论 -
HashMap底层原理
数据结构:数组+链表(+红黑树)的形式JDK1.7的时候使用的是头插法,在JDK1.8的时候使用尾插法HashMap中的put()和get()的实现原理允许null键和null值,因为key值唯一(不能重复),因此,null键只有一个,也就是只允许有一个k为null。。容量默认为 16:2。原创 2024-10-21 20:36:04 · 666 阅读 · 0 评论 -
国内6款不错的项目管理SaaS平台(PingCode、Worktile、Teambition、禅道、TAPD、云效)
国内比较好的6款平台包括:PingCode、Worktile、Teambition、禅道、TAPD、云效。下面我们将这几款产品进行深入的对比。项目管理平台能够通过集中化的任务分配、进度跟踪和,项目管理工具确保所有团队成员都对目标、职责和截止日期有清晰的认识。这种透明和协调的工作环境有助于避免误解和冗余工作,使团队能够更快速、更有效地完成任务。此外,这些平台提供的数据分析和报告功能,使管理层能够及时评估项目进展和团队绩效,从而做出更加明智的决策。但。原创 2024-10-21 13:58:13 · 860 阅读 · 0 评论 -
Linux 使用bash文件以守护进程运行java -jar
我用的是之前的仓储管理系统,前端的URL改成虚拟机的地址就行了,然后运行,这个日志文件不是实时更新的,需要重新打开才能看到最新的日志。首先创建一个shell脚本,可以自己定义放在虚拟机的某个文档中,我放在了opt目录下,这个目录可以自己定义,起名为 app.sh。如果运行后出现以下错误,是说明app.sh里面有一些空格。然后重新启动就行了,可以在日志文件中查看运行日志。想要保证后台运行java -jar,可以使用。如果没有的话,可以下载一个JDK,使用命令。然后就直接重新运行就好了,下面是运行日志。原创 2024-10-19 15:15:27 · 218 阅读 · 0 评论 -
低代码平台了解
低代码平台如宜搭(YiDa)在提高开发效率、降低开发门槛和易于维护等方面具有明显优势,但也存在定制化能力有限、性能问题和学习曲线等缺点。选择是否使用低代码平台,需根据具体的业务需求、团队能力和项目规模来综合考虑。对于简单的应用和快速迭代的场景,低代码平台是一个很好的选择;而对于复杂和定制化的需求,可能需要结合传统的开发方式。原创 2024-10-19 15:11:35 · 338 阅读 · 0 评论 -
快递100,快递100单号实时在线查询
快递100登录。原创 2024-10-19 14:37:04 · 232 阅读 · 0 评论 -
java设计模式
Java中的23种设计模式是软件工程中经过反复验证和应用的优秀解决方案,旨在帮助开发人员解决特定类型的问题,提高代码的可维护性、可扩展性和重用性。这些设计模式可以分为创建型模式、结构型模式和行为型模式三大类。原创 2024-10-19 14:18:18 · 786 阅读 · 0 评论 -
QPS & TPS
QPS是指每秒查询率(Queries Per Second),也被称为每秒请求率,指的是系统处理每秒钟的请求数量。在计算机界,QPS通常用于衡量系统的性能、稳定性和吞吐量。通常来说,QPS越高,意味着系统能够处理更多的请求,而QPS较低则意味着系统处理能力有限。QPS在网站、数据库、服务器等领域中都有广泛的应用。原创 2024-10-19 14:11:10 · 215 阅读 · 0 评论 -
MySQL分库分表原理
Apache ShardingSphere是一套开源的分布式数据库中间件解决方案组成的生态圈,它由Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar(计划中)这3款相互独立的产品组成,既能够独立部署,又支持混合部署配合使用的产品组成。功能特性:它们均提供标准化的数据水平扩展分布式事务和分布式治理等功能,可适用于如 Java 同构、异构语言、云原生等各种多样化的应用场景。概览 :: ShardingSphere (apache.org)原创 2024-10-18 20:39:14 · 1012 阅读 · 0 评论 -
Excel批量导入、导出
使用批处理执行器时,你应该注意以下几点:确保在会话结束时正确提交或回滚事务,以避免数据不一致。批处理执行器可能会占用更多的数据库连接资源,因此在使用时要考虑数据库的连接池配置。由于批处理执行器会延迟SQL语句的执行,因此在执行过程中可能会遇到一些与立即执行SQL语句不同的行为(例如,某些数据库约束可能在批处理结束时才得到验证)。原创 2024-10-18 17:45:55 · 959 阅读 · 0 评论 -
pdmaner数据建模的使用(数据库建模,逆向生成各个业务代码)
PDManer基于ES6+React+Electron+Java构建,技术架构设计合理。自发布以来,PDManer经历了多个版本的迭代更新,不断优化和提升用户体验。例如,PDManer v4.1.0版本就增加了字段扩展属性、优化了表头设置、改进了启动界面和系统设置等。原创 2024-10-18 17:20:24 · 1016 阅读 · 0 评论 -
微信公众号开发
微信公众平台微信公众平台,给个人、企业和组织提供业务服务与用户管理能力的全新服务平台。原创 2024-10-17 22:07:29 · 355 阅读 · 0 评论 -
Logback日志配置
在Spring Boot中,日志组件的设计遵循了门面模式(Facade Pattern)的概念。门面模式是一种结构型设计模式,它提供了一个统一的接口来访问子系统中的一群接口。这可以简化客户端与子系统之间的交互,同时提供了一层抽象,使系统更加灵活和易于维护。在日志处理方面,Spring Boot使用SLF4J(Simple Logging Facade for Java)作为门面。SLF4J是一个抽象层,它为Java平台上的多种日志框架提供了一个统一的接口。原创 2024-10-17 22:02:35 · 425 阅读 · 0 评论 -
跨域问题及常用的5种解决方案
跨域问题通常指的是在浏览器中由于同源策略的限制而产生的问题。同源策略(Same-origin policy)是浏览器的一种安全措施,它要求请求的域名、协议和端口必须与提供资源的网站相同。当一个网页尝试访问另一个来源(即不同域名、协议或端口)的数据时,那么后端返回给浏览器的数据被浏览器拦截下来,这就是跨域。原创 2024-10-17 22:00:13 · 995 阅读 · 0 评论 -
枚举实现单例模式
枚举类型是一种特殊的类,它允许你定义一组命名的常量。这些常量通常是不可变的,并且在编译时就确定了。枚举类通过enum关键字来定义。每个枚举实例都是该枚举类型的对象,并且这些实例是固定的,不能动态创建。原创 2024-10-16 20:56:17 · 304 阅读 · 0 评论 -
单点登录的原理
单点登录(Single Sign-On, SSO)是一种身份验证机制,它允许用户在一个地方进行一次登录后,就能够访问多个相关但独立的系统或应用程序,而无需在每个系统中重复输入用户名和密码。简单来说,就是“登录一次,到处通行”。原创 2024-10-16 20:48:05 · 345 阅读 · 0 评论 -
SpringBoot+Flowable 完美结合,优雅实现工作流!
对于业务建模,我们需要一种通用的语言来描绘,这样在沟通上和实现上会降低难度,就像中文、英文一样,BPMN2.0便是一种国际通用的建模语言,他能让自然人轻松阅读,更能被计算机所解析。协议中元素的主要分类为,事件-任务-连线-网关。一个流程必须包含一个事件(如:开始事件)和至少一个结束(事件)。其中网关的作用是流程流转逻辑的控制。任务则分很多类型,他们各司其职,所有节点均由连线联系起来。下面我就以每种类型的节点简单地概括一下其作用。Flowable。原创 2024-10-16 14:33:28 · 1318 阅读 · 1 评论