- 博客(136)
- 收藏
- 关注
原创 SpringBoot集成支付宝支付支付宝退款
SpringBoot集成支付宝支付,支付宝支付回调,支付宝退款,同时兼容蚂蚁花呗,H5端和App端
2022-07-09 21:17:44
1253
原创 使用SpringCache实现缓存,自定义序列化方式,解决序列化bug
使用SpringCache实现缓存,自定义序列化方式,解决序列化bug在学习SpringCache之前,很多同学会使用硬编码的方式去给代码设置缓存,缓存操作和业务逻辑之间的代码耦合度高,对业务逻辑有较强的侵入性。当然我们也可以结合Spring的AOP和自定义注解去实现缓存。那么在Spring中,我们可以直接使用SpringCache来完成我们在项目中数据的缓存操作。缓存声明名称解释@Cacheable根据方法的请求参数对其结果进行缓存,下次同样的参数来执行该方法时可以直接从缓
2022-04-17 20:51:36
3200
原创 springboot项目中多线程应用,异步处理,异步调用
springboot项目中多线程应用,异步处理,异步调用多线程的应用线程池的应用异步处理异步调用随着开发经验的积累,我们逐渐都了解到了项目中需要多线程的应用或者线程池的应用,有一些耗时的业务需要我们去进行异步调用,特别是针对于一些其他部门所提供的接口,因此码下这篇博客,希望对大家有用!配置一个线程池@EnableAsync@Configuration@Slf4jpublic class ThreadPoolConfig { @Bean public RestTempla
2022-04-11 23:25:26
2198
原创 接口调用重试@Retryable重试机制
@Retryable重试机制当调用其他接口失败的时候,我们希望可以多次重试调用该接口,spring中已经有封装好的相关注解,直接拿来使用即可1 引入相关依赖<dependency> <groupId>org.springframework.retry</groupId> <artifactId>spring-retry</artifactId></dependency>2.相关代码入口类中添加@Enable
2022-04-10 15:56:12
1792
原创 Java搭建订单状态机模型
订单状态机前言在电商平台中,订单的状态是十分复杂的,并且订单状态的流转也是极其复杂并且十分严格的。因此,我们需要定义订单状态的流转模型,并定义订单状态机模型。我们只需对订单进行相应的状态设置即可,订单状态机内部去触发订单状态流转事件,从而进行相关的状态设置。如果订单状态不符合(例:待付款->已发货),那么订单状态机内部判断订单前置状态不符合,不能触发相关的流转事件,从而抛出异常,设置订单状态失败。下边是一个订单状态机的模型,此订单状态稍微有点复杂,不过也涵盖了所有的问题情况。1 订单状
2022-04-05 18:31:12
2427
原创 valid参数校验
valid参数校验1.引入相关依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId></dependency>2.配置全局异常处理@ControllerAdvice@RestControllerAdvice@Slf4jpublic
2022-03-30 22:51:00
901
原创 mybatisplus处理公共字段
mybatisplus处理公共字段前提:引入mybatisplus的开发jar,项目已经集成了mybatisplus1.定义公共字段@Datapublic abstract class BaseTableField implements Serializable { private static final long serialVersionUID = 1L; /** * 创建时间 */ @TableField(fill = FieldFill.IN
2022-03-30 22:24:29
1306
原创 LeetCode.212 单词搜索 II(经典字典数+上下左右DFS问题模版)
原题https://leetcode-cn.com/problems/word-search-ii/在这里插入图片描述思路字典树 + DFS1. 将words构造成一颗字典树(前缀树)2. 上下左右DFSboard,如果在字典树中,记录每一次遍历到的字符,遇到结束字符,添加到结果集中题解package com.leetcode.code;import java.util.ArrayList;import java.util.HashSet;import java.util.Li
2021-09-16 23:16:55
167
原创 LeetCode.502 IPO
原题https://leetcode-cn.com/problems/ipo/思路贪心策略1.按照所需启动资金进行升序排序2.从所需启动资金<=w(0)的情况下,将能启动的项目添加到queue中3.从queue中挑选出最大的纯利润,并从queue中移除4.再次计算所需启动资金<=w的情况下,将能启动的项目添加到queue中5.再从queue中挑选出最大的纯利润,并从queue中移除6.直到循环结束题解package com.leetcode.code;imp
2021-09-08 23:18:34
53
原创 LeetCode.295 数据流的中位数
原题https://leetcode-cn.com/problems/find-median-from-data-stream/思路使用两个优先队列 PriorityQueue一个用来存储中位数前边的数据,要求从大到小排列,命名为queueMin一个用来存储中位数后边的数据,要求从小到大排列,命名为queueMax这样两个queue.peek()用来计算中位数下面讨论列表的奇偶性奇数右边多存储一个元素,也就是queueMin.size() + 1 = queueMin.size()
2021-08-27 19:13:16
65
原创 LeetCode.881 救生艇
原题https://leetcode-cn.com/problems/boats-to-save-people/思路贪心策略先排序,再双指针要使需要的船数尽可能地少,应当使载两人的船尽可能地多。也就是最重的和最轻的放一起,定义left和right如果超过了限制,则最胖的需要单独占一个船,right--如果没有超过限制,则放一个船,left++ left++题解package com.leetcode.code;import java.util.Arrays;public cl
2021-08-26 22:17:45
87
原创 LeetCode.797 所有可能的路径(经典DFS/递归回溯问题模板)
原题https://leetcode-cn.com/problems/all-paths-from-source-to-target/思路一道非常经典的简单题【DFS】【递归回溯】题解package com.leetcode.code;import java.util.ArrayList;import java.util.List;public class Code797 { public static void main(String[] args) {
2021-08-25 22:42:40
92
原创 LeetCode.787 K 站中转内最便宜的航班
原题https://leetcode-cn.com/problems/cheapest-flights-within-k-stops/思路动态规划看到此题,直观的思路有 DFS 和 动态规划这里只说下动态规划,动态规划最难的就是定义动态规划方程定义f[t][i]表示行走t步从src站到达i站的所需最小花费定义f[t-1][j]表示行走t-1步从src站到达j站的所需最小花费定义cost(j,i)表示从j站到i站的花费,即flight[3]=> 则推导出 f[t][i] = f[t-
2021-08-24 23:37:16
67
原创 LeetCode.552 学生出勤记录 II
原题https://leetcode-cn.com/problems/student-attendance-record-ii/思路递归回溯递归回溯的多样化递归回溯的记忆化给一个大佬的链接,我只研究了方法一和方法二题解package com.leetcode.code;public class Code552 { public static void main(String[] args) { System.out.println(checkRecord(5
2021-08-18 22:55:21
61
原创 LeetCode.526 优美的排列
原题https://leetcode-cn.com/problems/beautiful-arrangement/思路递归回溯但是在做递归回溯之前一定要定义好数据模型也就是递归的数据是什么,怎么判断是否满足题意,回溯的标识符是什么定义一个boolean[]来表示当前数据是否被使用过,也就是回溯的标识符定义一个map<Integer, List<Integer>>来表示当前位置现有满足题意的元素,也就是需要递归的数据题解package com.leetcode.c
2021-08-16 23:45:13
108
1
原创 LeetCode.525 连续数组
原题https://leetcode-cn.com/problems/contiguous-array/思路1不变,把0变成-1,求和为0 的最大长度前缀和 + hash题解package com.leetcode.code;import java.util.HashMap;import java.util.Map;/** * @Description: * @ClassName: Code525 * @Author: ZK * @Date: 2021/6/3 15:00
2021-06-03 15:38:34
62
2
原创 LeetCode.692 前K个高频单词
原题https://leetcode-cn.com/problems/top-k-frequent-words/思路先哈希再排序,排序代码是经典(值得一看)题解class Solution { public List<String> topKFrequent(String[] words, int k) { Map<String, Integer> map = new HashMap<>(); for (Strin
2021-05-20 12:20:30
63
4
原创 LeetCode.1738 找出第 K 大的异或坐标值
原题https://leetcode-cn.com/problems/find-kth-largest-xor-coordinate-value/思路前缀和,再排序这里的前缀和需要稍微变换一下盗了大佬两张图题解class Solution { public int kthLargestValue(int[][] matrix, int k) { int row = matrix.length; int col = matrix[0].length;
2021-05-20 12:15:40
48
2
原创 LeetCode.1442 形成两个异或相等数组的三元组数目
原题https://leetcode-cn.com/problems/count-triplets-that-can-form-two-arrays-of-equal-xor/思路首先想到异或前缀和然后最重要的就是异或公式推导a=Si⊕Sja = S_i ⊕ S_ja=Si⊕Sjb=Sj⊕Sk+1b = S_j ⊕ S_{k+1}b=Sj⊕Sk+1a=ba = ba=bSi⊕Sj=Sj⊕Sk+1S_i ⊕ S_j = S_j ⊕ S_{k+1}Si⊕Sj=Sj⊕Sk+1
2021-05-20 12:08:24
55
原创 LeetCode.1310 子数组异或查询
原题https://leetcode-cn.com/problems/xor-queries-of-a-subarray/思路1. 最直接的办法,暴力求解2. 前缀和,经过前几天的每日一题,都是异或运算,已经掌握了其特征异或的特点:相同的为0,不同的为1题解class Solution {// 暴力求解 public int[] xorQueries(int[] arr, int[][] queries) { int len = queries.length;
2021-05-13 21:35:55
52
原创 LeetCode.1269 停在原地的方案数
原题https://leetcode-cn.com/problems/number-of-ways-to-stay-in-the-same-place-after-some-steps/思路动态规划明知道是动态规划,却还是没有具体的思路,于是大佬的题解来了题解class Solution { final static int LEN = 1000000007; public int numWays(int steps, int arrLen) { int
2021-05-13 21:29:22
50
原创 LeetCode.690 员工的重要性
原题https://leetcode-cn.com/problems/employee-importance/思路使用map转存数据递归/栈题解/*// Definition for Employee.class Employee { public int id; public int importance; public List<Integer> subordinates;};*/class Solution { public int
2021-05-01 23:39:07
39
原创 LeetCode.137 只出现一次的数字 II
原题https://leetcode-cn.com/problems/single-number-ii/思路1. 常规思路 hash,不做过多的描述2. 应该能想到使用位运算先贴一张大致思路图2.1 对于nums中每个数字的每一位单独进行计算,累加得到count2.2 对于count进行%3的操作,其结果一定为0或者1,0或者1其实就是当前位的值2.3 对于所有位进行计算完毕,每个位的结果拼接到一起,得到的就是需要的结果只出现了一次的元素题解package cn.codemao
2021-04-30 14:25:18
59
原创 LeetCode.938 二叉搜索树的范围和
原题https://leetcode-cn.com/problems/range-sum-of-bst/思路二叉搜索树BST的中序遍历是升序的,故可以升序到high后直接return题解/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} *
2021-04-27 22:28:51
41
原创 LeetCode.897 递增顺序搜索树
原题https://leetcode-cn.com/problems/increasing-order-search-tree/思路二叉搜索树(BST)的中序遍历是有序的中序遍历将所有的节点值都添加到一个集合中,然后遍历集合形成目标树即可题解package com.leetcode.code;import java.util.ArrayList;import java.util.List;/** * @Description: * @ClassName: Code897 *
2021-04-25 23:32:56
45
原创 LeetCode.377 组合总和 Ⅳ
原题https://leetcode-cn.com/problems/combination-sum-iv/思路递归回溯,同时也利用了动态规划的思想题解package com.leetcode.code;import java.util.HashMap;import java.util.Map;/** * @Description: * @ClassName: Code377 * @Author: ZK * @Date: 2021/4/24 21:29 * @Version
2021-04-24 21:55:27
50
原创 LeetCode.368 最大整除子集
原题https://leetcode-cn.com/problems/largest-divisible-subset/思路动态规划1.先将数组排序2.定义dp数组,记录每个元素对应的子集的最大长度3.同时定义·idx·数组,记录每个元素对应的最大长度子集的上一个元素的下标4.遍历dp数组,找到nums数组中最大长度的子集长度,同时找到目标子集末尾对应的下标5.根据末尾元素的下标,一次找到上一位元素,并将其添加至list中也许没说明白,思路都在代码中题解package cn.code
2021-04-23 14:50:26
147
5
原创 LeetCode.363 矩形区域不超过 K 的最大数值和
原题https://leetcode-cn.com/problems/max-sum-of-rectangle-no-larger-than-k/思路自己就想到一个前缀和,时间复杂度为 O(m2n2m^2n^2m2n2)还是看看大佬的题解吧 连接附上亮点在于 set.ceiling(int x) 方法于是时间复杂度就降低到了 O(m2nlognm^2nlognm2nlogn)当然还能继续优化,这就是菜鸡和大佬的区别了我承认我是个菜鸡题解package com.leetcode.co
2021-04-22 23:40:48
63
原创 LeetCode.213 打家劫舍 II
原题https://leetcode-cn.com/problems/house-robber-ii/思路动态规划依托于 198.打家劫舍由于首位房间相邻,则盗窃区间共分为两种情况case1: [0, n-2]case2: [1, n-1]分别对这两种情况进行动态规划即可动态转移方程为:dp[i]=max(dp[i−2]+nums[i],dp[i−1])题解package cn.codemao.botmao.admin;/** * @version 1.0 * @autho
2021-04-15 14:42:06
42
原创 LeetCode.198 打家劫舍
原题https://leetcode-cn.com/problems/house-robber/思路动态规划 dp数组dp[i]=max(dp[i−2]+nums[i],dp[i−1])题解package cn.codemao.botmao.admin;/** * @version 1.0 * @author: zhangkun@codemao.cn * @description: * @create: 2021-04-15 11:38 **/public class Cod
2021-04-15 14:35:57
76
原创 LeetCode.783 二叉搜索树节点最小距离
原题https://leetcode-cn.com/problems/minimum-distance-between-bst-nodes/思路利用中序遍历递增的性质(1)中序遍历得到一个递增的集合,遍历集合得到min(2)遍历过程中记录pre,直接得到min题解/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; *
2021-04-13 14:20:17
46
原创 LeetCode.179 最大数
原题https://leetcode-cn.com/problems/largest-number/思路1.定义排序函数2.排序3.输出结果题解package cn.codemao.botmao.admin;import java.util.Arrays;import java.util.Comparator;/** * @version 1.0 * @author: zhangkun@codemao.cn * @description: * @create: 2021-0
2021-04-12 14:55:08
43
原创 LeetCode.264 丑数 II
原题https://leetcode-cn.com/problems/ugly-number-ii/思路动态规划官方题解有详细解析题解package com.leetcode.code;/** * @Description: * @ClassName: Code264 * @Author: ZK * @Date: 2021/4/11 00:06 * @Version: 1.0 */public class Code264 { public static void m
2021-04-11 00:48:29
46
原创 LeetCode.263 丑数
原题https://leetcode-cn.com/problems/ugly-number/思路0 和负整数一定不是丑数只需要把 n 对 2、3、5 整除,看最后是否仅剩下 1题解package com.leetcode.code;/** * @Description: * @ClassName: Code263 * @Author: ZK * @Date: 2021/4/10 22:56 * @Version: 1.0 */public class Code263 {
2021-04-10 23:10:01
46
原创 LeetCode.154 寻找旋转排序数组中的最小值 II(经典二分查找的变种)
原题https://leetcode-cn.com/problems/find-minimum-in-rotated-sorted-array-ii/思路二分查找贴一下官方题解一定要能看懂下边的三张图注意:第三张图可能需要仔细推敲一下了!本题是建立在上一题的基础之上题解package cn.codemao.botmao.admin;/** * @version 1.0 * @author: zhangkun@codemao.cn * @description: * @c
2021-04-09 16:42:13
77
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人