- 博客(94)
- 收藏
- 关注
原创 企业微信智能机器人开发指南 - Java
本文介绍了企业微信智能机器人Java开发的完整流程,包含两个核心接口实现:1)URL验证接口处理GET请求,用于企业微信验证服务有效性,需正确处理corpid参数和返回解密后的echostr;2)消息接收接口处理POST请求,实现消息解密、内容解析和智能回复功能,支持文本消息处理并根据聊天类型(单聊/群聊)构建不同的回复消息结构。开发需准备企业微信管理权限、可公开访问的域名项目,并集成官方加解密库。文中提供了完整的代码示例,包括消息解密、业务逻辑处理和回复消息加密等关键步骤的实现方法。
2025-08-27 17:59:14
2227
9
原创 Flask ORM 查询详解:Model.query vs db.session.query vs db.session.execute
Flask SQLAlchemy查询方法对比:Model.query适合简单CRUD操作,直接返回模型对象,使用简洁;db.session.query适用于复杂查询和多表连接,返回Row对象或元组;db.session.execute用于原生SQL执行,性能最高但灵活性最低。最佳实践推荐优先使用Model.query,复杂场景用db.session.query,仅在特殊需求时使用原生SQL。三种方法在返回类型、易用性和灵活性上各有特点,开发者应根据实际需求选择。
2025-08-14 19:35:34
1176
1
原创 Flask中ORM的使用
本文介绍了Flask中使用flask_sqlalchemy进行ORM开发的方法,重点展示了不使用物理外键的模型定义和关联查询。内容包括基础模型(学生、班级、课程)和多对多关联模型的定义,通过db.relationship和association_proxy实现应用层关联。详细讲解了各种查询操作:简单查询、一对多(班级-学生)、多对多(学生-课程)关系查询,包括使用relationship和JOIN两种方式,以及分页、聚合等高级查询技巧。特别适合需要在Flask项目中实现复杂数据关系但避免使用物理外键的开发者
2025-08-14 11:25:18
997
原创 git中多仓库工作的常用命令
本文总结了Git多仓库工作时的常用命令,包括远程仓库管理、分支操作和同步方法。主要内容有:1)远程仓库配置操作(查看、添加、重命名、删除);2)分支管理(创建跟踪分支、设置跟踪关系、查看分支信息);3)推送与拉取操作(指定远程仓库和分支);4)合并操作。文中提供了具体命令示例,如git remote add、git branch -u、git push origin branch等,涵盖了多仓库协作中的常见场景,帮助开发者高效管理多个Git仓库的工作流程。
2025-07-29 20:58:12
345
原创 树形结构递归查询与嵌套结构转换:Flask + PostgreSQL 完整实现
本文介绍了在Flask框架下使用PostgreSQL递归查询实现树形菜单结构的方法。通过SQL的WITH RECURSIVE语法实现菜单数据的递归查询,Python代码将扁平查询结果转换为嵌套树形结构。关键点包括:1) 使用PostgreSQL的递归CTE查询菜单层级关系;2) 构建路径字符串标识节点位置;3) 实现build_tree函数将扁平数据转换为树形结构;4) 提供RESTful API端点返回JSON格式的菜单树。该方法有效解决了层级数据展示问题,适用于菜单、组织架构等树形数据场景。
2025-07-29 19:42:16
657
原创 MyBatis-Plus 中 nested() 与 and() 方法详解
MyBatis-Plus查询构建器中的nested()与and()方法对比: and()用于简单AND条件连接,不生成括号,适用于平铺条件组合。nested()会自动生成括号,支持复杂嵌套逻辑,特别适合处理OR条件和需要明确优先级的场景。 核心区别: nested()自动加括号,and()不会 nested()支持无限层级嵌套 OR条件必须用nested() 复杂查询优先使用nested() 最佳实践: 简单AND条件用and() OR/复杂逻辑用nested() 超过3层嵌套需考虑重构 索引列前置优化性能
2025-06-25 13:41:15
1283
原创 行为验证码 AJ-Captcha 使用文档
AJ-Captcha验证码系统集成指南:需添加captcha-spring-boot-starter和Redis依赖,配置Redis连接。核心实现包括Redis缓存服务类CaptchaCacheRedisImpl(含设置、查询、删除验证码等方法)、SPI配置文件及Spring Boot配置类(配置验证码属性和Redis模板)。系统支持验证码生成、校验、防刷等安全功能,适用于Web应用安全验证场景。
2025-06-24 20:28:26
1794
2
原创 App扫码登录网页版接口设计与实现
本文介绍了App扫码登录网页版的完整实现方案。系统采用二维码token作为媒介,通过Redis缓存管理登录状态,包含"未扫描"、"已扫描"、"已确认"三个阶段。主要实现流程包括:网页端生成二维码并轮询状态,App扫码验证身份后确认登录,最后完成凭证交换。技术栈使用Spring Boot+Redis+JWT,关键接口包含二维码生成、状态轮询、登录确认等。Redis存储会话状态和用户信息,有效期为5分钟,确保安全性和时效性。系统设计简洁高效,适用于移动
2025-06-20 17:50:25
503
原创 Redis 缓存穿透、缓存雪崩、缓存击穿分别是什么?
Redis缓存问题及解决方案概览: 缓存穿透(查询不存在数据): 解决方案:布隆过滤器、缓存空值、接口校验 缓存雪崩(大量key同时失效): 解决方案:随机过期时间、多级缓存、热点数据永不过期 缓存击穿(热点key失效): 解决方案:互斥锁、逻辑过期时间、数据预热 优化建议:结合监控告警、限流降级、集群部署等策略,根据业务场景选择合适方案,确保系统高可用性。
2025-05-28 17:22:15
1320
原创 Redis 的内存回收机制
Redis内存回收机制分为过期Key自动淘汰和内存淘汰策略两部分。过期Key通过惰性删除(访问时检查)和定期抽样删除(每秒10次随机检查)两种方式回收。内存淘汰策略在达到maxmemory限制时触发,提供LRU、LFU、随机淘汰和TTL等算法选择,如allkeys-lru或volatile-ttl。Redis采用近似算法平衡性能与精确度,例如LRU通过采样5个Key实现。配置建议包括优先使用allkeys-lfu、调整采样数量及启用惰性删除异步释放内存。这些机制共同确保Redis高效管理内存资源。
2025-05-28 17:14:52
824
原创 MySQL日志文件有哪些?
MySQL日志文件是数据库管理的重要组成部分,主要包括错误日志(记录运行错误)、通用查询日志(记录所有SQL操作)、慢查询日志(追踪低效SQL)、二进制日志(支持主从复制和数据恢复)、事务日志(InnoDB的重做/回滚日志)以及中继日志(主从复制中转)。这些日志分别用于故障排查、性能优化、数据恢复和事务管理。通过合理配置如log_error、general_log、log_bin等参数,可有效监控和保障数据库运行。管理员需根据实际需求启用相应日志,并注意性能影响及定期清理策略。
2025-05-26 17:20:53
875
原创 Spring + MyBatis/MyBatis-Plus 分页方案(limit分页和游标分页)详解
本文详细介绍了Spring Boot与MyBatis/MyBatis-Plus的分页实现方案。主要内容包括: 传统LIMIT/OFFSET分页的三种实现方式 原生SQL手动分页 PageHelper插件方案(推荐) MyBatis-Plus分页插件(推荐) 每种方案都给出了完整的代码示例 游标分页实现 基于ID或时间戳的逐页查询方案 包含请求参数、响应参数、Mapper和Service层的实现代码 版本支持说明 明确标注支持Spring Boot 3.1.x和MyBatis相关组件的版本 文章提供了可立即在
2025-05-26 17:06:57
2331
1
原创 Spring WebFlux 与 WebClient 使用指南
WebClient 是 Spring WebFlux 模块提供的非阻塞、响应式 HTTP 客户端,基于 Project Reactor 实现,适用于高并发场景
2025-05-13 19:29:13
2126
原创 盘点Spring项目中发送Http请求的工具
在Spring框架中,发送HTTP请求并解析结果的常用工具和方法包括RestTemplate、WebClient、Feign Client、Apache HttpClient/OkHttp和RestAssured。RestTemplate适用于传统同步请求,但未来可能被弃用;WebClient是异步非阻塞的响应式客户端,适合高并发场景;Feign Client通过声明式接口简化微服务间通信;Apache HttpClient和OkHttp提供高度定制化的HTTP请求控制;RestAssured则专用于API
2025-05-12 20:57:47
427
原创 MySQL常用客户端工具详解
以上工具覆盖了 MySQL 的日常管理、备份恢复、性能测试和安全配置。合理使用这些工具可以显著提升数据库运维效率。根据需求选择合适工具,并结合具体场景调整选项参数。MySQL 提供了多种客户端工具,用于数据库管理、维护、备份、性能测试等操作。
2025-05-07 13:47:40
3045
原创 java 1.8 在编程中语法上的一些小技巧
Java 8 的 Lambda 表达式可以替代需要接口实现的代码,尤其适用于函数式接口(只有一个抽象方法的接口)。用 Stream 处理集合数据,支持链式调用,简化过滤、映射、排序等操作。掌握这些技巧后,你的 Java 代码会变得更加简洁、易读且高效!简化 Lambda 表达式的写法,直接引用已有方法。自定义函数式接口,结合 Lambda 使用。允许接口中包含具体实现,增强接口的扩展性。简化异步任务编排,支持链式调用和组合操作。简化 Map 的合并、计算和遍历操作。,提供线程安全且易用的日期时间操作。
2025-04-27 18:07:16
875
原创 RabbitMQ 发送者确认机制详解
Confirm 机制:确保消息到达 Exchange,需处理 ack/nack。Return 机制:处理消息路由到 Queue 失败,需配置。联合使用:两者结合可覆盖消息从生产者到队列的全链路可靠性保障。通过合理配置和实现回调逻辑,可显著提升 RabbitMQ 消息传输的可靠性,适用于金融交易、订单处理等高要求场景。
2025-04-02 11:25:42
760
原创 Spring项目中使用EasyExcel实现Excel 多 Sheet 导入导出功能(完整版)
通过本方案可实现:动态导出:无需模板,根据 DTO 类自动生成表头。高效导入:逐行解析,内存占用低。类型安全:通过泛型和注解保证数据一致性。灵活扩展:支持自定义样式、转换器、校验逻辑。
2025-03-28 17:09:47
1110
原创 Java中的注解是什么?
Java 注解通过简洁的语法为代码添加元数据,广泛应用于框架配置、数据校验和代码生成。定义注解:使用@interface和元注解。使用注解:标注在目标代码元素上。处理注解:通过 APT 或反射实现逻辑。掌握注解机制,能够更好地理解现代 Java 框架(如 Spring)的设计思想,并编写更简洁、可维护的代码。
2025-03-26 17:27:02
870
原创 MySQL中的锁机制详解
MySQL的锁机制通过多粒度锁(表级、行级)和多种锁模式(记录锁、间隙锁等),在保证数据一致性的同时提高并发性能。理解不同锁的特性、兼容性及适用场景,能帮助开发者优化数据库设计和事务逻辑。MySQL中的锁机制是确保数据一致性和并发控制的核心组成部分。行级锁锁定表中的特定行,其他行仍可被访问。InnoDB引擎支持行级锁。表级锁锁定整张表,影响所有行。适用于并发要求较低的场景。意向锁是表级锁,用于协调行级锁与表级锁的冲突。
2025-03-19 11:58:01
1298
原创 MyBatis-Plus核心功能与实战案例
是 MyBatis 的增强工具,在保留 MyBatis 原生功能的基础上,通过内置通用 Mapper、Service、条件构造器等,大幅简化开发。核心优势无侵入:只做增强不做改变,可与 MyBatis 原生功能混合使用高效开发:内置通用 CRUD 方法,减少 80% 的重复代码强大条件构造器:支持 Lambda 表达式,避免 SQL 注入风险定义自定义方法@Override注册注入器@Component@OverrideMapper 接口调用四、最佳实践与常见问题。
2025-03-18 17:40:45
1029
原创 MySQL意向锁我该怎么理解?
在MySQL中,意向锁(Intention Lock)是一种用于协调不同粒度锁(如表锁和行锁)的机制,其核心目的是。通过合理使用意向锁,可以在保证事务隔离性的同时,减少锁冲突,优化数据库的并发处理能力。不同锁之间的兼容性决定了事务是否会被阻塞。,从而避免粗粒度锁(如表锁)与细粒度锁之间的冲突。
2025-03-17 19:40:37
623
原创 MQ:通过 @RabbitListener 创建交换机、队列及绑定
通过 @RabbitListener 的 bindings 属性,可以简洁地声明交换机、队列及其绑定关系,适合快速开发场景
2025-03-17 13:43:29
1462
原创 @Async 注解不生效的常见原因及解决方案
Async不生效的常见原因包括未启用异步支持方法调用方式错误线程池未配置和异常未处理。添加。确保通过代理对象调用异步方法。配置自定义线程池。处理异步方法异常。验证方法作用域和 Bean 管理状态。正确配置后,异步方法将按预期在独立线程中执行,显著提升系统并发性能。
2025-03-14 17:38:54
1553
原创 Redisson 分布式锁全面解析:锁类型(可重入锁、公平锁、联锁、红锁、读写锁)和锁常见方法解读
Redisson 提供了丰富的分布式锁实现,核心在于原子性操作可重入设计和自动续期机制。选择锁类型时需根据场景权衡性能、可用性和复杂度。始终在finally块中释放锁。合理设置锁超时时间,避免业务未完成锁已过期。高可用场景使用红锁,防止 Redis 单点故障。读写分离场景使用读写锁,提升并发性能。通过合理使用 Redisson 分布式锁,可有效解决分布式系统中的资源竞争问题,保障数据一致性。
2025-03-14 14:38:23
2051
原创 Java 线程与线程池类/接口继承谱系图+核心方法详解
线程类与接口RunnableCallableThreadExecutor框架构成 Java 并发基础。核心方法join():用于线程间同步。shutdown():优雅关闭线程池。submit():提交有返回值的任务。方法选择直接操作线程用start()和join()。线程池任务管理用execute()和submit()。
2025-03-11 20:43:42
1122
原创 Java I/O 流完整指南
Java I/O 流体系是处理数据输入输出的核心工具,涵盖从基础字节流到高性能NIO的全场景解决方案。理解流的设计模式:装饰器模式实现功能扩展。正确选择流类型:字节流处理二进制,字符流处理文本。掌握NIO非阻塞模型:适用于高并发网络服务。严格资源管理:使用避免泄漏。性能优化:缓冲、分块处理、零拷贝技术。通过合理应用这些知识,可以构建高效、健壮的I/O密集型应用。
2025-03-10 17:13:40
934
原创 Java 类、匿名内部类、静态(static)、抽象(abstract)详解
1. Java 类(Class)定义Java 类是面向对象的基础单元,用于封装数据(属性)和行为(方法),通过class关键字定义。特点可以实例化为对象(通过new关键字)。支持继承(单继承)、实现接口(多实现)。包含成员变量、方法、构造方法等。示例// 定义一个普通类// 成员变量(实例变量)// 构造方法// 实例方法System.out.println("我是 " + name + ",年龄 " + age);// 使用。
2025-03-07 10:54:26
605
原创 Java 动态代理详解:利用动态代理手写一个简单的OpenFeign
动态代理通过运行时生成代理类,实现代码增强和解耦,是 Java 高级编程和框架设计的核心技术。它在 AOP、RPC、ORM 等场景中广泛应用,如 Spring、MyBatis、Feign 等框架均依赖动态代理实现核心功能。使用时需注意接口限制、性能影响及代理对象的特殊性,合理选择代理方式(JDK Proxy 或 CGLIB)以适配业务需求。
2025-03-06 20:17:55
1098
原创 MyBatis @Param 注解详解:指定的参数找不到?
Param的核心作用是明确参数名称,避免因参数名丢失或歧义导致的错误。报错的根本原因通常是名称不匹配或参数绑定机制不清晰。根据参数类型和数量,合理选择是否使用@Param,并在 XML 中严格匹配名称即可解决问题。
2025-03-05 13:48:57
1478
原创 Java Lambda 表达式详解:是什么?为什么要用?底层原理?工作流程?什么地方用?
Lambda 表达式通过简化代码、支持函数式编程,并借助提升性能,成为现代 Java 开发的核心工具。其典型应用包括集合处理、事件回调和替代冗余的匿名类,是编写高效、简洁代码的关键手段。
2025-03-05 11:23:10
1400
原创 HashMap 的底层结构详解:原理、put和get示例
通过哈希函数快速定位键值对,使用链地址法解决冲突,并通过动态扩容和红黑树优化性能。理解其内部机制,有助于在实际开发中合理使用并规避潜在问题(如内存泄漏、线程安全问题)。是基于哈希表实现的键值对存储结构,其核心设计目标是高效的数据存取(理想情况下时间复杂度为 O(1))。的哈希值均映射到索引 1,且链表已转换为红黑树(当链表长度 ≥8 且数组长度 ≥64 时)。(8 * 0.75 = 6),当元素数量超过 6 时触发扩容。,但尚未触发扩容(Java 中实际在插入第 7 个元素时扩容)。
2025-03-04 21:05:31
1871
原创 ThreadLocal 与 Thread.currentThread() 的区别
省流:ThreadLocal:用于线程隔离的变量存储,解决多线程数据共享问题。Thread.currentThread():用于获取当前线程对象,操作线程状态或获取线程信息。
2025-03-03 16:33:38
736
原创 Java中接口(Interface)与类(Class)的区别
接口和类是 Java 面向对象编程中的核心概念,它们在设计目的、功能和使用场景上有显著差异。通过合理使用接口和类,可以构建高内聚、低耦合的面向对象系统。
2025-03-03 14:12:54
2487
1
原创 说说JVM的底层原理(JAVA是如何运行的)?
Java 虚拟机(JVM)是 Java 程序运行的核心环境,其设计融合了内存管理、类加载、垃圾回收和高效执行等复杂机制。以下从底层视角详细解析其核心模块,并结合实际场景说明其工作原理。,不仅能优化应用性能(如减少 Full GC 停顿),还能有效排查内存泄漏、锁竞争等问题,是高级 Java 开发的必备技能。类加载是 JVM 动态性的基石,其触发条件包括首次使用类(如。、反射调用等)或继承父类时。:静态集合持有对象导致无法回收。
2025-02-28 19:00:13
1808
原创 Spring Boot 启动与 Service 注入的 JVM 运行细节
通过此示例,可以清晰看到 JVM 类加载、Spring Bean 生命周期和业务方法调用之间的关系,帮助理解 Java 应用底层运行机制。我们通过一个具体的 Spring Boot 项目示例,结合 JVM 的类加载和对象实例化机制,详细说明。
2025-02-28 18:21:25
1212
原创 Redis 数据结构和使用详解(带示例)
通过合理选择数据结构和命令,可以高效解决缓存、实时统计、消息通信等多样化需求。:存储唯一元素,支持交集、并集操作(如共同好友、标签系统)。:存储对象字段,适合保存用户信息、商品属性等结构化数据。:存储文本、数值或二进制数据,适用于缓存、计数器等。:实现消息队列、最新消息列表(如微博时间线)。:存储和查询地理位置(附近的人、商家)。:消息队列(支持消费者组、消息持久化)。:排行榜、优先级队列(按分数排序)。:位操作(如用户签到、活跃统计)。:消息广播(如实时通知、聊天室)。:近似去重计数(如统计UV)。
2025-02-27 19:54:27
1526
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅