- 博客(77)
- 收藏
- 关注

原创 spring脑图-动态代理-静态代理-通俗易懂理解
动态代理(而在动态代理中,你可能不确定哪个代购人员会帮你购物,但你希望有人能够替你完成购物任务。在需要购物时,你会根据代购人员的可用性和能力来选择合适的人选。不同的代购人员可能有不同的购物方式和策略,以满足你的需求)静态代理(想象你委托一个特定的代购人员帮你购买所有的商品。无论你需要什么东西,你都会联系这个特定的代购人员,他会按照你预先告知的清单和方式去购买商品。)
2024-02-23 15:55:21
413
原创 内置redis使用方法
在Spring Boot项目中,通过注解实现嵌入式Redis缓存可以简化开发流程。主要步骤包括:引入Spring Cache、Redis客户端和嵌入式Redis依赖;在配置文件启用嵌入式Redis并设置缓存参数;在启动类添加@EnableCaching注解开启缓存功能;使用@Cacheable、@CachePut、@CacheEvict等注解实现自动缓存逻辑。这种方法无需手动操作Redis,通过注解即可完成缓存的查询、更新和删除操作。嵌入式Redis适合开发测试环境,生产环境需切换为独立Redis服务。
2025-08-11 16:15:03
924
原创 geomtry空间索引sql查询慢优化
👉 如果第三条结果非常少(<1000),那就绝对不应该全表 JOIN。使用执行计划查看是否走索引,发现走了索引,但是查询速度还是特别慢。✅ 极大减少无效 ST_Intersects 的计算次数。✅ 以每个 polygon 为主,查其范围内可能的点。➤ 2. 打印所有相交 ID 看看“哪里交集了”➤ 1. 看看是否真的有交集(先打印有几条)✅ 利用空间索引缩小搜索空间。
2025-07-25 15:34:41
211
原创 # 根据圆心点的经纬度以及半径生成一个**二维平面、多边形缓冲(圆形)**,基于经纬度点,生成半径 2000 米的圆形多边形,且SRID正确匹配,方便QGIS使用。需要依赖posgreSql 数据库的
【代码】# 根据圆心点的经纬度以及半径生成一个**二维平面、多边形缓冲(圆形)**,基于经纬度点,生成半径 2000 米的圆形多边形,且SRID正确匹配,方便QGIS使用。需要依赖posgreSql 数据库的。
2025-07-16 10:12:49
179
原创 通俗易懂的解释一下对象存储和s3
对象存储**在不同领域中,“S3标准”可能指代不同的内容,其中最广为人知的是亚马逊S3(Amazon Simple Storage Service)的存储标准,即“S3标准存储类别”。亚马逊S3标准存储类别(S3 Standard)亚马逊S3是亚马逊云服务(AWS)提供的对象存储服务,用于存储和检索任意数量的数据。“S3标准”是其默认的存储类别,针对频繁访问的数据优化,具备高可用性、高持久性和低延迟的特点。
2025-07-16 10:06:55
844
原创 英语学习笔记2.0
used ten mint in 公司 ✏️ it takes ten minutes to get to the company “used”不对,这里要说“it takes 时间 to 地点”,另外“mint” 应为 “minutes”,“公司”是 company。“have lunch” / “have breakfast” / “have dinner” 就是说“吃午饭/早餐/晚饭”的意思。(你今天吃早餐了吗?其实,“eat” 更强调动作“吃”,而 “have” 更强调整个“吃饭”的过程。
2025-07-10 16:00:18
760
原创 英语笔记1.0
当然可以!我们一步一步来,从最基础的语法和时态讲起,用最通俗的方式解释。我们先从两个关键内容开始:英文的核心句子结构很简单,可以记成:例子:🔍 说明:英语有很多时态,但常用的就几种,先学懂这四个:👉 表示经常、习惯、事实例子:💡 特点:👉 表示过去发生的事情例子:💡 特点:👉 表示将来要发生的事例子:💡 特点:👉 表示正在进行的事情例子:💡 特点:📚 一、5W1H 疑问词通俗讲解🎯 二、这些疑问词要怎么用?大多数疑问句结构都是:疑问词 + 助动词/Be动词 + 主语 + 动词(+ 其
2025-07-10 15:51:09
910
原创 在 Linux 系统中,Java 配置主要涉及以下几个方面:1. 环境变量配置JAVA_HOME :这是最重要的 Java 环境变量。它指向 Java 的安装目录。例如,如果你安装的 JDK 路径
如果用户自行下载并安装了 Java,安装路径可能是根据用户的选择而定,比如安装在。
2025-05-07 11:36:25
439
原创 几何类型(Geometry Types)虽然名称相似,但在结构、维度和用途上是有明显区别的
例如:POLYGON Z ((0 0 10, 10 0 10, 10 10 10, 0 10 10, 0 0 10))例如:MULTILINESTRING Z ((0 0 10, 1 1 20), (2 2 30, 3 3 40))例如:MULTILINESTRING((0 0, 1 1), (2 2, 3 3))MULTILINESTRINGZ: 和上面相同,但每个点有 Z 值。PolygonZ: 一个封闭的区域,且每个点有 Z 值(高度)例如:LINESTRING(0 0, 1 1, 2 2)
2025-05-06 16:54:10
280
原创 Spring 中四种常见初始化方法,对比 static {} 和 @PostConstruct 在并发,Spring 加载顺序大致为: JVM 加载类
✅ 推荐用 @Component + @PostConstruct 方式做初始化(上面给的那种),能配合配置文件读取、统一容器生命周期控制。✅ 4. CommandLineRunner —— 启动后执行,参数来自 main(String[] args)✅ 3. ApplicationRunner —— Spring Boot 启动完成后执行(可接收参数)❌ 不要将 gdal 初始化写在静态代码块中,否则类一被引用就执行,不受 Spring 控制。✅ 1. @PostConstruct —— 最常用、简洁。
2025-05-06 14:32:39
947
原创 空间参考系统核心基础概念
地理信息处理的本质是 “让数据在正确的空间框架下说话”。从坐标系的选择(EPSG:4326 为何重要)到数据转换(为何要转 GB4326),再到分析与可视化,核心都是围绕 “空间参考系统” 展开 —— 这是所有后续操作的地基。掌握这些基础,才能避免 “差之毫厘,谬以千里” 的错误,确保地理数据的科学性和实用性。
2025-04-28 11:49:56
823
原创 PostgreSQL 数据库的作用、原理及 `geometry` 类型解析
PostgreSQL 凭借强大的关系型数据管理能力和 PostGIS 扩展,成为空间数据存储与分析的核心工具作用:既是通用数据库,也是空间数据库,支持从业务数据到地理数据的统一管理。原理:通过标准化的空间数据类型(geometrygeography)、空间索引和 OpenGIS 函数,将几何运算融入 SQL 生态,实现“数据+空间”的双重查询能力。geometry本质。
2025-04-28 11:47:35
809
原创 使用GDAL将geojson传入的面转成点阵数据 ,并且处理多个面取最大的经纬度四个点闭合,同时将参数化 将 GeoJSON 中的 Polygon / MultiPolygon 转为点阵;
将 GeoJSON 中的 Polygon / MultiPolygon 转为点阵;输出结构清晰,包含每个面的信息及生成的点。点之间的距离(单位:度);每个面允许的最大点数;每个面允许的最大面积;
2025-04-28 11:46:35
121
原创 Caffeine的两种实现方式
你的配置代码 +@Cacheable是Spring 标准方式,简单方便,但 TTL 不灵活;是手动缓存方式,更灵活、可控,适合复杂缓存策略。
2025-04-11 16:39:09
312
原创 select、poll 和 epoll 是处理多任务网络请求的三种常见方法。
/ 屏幕显示当前需要处理的学生。// 挨个询问名单里的学生。学生桌上有一个按钮,想提问时按按钮(触发事件),老师的屏幕会直接显示需要帮助的学生座位号,老师只需要看屏幕过去解答。// 记录学生1可能提问。
2025-03-18 18:24:58
448
原创 redis中的list的底层数据结构有两种:双向链表(Doubly Linked List)和压缩列表(ZipList)/hash也有两种哈希表(Hash Table)和压缩列表(ZipList) 。
Redis 的数据结构是为了在内存中快速操作而设计的,而 Java 的数据结构则更侧重于通用性和灵活性。Redis 是一个开源的内存数据结构存储系统,它支持多种数据类型,每种数据类型都有其特定的底层数据结构来实现。综上所述,虽然Redis的Hash和Java的Map在底层都使用了数组和链表来解决哈希冲突,但在具体的实现细节上存在一些差异,特别是在处理哈希冲突和扩容机制上。Redis 的数据类型和底层数据结构的设计使得它能够提供高性能的数据操作和存储能力,适用于多种应用场景,如缓存、消息队列、排行榜等。
2025-03-12 00:00:00
1221
原创 客户端请求在 Spring Cloud Alibaba 框架中,包括 Nginx、Gateway、Nacos、Dubbo、Sentinel、RocketMQ 和 Seata 的调用链路描述
这个调用链路详细描述了一个客户端请求在 Spring Cloud Alibaba 框架中如何经过 Nginx、Gateway、Nacos、Dubbo、Sentinel、RocketMQ 和 Seata 的全过程。每个组件在不同的阶段发挥作用,确保请求的高效处理、服务的稳定性和数据的一致性。
2025-03-11 00:00:00
1856
原创 spring 和JVM之间关系
Spring 和 JVM(Java 虚拟机)之间有着紧密且 crucial 的关系,Spring 框架是基于 Java 语言开发的,而 JVM 是 Java 代码运行的基础环境。
2025-03-10 00:00:00
1686
原创 redis数据类型以及底层数据结构
Map:有两种数据结构:1.压缩列表:当hash结构中存储的元素个数小于了512个。并且元 素的大小小于64字节时,会采用压缩表来存储。2.双向链表:如果不符合压缩表限制,就会存储为双向链表。String:字符串类型,底层就是动态字符串,使用sds数据结构。List:也有两种数据结构:1压缩列表:如果存储的元素个数。redis数据类型以及底层数据结构。
2025-03-09 00:00:00
242
原创 Bean 的生命周期主要包括以下阶段:
对于 singleton 作用域的 Bean,容器关闭时调用销毁方法,释放资源。:在配置文件或注解中定义 Bean,包括其类、作用域等信息。:Spring 容器根据定义创建 Bean 的实例。:容器调用初始化方法,完成 Bean 的初始化操作。:Bean 被应用程序中的其他组件使用。:容器为 Bean 设置配置的属性值。
2025-03-08 00:00:00
173
原创 什么时候使用本地缓存,什么时候使用分布式缓存
是指在多个应用实例或节点之间共享的缓存,通常使用分布式缓存系统如 Redis、Memcached 或 Apache Ignite。分布式缓存可以跨多个节点,提供高可用性和一致性。在选择使用本地缓存还是分布式缓存时,需要根据具体的业务场景和需求来决定。是指在单个应用实例或节点上使用的缓存,通常存储在内存中。通过合理选择和结合使用本地缓存和分布式缓存,可以有效地提高系统的性能和可靠性。
2025-03-06 16:00:06
441
原创 Spring启动过程
(0,spring扫描class得到bean定义,根据bean定义去生成bean(bean定义就是普通对象上面再封装了一次,有一些属性,比如是否是懒加载,是否单例))1,推断构造方法,比如userService这个class如果有多个构造方法,spring会推断出用哪个构造方法来得到一个普通对象,这时候还没得到bean对象2,依赖注入,给加了@autowired的属性赋值。循环依赖也是发生在这一步(先bytype,再byname)3,调用aware方法,判断当前对象是否实现了那些aware接口。
2025-03-06 10:24:44
999
原创 JPA的insert后返回插入的id
方法时,Hibernate会更新实体的所有字段,即使这些字段在数据库中并没有改变。这可能会导致不必要的数据库操作,并且可能会违反数据库的约束。注解时,Hibernate会检查实体的所有字段,只更新那些已经改变的字段。这可以减少数据库操作,并提高性能。是Hibernate提供的一个注解,用于在更新实体时只更新那些已经改变的字段,而不是更新所有字段。注解可以解决这个问题。// 获取自增的 ID。默认情况下,当你调用。
2025-03-06 10:18:40
205
原创 为什么需要动态代理和静态代理 通俗易懂的解释一下
静态代理和动态代理都是代理模式的应用,它们的核心思想都是通过代理对象来控制对目标对象的访问。静态代理的实现简单,但代码冗余且灵活性差;动态代理的实现复杂,但灵活性高且代码复用性强。在实际开发中,应根据具体的需求和场景选择合适的代理方式。
2025-03-03 09:55:23
465
原创 单例模式---是 Spring 容器的核心特性之一
单例 Bean 的线程安全性取决于其使用的共享资源。如果单例 Bean 没有可变状态,它是线程安全的。如果存在可变状态,必须采取同步机制(如等)来保证线程安全。在多线程环境下,开发者需要根据具体需求选择合适的线程安全策略来保护单例 Bean 的共享状态。总结在 Spring 中,默认的 Bean 作用域是单例(Singleton),确保在整个应用上下文中只有一个实例。如果你需要每个请求都创建一个新的 Bean 实例,可以使用或其他所需的作用域。
2025-02-28 17:00:49
1271
原创 WebSocketHandler 是 Spring Framework 中用于处理 WebSocket 通信的接口
在这个示例中,`CustomWebSocketHandler` 实现了 `WebSocketHandler` 接口,并在 `afterConnectionEstablished` 方法中将新建立的 WebSocket 会话添加到 `sessions` 集合中。在 `handleMessage` 方法中,接收到的消息被广播给所有连接的客户端。通过实现 `handleMessage` 方法,可以处理从客户端接收到的消息,并通过 `WebSocketSession` 对象发送消息回客户端。
2025-02-26 21:51:00
750
原创 微软云和金山云和k8有什么区别
Kubernetes是一个开源的容器编排系统,用于自动化部署、扩展和管理容器化应用程序。它提供了一种标准化的方式来运行和管理容器,使得开发者能够更轻松地在多个主机或云端平台上管理和协调容器化服务14。微软云:微软云是微软公司提供的一系列云计算服务,旨在为用户提供全面且灵活的云解决方案。它包括计算、存储、网络、安全等多个方面,帮助企业构建、部署和管理应用程序和服务8。
2025-02-26 21:49:44
1122
原创 使用Excel批量生成SQL语句
"INSERT INTO Person (language, config, type, where, `key`, return_switch) VALUES ('"&B2&"', '"&B2&"', 3, '用户', 'userUrl', 0);
2025-02-25 11:07:54
139
原创 TSP(Telematics Service Provider,车载信息服务提供商)
TSP相当于车云链路中的“智能路由+数据管家”,通过技术整合、安全加固和服务协同,既保障车企对核心数据的可控性,又解决物联网碎片化生态下的兼容难题,最终提升用户体验(如远程控车流畅)和商业价值(如车联网功能快速迭代)。TSP(Telematics Service Provider,车载信息服务提供商)在车端和云端之间主要扮演。
2025-02-18 14:41:12
668
原创 IOT通道&MQTT
IoT通道是物联网设备与云端或设备之间建立的通信链路,用于数据传输和指令交互。例如,OT通道是小米IoT设备与云端之间建立的长连接,支持UDP、TCP或TLS三种传输方式,主要用于业务RPC(远程过程调用)的透传。
2025-02-15 12:12:56
300
原创 强引用(Strong Reference)、软引用(Soft Reference)、弱引用(Weak Reference)和虚引用(Phantom Reference)
在Java中,对象的引用类型可以分为四种:强引用(Strong Reference)、软引用(Soft Reference)、弱引用(Weak Reference)和虚引用(Phantom Reference)。这四种引用类型为我们提供了多样化的内存管理手段,使得我们能够灵活地控制对象的生命周期。通过合理利用这四种引用,不仅可以有效防止内存泄漏,还可以优化应用性能。
2024-11-25 11:53:39
296
原创 RocketMQ 确保事务消息不丢失的机制主要包括以下几个方面:
如果是Rollback,RocketMQ会把Half消息写入到特定主题中,如果是Commit,RocketMQ会将消息提交到普通topic中,供消费者消费。消息首先发送到主节点,主节点将消息写入磁盘后,异步地将消息复制到从节点。:事务消息机制首先会发送一个Half消息到MQ中,这个Half消息在消费者看来是不可见的,相当于一个“试探”消息。如果Half消息发送失败,就会回滚业务逻辑,确保消息不会丢失。通过这些机制,RocketMQ能够确保事务消息的可靠性,避免消息在发送和存储过程中的丢失。
2024-11-21 13:56:28
361
1
原创 Spring 框架提供了大量的注解来支持各种功能,以下是一些常用的 Spring 注解及其作用:
这些注解是 Spring 框架中非常核心和常用的,它们极大地简化了配置和开发过程。和 @PreDestroy。
2024-11-21 13:40:19
231
原创 Spring boot常用注解和作用
Spring Boot 提供了许多注解来简化开发和配置。这些注解是 Spring Boot 开发中非常核心和常用的,它们极大地简化了配置和开发过程。和 @PreDestroy。
2024-11-21 13:39:47
614
原创 Redis的String类型和Java中的String类在底层数据结构上有一些异同点
总结来说,Redis的String类型和Java中的String类虽然都是动态字符串,但Redis的SDS在设计上更加注重内存效率和二进制数据的安全存储,而Java的String类则更侧重于字符串的不可变性和Unicode文本的处理。
2024-11-21 10:43:24
673
原创 redis的List底层数据结构 分别什么时候使用双向链表(Doubly Linked List)和压缩列表(ZipList)
从Redis 3.2版本开始,Redis引入了QuickList作为List的新的底层实现,它结合了ZipList和双向链表的特点,以提高性能和存储效率。QuickList是一个由多个ZipList组成的双向链表,这样可以在保持ZipList内存效率的同时,支持更长的列表和快速的随机访问。- 当List中的元素数量超过512个,或者元素中存在长度超过64字节的字符串时,Redis会使用双向链表作为List的底层数据结构。- 列表对象保存的所有字符串元素的长度都小于64字节。
2024-11-21 10:36:27
609
原创 redis的map底层数据结构 分别什么时候使用哈希表(Hash Table)和压缩列表(ZipList)
ZipList允许在O(1)时间内在列表的任一侧进行推送和弹出操作,但是,由于每个操作都需要重新分配ZipList使用的内存,因此实际复杂性与ZipList使用的内存量有关。- 如果Hash中的数据项数量超过512个,或者任意一个value的长度超过了64字节,Redis将使用HashTable作为Hash的底层实现。- HashTable是一种散列表结构,通过哈希函数将键映射到表中的位置,支持高效的查找、插入和删除操作,适合存储大量的键值对。- 当Hash中所有的键和值的字符串长度都小于或等于64字节。
2024-11-21 10:32:09
518
1
原创 Redis 集群主要有以下几种类型
这些集群模式各有特点,适用于不同的应用场景。主从复制模式和哨兵模式适用于需要高可用性和读写分离的场景,而Cluster模式则适用于需要水平扩展和高并发处理的场景。
2024-11-20 10:16:22
465
原创 redis的双重hash作用
Redis 的双重哈希(Double Hashing)通常是指在 Redis 集群中使用的一种数据分片和节点定位机制。这种机制主要包含两个哈希步骤:双重哈希的优势包括:此外,Redis 集群使用这种机制可以实现数据的高可用性和可扩展性,同时保持较低的数据迁移成本和较高的数据访问效率。Lua 本身并没有提供对于原子性的直接支持,它只是一种脚本语言,通常是嵌入到其他宿主程序中运行,比如 Redis。在 Redis 中执行 Lua 脚本的原子性是指:整个 Lua 脚本在执行期间,不会被其他客户端的命令打断。这意味
2024-11-19 21:22:10
697
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人