自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(55)
  • 收藏
  • 关注

原创 保护性暂停原理

保护性暂停(Guarded Suspension)是一种常见的线程同步设计模式,常用于解决 生产者-消费者问题 或其他需要等待条件满足后再继续执行的场景。通过这种模式,一个线程在执行过程中会检查某个条件是否满足,如果不满足,就进入等待状态,直到另一个线程通知条件已满足。无非就是有点类似一个空盘子,一个消费者和生产者场景有点类似。有就唤醒消费者消费,没有消费者就等待。保护性暂停的超时等待应用于 join()方法中,可用于超时返回结果。

2025-04-22 18:50:33 337

原创 线程之间的转换以及线程的活跃性

活锁:线程并未被阻塞都在运行,但是却直处于一种伪“忙碌等待”,原因是:一个线程改变了另外一个线程的结束条件。WAITING:等待另外一个线程唤醒,通过wait()等方法,进入waitSet等待唤醒。顺序加锁可以解决死锁问题,但是会产生线程饥饿问题,有的线程始终或者很少获得cpu执行。jstack 是 Java 自带的线程转储工具,可以用于检测死锁。切换到 “线程” 面板,如果检测到死锁,会显示相关信息。死锁:同时争抢资源,相互等待对方资源释放,最终导致死锁。简单地说,就是心理戏太多,自己消耗自己。

2025-04-22 18:49:11 762

原创 ThreadLocal底层原理

如果 ThreadLocalMap 中的 ThreadLocal 是弱引用:无论外部的 threadLocal 是否为 null,只要没有强引用指向 ThreadLocal 对象,它就会被垃圾回收器回收。如果 ThreadLocalMap 中的 ThreadLocal 是强引用:即使外部的 threadLocal 被设置为 null,ThreadLocal 依然会被 ThreadLocalMap 保持强引用,导致内存泄漏,直到 ThreadLocalMap 被销毁(如线程结束时)。

2025-04-17 09:25:16 736

原创 MySQL 基于规则的优化(含子查询优化)

我们编写的查询语句的搜索条件本质上是表达式。这些表达式可能比较复杂,无法高效运行,MySQL优化器会简化这些表达式,达到更高效的运行。下面讲优化器的优化规则,方便起见,用a、b、c等字母表示某个表的列名。

2025-04-17 09:24:33 1238

原创 常用字符串和集合处理工具类

Hutool:提供了一整套丰富的工具类,涵盖了文件操作、日期时间处理、网络请求、加密解密、JSON ,字符串与集合处理等多个方面,适合于各种日常开发任务。Gson:专注于 JSON 处理,提供了简单且强大的 API,适用于将 Java 对象与 JSON 字符串进行相互转换。Apache Commons Lang 是 Apache Commons 项目的一部分,旨在提供一组常用的功能,以简化 Java 应用程序的开发。

2025-04-16 08:13:31 848

原创 仿点评项目—项目总结

Redis实战,解决缓存穿透、缓存击穿、缓存雪崩等问题。

2025-04-16 08:12:50 754

原创 MVCC底层原理实现

指的是一种提高并发的技术。最早的数据库系统,只有读读之间可以并发,读写,写读,写写都要阻塞。引入多版本之后,只有写写之间相互阻塞,其他三种操作都可以并行,这样大幅度提高了InnoDB的并发度。在内部实现中,InnoDB通过undo log保存每条数据的多个版本,并且能够找回数据历史版本提供给用户读,每个事务读到的数据版本可能是不一样的。在同一个事务中,用户只能看到该事务创建快照之前已经提交的修改和该事务本身做的修改。MVCC只在已提交读(Read Committed)和可重复读。

2025-04-15 07:57:18 1091

原创 CommandLineRunner的作用

CommandLineRunner 是 Spring Boot 提供的一个 应用程序启动时执行代码的接口。run(String…args):Spring Boot 启动后,会自动调用这个方法,并传入命令行参数。在 Spring Boot 应用启动后立即执行一段代码(比如初始化数据、执行任务等)。@Component:表示该类会被 Spring 扫描并注册到容器中。CommandLineRunner 是一个 函数式接口,它只有一个。

2025-04-15 07:55:54 162

原创 Spring MVC 拦截器(Interceptor)与过滤器(Filter)的区别?

拦截器(Interceptor): 只会拦截那些被 @Controller 或 @RestController 标注的类中的方法处理的请求,也就是那些由 Spring MVC 调度的请求。请求会根据 URL 路径、请求方法(GET/POST) 等信息,映射到 Controller 的某个方法上来处理。Controller 是 Spring MVC 的核心组件之一,用于处理用户的 HTTP 请求,并返回响应。过滤器(Filter): 会拦截所有类型的 HTTP 请求,包括静态资源和后台 API。

2025-04-14 08:02:03 196

原创 HttpServletRequest、ServerHttpRequest 和 ServerWebRequest作用详解

如果你使用的是响应式 Spring WebFlux,选择 ServerHttpRequest 或 ServerWebRequest。提供了更高级的 API,封装了 ServerHttpRequest 和 ServerHttpResponse。如果你使用的是传统的 Spring MVC,选择 HttpServletRequest。ServerWebRequest 更高级,封装了更多功能,适合复杂的业务场景。简单地说,就是心理戏太多,自己消耗自己。适合非阻塞式 I/O 的场景。适合阻塞式 I/O 的场景。

2025-04-14 08:01:29 579

原创 如何理解json和json字符串

json类型字符串和json对象或者json数组是不一样的,json类型字符串本质是字符串,而json对象是json类型的数据,而且json类型数据分为两部分:json对象和json数组。网络传输的其实是对应的 json字符串 对象,前端接收后会将 json字符串 解析成 json对象。如何理解网络传输的json到底是什么数据。它是一个合法的 JSON 数组。这是一个包含数组表示的字符串。

2025-04-11 08:07:51 172

原创 @MapperScan和@ComponentScan的区别

当启动类没有配置对应的@MapperScan注解时,需要在每个mapper包下的类添加@Mapper注解,且所在的mapper包必须在启动类所在的包及其子包下,因为 @SpringBootApplication注解里面有对应的@ComponentScan,它会扫描启动类所在的包及其子包中含有的@Mapper并将其注册成bean。@ComponentScan是Spring框架中的一个注解,用于自动扫描和注册带有特定注解的组件为Spring管理的bean。上述两种效果是一样的!事已闭,过往仍在脑中演。

2025-04-11 08:07:33 604

原创 设计模式之【适配器模式】详解

将一个接口转换成客户希望的另一个接口,使接口不兼容的那些类可以一起工作,其别名为包装器(Wrapper)。适配器模式既可以作为类结构型模式,也可以作为对象结构型模式。在适配器模式中,我们通过增加一个新的适配器类来解决接口不兼容的问题,使得原本没有任何关系的类可以协同工作。根据适配器类与适配者类的关系不同,适配器模式可分为对象适配器和类适配器两种,在对象适配器模式中,适配器与适配者之间是关联关系;在类适配器模式中,适配器与适配者之间是继承(或实现)关系。

2025-04-10 09:29:22 1230

原创 设计模式之【建造者模式】详解

建造者模式(Builder Pattern)又叫生成器模式,是一种对象构建模式。它可以将复杂对象的建造过程抽象出来,使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象建造者模式是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节。

2025-04-10 09:28:56 655

原创 设计模式之【代理模式】详解

动态代理(Dynamic Proxy)是一种在运行时动态创建代理对象的技术。与静态代理相比,动态代理不需要显式地编写代理类,而是在程序运行过程中由 JVM 自动生成代理对象。

2025-04-09 08:14:11 883

原创 设计模式之【策略模式】详解

策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。它定义了一系列算法族,并将每个算法封装成独立的类,使它们可以​​相互替换​​。策略模式主要解决在多种相似算法存在时,使用条件语句(如if…else)导致的复杂性和难以维护的问题。

2025-04-09 08:13:39 710

原创 设计模式之【原型模式】详解

原型模式属于创建型模式,所以它是描述如何创建对象的模式。顾名思义,先搞一个原型对象出来,然后在这个原型对象的基础上修修补补再弄出一个新对象来。其核心是重写Object中的clone方法,调用该方法可以在内存中进行对象拷贝。这种模式的主要目的是为了提高性能和复用现有对象的状态。关键字就是Clone。

2025-04-08 08:13:08 767

原创 设计模式之【桥接模式】详解

桥接模式(Bridge Pattern)是一种​​结构型设计模式​​,通过将​​抽象部分与实现部分分离​​,使二者可以独立变化。它使用​​组合关系代替继承关系​​,避免因多层继承导致的类爆炸问题。通过桥接模式,可以在运行时动态地给一个抽象化的对象设置不同的实现化对象,这样就能够在不改动代码的情况下增加新的实现或者改变现有的实现。

2025-04-08 08:11:28 499

原创 设计模式之【工厂模式】详解

工厂模式提供了一种创建对象的方式,而无需指定要创建的具体类。通过使用工厂模式,可以将对象的创建逻辑封装在一个工厂类中,而不是在客户端代码中直接实例化对象,这样可以提高代码的可维护性和可扩展性。在java中,万物皆对象,这些对象都需要创建,如果创建的时候直接new该对象,就会对该对象耦合严重,假如我们要更换对象,所有new对象的地方都需要修改一遍,这显然违背了软件设计的开闭原则。

2025-04-07 08:36:30 782

原创 设计模式之【单例模式】详解

单例模式(Singleton Pattern)是一种常用的软件设计模式,其核心思想是确保一个类仅有一个实例,并提供一个全局访问点来获取这个实例。单例模式主要用于控制资源的访问,比如配置文件的读取,数据库的连接等,通过确保这类资源全局只有一个实例,既可以避免对资源的多重占用,又可以减少系统的性能开销。*** 饿汉式:预加载* 静态成员变量*///定义静态成员变量获取本类的实例//私有构造方法,避免通过new关键字来实例化对象,保证只存在一个实例//提供一个公共的访问类,让外界获取该对象。

2025-04-07 08:35:38 773

原创 如何保证Redis和MySQL数据的一致性解析

由缓存的调用者在进行更新数据库的同时更新缓存**更新数据:**在进行数据库数据修改的时候,一般都是删除缓存,然后缓存为空,等待查询时候判空再进行数据库的查询然后更新缓存,而不是每次去做更新数据都进行更新缓存操作。

2025-04-06 09:33:20 365

原创 设计模式之【组合模式】详解

组合模式(Composite Pattern)是一种​​结构型设计模式​​,用于将对象组合成​​树形结构​​以表示"整体-部分"的层次关系。通过让客户端以​​统一的方式处理单个对象和组合对象​​,实现了对树形结构中所有节点的透明化操作。核心思想:通过共享接口,使得​​叶子节点​​(单个对象)和​​容器节点​​(组合对象)可以被一致对待,客户端无需关心操作的是单个对象还是组合结构。

2025-04-06 09:32:40 1282

原创 快速了解Websocket技术

WebSocket是一种全双工网络通信协议,它提供了在单个TCP连接上进行全双工通信的渠道。WebSocket使得客户端(通常是浏览器)和服务器之间可以进行持续的双向数据交换。传统的HTTP协议是请求/响应模式,即客户端发起请求后,等待服务器响应;而WebSocket允许服务器主动向客户端推送信息,同时也允许客户端与服务器进行实时通信。

2025-04-05 10:07:18 966

原创 Spring中事务失效的原因详细解析

在同一个类内部,一个方法直接调用另一个带有 @Transactional 注解的方法时,调用的是对象的实际方法,而不是通过代理对象调用,因此事务增强逻辑不会被触发,导致事务失效。如果在一个带有事务的方法中开启了新的线程进行数据库操作,新线程中的操作不会参与到原线程的事务中,即使原线程的事务出现异常回滚,新线程中的操作也不会回滚。原因:Spring 的事务管理需要配置相应的事务管理器。如果没有正确配置事务管理器,或者在使用 @Transactional 注解时没有指定正确的事务管理器,事务将无法正常工作。

2025-04-05 09:49:20 431

原创 解决remote: error: GH007: Your push would publish a private email address.

注意:请将user.email更改为GitHub分配给您的电子邮件。它位于https://github.com/settings/emails。

2025-04-05 09:41:01 120

原创 redis远程连接不上解决办法

redis远程连接不上解决办法。

2025-04-03 18:40:26 235

原创 升级JDK17,报错:Exception java.lang.reflect.InaccessibleObjectException: Unable to make protected native

在 JDK1.8 及之前,这个属性是打开的,意思就是 1.8 前会反射出里面的所有方法。我们都知道反射会消耗性能。然而这些方法的使用频率不高,为了这些比较少调用的代码牺牲这些性能不值得,所以从 JDK1.8 后大量包的可访问反射属性都被关闭了,lang 就是其中之一。JDK17中把 accessiable 属性设置为 false 了。翻译:”base 模块中没将 lang 模块打包到未命名模块。

2025-04-03 18:40:12 326

原创 基于SpringCloud的商城项目之Elasticsearch(下)

精确查询,英文是Term-level query,顾名思义,词条级别的查询。也就是说不会对用户输入的搜索条件再分词,而是作为一个词条,与搜索的字段内容精确值匹配。css样式肯定是前端实现页面的时候写好的,但是前端编写页面的时候是不知道页面要展示什么数据的,不可能给数据加标签。而服务端实现搜索功能,要是有elasticsearch做分词搜索,是知道哪些词条需要高亮的。当我们利用match查询时,文档结果会根据与搜索词条的关联度打分(_score),返回结果时按照分值降序排列。bool查询,即布尔查询。

2025-03-09 19:43:03 648

原创 高并发下订单库存防止超卖策略

在并发的场景下,比如商城售卖商品中,一件商品的销售数量>库存数量的问题,称为超卖问题。主要原因是在并发场景下,请求几乎同时到达,对库存资源进行竞争,由于没有适当的并发控制策略导致的错误。

2025-03-09 19:41:55 495

原创 基于SpringCloud的商城项目之Elasticsearch(上)

Elasticsearch的关键就是倒排索引,而倒排索引依赖于对文档内容的分词,而分词则需要高效、精准的分词算法,IK分词器就是这样一个中文分词算法。其中的id字段已经创建了索引,由于索引底层采用了B+树结构,因此我们根据id搜索的速度会非常快。综上,根据id精确匹配时,可以走索引,查询效率较高。虽然要先查询倒排索引,再查询词条的正排索引,但是无论是词条、还是文档id都建立了索引,查询速度非常快!根据rest风格,新增是post,查询应该是get,不过查询一般都需要条件,这里我们把文档id带上。

2025-02-28 21:23:08 974

原创 基于SpringCloud的商城项目之MQ(下)

在开启确认机制的情况下,当生产者发送消息给MQ后,MQ会根据消息处理的情况返回不同的回执。比较优雅的一种处理方案是RepublishMessageRecoverer,失败后将消息投递到一个指定的,专门存放异常消息的队列,后续由人工集中处理。极端情况就是消费者一直无法执行成功,那么消息requeue就会无限循环,导致mq的消息处理飙升,带来不必要的压力。可以设置最大重试次数。注意:在开启持久化机制以后,如果同时还开启了生产者确认,那么MQ会在消息持久化以后才发送ACK回执,进一步确保消息的可靠性。

2025-02-25 08:57:25 787

原创 基于SpringCloud的商城项目之MQ(上)

SpringAMQP。

2025-02-25 08:56:33 978

原创 基于SpringCloud的商城项目之Sentinel、Seata

XA 规范 是 X/Open 组织定义的分布式事务处理(DTP,Distributed Transaction Processing)标准,XA 规范 描述了全局的TM与局部的RM之间的接口,几乎所有主流的数据库都对 XA 规范 提供了支持。虽然每个单独的业务都能在本地遵循ACID,但是它们互相之间没有感知,不知道有人失败了,无法保证最终结果的统一,也就无法遵循ACID的事务特性了。这就像是水电站的大坝,起到蓄水的作用,可以通过开关控制水流出的大小,让下游水流始终维持在一个平稳的量。

2025-02-24 10:04:02 866

原创 基于SpringCloud的商城项目之Nacos、OpenFeign、Gateway

技术栈:Spring Cloud Alibaba、Spring boot、MyBatis-Plus、RabbitMQ、ElaticSearch、Docker。服务划分:用户服务(UserService)、商品服务(ItemService)、购物车服务(CartService)、支付服务(PayService)、交易服务(TradeService)。

2025-02-24 10:02:51 846

原创 论文研读之“YOLO v3”目标检测深度学习算法一文看懂!

YOLO v3!

2025-01-21 15:36:09 644

原创 论文研读之Cross-Domain Few-Shot Object Detection via Enhanced Open-Set Object Detector

跨域小样本目标检测模型研读。

2025-01-21 15:35:21 1134

原创 【养老项目】重点!!项目学习心得图解day14 基于WebSocket的消息实时提醒

WebSocket支持双向通信,它实现了浏览器与服务器全双工通信——浏览器和服务器只需要完成一次握手,两者之间就可以创建。WebSocket并不能完全取代HTTP,它只适合在特定的场景下使用。WebSocket是长连接,受网络限制比较大,需要处理好重连。当设备上报数据的时候,我们需要根据报警规则进行过滤。

2025-01-15 09:42:57 245

原创 【养老项目】项目学习心得图解day13 基于阿里云iot平台的消息处理

每次数据库存新的设备数据时,都在缓存存一份,使得最新的设备数据在缓存中留一份。由于可能有多个设备,每个设备有多个监控指标,每个指标可能每分钟就会更新一次,这样数据库对应的表数据量会特别大。如果客户端需要查看设备数据时,直接去数据库找效率特别低。而缓存只存当前最新的一份数据,需要直接去缓存找效率高。AmqpClient实现ApplicationRunner接口,启动类启动时自动调用run方法,run方法调用start方法。

2025-01-15 09:41:35 334

原创 论文研读之“YOLO v1”目标检测深度学习算法一文看懂,YOLO开篇之作,必读!

YOLO开篇之作,必读!YOLO v1详细解读,附图片分析。

2025-01-14 09:58:50 1044

原创 【养老项目】项目学习心得图解day12 基于阿里云iot平台的智能设备管理

在后台管理系统中,是需要自己维护设备,不需要创建产品,因为产品直接物联网平台创建添加即可。需要单独维护设备的原因是,设备需要跟养老院的老人或者位置进行绑定,才能做到精准的监控。

2025-01-14 09:55:35 272

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除