- 博客(43)
- 收藏
- 关注
原创 苍穹外卖项目复习笔记(三)-- 微信支付,Spring Task,WebSocket,商家运营
本文总结了苍穹外卖项目的三个核心模块:1)微信支付流程,包括小程序下单、预支付接口调用和回调处理,开发时需使用内网穿透工具;2)Spring Task定时任务,通过Cron表达式实现支付超时自动取消和订单状态自动更新;3)WebSocket长连接技术,用于实现商家端的实时订单提醒和催单功能。文中提供了各模块的关键代码示例,包括支付回调处理、定时任务配置和WebSocket服务端实现,完整展现了外卖系统的核心业务逻辑和技术实现方案。
2025-12-20 22:05:40
248
原创 苍穹外卖项目复习笔记 (二) -- 小程序开发,redisTemplate,spring cache
本文摘要了微信小程序登录后端实现、Redis模板对比和Spring Cache应用三部分内容。微信登录流程包括:后端通过code换取openid,生成JWT令牌返回前端。对比了RedisTemplate(二进制序列化)和StringRedisTemplate(字符串存储)的差异,推荐使用后者。最后介绍了Spring Cache的启用方法,通过注解简化缓存逻辑,提升用户端查询性能。全文提供了完整的代码示例,涵盖拦截器、控制器、服务层实现等关键环节。
2025-12-15 19:35:14
383
原创 苍穹外卖项目总结(一)[MyBatis-Plus,文件上传,Redis]
本文总结了苍穹外卖项目中MyBatis-Plus的核心应用要点。主要包括:1)基础CRUD架构中BaseMapper与ServiceImpl的分工,Mapper处理底层数据库操作,Service封装业务逻辑;2)分页查询实现,单表查询需配置拦截器,多表关联则需手写SQL并通过Page对象自动分页;3)批量操作与链式调用的优化技巧;4)公共字段填充的最佳实践,推荐使用MetaObjectHandler实现自动填充创建/更新时间等字段。文章通过具体代码示例展示了多表分页查询和字段填充的实现细节,为类似项目开发提
2025-12-12 17:11:59
797
1
原创 LangChain4j 基础实践 -- 简易ai助手
本文介绍了如何使用LangChain4j框架为Java开发者提供AI能力集成。文章基于鱼皮教程,展示了如何通过LangChain4j调用国产大模型Qwen,包括基础环境配置、ChatModel调用、AiService接口定义、工厂模式扩展以及对话记忆功能实现。重点讲解了RAG(检索增强生成)技术流程,从文档加载到向量数据库检索的全过程。通过示例代码演示了如何将AI能力无缝融入Java业务系统,使开发者能够用熟悉的Java方式调用大模型,同时支持多轮对话、知识库增强等高级功能。项目代码已开源在GitHub,为
2025-12-04 16:07:32
974
原创 Redis 内存回收
Redis采用多层级内存回收机制,包括键过期删除策略(惰性删除+定期删除)、内存淘汰策略(8种maxmemory-policy选项)和jemalloc内存管理。过期键通过访问时检查或定期扫描回收;内存满时根据策略淘汰数据;jemalloc减少碎片,active-defrag主动整理内存。实际应用中需注意大key、集中过期等问题,合理配置策略确保高性能。面试重点考察回收策略、LRU/LFU区别及jemalloc优势等知识点。整体上,Redis通过组合机制实现高效安全的内存管理。
2025-12-03 17:02:18
1394
原创 Redis 通信协议(RESP)
摘要: RESP是Redis的通信协议,具有简单、高效、可读性强等特点,支持Pipeline和多种数据类型。RESP2包含五种基础类型:简单字符串(+)、错误(-)、整数(:)、批量字符串($)和数组(*),适用于命令参数和返回结果。Redis6引入RESP3,扩展了Map、Set等复杂类型,但默认仍兼容RESP2。RESP的优势包括解析简单、高性能、支持批处理,且底层通信通过前缀标识数据类型(如*3\r\n$3\r\nSET)。面试常考察协议选择原因、二进制安全性及RESP3改进。
2025-12-03 16:51:03
628
原创 Redis网络模型 - 从fd和I/O模型到redis网络模型,再到I/O多线程,7000字长文预警
阻塞 IO =调用 IO 时,会一直等,等数据到达后才继续执行。类似生活中的场景:“我要一杯奶茶。然后你不走,站在原地等奶茶做好。在等待的时候,你不能干别的事,只能等。非阻塞 IO =IO 立即返回,不等数据。还是用奶茶店的例子:“我要奶茶。“还没好,你回去等会再来问吧。于是你每隔几秒来问:“好了没?好了没?好了没?不等数据马上返回自己不断轮询(polling)IO 多路复用 =一个线程同时“监听”多个 socket,当哪个有数据,就告诉你处理它。
2025-12-02 19:20:32
983
原创 Redis 数据结构(下)ZSet, Hash
Redis有序集合(ZSet)和哈希(Hash)底层结构解析: ZSet采用两种编码方式: 小数据(元素<128且值<64B)使用ziplist,存储为[element][score]连续结构 大数据采用dict+skiplist组合,dict实现O(1)成员查询,skiplist提供O(logN)排序 Hash结构类似: 小数据(元素<512且值<64B)使用ziplist存储[field][value]对 大数据转换为纯dict结构 关键区别:ZSet需要排序故引入skiplis
2025-12-01 17:16:51
909
原创 Redis 数据类型(上)String,List,Set
Redis 数据类型底层实现解析: String 类型有 RAW、EMBSTR 和 INT 三种编码格式,分别对应长字符串、短字符串和整数存储;List 采用 quicklist 结构,结合了链表和压缩列表的优点;Set 类型则根据元素类型和数量,使用 intset(小整数集合)或 dict(哈希表)实现。三种数据结构都针对不同使用场景进行了优化,String 注重灵活存储,List 侧重高效操作,Set 则强调内存效率与查询性能的平衡。
2025-12-01 16:28:48
1108
原创 Redis底层数据结构 -- ziplist, quicklist, skiplist
Redis底层数据结构学习笔记总结了ziplist、quicklist和skiplist三种核心结构。ziplist是紧凑型线性存储,用于小型List/Hash/ZSet,内存占用小但修改效率低;quicklist结合链表和ziplist,优化List结构的插入删除性能;skiplist作为ZSet底层,实现O(logN)的查找和范围查询。三种结构各有特点:ziplist空间最优但修改慢,quicklist折中平衡,skiplist查询高效但内存略大。这些设计体现了Redis在内存优化和查询性能间的权衡。
2025-11-29 15:19:04
3139
2
原创 Redis批处理优化
Redis Pipeline是一种批处理机制,通过减少网络往返次数显著提升性能。在单机模式下,客户端可连续发送多条命令,Redis批量执行后统一返回结果。集群环境下需确保所有key位于同一HashSlot,否则会报错。解决方案包括使用hash_tag强制key落在同一slot或按slot分组处理。Java中可通过Jedis/Lettuce实现Pipeline,但集群环境下需注意slot一致性。四种优化方案对比显示,hash_tag方案性能最优但可能导致热点问题,而并行slot方案适合key分布较广的场景。
2025-11-27 15:19:33
573
原创 Redis键值设计
Redis键值设计要点总结:1. 键设计原则:采用"业务域:实体类型:实体ID"三层命名规范,确保可读性、唯一性和可扩展性,避免BigKey问题。2. 底层存储优化:String类型根据长度自动选择int/embstr/raw编码,建议键长≤44字节以使用高效的embstr编码。3. BigKey处理:拆分大Key、限制集合长度、使用Stream替代长列表,删除时优先使用UNLINK命令。4. 数据结构选择:根据不同场景选择合适结构,如Hash存储对象、ZSet做排行榜、HyperLog
2025-11-26 09:35:59
948
原创 Redis 多级缓存架构学习笔记
本文系统介绍了多级缓存架构设计,包含浏览器、OpenResty本地缓存、Redis分布式缓存、JVM进程缓存和数据库五层结构。重点分析了请求全链路流程和数据更新机制,通过Canal监听binlog实现缓存同步更新,采用主动删除策略保证最终一致性。该架构通过分层缓存显著提升性能,有效拦截70%以上请求,同时具备高可用、高扩展性特点,能应对高并发场景并降低数据库压力。文章还详细阐述了各层缓存的特点、作用及协同机制,为构建高性能系统提供了完整解决方案。
2025-11-25 11:34:13
1103
原创 Redis哨兵模式和分片集群
本文介绍了Redis的两种高可用方案:哨兵(Sentinel)和分片集群(Cluster)。哨兵主要用于主从复制环境下的自动故障转移,通过监控节点状态、选举新主节点等机制保证高可用性。分片集群则通过数据分片(16384个哈希槽)实现分布式存储,每个主节点负责部分槽位,支持自动故障转移和客户端直连。两者对比显示:哨兵适合数据量不大但需要高可用的场景,而分片集群更适合大数据量、高并发的分布式需求。文章详细阐述了两种方案的工作原理、配置示例和核心机制。
2025-11-24 16:02:47
800
原创 Redis主从集群同步机制:全量同步和增量同步
Redis主从同步机制摘要 Redis主从同步分为全量同步和增量同步: 全量同步:首次连接或复制积压缓冲区不足时触发,主节点生成RDB文件发送给从节点,确保数据完全一致,但资源消耗大。 增量同步:断线重连后,若从节点的偏移量仍在主节点的**复制积压缓冲区(backlog)**内,则仅发送缺失的命令,高效且轻量。
2025-11-23 11:39:53
1244
原创 Redis 持久化机制:RDB 和 AOF
Redis持久化机制解析:RDB与AOF对比 Redis提供两种数据持久化方案: RDB(快照):通过定时保存内存快照实现持久化,二进制格式体积小,恢复快,但可能丢失部分数据。支持SAVE(阻塞式)和BGSAVE(后台子进程)两种保存方式,采用Copy-On-Write技术减少内存开销。 AOF(日志追加):记录所有写操作命令,提供三种同步策略(always/everysec/no),数据安全性更高但文件较大。具备重写机制可压缩文件体积。
2025-11-23 10:59:51
988
原创 [springboot]分页查询与消息转化器
摘要:本文介绍了Java后端开发中的两个关键技术点。首先详细说明了如何使用PageHelper实现分页查询,包括添加Maven依赖、Controller层接口设计、Service层分页逻辑实现(使用PageHelper.startPage方法)等步骤。其次讲解了如何通过自定义JacksonObjectMapper和扩展消息转换器,将LocalDateTime等时间类型格式化为更易读的yyyy-MM-dd HH:mm格式返回前端。这两个功能分别解决了数据分页展示和时间格式标准化的问题,是Web开发中的常见需求
2025-07-04 10:27:41
271
原创 [Nginx]反向代理和负载均衡
摘要:本文介绍了Nginx反向代理和负载均衡的配置与应用。反向代理通过隐藏后端服务器提高安全性,其核心配置在proxy_pass指令。负载均衡是反向代理的扩展,通过将请求分发到多个后端服务器提升系统性能,支持轮询、最少连接、IP哈希等策略。配置主要在upstream模块定义服务器组,在server模块通过proxy_pass指向该组。反向代理和负载均衡共同构成了Nginx高性能服务架构的基础,实现了请求转发、服务器保护和性能优化的综合功能。
2025-07-03 10:51:16
472
原创 【机器学习】--- 逻辑回归算法
逻辑回归是机器学习的一种分类算法,主要运用于二分类问题。将线性回归的结果,映射到不同的类别之中。算法简单而高效,实际广泛运用。简单来说:逻辑回归 = 线性回归 +SigmoidSigmoidSigmoid函数(分类函数)
2024-09-10 18:55:26
1817
原创 [机器学习]--线性回归算法
FC⋅5932××线性回归(Linear regression)就是利用回归函数对一个或多个自变量和因变量关系建立类似如上模型的一种分析方式hww1x1w2x2...bwTxb其中w1w2...称为系数x1x2...是自变量hwbw1w2...⋅1x1x2...根据自变量的数量, 可以将线性关系分为单变量线性关系, 多变量线性关系。
2024-08-21 18:14:50
1287
原创 [机器学习]--KNN算法(K邻近算法)
KNN (K-Nearest Neihbor,KNN)K近邻是机器学习算法中理论最简单,最好理解的算法,是一个。
2024-08-15 15:37:30
1294
原创 [爬虫基础]--抓取豆瓣top250电影, 简单易懂, 零基础入门
我们每天看到的浏览器页面, 本质上都是html代码和css代码, 向服务器发出请求后, 服务器会返回一连串的信息, 经过浏览器选然后, 就变成了我们每天看到的界面。获得网页的源代码是爬虫的第一步, 这一步需要用到requests包, 这是爬虫中最常用到的包, 可以模拟浏览器向服务器发出请求, 从而得到网页的源代码。同样右键检查, 使用左上角的小工具, 点击图片, 可以找到这个图片的代码位置, 这个代码就包括了我们所有想要的信息: 电影名称, 图片资源位置。我们是找到了, 但是如何用代码找到?
2024-08-12 21:10:37
668
原创 [Web服务器] 简易静态Web服务器的搭建
可以为发出请求的浏览器提供静态文档的程序。平时我们浏览百度新闻数据的时候,每天的新闻数据都会发生变化,那访问的这个页面就是动态的,而我们开发的是静态的,每天访问我们自己的静态web服务器,页面的数据不会发生变化。Web服务器的工作原理用户在终端发出访问请求通过tcp协议建立链接生成http报文发送到静态Web服务器中服务器解析报文, 并把用户申请的资源打包成http报文发送给用户应答体中携带的数据发送到浏览器浏览器经过渲染产生具体页面。
2024-08-06 15:50:49
1204
原创 【Python】函数的闭包和装饰器
在cheak()函数中,有嵌套inner函数,在inner函数内引用了外部cheak函数的变量fn,同时又有返回inner函数,同时满足闭包构成的三个条件。我们声明的comment变量,接受的是inner函数的内存地址,inner函数是新增了一个登录功能在评论功能之前。在函数嵌套的前提下,内部函数使用的外部函数的变量,并且外部函数返回了内部函数,这就称这个内部函数为闭包。在上面的代码中,我们声明了一个和comment()函数同名的一个变量,用来接受cheak()的返回值。闭包的构成有三个条件。
2024-05-26 15:40:48
325
原创 【Python】多任务和多进程
在我们的操作系统中,每一个程序启动,都会有一个或者多个进程进程是资源分配的最小单位,它是操作系统进行资源分配和调度运行的基本单位你正在运行的谷歌浏览器,QQ,微信等等,都是一个进程,操作系统会根据你的进程来分配CPU,内存等资源相对于单进程而言,多进程的效率会更高多进程演示单进程演示。
2024-05-20 22:31:54
678
原创 【LeetCode刷题】904.水果成篮,滑动窗口
同时使用哈希表unordered_map来记录当前水果的种类,当种类超过2时,移动left指针,同时让left对于的水果种类的数量相应减少,直到水果的种类不超过2。如果从第一棵树开始采摘,则只能采摘 [0,1] 这两棵树。如果从第一棵树开始采摘,则只能采摘 [1,2] 这两棵树。通过不断调整left,right指针的位置,寻找到答案。可以采摘 [1,2,1,1,2] 这五棵树。可以采摘 [2,3,2,2] 这四棵树。可以采摘 [1,2,2] 这三棵树。,返回你可以收集的水果的。可以采摘全部 3 棵树。
2024-04-24 14:40:27
358
原创 【Linux】用户和权限的基本知识
权限可以使用数字表示,r = 4, w = 2, x = 1。chown [-R] [用户]:[用户组] 文件或文件夹。chmod [-R] 权限 文件或文件夹。-R ,对文件内的全部内容应用同样的操作。举例:上图中的Desktop文件夹。修改文件和文件夹所属的用户和用户组。注意只有root用户才有权限。drwxr-xr-x 表示。修改文件,文件夹的权限信息。d 表示这是一个文件夹。
2024-04-20 16:08:36
235
原创 【Linux】新人入门,常见命令总结
命令的通用格式:command -命令本身options:[可选,非必填] -选项,可以通过选项调节命令的细节parameter:[可选,非必填] -命令的参数,多数用于命令的指向目标等。
2024-04-14 15:06:08
896
1
原创 【c++】常见STL容器总结(三)set || map
multiset特点:与set几乎完全一样,但允许插入重复数据以上两个容器对于自定义的数据,要指定排序规则才能insert,否则会报错需要在创建容器之前定义你排序的仿函数sets1;
2024-03-30 15:46:43
467
原创 【C++】常见STL容器总结(二)stcak || queue
符合先进后出的规则不允许遍历行为只有栈顶数据可以操作使用stack容器要包含头文件<stack>stack容器操作简单,仅仅几个接口就可以完成基本操作。
2024-03-27 19:22:28
248
原创 【动态规划】0-1背包问题
如今你有一个容量为7的背包,请问如何装才能使你的装下的物品总价值最高?这里我就不论证为什么这类问题要用动态规化来解决了,着重分析该问题如何使用动态规划来解决。
2024-03-27 15:26:15
1523
原创 【C++】常见STL的总结(1) string || vector
int pos 表示开始的下标,int n 表示要替换\删除\获取的个数。
2024-03-21 15:53:22
615
1
原创 【python】新手向,类和对象综合应用—数据分析案例
观察上面的数据,有四个主要内容,日期,订单号,金额,省份,在项目文件夹中新建一个python文件,定义记录数据的类self.date = date #日期self.order_id = order_id #订单号self.money = money #金额self.province = province #省份。
2024-03-06 19:30:04
470
1
原创 【python】基础入门 5类常见的数据容器
列表以“ [ ] ” 作为标识符列表中的每一个元素以 “ , ” 隔开变量名称 = [元素1, 元素2,元素3,……]#空列表的定义变量名称 = [ ]变量名称 = list()支持重复元素,有序列表是支持嵌套的,里面的元素可以是其他数据类型,可以是不同的元素列表支持下标索引,可以是正序的0,1,2,3 ……也可以是倒序的-1,-2,-3 ……元组同样可以储存多个不同类型的数据,对比列表,他最大的特点就是:一旦创建,就不可以被修改元组以“ ( ) ” 作为标识符。
2024-02-28 21:57:31
1811
原创 【python】使用pycharts生成简单折线图
json本质上是一种带有特定格式的字符串,按照一定的格式去组织和封装数据,使得数据可以在不同的编程语言中流通。json就像国际通用语言英语,不同的国家的人可以通过英语交流。通过处理json数据,使用pycharts包工具就可以轻松生成一个折线图。
2024-02-27 22:36:42
526
原创 【C++】与【openCV】将图片转化为字符画,超详细,新手向
教程到这里就已经完成了,可以看到将图片转化为字符串还是非常简单的,稍微介绍几个所需的函数相信你也可以自己完成。现在你可以进一步思考一下,能否将视频转为字符动画呢?视频是由一帧一帧的图片组成的,如果使用一个循环将每一帧图片都转化为字符画,不就完成了码?自己动手思考一下吧。
2023-12-25 19:48:46
3017
1
原创 【c语言】strcat() 的使用和模拟
strcat(),又称字符串追加函数, 作用是将字符串追加到目标空间的末尾传入参数为:destionation ----- 目标空间的地址source ------- 你要复制的字符串的首元素地址返回值:destionation ------- 目标空间的地址在c语言网站上可以搜到。
2023-10-28 17:18:24
265
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅