- 博客(75)
- 收藏
- 关注
原创 LeetCode 100题 (10题)
我们可以用栈来存储每个方块的索引,保证从栈顶到栈尾其索引所对应的方块是降序排列的,这样当我们的栈头方块小于我当前遍历到的 h[i] 时,直接弹出栈头,这时候的栈头一定比刚才弹出去的栈头大,但不确定它和h[i]谁大,所以我们就取二者中的最小值,然后乘以宽即可;思路:之前碰到过这一类括号匹配的问题,基本上考点都绕不开“栈”这个数据结构,这题也可以用“栈”来解决,栈头只存最新的一个未匹配的右括号的下标,之后存的是左括号的下标,当我们碰见右括号时,就与栈中的左括号进行匹配,也就是弹出栈尾;
2025-10-28 11:20:38
863
原创 day08-排行榜功能
在的中定义一个新的KEY前缀:注意,KEY的后缀是时间戳,我们最好定义一个,方便后期使用。因此,我们需要修改tj-commom中的DateUtils,添加一个官网地址:分布式任务调度平台XXL-JOBXXL-JOB的运行原理和架构如图:执行器:我们的服务引入一个XXL-JOB的依赖,就可以通过配置创建一个执行器。负责与XXL-JOB调度中心交互,执行本地任务。调度中心:一个独立服务,负责管理执行器、管理任务、任务执行的调度、任务结果和日志收集。
2025-10-15 17:10:09
752
原创 LeetCode 100题(10题)
很暴力的一道题,我们先用两个变量,lremove, rremove 来分别表示左括号和右括号所需要删除的数量,具体实现就是:当我们遍历的 “(” 时,就让lremove加1,遍历到“)”时,先判断lremove是否为0,如果lremove为0,我们就让 rremove加1,这点很好想;i -> nums[i]建一条边,因为存在重复的数字 target,因此这个位置一定有起码两条指向它的边,因此整张图一定存在环,说实话这题我感觉挺难的,我这边选的是 【Floyd判圈算法】,也就是图论的做法,也就是让。
2025-10-13 16:27:06
1072
原创 day07-积分系统
学习是需要正反馈的,这样学员才能有源源不断的动力去继续学习。为了激励学员,我们需要设定一个学习积分的排行榜系统。优秀的学员给予一定的奖励,比如奖励优惠券。大家互相比拼的,刺激学员持续学习,互相卷起来。而且不仅在天机学堂项目,很多其它类型项目中也都会有积分、排行榜功能。因此这套方案适用性很广,可以给大家以后实现相关功能提供思路。与以往类似,我们先类分析一下产品原型,统计一下要实现的接口,然后设计数据库表结构。首先我们要知道几个概念:积分:用户在天机学堂网站的各种交互行为都可以产生积分,积分值与行为类型有关学霸
2025-10-13 14:43:21
759
原创 day06-点赞系统
我们已经实现了学习辅助中的互动问答功能,不过存在一个问题,仅仅靠老师来给学生回答问题存在一些弊端:老师可能忙不过来难以调动所有学员互动热情互动的氛围感较差因此,产品提出了新的需求:这样一来,用户回答和评论的欲望就会增加,网站的活跃度也会越来越高。虽然看起来简单,不过蕴含的技术方案和手段还是比较多的。
2025-10-09 17:24:17
877
原创 day05-问答系统
整体来说,流程是这样的:学员在学习的过程中可以随时提问问题老师、其他学员都可以回答问题老师、学员也都可以对回答多次回复老师、学员也都可以对评论多次回复老师可以在管理端管理问题、回答、评论的状态业务流程并不复杂。
2025-10-08 20:03:05
955
原创 LeetCode 100题(10题)
left[0] 代表不考虑左子节点,left[1]代表考虑左子节点,right[0] 和 right[1]同理,注意一个比较容易错的地方,就是如果我不选当前节点,我也可以不选它的左右子节点,一开始这里忘了,导致错了。思路:很容易发现这个集合里面所有元素的和必须是偶数才能分成两个等和子集,其实这题也就是问我们,在保证集合里面的元素的和为偶数的前提下,能不能找出任意数量的元素,让他们的和是所有元素的和的一半,类似于背包问题把。未在等式列表中出现的变量是未定义的,因此无法确定它们的答案。不考虑答案输出的顺序。
2025-10-04 15:19:35
618
原创 day04-高并发优化
首先,我们要定义一个工具类,帮助我们改造整个业务。在提交学习记录业务中,需要用到异步任务和缓存的地方有以下几处:因此,我们的工具类就应该具备上述4个方法:① 添加播放记录到Redis,并添加一个延迟检测任务到DelayQueue② 查询Redis缓存中的指定小节的播放记录③ 删除Redis缓存中的指定小节的播放记录④ 异步执行DelayQueue中的延迟检测任务,检测播放进度是否变化,如果无变化则写入数据库@Slf4j@Component。
2025-10-03 22:47:22
796
原创 Git介绍 && 常用命令
Git是一个分布版本控制工具,主要用于管理开发过程中的源代码文件进行管理。通过Git 仓库来存储和管理这些文件,Git仓库分为两种:• 本地仓库:开发人员自己电脑上的 Git 仓库• 远程仓库:远程服务器上的 Git 仓库commit:提交,将本地文件和版本信息保存到本地仓库push:推送,将本地仓库文件和版本信息上传到远程仓库pull:拉取,将远程仓库文件和版本信息下载到本地仓库。
2025-10-02 22:20:49
362
原创 day03-学习计划和进度
经过前面的努力,我们已经完成了《我的课程表》相关的功能的基础部分,不过还有功能实现的并不完善。还记得昨天给大家的练习题吗?《查询我正在学习的课程》,在原型图中有这样的一个需求:我们需要在查询结果中返回已学习课时数、正在学习的章节名称。虽然我们在learning_lesson表中设计了两个字段:learned_sections:已学习章节数latest_learn_time:最近学习时间但是,这几个字段默认都是空或0,我们该如何得知用户到底学习了几节?最近一次学习是什么时候?
2025-10-01 23:51:09
1003
原创 day02-我的课表
综上,与我的课表有关的接口有:那么接下来,我们就一起来分析、设计、实现这些接口吧。我们在tj-learning服务中定义一个MQ的监听器:@Slf4j@Component/*** 监听订单支付或课程报名的消息* @param order 订单信息*/))// 1.健壮性处理// 数据有误,无需处理log.error("接收到MQ消息有误,订单数据为空");return;// 2.添加课程。
2025-09-28 00:10:09
735
原创 day01-初识项目
天机学堂是一个基于微服务架构的生产级在线教育项目,核心用户不是K12群体,而是面向成年人的非学历职业技能培训平台。相比之前的项目课程,其业务完整度、真实度、复杂度都非常的高,与企业真实项目非常接近。通过天机学堂项目,你能学习到在线教育中核心的学习辅助系统、考试系统,电商类项目的促销优惠系统等等。更能学习到微服务开发中的各种热点问题,以及不同场景对应的解决方案。学完以后你会收获很多的“哇塞”。
2025-09-23 13:21:30
968
原创 Elasticsearch 02
query:查询条件from和size:分页条件sort:排序条件highlight:高亮条件文档搜索的基本步骤是:创建对象准备,也就是DSL。来构建查询条件传入的query()方法发送请求,得到结果解析结果(参考JSON结果,从外到内,逐层解析)@Test// 1.创建Request// 2.组织请求参数// 3.发送请求// 4.解析响应// 1.获取总条数System.out.println("共搜索到" + total + "条数据");
2025-09-20 12:10:53
883
原创 Elasticsearch 01
分词器的作用是什么?创建倒排索引时,对文档分词用户搜索时,对输入的内容分词IK分词器有几种模式?ik_smart:智能切分,粗粒度:最细切分,细粒度IK分词器如何拓展词条?如何停用词条?利用config目录的文件添加拓展词典和停用词典在词典中添加拓展词条或者停用词条索引库操作有哪些?创建索引库:PUT /索引库名查询索引库:GET /索引库名删除索引库:DELETE /索引库名修改索引库,添加字段:PUT /索引库名/_mapping。
2025-09-19 16:53:15
931
原创 MQ高级.
每个只能配置一个,因此我们可以在配置类中统一设置。我们在publisher模块定义一个配置类:@Slf4j@Overridelog.error("触发return callback,");});@PostConstruct:Spring 会在确保成功注入后,再调用init()方法由于每个消息发送时的处理逻辑不一定相同,因此ConfirmCallback需要在每次发消息时定义。
2025-09-16 21:04:27
1080
原创 MQ基础.
Work模型的使用:多个消费者绑定到一个队列,同一条消息只会被一个消费者处理通过设置prefetch来控制消费者预取的消息数量交换机的作用是什么?接收publisher发送的消息将消息按照规则路由到与之绑定的队列不能缓存消息,路由失败,消息丢失FanoutExchange的会将消息路由到每个绑定的队列描述下Direct交换机与Fanout交换机的差异?Fanout交换机将消息路由给每一个与之绑定的队列Direct交换机根据RoutingKey判断路由给哪个队列。
2025-09-15 22:13:13
1041
原创 服务保护和分布式事务
Sentinel是阿里巴巴开源的一款服务保护框架,目前已经加入SpringCloudAlibaba中。官方网站:核心库(Jar包):不依赖任何框架/库,能够运行于 Java 8 及以上的版本的运行时环境,同时对 Dubbo / Spring Cloud 等框架也有较好的支持。在项目中引入依赖即可实现服务限流、隔离、熔断等功能。控制台(Dashboard):Dashboard 主要负责管理推送规则、监控、管理机器信息等。为了方便监控微服务,我们先把Sentinel的控制台搭建出来。1)下载jar包。
2025-09-13 14:47:08
817
原创 微服务02
无论是还是都支持自定义,只不过编码方式、使用方式略有差别。自定义不是直接实现,而是实现。@Component@Override@Override// 获取请求// 编写过滤器逻辑System.out.println("过滤器执行了");// 放行注意:该类的名称一定要以为后缀!spring:cloud:gateway:- PrintAny # 此处直接以自定义的GatewayFilterFactory类名称前缀类声明过滤器@Component。
2025-09-09 20:51:02
777
原创 nacos启动 Server check fail, please check server localhost ,port 9848 is available 问题
我在使用idea启动项目时,出现了这种报错,发现通过浏览器也无法访问nacos的控制台了,这时我通过以下操作解决了问题。此时继续刷新我们的浏览器,如果发现还是无法访问,我们先查看这个 nacos 的容器是否已经启动。然后查看该端口是否开放,如果返回的是 yes,则代表开放成功。首先,通过以下命令查看我们的这个防火墙的该端口是否开放。如果返回是no,我们通过以下命令将该端口打开。最后刷新浏览器,可以发现成功进入了。然后重新载入添加的端口。出现如下代表已经启动了。我们接下来将该容器停止。
2025-09-06 18:20:56
436
原创 微服务01
什么时候需要拆分微服务?如果是创业型公司,最好先用单体架构快速迭代开发,验证市场运作模型,快速试错。当业务跑通以后,随着业务规模扩大、人员规模增加,再考虑拆分微服务。如果是大型企业,有充足的资源,可以在项目开始之初就搭建微服务架构。如何拆分?首先要做到高内聚、低耦合从拆分方式来说,有横向拆分和纵向拆分两种。纵向就是按照业务功能模块,横向则是拆分通用性业务,提高复用性服务拆分之后,不可避免的会出现跨微服务的业务,此时微服务之间就需要进行远程调用。微服务之间的远程调用被称为RPC,即远程过程调用。
2025-09-06 15:15:13
1069
原创 在Docker中安装MySQL时3306端口占用问题
我个人在学习黑马的 SpringCloud(导入黑马商城) 中,在使用docker执行以下命令时,出现了问题这个命令是为了安装MySQL,但是我在执行后出现了以下错误。
2025-09-02 23:31:29
460
原创 函数式编程-Stream流(三更草堂)
Lambda是JDK8中一个语法糖。他可以对某些匿名内部类的写法进行简化。它是函数式编程思想的一个重要体现,让我们不用关注是什么对象。而是更关注我们对数据进行了什么操作。Java8的Stream使用的是函数式编程模式,如同它的名字一样,它可以被用来对集合或数组进行链状流式的操作。可以更方便的让我们对集合或数组操作。我们在编写代码的时候出现最多的就是空指针异常。所以在很多情况下我们需要做各种非空的判断。if(author!=null){尤其是对象中的属性还是一个对象的情况下。这种判断会更多。
2025-09-01 19:37:16
918
原创 Java 反射原理
什么是动态代理,动态代理又有什么用呢?举个例子:假设 Student 类里面有个 eat 方法现在我要给这个方法增加其他功能按照以前所学,我们只能把这两个行为写到 eat 方法当中这叫做侵入式修改,在一个成熟的项目中,我们是很少去这么改的。这时就引入了动态代理,其特点便是:无侵入式的给代码增加额外的功能那么程序为什么要被代理呢?答:对象如果嫌身上干的事太多的话,可以通过代理来转移部分职责。代理长什么样?答:对象有什么方法想被代理,代理就一定要有对应的方法代理是如何知道对象中有哪些方法需要被代理呢?答:通过一
2025-08-29 16:01:25
628
原创 MybatisPlus
这种写法在某些企业也是不允许的,因为SQL语句最好都维护在持久层,而不是业务层。就当前案例来说,由于条件是in语句,只能将SQL写在Mapper.xml文件,利用foreach来生成动态SQL。这实在是太麻烦了。假如查询条件更复杂,动态SQL的编写也会更加复杂。所以,MybatisPlus提供了自定义SQL功能,可以让我们利用Wrapper生成查询条件,再结合Mapper.xml编写SQL。
2025-08-28 15:13:38
769
原创 LeetCode 100题(3)(10题)
思路:常规思路就是用 HashMap 来存每个元素出现的次数,就不多说了,最简单最快的做法是用位运算来考虑,因为两个相同的元素异或出来是0,所以这里面的每对相同的元素都会两两抵消成0,而最后0再和那个只出现一次的元素异或,最后答案就是那个只出现一次的元素。思路:也是比较经典的问题,考虑dp,设 dp[i][j],状态表示为:索引 i 到 索引 j 是否为回文子串,状态转移方程见代码,还是比较好理解的,当然官方还给了一个中心拓展法,时间复杂度是更优的,但是我个人是比较讨厌这种找规律找出来的方法。
2025-08-25 14:30:19
690
原创 Day12 数据统计-Excel报表
首先来看写入/*** 通过 POI 创建 Excel 文件并且写入文件内容*///在文件中创建一个 excel 文件//在Excel文件中创建一个 sheet 页//在sheet中创建行对象,rownum 编号从 0 开始//创建单元格并且写入文件内容row.createCell(1).setCellValue("姓名");row.createCell(2).setCellValue("城市");//创建一个新行。
2025-08-23 15:15:31
337
原创 Day11 数据统计 图形报表
总结:使用 Echarts,重点在于研究当前图表所需的数据格式。通常是需要后端提供符合格式要求的动态数据,然后响应给前端来展示图表。
2025-08-22 21:02:07
318
原创 Day10 订单状态定时处理,来单提醒和客户催单
WebSocket 是基于 TCP 的一种新的网络协议。它实现了浏览器与服务器全双工通信--浏览器和服务器只需要完成一次握手,两者之间就可以创建持久性的连接,并进行双向数据传输HTTP 协议和 WebSocket 协议对比:· HTTP 是短连接· WebSocket 是长连接· HTTP 通信是单向的,基于请求响应模式· WebSocket 支持双向通信· HTTP 与 WebSocket 底层都是 TCP 连接应用场景:·视频弹幕·网页聊天·体育实况更新。
2025-08-21 15:22:48
1002
原创 Day08 用户下单,订单支付
先看两个问题:根据上面的流程图可以发现,商户系统和微信后台之间是需要相互调用的;那么调用过程如何保证数据安全?微信后台如何调用到商户系统?对于第一个问题,我们需要获取微信支付平台证书,商户私钥文件对于第二个问题,我们需要获得一个临时域名,而这个临时域名它其实对应的就是公网 ip ,支付成功后微信服务通过该域名回调我们的程序,那么我们要如何获得这个域名呢?我们需要用到 cpolar。
2025-08-18 15:38:42
388
原创 Day07 缓存商品 购物车
用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增大。结果:系统响应慢,用户体验差。
2025-08-17 16:27:35
504
原创 Day05 店铺营业状态设置 && Redis
Redis 是一个基于内存的 key-value 结构数据库。·基于内存存储,读写性能高·适合存储热点数据(热点商品,资讯,新闻)企业应用广泛redis 中文网:Redis中文网Redis 的 Windows版属于绿色软件,直接解压即可使用,解压后目录结构如下: 启动:在解压目录下进入命令行窗口,输入以下命令即可启动结束:直接 Ctrl + C 即可客户端连接服务器:注意服务端不能关,否则连接不上客户端断开:输入 exit 即可补充如果我们要连接外部的服务器:-h 后面写域名,-p 后面写端口名密码修改:在
2025-08-12 22:28:55
825
原创 Day02 员工管理,分类管理
产品原型:接口设计:本项目约定:管理端发出的请求,统一使用 /admin 作为前缀用户端发出的请求,统一使用 /user 作为前缀。
2025-08-10 00:07:54
902
原创 Day01 项目概述,环境搭建
定位:专门为餐饮企业(餐厅,饭店)定制的一款软件产品功能架构:体现项目中的业务模块使用 Swagger 你只需要按照它的规范定义接口及接口相关的信息,就可以做到生成接口文档,以及在线接口调试页面。官网:Knife4j是为 Java MVC 框架集成 Swagger 生成 Api 文档的增强解决方案。
2025-08-08 22:26:28
781
原创 Docker
镜像就是包含了应用程序,程序运行的系统函数库,运行配置等文件的文件包。构建镜像的过程其实就是把上述文件打包的过程。具体步骤:镜像结构:要想描述这个镜像的结构,就得编写一份描述文件,这个文件是固定的叫 DockerfileDockerfile 就是一个文本文件,其中包含了一个个的指令(Insturction),用指令来说明要执行什么操作来构建镜像。将来 Docker 可以根据 Dockerfile 来帮我们构建镜像。
2025-08-07 16:08:57
1173
1
原创 Linux 基础
Linux 系统分为内核版和发行版内核版:由 Linux 核心团队开发,维护。免费,开源负责控制硬件发行版:基于 Linux 内核版进行拓展由各个 Linux 厂商开发,维护有收费版本和免费版本Linux 系统发行版Ubuntu:以桌面应用为主,免费。RedHat:面向企业用户,收费。CentOS:RedHat 的社区版,免费Fedora:功能完善,快速更新,免费openSUSE:对个人完全免费,图形界面华丽红旗 Linux:北京中科红旗软件技术有限公司开发。
2025-08-05 18:51:48
1177
原创 Tlias案例-登录 & 退出 & 打包部署
步骤:1:为“登录”按钮绑定事件,点击登录按钮,发送异步请求到服务器端,执行登录操作。2:为“取消”按钮绑定事件,点击取消按钮,清空登录表单数据。基本功能问题:目前执行登录操作,登录成功之后,并没有将令牌信息存储起来,在后续的每次操作中,也就拿不到登录时的令牌信息了。方案:需要在登录成功后,将令牌信息存储起来。在后续的请求中,再将令牌取出来,携带到服务器。这里使用 localStorage 来进行存储,下面介绍一下这个东西。localStorage 是浏览器提供的本地存储机制(5 MB)。
2025-08-02 22:48:31
961
原创 Tlias 案例-员工管理(前端)
还有一个问题,通过接口文档可以发现,我前端给后端的数据里面的 exprList 里面封装的是 begin 和 end,但是此时我的日期封装在 exprDate 这个伪数组里面,exprDate[0] 就是 begin;我们将要增加的员工信息封装到一个响应式数据里,工作经历和最后一个伪数组 expList 有关,当我们添加的时候,数组自然里面的元素自然多一个,删除的时候,数组里面的元素自然少一个。1:为表格的复选框绑定事件,点击复选框之后,获取到目前选中的条件的 id(多个 id 可以封装到数组之中)。
2025-08-02 13:28:28
1135
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅