
java
文章平均质量分 78
这孩子叫逆
要么不做,要么做好
展开
-
聊聊保证线程安全的9个小技巧
weakCompareAndSetInt()方法中,通过偏移量offset从对象o中获取字段的当前值,然后比较当前值和传入的期望值是否相等,如果相等,则将字段的值更新为x,返回true,如果不相等,则不会执行更新操作,返回false。1、单独操作:上述我们的demo中,出现了两个线程A、B,它们分别调用get()、put()方法,虽然看起来像是在组合操作,但实际上对于单个线程而言,这是单独操作,是线程安全的。如果synchronized(其他对象),则锁的对象是你指定的对象。原创 2024-11-06 19:47:33 · 1317 阅读 · 0 评论 -
常见的排序算法
算法的学习也是有着阶段性的,从入门到简单,再到复杂,再到简单。最后的简单是当你达到一定高度之后对于问题能够准确的找到最简单的解答。就如同修仙一样,真正的高手一招足以击退万马千军!算法里边最常用也是最基本的就是排序算法和查找算法了,本文主要讲解算法里边最经典的十大排序算法。在这里我们根据他们各自的实现原理以及效率将十大排序算法分为两大类:非线性比较类排序:非线性是指算法的时间复杂度不能突破(nlogn),元素之间通过比较大小来决定先后顺序。原创 2024-10-30 21:22:43 · 578 阅读 · 0 评论 -
Netty介绍,Jetty与Netty区别
Netty是一个高性能的nio网络通信框架用于开发高性能的网络服务器和客户端 提供了简单强大的Api使得网络编程更加简单。原创 2024-10-29 21:26:26 · 507 阅读 · 0 评论 -
读懂类的加载过程及双亲委派设计
我们知道 Java 是先通过编译器将.java类文件转成.class字节码文件,然后再通过虚拟机将.class字节码文件加载到内存中来实现应用程序的运行。那么虚拟机是什么时候加载class文件?如何加载class文件?class文件进入到虚拟机后发生了哪些变化?今天我们就一起来了解一下,虚拟机是如何加载类文件的。如果要查找类加载器,通过方法可以获取。从运行结果可以看到,当前的类加载器是,它的上一级是,再上一级是null。其实的上一级是有类加载器的,它叫。原创 2024-10-29 14:15:41 · 988 阅读 · 0 评论 -
Spring用到了哪些设计模式?
Spring框架在很多地方使用策略模式,例如在事务管理中使用不同的事务管理策略(如JDBC、JTA),在视图解析器(ViewResolver)中使用不同的视图解析策略(如JSP、Thymeleaf)。:当Spring容器启动时,会为每个作用域为singleton的Bean创建并维护一个单实例对象,这些对象会被存储在一个缓存中,从而确保每次注入时都是同一个实例。:在Spring AOP中,代理对象(代理类)就是对目标对象的增强(装饰),可以动态地为目标对象添加新的行为(如方法拦截、日志记录、事务管理等)。原创 2024-10-29 13:59:56 · 1610 阅读 · 0 评论 -
介绍一下 PageHelper 实现分页原理
• PageHelper 提供了丰富的配置选项和自定义功能,如是否支持带有“for update”的查询语句、是否支持嵌套查询等。• 开发者可以通过配置文件或注解等方式来灵活配置和使用 PageHelper。原创 2024-10-29 13:56:07 · 1410 阅读 · 0 评论 -
如果你提交任务时,线程池队列已满,这时会发生什么?
• 创建一个简单的。原创 2024-10-28 20:17:24 · 1415 阅读 · 0 评论 -
类加载机制与类加载器
类加载机制与类加载器是Java虚拟机(JVM)中非常重要的概念,它们共同管理着Java类的加载过程,确保类的正确性和安全性。原创 2024-10-28 20:06:58 · 1110 阅读 · 0 评论 -
Java如何实现动态代理?
1.JDK动态代理• 只能代理接口。• 无需第三方库,JDK原生支持。• 实现简单,性能较高。2.CGLIB动态代理• 可以代理类和接口。• 需要引入第三方库(CGLIB)。• 实现稍复杂,性能稍低(因为生成子类并重写方法)。通过这两种方式,可以在运行时动态生成代理对象,从而实现方法调用的拦截、增强等功能,广泛用于AOP(面向切面编程)等场景。原创 2024-10-28 11:07:14 · 890 阅读 · 0 评论 -
【多线程与高并发】ReentrantLock示例讲解
是 Java 提供的显式锁(明确地进行锁定和解锁操作),相对于隐式锁而言,提供了更多的功能和灵活性。例如,它可以支持公平锁、非公平锁、尝试获取锁、可中断锁等。原创 2024-10-25 21:09:31 · 583 阅读 · 0 评论 -
幂等设计的8种实现方式
接口幂等性就是用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因为多次点击而产生了副作用。比如:公交车刷卡,用户上车后刷码支付扣款成功,如果用户再次点击按钮刷卡并扣款成功,用户查询余额返发现多扣钱了,流水记录也变成了两条,这就没有保证接口的幂等性。因此,当你重复刷卡时,会提示:刷码重复。注意:数据库可能产生幂等性问题,但是幂等性问题不只发生在数据库。原创 2024-10-25 21:07:04 · 823 阅读 · 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 · 3860 阅读 · 0 评论 -
分布式唯一Id(雪花算法)原理+对比+方案
雪花算法(Snowflake)是由Twitter开源的一种分布式ID生成算法,其核心思想是将64位的long型ID分为四个部分,分别为:符号位、时间戳、工作机器ID、序列号。原创 2024-10-24 14:02:41 · 1961 阅读 · 0 评论 -
什么是单点登录,SpringBoot实现单点登录的实现详解
在介绍实现单点登录之前,让我们先了解一下JWT。JWT是一种基于JSON格式的开放标准(RFC 7519),用于在不同的应用程序之间安全地传输信息。标头(Header):包含JWT的类型和使用的签名算法。负载(Payload):包含实际的信息。签名(Signature):使用私钥生成的签名,用于验证JWT的真实性。JWT通常在身份验证过程中使用,以便在不需要存储用户信息的情况下验证用户身份。由于JWT是基于标准化的JSON格式构建的,因此在多种编程语言中都可以轻松地实现和解析。原创 2024-10-24 10:55:26 · 1372 阅读 · 0 评论 -
Java序列化和反序列化详解
Java序列化和反序列化是Java编程中重要的一个部分,在需要进行对象的跨进程、跨网络传输等场景中,会带来很大的便利。然而,在使用过程中,需要注意版本兼容性、性能影响以及安全问题,并对可能的安全漏洞进行防范。通过理解和正确使用Java的序列化机制,我们可以更有效地存储和传输对象状态。原创 2024-10-23 20:56:46 · 1108 阅读 · 0 评论 -
线程池原理最全详解(图文全面总结)
当任务队列已满,且线程池中的线程数已经达到 maximumPoolSize 时,线程池无法接纳更多任务,这时线程池会使用预设的 饱和策略 来处理这个任务。如果核心线程数小于 corePoolSize,或者有核心线程处于空闲状态,线程池会直接创建一个新的核心线程来执行这个任务。如果核心线程都在执行任务,且线程数量已经达到 corePoolSize,则任务不会立即创建新的线程,而是进入任务队列。比如:创建一个固定大小的线程池,当所有线程都在执行任务时,新的任务会进入任务队列等待执行。原创 2024-10-23 19:25:17 · 412 阅读 · 0 评论 -
synchronized和volatile的区别
在这里总结一下,在使用synchronized关键字的时候,本质上是否获得锁,是通过修改锁对象头中的markword的内容来标记是否获得锁,并由虚拟机来根据具体的应用场景来锁进行升级。原创 2024-10-23 16:39:09 · 872 阅读 · 0 评论 -
sychronized和ReentrantLock的区别?
1.实现方式是Java关键字,由JVM实现;是一个具体的类。2.锁的获取和释放自动获取和释放锁;需要显式地调用lock()和unlock()方法。3.灵活性提供了更多的功能,如尝试获取锁、中断等待锁的线程、超时获取锁等。4.锁的公平性可以指定为公平锁或非公平锁;只能是非公平锁。5.使用范围可以修饰方法和代码块;只能用于代码块。原创 2024-10-23 15:55:49 · 762 阅读 · 0 评论 -
同步: 同步就是发起一个调用后,被调用者未处理完请求之前,调用不返回。
I/O模型,它使用单个线程来处理多个请求,这些请求可以同时被这个线程处理,它通过轮询的方式来处理I/O请求,如果有I/O请求就处理,没有就继续轮询。异步就是发起一个调用后,立刻得到被调用者的回应表示已接收到请求,但是被调用者并没有返回结果,此时我们可以处理其他的请求,被调用者通常依靠事件,回调等。BIO NIO AIO 是Java中用于I/O操作的三种不同的编程模型。I/O模型,这种模型不需要为每个请求创建一个线程,由操作系统内部的线程来处理I/O请求,同时它也具有非阻塞的特性,I/原创 2024-10-23 15:47:37 · 433 阅读 · 0 评论 -
Servlet生命周期
在Java Web应用程序中,详细描述Servlet的生命周期,包括Servlet何时被创建、初始化、提供服务以及销毁的具体时机和过程,并说明在Servlet生命周期的各个阶段中,哪些方法会被容器调用。原创 2024-10-23 15:44:19 · 312 阅读 · 0 评论 -
SpringBoot动态加载pdf
iText 7 是 iText 软件的一个主要版本,它是一个用于处理 PDF 文档的强大 Java 库。iText 7 提供了一系列的功能,使得开发者能够创建、修改、合并、分割、保护和转换 PDF 文件。与之前的版本相比,iText 7 在架构上进行了重大改进,并且增加了许多新特性。3.1、模块化架构。原创 2024-10-23 15:39:08 · 909 阅读 · 0 评论 -
HashMap底层原理
数据结构:数组+链表(+红黑树)的形式JDK1.7的时候使用的是头插法,在JDK1.8的时候使用尾插法HashMap中的put()和get()的实现原理允许null键和null值,因为key值唯一(不能重复),因此,null键只有一个,也就是只允许有一个k为null。。容量默认为 16:2。原创 2024-10-21 20:36:04 · 686 阅读 · 0 评论 -
国内6款不错的项目管理SaaS平台(PingCode、Worktile、Teambition、禅道、TAPD、云效)
国内比较好的6款平台包括:PingCode、Worktile、Teambition、禅道、TAPD、云效。下面我们将这几款产品进行深入的对比。项目管理平台能够通过集中化的任务分配、进度跟踪和,项目管理工具确保所有团队成员都对目标、职责和截止日期有清晰的认识。这种透明和协调的工作环境有助于避免误解和冗余工作,使团队能够更快速、更有效地完成任务。此外,这些平台提供的数据分析和报告功能,使管理层能够及时评估项目进展和团队绩效,从而做出更加明智的决策。但。原创 2024-10-21 13:58:13 · 2248 阅读 · 0 评论 -
java设计模式
Java中的23种设计模式是软件工程中经过反复验证和应用的优秀解决方案,旨在帮助开发人员解决特定类型的问题,提高代码的可维护性、可扩展性和重用性。这些设计模式可以分为创建型模式、结构型模式和行为型模式三大类。原创 2024-10-19 14:18:18 · 810 阅读 · 0 评论 -
QPS & TPS
QPS是指每秒查询率(Queries Per Second),也被称为每秒请求率,指的是系统处理每秒钟的请求数量。在计算机界,QPS通常用于衡量系统的性能、稳定性和吞吐量。通常来说,QPS越高,意味着系统能够处理更多的请求,而QPS较低则意味着系统处理能力有限。QPS在网站、数据库、服务器等领域中都有广泛的应用。原创 2024-10-19 14:11:10 · 308 阅读 · 0 评论 -
MySQL分库分表原理
Apache ShardingSphere是一套开源的分布式数据库中间件解决方案组成的生态圈,它由Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar(计划中)这3款相互独立的产品组成,既能够独立部署,又支持混合部署配合使用的产品组成。功能特性:它们均提供标准化的数据水平扩展分布式事务和分布式治理等功能,可适用于如 Java 同构、异构语言、云原生等各种多样化的应用场景。概览 :: ShardingSphere (apache.org)原创 2024-10-18 20:39:14 · 1093 阅读 · 0 评论 -
Excel批量导入、导出
使用批处理执行器时,你应该注意以下几点:确保在会话结束时正确提交或回滚事务,以避免数据不一致。批处理执行器可能会占用更多的数据库连接资源,因此在使用时要考虑数据库的连接池配置。由于批处理执行器会延迟SQL语句的执行,因此在执行过程中可能会遇到一些与立即执行SQL语句不同的行为(例如,某些数据库约束可能在批处理结束时才得到验证)。原创 2024-10-18 17:45:55 · 1070 阅读 · 0 评论 -
pdmaner数据建模的使用(数据库建模,逆向生成各个业务代码)
PDManer基于ES6+React+Electron+Java构建,技术架构设计合理。自发布以来,PDManer经历了多个版本的迭代更新,不断优化和提升用户体验。例如,PDManer v4.1.0版本就增加了字段扩展属性、优化了表头设置、改进了启动界面和系统设置等。原创 2024-10-18 17:20:24 · 2423 阅读 · 0 评论 -
Logback日志配置
在Spring Boot中,日志组件的设计遵循了门面模式(Facade Pattern)的概念。门面模式是一种结构型设计模式,它提供了一个统一的接口来访问子系统中的一群接口。这可以简化客户端与子系统之间的交互,同时提供了一层抽象,使系统更加灵活和易于维护。在日志处理方面,Spring Boot使用SLF4J(Simple Logging Facade for Java)作为门面。SLF4J是一个抽象层,它为Java平台上的多种日志框架提供了一个统一的接口。原创 2024-10-17 22:02:35 · 494 阅读 · 0 评论 -
跨域问题及常用的5种解决方案
跨域问题通常指的是在浏览器中由于同源策略的限制而产生的问题。同源策略(Same-origin policy)是浏览器的一种安全措施,它要求请求的域名、协议和端口必须与提供资源的网站相同。当一个网页尝试访问另一个来源(即不同域名、协议或端口)的数据时,那么后端返回给浏览器的数据被浏览器拦截下来,这就是跨域。原创 2024-10-17 22:00:13 · 2214 阅读 · 0 评论 -
枚举实现单例模式
枚举类型是一种特殊的类,它允许你定义一组命名的常量。这些常量通常是不可变的,并且在编译时就确定了。枚举类通过enum关键字来定义。每个枚举实例都是该枚举类型的对象,并且这些实例是固定的,不能动态创建。原创 2024-10-16 20:56:17 · 497 阅读 · 0 评论 -
单点登录的原理
单点登录(Single Sign-On, SSO)是一种身份验证机制,它允许用户在一个地方进行一次登录后,就能够访问多个相关但独立的系统或应用程序,而无需在每个系统中重复输入用户名和密码。简单来说,就是“登录一次,到处通行”。原创 2024-10-16 20:48:05 · 403 阅读 · 0 评论 -
SpringBoot+Flowable 完美结合,优雅实现工作流!
对于业务建模,我们需要一种通用的语言来描绘,这样在沟通上和实现上会降低难度,就像中文、英文一样,BPMN2.0便是一种国际通用的建模语言,他能让自然人轻松阅读,更能被计算机所解析。协议中元素的主要分类为,事件-任务-连线-网关。一个流程必须包含一个事件(如:开始事件)和至少一个结束(事件)。其中网关的作用是流程流转逻辑的控制。任务则分很多类型,他们各司其职,所有节点均由连线联系起来。下面我就以每种类型的节点简单地概括一下其作用。Flowable。原创 2024-10-16 14:33:28 · 3302 阅读 · 1 评论 -
RestfulApi & RestTemplate统一返回格式
Restful API 是一种设计风格,代表了使用 HTTP 协议构建 web 服务的一种架构原则。REST(Representational State Transfer)的核心思想是,通过 URL 定位资源,使用 HTTP 方法(GET, POST, PUT, DELETE 等)来描述对该资源的操作。:用于检索资源,应该是幂等的,即多次请求具有相同的效果。:用于创建新资源,请求体通常包含要创建的资源数据。:用于更新已有资源的全部信息,也是幂等的。:用于更新资源的部分属性,非幂等。:用于删除资源,幂等。原创 2024-10-15 21:24:19 · 318 阅读 · 0 评论 -
JAVA锁的机制
公平锁/非公平锁可重入锁/不可重入锁独占锁/共享锁互斥锁/读写锁乐观锁/悲观锁分段锁偏向锁/轻量级锁/重量级锁自旋锁但这些锁并不完全指的是锁,有的是锁设计,有的是锁状态,也有的是锁的特性。下面就介绍一下关于这些锁锁机制的目的是解决线程安全问题,而使用锁机制必然会导致性能的降低,因为从并发变为了同步。悲观锁、独占锁等会导致线程阻塞,比较重,为了尽可能的减少对性能的影响,就出现了乐观锁,自旋锁,通过其他方式来达到线程安全的目的,但这种锁一般只使用在并发量不高的情况下。原创 2024-10-14 17:35:14 · 1849 阅读 · 0 评论 -
Tomcat部署war包
java war包原创 2024-10-12 14:50:51 · 219 阅读 · 0 评论 -
跟踪用户状态,http协议无状态 Cookie HttpSession,Session和Cookie的关系
跟踪用户状态指的是web应用能够分辨请求属于哪个用户,进而记录用户的状态,从而为用户提供连续的针对性的服务。比如有多个客户在同一个购物网站上购物,每一个用户都会有一个虚拟的购物车。当某个客户发送请求将商品添加到购物车时,Web服务器必须能识别请求属于哪个用户,从而将商品添加该用户的购物车中大多数的Web应用都需要跟踪用户状态,才能提供对应的服务。常见需要跟踪用户状态的应用:电子商务管理系统也有一些简单的Web应用不需要跟踪用户状态。一些不需要跟踪用户状态的应用:门户新闻网站软件下载网站。原创 2024-10-12 14:48:10 · 1030 阅读 · 0 评论 -
java web 之过滤器Filter
当访问服务器的资源时,Filter过滤器可以将请求拦截下来,完成一些特殊的功能。通常都是用来拦截request进行处理的,也可以对返回的response进行拦截处理。一般用于完成通用的操作。如:登录验证、统一编码处理、敏感字符过滤...原创 2024-10-12 14:42:08 · 581 阅读 · 0 评论 -
java web三大组件之Listener
注册监听:将事件、事件源、监听器绑定在一起。当事件源上发生某个事件后,执行监听器代码ServletContextListener 接口,它能够监听 ServletContext 对象的生命周期,实际上就是监听 Web 应用的生命周期。原创 2024-10-12 14:37:52 · 301 阅读 · 0 评论 -
JavaWeb三大组件之Servlet
Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容。原创 2024-10-11 21:59:29 · 1376 阅读 · 0 评论