
java技术
文章平均质量分 55
MRZHQ
这个作者很懒,什么都没留下…
展开
-
Java序列化和反序列化
在这些场景下,Java对象需要转换为字节流以便于存储和传输,接收方则需要将字节流转换为Java对象来恢复数据。反序列化在网络传输、缓存、持久化等场景下也是非常重要的,它可以方便地将字节流转换为Java对象,从而恢复数据。需要注意的是,Java序列化和反序列化可能存在一些安全问题,因为恶意用户可以通过序列化和反序列化来攻击系统。Java序列化和反序列化是指将Java对象转换为字节序列以便于存储和传输,并将字节序列转换回Java对象的过程。在Java中,可以使用Java序列化API来实现序列化和反序列化。原创 2023-02-22 21:39:04 · 327 阅读 · 0 评论 -
什么是自旋
自旋是一种计算机程序的等待技术,用于避免在等待某个事件完成时浪费CPU资源。在等待某个事件完成的同时,程序会在一个循环中反复检查事件是否已经完成,而不是直接进入睡眠状态或者阻塞状态。如果事件还没有完成,程序会继续在循环中自旋等待事件完成。自旋通常用于多线程编程中,特别是在锁竞争等高并发情况下,可以避免线程频繁地在用户态和内核态之间切换,从而提高程序的性能和响应速度。自旋等待的时间一般比较短,通常只有几个CPU周期,如果超过了一定的时间限制,程序会放弃自旋等待,转为进入睡眠状态或者阻塞状态,等待事件完成。原创 2023-02-22 07:12:38 · 953 阅读 · 0 评论 -
依赖注入和控制反转
依赖注入(Dependency Injection)和控制反转(Inversion of Control)是两个关键的设计模式,用于实现松耦合和可测试性。依赖注入是指将一个对象所依赖的其他对象的实例传递给它,而不是由它自己创建。这样做可以减少对象之间的依赖,提高代码的灵活性和可测试性。控制反转是指将对象的创建和管理交给外部容器,而不是由对象自己来创建和管理。控制反转的实现有两种方式:基于接口的控制反转和基于注解的控制反转。因此,依赖注入是一种实现松耦合的方式,而控制反转则是实现依赖注入的一种方法。原创 2023-02-21 21:39:15 · 618 阅读 · 0 评论 -
Redis 如何做内存优化?
在使用时需要根据实际情况选择合适的持久化策略,并设置合理的频率,避免频繁保存占用内存。合理设置过期时间:在使用Redis时,可以设置键值对的过期时间,当过期时间到达后,Redis会自动删除对应的键值对,释放内存空间。使用内存碎片整理工具:Redis在使用过程中会产生内存碎片,导致内存使用效率降低。可以使用Redis提供的内存碎片整理工具来整理内存碎片,提高内存使用效率。总之,Redis的内存优化需要综合考虑多个因素,包括数据结构、过期时间、持久化策略、内存策略等。原创 2023-02-21 21:36:39 · 2166 阅读 · 0 评论 -
redis 分布式锁有什么缺陷?
例如,如果锁的过期时间是1秒钟,但是某个进程或线程在执行某个操作时需要1.5秒钟,那么在这个操作执行完成之前锁就会被自动释放。例如,如果对整个Redis实例进行加锁,那么所有需要对Redis进行读写操作的线程都会被阻塞,影响整个系统的并发性能。高可用问题:如果使用Redis单实例进行分布式锁的实现,那么一旦Redis实例出现故障,整个分布式锁系统将会失效。死锁风险:分布式锁在获取锁和释放锁之间可能存在异常情况,如获取锁后崩溃或释放锁时网络异常,这可能导致死锁的情况。原创 2023-02-21 21:33:34 · 2503 阅读 · 0 评论 -
哨兵(Sentinel)和复制
Redis的哨兵(Sentinel)和复制(Replication)是Redis高可用性的两种实现方式。原创 2023-02-21 21:31:28 · 195 阅读 · 0 评论 -
Redis分布式锁和限流应用
Redis分布式锁和限流应用原创 2023-02-21 07:59:34 · 504 阅读 · 0 评论 -
Redis的应用场景
Redis的应用场景非常广泛,可以用于缓存系统、消息队列、分布式锁、计数器、排行榜等多种场景,这也是Redis受到广泛关注和应用的重要原因之一。原创 2023-02-21 07:53:52 · 368 阅读 · 0 评论 -
如何实现断点续传
文件分块下载是指将文件分成若干个固定大小的块,分别下载每个块,从而实现断点续传。客户端可以记录已经下载的块的信息,下次继续下载时,跳过已经下载的块,下载未下载的块。在进行断点续传时,客户端可以使用已经下载的数据的大小,设置Range头的范围值,从而继续下载未下载的数据。断点续传是指在网络传输中,当传输过程中出现异常或者用户主动停止传输时,能够恢复传输过程,避免重新传输已经传输过的数据,提高传输效率。这些工具通过自己的算法和协议,支持文件的分块下载和断点续传,并且能够提供更好的下载速度和稳定性。原创 2023-02-21 07:47:41 · 1679 阅读 · 0 评论 -
Spring的生命周期
在使用Spring框架时,我们需要根据实际需求,合理地配置Bean的生命周期和初始化方法,以保证系统的稳定性和性能。在实例化阶段,Spring框架会创建Bean实例,并根据Bean的定义,注入Bean的属性和依赖关系。在实例化阶段完成后,Spring框架会对Bean进行初始化。在初始化阶段,Spring框架会调用Bean的初始化方法,并执行各种初始化操作,例如数据源的初始化、连接的建立等。在销毁阶段,Spring框架会调用Bean的销毁方法,并执行各种清理操作,例如数据源的关闭、连接的释放等。原创 2023-02-21 07:45:09 · 7128 阅读 · 0 评论 -
Java网络编程性能调优
在进行Java网络编程性能调优时,需要综合考虑系统的整体架构、网络环境、应用场景等因素,采用合适的技术和方法来提高系统的性能和稳定性。原创 2023-02-21 07:41:57 · 214 阅读 · 0 评论 -
Java多线程之AQS及其应用
AQS是一个抽象类,它为实现同步器提供了一个框架。它的核心思想是,如果需要实现一种同步器,只需要定义一个继承自AQS的类,实现它提供的一些抽象方法,就可以实现同步器了。AQS内部维护了一个FIFO的双向队列,用来存放被阻塞的线程。同时,它还有两个重要的状态量,分别是state和exclusiveOwnerThread。其中,state表示同步状态,exclusiveOwnerThread表示持有锁的线程。AQS提供了两种同步模式:独占模式和共享模式。原创 2023-02-21 07:37:53 · 410 阅读 · 0 评论 -
【无标题】
在Java中,多线程并发访问共享变量可能会出现可见性和原子性问题。为了保证程序的正确性和稳定性,我们需要了解Java内存模型的基本概念和规则,以及如何使用同步机制来解决可见性和原子性问题。原创 2023-02-20 07:33:52 · 96 阅读 · 0 评论 -
Java内存模型的基本概念和规则
Java内存模型(Java Memory Model,简称JMM)定义了Java虚拟机在多线程环境下的内存管理规则。在多线程编程中,如果不了解Java内存模型的规则,可能会导致线程安全问题或性能问题。因此,了解Java内存模型的基本概念和规则是Java多线程编程的基础。原创 2023-02-20 07:29:14 · 180 阅读 · 0 评论 -
Java多线程之并发编程的性能瓶颈和优化方案
在Java编程中,为了提高程序的执行效率和吞吐量,我们通常会使用多线程并发编程。但是,并发编程也会带来一些性能上的瓶颈和挑战,如竞态条件、死锁、线程切换等问题,这些问题可能导致程序性能的下降,甚至出现程序崩溃等问题。因此,在进行并发编程时,需要注意性能瓶颈并采取一些优化方案来提高程序的性能和稳定性。原创 2023-02-20 07:20:58 · 1461 阅读 · 0 评论 -
Java多线程之同步工具的最佳实践和错误用法
Java同步工具在多线程编程中扮演着重要的角色,但要正确使用它们并不容易。在实际开发中,我们应该遵循最佳实践,避免常见的错误用法,才能保证程序的正确性和性能。同时,我们还应该了解每个同步工具的特点和适用场景,根据实际需求选择合适的同步工具。原创 2023-02-20 07:09:13 · 155 阅读 · 0 评论 -
Java多线程之高级并发编程的应用场景和实践
本节介绍了Java高级并发编程的应用场景和实践,包括并发编程的应用场景、使用线程池、锁和同步器、原子变量和CAS、线程安全的数据结构、避免死锁和活锁、使用volatile关键字、并发工具类和合理设计线程安全的程序等实践方法。volatile关键字可以保证变量的可见性,避免线程安全问题和数据不一致的情况。线程安全的数据结构可以避免线程安全问题和数据不一致的情况。合理设计线程安全的程序可以避免线程安全问题和数据不一致的情况。使用原子变量和CAS可以避免线程安全问题和数据不一致的情况。原创 2023-02-20 07:11:38 · 1468 阅读 · 0 评论 -
Java多线程之高级并发编程的基本概念和原则
在本节中,我们将介绍Java高级并发编程的基本概念和原则,帮助中高级Java程序员更好地理解并发编程,以及如何设计高效、稳定的并发程序。原创 2023-02-20 07:09:21 · 231 阅读 · 0 评论 -
Java多线程之同步工具的应用场景和实践
在前一节中,我们深入探讨了Java同步工具的实现原理和特点。在本节中,我们将重点关注Java同步工具的应用场景和实践,帮助中高级Java程序员更好地理解如何使用它们来解决实际的多线程编程问题。原创 2023-02-20 07:09:33 · 234 阅读 · 0 评论 -
Java多线程之同步工具的实现原理和特点
本节介绍了Java中常用的同步工具的实现原理和特点,包括锁、信号量、倒计时门闩和循环栅栏。不同的同步工具适用于不同的场景,我们应该根据实际情况选择合适的同步工具。同时,我们也要注意同步工具的性能和使用方式,避免出现性能问题和死锁等问题。原创 2023-02-20 07:09:27 · 195 阅读 · 0 评论 -
Java多线程之同步工具的类型和区别
一旦一个线程获得了该锁,其他线程就无法访问该对象的同步代码块,直到该线程释放锁。CyclicBarrier维护了一个计数器和一个屏障点,每个线程通过await()方法告知自己已经到达屏障点,计数器递增,直到计数器值达到指定数量时,所有线程同时被释放。倒计时门栓是一种同步工具,可以让一个或多个线程等待,直到其他线程完成一定的操作后才继续执行。在Java多线程编程中,同步工具是一种常见的技术,用于管理线程的同步和互斥。Java提供了许多同步工具,例如锁、信号量、倒计时门栓等。原创 2023-02-20 07:08:53 · 265 阅读 · 0 评论 -
Java多线程之同步工具的基本概念和使用
在Java多线程编程中,同步工具是一种常见的技术,用于管理线程的同步和互斥。Java提供了许多同步工具,例如锁、信号量、倒计时门栓等。本节将介绍Java同步工具的基本概念和使用。原创 2023-02-20 07:07:08 · 213 阅读 · 0 评论 -
Java多线程之线程池的常见问题和解决方案
线程池是Java多线程编程中的重要技术,通过管理线程的创建和销毁,可以提高程序的性能和稳定性。但是,在使用线程池时,需要注意一些常见问题,例如线程池过载和线程池阻塞。针对这些问题,我们可以采取相应的解决方案,以满足实际需求。原创 2023-02-19 08:53:06 · 3346 阅读 · 0 评论 -
Java多线程之线程池的监控和优化
在Java多线程编程中,线程池是一种常见的技术,用于管理线程的创建和销毁。线程池中的线程可以被重复利用,从而减少了线程的创建和销毁的开销,提高了程序的性能。在Java中,线程池的监控和优化也是非常重要的,可以帮助我们更好地管理线程池,提高程序的性能和稳定性。原创 2023-02-19 08:45:43 · 2811 阅读 · 0 评论 -
Java多线程之线程池的类型和区别
在前面的章节中,我们介绍了线程池的基本概念和使用方法。在Java中,线程池一共有四种类型:FixedThreadPool、CachedThreadPool、SingleThreadPool和ScheduledThreadPool。它们在使用场景和性能上有所不同。原创 2023-02-19 08:27:29 · 975 阅读 · 1 评论 -
Java多线程之线程池的基本概念和使用
在Java多线程编程中,线程的创建和销毁是需要一定开销的,如果频繁地创建和销毁线程,会影响程序的性能。因此,为了提高程序的性能,可以使用线程池来管理线程。原创 2023-02-19 08:24:43 · 184 阅读 · 0 评论 -
Java多线程之线程的异常处理
在多线程编程中,异常处理是一个重要的话题。由于多线程程序具有一定的不确定性,因此在多线程环境下,异常处理的问题会更加复杂。原创 2023-02-19 08:12:58 · 2419 阅读 · 0 评论 -
Java多线程之线程的死锁和解决方案
在多线程编程中,死锁是一种常见的问题。当两个或多个线程互相等待对方释放资源时,就会发生死锁。这种情况下,线程会被无限期地阻塞,程序也会一直等待,无法继续执行。Java中的死锁通常是由于多个线程同时获取多个锁,但是获取锁的顺序不一致,导致互相等待对方释放锁。下面介绍几种解决死锁的方案。原创 2023-02-19 07:58:04 · 2478 阅读 · 0 评论 -
Java多线程之线程安全性和同步机制
在多线程编程中,保证线程安全性是至关重要的。线程安全性是指多线程访问共享资源时,不会出现数据不一致、数据竞争等问题。Java提供了多种同步机制来保证线程安全性,下面将介绍Java线程的同步机制。原创 2023-02-19 07:55:54 · 736 阅读 · 0 评论 -
Java线程生命周期和状态
在线程的生命周期中,线程会经历不同的状态,这些状态反映了线程在不同时间点上的行为和状态。计时等待状态(Timed Waiting):当线程等待一定时间后自动恢复运行时,线程进入计时等待状态。等待状态(Waiting):当线程等待某个特定条件时,线程进入等待状态。新建状态(New):当线程对象创建时,线程处于新建状态。终止状态(Terminated):当线程执行完自己的任务后,线程进入终止状态,此时线程对象被销毁。运行状态(Running):当线程得到CPU的执行时间,线程进入运行状态,开始执行自己的任务。原创 2023-02-19 07:46:14 · 235 阅读 · 0 评论 -
JAVA SPI扩展
JAVA SPI扩展什么是SPISPI全称Service Provider Interface,是Java提供的一套用来被第三方实现或者扩展的接口,它可以用来启用框架扩展和替换组件。使用场景: JDBC 日志模块 xml解析模块 引入第三方接口并有己方实现使用方法:第一步: 在resources文件下建立META-INF/services文件第二步: 在services文件件先创建接口全限定名File, 如:com.allen.spi.interf.CarInterface第三步:&n原创 2020-10-16 11:59:15 · 456 阅读 · 0 评论 -
Spring三级缓存解决循环依赖
注意: 如果配置allowEarlyReference=false, 会使该功能失效原创 2020-09-22 10:49:01 · 342 阅读 · 0 评论 -
Excel导出工具类
该工具类用于导出列表import org.apache.poi.ss.util.CellRangeAddress;import org.apache.poi.xssf.usermodel.XSSFRow;import org.apache.poi.xssf.usermodel.XSSFSheet;import org.apache.poi.xssf.usermodel.XSSFWork...原创 2018-07-26 09:58:00 · 289 阅读 · 0 评论 -
Collections学习笔记
1、copy(Ldest , Lsrc):将集合Lsrc复制到Ldest我用ArrayList测验了,报Source does not fit in dest异常,百度了下,可以使用如下方法复制list:ArrayList<String> list2 = new ArrayList<String>(list1);2、disjoint(C, D):判断两个集合是否相交(即C中...原创 2018-03-22 10:27:27 · 491 阅读 · 1 评论 -
dubbo在windows下安装
dubbo在windows下安装的话,需要将dubbo-admin项目的war包放入tomgcat的webapps下运行。但是有几个需要注意的坑:1、搜了很多博客,从他们那下下来的代码都没有包含dubbo-admin项目,还得自己去找;2、dubbo官网也不好找到这东西;3、打成war包的时候,不要只打包dubbo-admin项目,需要将整个项目打包,然后再dubbo-admin项目下的targe...原创 2018-03-31 08:07:38 · 754 阅读 · 0 评论 -
Mybatis 使用map返回多个参数的情况。
mapper.xml文件配置返回类型为HashMap SELECT ss.t AS room,COUNT(ss.r) AS num FROM ( SELECT room_type AS t,room_uuid AS r FROM game_player_log WHERE create_date=DATE_FORM原创 2018-01-25 17:06:36 · 5593 阅读 · 0 评论