- 博客(69)
- 收藏
- 关注
原创 10款优质开源项目(GPS、定位修改、IP定位、地图开发)
通过确定说话人的位置,ODAS可以更好地捕捉说话人的声音,并减少环境噪声和其他干扰因素的影响,从而提高语音识别的准确率。而且,它还有速度测试、ping测试、MTR测试,以及网站可用性检查等功能, 具有查询速度快、、内存占用低、支持多种部署方式等特点,简直就是网络检测的瑞士军刀!简单来说,ODAS可以帮助确定声音来源的位置,并对这些声音进行区分和追踪,这在许多场景中都非常有用,如语音识别、会议系统、智能家居、安全监控等。Air780EG,室内室外都能用,支持北斗+GPS双模卫星定位,卫星定位误差约5米;
2025-03-17 09:05:06
813
原创 常用的接口重试方案!
某个电商平台的订单退款接口突发异常,因为银行系统网络抖动,退款请求连续失败。原本技术团队只是想“好心重试几次”,结果开发小哥写的重试代码竟疯狂调用了银行的退款接口近百次!最终导致用户账户重复退款,平台损失过百万。老板在复盘会上质问:“接口重试这么基础的事,为什么还能捅出大篓子?大家哑口无言,因为所有人都以为只要加个for循环,再睡几秒就完事了……这篇文章跟大家一起聊聊重试的7种常用方案,希望对你会有所帮助。重试就像机房里的灭火器——永远不希望用到它,但必须保证关键时刻能救命。我们工作中选择哪种方案?
2025-03-11 08:56:55
328
原创 分库分表 带来了哪些问题?
分库分表是解决单库单表性能瓶颈的有效手段,但也会引入新的复杂性和技术挑战。这篇文章跟大家一起聊聊,分库分表后带来的7个问题,以及相关的解决方案,希望对你会有所帮助。分库分表本质上是“性能换复杂度”,它虽然能有效提升系统的性能和扩展性,但问题也随之而来。问题解决方案全局唯一 ID雪花算法、号段分配、Leaf跨库跨表查询中间件支持(如 ShardingSphere)或手动合并分布式事务分布式事务框架(Seata)、消息最终一致性分片键设计问题路由表或高效分片键数据迁移问题。
2025-01-17 10:06:50
824
原创 用 Spring AOP 优化数据库 IN 查询,效率提升巨大!
我们在项目中经常遇到IN查询,同时IN的参数太多甚至大几百上千,会导致PG性能下降严重进而接口反应太慢。因为用的地方多,每次都要写很麻烦,所以结合SpringAOP写了一个基于注解优化方案,只需要打上注解就可以提升性能了。加在需要拆分的参数上,只支持一个。这里的加可以是:合并运算,SUM,COUNT以及求TOPN(合并后再取TOPN)线程池,可能阻塞比较大,不要用公共的线程池最好自己定义一个。不适用的典型场景有分页以及不符合上面公式的场景。并行执行,然后将返回结果合并。标记需要拆分参数的注解。
2025-01-13 13:53:34
301
原创 Git代码规范
master 为主分支,也是用于部署生产环境的分支,需要确保master分支稳定性。对于工作量小的功能开发(工时小于1天),可以直接在devolop 分支进行开发,否则由 develop 分支检出 feature 分支进行开发,开发完后合并到develop 分支。develop 为开发环境分支,始终保持最新完成以及bug修复后的代码,用于前后端联调。一般开发的新功能时,feature分支都是基于develop分支创建的。线上出现紧急问题时,需要及时修复,以master分支为基线,创建hotfix分支。
2024-12-24 11:00:54
1366
原创 MyBatis中的 10 个宝藏技巧!
这个轻量级的持久层框架还有很多隐藏的“宝藏技巧”。如果你能掌握这些技巧,不但能让开发更高效,还能避免掉入一些常见的“坑”。今天就从浅入深,分享 10 个让人眼前一亮的 MyBatis 开发技巧,每一个都配上具体的场景和代码示例,务求通俗易懂,希望对你会有所帮助。有些小伙伴会遇到这样的问题:数据库表字段是下划线命名,但 Java 对象是驼峰命名。比如user_name对应userName。如果直接用默认的resultType,MyBatis 是无法自动映射的。这个时候,用resultMap就能完美解决。
2024-12-24 10:59:52
813
原创 MQ的10种经典使用方式
消息队列(MQ)是分布式系统中不可或缺的技术之一。对很多小伙伴来说,刚接触MQ时,可能觉得它只是个“传话工具”,但用着用着,你会发现它简直是系统的“润滑剂”。无论是解耦、削峰,还是异步任务处理,都离不开MQ的身影。下面我结合实际场景,从简单到复杂,逐一拆解MQ的10种经典使用方式,希望对你会有所帮助。消息队列不只是传递消息的工具,更是系统解耦、提升稳定性和扩展性的利器。在这10种经典场景中,每一种都能解决特定的业务痛点。
2024-12-17 08:33:29
714
原创 工作中常用的8种设计模式
设计模式在我们日常的软件开发中无处不在,它们帮助我们编写更易扩展、更具可读性的代码。今天结合我实际工作场景和源码实例,跟大家一起聊聊工作中最常用的8种设计模式,希望对你会有所帮助。这些设计模式不仅在日常开发中有着广泛应用,更在 JDK 和 Spring 中深度体现。了解它们的本质和应用场景,能够让我们写出更优雅、更健壮的代码。
2024-12-11 16:38:20
1114
原创 SkyWalking 和 ELK 链路追踪实战
SkyWalking和 ELK 各自在 APM 与日志管理领域发挥着重要作用,尽管原生 ELK 不直接支持链路追踪,但通过与 SkyWalking 的集成,可以互补优势,共同提升微服务架构下的可观测性。
2024-12-09 15:23:19
1050
原创 10个好用的在线工具
代码生成图片,这个不写博客的小伙伴可能不太常用,像我会时常分享一些技术类的文章,里边难免会贴出代码块,出于观看方便和样式美观就会转成图片。的所有功能,又在其基础上增加了很多实用功能,它几乎可以集成当下所有主流技术,只要勾选相应的模块就可以自动集成进来。里的数据,自动生成对应的统计图形,样式可以自由切换,生成PDF、JPG等格式。是一个自动生成代码的工具,JAVA代码自动生成,还有H5样式布局器。来生成,但用的时间长了发现,它也就仅仅只能帮我们引入一些必要的。这是一个非常强大的工具类站点,我个人常用得就是。
2024-12-05 14:50:11
853
原创 对接第三方接口,并处理异步通知,对接口进行签名验签
*** 是否启用验签功能,默认验签*/@Component//实现 HandlerMethodArgumentResolver 接口/*** 此方法用来判断本次请求的接口是否需要解析参数,* 如果需要返回 true,然后调用下面的 resolveArgument 方法,* 如果不需要返回 false*/@Override/*** 真正的解析方法,将请求中的参数值解析为某种对象* parameter 要解析的方法参数。
2024-11-28 15:25:33
313
原创 接口Controller设计
在实际工作中,我们需要经常跟第三方平台打交道,可能会对接第三方平台Controller接口,或者提供Controller接口给第三方平台调用。那么问题来了,如果设计一个优雅的Controller接口,能够满足:安全性、可重复调用、稳定性、好定位问题等多方面需求?今天跟大家一起聊聊设计Controller接口时,需要注意的一些地方,希望对你会有所帮助。
2024-11-12 11:15:59
402
原创 如何优雅处理异常?处理异常的原则
在我们日常工作中,经常会遇到一些异常,比如:NullPointerException、NumberFormatException、ClassCastException等等。那么问题来了,我们该如何处理异常,让代码变得更优雅呢?如果标准异常无法满足我们的业务需求,我们可以自定义异常。/*** 业务异常* @author 苏三* @date 2024/1/9 下午1:12*/@Data/*** 异常码*//*** 具体异常信息*/super();
2024-11-05 09:39:16
842
原创 优化分页查询接口:百万商品分页查询接口,如何保证接口的性能?
问题:百万商品分页查询接口,如何保证接口的性能?这就需要对该分页查询接口做优化了。这篇文章从9个方面跟大家一起聊聊分页查询接口优化的一些小技巧,希望对你会有所帮助。
2024-11-05 09:36:02
756
原创 使用 SpringEvent 解决 WebUploader 大文件上传解耦问题
关于Spring的Event机制,相信使用Java开发的朋友们一定非常熟悉。Spring Event是Spring框架内建的一种发布/订阅()模式的实现,它允许应用内部不同组件之间通过事件进行通信。当某个特定事件发生时,系统中对这类事件感兴趣的监听器可以接收到通知并执行相应操作。是不是看起来跟消息队列差不多,尤其是这种发布/订阅的模式,确实非常符合消息中间件的模式。通常来说,消息队列一般有以下几种作用。异步、解耦和削峰。
2024-11-05 09:31:58
829
原创 Redis 中 Bitmap 原理和应用
本文梳理了 bitmap 和 布隆过滤器的原理、用法以及它们各自的优缺点和应用场景,大环境不好更要多多提升自身技术能力,而且现在面试三句不离大数据量和高并发,此类问题想要应对自如,不仅要有深度还要有广度,掌握这两个知识点多提供一种答案也是好的。
2024-11-05 09:26:58
1419
原创 阿里 Sentinel
sentinel顾名思义:卫兵;在Redis中叫做哨兵,用于监控主从切换,但是在微服务中叫做流量防卫兵。Sentinel 以流量为切入点,从流量控制熔断降级系统负载保护等多个维度保护服务的稳定性。丰富的应用场景:Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应用等。完备的实时监控:Sentinel 同时提供实时的监控功能。
2024-11-05 09:21:18
1358
原创 数据库主从延迟处理方案
举例在一家餐饮工作中,当时的系统属于订单的下游业务系统。在中午和晚上的用餐高峰期,用户并发量还是不小的。订单系统为了保证性能和高可用,做了主从分离架构。一个主库,两个从库。主库主要用来写数据,从库主要是用来读数据,主库的数据会实时同步到从库。但偶尔会出现主从延迟问题。
2024-10-23 09:34:10
711
原创 Java Http 接口对接太繁琐?试试 UniHttp 框架吧
从企业级项目来说,如果你项目里还在用传统的编程式Http客户端比如HttpClient、Okhttp去直接对接第三方Http接口, 那么你项目一定充斥着大量的对接逻辑和代码,并且针对不同的对接渠道方需要每次封装一次调用的简化,一旦封装不好系统将会变得难以维护,难以阅读,甚至不同的开发同学会用自己的方式用不同的Http客户端用不同的封装逻辑去对接接口,这种情况一般发生于项目换了维护者,技术负责人也没把控代码质量和规范所导致。一个就是前面说的获取令牌的接口。一个是获取天气情况的接口。
2024-10-23 09:26:47
1164
原创 如何设计一个排行榜?
本文分析了实现排行榜5种方案的整体思路:数据库排序数据库 + Redis分布式系统NoSQL数据库最小堆 + Redis设计排行榜涉及多个方面,包括数据存储、排序算法、缓存、并发控制和性能优化等,不同的技术方案各有优缺点,因此,在实际开发中,需要根据具体的业务需求和数据规模来决定采用什么方案。
2024-09-30 08:47:49
1235
原创 常用微服务网关详解,底层设计逻辑介绍
API网关是一个服务器,是系统的唯一入口。从面向对象设计的角度看,它与外观模式类似。API网关封装了系统内部架构,为每个客户端提供一个定制的API。它可能还具有其它职责,如身份验证、监控、负载均衡、缓存、协议转换、限流熔断、静态响应处理。API网关方式的核心要点是,所有的客户端和消费端都通过统一的网关接入微服务,在网关层处理所有的非业务功能。通常,网关也是提供REST/HTTP的访问API。
2024-09-25 10:27:38
1188
原创 ELK 日志系统 性能优化
近一年内对公司的 ELK 日志系统做过性能优化,也对 SkyWalking 使用的 ES 存储进行过性能优化,在此做一些总结。本篇主要是讲 ES 在 ELK 架构中作为日志存储时的性能优化方案。
2024-09-07 16:27:47
1484
原创 Spring 事务的基础知识
剖析了事务的源码,分为 2 块:先匹配出 louzai 对象所有关于事务的切面列表,并将匹配成功的事务属性保存到缓存;从缓存取出事务属性,然后创建、启动事务,执行业务逻辑,最后提交或者回滚事务。这篇文章,是 Spring 源码解析的第 4 篇,如果之前已经看过 AOP 的源码解析,这篇就要容易很多,但是如果上来就直接肝,可能会有那么一丢丢难度。
2024-09-05 16:31:32
796
原创 Spring Boot 实现多租户架构
多租户架构是指在一个应用中支持多个租户(Tenant)同时访问,每个租户拥有独立的资源和数据,并且彼此之间完全隔离。通俗来说,多租户就是把一个应用按照客户的需求“分割”成多个独立的实例,每个实例互不干扰。
2024-09-05 16:28:06
1388
原创 详解 MQ 消息队列
谈起消息队列,内心还是会有些波澜。,缓存,分库分表是高并发解决方案三剑客,而消息队列是我最喜欢,也是思考最多的技术。我想按照下面的四个阶段分享我与消息队列的故事,同时也是对我技术成长经历的回顾。初识:ActiveMQ进阶:Redis&RabbitMQ升华:MetaQ钟情:RocketMQ。
2024-09-05 15:27:47
1475
原创 轻量级规则引擎
AviatorScript中使用fn// 输出:3println(s);// 输出:hello world我们这里通过fn关键字来定义了一个函数,函数名为add,它接受两个参数x和y,并返回它们的和。需要注意的是,AviatorScript是动态类型系统,不需要定义参数和返回值的类型,它会根据实际传入和返回的值进行自动类型转换。因此,我们可以使用字符串来调用add函数。函数的返回值可以通过return语句来指定,也可以省略不写。在函数体内,如果没有明确的return。
2024-08-23 10:31:53
641
原创 调用第三方API,可能会遇到的问题?
在实际工作中,我们经常需要在项目中调用第三方API接口,获取数据,或者上报数据,进行数据交换和通信。那么,调用第三方API接口会遇到哪些问题?如何解决这些问题呢?这篇文章就跟大家一起聊聊第三方API接口的话题,希望对你会有所帮助。
2024-08-23 10:22:18
1442
原创 SpringBoot 注解指南
基于 SpringBoot 平台开发的项目数不胜数,与常规的基于Spring开发的项目最大的不同之处,SpringBoot 里面提供了大量的注解用于快速开发,而且非常简单,基本可以做到开箱即用!那 SpringBoot 为开发者提供了多少注解呢?我们该如何使用?通常用于修饰controller层的组件,由控制器负责将用户发来的URL请求转发到对应的服务接口,通常还需要配合注解使用。提供路由信息,负责URL到Controller中具体函数的映射,当用于方法上时,可以指定请求协议,比如GETPOSTPUT。
2024-08-23 10:17:50
812
原创 Spring的核心启动流程
Spring启动时候整个入口是这么一个方法总共有12个方法,也就是启动时的核心步骤AbstractApplicationContext有众多实现,这里我选择SpringBoot Web应用默认的实现来讲AnnotationConfigServletWebServerApplicationContext类图对应的SpringBoot版本为 2.2.5.RELEASE高版本refresh方法会多一些日志相关的代码,这里为了方便讲解,就使用这个版本。
2024-08-20 13:41:05
877
1
原创 掌握Redis的8大隐患点
在分布式系统中,由于redis分布式锁相对于更简单和高效,成为了分布式锁的首先,被我们用到了很多实际业务场景当中。但不是说用了redis分布式锁,就可以高枕无忧了,如果没有用好或者用对,也会引来一些意想不到的问题。今天一起聊聊redis分布式锁的一些坑,给有需要的朋友一个参考。
2024-08-15 10:45:34
700
原创 OpenFeign核心原理
这一节主要是介绍了7个Feign的核心组件以及Spring对应的扩展实现为了方便你查看,我整理了如下表格接口作用Feign默认实现Spring实现Contract解析方法注解和参数,将Http请求参数和方法参数对应Encoder将请求体对应的方法参数序列化成字节数组Decoder将响应体的字节流反序列化成方法返回值类型对象Client发送Http请求InvocationHandler工厂,动态代理核心逻辑无在发送Http请求之前,再对Http请求的内容进行拦截修改无无。
2024-08-07 09:45:55
884
原创 设计API接口时,需要注意的一些地方
在实际工作中,我们需要经常跟第三方平台打交道,可能会对接第三方平台API接口,或者提供API接口给第三方平台调用。那么问题来了,如果设计一个优雅的API接口,能够满足:安全性、可重复调用、稳定性、好定位问题等多方面需求?今天跟大家一起聊聊设计API接口时,需要注意的一些地方,希望对你会有所帮助。
2024-07-29 16:31:34
499
原创 高并发下如何防重复?
最近测试给我提了一个bug,说我之前提供的一个批量复制商品的接口,产生了重复的商品数据。追查原因之后发现,这个事情没想象中简单,可以说一波多折。
2024-07-15 13:22:39
803
原创 明明加了唯一索引,为什么还是产生重复数据?
相同的记录第二次删除的时候,delete_status被设置成1,但由于创建了唯一索引(把name、model和delete_status三个字段同时做成唯一索引),数据库中已存在delete_status为1的记录,所以这次会操作失败。该方案的思路跟增加时间戳字段一致,即在添加数据时给delete_id设置默认值1,然后在逻辑删除时,给delete_id赋值成当前记录的主键id。如果新增数据的入口比较少,比如只有job,或者数据导入,可以单线程顺序执行,这样就能保证表中的数据不重复。
2024-07-15 13:20:20
1115
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人