自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 统计慢的一些优化手段

摘要:本文系统分析了Java+MongoDB统计系统中"字段多导致查询慢"的根源,包括全文档扫描、复杂聚合管道、索引不当等问题。提出分层优化方案:1)立即见效的查询层优化(字段投影、管道顺序调整);2)中期数据模型优化(字段分离、分桶模式);3)索引策略优化;4)终极架构方案(分片集群、专用分析数仓)。建议从简单查询优化入手,逐步推进到架构升级,最终实现OLTP与OLAP分离。通过组合策略可显著提升统计性能。

2025-12-02 11:19:30 843 1

原创 MySQL删除数据后表空间处理

DELETE操作后,MySQL表空间不会立即释放给操作系统,而是被标记为"可复用"。InnoDB引擎仅标记删除行而非物理清除,以提升性能。要真正释放空间,需使用OPTIMIZE TABLE、ALTER TABLE重建或TRUNCATE TABLE(会清空整个表)。建议定期优化碎片化严重的表,在业务低峰期进行。TRUNCATE效率最高但不可回滚,DELETE可回滚但保留空间,OPTIMIZE能整理碎片但会锁表。可通过SHOW TABLE STATUS查看碎片情况。

2025-10-06 15:50:48 622 1

原创 MySQL查看数据表锁定情况

MySQL锁表问题排查方法:通过SHOW OPEN TABLES查看被锁表,SHOW PROCESSLIST分析线程状态,information_schema中的INNODB_TRX/INNODB_LOCKS/INNODB_LOCK_WAITS表查询锁详情。发现问题线程后可用KILL命令终止,并建议优化SQL、缩短事务周期来预防。重点关注Table_locks_waited值,若较高说明存在锁竞争。

2025-10-05 13:55:59 1100 1

原创 for循环处理数据,相同的查询条件为什么只处理了一半的数据呢?

摘要: 开发人员在清理冗余数据时,采用分页删除策略(每页1000条)。初始方案按页序处理时,由于删除操作影响后续查询结果,导致仅删除一半数据。发现问题后,改为倒序处理分页(从最大页开始),确保查询准确性。该问题凸显了数据删除与查询的时序依赖性,通过逆向分页巧妙规避了内存溢出风险,最终完成数据瘦身目标。(149字) 关键点: 问题根源:顺序删除导致后续查询结果失真 解决方案:倒序分页处理保证数据一致性 技术细节:SpringBoot+JPA分页机制的实际应用与陷阱 经验总结:大数据量操作需考虑操作对查询的实时

2025-10-04 11:32:17 136 2

原创 队列消费者扩展策略

本文分析了两种增加消息队列消费者的方式:单个Java实例内增加消费者线程(纵向扩展)和通过增加Java实例数量(横向扩展)。纵向扩展简单但受单机资源限制,横向扩展更具弹性且适合高并发场景。建议生产环境优先采用横向扩展,配合无状态应用设计,以实现高可用和高吞吐。两种方式非互斥,可根据实际需求选择或组合使用。

2025-09-24 19:10:02 908 1

原创 搜索建议和自动补全的使用场景

本文总结了搜索建议和自动补全功能在各领域的应用场景。在电商、搜索引擎、社交媒体、企业系统等10类平台中,该功能通过预测用户意图、减少输入错误来提升体验。关键技术考量包括响应速度、排序算法、模糊匹配等。这些智能化功能不仅能优化用户体验,还能提高平台转化率,是各类应用的重要交互组件。

2025-09-20 14:28:51 652 1

原创 java做高级搜索

本文介绍了三种Java实现高级搜索的方法:1)使用Stream API进行动态过滤,支持多条件搜索;2)基于Apache Lucene实现全文检索,包括索引创建和查询处理;3)结合JPA与Elasticsearch构建搜索系统,涵盖依赖配置和实体映射。示例代码展示了各种场景下的搜索实现,从简单内存过滤到复杂全文检索,适用于不同规模的数据搜索需求。

2025-09-20 11:11:15 588 1

原创 微服务分布式事务解决方案梳理

本文探讨了微服务架构下分布式事务的必要性及解决方案。在微服务中,业务操作跨多个独立数据库,无法使用本地事务,需引入分布式事务保证一致性。理论基础包括CAP定理(一致性、可用性、分区容错性不可兼得)和BASE理论(基本可用、软状态、最终一致性)。解决方案分为强一致性(如2PC、3PC)和最终一致性(如TCC、Saga、消息队列)两类。最终一致性方案更适合互联网场景,通过异步和补偿机制平衡性能与一致性。建议优先选择最终一致性,设计幂等接口,必要时才用强一致性方案。

2025-09-16 15:51:21 1038 1

原创 BlockingQueue实际应用示例

摘要:本文展示了一个基于BlockingQueue的生产者-消费者模式实现,包含任务发送方(生产者)和任务处理方(消费者)。生产者使用put()方法添加任务,当队列满时自动阻塞;消费者通过take()获取任务,队列空时阻塞等待。系统采用有界队列控制资源使用,并通过带监控的线程池管理任务执行。实现中特别处理了任务结束标志,确保所有消费者都能正确终止,同时通过独立监控线程定期报告队列状态。该方案完整展示了多线程环境下任务队列的生产级应用模式。

2025-09-12 09:06:11 228 1

原创 BlockingQueue 方法使用指南

摘要:BlockingQueue是Java并发编程中的线程安全队列接口,支持阻塞的插入和移除操作。示例程序展示了其主要方法(add/offer/put/poll/take等)的使用场景,包括生产者-消费者模式。当队列满时,put()会阻塞,而offer()可设置超时;当队列空时,take()会阻塞,poll()可设置超时。这些特性简化了线程间的协调工作,特别适合需要高效处理并发任务的场景。

2025-09-10 17:47:58 353 1

原创 程序接口传参加密的重要性

程序对外接口加密参数传输至关重要,主要体现为:防止敏感信息泄露(用户凭证、财务数据等)、抵御中间人攻击和参数篡改、满足合规性要求(如GDPR)、保护API密钥、维护系统声誉及防止业务逻辑绕过。安全传输需强制使用HTTPS,结合应用层加密和签名机制,避免敏感信息出现在URL中。接口加密是保障数据安全、隐私和业务可靠性的基石,忽视将导致严重风险。

2025-07-28 12:00:54 655 1

原创 企业验证码防护策略与技术方案

摘要: 企业验证码接口需多维度防御恶意攻击。基础策略包括频率限制(IP/手机号限流)、图形验证前置(交互式验证码);高级加固采用设备指纹、行为分析、Token签名及黑名单系统;流程优化侧重分步验证和6位混合验证码设计;应急响应需实时监控与攻击溯源。建议中小企业优先基础防护,高安全场景叠加高级措施,并定期攻防测试,核心目标是通过纵深防护提高攻击成本。持续攻击时可接入专业风控服务。(150字)

2025-07-24 18:57:00 1093 1

原创 Spring Cloud请求流程详解

Spring Cloud微服务架构中,前端到后端的请求流程为:前端发起请求至API网关,网关进行路由转发(如/orders到订单服务)和认证过滤;通过服务注册中心(如Eureka)获取目标实例,负载均衡后调用微服务(如Feign跨服务调用);服务间调用同样经历服务发现和熔断处理(Hystrix),最终访问数据库/缓存后数据原路返回。关键组件包括网关(路由/安全)、注册中心(服务发现)、Feign(服务调用)和Hystrix(熔断)。典型案例如用户下单涉及多服务协作,并通过分布式事务等机制保障一致性。该架构实

2025-07-05 09:02:20 810 1

原创 Spring Cloud网关与CI文件配置请求安全性对比

通过Spring Cloud网关请求后端接口提供集中式安全管控(统一认证、WAF、限流等),适用于生产流量,是更安全的选择;而通过CI文件直接访问(通常用于自动化流程)需严格限制在内网,并配合强认证和网络隔离。核心区别在于:网关集中防护外部威胁,缩小攻击面;直接访问需分散配置安全措施,管理复杂且风险更高。建议生产流量必须经网关,CI直接访问仅作为特例在内网严格管控下使用。

2025-07-04 16:39:00 824 1

原创 Spring Cloud 前端调用后端接口方式

摘要: 在Spring Cloud微服务架构中,前端调用后端主要有两种方式: 直接调用后端服务(适用于开发环境),需解决跨域和地址管理问题,但生产环境不推荐; 通过API网关调用(主流方案),网关集成Eureka实现服务发现、动态路由、负载均衡等功能,提供统一入口和安全控制。此外,后端服务间调用可通过RestTemplate+Ribbon或OpenFeign实现。关键结论:生产环境应采用前端→网关→后端服务的架构,避免前端直连微服务,确保安全性和可维护性。(150字)

2025-07-04 15:06:02 757 1

原创 Spring Cloud使用Eureka调用接口,超时设置(三)

摘要:Eureka和Feign中的connectTimeout控制TCP连接建立时间(推荐1-5秒),readTimeout管理响应读取时间(推荐5-30秒)。前者针对网络连接问题,后者关注服务端处理延迟。配置时可全局或按服务设置,Spring Cloud新版直接使用feign.client.config,旧版需配置Ribbon参数。生产环境应结合SLA和熔断机制(如Hystrix)合理设置,2020+版本与旧版配置方式不同,需注意版本差异。这两个参数协同工作能有效提升系统稳定性。

2025-06-17 13:55:41 437 1

原创 Spring Cloud使用Eureka调用接口,超时设置(二)

在Spring Cloud微服务中,Feign的超时配置优先级高于Ribbon。若Feign显式配置超时时间(如feign.client.config),则覆盖Ribbon的同名配置;否则默认使用Ribbon设置(默认1s)。底层通过LoadBalancerFeignClient判断,若Feign配置非默认值则生效,否则回退Ribbon配置。同时需注意:集成Hystrix时,其超时需大于Feign/Ribbon值(建议30s);Ribbon重试会叠加耗时,需调整Hystrix超时以避免熔断过早触发;

2025-06-17 11:55:33 545 1

原创 Spring Cloud使用Eureka调用接口,超时设置(一)

Java服务调用中可通过两种方式设置Eureka接口独立超时:1)Feign客户端方案:使用@FeignClient自定义配置类,或在yml中按方法设置connectTimeout/readTimeout;2)RestTemplate方案:在yml中按服务配置ribbon超时参数,或通过代码动态设置IClientConfig。两种方式均支持方法级>服务级>全局的优先级配置,需注意区分连接超时(TCP建立)和读取超时(响应等待),默认值分别为1秒和5秒。建议配合Hystrix熔断机制使用,并通过模拟延迟接口验

2025-06-17 11:22:02 507 1

原创 mysql数据库表增加索引

MySQL 5.6+版本为60万数据表添加二级索引时,使用Online DDL(ALGORITHM=INPLACE, LOCK=NONE)通常不会锁表阻塞DML操作。主要耗时因素包括磁盘类型(SSD约10秒-2分钟,HDD更慢)、服务器负载和字段大小。操作仅在准备和提交阶段需要短暂元数据锁,但若存在长事务会引发阻塞风险。最佳实践包括:明确指定无锁模式、避开业务高峰、提前终止长事务。实例显示,在SSD环境下为三个字段添加联合索引仅需5秒,服务可正常运行。

2025-06-07 11:17:36 1078 1

原创 数据库链式查询注意事项总结

使用数据库表数据作为查询条件时,需注意数据一致性(事务隔离、子查询)、性能优化(避免循环查询、索引匹配)、异常处理(空结果判断、防SQL注入)及替代方案(JOIN、临时表、CTE)。关键措施包括高并发时启用事务、用批量查询代替循环、确保字段索引及类型匹配,并根据场景选择子查询、JOIN或CTE。合理实施可提升查询效率与安全性,避免N+1问题及数据不一致风险。

2025-06-05 11:23:25 388 1

原创 RESTful接口学习与使用指南

版本控制:URI(/api/v1/users)或请求头(Accept: application/vnd.myapi.v1+json)。q=term)或结合GraphQL。资源(Resource):每个实体(如用户、订单)是一个资源,通过URI唯一标识。自动化测试:使用框架(如Python的requests+pytest)。层级关系:嵌套资源使用路径,如 /users/123/orders。清晰且名词化:使用复数名词表示资源集合,如 /users。授权:结合角色(如admin、user)控制资源访问权限。

2025-05-01 08:34:30 891 1

原创 Java递归方法详解与示例

5 → 5×factorial(4) → 4×factorial(3) → …→ 1(逐层返回计算结果)。递归是Java编程中一种重要的方法调用技术,允许函数调用自身来解决问题。递归的精髓在于将复杂问题分解为简单重复的步骤,合理设计基线条件和递归逻辑是成功的关键。缺点:栈溢出风险(深递归)、重复计算(如斐波那契)、调试复杂。注意:此方法效率低(重复计算),建议用迭代或记忆化优化。将问题分解为更小的子问题,逐步接近基线条件。递归终止的条件,防止无限调用导致栈溢出。递归条件(Recursive Case)

2025-04-17 16:22:28 487 1

原创 Spring Boot集成JPA步骤详解

通过以上步骤,即可在Spring Boot中成功集成JPA,实现数据持久化操作。表不存在或字段映射错误:确认ddl-auto设置正确,实体类注解配置无误。事务问题:在Service方法上添加@Transactional注解。数据库连接失败:检查URL、用户名、密码及数据库服务状态。.yml文件增加配置。

2025-04-09 15:40:18 382 1

原创 Redis(三)springboot、分布式锁实现与注意事项

Redis 分布式锁需结合原子操作、唯一标识、锁续期及集群容错设计,优先选择成熟库(如 Redisson)以规避复杂边界问题。RedLock 算法:在多个独立 Redis 实例中获取锁,半数以上成功视为有效,需权衡实现复杂度与安 全性。同一客户端多次获取锁时,需维护计数器(如 Redisson 的 hincrby),释放时递减至零。使用成熟库:如 Redisson,内置看门狗、可重入锁、联锁等,减少自实现风险。后台线程定期(如每 10 秒)续期锁,避免业务未完成锁已过期。

2025-04-02 09:22:36 280 1

原创 Redis(二)springboot整合

通过以上步骤,即可在Spring Boot中高效集成Redis,实现数据缓存和高速访问。连接池配置:使用Lettuce连接池提升性能,需配置commons-pool2。JSON序列化:使用Jackson处理对象,避免Java原生序列化的兼容性问题。TTL设置:通过entryTtl配置全局缓存过期时间,防止数据长期滞留。@Cacheable:优先从缓存读取,无数据时执行方法并缓存结果。在此之前按照官方教程已经在服务器上安装部署好redis服务!@CacheEvict:数据变更时清除缓存,保持一致性。

2025-04-01 17:23:34 391 1

原创 Redis(一)简介及核心特性概述

Redis(Remote Dictionary Server)是一个开源的、高性能的 内存键值数据库(In-Memory Key-Value Store),广泛用于缓存、实时数据处理、消息队列等场景。它以极快的读写速度、灵活的数据结构和丰富的功能著称,是当前最流行的 NoSQL 数据库之一。结合持久化与集群能力,它既能作为临时缓存,也可作为核心数据存储,是开发者构建高效系统的强力工具。Redis 数据主要存储在内存中,因此读写性能极高(可达每秒数十万次操作),适合对延迟敏感的应用。

2025-04-01 16:45:03 393 1

原创 Elasticsearch(四)kibana页面操作

复杂查询还有很多,小伙伴们需要的去官网详细学习吧。二、 在这里可以手动创建索引、文档、数据。使用的电脑已经安装了kibana!一、将kibana启动并连接到ES服务。

2025-03-27 18:01:01 654 1

原创 Elasticsearch(三)springboot整合

可通过@Document(createIndex = false)禁用。通过以上步骤,即可在Spring Boot中实现Elasticsearch的基本操作,包括CRUD和自定义查询。安全配置:Elasticsearch 8.x默认启用安全功能,需在配置中提供用户名和密码。字段类型不匹配:确保实体类字段的@Field类型与Elasticsearch映射一致。版本兼容性:确保Spring Boot版本与Elasticsearch兼容。连接失败:检查Elasticsearch是否运行,日志中是否有连接错误。

2025-03-27 15:55:57 637 1

原创 Elasticsearch(二)安装部署

一、环境准备Java 环境Elasticsearch 依赖 Java,建议安装 JDK 17 或更高版本(Elasticsearch 7.x+ 要求 JDK 11+)。

2025-03-27 15:26:16 1438 1

原创 Elasticsearch(一) 简介

它由 Elastic 公司于 2010 年发布,是 ELK Stack(Elasticsearch、Logstash、Kibana)的核心组件,广泛应用于日志管理、全文检索、数据分析等领域。灵活的数据模型:以 JSON 文档存储数据,支持动态字段映射(Schema-less),无需预定义结构。分片(Shard)与副本(Replica):索引被划分为分片以提升性能,副本分片保障数据冗余和可用性。节点(Node)与集群(Cluster):节点是单个服务器实例,多个节点组成集群实现分布式处理。

2025-03-27 13:56:45 493 1

原创 java 事务注解的运用浅谈

在同一个类中调用被@Transactional注解的方法时,如果使用了错误的传播行为(如默认的REQUIRED),可能会导致无限循环回滚或未预期的事务行为。事务传播行为:你可以通过propagation属性来定义事务的传播行为,例如Propagation.REQUIRED表示当前存在事务则加入该事务,不存在则新建事务。在测试环境中,确保测试方法也被事务管理覆盖。如果你使用的是原生的JDBC,并且希望通过Spring管理事务,你可以在配置类中配置数据源事务管理器,并使用@Transactional注解。

2025-03-17 10:14:55 854 1

原创 【任务调度中心—xxl-job】

任务调度中心可以应用于各种场景,包括批量任务的调度、定时任务的执行、异步任务的处理等。它可以提高任务的执行效率和质量,减少人工干预的工作量,同时也可以提供灵活的任务调度和管理功能,满足不同需求的任务调度需求。4.监控和报警:可以实时监控任务的执行情况和结果,如果任务执行失败或超时,系统可以发送报警通知。5.统计和分析:可以对任务执行情况进行统计和分析,包括任务执行数量、执行时间和成功率等指标。1.任务管理:可以创建、编辑和删除任务,并设置任务的优先级、执行时间和执行者等属性。

2024-08-19 14:52:46 1714 1

原创 eureka学习、使用记录

目标:1、配置pom文件:在默认依赖的基础之上增加下面依赖;2、配置yml文件;3、启动类加注解这样eureka 服务项目就创建好了,启动项目,ok.1、配置pom文件:在默认依赖的基础之上增加下面依赖;2、配置yml文件;3、启动类加注解4、创建测试接口5、这样eureka 被调用项目就创建好了,启动项目,ok.6、访问一下页面看看注册效果1、配置pom文件:在默认依赖的基础之上增加下面依赖;2、配置yml文件;3、启动类加注解4、创建调用类、调用方法5、创建测试接口6、po

2022-12-05 12:00:40 274 2

原创 Charles 记录学习使用

一、官网下载地址Charles下载:选择自己需要的版本,这里下载的window64;二、安装、配置1、安装2、配置双击打开双击运行证书安装:完成、确定到底。添加SSL代理:重启一下三、调试1、打开本地软件、或百度;为了直观这里我截图的是检测到的本地软件的请求——还是上图。先来个GET请求,为了直观的观看数据我选的JSON text.再来一个POST请求,参数和返回数据同样选择JSON格式;四、测试的时候遇到了乱码、说一下解决方法,是网上查询得来的乱码显示修改

2022-07-10 16:28:57 920

原创 探索业务解耦

学习使用spring Event 心得前言:近期一直在尝试将业务代码解耦;尝试过mq、考虑过redis,都不能满足目前的场景;最后通过请教同事得知还有这样一种方式(spring Event)可以解耦业务代码;基本实现方式:要使用Event只要准备三个部分:事件类:定义事件,创建一个普通的实体类(构造方法、getter、setter)。发布者:发布事件,通过ApplicationEventPublisher发布事件。监听者:监听并处理事件,使用@EventListener或@Transact

2020-09-24 16:02:13 615

原创 温故而知新-java-三大特性之一封装性

封装 (计算机程序术语)概念:即隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别;将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成“类”,其中数据和函数都是类的成员。理解:在面向对象编程中,封装(encapsulation)是将对象运行所需的资源封装在程序对象中——基本上,是方法和数据。对象是...

2019-07-12 18:06:57 207

原创 springboot 集成 RabbitMQ

**springboot 集成 RabbitMQ**

2019-03-02 14:45:01 263

原创 RabbitMQ

**学习RabbitMQ,以及springboot集成RabbitMQ**RabbitMQ的官网是http://www.rabbitmq.com简介MQ全称为Message Queue, 是指在应用间传送的数据。消息可以非常简单,比如只包含文本字符串,也可以更复杂,可能包含嵌入对象。消息发布者只管把消息发布到 MQ 中而不用管谁来取,消息使用者只管从 MQ 中取消息而不管是谁发布的。...

2019-03-01 18:02:22 267

原创 工厂模式之简单工厂模式

**java设计模式之工厂模式**工厂模式(简单工厂+工厂方法+抽象工厂)定义:工厂模式专门负责将大量有共同接口的类实例化。工厂模式可以动态决定将哪一个类实例化,而不必事先知道每次要实例化哪一个类。简单工厂模式介绍:概念:简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是...

2019-02-20 16:19:13 163

空空如也

空空如也

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

TA关注的人

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