- 博客(329)
- 资源 (22)
- 收藏
- 关注
原创 LeetCode-25. 合并两个排序的链表
输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。(0 <= 链表长度 <= 1000)l1l2。
2024-09-28 15:47:39 294
原创 SQL高可用优化-优化SQL中distinct和Where条件对索引字段进行非空检查语句
最近做一个需求,关于SQL高可用优化,需要优化项目中的SQL,提升查询效率。
2024-09-28 00:52:22 479
原创 union和union all的区别,别再傻傻分不清楚了!
union会按照字段的顺序进行排序;union all 只是将两个结果集合并后就返回。从效率上讲,union all要比 union快的多,所以如果确定合并的两个结果集中没有重复且不需要排序就用Union all。union all是直接连接,取到的是所有值,记录可能有的重复;union是取唯一值,记录没有重复。union会自动压缩多个结果集合中的重复结果,而union all则将所有的结果集全部显示出来。所以union在进行表链接后会筛选掉重复的记录,union all不会去除重复记录。
2024-09-14 23:01:44 950
原创 SaToken认证授权快速上手
SaToken 是一个轻量级 Java 权限认证框架,主要解决:登录认证、权限认证、单点登录、OAuth2.0、分布式Session会话、微服务网关鉴权 等一系列权限相关问题。Sa-Token 旨在以简单、优雅的方式完成系统的权限认证部分。SaToken官网,原理如下自定义接口实现SaToken框架的StpInterface接口,自动帮我们进行执行业务逻辑(获取权限集合,获取角色集合)/*** 自定义权限认证接口扩展,Sa-Token 将从此实现类获取每个账号拥有的权限码。
2024-09-08 17:00:48 897
原创 用空间换时间思路解决生产环境慢SQL性能问题总结
有个报表业务,需要查询当天之前的数据,涉及到6张表的关联查询,有些关联字段并没有索引而且有张表数据量达到了千万级,这个接口查询响应时间平均6~7分钟,别说用户忍不了,我们开发自己也真的忍不了!由于是小众业务场景,其它开发任务比较紧急,所以一直做为遗留技术债进行排期修复,这次终于把修复此慢SQL接口纳入开发管道中了!
2024-09-07 00:00:14 278
原创 【利用模板模式和责任链模式实现数据校验】
*** 网元调整数据校验抽象类**/@Component/*** 基础校验参数是否为空*//*** 网元校验信息初始化处理器**/@Component@OverrideSystem.out.println("执行校验node是否在数据库中业务逻辑......");// 初始化校验结束,进入下一个节点next(node);/*** 网元字段权限校验处理器**/@Component@Override。
2024-08-10 13:52:46 277
原创 【高可用】利用AOP实现数据库读写分离
*** 动态数据源*//*** ThreadLocal 用于提供线程局部变量,在多线程环境可以保证各个线程里的变量独立于其它线程里的变量。* 也就是说 ThreadLocal 可以为每个线程创建一个【单独的变量副本】,相当于线程的 private static 类型变量。*//*** 决定使用哪个数据源之前需要把多个数据源的信息以及默认数据源信息配置好* @param targetDataSources 目标数据源。
2024-07-23 22:49:58 365
原创 系统设计题-路由表最长匹配
路由表最长匹配:将目标IP地址dstIP与路由为entryIP/掩码长度m(比如10.166.50.0/23)进行匹配,找出匹配掩码m最长值。如果dstIP和entryIP的二进制表示的前m个位相同,则说明是匹配的。0.0.0.0是默认路由,与任何dstIP均匹配,m值为0。所有匹配的路由中,。
2024-07-10 23:19:10 256
原创 系统设计题-日活月活统计
根据访问日志统计接口的日活和月活。日志格式为其中yyyy-mm-dd代表年月日,一个日志文件中时间跨度保证都在同一个月内,但不保证每行是按照日期顺序。clientIP为合法的点分十进制ipv4地址(1.1.1.1和1.01.001.1视作同一IP地址)url访问的地址,格式为/login.do,/query.html,,仅包含字母、英文句号.、斜杠/、和下划线_result接口的访问结果,只有2种:success和fail。
2024-07-07 17:02:17 210
原创 系统设计题-简易数据库系统
create(int tableId,int colNum,String key):创建表,其id为tableId,如果该表已存在,则不做任何处理。colNum为表中列的数量,列名由a-z字母组成,并按a-z顺序编号。比如colNum=3,则代表列分别为a,b,c。key为主键(指1列或多列组合),key中每个字符代表一列,如key=bc,表示主键由列b和列c组合。insert(int tableId,int[] values):添加一条记录。values每个元素按照顺序一一对应每列的值。
2024-07-07 16:20:39 311
原创 利用队列Queue或栈Stack解决字符数组转换运算题
相同的特殊运算符,从左到右顺序计算。用例保证@,$,左右一定存在数字,且数字不存在前导为0。给定包含特殊运算符号@,$ ,转换规则如下。其中x,y都是非负整数且@优先级高于 $。
2024-06-30 18:55:56 166
原创 利用OPT算法解决最短访问次数问题
数据库缓存,模拟访问规则如下:当查询值在缓存中,直接访问缓存,不访问数据库。否则,访问数据库,并将值放入缓存。若缓存已满,则必须删除一个缓存。给定缓存大小和训练数据,依次模拟访问这组数据,请分析在此访问规则下最少的数据库访问次数输入2输出4。
2024-06-30 18:24:33 243
原创 利用BFS或动态规划解决路径算法问题
令 f[i][j]表示从左上角到坐标(i,j)的路径数字和最小值,原问题即可被划分为多个求最优值的子问题,且由于每次只能向下或向右移动一步,因此。此题需要求出从左上角出发,到达坐标(m,n)的路径数字和最小值。因此不难想到,子问题就是从左上角出发,到达坐标(i,j)的路径数字和最小值。给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。输入:grid = [[1,3,1],[1,5,1],[4,2,1]]解释:因为路径 1→3→1→1→1 的总和最小。
2024-06-30 09:19:14 421
原创 利用BFS解决每个零售店到仓库最短距离之和问题
矩阵中有3种类型:0仓库,-1障碍,1零售店。现在每个零售店要去距离它最近的仓库取货物,请计算出所有零售店到最近仓库距离之和,假设矩阵中每个单元格之间距离为1。如果遇到障碍物,则表示无法通过。可以在单元格上下左右移动。注意无法到达仓库的零售店不参与计算没有零售店或者没有仓库,则返回0。
2024-06-25 23:38:35 310
原创 【课程表算法题--拓扑排序】
你这个学期必须选修 numCourse 门课程,记为 0 到 numCourse-1。在选修某些课程之前需要一些先修课程。例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们:[0,1]。给定课程总量以及它们的先决条件,请你判断是否可能完成所有课程的学习?示例 1:输入: 2, [[1,0]]输出: true解释: 总共有 2 门课程。学习课程 1 之前,你需要完成课程 0。所以这是可能的。示例 2:输入: 2, [[1,0],[0,1]]输出: false。
2024-06-22 07:48:17 256
原创 【轮询负载均衡规则算法设计题】
给定n台主机(编号1~n)和某批数据包,数据包格式为(抵达主机时刻,负载量)。这里数据每个时刻最多只有1条数据到达。负载量表示该主机处理此数据包总耗时。请计算轮询负载均衡规则下,哪些主机负载最高(即处理数据的负载量总和),升序输出主机编号。
2024-06-13 18:45:00 340
原创 记录下“where条件中select子查询“的优化
由于项目中流水线门禁规则的升级,导致新提交的sql代码where条件含有select子查询,导致codecheck扫描校验不通过,特此需要整改,简单记录下。
2024-06-12 07:28:20 237
原创 利用单调栈思路解决递增关系数据问题
在对数据进行排序的过程中,通常采用取1个数作为主元,通过比较交换,把比主元小的数挪到它左边;把比主元大的元素挪到右边。现给定一个划分后的正整数序列,请问有多少个元素可能是排序过程中选中的主元?并按顺序输出这些值。通过暴力解法,分别比较每个数的左边和右边值,如果当前值大于左边值且当前值小于右边值,则保存此值到列表中,最后对列表排序输出。由于满足主元的条件:其右边值一定大于它,其左边值一定小于它,相当于有一个隐藏的递增关系,可以考虑单调栈,此解法更加高效。
2024-06-08 16:47:51 242
原创 校验参数个数工具类
项目中有个需求:前后端参数一致性校验,在某业务场景下后端代码需要校验参数个数,因此设计了1个工具类方便大伙使用,特此简单记录下。
2024-06-07 23:47:44 563
原创 自定义对象池BasePooledObjectFactory的使用
System.out.println("ThreadName:" + Thread.currentThread().getName() + " 对象:" + name + "正在被创建。。。。。。");System.out.println("ThreadName:" + Thread.currentThread().getName() + " 对象:" + name + "正在被销毁。。。。。。");
2024-06-01 00:21:51 593 1
原创 关于模糊查询业务的一点思考
注意点:在业务数据量少的场景下,这样写没问题。但是如果数据量非常多,这样首先查询性能非常耗时,而且查询出来太多数据也不太符合公司内人员敏感信息安全规范和期望结果。所以要对查询结果处理,我这里的处理方式就是利用limit限制查询条数,这样既符合敏感信息安全规范,也一定量提升了查询效率,避免对服务器内存造成过大压力。最近项目上线了一个小的功能,业务逻辑非常简单,就是人员联想功能:2张表的关联模糊查询。实现方案:就是无脑在sql中利用like模糊查询。
2024-05-20 20:27:44 139
原创 通过AOP实现项目中业务服务降级功能
最近项目中需要增强系统的可靠性,比如某远程服务宕机或者网络抖动引起服务不可用,需要从本地或者其它地方获取业务数据,保证业务的连续稳定性等等。这里简单记录下业务实现,主要我们项目中调用远程接口失败时,需要从本地数据库中某表获取数据(本地数据库某表每天定时同步远程接口数据)。调用大致逻辑:前端–>服务A–>服务B(这里时公服,用于维护权限、人员等信息)其中服务B调用远程服务故障,进行服务降级,从服务B的本地数据库查询数据。项目中实际是通过故障注入方式,模拟远程接口宕机。这里简单通过除法异常模拟故障。二、测
2024-05-08 22:11:05 382
原创 利用策略模式+模板方法实现项目中运维功能
/ 这里只实现了查询方法,其他增加、删除、修改可以依次实现List<?IDataOperationService定义增删改查模板方法List<?
2024-05-05 05:48:01 719 1
原创 一道使用LinkedList和Stack解决的算法题
学校的自助午餐提供圆形和方形的三明治,分别用数字 0 和 1 表示。所有学生站在一个队列里,每个学生要么喜欢圆形的要么喜欢方形的。餐厅里三明治的数量与学生的数量相同。所有三明治都放在一个 栈 里,每一轮:如果队列最前面的学生 喜欢 栈顶的三明治,那么会 拿走它 并离开队列。否则,这名学生会 放弃这个三明治 并回到队列的尾部。这个过程会一直持续到队列里所有学生都不喜欢栈顶的三明治为止。给你两个整数数组 students 和 sandwiches ,其中 sandwiches[i] 是栈里面第 i
2024-01-16 07:04:23 776
原创 处理含退格的字符串
字符串如果包含$,则将 $ 前的字符剔除,最后保留剔除后的字符串,输出其长度。利用String Builder对字符串处理。输出3,因为剔除后的字符串为abd。或者利用Stack对字符串处理。
2024-01-15 09:15:00 397
原创 数组中根据刷新时间间隔计算对应值
特斯拉发射火箭,从start时刻开始(包括start),由于发射台需要准备时间才能发射,因此需要period个单位时间就会有发射机会(不限制发射数量,只要若干火箭就绪则可以发射)。比如[[1,2],[4,6]],第一个订单在1时刻收到,需要2个单位时间准备就绪,在时刻3才能发射;现在有n个订单需要发射,用二维数组表示,即int[][] launches,第一个数字代表接收到该订单时刻,第二个数字代表准备就绪需要花费的时间。分享个关于数组中根据刷新时间间隔计算对应值的问题。未完待续-----------
2024-01-14 09:10:18 410
原创 数组中差值的最大值(寻找一个数组中左侧最大值与右侧最小值的差值)
今天跟大伙分享下关于数组中差值的最大值(寻找一个数组中左侧最大值与右侧最小值的差值)的计算思路的算法题,解决方案有许多,这里简单进行抛砖引玉。
2024-01-14 08:39:03 976
原创 【奇偶数合并】及【奇数偶数排序】
由于要对偶数合并且将合并值增加到相邻且相等2个偶数之间,然后相邻且相等奇数合并,原始数组长度可能会发生改变,因此需要用额外的数据结构进行存储临时计算结果数据。将所有相邻且相同的偶数相加放入相邻偶数中间 将所有相邻且相同奇数相加,替换掉这两个相邻且相同的奇数 最后输出合并后的数组结果。第一轮计算之后,需要判断是否还需要递归进行计算,如果需要,则递归奇偶数合并即可,最后输出计算结果。数组奇偶数合并之后[1,2,4,2,7,8,6,12,6]数组[1,2,2,7,8,3,3,6]今天分享一道很有意思的算法题目,
2024-01-06 07:24:20 451
原创 力扣:单调栈算法思路题
🍒 通常是在数组中需要通过比较前后元素的大小关系来找最近的比它大(小)的元素问题时,可以使用单调栈进行求解。单调栈分为单调递增栈和单调递减栈,通过使用单调栈我们可以访问到最近一个比它大(小)的元素。🍋什么情况适合用单调栈来解决实际问题呢?3:LeetCode 42. 接雨水。2:寻找左边第一个小于它的数的下标。1:寻找左边第一个小于它的数。
2023-11-26 06:41:04 660
原创 力扣:盛最多水的容器
双指针代表的是 可以作为容器边界的所有位置的范围。在一开始,双指针指向数组的左右边界,表示 数组中所有的位置都可以作为容器的边界,因为我们还没有进行过任何尝试。在这之后,我们每次将 对应的数字较小的那个指针 往 另一个指针 的方向移动一个位置,就表示我们认为 这个指针不可能再作为容器的边界了。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i])。解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。输入:[1,8,6,2,5,4,8,3,7]
2023-10-21 20:54:28 261
原创 巧用@Conditional注解根据配置文件注入不同的bean对象
项目中使用了mq,kafka两种消息队列进行发送数据,为了避免硬编码,在项目中通过不同的配置文件自动识别具体消息队列策略。这里整理两种实施方案,仅供参考!
2023-09-28 09:23:53 996
原创 【@PostConstruct、 @Autowired与构造函数的执行顺序】
Java提供的注解,被用来修饰方法,被@PostConstruct修饰的方法会在服务器加载Servlet的时候运行,并且只会被服务器执行一次。PostConstruct在构造函数之后执行,init()方法之前执行。调用的顺序为: 构造函数 > @Autowired > @PostConstruct(2)作用:@PostConstruct注解的方法在项目启动的时候执行这个方法,也可以理解为在spring容器启动的时候执行,可作为一些数据的常规化加载,比如读取数据字典之类、目录树缓存。
2023-09-23 19:47:03 2606
dubbotest1-master.7z
2021-07-29
dubbo-admin-2.5.4.war.7z
2021-07-29
springboot.7z
2020-07-18
springboottest1.7z
2020-07-17
SpringShiroDemo.7z
2020-06-04
基于MapReduce的Apriori算法并行化改进
2017-11-08
基于MapReduce的Apriori算法代码及其使用
2017-11-08
基于MapReduce的Apriori算法代码
2017-11-08
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人