自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(47)
  • 问答 (1)
  • 收藏
  • 关注

原创 深入解析 Java 中 synchronized 的实现原理与机制

的底层实现融合了对象头 Mark WordMonitor 机制CAS 操作和锁升级策略,是 JVM 层面的核心同步机制。理解其原理需要结合 JVM 源码和操作系统知识,在实际开发中需根据场景选择合适的锁粒度和类型。

2025-06-24 17:21:58 644

原创 RocketMQ 中多消息不同状态回查的设计与优化

通过以上方案,可有效处理多个消息的不同状态回查,在保证最终一致性的同时,提升系统处理性能和稳定性。实际应用中需根据业务特性调整参数配置,并通过监控持续优化回查策略。:使用 Redis 或 Zookeeper 实现回查操作的全局锁。:在消息体中携带业务唯一标识(如订单 ID、交易号):为不同业务类型分配独立的回查线程池。接口实现按主题或标签分组回查。:控制同一时间回查的消息数量。字段,每次回查版本号递增。

2025-06-18 10:41:15 624

原创 RocketMQ 事务消息实现原理详解

事务消息是 RocketMQ 提供的一种高级消息类型,用于解决分布式系统中跨服务的数据一致性问题。它确保本地事务与消息发送操作要么同时成功,要么同时失败,实现最终一致性。通过以上机制,RocketMQ 实现了高性能、高可用的事务消息功能,为分布式系统提供了可靠的最终一致性解决方案。事务消息的完整流程分为三个阶段:准备阶段、提交 / 回滚阶段、状态回查阶段。RocketMQ 事务消息的实现基于。

2025-06-18 10:25:08 307

原创 生产环境中 CPU 使用率持续升高的系统级故障排查与解决

生产环境中 CPU 使用率持续升高且无法降低,最终导致服务频繁重启,这是一个需要紧急排查的系统级故障。如果排查过程中发现具体的异常指标(如某进程持续 100% CPU、特定日志报错),可进一步提供信息以定位根本原因。设置 CPU 阈值告警与自动处理。临时限制进程 CPU 资源。

2025-06-17 17:31:21 928

原创 MQ解决高并发下订单问题,实现流量削峰

根据业务场景选择合适的 MQ,本例使用 RabbitMQ 是因其易用性和可靠性。

2025-06-16 17:27:21 1021

原创 高并发场景下接口安全实现方案:全方位构建防护体系

在高并发场景(如月底销售高峰期)中,接口安全面临更严峻的挑战,包括恶意攻击、数据泄露、请求伪造等风险。以下是一套完整的接口安全实现方案:原理:使用 JSON Web Token 存储用户信息,避免 Session 共享问题,适合分布式架构。实现示例:1.2 OAuth 2.0/OpenID Connect应用场景:核心算法选择:2.2 验证码与设备指纹验证码策略:在登录、下单等高风险操作前强制校验,防止机器人批量攻击。设备指纹技术:通过浏览器特征(User-Agent、Canvas 指纹、字体

2025-06-13 17:42:19 1219

原创 Nginx、CDN、 DNS的关系解析

Nginx是CDN 的基础组件,提供高性能的缓存和反向代理能力。DNS是CDN 的 “导航系统”,负责将用户导向最近的 CDN 节点。三者协同,实现网站内容的高效分发、负载均衡和性能优化。理解这三者的关系,有助于设计高可用、高性能的网络架构,特别是在高并发场景(如月底销售高峰期)中,合理配置 CDN、Nginx 和 DNS 能显著提升系统响应速度和稳定性。

2025-06-13 17:29:49 564

原创 大数据量高实时性场景下订单生成的优化方案

通过异步化、批量处理、缓存优化和硬件调优的组合方案,可在高实时性要求下高效处理大数据量订单生成任务。关键在于将同步阻塞流程转化为异步非阻塞架构,并利用并行计算和缓存减少关键路径的耗时。同时,需配合监控和容错机制确保系统稳定性。

2025-06-06 18:31:15 973

原创 分布式事务中解决空回滚和防悬挂的方案

的核心是确保回滚操作有实际执行过的。

2025-06-05 14:23:04 542

原创 Java 调用第三方接口注意事项

调用第三方接口时,需从性能、稳定性、安全性、可观测性等多维度设计防护措施,同时关注业务特性(如幂等性)和外部依赖的不可控性,构建健壮的调用体系。

2025-06-03 16:31:33 529

原创 HashMap 的 put 方法及扩容机制源码详解

HashMap 是 Java 中基于哈希表实现的键值对存储结构,在 JDK 8 及以后版本中,其底层采用。

2025-05-26 16:37:53 685

原创 大数据下HashMap 扩容优化方案及选择

方案适用场景核心优势内存开销预分配容量数据量可预估简单高效低分段扩容大数据量动态增长分散阻塞时间中读写分离读多写少高并发无阻塞读写高(双倍)渐进式 Rehash对延迟敏感的场景无感知扩容中。

2025-05-26 16:17:20 695

原创 订单越来越到导致接口列表查询数据缓慢解决思路

通过以上回答,既能体现对数据库优化原理的深入理解,又能展示从问题定位到方案落地的全流程把控能力,符合面试官对 “技术深度 + 项目落地” 的考察需求。当面试官询问数据库层面的订单优化改造时,需结合技术原理与落地步骤,分阶段阐述具体方案。监听数据库 binlog,实时将订单数据同步到 ES(或使用定时任务批量同步)。)或冷存储(如 Hive、OSS),主表仅保留近 3 个月数据。缓存更新策略:订单状态变更时,删除对应缓存(如。每月将 3 个月前的订单数据迁移到归档表(如。和必要字段,减少主表行大小,提升。

2025-05-22 17:28:02 708

原创 系统接口响应慢的定位与优化

通过以上方法,可系统性地定位接口响应慢的原因,并针对性地实施优化,提升系统性能与用户体验。当系统上线后发现某个接口响应很慢时,可按以下步骤从。

2025-05-22 16:41:17 952

原创 位图:内存受限场景下大规模数据去重的利器

在面试中,若遇到 “内存不足” 的问题,位图往往是最优解之一,尤其适合处理已知范围的整数型数据(如 QQ 号、用户 ID)。:适用于整数、枚举等可映射为索引的数据,无法处理字符串等需哈希转换的类型(需先哈希到整数范围)。:扩展为多位表示(如 2 位表示出现次数:00=0 次,01=1 次,10 = 多次)。遍历位图,所有标记为 1 的位对应的 QQ 号即为唯一存在的元素。:需提前知道数据的最大值(如 QQ 号的范围),否则无法分配内存。:可直接统计元素总数(计算位图中 1 的个数)。

2025-05-21 16:53:00 600

原创 Java 中Supplier延迟生成值的原因

延迟生成值的核心是。

2025-05-19 18:27:07 694

原创 Spring Bean 生命周期中设计模式的应用与解析

Spring Bean 的生命周期涉及多个阶段和扩展点,Spring 框架在这一过程中巧妙运用了多种设计模式,以实现强大的功能和灵活性。:当 Bean 需要 AOP 增强时,创建代理对象(JDK 动态代理或 CGLIB 代理),织入切面逻辑(如事务管理、日志记录)。:定义 Bean 生命周期的骨架流程,子类可重写特定步骤(如加载 BeanDefinition)。:当 Bean 生命周期事件(如容器启动、关闭)发生时,通知注册的监听器。:允许在 Bean 初始化前后对其增强(如修改属性、添加功能)。

2025-05-19 11:45:58 895

原创 Spring MVC 对 JavaWeb 的优化:从核心组件到注解

传统 JavaWeb:需在web.xml中手动注册每个 Servlet。Spring MVC:通过注解自动扫描和注册控制器。@RestController // 等价于 @Controller + @ResponseBody功能点传统 JavaWebSpring MVC组件注册web.xml 手动配置注解自动扫描(@Controller)请求映射手动解析 URL@RequestMapping 注解参数处理手动从 request 提取并转换类型。

2025-05-16 17:32:59 942

原创 Spring MVC 中请求处理流程及核心组件解析

在 Spring MVC 中,请求从客户端发送到服务器后,需要经过一系列组件的处理才能最终到达具体的 Controller 方法。协调,配合拦截器和异常处理机制,形成了一个完整的请求处理体系。:请求映射处理器,负责将请求 URL 映射到对应的 Handler(即 Controller 方法)。对象,包含控制器实例、方法反射信息和请求匹配条件(如 URL、请求方法、请求参数等)。:处理器适配器,将不同类型的 Handler 统一为可执行的接口。:前端控制器,接收所有 HTTP 请求,是整个请求处理的入口。

2025-05-16 17:16:38 1181

原创 Spring 框架中适配器模式的五大典型应用场景

在 Spring 框架中,适配器模式(Adapter Pattern)被广泛应用于将不同组件的接口转化为统一接口,从而实现组件间的无缝协作。

2025-05-16 14:08:57 980

原创 快速理解java的浅拷贝和深拷贝

BeanUtils.copyProperties()方法为浅拷贝方法:当拷贝源对象当中有User对象属性,那么拷贝之后目标对象的User的指针与拷贝源User对象指针指向同一处。这里深拷贝代码采用了JSONObject.toJSONString()和JSONObject.parseObject()方法实现,当修改其中一个对象属性的字段另一个字段不会随着改变。

2023-02-08 14:09:47 1175

原创 Spring拦截指定路径并对指定注解做处理

Spring拦截器实现,对指定路径注解拦截

2023-02-07 18:02:26 528

原创 LeetCode第一题,两数之和

力扣题目

2022-09-20 10:20:02 222

原创 Java面试题

java 面试题,通用

2022-07-24 01:30:36 931

原创 nodejs 的坑

在安装nodejs的时候 官网给出的是最新的版本16,导致我 npm install 时候失败报错了说是什么npm ERR! command failed百度了好久发现好像是版本的问题,最新版本的话可能需要执行一些其他的命令详情可见另一个博主:https://blog.csdn.net/qcc0716/article/details/115463828建议的话还是安装其他版本好点:https://nodejs.org/zh-cn/download/releases/我安装的是 Node.js

2022-03-18 14:01:38 331

原创 Mysql 性能优化问题,常用的一些

最左原则问题:假设 以 身高、体重、年龄 为主键图中前三条语句都是能使用到索引的而在最后一条是用不到索引的原因: 当我们在用组合索引的时候,会去一个个比较,先比较身高,然后比较体重,最后比较年龄。如果我们中间的体重没用在条件里那么 ,在判断体重 时候就无法比较,从而走向全表扫描,这是需要注意的一点...

2022-03-05 16:30:19 409 1

原创 docker 部署 zookeeper:3.4.11

docker pull zookeeper:3.4.11mkdir /opt/zookeeper/{conf,data,logs} -pvi /opt/zookeeper/conf/zoo.cfg---------------------------------clientPort=2181 dataDir=/data #数据存储dataLogDir=/datalog #日志tickTime=2000initLimit=5syncLimit=2autopurge.snapRet

2022-02-14 15:12:40 1226

原创 docker 启动 rocketmq:4.4.0

自己电脑练习时候遇到的坑org.apache.rocketmq.remoting.exception.RemotingConnectException: connect to <172.17.0.3:10909> failebrokerClusterName = DefaultClusterbrokerName = broker-abrokerId = 0deleteWhen = 04fileReservedTime = 48brokerRole = ASYNC_MASTERfl

2022-02-11 18:59:12 2303

原创 docker运行容器遇到的坑

docker 运行在我以数据卷的方式运行我的mysql的时候出现了死活都不能启动容器的情况命令:docker run --name mysql5.7.1 -e MYSQL_ROOT_PASSWORD=root -p 3306:3306 -d 3e3 -v /xim/mysql/data:/var/lib/mysql -v /xim/mysql/my.cnf:/etc/mysql/my.cnf在查看了众多文之后发现 :如果在启动 docker 的时候 在配置环境之前就启动了我们的do

2022-01-15 12:51:26 1163

原创 单元测试使用Shiro简单实现用户认证 授权 MD5加盐加密,用户验证源码分析

文章目录在学习shiro之前 先来简单的了解一下什么是shiro在学习之前 先来看看本次文章需要掌握的知识: (预先了解一下大概会有什么)测试阶段用户认证实现用户 认证 执行流程源码用户授权实现MD5 加盐加密在学习shiro之前 先来简单的了解一下什么是shiroApache Shiro 是一个强大易用的 Java 安全框架,提供了认证、授权、加密和会话管理等功能,对于任何一个应用程序,Shiro 都可以提供全面的安全管理服务。Shiro能干什么?1.权限管理(自定义权限注解/加载权限)2.角

2021-11-30 20:31:22 778

原创 基于Springboot、RBAC思想使用注解方式实现权限管理功能

所涉及到的技能点:Springboot 、分页后端插件 pagehelper 、分页前端插件 twbs-pagination首先什么是RBACRBAC 是基于角色的访问控制(Role-Based Access Control ),简单的来说就是不同的人有不同的权限,什么样的人干什么样的事数据库的设计员工表:用来存储员工信息字段分析: id(员工编号,主键自增长)、 name(员工姓名)、 role_id(角色编号,关联查询角色)、super_admin(是否超级管理员)角色

2021-11-28 18:09:51 2599 2

原创 mysql简单单链表查询练习

查询所有员工信息。查询每个员工的编号、姓名、职位。查询所有部门信息。查询所有有员工的部门编号。查询有员工的部门和职位。查询所有员工的年薪。查询所有员工的年薪(使用别名)。查询所有员工的年薪((月薪 + 奖金) * 12) 。查询有奖金的员工信息。查询公司的老板。查询出基本工资高于 1500 的所有员工信息。查询名字叫 SCOTT 的员工所从事的工作。查询 1981 年入职的员工信息。查询年薪小于 3W 的员工。查询所有不是销售人员的员工信息。查询工资在 2000-3000 之.

2021-11-04 19:50:26 2016

原创 idea 图片上传保存

编写一个register.jsp页面<%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head> <title>文件上传</title></head><body><%-- 这里表单提交方式为post,并且enctype设置为"multipart/form-data"文件以二进制的数据传输 --%>&

2021-10-30 15:28:19 7575 1

原创 LeetCode第9题回文字

方法一:暴力解法 public boolean isPalindrome(int x) { StringBuffer str = new StringBuffer(String.valueOf(x)); if (!Character.isDigit(str.charAt(0))) return false; //定义一个左右指针 int left = 0 ; int right = str.length()-1;

2021-08-22 18:09:35 105

原创 LeetCode第8题字符串转换整数

StringBuffer str = new StringBuffer(s.trim()); if(str.length()==0) return 0;//长度为0直接返回0 /* Character.isDigit 判断是不是数字。 如果开头既不是数字,又不是 ‘-’ ‘+’ 那就是字母等,直接返回0 */ if ((!Character.isDigit(str.charAt(...

2021-08-22 17:04:18 118

原创 LeetCode第七题整数反转

方法一:暴力解法 //先将整数转换成字符串 String s = String.valueOf(x); //创建一个 StringBuffer 追加字符 StringBuffer str = new StringBuffer(); for (char c : s.toCharArray()) { if ('-'==c) continue;//如果第一个字符是 - 跳过 str.append(

2021-08-22 11:24:17 103

原创 LeetCode第6题Z字形变换

public static String convert(String s, int numRows) { /* 思路:Z字形变换 abcdef a e 这里可以先想象成:从 a 开始向下走 b d f 到了指定了 numRows行时变方向 向上走 c 在到了 起始位置在变一次方向 boo...

2021-08-22 09:05:57 330

原创 LeetCode算法题第四题,求两个正序数组的中间值

前提储备:需要知道什么是归并排序? public static double findMedianSortedArrays(int[] nums1, int[] nums2) { /* 思路: 主要重要的是 归并算法的思想,两个拆分的数组进行合并 nums1[]{1,3} nums2[]{2,4} l1:指针 l2:指针 取

2021-08-21 13:37:34 138

原创 LeetCode第三题,无重复字符串的最大长度

public static int lengthOfLongestSubstring(String s) { /** * 思路: abcabcbb * 先抽取第一个元素a 然后往右遍历,直到遇到相同的元素就停止 那么第一个元素 a不重复的最长字符串为 abc 记录一次长度,并且作比较 * 在抽取第二个元素b 然后往右遍历,直到遇到相同的元素b,那么第二个元素 b不重复最长字符串为 bca 记录一次长度,并且...

2021-08-21 12:51:28 93

原创 spring的事务传播机制简单易懂

什么是事务?就是怎么处理两个事务之间的关系假设A方法出现了异常那么 B方法要不要回滚呢?又或者B方法出现异常,A方法要不要回滚?需要该怎么做不需要又该怎么做?这类问题就可以用到spring给出的7种事务传播特性解决 1、Propagation.REQUIRED (默认事务):如果当前存在了事务,那就融入这个事务中,没有则重新创建 假设出现异常那么update() 和 delete() 方法都会执行失败,因为在同一个事务中。2、Propagation.REQUIRES_NEW:

2021-08-11 18:20:23 444

空空如也

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

TA关注的人

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