自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 范进说八股 | Docker篇——你可以永远相信这只鲸鱼

Docker和虚拟机的区别是什么?Docker中的镜像是什么?运行Docker容器的命令是什么?说出几个DockerFile的常见指令COPY和ADD的区别,CMD和ENTRYPOINT的区别?Docker中的数据卷是什么,有什么作用?请简要介绍Docker网络的几种模式如何创建一个自定义的Docker网络?什么是docker-compose?

2026-03-14 12:55:17 249

原创 范进说八股 | Elasticsearch篇——恐怖如斯的企业级搜索引擎

什么是倒排索引?Es中的文档、字段、索引分别是什么?分词器包含几种模式?如何拓展词库?match查询和term查询的区别?如何实现分页查询?深度分页的解决方案?怎么在ES中组合多个查询条件?全文检索查询结果默认是如何排序的,如何控制这个顺序?

2026-03-14 12:08:04 264 1

原创 范进说八股 | RabbitMQ篇——你兔哥在消息就在

RabbitMQ的核心组件和工作原理、交换机类型?有哪些消息模型?如何确保消息的可靠性?如何保证消息的幂等性?什么是死信队列?消息是如何成为死信的?什么是延迟队列?如何实现延迟队列?如何解决消息堆积问题?集群方案有哪些?

2026-03-13 16:18:27 318

原创 范进说八股 | 微服务篇——拉开你和其他实习生的差距

微服务常用组件、服务注册和服务发现、Eureka和Nacos区别、服务远程调用时的负载均衡是如何实现的?Ribbon中常用的负载均衡策略、服务雪崩,以及解决方案、限流算法中的漏桶算法和令牌桶算法、Spring Cloud Gateway 的路由和断言关系、Spring Cloud Gateway中常见的过滤器、Sentinel中常用的流量控制规则有哪些?CAP定理?BASE理论?分布式锁的常见实现方案、分布式事务,分布式事务的解决方案有哪些?如何保证接口的幂等性。

2026-03-12 23:55:10 348

原创 范进说八股 | Redis篇——万字拆解常见八股拷打面试官

Redis的常用数据结构?持久化机制?如何和mysql进行数据同步?缓存穿透、雪崩、击穿概念以及解决方案?如何判断一个KEY是否过期?数据过期策略有哪些?内存淘汰策略有哪些?集群有哪些方案?

2026-03-11 23:49:47 749

原创 Redis实战篇 | 达人探店、好友关注、附近商户、用户签到、UV统计

GEO就是Geolocation的简写形式,代表地理坐标。Redis在3.2版本中加入了对GEO的支持,允许存储地理坐标信息,帮助我们根据经纬度来检索数据。常见的命令有:GEOADD:添加一个地理空间信息,包含:经度(longitude)、纬度(latitude)、值(member)GEODIST:计算指定的两个点之间的距离并返回GEOHASH:将指定member的坐标转为hash字符串形式并返回GEOPOS:返回指定member的坐标。

2026-03-06 14:01:50 423 2

原创 Redis实战篇 | 三万余字从零打造万级并发的优惠券秒杀系统

秒杀系统从数据库锁 -> 分布式锁 -> 异步优化 -> 消息队列 的演进过程。这种架构不仅解决了超卖和一人一单,还将吞吐量提升了数十倍,QPS 从几百提升到几千甚至上万。

2026-03-04 23:47:41 464

原创 Redis实战篇 | 本地缓存的三种实现与分布式缓存、多级缓存架构、穿透雪崩击穿

这篇博客介绍了缓存的本质、实现方案(HashMap、Caffeine、Redis等),分析了其利弊与多级缓存架构,讲解了商户缓存实践及更新策略(删除缓存、先更数据库再删缓存),并总结了缓存穿透、击穿、雪崩三大问题及解决方案。

2026-03-04 00:04:59 465

原创 Redis实战篇 | 黑马点评架构、基于Session和Redis两种方式实现短信登录、保证登录态实时刷新

Tomcat 用固定大小的线程池处理请求,避免了为每个请求创建新线程的开销,提升了并发能力。

2026-03-01 00:00:23 955

原创 Typora破解教程 | Markdown写作的“标杆级工具”

Typora 是一款主打所见即所得的极简 Markdown 编辑器,以实时渲染、无预览分栏、纯本地文件管理为核心设计,支持标题、表格、代码块、数学公式、图表等丰富语法,界面清爽、启动快速、导出格式齐全,非常适合用来写笔记、博客、技术文档与日常文稿,是追求高效、干净写作体验的常用工具。

2026-02-24 23:38:05 1208

原创 Linux | 开发者的必修课

Linux 是现代互联网与云计算的底层操作系统,稳定、开源、无处不在。对开发者来说,Linux 不是加分项,而是上岗必备项—— 它决定你能不能独立把代码跑上线、能不能搞定线上问题、能不能往后端 / 架构 / 运维方向发展。

2026-02-23 22:45:10 914

原创 Mybatis-Plus | 只做增强不做改变——为简化开发而生

BaseMapper是 MyBatis-Plus 提供的通用 Mapper 接口,内置了单表操作的所有核心 CRUD 方法(新增、删除、修改、查询),无需手动编写 Mapper 方法和 SQL,只需让自定义 Mapper 接口继承BaseMapper,即可直接使用这些通用方法,大幅减少重复编码工作。@Data@TableName("t_user") // 关联数据库表名@TableId(type = IdType.AUTO) // 主键自增。

2026-02-23 15:20:13 1090

原创 Spring Security | 集认证、授权、防攻击于一体的安全框架

Service// 注入MyBatis的Mapper(替代之前的JPA Repository)@Autowired@Override// 1. 通过Mapper从数据库查询用户(含角色)// 2. 用户不存在则抛出异常(Spring Security会捕获并处理)throw new UsernameNotFoundException("用户名不存在:" + username);// 3. 转换为Spring Security的UserDetails对象。

2026-02-22 12:18:46 1042

原创 代码随想录 | LeetCode904水果成篮、LeetCode76最小覆盖子串

1.快指针是导致滑动窗口合法性丧失的罪魁祸首2.慢指针是使得滑动窗口重新合乎条件的帮手3.快慢指针共同维护一个有条件的滑动窗口。

2026-02-21 23:22:45 939

原创 苍穹外卖日记 | Day12 工作台模块、导出运营数据Excel报表

Apache POI 是 Apache 基金会旗下的开源 Java 库,核心作用是读写微软 Office 格式文件(Excel、Word、PPT、Visio 等),底层通过解析 Office 文件的二进制格式(如 OLE2、OOXML)实现数据操作,是 Java 生态中处理 Office 文件的事实标准。

2026-02-07 18:34:18 982

原创 苍穹外卖日记 | Day11 营业额统计、用户统计、订单统计、销量前10统计

第十一天主要就是数据统计模块的开发,总体下来没什么新技术点,主要是熟悉Service层和SQL语句的编写即可。

2026-02-06 19:50:11 749

原创 苍穹外卖日记 | Day10 定时任务处理订单状态、来单提醒和客户催单

SpringTask 是Spring 框架内置的轻量级定时任务框架,无需整合外部第三方定时组件(如 Quartz),通过简单的注解 / 配置即可实现定时任务的创建、执行与管理,是 Spring 生态中实现定时任务的原生解决方案,开箱即用、轻量无依赖。WebSocket 是基于 TCP 协议的全双工通信协议,也是 HTML5 新增的核心特性之一,它能在客户端(如浏览器)和服务器之间建立持久的双向连接,打破了 HTTP 协议 “请求 - 响应” 的单向通信限制,实现数据的实时双向传输。

2026-02-05 12:15:41 651

原创 苍穹外卖日记 | Day9 用户端历史订单模块、商家端订单管理模块、用户下单功能优化

第八天主要完成了用户下单和订单支付两处功能,第九天则是对,加入加入,如果用户的收货地址距离商家门店超出配送范围(配送范围为5公里内),则下单失败。另外需要完成以及,第九天为实战内容,根据产品原型进行需求分析和接口设计,再根据接口设计进行代码实现,最后分别通过swagger接口文档和前后端联调进行功能测试。

2026-02-02 23:41:20 1474

原创 苍穹外卖日记 | Day8 用户下单、订单支付

今天主要完成了用户下单和订单支付两个功能模块,感觉有了之前购物车模块编写的经验,用户下单写起来也不是很复杂,订单支付这里也是调用一些第三方接口类似操作,不过因为配置信息问题没法真正实现微信支付调用,只是进行了个模拟,所以导入的PayNotifyController这些东西都没用上,里面的一些加密逻辑也不怎么了解,新学了个cpolar技术也没用上,这玩意可以让第三方接口服务重定向到开发者服务器上可以用虚拟的网站地址而不是localhost又定向到自己服务器,可以在开发阶段调试使用。

2026-02-01 11:22:41 958

原创 苍穹外卖日记 | Day7 缓存商品、购物车

SpringCache是Spring框架提供的缓存抽象层,通过注解简化缓存操作。它整合了多种缓存实现(如EhCache、Redis、Caffeine等),开发者无需关心底层细节,只需通过注解声明缓存规则。核心思想是通过AOP在方法调用前后自动处理缓存读写,提升性能并减少重复计算。注解说明开启缓存注解功能,通常加在启动类上@Cacheable在方法执行前先查询缓存中是否有数据,如果有数据,则直接返回缓存数据;如果没有缓存数据,调用方法并将方法返回值放到缓存中将一条或多条数据从缓存中删除。

2026-01-30 13:44:41 933

原创 苍穹外卖日记 | Day6 HttpClient、微信小程序开发、微信登录功能、商品浏览功能

HttpClient),核心作用是让 Java 程序能够像浏览器 / Postman/Apifox 一样,主动发送 HTTP/HTTPS 请求,并处理服务端返回的响应。没有 HttpClient 时,Java 原生的功能简陋、代码繁琐;有了 HttpClient 后,你可以轻松实现 GET/POST/PUT/DELETE 等请求,处理请求头、请求体、Cookie、超时、重试等复杂场景,且 API 更友好、功能更强大。

2026-01-27 23:40:29 833

原创 苍穹外卖日记 | Day5 Redis

在了解Redis的常用命令之前,我们先了解到底什么是Redis。Redis实质上是一个基于内存的key-value结构数据库,他存储的value类型比较丰富,也被称为结构化的非关系型数据库(NoSQL),同时支持将数据持久化到磁盘。它不仅是缓存工具,更是一个功能丰富的数据结构服务器。

2026-01-25 23:48:23 1025

原创 苍穹外卖日记 | Day4 套餐模块

Day4没有视频讲解,是彻头彻尾的实战,有了前两天的视频讲解内容的积累以及两日的博客复盘,其实第四天的任务内容并不难,真正需要注意的反而是根据前端请求、接口文档和产品原型去分析每个接口怎么设计,怎么实现复用,还有一些比较细节的需求一开始没有看见,但是在接口的不断编写中,对业务的熟悉程度也不断增加,我也在这个过程中发现了之前自己没有注意到的需求,把之前漏掉的功能点一处处补上。写技术博客复盘真的是不错的习惯,每次都相当于重新自己独立设计一遍接口然后进行开发,对业务的熟悉正是在不断地分析接口作用实现的。

2026-01-17 21:54:18 1092

原创 苍穹外卖日记 | Day3 公共字段填充、菜品模块

Day2我们已经完成了员工模块与分类模块,相信大家已经对于最基本的CRUD业务有了一定的掌握了,那么今天我们将会在菜品模块上提升难度,利用AOP与反射设置公共字段填充增强、加入OSS上传文件、联表查询逻辑、参数为集合时如何处理以及批量删除时的动态SQL语句等等。

2026-01-15 23:29:59 1114

原创 苍穹外卖日记 | Day2 员工模块 And 分类模块

3.在设置创建人设更新人的时候思路是在哪个账号进行新增操作就取到这个账号的ID进行设置即可。可是问题在于如何取到该账号的ID,可以使用。

2026-01-13 00:08:53 1007

原创 苍穹外卖日记 | Day1 苍穹外卖概述、开发环境搭建、接口文档

苍穹外卖可以说是家喻户晓的存在了,在后端形势尚不严峻的几年前,不少人靠着苍穹外卖和黑马点评两个项目拿到了心仪的offer。可惜在现当下它却成了烂大街的存在,如果你学历不是强92,别提找工作,想靠着他们去找一份像样的实习都困难。但这却不能成为我们不写苍穹外卖的理由,即便到目前为止,网上各种免费付费项目层出不穷,Github的,哔哩哔哩大学的,各种知识星球的,苍穹外卖却依旧抗打,算得上是每位开发者入门后端的最好项目之一。

2026-01-11 00:05:23 1123

原创 从零开始的Git生活 | 刚实习同学的噩梦 And 参与开源不可缺的一环

对于大部分在校生而言git命令都是不熟悉的,很多刚实习的同学想必深有体会。这不是因为git命令有多难,而是因为大家缺乏协同开发的相关经验,对于有过实习经历经常写git命令的同学会发现常用的也就那几个,所以说大家不需要害怕,推荐参与开源项目,这个过程也可以让你不断熟悉git命令。

2026-01-09 23:49:25 1578

原创 代码随想录算法第六十四天| To Be Continued

差不多两周过后我就慢慢适应了每天的强度,基本上五六个小时就可以完成每天任务了,到开始复习的时候基本上三四个小时即可把当天任务完成,我也从最开始的没自信,担心自己技术栈学习进度耽搁,到平衡自己每天刷题和技术栈学习的时间,稳步推进自己的学习进度。代码随想录带给我的除了算法能力的提升,与此同时也在磨练着我的心性,刷算法题是一件不能急于求成的事情,最初的我浮躁,想不进去,不知道如何系统性思考,到后来学着画草稿,写伪代码,把自己所思所想一步步表达出来。不过之后的强度将不会这么大了,还是要放更多时间在项目和八股上。

2026-01-08 00:07:59 1318

原创 代码随想录算法第六十三天| KamaCoder97小明逛公园、KamaCoder127骑士的攻击

思路与感想:Floyd算法理解起来不算特别困难,核心思想是动态规划。不同于之前的求单源到不同节点的最短路径,Floyd算法主要适用于多源到不同节点的最短路径,不再局限单个起点。既然是DP它的核心难点也就在DP数组的含义和遍历顺序上,卡哥最开始为了方便我们理解遍历顺序采用的三维DP数组。dp[i][j][k]就是从i到j节点路径经过的节点存在于1-k节点中的最短路径,注意这里的第三维k指的是路径中的节点是存在于1 - k集合中而不是说1 - k集合的节点必须全部出现在路径里面。

2026-01-06 16:18:19 1260 2

原创 代码随想录算法第六十二天| KamaCoder94城市间货物运输Ⅰ、KamaCoder95城市间货物运输Ⅱ、KamaCoder96城市间货物运输Ⅲ

思路与感想:重写这道题是为了对Bellman_ford算法进行优化。在最初的Bellman_ford算法中,我们用邻接矩阵对边的关系进行了存储,然后通过两层for循环对所有的边松弛n - 1次,在这个过程中存在无效松弛,无效松弛的情景就是松弛的边的起点仍旧为最大值,即这个节点的minDist尚未初始化,那么松弛出来的结果也是无意义的。为了避免无效松弛我们就需要在松弛前必须保证起点from它的minDist已经被覆盖过了。

2026-01-05 20:33:06 1394

原创 代码随想录算法第六十天| KamaCoder 47 参加科学大会、KamaCoder 94 城市间货物运输 Ⅰ

思路与感想:还是昨天拿到题目,这次是对Dijkstra算法进行了优化。优化逻辑主要是两处,第一处是在选哪个节点到起点的距离最近,昨天的朴素版Dijkstra算法使用了一个for循环借助minVal不断更新cur最终选到最近的节点。这里可以使用小顶堆来进行优化,把外部的for循环顺便换成while,终止条件是队列为空。

2026-01-03 15:19:52 903

原创 代码随想录算法第五十九天| KamaCoder117软件构建、KamaCoder47参加科学大会

思路与感想:今天第一次接触拓扑排序,刷牛客看一些大佬面经的时候经常看到面试考。大致步骤就两步,找到入度为0的节点,然后把它删除。往往都是删除的时候然后把它的孩子(依赖节点)加入到队列继续重复上述操作,这个过程很容易联想到树的层序遍历。果然卡哥就是用队列模拟广搜,需要一个二维集合记录每个软件的后继软件,当删除到某个节点的时候就遍历它的所有孩子,入度自减,然后把入度为0的孩子加入到队列重复上述操作,思路还是比较简单,代码实现起来逻辑性也强。收获:1.拓扑排序思路。

2026-01-02 13:11:00 843

原创 代码随想录算法第五十七天| KamaCoder53寻宝

先是把每条边收集起来然后按照权值排序,然后遍历每条边,如果边的起点终点在一个集合了说明二人都在生成树中就不做连接处理,否则会成环,如果不在一个集合说明就可以进行连接,然后把它们加入到一个集合当中即生成树中,同时result += 边的权值,这样就能保证最后总距离最小又能把所有点连起来。后面就是一些固定器械,状态中规中矩,随后半小时虐腹,强度比较大,这个得逼自己,每组三四十个,呼吸尤其重要,上去的时候要吐气然核心收紧,感受会更明显。今天发现自己能够灵活控制背部肌肉的开合了,实在是感觉不错。

2025-12-31 20:45:36 810

原创 代码随想录算法第五十六天| KamaCoder108多余的边、KamaCoder109多余的边Ⅱ

思路与感想:这道题目确实挺简单是一道并查集的模板提,但说实话我并没有想出来,原因是这个多余的边我最开始一直没搞懂什么叫多余的边它的判断标准是啥,直到看完卡哥讲解之后才后知后觉原来是每条边相连的两个节点如果说还未建立起这条边的时候这两个节点就可以互相抵达了,那么这条边就是多余的。

2025-12-30 20:23:59 596 1

原创 代码随想录算法第五十五天| KamaCoder107寻找存在的路径

思路与感想:第一次接触并查集,一开始看卡哥视频讲解说实话没看懂,好抽象啊只知道他大概的意思,后面对着文档讲解一点点啃理解才慢慢深刻了,然后很自信的去做题。题目是判断source节点到destination节点之间是否存在一条连通的路径,吃透了理论基础的讲解就很自然想到就是判断两个节点是不是在一个集合里面,但是我也只停留在这里,更多的是不知道集合和图之间有啥关系以及这个father数组怎么用,后面直接看代码一行一行梳理下,配合之前对文档讲解各个方法的实现和并查集过程的理解,总算搞明白要怎么写了。

2025-12-29 15:04:47 789

原创 代码随想录算法第五十三天| KamaCoder110字符串迁移、KamaCoder105有向图的完全联通、KamaCoder106海岸线的计算

视频讲解:思路与感想:直接卡在读懂题意这一关了,我还纳闷输出结果怎么跟自己理解的差那么多。卡哥讲完之后才明白题目的推导过程和具体的难点在哪。本题的难点主要就是每个作为单个路径的字符串之间如何相连以及如何找到这个最短路径。

2025-12-27 21:01:59 1160

原创 代码随想录算法第五十二天| KamaCoder101孤岛的总面积、KamaCoder102沉没孤岛、KamaCoder103高山流水、KamaCoder104建造最大岛屿

思路与感想:这道题目在做的时候没搞清楚孤岛的含义,以为孤岛就是周围没有其他格子,但是真正的孤岛是这座岛屿上没有格子与边界连接,所以格子数不一定就是一个。我用的深搜,在深搜函数里面一进去就判断这个点是不是与边界连接,如果是的话那就把mark置为false说明它不是孤岛,结束深搜后就不需要进行累加。

2025-12-27 00:19:53 1061

原创 代码随想录算法第五十一天| KamaCoder99计数孤岛、KamaCoder100最大岛屿的面积

思路与感想:这道题目刚看到的时候感觉很棘手,这是第一次在算法题上应用深搜,昨天那道题因为是裸题所以用起来很轻松,这道题就不知道咋下手了。完全不知道要搜啥,怎么搜。包括听卡哥讲完第一种写法的时候还纳闷这个深搜咋跟昨天那个差别那么大,不是说好的模板吗。但当我听完第二种写法以及自己亲手把这两种敲完才发现确实有规律可循。

2025-12-26 00:04:23 732

原创 代码随想录算法第五十天| KamaCoder98所有可达路径、LeetCode797所有可能的路径

思路与感想:这是我接触图论的第一题,用到了图论中的深搜进行解决,卡哥说这是深搜的一道裸题,我从中知道了图论深搜的模板其实就是之前回溯算法的模板,所以上手起来还是比较容易的。KamaCoder上面也做了一些题目了,对于ACM代码模式也有些熟悉起来了,听说图论上大部分题目都要在KamaCoder上做了,我也挺开心正好再强化一下ACM代码模式,到时候面试的时候也不至于写的乱七八糟。依旧三部曲,第一步确定深搜函数的参数,一般就graph,当前遍历的节点x,path的终点n。

2025-12-24 21:44:00 1541

原创 代码随想录算法第四十九天| LeetCode42接雨水、LeetCode84柱状图中最大的矩形

思路与感想:接雨水这道题目可以说是家喻户晓了,我在还没有系统性学习算法题的时候就已经知道了这么一则津津乐道的故事:字节里面的保洁阿姨都会接雨水。轮到我来解这道题目的时候真的是眉头紧锁不知道从何下手。后面复盘当时的思路受阻的一大原因就是没有想要使用两层for循环暴力求解,但目光却局限在水量取决于左右两个柱子较矮的那个,根本没想清楚自己是纵向求解还是横向求解。现在把四种解法都理解后再来写感想,发现自己完全就像无头苍蝇。

2025-12-23 23:44:45 532

空空如也

空空如也

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

TA关注的人

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