- 博客(41)
- 问答 (1)
- 收藏
- 关注
原创 JAVA怎么设计一个抢票的功能
抢票系统的设计要考虑高并发、数据一致性和性能优化。可以通过 Redis 实现分布式锁,确保抢票操作的原子性。对于极高并发的场景,可以使用消息队列来缓解瞬时请求压力,同时使用数据库的乐观锁或悲观锁来避免并发写入问题。
2024-11-28 10:46:49 896
原创 Redis的几种持久化方式
RDB:通过快照方式持久化数据,性能较高,但可能丢失最近几次操作的数据。AOF:通过记录每个写操作的日志持久化数据,提供更强的数据持久性,但性能开销较大。混合持久化(RDB + AOF):结合了 RDB 和 AOF 的优点,提升了数据恢复速度并减少了 AOF 文件的大小。
2024-11-26 14:55:46 951
原创 Mybatis 中一级缓存与二级缓存
一级缓存:每个SqlSession内部的缓存,默认启用,用于减少同一SqlSession内部的数据库查询次数。它的生命周期与SqlSession一致。二级缓存:跨SqlSession的缓存,需要显式配置启用。它的生命周期与一致,可以在多个SqlSession之间共享缓存数据。两者结合使用,一级缓存用于提高同一会话内的查询效率,二级缓存则用于提升跨会话的查询性能。
2024-11-25 14:03:25 617
原创 JAVA中@Autowired 和@Resource区别
Autowired是 Spring 特有的注解,通常用于根据类型自动注入。如果需要按名称装配,可以结合@Qualifier使用。@Resource是 Java EE 标准注解,优先根据名称自动装配,如果找不到名称匹配的 bean,才会按照类型进行装配。在实际开发中,@Autowired更常用于 Spring 项目,而@Resource可以用于需要与 Java EE 兼容的场景。
2024-11-25 09:18:05 657
原创 java为什么要引入自动装箱和拆箱的功能?
Java 引入自动装箱和拆箱的功能,旨在简化代码中基本数据类型与包装类之间的转换,提升代码的可读性和简洁性。自动装箱和拆箱使得 Java 更加灵活,减少了开发者的工作量。然而,开发者在使用时应当注意性能开销和空指针异常等潜在问题。
2024-11-22 09:33:24 580
原创 秒杀场景怎么设计?
限流:防止请求过于密集。缓存:高效存储和访问库存。分布式锁:保证库存操作的原子性。异步处理:提高响应速度,减少阻塞。队列:保证订单处理的顺序性和可靠性。防重提交:避免用户重复提交秒杀请求。通过以上策略,结合合理的技术选型和架构设计,可以实现一个高效且稳定的秒杀系统。
2024-11-18 15:25:44 530
原创 分布式事务介绍及如何实现
2PC适用于需要严格一致性的场景,但它存在阻塞和性能问题。3PC在 2PC 的基础上解决了阻塞问题,但依然存在一些性能和复杂性问题。基于消息队列的最终一致性适用于高可用、低延迟要求的系统,适合“最终一致性”的场景。TCC和Saga适合于复杂的分布式事务,需要确保数据的准确性和一致性,尤其是在微服务架构中。选择哪种方案取决于你系统的特性、可用性需求、性能要求以及一致性保证的程度。
2024-11-18 09:12:04 799
原创 抽象类和接口的区别,怎么选择用抽象类和接口?
目的:抽象类是一个不能实例化的类,可以包含抽象方法(没有实现的方法)和具体方法(有实现的方法)。继承关系:一个类只能继承一个抽象类,因为 Java 不支持多重继承。成员可以有实例变量、构造函数、普通方法、抽象方法。可以有访问修饰符(如privateprotectedpublic)来控制成员的访问级别。可以提供默认实现,也可以声明抽象方法,让子类去实现。
2024-11-17 11:59:18 769
原创 【切面编程】自定义注解实现操作日志
*** @description 日志注解*//*** 模块名称* @return*//*** 业务类型* @return*/
2024-07-31 20:53:55 332
原创 【幂等性】详解
在实际应用中,保证幂等性通常需要依赖于唯一标识符或版本号来追踪处理状态,或者设计操作步骤和算法,使得多次执行同一操作不会产生不同的结果。这在分布式系统和消息队列中尤为重要,因为网络问题或系统故障可能会导致消息重复传递和处理。幂等性(Idempotence)是指一个操作无论执行一次还是多次,结果都是一致的。在消息系统中,幂等性是指无论消息被处理多少次,系统的状态都不会改变,即不会产生副作用。总结来说,幂等性保证了系统在处理消息时的可靠性和一致性,能够有效地避免由于消息重复发送或处理而引发的问题。
2024-07-02 14:06:30 282
原创 Kafka如何防止消息重复发送
综上所述,Kafka 提供了多种机制来防止消息重复发送和处理,具体的选择取决于应用的需求和使用场景。在设计和实现中,通常会结合生产者端的幂等性设置、消费者端的幂等性保证、事务性保证以及适当的消息处理策略来确保消息系统的稳定性和一致性。Kafka 提供了几种方式来防止消息重复发送和处理。
2024-07-02 14:02:23 779
原创 Kafka如何防止消息丢失
持久化存储:Kafka 使用基于日志的存储模型。每个主题的分区都会被分割成多个片段(Segment),每个片段都是一个可追加的日志文件。生产者发送的每条消息都会被追加到对应分区的当前活跃片段(active segment)中。这种设计保证了消息在写入时是持久化的,即使在写入过程中发生故障,已经写入的消息也不会丢失。副本机制:Kafka 使用副本来提高消息的可靠性和持久性。每个主题的分区可以配置多个副本,每个副本分布在不同的 Broker 上。每个分区都有一个 Leader 副本(Lea
2024-07-01 09:41:24 361
原创 【详谈】延迟双删(数据库与缓存一致性策略)
延迟双删作为一种缓解数据库与缓存数据一致性问题的方法,通过延迟删除缓存数据来平衡系统性能和数据实时性的需求。在实际应用中,需要根据具体情况选择合适的延迟时间和实现方式,以保证系统在性能和一致性之间达到最佳的平衡。
2024-07-01 09:03:02 3539
原创 详解 Spring 框架中的动态代理(附案例)
代理模式简介代理模式是一种结构型设计模式,允许在不改变原始类(被代理类)代码的情况下,通过引入代理类来控制对原始类的访问。Spring 中的代理机制Spring AOP 提供两种代理方式:基于接口的 JDK 动态代理和基于类的 CGLIB 动态代理。–默认的实现是 JDK 动态代理JDK 动态代理如果目标对象实现了接口,Spring AOP 将使用 JDK 动态代理来创建 AOP 代理。
2024-06-24 13:57:29 661
原创 【超详细】使用RedissonClient实现Redis分布式锁
使用RedissonClient实现Redis分布式锁是一个非常简洁和高效的方式。Redisson是一个基于Redis的Java客户端,它提供了许多高级功能,包括分布式锁、分布式集合、分布式映射等,简化了分布式系统中的并发控制。
2024-06-14 09:14:40 1144
原创 redis的分布式session和本地的session有啥区别
在web应用开发中,Session用于在多个请求之间存储用户数据。传统上,Session存储在服务器的内存中,即本地Session。然而,随着应用规模和复杂度的增加,特别是在分布式环境中,本地Session会遇到一些问题。这时,Redis等分布式存储系统就显得尤为重要,用于实现分布式Session存储。
2024-06-13 20:57:42 768
原创 Java异步任务详解
异步任务指的是不阻塞当前线程,任务提交后会在后台线程执行,主线程可以继续执行其他操作。异步任务通常用于提高应用程序的响应性和效率。通过这些方法,Java 中的异步任务可以有效地提高应用程序的性能和响应性,但同时也需要注意并发编程的各种潜在问题。
2024-06-13 16:34:16 685
原创 读写分离和分库分表详解
在实际应用中,读写分离和分库分表可以结合使用。比如,先通过分库分表解决数据量和并发访问的问题,然后再通过读写分离进一步提升读操作的性能。这两种技术的结合可以有效地提高系统的水平扩展能力和整体性能,但也需要更多的设计和运维投入。分库分表是将单个数据库中的数据拆分到多个数据库或多个表中,以提高数据库的性能和扩展能力。读写分离是将数据库的读操作和写操作分离到不同的数据库实例上,以提高系统性能和可扩展性。
2024-06-13 16:26:38 408
原创 数据库的优化方案
以上数据库优化,涵盖了索引优化、表结构优化、查询优化、缓存优化、硬件优化、定期维护和监控调优等方面。这些方法可以帮助提高数据库的性能和效率,从而改善系统的整体运行情况。
2024-06-12 20:55:59 494
原创 自定义注解获取属性对应枚举的翻译值
EnumShowIntegerSerializer 类的作用是根据EnumShow注解的配置,对整数类型的枚举值进行序列化时,除了输出数值本身,还会额外输出一个带有特定suffix的字符串字段,该字段的值是根据枚举值的特定规则计算得到的。如果枚举类为普通的Java枚举,则通过反射获取枚举值的键和值方法,并遍历枚举常量,找到对应整数值的枚举值,并获取其值。如果枚举类实现了BaseEnum接口,则通过BaseEnum.of方法获取枚举值,并获取其对应的字符串值。
2024-06-10 20:56:00 604
原创 JAVA根据视频url,获取视频时长
在需要获取视频时长时候需要调用这个工具类即可返回视频时长(秒)创建个视频解析工具类来获取视频时长。使用jave-all-deps包。导入相关视频解析依赖。
2024-06-03 08:36:15 1064
原创 Java中【线程】及【线程池】详细介绍(概念、实现方式、生命周期、案例)
线程池在多线程编程的场景中非常常用,可以有效地控制并发线程的数量,提高程序的执行效率,并且避免线程创建和销毁的开销。在操作系统中,每个进程都有自己的地址空间和资源,而线程是在进程中运行的,它共享进程的资源,包括内存、文件和网络连接等。使用线程池时,我们只需要将需要执行的任务提交给线程池,线程池会自动管理线程,分配任务给空闲的线程执行。线程池的生命周期管理是保证多线程编程质量和性能的关键一环,合理地管理线程池的生命周期有助于避免资源泄漏和线程阻塞的问题,同时提高系统的性能和可维护性。
2024-05-15 09:08:17 1145
原创 java中wait()和sleep()的区别
是两个不同的方法,用于线程控制和同步。方法主要用于线程的暂停,暂停的时间可以是指定的固定时间。方法常用于线程的协作和同步,与锁对象配合使用,而。
2024-05-15 08:55:40 303
原创 【超详细】JAVA设计模式总结之23种设计模式详解(附示例代码)
单例模式是一种创建型设计模式,确保一个类只有一个实例,并提供全局访问点来访问该实例。这意味着无论何时请求该类的实例,都将返回相同的实例。单一实例: 一个类只能有一个实例。全局访问点: 提供一个全局的访问点,使得其他对象可以轻松地访问到这个实例。延迟实例化: 实例化过程被延迟到第一次请求该实例时。节省资源: 由于只有一个实例,节省了内存和系统资源。易于控制: 由于单例模式限制了实例化过程,因此易于对实例化过程进行控制。易于扩展: 对单例类的访问点是全局的,因此易于对其功能进行扩展和修改。
2024-05-11 15:59:02 3810 1
原创 SpringBoot整合Elasticsearch的CRUD--kafka同步更新数据库到es
ProductRepository接口,继承自CrudRepository,提供对ProductTOElastic类型数据的基本CRUD操作。该接口为操作产品数据提供了一套方法,使得可以在Elasticsearch中进行产品数据的增删改查。在application.yml中编写配置项目的启动信息。创建springboot项目上导入依赖。该实体类用于es中对应的文档属性。
2024-05-10 16:45:35 747 3
原创 Java整合Elasticsearch相关查询操作
在测试方法执行之前初始化一个EsClient的实例,并将其赋值给client变量。使用@Before注解标识该方法,确保它在所有@Test注解的方法执行之前运行。通过调用EsClient类的getClient()方法获取EsClient实例,为后续的测试提供必要的客户端对象。执行后可以进入kibana查看添加的文档,可以看到我们刚添加的书本信息数据。执行后可以进入kibana查看修改的文档,可以看到我们刚修改的书本信息数据。可以看到文档的内容已经被修改成功。执行后可看到数据已经被删除。
2024-05-09 15:47:52 1281
原创 【超详细】Docker部署Elasticsearch、Kibana及其分词器的使用
Elasticsearch是一个开源的分布式搜索和分析引擎,它被设计用于快速、实时地搜索大量数据。它构建在Apache Lucene搜索引擎库之上,并提供了简单易用的RESTful API接口。Elasticsearch是与名为Logstash的数据收集和日志解析引擎以及名为Kibana的分析和可视化平台一起开发的。这三个产品被设计成一个集成解决方案,称为“Elastic Stack”(以前称为“ELK stack”)。分布式架构。
2024-05-08 14:03:20 1363 1
原创 docker安装nginx部署前端项目
Nginx挂载的优点是可以方便地进行网站配置和管理。通过对不同目录进行挂载,可以针对不同的网站进行定制化的配置。同时,Nginx挂载也可以提高服务器的安全性,减少攻击的风险,因为攻击者无法直接访问服务器的根目录。 Nginx挂载是指将某个文件夹或目录作为Nginx服务器的根目录进行访问,用于存放默认页面、日志、配置文件.打包成功后复制文件到你挂载的/home/nginx/html的文件夹中。然后进入/home/nginx/conf配置下 Nginx 配置。将容器内的文件复制到宿主机。
2024-04-29 09:12:42 1875 1
原创 克隆下来的项目删除原有git信息,上传到自己的git仓库
如果仓库干净,就不用进行这步,如果存在其他文件(md文件等),需要执行rebase,命令:git pull --rebase origin master。之后再使用 git remote add origin https://xxxx.git 进行添加。如果有远程信息 使用 git remote rm origin 删除,删除后再次查看则无信息。此时使用git remote -v 查看远程信息 可以看到刚才添加的。(2)添加本地文件,使用 git add . 进行添加。这时候去看自己的远程仓库上传成功。
2023-10-31 10:27:49 850 1
原创 Java实现微信模板消息推送----微信消息订阅模版
appid:微信小程序的唯一标识符,用于区分不同的小程序。secret:用于对小程序进行身份验证和安全保护的密钥。token:用于验证消息的有效性,确保消息来自微信服务器。aesKey:消息加解密密钥,用于对消息进行加密和解密。msgDataFormat:消息的数据格式,这里指定为JSON格式。相关参数都可在微信公众号里找到。
2023-10-24 15:22:18 774
原创 Docker 安装 Jenkins (保姆级教学——以及推荐插件安装不上问题解决)
本人在安装jenkies时候根据网上资料遇到很多问题,最后终于解决,现在总结下,避免踩坑。
2023-10-11 11:13:54 3493
原创 简单的Apache POI 案例(Excel的文件操作)
ApachePOI是用Java编写的免费开源的跨平台的Java工具,Apache POI提供API给Java程序对Microsoft Office格式档案读和写的功能,其中使用最多的就是使用POI操作Excel文件maven。
2023-10-10 15:09:51 167
读写分离和分库分表详解
2024-06-13
c语言测试项目:按键可调计时器,计时范围0~99,数码管显示,用独立按键操
2021-07-21
TA创建的收藏夹 TA关注的收藏夹
TA关注的人