自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 物联网项目开发全流程

物联网项目的开发是一个复杂的过程,涉及到硬件、软件、通信和数据等多个方面。从需求分析到系统设计,再到硬件选型、软件开发、测试和部署,每一步都需要精心规划与实施。通过合理的架构设计、合适的技术选型和充分的测试,可以确保物联网项目的成功实施。随着技术的不断进步,物联网的应用场景也在不断扩展,未来物联网将在各行各业中发挥更加重要的作用。希望通过本文,能够帮助你了解物联网项目开发的全过程,助你在未来的物联网项目开发中更加得心应手。

2025-12-10 16:55:04 795

原创 新建三个线程t1、t2、t3,如何实现按顺序打印1-100

通过使用和机制,我们能够确保多个线程按顺序执行打印任务。wait和notify使得线程能够在合适的时机挂起和唤醒,从而实现精确的执行控制。这种方法在多线程任务中非常常见,可以帮助解决许多类似的同步问题。希望这篇文章对你有帮助!如果你有任何问题或改进意见,欢迎留言讨论。

2025-12-10 16:30:26 514

原创 新建三个线程t1、t2、t3,如何让它们按顺序执行

join()方法可以确保一个线程在另一个线程完成之后再执行。我们可以通过让T2等待T1执行完,T3等待T2执行完,来保证线程按顺序执行。

2025-12-10 16:27:31 135

原创 深入理解 Java 多线程与线程池 —— 从原理到实战

在现代系统中(如电商秒杀、日志分析、物联网设备数据处理等),往往无法满足性能需求。。

2025-11-01 10:39:27 443

原创 JVM 全面详解:深入理解 Java 的核心运行机制

Jvm就是java虚拟机,

2025-09-10 16:01:32 676

原创 MySQL 中的 B+树和 B树的区别详解

B 树是一种多路平衡查找树,常用于文件系统和数据库索引。一个节点可以有多个孩子(m 阶 B 树最多 m 个孩子)。节点中存储 key 和 data,每个 key 对应一条数据。所有叶子节点的深度相同,树始终保持平衡。B+ 树是 B 树的一种变体,也是MySQL InnoDB 索引的底层结构。非叶子节点只存储索引,不存储数据,数据全部存在叶子节点。叶子节点通过链表相连,便于范围查询和顺序遍历。树的高度更低—— 因为非叶子节点只存索引,所以能容纳更多 key。B 树。

2025-09-09 11:35:04 930

原创 ArrayList、LinkedList、Vector 的区别与底层实现

ArrayList:基于动态数组,查询快,插入删除慢,适合读多写少。LinkedList:基于双向链表,插入删除快,查询慢,适合写多读少。Vector:基于动态数组,线程安全,但性能差,已被替代。👉 在实际开发中,ArrayList是最常用的,LinkedList适合做队列/栈,Vector基本淘汰,推荐使用并发容器。

2025-09-08 14:48:35 759

原创 Java 常见集合类详解

类名底层结构是否有序是否允许重复是否线程安全适用场景ArrayList动态数组有序✅❌查询多LinkedList双向链表有序✅❌插入/删除多HashSetHashMap无序❌❌去重HashMap+链表插入顺序❌❌去重+保持顺序TreeSet红黑树排序❌❌有序集合HashMap数组+链表+红黑树无序❌常用 MapHashMap+链表插入/访问顺序❌LRU 缓存TreeMap红黑树排序❌有序 Map。

2025-09-08 14:46:00 1050

原创 线程池原理与使用详解

线程池是高并发编程中的重要工具,它通过线程复用、任务排队和统一管理,有效提升了系统性能与稳定性。本文总结了线程池的原理、构造参数、常见类型、使用示例及注意事项。在实际开发中,应根据业务场景合理配置线程池,避免资源浪费或系统崩溃。一句话总结:线程池就是“线程的复用工厂”,合理使用能让你的程序既快又稳。

2025-09-08 14:36:18 523

原创 一文搞懂 volatile 关键字的作用

volatile是一种轻量级同步机制。作用:保证可见性、禁止指令重排序。不能保证原子性,遇到复合操作需要搭配或Atomic类。常见于状态标志、单例模式等场景。一句话记忆:“volatile:看得见,排得开,看不住(原子性)。

2025-09-05 17:50:32 512

原创 ThreadLocal 原理与内存泄漏问题

并不是一个 Thread(线程),而是一个线程本地存储工具类。为每个线程提供一个独立的变量副本,互不干扰。例子:threadLocal.set("线程1的值");}, "T1");threadLocal.set("线程2的值");}, "T2");t1.start();t2.start();T1:线程1的值T2:线程2的值每个线程都存了自己的值,互不影响。每个线程维护一个,key 是 ThreadLocal(弱引用),value 是值。

2025-09-05 17:43:47 652

原创 HashMap 底层原理,一文搞懂扩容和冲突解决

兼顾空间利用率和冲突概率。太低(如 0.5):浪费空间。太高(如 0.9):冲突严重,查找效率下降。HashMap 底层是数组 + 链表 + 红黑树。哈希冲突:链表解决,冲突严重时转为红黑树。扩容机制:长度翻倍,JDK1.8 优化为只需 O(1) 判断。线程不安全 → 并发环境用。一句话记忆:“HashMap 用数组存储,链表/红黑树解决冲突,容量不够就翻倍扩容。

2025-09-02 09:40:02 837

原创 String、StringBuilder、StringBuffer 的区别,为什么 String 是不可变的?

特性String可变性❌ 不可变✅ 可变✅ 可变线程安全✅ 安全(不可变带来的特性)❌ 非线程安全✅ 线程安全(方法加性能低(频繁拼接会产生很多对象)高(适合单线程操作字符串)较低(比 StringBuilder 慢一点)底层存储结构byte[]可扩容char[]byte[]可扩容char[]byte[]适用场景不变字符串,如常量、配置、少量拼接高频拼接、单线程环境高频拼接、多线程环境String:不可变,线程安全,适合少量拼接、常量场景。

2025-09-02 09:32:20 348

原创 Spring Boot + 和风天气 API 实战:批量获取未来 7 日天气并入库

在农业、城市管理、旅游等业务系统中,天气信息往往是核心数据之一。今天我们来实现一个 Spring Boot 定时任务,调用批量获取多个地块的并入库。本案例结合实际业务逻辑,重点演示的完整流程。

2025-08-13 18:41:51 445

原创 大华摄像头对接全流程实战

本文记录了在项目中对接大华摄像头云平台的完整流程,涵盖等功能的实现细节,并结合 Redis、数据库存储、文件下载等实际业务场景进行讲解。

2025-08-13 11:00:45 1429

原创 redis是单线程吗? 为什么快

1.纯内存操作,redis的读写都是基于内存操作,避免大量访问数据数据库,减少直接读取磁盘数据,redis将数据存到内存中,读写数据的时候不会受到磁盘I/O的速度的限制,所以快。2.单线程操作,避免了多线程之间的竞争,避免了多进程或多线程的切换导致消耗cpu,也不用考虑各种锁的问题。3.redis6.0引入了多线程I/O,主要用于处理网络数据与协议的解析,但是读写操作仍然是单线程。2.redis4.0开始,也有后台线程在工作,例如aof重写机制。1.redis4.0之前完全是单线程。redis是单线程吗?

2025-07-26 19:47:27 137

原创 基于Redis+Rabbitmq,实现数据库缓存一致性(延迟双删)

当数据修改/新增/删除的时候,去第一次删除缓存,然后构建消息(商品id,超时时间500ms)发送异步消息到队列,当5s时间到了,消息会被发送到死信队列被消费掉,从而实现了延迟双删。创建一个普通交换机,普通队列,死信交换机,死信队列,互相绑定...这里我就不多说了。b在a删除缓存后查询,此时缓存未命中,去查询数据库但查询到的是旧数据。b在a更新数据库,删除缓存之间去查询数据库,此时b获取到的是旧数据。假如先更新数据库,后删除缓存,然后删除缓存。先删缓存,后更新数据库,然后在删除缓存。a删除缓存再更新数据库。

2025-07-24 20:31:53 310

原创 基于Redis+分布式锁,解决缓存雪崩,击穿,穿透

当未命中缓存时,线程a获取锁去查询数据库重建缓存,其他线程阻塞等待,如果a阻塞导致超时释放,其他线程去尝试获取锁重建缓存(自旋:也称递归,调用本身方法并且阻塞100ms)。这里我加了ThreadLocal,存储的自旋次数t,每次自旋t+1,如果自旋次数超过8次,则直接返回错误(避免重建缓存时间过长超过了客户的容忍度),记得最后删除ThreadLocal。是指在高并发下,某个被大量访问的key失效,导致大量的请求打到数据上,给数据库造成压力。2.设置定时任务,刷新缓存中热点数据的键值对,让热点数据永不过期。

2025-07-24 17:55:51 428

原创 springcloudalibaba聚合父工程项目

packaging>pom</packaging>和springboot,springcloud,springcloudalibaba的版本对应的依赖并统一管理。3.在设置里面修改文件编码为都为UTF-8,启用注解处理,忽略你不需要的文件。5.在.idea目录的workspace.xml加。2.创建完项目后把src目录删掉。目的是:能看到各个服务之间的运行。1.新建项目,jdk选1.8。

2025-03-16 16:08:16 368

原创 找到并杀掉占用8080端口的进程

netstat -ano | findstr :8080(查看占用8080端口的进程)1.win+r打开cmd,并运行。3.运行以下命令杀掉该进程。其中12345是进程ID。2.你会看到类似的输出。

2025-02-25 18:41:59 581

原创 若依框架生成代码中包路径,模块名,业务名分别代表什么

1.包路径:就代表包名,也就是后面的Controller,domain,service,mapper等都在该包下。2.模块名和业务名:与包路径无关 与controller的请求路径有关,模块名通常与表名一样。例:模块名为student 业务名为manage则请求路径为:student/manage。

2025-01-09 21:41:26 660

原创 若依框架Ruoyi-Vue-master怎么创建新模块并继承父模块

2.该模块的父maven自动生成为com.ruoyi,ruoyi的pom中自动生成。1.右键创建新模块,选择java模块,创建成功后删除Main类。4.在ruoyi-admin模块pom中添加。例如:模块名为ruoyi-teacher。5.在ruoyi模块pom中添加。

2025-01-09 21:32:35 345

原创 若依框架怎么启动前端(前后端分离版)

注:在NPM设置为淘宝源出现UNABLE_TO_GET_ISSUER_CERT_LOCALLY。清除npm中的代理和缓存:npm cache clean --force。解决命令:npm config set strict-ssl false。将终端切换成ruoyi-ui的命令:cd ruoyi-ui。最后的步骤:npm代理修改成功后,把npm切换成淘宝源。原因:这是因为淘宝源的ssl证书不能被npm接受导致的。查看镜像地址:npm get registry。访问地址localhost:80。

2024-11-04 16:25:36 843

原创 解决mapper.xml写sql语句没有提醒

最后也是最重要的:创建数据库的时候数据库必须选你要选择的架构(这个架构里面有很多表,你对这些表要进行sql操作的)才会有提醒 (比如我的:studentschema;1.在设置/settings里找到sql方言,然后两个sql语言都要选mysql,最后添加要作用的mapper/mapper.xml文件。2.鼠标靠近任意sql字段 alt+回车,选中语言注入设置,ID选择mysql。3.https:改成http。4.如果上面都没解决。

2024-10-28 17:16:48 587

原创 List的五种遍历方法和用处

ListIterator:用于添加元素//也可以用于删除元素。增强for循环和foreach:仅用于遍历集合或对象。迭代器Iterator:用于删除元素列表迭代器。普通for循环:用于获取需要的索引。

2024-03-31 10:37:14 217 1

原创 解决mysql连接失败问题connection refused:connection

解决:首先打开任务管理器,再打开服务,找到Mysql右键开始。出现这个问题很有可能是mysql/数据库没有打开。

2024-03-30 10:40:56 8400 3

空空如也

空空如也

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

TA关注的人

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