随笔分类 - 项目亮点
摘要:分布式锁 什么是分布式锁? 我们的手机有锁、车有锁、家门有锁、贵重物品会锁进保险箱。可以说,锁在我们生活中无处不在,时刻保护着我们的人身财产安全。 在计算机领域也一样,锁可以理解为针对某项资源使用权限的管理,它通常用来控制共享资源,比如一个进程内有多个线程竞争一个数据的使用权限,解决方式之一就是加锁
阅读全文
摘要:常见工具类 底层代码生成器 /** * 底层代码生成器 * * @author 石一歌 * @date 2022-07-07 22:02 */ public class EntityUtil { private static final String PROJECT_NAME = "search";
阅读全文
摘要:maven打包与项目部署 maven打包 多环境打包 在SpringBoot项目中,一般会有多个环境(开发环境、测试环境、上线生成环境等,每个环境的数据库、Redis等地址都不一样),用到profile属性(profile指具体是哪个环境),可以快速切换环境。 增加profile 我们项目默认的配置
阅读全文
摘要:分布式唯一主键 全局唯一 :ID 的全局唯一性肯定是首先要满足的! 高性能 : 分布式 ID 的生成速度要快,对本地资源消耗要小。 高可用 :生成分布式 ID 的服务要保证可用性无限接近于 100%。 方便易用 :拿来即用,使用方便,快速接入! 安全 :ID 中不包含敏感信息。 有序递增 :如果要把
阅读全文
摘要:第三方接口 实际项目中经常会与第三方网站交互,例如提交支付宝请求支付,或者获取合作方的各类信息(比如行政码、气象股票信息,或者模拟登录获取信息等等),这个时候一般都是基于http协议提供接口,这时候就需要能与第三方的http接口交互数据,httpclient就是实际项目干这个的(也可以直接使用Res
阅读全文
摘要:后台定时任务 后台定时作业是实际项目中经常要用到的,例如每5分钟跑一次新下的订单并发送邮件等等,实际使用非常多。 后台作业类 @Component public class ScheduledExample { // @Scheduled(fixedRate = 5000) // 上一次开始执行时间
阅读全文
摘要:慢SQL 慢SQL优化 发现慢SQL show processlist查询当前慢sql的语句 优化慢SQL 步骤 explain sql语句的方式查看慢sql的执行计划 分析该SQL语句索引使用情况,全表扫描情况 常见信息 列名 含义 id 选择标识符 select_type 表示查询的类型 tab
阅读全文
摘要:幂等性 一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。幂等函数或幂等方法是指可以使用相同参数重复执行,并能获得相同结果的函数。这些函数不会影响系统状态,也不用担心重复执行会对系统造成改变。 场景 购买某些视频网站的会员后,给会员送成长值和送电影券 清理或者迁移数据,数据库表仅
阅读全文
摘要:排行榜 参考链接 数据库实现 order by关键字 最简单的实现方式,通常性能不会很好 ORDER BY 关键字可以使查询返回的「结果集」按照指定的列进行排序,可以按照某「一列」排序或者同时按照「多列」进行排序,排序的顺序可以是「升序」或者「降序」。 SELECT column_name,colu
阅读全文
摘要:权限管理 如果是在service层或者dao层,直接使用spring的AOP切面编程 如果是在controller层,因为需要request或response,因此一般采用filter功率器或者spring的Interceptor拦截器。 前置知识 DispatchServlet流程 Filter、
阅读全文
摘要:高并发新增数据唯一 悲观锁 在插入前先判断数据是否存在,不存在再进行插入操作,存在返回id RR事务隔离级别加悲观锁,此事务隔离级别下悲观锁会加临键锁,会阻止其他线程的其他操作(防止幻读),以此实现并发的新增数据唯一 线程并发时,会阻塞其他线程的读写操作,并发事务只会有一个执行成功 思路 //悲观锁
阅读全文
摘要:接口设计 整体思路 接口设计大致分为四个部分组成:接口地址(url)、接口请求方式(get、post等)、请求数据(request)、响应数据(response) 接口地址 请求地址一般项目都类似,就是需求上的单个实体相关的方法都在一个类中,这样也方便后续维护。 接口请求方式 主要的参数提交方式是p
阅读全文
摘要:分页设计 普通分页 内存分页 内存分页,也叫做逻辑分页。就是从数据库中寻找出所有符合条件的数据记录,然后在逻辑层进行分页操作。 分页请求类 @Data public class PageReq implements Serializable { @NotNull(message = "page 不能
阅读全文