- 博客(252)
- 资源 (2)
- 收藏
- 关注
原创 AI 编程助手 cursor的系统提示词 prompt
如果还没有readme文件,你应该创建,这个文件将作为用户使用你提供的所有功能的说明书,以及你对项目内容的规划。- 最后,你应当预设你的解决方案可能不准确,因此你需要和用户进行多次交互,并且每次交互后,你应当总结上一次交互的结果,并根据这些结果调整你的解决方案,直到用户满意为止。你的目标是帮助用户以他容易理解的方式完成他所需要的产品设计和开发工作,你始终非常主动完成所有工作,而不是让用户多次推动你。- 首先,你应当充分理解用户需求,并且可以站在用户的角度思考,如果我是用户,我需要什么?
2025-02-19 12:45:19
897
原创 深度分页的解决方案
2、翻页体验层面,如果可以只保留上一页、下一页,每次传参上一页数据的最大(最小)值。1、需求层面,如果允许最多査询xx页(如100页),则直接避免了深度分页的问题。5、ES、Hive+lmpala、ClickHouse等OLAP方案。3、通过子査询、inner join减少回表次数,提高査询效率。
2024-12-29 19:07:07
183
原创 mysql + elasticsearch数据双写设计与实现
在很多电商网站中,对商品的搜索要求很高,主要体现在页面快速响应搜索结果。这就对服务端接口响应速度提出了很高的要求。而商品数据存储离不开mysql,在高并发场景下,尤其是数据规模达到一定量级,mysql的性能瓶颈一定会出现,为了满足极致的搜索速度,往往需要借助第三方存储,比如nosql数据库,当然主流的搭配还是使用搜索引擎来完成,于是在很多场景下,会选择mysql+elasticsearch来满足这个场景下对搜索的要求。如下是一个典型的使用mysql+es实现数据双写的应用场景。
2024-12-25 22:45:24
1620
1
原创 Springboot实现多个线程池动态配置
我这里的配置user线程池配置最多只能执行4个任务,超过则提示,school线程池最多只能执行3个任务,超过则提示,我在页面调接口创建线程执行分别执行user线程池和school线程池,连续请求4次,预期结果应该是user线程池可以正常执行,school线程池则会提示。nacos新建线程池专用的配置文件,注意推荐使用properties类型的配置文件,yaml类型的会读取不全配置信息的问题。去nacos中修改一下线程池的配置,把user线程修改成最多只有2个任务执行,school线程最多只有4个任务执行。
2024-12-24 21:25:41
714
原创 Semaphore控制接口并发频率
1.使用Semaphore信号灯可以控制进入代码块的线程数量。2.代码块中semaphore.acquire(2);消耗了多少权重,后边就要归还多少权重,否则会导致程序异常卡死。
2024-12-03 23:08:39
920
原创 ThreadLocal实现登录(保存用户登录信息)
ThreadLocal可以将用户信息保存在线程中,当请求结束后我们在把保存的信息清除掉。这样我们才开发的时候就可以直接从全局的ThreadLocal中很方便的获取用户信息。使用ThreadLocal,可以在同一线程中很方便的获取用户信息,不需要频繁的传递。方法中根据自己的需要将用户的登录信息存放之ThreadLocal中即可。在日常开发中我们可以根据自己需要去获取用户信息,比如从token解析等。自行编写接口测试,直接通过ThreadLocal返回用户的登录信息。然后最后记得清除相关数据以避免。
2024-12-01 19:36:21
685
原创 Java多线程实战-异步操作日志记录解决方案(AOP+注解+多线程)
在现代分布式系统中,操作日志记录扮演着非常重要的角色。它不仅能够帮助我们追踪系统的运行状态,还可以提供关键的审计线索,对于系统的运维和问题排查都有着重要意义。日志记录代码和业务逻辑代码高度耦合,不利于代码的可维护性。新增或修改日志记录需求时,需要修改多处代码,工作量较大。由于日志记录操作通常需要进行IO操作,会对业务响应时间产生一定影响。为了解决这些问题,我们可以考虑采用基于注解和AOP切面的异步日志记录解决方案。
2024-12-01 19:14:15
1006
原创 Mysql和ES数据同步方案汇总
在实际项目开发中,我们经常将Mysql作为业务数据库,ES作为查询数据库,用来实现读写分离,缓解Mysql数据库的查询压力,应对海量数据的复杂查询。这其中有一个很重要的问题,就是如何实现Mysql数据库和ES的数据同步,今天和大家聊聊Mysql和ES数据同步的各种方案。本文主要对Mysql和ES进行数据同步的常见方案进行了汇总说明。同步双写是最简单的同步方式,能最大程度保证数据同步写入的实时性,最大的问题是代码侵入性太强。异步双写。
2024-11-14 00:37:45
1295
原创 Elasticsearch专栏-4.es基本用法-查询api
multi_match用在多字段查询中,下面的语句表示,只要address或city中,包含mill和urie其中的一个,就算是命中查询。在数值型查询中经常用到,而在文本中查询使用,是表示查询时不进行分词,刚好和分词查询关键字match对立。查询指的是查找符合条件的数据,包括查询所有、匹配查询、布尔查询、范围查询、开头我们也说了,es对数据的处理就两部分,查询和处理。上述只罗列了常用的查询,除此之外,还有很多其他查询,这里不做演示,感兴趣的小伙伴可以自己查找下。这块的查询已经涉及到了分词,指的是查询。
2024-11-09 15:58:33
1387
1
原创 高并发系统三大利器之限流
由于令牌桶的令牌是源源不断生成的,当访问量小时,可以留存令牌达到令牌桶的上限,这样当短时间 的突发访问量来时,积累的令牌数可以处理这个问题。因为处理的速度是固定的,请求进来的速度是未知的,可能突然进来很多请求, 没来得及处理的请求就先放在桶里,既然是个桶,肯定是有容量上限,如果桶满 了,那么新进来的请求就丢弃。(降级是主动的,熔断是被动的。令牌桶算法是对漏桶算法的一种改进,桶算法能够限制请求调用的速率,而令牌桶算法能够在限制调用的平均速率(令牌产生的速度是固定的)的同时还允许一定程度的突发调用。
2024-11-09 15:33:31
1025
原创 Guava限流神器:RateLimiter使用指南
灵活性:RateLimiter提供了多种限流策略,满足不同场景的需求,比如SmoothBursty和SmoothWarmingUp模式,以及能够动态调整速率的特性。简单易用:Guava的RateLimiter非常容易理解和使用,API设计直观,使得在实际项目中快速实现限流成为可能。性能:虽然RateLimiter会带来一定的性能开销,但是在大多数场景下,这种开销是可接受的,特别是考虑到它带来的稳定性和可靠性。稳定性。
2024-11-09 15:06:46
1316
原创 注解实现json序列化的时候自动进行数据脱敏
最近在进行开发的时候遇到一个问题,需要对用户信息进行脱敏处理,原有的方式是写一个util类,在需要脱敏的字段查出数据后,显示掉用方法处理后再set回去,觉得这种方式能实现功能,但是不是特别优雅,想找个比较优雅的实现。接口输出json,于是去查询了一下相关的资源,jackson可以指定某个字段的自定义序列化类,那么还有一个问题,我指定了用某个类进行序列化,但是在序列化的时候如果判断脱敏的类型呢,翻看网上大神的文章得知,是 Jackson 提供的另一个序列化相关的接口,它的作用是通过字段已知的上下文信息定制。
2024-09-06 13:19:23
736
2
原创 设计模式-策略类实现
说到,先说说工厂模式是什么,有什么优点平常我们在工作开发过程中,往往因为工期问题导致整体功能设计考虑的不够周到,导致后期迭代时发现需要原有功能流程基础上追加新功能时,需要耗费更多的成本,无法轻易推翻重构,接着便是将错就错,在if else之下再来一层elseif。通过设计模式去优化代码,达到代码的复用性,减少耦合,也就是我们常说的。通过工厂模式可以把对象的创建和使用过程分割开来。比如说 Class A 想调用 Class B的方法,那么我们无需关心B是如何创建的,直接去工厂获取就行。
2024-08-10 07:41:33
1336
1
原创 Elasticsearch 的DSL查询,聚合查询与多维度数据统计
以上两个概念后是理解下面实验的基础,如果是传统关系数据库mysql、oracle等存储的数据,也可以搜索和聚合,但是在数据聚合分析一块,毕竟不是它们的强项,而且需要在程序中做大量的处理,耗时费力,尤其是大数据量的情况下就有些力不从心了。在一个aggs执行的bucket操作(terms),平级的json结构下,再加一个aggs,这个第二个aggs内部,同样取个名字,执行一个metric操作,avg,对之前的每个bucket中的数据的指定的field、price。
2024-08-04 07:56:44
1734
原创 ES的DSL查询,按照时间段分组统计之date_histogram
对于es保存的数据,需要根据其或时间戳格式的字段进行分组统计,计算每天或每小时的某字段统计值。
2024-08-04 07:47:17
677
原创 Elasticsearch的DSL查询,分组后排序,并查询组数量
Elasticsearch分组后,根据分组后的数量排序,并查询分组后的组数量,通过DSL和java API两种方式。
2024-08-04 07:44:12
729
原创 Elasticsearch 的 DSL查询
的 DSL(Domain Specific Language,领域特定语言)查询是一种使用 JSON 格式表达的查询语言,用于与 Elasticsearch 集群进行复杂的搜索交互。DSL 查询提供了丰富的查询类型、过滤条件、排序选项、分页控制、聚合功能等,使得用户能够精确地描述想要从索引中检索的数据,并获得结构化的搜索结果。虽然查询部分也可以实现过滤功能,但有时为了提高效率,尤其是对于不需要计算得分的过滤条件,可以使用独立的过滤器(Filter)。在这个示例中,查询要求文档的。升序排序,返回第一页(
2024-08-04 07:36:52
1065
原创 Elastic:IK分词器分词、停用词热更新如何配置-基于数据库
官方github中并没有说明这种方式,所以本身是不支持直连数据库实现热更新的,要实现需要通过修改源码来做到。相比较与API的形式,直连数据库的方式更加稳定,但是因为官方并没有明确支持这种方式所以也存在着不确定性,生产中采取哪种方式,还要根据实际业务的需求情况而定。
2024-08-04 07:32:36
1235
原创 Mybatis-Plus 之【动态表名】
MybatisPlus【动态表名(这里介绍按天分表)】前言一、方案一(动态传参)使用方法(Mapper自定义SQL)二、方案二(DynamicTableNameInnerInterceptor插件)使用方法(插件配置+ThreadLocal+辅助类)三、方案三(DynamicTableNameInnerInterceptor插件、省略辅助类)使用方法(插件配置+ThreadLocal)总结注意在某些情况下,需要将大量数据分散到多个数据表中,这样可以提高数据库的查询效率和数据处理能力。
2024-02-24 20:34:15
5731
原创 接口请求重试的8种方法
接口请求重试机制是保证系统稳定性和容错能力的重要手段之一。当接口请求发生失败或暂时性错误时,通过重试机制可以提高请求的成功率。本文将详细介绍接口请求重试机制的几种常见方法。// 可在此处自定义重试逻辑});Spring Retry 为接口请求重试提供了完善和易用的解决方案,可以灵活控制各种重试参数,适用于复杂系统的容错要求。使用自定义的重试工具类来实现接口请求的重试机制,提高代码的复用性和可维护性。提供重试方法,参数包括请求函数、重试策略等在重试方法内部执行循环请求。
2024-02-21 23:07:08
1430
转载 Springboot多种方法处理静态资源:设置并访问静态资源目录
综上所述,就是Springboot的静态资源目录添加方法啦。是不是和Nginx很像?虽然现在Nginx和对象存储都很方便,但是直接用Springboot进行静态资源的划分,也不为一种方法。
2024-02-03 09:09:47
2326
原创 springBoot静态资源文件夹以及文件夹之间的优先级
浏览器访问localhost:8080/a.html将访问static中的a.html。比如当static文件夹中和public文件夹中都存在a.html。
2024-02-03 08:52:53
602
原创 一次因线程池使用不当造成生产事故OOM
我们从看到unable to create new native thread开始,查看了监控,发现线程数量飙升。接着分析了线程堆栈日志,了解到线程池中的核心线程全部处于的状态。然后我们做了一个简单的小实验,通过JVisualVM工具观测到局部变量的线程池中的核心线程并没有被回收。于是推断出发生了线程泄露的情况,最后通过源码探究的方式,寻找到了解决方案,设置allowCoreThreadTimeOut或执行shutdown。
2024-01-08 22:32:30
1149
原创 SpringBoot中@PostConstruct注解作用
是Java自带的注解,在方法上加该注解会在项目启动的时候执行该方法,也可以理解为在spring容器初始化的时候执行该方法。从Java EE5规范开始,[Servlet]中增加了两个影响Servlet生命周期的注解,@PostConstruct和@PreDestroy,这两个注解被用来修饰一个非静态的void()方法。总结:类初始化调用顺序:(1)构造方法Constructor。
2023-12-24 17:36:05
637
原创 Springboot整合Jedis实现单机版或哨兵版可切换配置
前文写到借助redis实现Shiro实现session限制登录数量踢人下线,本文就写一下Jedis的配置,可切换单机版和集群哨兵版,方便开发测试。只需修改redis.sentinel.enable配置值就可以切换项目连接池。
2023-11-11 10:07:55
581
原创 手机号验证码登录
3.注册or登录,不同的场景,阿里云短信发送,文案不同;且注册时,判断用户是否已经注册,查看用户表是否存在,根据手机号码查询,且存下的手机号码也是。6.缓存验证码,过期时间为60s(过期后验证码输入依然可用),后续验证正确性时,先取缓存,再根据手机号查询表。5.落地,发送记录落表,后续验证正确性,状态包含未使用 已使用,输入正确及标记为已使用。需要手机号,获取验证码除了登录,还可能是注册的场景,不同的类型需要加以区分。1.验证码正确性,先取缓存验证码,再根据手机号查询验证码记录表。1.手机号验证码登录。
2023-11-11 09:49:49
1474
原创 将Bean注入Spring容器的五种方式
将bean放入Spring容器中有哪些方式?我们知道平时在开发中使用Spring的时候,都是将对象交由Spring去管理,那么将一个对象加入到Spring容器中,有哪些方式呢,下面我就来总结一下。
2023-11-04 22:29:59
657
原创 Spring Boot spring.factories的原理
即 Spring Boot starter将各个组件分别统一封装一个固定配置类中,如 redis 相关依赖类统一封装到 RedisAutoConfiguration 类中,数据库依赖类统一封装到 DataSourceAutoConfiguration 类等,然后将这些统一配置类配置到 spring.factories 文件中,Spring Boot在启动的时候(前提配置。Spring Boot 启动时先读取 spring.factories 的类列表,然后再一个个实例化,并放到 Spring 上下文中。
2023-11-04 22:23:28
850
原创 SpringBoot的Condition注解
又一次温习了SpringBoot是提供了快速开发Spring项目的作用而不是增强功能。本次写了好几个Demo,跟着视频教程,使用注解去实现Bean的注入,以及起步依赖之类的,最主要的还是第一次查看了SpringBoot启动类的注解,了解到里面自动配置的一些机制,第一次了解到可以将类作为参数传给一个注解。本次内容比较多,目前笔者没有完全吸收,不过笔者觉得这一次的学习能有助于SpringBoot的使用,至少在将来写项目的时候,可以配置好依赖。
2023-11-04 21:16:34
374
原创 elasticsearch索引按日期拆分
例如原索引为sc_all_system_log,现按天拆分索引sc_all_system_log20220902,sc_all_system_log20220903,sc_all_system_log20220904,并且定期清理五天前索引。这里我们指定的索引名称sc_all_system_log20220903,无此索引时会自动创建索引,创建索引时发现是以sc_all_system_log为前缀会默认使用上面的模板创建。搜索时,我们只需要指向别名(sc_all_system_log)搜索即可,如下图。
2023-11-04 09:08:45
1282
原创 对接第三方接口鉴权
实际上,攻防之间没有绝对的安全,我们能做的是尽量提高攻击者的成本。相对方案二,方案三的方法相对已经有很大提升了(同样参数不能无限制调用),但是仔细一想,还是有问题,攻击者截获请求以后,还是可以在一定时间窗口内通过重放攻击的方式发送请求。但是,对于对外的接口,我们就不得不重视这个问题,外部接口没有做鉴权的操作就直接发布到互联网无疑是。,发现我们已经实现了鉴权的效果,但是每个接口前面都有一大堆鉴权的逻辑,这代码太那啥了。是一样的,未授权系统截获后还是可以通过重放的方式,伪装成认证系统,调用这个接口。
2023-10-30 20:27:10
1440
原创 @RequestMapping 注解使用技巧
GetMapping、@PostMapping、@PutMapping、@DeleteMapping、@PatchMapping 都是HTTP方法特有的快捷方式@RequestMapping的变体,分别对应具体的HTTP请求方式的映射注解。使用 params 元素,你可以让多个处理方法处理到同一个URL 的请求, 而这些请求的参数是不一样的。如上述代码所示,到 /user/login 的请求会由 login() 方法来处理,而到 /user/register的请求会由 register() 来处理。
2023-09-23 15:00:37
566
原创 数据库保存之Java字符串的压缩与解压缩
当字符串太长,需要将字符串值存入数据库时,如果字段长度不够,则会出现插入失败;或者需要进行Http传输时,由于参数长度过长造成http传输失败等。
2023-09-12 08:29:24
3080
2
Spring AMQP反序列化漏洞(CVE-2023-34050)
2023-11-11
TA创建的收藏夹 TA关注的收藏夹
TA关注的人