- 博客(44)
- 收藏
- 关注
原创 【从零开始学习Redis】Redis各种场景之登录篇(解决分布式共享登录)
在现代后端架构设计中,数据库(如MySQL)往往是系统的核心,但在面对高并发、低延迟的业务需求时,磁盘I/O的限制使其容易成为性能瓶颈。作为基于内存的高性能Key-Value数据库,凭借其原子性操作和丰富的数据结构,成为了解决分布式系统难题的“瑞士军刀”。本系列博客将基于黑马点评这一实战项目,跳出简单的API调用,深入探讨Redis在后端开发中的核心应用场景。我们将Redis的角色从单一的“缓存”扩展到分布式系统的各个角落,具体涵盖以下核心板块:分布式环境下的基石。
2025-12-05 11:00:00
1009
原创 【苍穹外卖Day10】定时任务与来单提醒
自动化处理与实时消息交互。如何处理那些用户下单后迟迟不支付的“幽灵订单”?如何让商家第一时间听到“您有新的外卖订单”的语音播报?本篇博客将通过和WebSocket技术来解决这些问题。Spring Task 是 Spring 框架提供的轻量级任务调度工具。简单来说,它能让你的代码按照约定的时间,自动执行某段逻辑,而无需人工干预。
2025-11-20 20:00:00
1856
原创 【苍穹外卖Day9】实战demo-从整体架构的角度思考业务流程
本文详细复盘了订单管理模块的实现过程,重点分析从业务需求到架构设计的思考路径。用户端实现历史订单查询(采用N+1查询优化)、订单取消(状态校验与退款处理)和再来一单(数据转换与批量插入)功能;商家端完成订单搜索(动态SQL)和订单状态流转(严格状态机校验)。特别探讨了集成百度地图API实现配送范围校验的方案,强调配置解耦和异常处理。通过DTO/VO设计、事务管理、批量操作等技术选型,在开发效率和系统性能间取得平衡,为后续Redis应用篇奠定基础。
2025-11-19 19:00:00
1678
原创 【苍穹外卖Day8】用户下单与微信支付
用户提交订单时,需要往订单表orders中插入一条记录,并且需要往order_detail中插入一条或多条记录。还需要用order_detail存储订单明细->订单包含的菜品(因为一个订单可能包含多个菜品)这里也是一个普通的crud,不过涉及到多个表之间的关系,需要在业务层处理。微信支付可以跳过,站内有响应文章,大家可以自行检索。用orders表存储订单是不够的。
2025-11-06 10:21:09
432
原创 【Java基础14】函数式接口、lambda表达式、方法引用一网打尽(下)
核心思想:当你写的 Lambda 表达式的唯一工作就是去调用一个已经存在的方法时,你就可以使用“方法引用”()来代替这个 Lambda 表达式。为什么需要它?我们来看一个简单的forEachLambda 写法分析:这个 Lambda接收一个参数s,然后原封不动地把它传给方法。s这个变量显得有些多余,我们真正的意图是“对于流中的每个元素,都去执行这个操作方法引用写法解读这段代码的意思就是:“请使用System.out这个实例的println方法编译器会自动推断,流中的每个元素(s)都应该被当作参数传递给。
2025-11-05 23:54:56
842
原创 【Java基础13】函数式接口、lamba表达式、方法引用一网打尽(上)
Java8的Lambda表达式是核心语法特性,本质是匿名的函数,可将"行为"像数据一样传递。相比匿名内部类,Lambda能简化代码,提取核心逻辑。基本语法为(参数)->{代码},支持类型推断等简化写法。Lambda必须依附于函数式接口(只含一个抽象方法的接口),常配合四大核心函数式接口(Function、Predicate、Consumer、Supplier)使用,实现链式编程中的过滤、转换、消费和生产操作。这些特性让代码更简洁,体现了"做什么而非怎么做"的函数
2025-11-04 16:01:54
709
原创 【苍穹外卖Day7】购物车
菜品列表有套餐也有菜品,所以数据库字段有dish_id 也有 setmeal_id 添加的是其中一个,那另一个就为NULL。如果商品数量减一后仍然大于0,只需要修改其数量为原数量-1,反之则需要从数据库中删除该条数据。直接根据当前用户的id,从购物车表中把所有该用户的所有购物车数据查出,用于页面回显。理解整个流程过后写起来就会很顺手。
2025-11-03 11:54:33
381
原创 【苍穹外卖Day6】微信小程序登录与 HttpClient 调用
HttpClient 的作用,就是让你的后端程序在运行时,主动去调用别的 Web 接口(HTTP 服务)。比如在“苍穹外卖”Day6里,你的后端需要拿着微信小程序传来的code这里微信的接口在互联网上,它不是你自己写的。所以你需要一个工具来,拿到微信返回的数据(openid等)。而就是干这件事的工具。
2025-10-29 10:12:08
257
原创 【苍穹外卖Day5】Redis 与缓存机制实现
本文介绍了Redis在SpringBoot项目中的基本配置和使用方法。首先说明了Redis的配置文件参数,包括服务器地址、端口等。然后详细讲解了自定义RedisTemplate的配置方式,推荐使用StringRedisSerializer序列化key,JSON序列化value。接着演示了店铺状态管理接口的实现,通过Redis存储和获取店铺营业状态,体现了Redis高速访问、减轻数据库压力的优势。最后总结了Redis在分布式环境下的高可用特性,并指出后续会针对Redis进行更深入的专题讲解。
2025-10-24 19:45:00
298
原创 【苍穹外卖Day4】两大接口详解和其他拓展
本文重点回顾了新增套餐和分页查询功能实现。新增套餐涉及4个接口,核心是通过事务管理确保套餐表和关系表的原子性操作,利用MyBatis主键回显获取ID。分页查询使用PageHelper插件实现,通过startPage()方法自动拦截SQL添加LIMIT子句,返回Page对象包含分页信息。文中详细解析了Lombok的@Builder注解、MyBatis动态SQL、事务注解作用及PageHelper工作原理,这些技术点对基础CRUD和复杂接口开发都有重要帮助。
2025-10-23 18:45:00
893
原创 【苍穹外卖Day3】AOP落地与boot配置文件
本文介绍了后端开发中的三个关键技术点:1. 公共字段自动填充:通过AOP切面和反射机制自动设置实体类的创建时间、修改时间等通用字段,减少重复代码;2. 文件上传功能:利用SpringBoot的多环境配置(Profile)实现不同环境(dev/test/prod)下的OSS配置自动切换;3. 多表查询:分析了逻辑外键相比物理外键的优势,包括更好的扩展性和灵活性,但需要自行实现关联查询。文章还详细讲解了AOP切面的实现原理,包括切点定义、前置通知处理以及反射调用的具体实现方式。
2025-10-22 21:00:00
1031
原创 【leetcode刷题007】leetcode116、117
指针交换:q 原来的内部指针(指向 [2,3] 的那块内存)会被释放,然后 q 会直接指向 ans 原来的那块内存([4,5,7])。这道题和117本质一样,我在116看到一个很新颖的递归,是把左边与右边的指向结合起来进行递归,不过只适用于完美二叉树,故不作引用。bfs就是层序遍历的过程中改变指针的指向,注意题目描述,这个二叉树节点有三个指针,改变的是next指向,而且next默认为null。算法对于目前的我来说仍是一座难以跨越的大山,面对它的最好办法就是愚公移山,坚持吧!相当于:p=ans;
2025-10-13 21:12:17
207
原创 【Java初学基础12】跟着鸡排主理人学Java线程
线程池 = 一群线程 + 一个任务队列 + 调度机制。有固定数量的工人(线程),每个人负责炸鸡排;有个任务队列,顾客在这里排队等;当工人空出来,就从队列里取一个任务继续干;如果队伍太长,就要决定“该不该接新单”。在 Java 里,线程池其实也是这样工作的。~在 Java 中,线程池由以下几部分组成👇组成部分作用鸡排摊类比核心线程数主理人 + 常驻厨师数量最大线程数高峰期可增聘的临时工临时线程空闲多久被解雇临时工空闲多久就离开workQueue任务等待队列顾客排队区线程工厂。
2025-10-10 10:24:19
689
原创 【Javaweb】一文带你搞懂异常和全局异常处理器
Java异常处理摘要:Java异常分为编译时异常(CheckedException)、运行时异常(UncheckedException)和错误(Error)。异常处理主要通过try-catch捕获或throws抛出。常见异常包括NullPointerException、IOException等。处理方式分为编程式(显式try-catch)和声明式(通过注解统一处理)。全局异常处理器使用@ControllerAdvice和@ExceptionHandler实现异常统一管理,优先级高于普通异常处理。异常处理机制
2025-10-07 11:12:10
590
原创 【苍穹外卖日记】Day2-员工相关接口
第二天还有一些员工相关的其他接口 不过相对比较简单就不写了。我只把自己不太懂得遇到的坑先写上。等写完项目时再来看自己会不会。
2025-10-05 21:21:39
621
原创 【苍穹外卖日记】Day1-环境搭建与apifox文档建立
本文记录了苍穹外卖项目开发中的关键问题和经验总结。主要包括:项目初始化阶段遇到的编译问题(JDK版本和Lombok兼容性)、数据库连接配置;前端运行时端口冲突的解决方法(关闭IIS服务);Apifox接口文档的导入和使用技巧;以及项目核心设计:清晰的POJO类分层(实体类、DTO、VO)和统一返回结果Result<T>的设计理念。特别强调了理解数据库表结构和接口文档的重要性,为后续开发奠定基础。技术要点涵盖Maven配置、Nginx部署、MyBatis-Plus注解和前后端交互规范等实际开发经验
2025-10-04 08:48:15
1142
原创 【Java初学基础11】Annotation-注解
你可以自己定义注解,用来给代码加标记,框架再通过反射处理。@Retention(RetentionPolicy.RUNTIME) // 运行时可见@Target({ElementType.METHOD, ElementType.TYPE}) // 可用在类和方法上// 默认值 }@MyAnnotation(value = "测试注解", version = 2)@MyAnnotation("方法注解")Class<?在 Java 中,注解是一种元数据机制。
2025-10-02 10:30:21
574
原创 【Java初学基础10】一文讲清反射
Java反射机制是在运行时动态获取类信息并操作其属性和方法的机制,核心是java.lang.reflect包。反射可获取类元信息、构造方法、字段和方法,并能动态创建对象和调用方法,适用于插件系统、框架开发等场景。虽然提高了灵活性,但性能较低。反射实现了动态类加载、方法调用等功能,是Java框架和工具的基础技术。
2025-09-28 23:27:18
366
原创 【Javaweb】登录校验--一文带你学会登录校验全流程
JWT令牌由Header、Payload和Signature三部分组成。Header和Payload经Base64Url编码可被解码查看,但Signature需密钥验证不可解密。Payload包含用户信息和过期时间等声明数据。JWT通过签名算法确保令牌防篡改,解析时需使用与生成时相同的密钥。拦截器用于校验请求中的JWT令牌,未携带或无效令牌将被拦截。配置类负责注册拦截器并设置拦截规则。JWT生成和解析工具类封装了签名算法和有效期设置等功能,实现安全认证流程。整个系统通过JWT、拦截器和配置类协同工作,构建前
2025-09-26 20:07:42
691
原创 【Javaweb】一文讲清登录校验(part1)
如果用户没有登录,此时就不允许他执行相关的业务操作,直接给前端响应一个错误的结果,在员工登录成功后,需要将用户登录成功的信息存起来,记录用户已经登录成功的标记。会话是和浏览器关联的,当有三个浏览器客户端和服务器建立了连接时,就会有三个会。在同域下的每一次请求中,包括对图片、CSS等静态资源的请求,可能造成性能浪费。:根据收到的Session ID,在服务器存储中查找对应的Session数据。,指的是我们在服务器端接收到浏览器发送过来的请求之后,首先我们要对请求进行。:用户会话期间有效。
2025-09-24 12:19:44
835
原创 【Javaweb】MyBatis入门:高效数据库操作指南
MyBatis是一款优秀的Java持久层框架,前身为iBatis,用于简化JDBC开发。它通过将SQL与代码分离,提供灵活高效的数据库访问方式。核心特性包括:简化配置(数据库连接四大参数)、支持字段名映射(下滑线转驼峰)、多种SQL编写方式(注解/XML)。开发流程包括:创建SpringBoot工程并引入依赖、配置数据库连接、定义实体类、编写Mapper接口及SQL、进行单元测试。MyBatis特别适合需要精细控制SQL的中大型项目,显著提升开发效率,是Java生态中广泛使用的持久层解决方案。
2025-09-23 09:15:01
621
原创 【Javaweb】Restful开发规范
URI 用名词,不用动词。HTTP 方法用对(GET查,POST增,PUT改,DELETE删)。返回恰当的状态码。数据格式用 JSON。API 版本化。API 是无状态的。提供过滤、排序、分页。使用 HTTPS 和认证。清晰的错误信息。良好的文档!这是最重要的实践之一,可以使用 Swagger/OpenAPI 等工具自动生成。
2025-09-22 23:24:12
946
原创 【从小白到精通之数据库篇】Mysql--连接与子查询
【摘要】SQL连接操作包括自连接和外连接。自连接用于处理表内层级关系(如员工-经理关系),分为显式(JOIN)和隐式(WHERE)两种写法。外连接保留某表所有记录,包括LEFT JOIN(保留左表)和RIGHT JOIN(保留右表),二者逻辑等价但LEFT JOIN更常用。子查询分为单行(比较运算符)、多行(IN/ANY)、多列(组合条件)、相关子查询(依赖外层)和FROM子句临时表等类型,用于实现复杂查询逻辑。推荐使用显式JOIN语法以提高可读性。
2025-09-21 20:26:24
329
原创 【从零开始刷力扣006】leetcode206
一个迭代解法,一个递归解法。重点在于思考递归是怎样执行的,要对流程有大的把握。现阶段我还是感觉有些困难,加油b!这里只复现代码,并写一下思路。
2025-09-19 22:53:50
184
原创 【Javaweb】http协议-请求与响应
本文介绍了HTTP协议的基本概念和工作原理。HTTP作为超文本传输协议,是浏览器与服务器交互的规则,规定了请求和响应的数据格式。请求协议包含请求行、请求头和请求体,响应协议包含响应行、响应头和响应体。文章详细解释了GET和POST请求的区别,包括设计目的、参数位置、安全性等特性,并强调了幂等性的重要性。此外,还介绍了HTTP状态码的分类及常见状态码含义,如200成功、404未找到等。最后指出HTTP无状态特性需要通过Cookie/Session技术来维持用户状态。理解HTTP协议是Web开发的基础。
2025-09-19 20:38:18
1105
原创 【maven01】依赖管理的工具
Maven是Java主流的项目管理和构建工具,采用"约定优于配置"思想,通过标准项目结构和构建生命周期简化开发流程。它解决了传统Java项目依赖管理困难、构建过程复杂和项目结构不统一三大痛点。Maven通过坐标唯一标识构件,利用本地和远程仓库管理依赖,支持自动处理传递性依赖,并提供依赖范围控制。其标准构建流程包括清理、编译、测试、打包等阶段,通过插件机制实现具体功能。Maven的依赖管理机制极大提升了Java项目的开发效率,是现代Java开发的重要基础工具。
2025-09-17 22:19:29
1021
原创 【Java初学基础09】⭐Object()顶级父类与它的重要方法equals()
本篇博客主要介绍了object类和它的重要方法,同时介绍了Java中的值传递,进而引出equals方法,在后面解读源码时,我们还会讲一讲它和hashcode()的难解难分。但是,如果尝试改变引用本身(即让副本引用另一个对象),则不会影响原始引用。因为 Java 只有值传递,所以,对于 == 来说,不管是比较基本数据类型,还是引用数据类型的变量,其本质比较的都是值,只是引用类型变量存的值是对象的地址。类型的对象时,虚拟机会在常量池中查找有没有已经存在的值和要创建的值相同的对象,如果有就把它赋给当前引用。
2025-09-16 22:13:28
687
1
原创 【Java初学基础08】详解重写与重载
本文介绍了面向对象编程中的两个重要概念:方法重写(Override)和方法重载(Overload)。方法重写指子类对父类方法的具体实现,要求方法签名相同,访问权限不能比父类更严格,异常抛出范围不能比父类更广,这遵循了里氏替换原则。方法重载则是在同一类中定义多个同名方法,通过参数列表不同来区分。文章通过Java代码示例展示了Animal父类和Dog、Cat子类的重写实现,以及多态的应用场景,并解释了重写和重载的设计目的和使用场景。最后作者分享了学习感悟,表达了对技术提升和大学生活的思考。
2025-09-14 19:39:03
1033
原创 学习过程中的方法
在学习技术栈的时候 我发现自己总是学了会 会了忘 很难对一个或某块知识点精准把控。但最近开始写博客后,我发现自己脑子里有东西了,这就是复习的好处。对于数据结构和算法 我们只需要把数据结构理解成存储数据的容器 无非就是存储结构不一样罢了 而算法就是穷举 那么如何聪明的穷举就是算法的观念。另外 今天是我开始记笔记的第6天 我觉得还是需要放下功利论 认真记笔记 将这种好习惯保留下去。在平稳推进的时候要建立起体系。对最近学的东西进行复盘总结 知识在大脑就会存在的更久。
2025-09-13 22:51:27
174
原创 【Java初学急基础07】详解接口和抽象类
接口是完全抽象的行为契约,定义类必须实现的方法,支持多重实现,仅含抽象方法、默认方法、静态方法和常量。抽象类是部分实现的类,含抽象方法和具体方法,支持单继承,可包含变量和构造方法。接口强调行为规范,抽象类注重代码复用。Java8引入默认方法解决接口扩展问题,多实现冲突需显式解决。两者都不能实例化,但设计目的和实现方式不同。
2025-09-13 21:38:18
912
原创 【从零开始刷算法005】leetcode304
个人思考:从开始刷算法题到今天,确实有很多难啃难理解的题目。但最后还是要多思考,多举例,一步一步写下来才能明白。所以可以考虑前缀和解法。但又因为是二维数组,所以理解单独上相较于一维数组的前缀和稍难一些。这里的虚拟边界简化了数组[-1]索引的弊端,这也是前缀和算法的常用手段。sumRegion来求和,若用暴力解,会使最终的时间复杂度增大。
2025-09-12 23:11:15
127
原创 【Java初学基础06】正则表达式
正则表达式(Regular Expression),简称Regex,是一种用于描述字符串模式的强大工具。它使用一个特殊的字符串作为“模版”,来检查、匹配、提取或替换另一个字符串中符合该“模版”的部分。简单来说:如果你需要在一段文字中找到所有电话号码,或者验证用户输入的邮箱格式是否正确,正则表达式就是你的最佳选择。元字符说明等效写法匹配任意单个字符(除行终止符)\d匹配一个数字[0-9]\D匹配一个非数字[^0-9]\s匹配一个空白字符(空格、\t\n等)\S匹配一个非空白字符[^\s]\w。
2025-09-12 21:33:38
724
原创 【Java初学基础05】接口
接口是一个完全抽象的引用类型。它是一组方法声明(在 Java 8 之前)和常量的集合。一个类通过实现(implements)接口来承诺遵守这份契约,即必须实现接口中定义的所有方法。
2025-09-11 22:59:33
610
原创 【从零开始刷算法题-005】leetcode76
在滑动窗口模板中,我们要关注何时缩小窗口,实际上再找到符合条目要求的字串后就需要收缩窗口,这其实是一个。最小覆盖子串 "BANC" 包含来自字符串 t 的 'A'、'B' 和 'C'。3.收缩窗口时if内部的处理:vaild不一定--;思路:求满足符合数量要求的最短字串,可以用滑动窗口算法解决。t 中两个字符 'a' 均应包含在 s 的子串中,因此没有符合条件的子字符串,返回空字符串。来获取那个最短切符合题目要求的字串;所有字符的子串,则返回空字符串。整个字符串 s 是最小覆盖子串。所有字符的最小子串。
2025-09-11 22:17:49
247
原创 【Java初学基础04】内部类
Java内部类是定义在另一个类内部的类,包括四种类型:成员内部类(可访问外部类所有成员)、静态内部类(只能访问外部类静态成员)、局部内部类(定义在方法中)和匿名内部类(重点,简化代码)。成员内部类通过外部类.this访问外部类实例,静态内部类通过外部类名访问静态成员。匿名内部类用于快速实现接口或继承类,无需显式定义子类,直接new接口名(){重写方法}即可。内部类提高了封装性和代码组织性,匿名内部类特别适合一次性使用的场景。
2025-09-10 15:29:28
715
原创 【从零开始刷力扣002】leetcode209-长度最小的子数组
答:当现在的window与target不一致时,向右移,但在第一个while中可以执行一次right++这样保证了窗口是左开右闭。(相当于窗口内的数据范围是[le,ri)部分的数据。答:当右移满足时,开始收缩,但收缩过程正式寻找。2.什么时候收缩,收缩几次?在这里可能更改result。1.什么时候右移右指针?
2025-09-09 22:04:12
373
原创 【Java初学基础03】Java中的各种类——引入接口
特点:可以包含抽象方法(只有声明,没有实现的方法)。也可以包含实现了的普通方法和字段。子类必须实现其所有的抽象方法(除非子类也是抽象类)。抽象类不能被实例化,抽象类不能被实例化,抽象类不能被实例化!!!> 理解:假设创建了抽象类的对象,调用抽象的方法,而抽象方法没有具体的方法体,没有意义。抽象类中,可以有构造方法,是供子类创建对象时,初始化父类成员使用的。> 理解:子类的构造方法中,有默认的super(),需要访问父类构造方法。抽象类中,不一定包含抽象方法,但是有抽象方法的类必定是抽象类。
2025-09-09 15:37:42
227
原创 【从零开始刷力扣day001】leetcode167、leetcode27
LeetCode 167题采用双指针法解决有序数组的两数之和问题:通过左右指针向中间移动,比较当前和与目标值的关系调整指针位置,时间复杂度O(n)。LeetCode 27题使用快慢指针原地移除元素:快指针遍历数组,慢指针记录有效元素位置,当元素不等于目标值时保留,时间复杂度O(n)。两题分别展示了双指针在有序数组和数组原地修改中的典型应用。
2025-09-08 21:57:09
281
原创 【Java初学基础02】oop特性之多态
我的个人理解就是:多态是一些实例的不同形态(行为)。我们知道多态是发生在继承中的一种特性,所以它实际上是继承和抽象(如接口或抽象类)的延伸。子类拥有,而父类没有的方法。所以,想要调用子类特有的方法,必须做向下转型。当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误。进而导致子类独有方法无法运行,因为编译时左边父类没有子类的都有方法,没有就报错。检查一个对象是否是一个特定类(或接口,或父类)的实例。> 父类类型:指子类对象继承的父类类型,或者实现的父接口类型。是 Java 的一个。
2025-09-08 19:07:37
554
Java多态的一些小知识点
2025-04-25
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅