记一次诡异的线上异常赋值排查:代码没错,结果不对
这篇文章主要是记录和分享一次线上故障排查的经历 —— 可以说是目前为止我遇到过的最抓狂的排查之一。明明代码看上去没有任何问题,我也反复检查过每一处逻辑,理论上它就不应该出错,但实际执行的结果却始终不符合预期。一边怀疑人生,一边硬着头皮往下查,折磨,真的折磨……
背景
在我们的一套比较老 ...
基于Spring Boot 3 + AOP实现的完整登录防护方案代码,整合账号IP双维度防护和混合检测策略
基于Spring Boot 3 + AOP实现的完整登录防护方案代码,整合账号IP双维度防护和混合检测策略
以下是基于Spring Boot 3 + AOP实现的完整登录防护方案代码,整合账号/IP双维度防护和混合检测策略:
引入必要依赖(pom.xml)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-star ...
剑指offer-1、⼆维数组中的查找
题目描述
在⼀个⼆维数组中(每个⼀维数组的⻓度相同),每⼀⾏都按照从左到右递增的顺序排序,每⼀列都按照从上到下递增的顺序排序。请完成⼀个函数,输⼊这样的⼀个⼆维数组和⼀个整数,判断数组中是否含有该整数。
例⼦,输⼊⼀个数组:
num[3][4] = [
1 , 4 , 6 , 28 ,
2 , 7 , 32 , 30 ,
10 , 11 , 67 , 79
]
需要查 ...
hot100之子串
和为K的子数组(560)
先看代码
class Solution {
public int subarraySum(int[] nums, int k) {
int res = 0;
int preSum = 0;
Map<Integer, Integer> cnt = new HashMap<>(nums.length);
for (int num : nums){
cnt.merge(preSum, 1, Integer::sum);
preSum + ...
hot100之滑动窗口
无重复字符的最长字串(003)
先看代码
class Solution {
public int lengthOfLongestSubstring(String s) {
int res = 0;
int lef = 0;
int rig = 0;
int[] memo = new int[128];
while (rig < s.length()){
char clef = s.charAt(lef);
char crig = ...
上层应用如何为其所依赖的基础SDK里的静态属性赋值?
我们的系统对商户暴露了RestAPI,供合作商户以API的形式接入。为了提高合作商户侧API接入的开发效率,我编写了一个SDK。
下面 ClientApiUtils是这个SDK一个工具类,封装了API数据加解密、API数字签名的工具方法。这些工具方法都是静态方法。在这个 ClientApiUtils中,有两个静态field,platformPrivateKey和platformPublicK ...
算法题:数组中的第k个最大元素
力扣链接
题意
给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。
请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。
你必须设计并实现时间复杂度为 O(n) 的算法解决此问题。
示例 1:
输入: [3,2,1,5,6,4], k = 2
输出: 5
示 ...
hot100之双指针
移动0(283)
先看代码
class Solution {
public void moveZeroes(int[] nums) {
int idx0 = 0;
for (int idx = 0; idx < nums.length; idx++){
if(nums[idx] != 0){
int temp = nums[idx0];
nums[idx0] = nums[idx];
nums[idx] = temp;
...
Synchronized是怎么实现的?
回答重点
synchronized 实现原理依赖于JVM 的 Monitor(监视器锁)和对象头(Object Header)
synchronized 修饰代码块:会在代码块的前后插入 monitorenter 和 monitorexit 指令。可以把 monitorenter理解为加锁,monitorexit 理解为解锁。(monitor对象存在于每个Java对象的对象头中, synchronized 锁便是通过这种方式获取 ...
Spring Boot 3.5 正式发布,王炸级更新!!
大家好,我是R哥。
就在前几天,Spring Boot 3.5.0 正式发布了:
最新的支持版本如下:
3.2.x 在前几天也停止维护了,很神奇的是,3.1.x 及以下的停更版本居然也发布 bug 更新包了。
从路线图可以看到每个版本的终止时间,每个版本的生命周期只有一年,3.3.x 以下的版本停止免费维护了,3.3.x 还有一个月也要停止维护了, ...
聊聊@Autowired注解的Field injection is not recommended提示问题
1. 前言
在我接触过的大部分Java项目中,经常看到使用@Autowired注解进行字段注入:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class OrderService {
@Autowired
private PaymentService paymentService;
@Autowired ...
wso2~部署~apim4.2的docker-compose方案
以下是使用Docker部署WSO2 API Manager(WSO2 APIM)的详细步骤,分为快速测试部署和生产级部署两种场景:
一、前提条件
安装Docker环境
确保已安装Docker Engine和Docker Compose。
硬件要求
内存:建议4GB以上(默认镜像包含Java进程,内存需求较高)。
磁盘空间:至少2GB可用空间。
二、快速启动(单容器测试 ...
业务微信签到小程序的设计实现方案
-CoderOilStation(程序员编程助手科技股份责任有限公司)
业务微信签到小程序的设计实现方案
使用微信签到的方式是一种新的尝试。企业微信设计的业务范围起始于互联网公司。飞书设计的实现更加严格。很多工厂开始使用钉钉打卡的方式。微信的用户使用统计数据很多。微信签到的方式是政府和高校的外围业务。签到 ...
resubmit v1.2.0 新特性支持类级别防止重复提交
前言
resubmit 是一款为 java 设计的渐进式防止重复提交框架。
创作目的
有时候手动加防止重复提交很麻烦,每次手动编写不利于复用。
所以希望从从简到繁实现一个工具,便于平时使用。
特性
渐进式实现,可独立 spring 使用
基于注解+字节码,配置灵活
支持编程式的调用
支持注解式,完美整合 spring
支持整合 sp ...
还在深夜加班改Bug?雷军都点赞的防重提方案来了!
前言
这是一个希望让每一位程序员按时下班的防止重复提交开源利器。
“那天凌晨2点,我因为重复提交漏洞被搞得半夜加班解决问题。
现在,我只用一行代码 就解决了这个问题——
这就是 resubmit ,一个普通程序员送给所有同行的防崩盘保险。”
—— 一位不愿意透露姓名的 996 程序员
防重复提交
实现方式对比
实现 ...
Spring AI 1.0 正式发布,让 Java 再次伟大!
大家好,我是R哥。
Spring AI 的第一个正式版本 1.0 正式发布了:
正式版本 Maven 依赖:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-bom</artifactId>
<version>1.0.0</version>
...
数组数量数据数量大 1000万黑名单用户 一百亿基础用户 查询检索思路
数组数量数据数量大
1000万黑名单用户
一百亿基础用户
查询检索思路
计算机可分配内存并不是十分大。文件导入导出的数据加载和处理持久化过程涉及到的数据量级别控制在百万数据级别之内。计算机的硬件设备性能都具有其组装配合中央系统处理器加载进程和调度线程进行运行处理不同的用户或者是系统级别的数据。
...
wso2~自定义kafka-event-publisher
自定义event/publishers的步骤
介绍
event/publishers功能位于carbon平台的event菜单,选择publishers菜单项即可打开发布者配置列表,你可以添加自定义的发布者,它们接收apim的相关事件
核心组件: org.wso2.carbon.event.output.adaptor.kafka
功能: 将APIM的事件数据发送到Kafka中
选择的通知输入流: org.wso2.apimgt.no ...
Java 样板代码库 Lombok 使用详解
Lombok 是一个 Java 库,通过注解自动生成常用的样板代码(如 getter/setter、构造函数、日志声明等),显著减少代码量,同时提高代码整洁度。
一、配置方法
(1)IDE:需安装 Lombok 插件(IntelliJ IDEA/Eclipse)
(2)构建工具:Maven/Gradle 添加依赖,如下:
<dependency>
<groupId>org.projectlombok</groupId>
...
@ModelAttribute、@RequestBody、@RequestParam、@PathVariable 注解对比
整理了下接收参数的注解。
注解
绑定来源
支持类型
典型用途
备注
@ModelAttribute
请求参数自动绑定到 JavaBean(含嵌套对象)
JavaBean(含集合)
表单提交(application/x-www-form-urlencoded)
可用于初始化默认值
@RequestBody
请求体(JSON/XML)
任意类型(常用于对象)
JSON 请求体 {"id":1,"name":"To ...