自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(1240)
  • 收藏
  • 关注

原创 微信运动步数排名开启的方法

是不是得买个新手环啊?在微信运动页面中,找到“步数排行榜”或“加入排行榜”选项,点击开启。在“辅助功能”列表中找到“微信运动”,点击“启用该功能”。在微信运动“隐私及提醒设置”中,可关闭“加入排行榜”或设置“不与他(她)排行”,避免与特定好友比较步数。:进入手机设置 → “应用管理” → 找到微信 → 开启“身体传感器”或“运动数据”权限。打开微信,点击右下角“我” → 选择“设置” → 进入“通用” → 找到“辅助功能”。:进入手机系统设置 → “隐私” → “运动与健身” → 开启微信的权限。

2025-05-04 16:03:28 170

转载 万字详解 Stream 流式编程,写代码也可以很优雅

该方法会将流中的第一个元素作为初始值,然后将初始值与下一个元素传递给BinaryOperator函数进行计算,得到的结果再与下一个元素进行计算,以此类推,直到遍历完所有元素。例如,可以使用 filter() 方法进行元素的筛选,使用 map() 方法进行元素的转换,使用 reduce() 方法进行聚合操作等。而映射操作本身的优点在于,可以通过简单的函数变换实现对原始数据的转换,减少了繁琐的循环操作,提高了代码的可读性和维护性。如果需要对流中的元素进行某种计算和合并操作,得到一个结果,则使用reduce。

2025-04-30 07:38:44 36

转载 springboot分页查询并行优化实践

1、针对IO密集型,阻塞耗时w一般都是计算耗时几倍c,假设阻塞耗时=计算耗时的情况下,Nthreads=Ncpu*(1+1)=2Ncpu,所以这种情况下,建议考虑2倍的CPU核心数做为线程数。仔细推导两个公式,其实类似,在cpu使用率达100%时,其实结论是一致的,这时候计算线程数的公式就成了,Nthreads=Ncpu*100%*(1+w/c) =Ncpu*(1+w/c)。Nthreads=Ncpu*Ucpu*(1+w/c),其中 Ncpu=CPU核心数,Ucpu=cpu使用率,0~1;

2025-04-28 07:40:19 5

转载 通过apache tika从文档(pdf、doc、docx、txt)中 提取特征数据

本文介绍如何通过apache tika从文档(pdf、doc、docx、txt)中 提取特征数据,比如文档中有身份证、姓名等信息。【全部是经本人实际测试过的功能】1、需引入相关pom依赖。

2025-04-27 10:43:42 2

转载 Spring Boot Starter 的应用场景与自动配置

按照 SpringBoot 官方的定义,starer 的作用就是依赖聚合,因此直接在 starter 内部去进行代码实现是不符合规定的,starter 应该只起到依赖导入的作用,而具体的代码实现应该去交给其它服务/模块来实现。在引入依赖之后需要做繁琐的配置,并且这些配置是每个项目来说都是必要的,例如 web.xml 配置(Listener 配置、Filter 配置、Servlet 配置)、log4j 配置、数据库连接池配置等。在编写自动配置类的时候,我们应该要考虑向容器中注入什么组件,如何去配置它。

2025-04-26 21:02:03 48

转载 年少不知自增好,错把UUID当个宝!!!

UUID 是无序的,每次插入新数据时,新记录可能会插入到索引树的任意位置,导致索引树频繁调整。由于 UUID 是无序的,修改主键值时,新值可能会插入到索引树的不同位置,导致索引树频繁调整。:UUID 是无序的,插入新数据时,可能会导致索引树频繁分裂和重新平衡,影响性能。字符主键通常是无序的,插入新数据时,可能会导致索引树频繁分裂和重新平衡,影响性能。索引的大小直接影响查询性能,索引越大,查询时需要的磁盘 I/O 操作越多。:UUID 索引占用的空间大,导致索引扫描的范围更大,查询效率降低。

2025-04-24 10:59:46 65

转载 【进阶篇】使用 Stream 流对比两个集合的常用操作分享

文章到这里就结束了,关于 Stream 流 API 是日常开发中经常会遇到的,熟练运用可以提高我们的开发效率,让我们写出简洁易懂的代码,我们作为后端开发必须重视起来。理论上可以用 for 循环或者迭代器来做,效果与使用 .containsAll() 方法差不多,但是自己手写的话可能会比较复杂,数据量稍大些的话效率较低,一般不考虑采用,这里我就不演示了。上述的集合都是泛型为自定义引用类型的集合,下面分享一些简单集合,如整形、字符串类型集合的 Stream 流对比操作。

2025-04-24 10:59:46 24

转载 基于数据库驱动的自定义 TypeHandler 处理器

例如,开发者可以定义一个自定义的TypeHandler 来将数据库中的 JSON 字符串转换为 Java 中的对象,或者将 Java 对象转换为 JSON 字符串存储到数据库中。再次强调,TypeHandler 的核心功能是实现 Java 类型和 JDBC 类型之间的映射和转换,这个映射和转换规则是根据 Java 类型和 JDBC 类型的特性和语义来定义的。TypeHandler 实例会接收到 Java 对象中的属性值,并将其转换为 JDBC 能够识别的类型,这个转换过程是根据两者之间的映射关系来实现的;

2025-04-23 19:09:21 13

转载 Java 项目中对使用递归的理解分享

在 Java 中,递归是指在方法的定义中调用自身的过程,递归是基于方法调用栈的原理实现的:当一个方法被调用时,会在调用栈中创建一个对应的栈帧,包含方法的参数、局部变量和返回地址等信息。首先,这里给出一个简单的数据库评论表的 demo,id 是主键id 也是评论唯一 id,parent_id 是该条评论的父评论 id,status 为1表示审核通过的状态。递归后得到的id集合:[21,28,31,29,32],原因就是:迭代会从一棵树开始遍历到底,没有元素了再从头开始遍历,依次迭代,类似于深度优先遍历。

2025-04-23 09:05:37 17

转载 Redis+Caffeine 太强了!

随着不断的发展,这一架构也产生了改进,在一些场景下可能单纯使用Redis类的远程缓存已经不够了,还需要进一步配合本地缓存使用,例如Guava cache或Caffeine,从而再次提升程序的响应速度与服务性能。缓存的本质就是存储在内存中的KV数据结构,对应的就是jdk中线程安全的ConcurrentHashMap,但是要实现缓存,还需要考虑淘汰、最大限制、缓存过期时间淘汰等等功能;本地缓存基于本地环境的内存,访问速度非常快,对于一些变更频率低、实时性要求低的数据,可以放在本地缓存中,提升访问速度。

2025-04-23 09:05:37 13

转载 Tailwind CSS一些你需要记住的原子类

这也粗细也不是特别绕的原子化类名,但是因为在一开始字体大小颜色都是text-开头类名的时候,就容易混淆,这个特别留意一下即可,我基本也只会记font-bold/font-normal,对于其它的我是直接使用font-[500]这样来控制精细,顺便告诉你一个事,绝大部浏览器只能渲染出font-normal(font-[400])和font-bold(font-[700]),你正常按设计稿写即可,至于渲染成什么样那就交给浏览器了,优雅降级。自从接触了Tailwind CSS后,目前已经是我项目的标配了。

2025-04-23 09:05:37 13

转载 定时任务稳定性解决方案-healthchecks监控系统

目前crontab出现问题后无感知,发现问题不及时,几乎是靠业务部门或用户反馈的方式,研发部门再排查的方式,处理问题、发现问题相对滞后,由此可见需要进一步优化crontab的稳定性,降故障通知前置,在用户反馈之前接受故障处理故障.问题描述:目前上线是通过运维在salt服务器分发的方式,发布方式不透明,还存在手动修改的方式,不规范,曾出现过误操作导致全清空事件,定时任务服务器误操作后灾难恢复困难的问题。问题描述: 定时任务应当尽量的轻量化,最优方案是只做定时任务的触发,而后程序通过队列方式进行数据处理.

2025-04-22 15:20:09 19

原创 微信团队自助工具人工解封/申诉辅助验证步骤

打开浏览器,访问微信安全中心官网(https://help.wechat.com)或在微信登录界面点击“解封账号”。需详细描述封禁原因(如账号被盗、误判违规等),并补充证明材料(如警方报案记录、账户异常登录记录)。微信内搜索“腾讯客服”小程序→选择“微信账号安全”→“账号封禁问题”提交申诉。上传证明材料:身份证正反面照片、账户使用记录(如聊天截图、交易记录等)。:进入公众号,点击左下角“自助工具”→“解封/申诉辅助验证”。期间避免频繁登录被封账号。:微信官方不收取解封费用,警惕“付费解封”或陌生链接。

2025-04-22 15:20:09 777

转载 Java 实际开发中积累的几个小技巧(二)

Spring 中的自定义注解可以灵活地定制项目开发时需要的切面 AOP 操作,一般来说在接口处设置的自定义注解是使用的最多的。上述模式的优点是将数据处理和业务处理明确地分开,业务、数据与视图层的通信靠的是 Bean 注入的方式,并不是强依赖于类的继承和接口实现,对于外部来说很好地屏蔽了具体的实现逻辑。但是可能潜在的缺点也有:当业务简单的时候,facade 与 service 之间的边界会比较模糊,即 facade 层的存在可能是没有必要的。切面在注解声明方法的哪种顺序执行,即选择 5 种通知的哪一种。

2025-04-22 15:20:09 14

转载 工作6年,看到这样的代码,内心五味杂陈...

简化举例: A 和 B 方法都是独立的方法, A 在调用 B 的过程,B 结束时把上下文环境字段删除, A 在获取时得到 null。在这个只讲业务结果,不讲技术氛围的环境里,突然有一些伤感;queryProject 方法里面调用 findProjectWithOutEnv, 在两个方法中,都有填充处理 env 的代码。大致逻辑:在需要跳过环境条件判断的方法前后做硬编码处理,同环切面逻辑, 一加一删。大量魔法值,单行字符超500,方法长度拖几个屏幕也都睁一眼闭一只眼了,但整这一出,还是破防......

2025-04-22 10:41:17 14

转载 最近,Java的就业市场是真癫了。。

是指运行一段具有特定功能的代码块的行为,以增强其处理能力,实现更复杂的任务,使大模型能够集成外部工具和资源,提升交互性和实用性。AI大模型技术实战—— Transformer 架构的 核心原理、应用 Fine-tuning 技术,精准微调AI大模型,!制造、医疗、金融等各行业都在加速AI应用落地,未来企业更看重能用AI大模型技术重构业务流的技术人。老师们将大模型技术原理讲透的同时,还将丰富的商业化AI应用项目无偿分享,帮大家快速打通。课程开班58期,已为20000+学员服务,口碑爆棚,从!

2025-04-21 10:03:17 16

转载 聊一聊对 Mybatis Plus 的理解与应用

AutoGenerator 是 MyBatis-Plus 的代码生成器,通过 AutoGenerator 可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各个模块的代码,极大的提升了开发效率。注:若执行了逻辑删除,那么再次查询该条数据时,会在select语句中自动拼接deleted=0,即查询不到该条语句。悲观锁顾名思义十分悲观,它总是认为会出现问题,无论干什么都会去上锁,然后再去操作。按照复杂条件进行查询,本质上等价于使用复杂sql进行查询。

2025-04-21 09:22:41 17

原创 微信团队自助工具使用人工解封/申诉辅助验证过程

以上流程需结合微信最新版本操作,部分界面可能随版本更新调整,建议参考微信官方帮助文档或联系客服获取实时指引。:通过浏览器进入微信安全中心官网,选择“账号申诉”并填写被封账号的详细信息(微信号、身份证号、手机号等)。:若自助工具无法解决问题,可通过“微信客服”联系人工客服,提供补充材料加快处理。:需清晰说明封禁原因,如误操作或账号被盗,并提供相关证据(如被盗凭证截图)。操作成功后,系统提示“辅助验证成功”,被封账号将根据审核结果解封。:点击公众号左下角的“自助工具”,选择“解封/申诉辅助验证”。

2025-04-21 09:22:41 378

转载 详细探究 Spring 框架中的注解与反射

RequestBody在处理请求方法的参数列表中使用,它可以将请求主体中的参数绑定到一个对象中,请求主体参数是通过HttpMessageConverter传递的,根据请求主体中的参数名与对象的属性名进行匹配并绑定值。@ComponentScan注解用于配置Spring需要扫描的被组件注解注释的类所在的包。@Repository注解也是@Component注解的延伸,与@Component注解一样,被此注解标注的类会被Spring自动管理起来,@Repository注解用于标注DAO层的数据持久化类。

2025-04-21 09:22:41 11

转载 Spring动态定时任务之ScheduledTaskRegistrar

如果客户需要改动业务的执行时间,即动态地调整定时任务的执行时间,那么可以采用SpringBoot自带的ScheduledTaskRegistrar类作为解决方案来实现。本文会从问题出发,详细介绍ScheduledTaskRegistrar类是如何解决动态调整定时任务的思路,并给出关键的代码示例,帮助大家快速地上手学习。在实际项目中,很少会有傻瓜式地去指定某一时间就触发某个业务的场景,执行业务的时间不是一成不变的,而是动态地随着客户所指定的时间进行调整的。

2025-04-20 17:30:32 32

转载 日常工作中关于 JSON 转换的经验大全(Java)

这种结构的 JSON 数据规则是:一个无序的 "key" : "value" 集合,一个 JSON 对象以 { 左括号开始,以 } 右括号结束。JSON 是 JavaScript 数据类型中的一个子集,目前主流的浏览器都使用了通用的 JavaScript 引擎组件,所以在解析 JSON 格式时具有良好的兼容性。fastjson 可以将 JSON Parse 的性能提升到极致,是目前 Java 语言中最快的 JSON 库。值之间使用 , 逗号分隔。JSON相关表示 Json 对象、Json 字符串等。

2025-04-20 17:30:32 45

转载 干掉 ES ?Redis 官方搜索引擎来了,性能炸裂!

对于此基准测试,我们构建了 50K 个索引(或产品),每个索引最多存储 500 个文档(或项目),总共 2500 万个文档。术语的模糊匹配是通过在术语周围加“%”来实现的,模糊匹配的最大LD为3,之所以会出现这样的效果是因为redisearch对文本进行了分词,其使用的工具是friso相比es的ik还是弱一些前者主要是对中文分词,体积小可移植性强。如下图所示,RediSearch 构建索引的时间为 221 秒,而 Elasticsearch 为 349 秒,快了 58%。

2025-04-20 09:37:04 64

转载 【解决方案】Java 互联网项目如何防止集合堆内存溢出(一)

数据库设计:数据一般都来源于数据库,库/表设计的时候尽量将表与表之间解耦,表字段的颗粒度放细,即多表少字段,查询时只拿需要的字段;如果是部署在私有云服务器,需要对具体的 JVM 参数进行调优的话,可能还得请团队的资深大佬、或者运维团队的老师来帮忙处理。咨询大数据团队:寻求大数据部门团队的专业支持,对于处理海量数据他们是专业的,看能不能提供一些可参考的建议。加大服务器内存,合理分配服务器的堆内存,并设置好弹性伸缩规则,当触发告警时自动伸缩扩容,保证系统的可用性。或者你有其它想说的,也欢迎大家在评论区交流!

2025-04-20 09:37:04 38

转载 分享 Java 开发中常用到的设计模式(一)

facade 来源于法语单词,原意为”建筑物的正面“,使用 facade 模式,其中的 facade 角色可以让整个系统对外只有一个简单的API,并且还会考虑到系统内部各个类之间的依赖关系,同时按照正确的顺序调用各个类。通常我们在开发的时候,具体的行为会写在方法中,而策略模式却将算法与其它部分分离开,只是暴露了算法的API接口,然后在需要使用的地方以委托的方式来使用。传统版的建造者模式,在许多优秀的开源框架中有大量地应用,由于本人的水平、认识有限,在实际的项目中很少使用到这样的思想去创建对象并赋值。

2025-04-19 13:32:59 11

转载 【深度思考】一线开发大头兵对于工作的感悟分享

做过从 0-1 的 SaaS、PaaS 的自研项目,也做过基于多租户的标准化服务项目,还有过半年的 PM 的经历...这些都让我有了一些关于工作上的感悟。高级/资深可能就要精通某一或者某几方面的通用架构/解决方案了,同时对于负责的业务有深刻的认识,可能也要负责团队的建设,从更广阔的视角去思考问题。写在前面的是关于自己的一点介绍,本科毕业,学的是计算机科学与技术专业。而你的 TeamLeader 可能关注的是项目的高可用,处理高并发的性能,硬件资源的成本,服务挂了怎么降低对业务的影响等;

2025-04-18 17:42:01 33

转载 Java 实际开发中积累的几个小技巧(一)

像 .select()、.eq()、.gt()、.orderByDesc() 等都可以完成,非数据库语句查询的情况下,使用 Stream 操作集合还是有必要的。现在在这里分享出来,作为成长的记录和知识的更新,希望与大家共勉。本节的内容其实更像是一种规范,因为见过不少别的部门同事写的项目代码,接口的风格真是迥异(写什么的都有),当我接手重构的时候真是头皮发麻。map() 流元素的映射、collect() 收集流,这两个就不展开讲了,几乎可以说是 Stream 流用的最多的方法,到处都是例子。

2025-04-17 13:34:29 10

原创 我的订单查看全部订单

点一下“钱包”,就进入钱包页面了。你得再往下滑,看到有个“账单”选项,点一下它,就能看到你的微信账单了。在订单页面的右上角,有个搜索框,你输入关键词,比如商品名称、商家名字啥的,就能快速找到你想看的订单了。咱们要找的是“服务”,你点一下它,就能进入一个新的页面了。在“账单”页面里,你会看到上面有个“全部账单”的按钮,你点一下它,就能看到所有微信订单啦!这里面的订单可全乎了,不管是买东西的、点外卖的,还是充话费的,都能找到。在微信的界面上,右下角有个“我”的按钮,你点一下它,就能进入个人中心页面了。

2025-04-17 09:25:50 370

转载 通过一个DEMO理解MCP(模型上下文协议)的生命周期

通常可以是一段静态的提示词,或者从上下文中获取动态的提示词,也可以是通过一些外部API获取数据生成提示词,这并不是本文的重点,本文通过简单的静态提示词进行。MCP host的角色也就是我们需要嵌入AI的应用,可以是一个程序,可以是一个CRM系统,可以是一个OA,MCP Host包含MCP Client,用于集成LLM与Tool,MCP Host之外+Tool+大模型,共同构成了一套基于AI的系统,现在流行的说法是AI Agent(中文翻译:AI智能体?例如,模型产出:“上海的天气是多云,温度为27°C。

2025-04-17 09:25:50 28

转载 一套万能的异步处理方案(典藏版)

良好的系统设计必须要做到开闭原则,随着业务的不断迭代更新,核心代码也会被不断改动,出错的概率也会大大增加。但是大部分增加的功能都是在扩展原有的功能,既要保证性能又要保证质量,我们往往都会使用异步线程池来处理,然而却增加了很多不确定性因素。就算事务提交了,异步策略解析失败了,我们还有兜底方案执行(除非数据库有问题,消息队列有问题,方法有bug)无侵入设计,独立数据库,独立定时任务,独立消息队列,独立人工执行界面(统一登录认证)如果你的方法正在运行事务,会等事务提交后或回滚后再处理事件。3、自己业务要做幂等。

2025-04-16 17:23:13 21

转载 让 AI 对接 MySQL 数据库实现快速问答对话

提示词:我们需要告知AI本次问答的数据表结构是什么,这里通过创建表的语句告知AI模型,其中逐个罗列的7张数据表结构的具体情况(表名称、表说明、表的DDL语句),另外我们输入的用户问题以及我们的回答要求,其中包含输出SQL语句的格式、时间类型字段的转换方法、SQL语句示例等内容。通过 AI 连接 MySQL 结构化数据库表,预期实现通过AI对话数据库表,快速了解数据情况,能够进行简单的汇总统计,快是实现问答。1)定义语义转SQL的AI 节点,其中选择模型阿里云百炼的模型(即步骤三对接的模型)。

2025-04-16 17:23:13 49

转载 Java面试速成版,背这份八股文(含答案)就对了!

(例如:Spring面试题合集、Spring Boot如何定义Starter、Spring Boot的启动原理、自动配置原理?(例如:12306抢票系统设计、如何设计一个秒杀系统、高并发系统、微博系统以及百万级数据导出Excel怎么性能优化,避免OOM)(含:OAuth2有哪几种授权模式、说说Seata的执行流程、说说你对DDD的理解、微服务设计的9种设计模式等)(例如:JDK8提升代码优雅技巧、BIO、NIO、AIO有什么区别、什么事守护线程?,秒杀场景、CPU飙高场景、内存溢出场景、短链场景……

2025-04-14 10:03:38 53

转载 如何搭建漂亮的 SpringBoot 脚手架?

事情是这样的:我们生产环境用的kafka-server是0.11版本的,但我们的客户端用的是3.0.4版本,我的springboot用的是2.7.x版本,从上边表中看到springboot的版本和kafka-client的版本是适配的,但kafka-client的版本和server的版本是不适配的。我们项目常常依赖中间件,比如mysql,kafka,redis等,如果要单元测试,我们通常的做法是在dev环境部署一套项目中依赖的中间件,非常麻烦,而且数据还不容易隔离,所以内存版的中间件就是来解决这个问题的。

2025-04-14 10:03:38 71

转载 2025年Java面试风向变了……

Java基础、并发编程,JVM、Mysql、Spring、Mybatis、Redis、MQ、Zookeeper、Netty、Dubbo、Spring Boot、Spring Cloud、数据结构与算法、设计模式、网络与操作系统、三高架构、线上疑难问题、大厂面试场景题、项目亮点和难点、K8S云原生。,这些光靠死记硬背是解决不了的,是需要足够的技术和实战去支撑的,尤其是掌握企业实际需要的技术栈。帮你积累有亮点的项目经验,解决你所有的面试跳槽困惑,助你在万千面试者中杀出重围!底层原理与面试核心点,再通过一个。

2025-04-13 12:03:52 26

转载 团队准备解散了。

管子插在嘴里,她无法开口,可是她很清楚,这是救命的管子,哪能拔掉?关注Java团长的读者应该很多都是家里的经济支柱,我相信,动辄几十、上百万的治疗费并非所有人都能轻易掏的起的,就算掏得起,那又得花多少年来追回这笔损失?他们专业的保险服务顾问,会结合专业的智能规划系统,1对1的分析我们的实际需求,生成专属的保险方案,以及相对应的储蓄和理财规划方案,并给我们详细讲解。我们都是上有老、下有小的普通人,我们都有自己的家庭要养,在现实面前,没法和年轻一样把情谊看的比什么都重要,这是正常的,也是合理的。

2025-04-11 12:04:05 29

转载 电商平台中订单未支付过期如何实现自动关单?

也就是说,由于redis 的key 过期策略原因,当一个key 过期时,redis 从未保证会在设定的过期时间立即删除并发送过期通知,自然我们的监听事件也无法第一时间消费到这个key,所以会存在一定的延迟。在订单创建之后,我们就可以把订单作为一条消息投递到rocketmq,并将延迟时间设置为30 分钟,这样,30 分钟后我们定义的consumer 就可以消费到这条消息,然后检查用户是否支付了这个订单。另外,在redis5.0 之前,订阅发布中的消息并没有被持久化,自然也没有所谓的确认机制。

2025-04-10 22:41:07 19

转载 你还在使用WebSocket实现实时消息推送吗?

而且SSE使用的是http协议(websocket使用的是ws协议),也就是现有的服务端都支持SSE,无需像websocket一样需要服务端提供额外的支持。在日常的开发中,我们经常能碰见服务端需要主动推送给客户端数据的业务场景,比如数据大屏的实时数据,比如消息中心的未读消息,比如聊天功能等等。SSE的优点是,它是一个轻量级的协议,相对于websockte来说,他的复杂度就没有那么高,相对于客户端的消耗也比较少。websocket是一个双向通讯的协议,他的优点是,可以同时支持客户端和服务端彼此相互进行通讯。

2025-04-09 16:08:08 19

转载 在 SpringBoot 项目中如何动态切换数据源、数据库?

此时你在代码层面用注解指定了一个增删改方法到从数据源,但是碰巧此时从数据源失效了,那么就会自动的切换到其它服务器。动态切换数据源可以在不同的操作中使用不同的数据库,以达到优化性能的目的。在复杂的业务场景下,可能需要根据不同的业务逻辑来选择不同的数据源。项目中使用AOP和自定义注解实现MySQL主从数据库的动态切换,当从库故障时,能自动切换到主库,确保服务的高可用性。当主数据库不可用时,动态切换数据源可以自动或手动切换到备用数据库,以保证服务的连续性和数据的可用性。添加数据源和用法参考上面即可,都是一样的。

2025-04-09 16:08:08 69

转载 开发中对象命名的一点思考

同理,在软件中,一个设计得足够“智能”的对象,也应该能在外部条件或业务需求变化时,自行调整内部逻辑,而不影响调用者的使用方式。:当 AI 工具在大规模代码库中搜索或补全时,见到“RestaurantService”可能以为这里面能找到任何与餐厅运营相关的逻辑,补全时也可能把更多不相干的功能(例如“采购食材”、“营销活动”等)一股脑塞进来,很容易导致上帝类。当我们把命名改为更能传达专业身份或业务角色的名词时,往往会看到对象的“自我意识”和“主观能动性”随之提升,从而让整个系统的抽象层次更高、可维护性更好。

2025-04-07 20:40:52 18

转载 谁再在 SQL 中写 in 和 not in,直接走人!

如果id2只有1和2, 那么3<>1 且 3<>2 所以3输出了,但是 id2包含空值,那么 3也不等于NULL 所以它不会输出。单独查询 select id1 from test2 是一定会报错: 消息 207,级别 16,状态 1,第 11 行 列名 'id1' 无效。并没有,一位大神曾经说过,如果是确定且有限的集合时,可以使用。如 IN (0,1,2)十几分钟,检查了一下 phone在两个表都建了索引,字段类型也是一样的。我想要查询,在test2中不存在的 test1中的id。

2025-04-07 20:40:52 41

转载 后端思维之高并发处理方案(纯干货)

举个例子,可能我们的问题其实就是一个慢查询导致的数据库负载过高,从而影响了应用的工作线程数阻塞,最后影响到了应用服务器的CPU过载从而导致接口无法响应,这种情况下我们贸然的去堆硬件、加缓存而不去优化语句,这无疑是饮鸩止渴,还会额外增加成本(硬件、维护)。非常遗憾的是,我们用Like做搜索作为技术债务保留了下来,也是这次事故的凶手,为解决这一问题,我们引入了 ElasticSearch,通过定时任务定期同步搜索库数据至 ElasticSearch,并调整接口逻辑指向 ElasticSearch。

2025-04-04 20:36:09 52

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除