- 博客(124)
- 收藏
- 关注
原创 【算法】leetcode100 堆、栈
方法一:暴力解法,遍历每个元素,依次以该元素为中心,向左右两边遍历,找小于该元素的左右边界。方法一:直接插入排序的方法进行排序,但是每次插入是O(k)的复杂度,k是现有节点数。时间复杂度O(n),空间复杂度O(1)。方法二:两个堆排序,大根堆存放小于等于中位数的值,小根堆存放大于中位数的值。时间复杂度:每次插入O(logk),k是现有结点数。空间复杂度O(k)。时间复杂度:O(n),空间复杂度:O(n)。top操作:获取 stack栈顶。getMin操作:获取min栈顶。方法二:栈,左、右边界的下标数组。
2025-12-20 22:15:08
1045
原创 【算法】leetcode 100 二叉树
构建根节点,构建左、右子树,返回整棵树。(2)中序遍历二叉搜索树,比较上一个节点 pre 和当前节点 cur,pre < cur,满足要求,pre >= cur,不满足要求。(1)求左、右子树的最大路径和(要大于0,否则加上反而变小了),与当前子树根节点相加,求得当前子树的最大路径和(至少包含一个节点,所以不管根节点是不是负数,都要包含)。(2)时间复杂度:构造 inorder 每个节点下标的哈希表 O(n),查找每个子树中根节点在 inorder 中的下标 O(1),构建树的每个节点 O(n)。
2025-12-09 22:21:18
1054
原创 【项目】拼团交易平台系统
电商平台市场上的同类低价商品的竞争,导致我平台商品的交易比增速减缓。为了激活用户的购买欲,我们需要适当降低商品价格。又为了对商品进行宣传,我们需要拼团的功能,用以客拉客的形式,节省部分类似直播带货的营销推广费用,将部分商品价值返还给用户,以刺激用户购买+达到宣传效果。
2025-11-28 14:57:23
764
1
原创 【算法】day21 leetcode 二叉树
cur 节点入栈,cur 转到左节点,左节点为空,弹出栈顶访问,cur 转到右节点。如果右节点为空,且栈也空了,就表明遍历完成。空间复杂度:递归栈深度,最差 O(n),所有节点都是左子节点。1. 原问题和子问题的关系:左子树、右子树翻转,交换左子树、右子树根节点,原问题翻转完成。时间复杂度:遍历每棵子树,翻转该树,O(N);时间复杂度:O(N),遍历了每个节点。空间复杂度:树高,最差O(N)。,广度优先搜索:一层一层遍历入队,每遍历完一层就计数一层深度。,递归:先递归左节点,打印根节点,再递归右节点。
2025-11-26 00:12:21
235
原创 【算法】day 20 leetcode 贪心
类似层序遍历,left 标记当前第 x 跳的左边界,right 标记当前第 x 跳的右边界,遍历 left 到 right 区间的值,计算 num[i]+i = 下一跳到达的位置,最大位置标记为 maxIndex,即下一跳的右边界。遍历数组,找到每种字母的右边界,用 hash 表存储,每种字母的最后一个字母的位置会覆盖前面的位置,从而获得每种字母的右边界。再遍历数组,获取已经遍历过的字母中,右边界最大位置,如果最大位置就是当前遍历字母的右边界,则此字母是分割点。时间复杂度:O(n),只遍历了一遍数组。
2025-11-25 00:06:26
392
原创 【算法】day 19 leetcode 100 矩阵+贪心
如示例1,把 1 旋转到 3 位置,把 3 旋转到 9 位置...,但是这样会把后面的数给覆盖掉(另想办法)。搞清四个方向:每一轮循环,都要执行 正序遍历列(更新右边界) >> 正序遍历行(更新下边界) >> 倒序遍历列(更新左边界) >> 倒序遍历行(更新上边界)。:先把 1 存储下来,再倒着旋转:7 到 1 位置,9 到 7 位置,3 到 9 位置,最后额外变量中的 1 放到 3 位置。搞清四个边界:上、下、左、右,为了便于遍历,把右、下边界设置为最后一个 index 的下一个位置。
2025-11-23 21:10:10
987
原创 【算法】day17 多维动态规划
状态表示:从起点到位置 [i,j] 有 dp[i][j] 种走法。状态转换方程:初始化:我们假设 [1,1] 是起点,[0, j]、[i,0] 是虚拟点,用于初始化,根据边界位置推断,只需初始化 dp[0][1]=1。从 i=1、j=1 开始填表,这样可以防止越界。时间复杂度:O(m*n);空间复杂度:O(m*n)。空间优化:O(n)。去掉行的维度。
2025-11-09 23:54:16
718
原创 【微服务】(4) 负载均衡
当远程调用的服务有多个实例时,instances.get(0) 每次获取的都是服务列表中的第一个实例,可能会导致每次都是对同一个实例发起请求,让该实例压力过大,而其它的实例却没有得到利用。在服务流量增大时,为了分担压力,会增加机器进行扩容。,应用于高并发、高可用的系统中。
2025-11-06 14:02:52
1096
原创 【微服务】(3) 服务注册与发现
订单服务调用商品服务的接口时,商品服务接口的,使用 spring 提供的 RestTemplate 进行 http 通信。这存在一个问题,每次 url 变更,都需要,频繁部署,十分麻烦。
2025-11-06 08:58:39
899
原创 【项目】小型支付商城 MVC/DDD
蓝色 -:用户发起的行为动作。黄色 -,事件完成态。粉色 -,外部接口。红色 -,串联决策命令到领域事件。绿色 -,读取数据的动作,没有写库的操作。棕色 -,启动决策命令的发起。
2025-11-05 15:39:26
946
原创 【工具】支付宝沙箱的使用
我们想实现一个创建订单后支付的功能,需要用到支付 API。因为对接真实的支付需要企业资质,所以我们使用支付宝沙箱专门用来做测试。
2025-10-29 14:30:55
328
原创 【工具】微信公众号测试平台的使用
微信公众号平台有个人和企业之分,个人公众号只能使用基础功能,企业能使用全量并且每年缴纳300元认证费。为了我们学习微信公众号的使用,我们使用测试平台,它支持全量功能,但有微信公众号关注人数限制。
2025-10-28 19:10:42
459
原创 【算法】day13 链表
题目:23. 合并 K 个升序链表 - 力扣(LeetCode)分析:(假设所有链表长度为 n,有 k 个链表)法一,暴力解法:回想两个有序游标合并,合并一次时间复杂度 O(2n)=O(n)。那么第一个链表与后续的 k-1 个链表合并,需要遍历第一个链表 (k-1)n 次节点。那么 k 个链表合并,需要遍历 (k-1)n + (k-2)n + …… + 2n + n = n*k(k-1)/2 = O(n*k^2),相当于 O(n^3) 时间复杂度很高。法二,优先队列(堆):每次把 k 个链表的头结点取出来比
2025-10-27 23:04:58
701
原创 【工具】内网穿透服务搭建
可以说是一类用于帮助开发、测试、运维人员协作的自动化流程工具,而内网穿透则可以。目的:搭建了内网穿透服务后,就可以。我搭建内网穿透的目的呢,主要是服务器配置太低了,把我的项目都放到服务器运行资源就不够,干脆把项目在本地运行,通过内网穿透让别人访问。实现原理:在公网服务器部署 frps(高性能反向代理)(服务端),内网服务器部署 frpc(客户端)。这样就能,用户直接通过访问公网服务端,再转发请求给内网客户端,客户端再把请求转发给本地服务,最终实现。
2025-10-27 19:33:56
894
原创 【算法】day12 哈希表
哈希表:遍历数组,查询哈希表里有没有当前数 x 的互补数 target-x,若没有则插入哈希表 (x,index)( 如果有两个相同的数,index 被覆盖了也没事,因为题目说不能用两个相同的元素;时间 O(n),空间 O(n)。但是从每个枚举数x开始查找,多了许多不必要的情况,比如 1,2,3,我们从 1 开始查找后,就没必要再从 2 或者3 开始查找了,因为它们的连续序列一定比从 1 开始的短。暴力:固定一个数O(n),然后查找 target-x 的数 O(n)(可用哈希表优化为O(1))。
2025-10-26 17:33:56
711
原创 【算法】day10 分治
朴素的快排是将数组分两类:大于等于 key 和 小于 key。时间复杂度:N*树高,理想情况(基准点最最后在中间) O(nlogn);最差情况(基本有序,基准点最后在边上)O(n^2)。时间复杂度:更接近 O(nlogn)
2025-10-25 15:55:00
914
原创 【工具】Docker 的基础使用
docker是啥:下载镜像、创建并运行容器,实现快速部署。镜像是啥:把依赖、配置、系统函数库一起打包。相当于qq安装好后的文件,直接把文件打包,因为包含有系统函数库,所以镜像是可以跨平台的。容器是啥:为每个镜像进程的环境用容器隔离起来。我们把自己的应用程序打包成镜像,就需要用 dockerfile 脚本。部署一个程序的过程:准备一个 Linux 环境、安装 jre、redis、mq 等并配置环境变量、复制应用程序的 jar 包,编写脚本运行 jar 包。这每个环节都分为一层打包成单独的文件,便于复用。
2025-10-23 11:32:19
876
1
原创 【微服务】(1) Spring Cloud 概述
Spring Cloud 是分布式微服务架构的一站式解决方案,它不是 Spring 团队所研发的框架,而是将多种解决了微服务架构常见问题的优秀架构,使用 Spring Cloud 规范集成,并用 Spring Boot 封装,更便于开发者使用。
2025-10-18 20:43:50
392
原创 【项目】年会抽奖系统
实现参数校验的方法(校验格式;校验手机号/邮箱是否被使用过(用来通知中奖,需要唯一;如果不唯一,那就通知了多个人中奖了,但奖品只有一份))。将Request 转为 DO,并将数据加密(通过实现TypeHandle类,自动完成对自定义类 Encrypt(区别于其它普通字符串)对象加密、解密手机、邮箱属于对称加密,因为需要解密发信息;密码属于摘要加密,因为不需要解密,只需要对比加密后的是否匹配(mapper 方法参数是自定义类,走TypeHandle 的 set;
2025-10-15 22:04:35
924
原创 【算法】day5 二分查找
二分查找并不是只适用于有序序列,而是适用于任何能找到“二段性”的序列。二分查找的间隔点并不一定是重点,也可以是 1/3、1/4.... 处,之所以选择 1/2,是因为它的查找效率是所有划分中最高的,这涉及到数学中的概率,不展开证明。题目:704. 二分查找 - 力扣(LeetCode)思路:代码:模板总结:题目:34. 在排序数组中查找元素的第一个和最后一个位置 - 力扣(LeetCode)思路:代码:模板总结:
2025-09-24 20:57:38
679
原创 【算法】day1 双指针
注意原地操作。快排也是这个方法:左边小于等于 tmp,右边大于 tmp,最后 tmp 放到 dest。时间复杂度:0(n)空间复杂度:0(1)
2025-09-14 13:36:02
454
原创 【JavaEE】(25) Spring 原理
Bean 的作用域指 Bean 的某种行为模式。 在整个 Spring IoC 容器内,同名 bean 只有一个。无论用什么方式获取同名 Bean,都是一样的,并且某一地方修改了 Bean,其它地方使用的也是修改后的值。 存储 Bean 时,若未指定作用域,默认为单例作用域。 也可以指定单例作用域: 重启后,Spring IoC 容器销毁,bean 也销毁了。 每次使用同名 bean,都会新建实例。
2025-09-11 12:39:18
794
原创 【JavaEE】(24) Linux 基础使用和程序部署
Linux 的第一个版本开发者是 Linus,所以部分人会叫“林纳斯”。Linux 只是一个,有些公司/开源组织基于 Linux 内核,配套了不同的应用程序,构成不同的操作系统(比如 vivo、),也就是不同“发行版”:RedHat 收费,CentOS 社区免费版但是停止维护了(出了问题小公司不好搞,但是大公司有能力二次开发),免费并且在持续维护。Linux 免费开源、稳定(持续运行不重启很多年都没问题)、安全(管理员才能操作内核)、社区支持(有问题去社区问)。
2025-09-09 14:08:53
1151
原创 【JavaEE】(22) Spring 事务
事务是,是。要么都成功,要么都失败。比如转账:A账户-100,B账户+100,只有部分操作成功会导致业务逻辑错误。
2025-09-03 16:02:56
1006
原创 【JavaEE】(21)Spring AOP
提取公共切点表达式,减少冗余代码。使用时用方法名(当前前面类)/全限定类名.方法名(其它切面类)引入。
2025-09-02 10:51:45
1137
原创 【JavaEE】(20) Spring Boot 统一功能处理
实现 HandlerInterceptor 接口,定义拦截器的业务逻辑:可以重写 3 个方法。@Slf4j// 目标方法执行前,执行 preHandle// 返回 true 继续执行目标方法;返回 false 中断执行目标方法@Overridelog.info("目标方法执行前,执行 preHandle");// 目标方法执行后,执行 postHandle@Overridelog.info("目标方法执行后,执行 postHandle");
2025-08-30 00:57:27
1246
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅