Java中常见的问题
1. SSO中的Cookie/Token生成与安全传递
- 生成Cookie/Token:
- Cookie:服务器通过
Set-Cookie
响应头生成,包含用户ID、过期时间等,需设置HttpOnly
和Secure
属性防止XSS和中间人攻击。 - Token(如JWT):使用签名算法(如HMAC或RSA)生成,包含用户信息(Payload)、签名和过期时间,示例:
String token = JWT.create().withSubject(userId).withClaim("role", "admin").sign(Algorithm.HMAC256("secret"));
- Cookie:服务器通过
- 安全传递:
- Cookie使用
Secure
(仅HTTPS传输)和SameSite
(防CSRF)。 - Token通过HTTP Header(如
Authorization: Bearer <token>
)传递,避免URL暴露。
- Cookie使用
- Session防泄露:
- 会话ID随机化,绑定客户端IP/User-Agent。
- 使用HTTPS加密传输,服务端存储Session时加密。
2. JetCache与Redis集群
- JetCache使用:
@Cached(name="userCache", expire=3600) public User getUserById(Long id) { /*...*/ }
- Redis集群一致性:
- 使用
RAFT
或Redlock
算法保证数据同步。 - 最终一致性场景:读从库,写主库。
- 使用
- 缓存无法删除:
- 检查Redis集群状态,手动执行
DEL key
。 - 设置缓存降级策略,如本地缓存兜底。
- 检查Redis集群状态,手动执行
- 多级缓存:
- 本地缓存(Caffeine)+ Redis缓存,通过注解
@CachePenetrationProtect
防穿透。
- 本地缓存(Caffeine)+ Redis缓存,通过注解
3. 动态数据源与多租户
- 动态切换逻辑:
- 使用
AbstractRoutingDataSource
,通过ThreadLocal绑定租户标识:public class TenantDataSource extends AbstractRoutingDataSource {@Overrideprotected Object determineCurrentLookupKey() {return TenantContext.getTenantId();} }
- 使用
- 多租户隔离:
- 按租户分库(物理隔离)或分表(逻辑隔离,如
tenant_id
字段)。
- 按租户分库(物理隔离)或分表(逻辑隔离,如
4. 自定义组件
- Spring Boot自定义组件:
- 定义Bean:
@Component public class CustomComponent { /*...*/ }
- 通过
@ConditionalOnProperty
按条件加载。 - 实现
ApplicationRunner
在启动时初始化。
5. MQ防消息丢失与死信队列
- 防丢失:
- 生产者:开启
confirm
机制(RabbitMQ)或事务(Kafka)。 - 消费者:手动ACK,消息持久化。
- 生产者:开启
- 死信队列自动化:
- 设置死信消息自动重试(如RabbitMQ的TTL+DLX)。
- 使用定时任务扫描死信队列重新投递。
6. 代码中定位生产者/消费者
- 查找方法:
- 生产者:搜索
@RabbitListener
或kafkaTemplate.send()
。 - 消费者:查找
@KafkaListener
或消息处理类。 - 使用IDE的“Find Usages”功能跟踪消息关键字。
- 生产者:搜索
7. 过滤器与分级认证
- 过滤器链:
public class AuthFilter implements Filter {public void doFilter(request, response, chain) {if (isPublicAPI(request)) chain.doFilter();else checkToken(request); // 分级验证} }
- 分级认证:
- 使用
@PreAuthorize("hasRole('ADMIN')")
(Spring Security)。
- 使用
8. 双亲委派模型
- 流程:
- 类加载器收到请求后,先委派父类加载。
- 父类无法加载时,自身尝试加载。
- 核心类(如
java.lang.*
)由Bootstrap加载器加载。
- 实现:
- 类加载器的
loadClass()
方法默认实现委派逻辑。
- 类加载器的
9. 打破双亲委派
- 场景:
- Tomcat为每个WebApp单独加载类。
- 热部署时重新加载修改后的类。
- 方法:
- 自定义类加载器,重写
loadClass()
逻辑。
- 自定义类加载器,重写
10. 注解作用位置选择
- AOP:业务逻辑增强(如日志、事务)。
- 拦截器:HTTP请求预处理(如权限校验)。
- MVC拦截器:Controller层拦截。
- 启动时刷新:使用
@PostConstruct
或ApplicationListener
。
11. 安全问题示例
endsWith
不安全:- 可能被大小写或特殊字符绕过,如
"admin".endsWith("min")
误判。
- 可能被大小写或特殊字符绕过,如
lastIndexOf+substring
安全:int index = path.lastIndexOf("/"); String suffix = path.substring(index); // 精确截取
12. 分布式追踪与日志脱敏
- Trace ID:
- 代码中通过MDC注入:
MDC.put("traceId", UUID.randomUUID().toString());
- 日志框架(Logback)配置自动追加
%X{traceId}
。
- 代码中通过MDC注入:
- 脱敏:
- 使用正则替换敏感字段:
<pattern>%msg|replace('password=".*?"', 'password=***')</pattern>
- 使用正则替换敏感字段:
13. Token与机机调用验证
- 动态Token(如JWT):每次生成新Token,需验签。
- 静态Token(API Key):长期有效,需加密存储。
- 机机调用不用Cookie:
- Cookie依赖浏览器上下文,机机调用无状态。
- HTTPOnly作用:防止XSS窃取Cookie。
- 跨域安全:
- CORS配置
Access-Control-Allow-Origin
白名单。 - 使用OAuth2.0授权码模式。
- CORS配置
14. Spring Security核心
- 配置:
@Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter {protected void configure(HttpSecurity http) {http.authorizeRequests().antMatchers("/admin/**").hasRole("ADMIN");} }
15. 时间类型与工作日计算
- 时间类型:
LocalDate
:日期(无时间)。LocalDateTime
:日期+时间。ZonedDateTime
:带时区。
- 工作日计算:
- 使用
TemporalAdjusters
跳过周末:LocalDate date = startDate; while (workDays > 0) {date = date.plusDays(1);if (date.getDayOfWeek() != SATURDAY && date.getDayOfWeek() != SUNDAY) workDays--; }
- 集成第三方API(如阿里云节假日接口)。
- 使用
16. Map分组与SQL分组的取舍
- 代码分组优势:
- 灵活处理复杂逻辑(如多层嵌套分组)。
- 避免SQL性能瓶颈(大数据量时)。
- 示例:
Map<String, List<Order>> ordersByCategory = orders.stream().collect(Collectors.groupingBy(Order::getCategory));
以上为具体问题的解决方案,如需进一步探讨某个点,可继续提问!
相关文章:
Java中常见的问题
1. SSO中的Cookie/Token生成与安全传递 生成Cookie/Token: Cookie:服务器通过Set-Cookie响应头生成,包含用户ID、过期时间等,需设置HttpOnly和Secure属性防止XSS和中间人攻击。Token(如JWT):使…...
【JEECG】BasicTable内嵌Table表格错位
功能说明: 解决代码生成后,本地内嵌Table表格样式错位。 优化前: 优化后: 解决方法: 对应的List.vue页面增加css样式调整。 <style lang"less" scoped>//内嵌表格margin边距覆盖:deep(.ant-table-…...
人工智能 计算智能模糊逻辑讲解
引言 在计算智能(Computational Intelligence)领域,模糊逻辑(Fuzzy Logic)作为一种处理不确定性与模糊性信息的数学工具,自 1965 年由洛夫特扎德(Lotfi Zadeh)提出以来,…...
基于SSM实现的健身房系统功能实现一
一、前言介绍: 1.1 项目摘要 随着社会的快速发展和人们健康意识的不断提升,健身行业也在迅速扩展。越来越多的人加入到健身行列,健身房的数量也在不断增加。这种趋势使得健身房的管理变得越来越复杂,传统的手工或部分自动化的管…...
spring详解-循环依赖的解决
Spring循环依赖 重点提示: 本文都快写完了,发现“丈夫” 的英文是husband… 在“②有AOP循环依赖” 改过来了,前面用到的位置太多了就没改。我是说怎么idea的hansband英文下面怎么有波浪线。各位能够理解意思就行,英文拼写不要过…...
【大模型面试每日一题】Day 10:混合精度训练如何加速大模型训练?可能出现什么问题?如何解决?
【大模型面试每日一题】Day 10:混合精度训练如何加速大模型训练?可能出现什么问题?如何解决? 📌 题目重现 🌟🌟 面试官:混合精度训练如何加速大模型训练?可能出现什么问…...
[学习]RTKLib详解:rtkcmn.c与rtkpos.c
文章目录 Part A、Rrtkcmn.c一、总体功能二、关键API列表三、核心算法实现四、函数功能与参数说明1. uniqnav2. lsq3. filter4. matmul5. satazel6. ionmapf7. geodist8. timeadd9. dgetrf_ / dgetri_(LAPACK接口) 五、工作流程说明4.1 模块在RTKLib中的…...
cookie/session的关系
什么是cookie,session 我们平时去医院看病时,从进医院那一刻,我们最开始要做的就是挂号(需要我们填写表格,记录一些核心信息,医生会把这些信息录入电脑,并给我办一个就诊卡,卡里面只…...
Linux(十四)进程间通信(IPC),管道
一、进程间通信 (一)系统介绍进程间通信 进程间通信(IPC)介绍 小编插入的这篇文章详细介绍了进程间通信的一些内容,大家可以一起学习。 (二)进程间通信的方法 1、管道 2、信号量 3、共享…...
Nmap 工具的详细使用教程
Nmap(Network Mapper)是一款开源且功能强大的网络扫描和安全审计工具。它被广泛用于网络发现、端口扫描、操作系统检测、服务版本探测以及漏洞扫描等。 官方链接: Nmap 官方网站: https://nmap.org/Nmap 官方文档 (英文): https://nmap.org/book/man.h…...
Vue 自定义指令输入校验过滤
/*** 过滤字符串* param {*} filterCharRule* param {*} newVal* returns*/ function filterCharForValue(filterCharRule, newVal) {if(!filterCharRule || !newVal) returnconst isArray filterCharRule instanceof Arrayconst isRegExp filterCharRule instanceof RegExpi…...
OpenGl实战笔记(2)基于qt5.15.2+mingw64+opengl实现纹理贴图
一、作用原理 1、作用:将一张图片(纹理)映射到几何体表面,提升视觉真实感,不增加几何复杂度。 2、原理:加载图片为纹理 → 上传到 GPU;为顶点设置纹理坐标(如 0~1 范围)&…...
tinyrenderer笔记(透视矫正)
tinyrenderer个人代码仓库:tinyrenderer个人练习代码 引言 还要从上一节知识说起,在上一节中我为了调试代码,换了一个很简单的正方形 obj 模型,配上纹理贴图与法线贴图进行渲染,得了下面的结果: what&…...
c++类【发展】
类的静态成员(用static声明的成员),在声明之外用例单独的语句进行初始化,初始化时,不再需要用static进行限定。在方法文件中初始化。以防重复。 特殊成员函数 复制构造函数: 当使用一个对象来初始化另一个对象…...
玛格丽特鸡尾酒评鉴,玛格丽特酒的寓意和象征
玛格丽特鸡尾酒会有独特的风味,而且还会有一个比较吸引人的背后故事。在目前的鸡尾酒界就会占据着很重要的地位,不仅是味蕾的盛宴,同样也会拥有深厚的情感。 玛格丽特由龙舌兰酒、柠檬汁和君度橙酒调制而成,将三者巧妙地结合在一起…...
关于Java多态简单讲解
面向对象程序设计有三大特征,分别是封装,继承和多态。 这三大特性相辅相成,可以使程序员更容易用编程语言描述现实对象。 其中多态 多态是方法的多态,是通过子类通过对父类的重写,实现不同子类对同一方法有不同的实现…...
SecureCrt设置显示区域横列数
1. Logical rows //逻辑行调显示区域高度的 一般超过50就全屏了 2. Logical columns //逻辑列调显示区域宽度的 3. Scrollback buffer //缓冲区大小...
【PhysUnits】1 SI Prefixes 实现解析(prefix.rs)
一、源码 // prefix.rs //! SI Prefixes (国际单位制词头) //! //! 提供所有标准SI词头用于单位转换,仅处理10的幂次 //! //! Provides all standard SI prefixes for unit conversion, handling only powers of 10.use typenum::{Z0, P1, P2, P3, P6, P9, P12, …...
【Python】--实现多进程
import multiprocessing import time # 1.定义好函数 # codeing def coding():for i in range(10):print(f正在编写第{i}行代码)time.sleep(0.2)# music def music():for i in range(10):print(f正在听第{i}首歌曲)time.sleep(0.2)单任务 # 单任务--时间为4s多 if __name__ _…...
计算机视觉与深度学习 | 基于数字图像处理的裂缝检测与识别系统(matlab代码)
🍅🍅🍅🍅🍅🍅🍅🍅🍅🍅🍅🍅🍅🍅🍅🍅 基于数字图像处理的裂缝检测与识别系统 🥦🥦🥦🥦🥦🥦🥦🥦🥦🥦🥦🥦🥦**系统架构设计****1. 图像预处理**目标:消除噪声+增强裂缝特征**2. 图像分割**目标:提取裂缝区域**3. 特征…...
嵌入式MCU语音识别算法及实现方案
在嵌入式MCU(微控制器单元)中实现语音识别,由于资源限制(如处理能力、内存、功耗等),通常需要轻量级算法和优化技术。以下是常见的语音识别算法及实现方案: 一、传统语音识别算法 动态时间规整&…...
【C++核心技术深度解析:从继承多态到STL容器 】
一、C继承机制:代码复用与层次设计 1. 继承基础概念 什么是继承? 继承是面向对象编程的核心机制,通过class Derived : public Base让子类(派生类)复用父类(基类)的属性和方法,同时…...
【C/C++】new关键字解析
📘 C 中 new 关键字详解笔记 🔹 什么是 new? new 是 C 中用于动态内存分配的关键字,它在堆内存中为对象或变量分配空间,并返回对应类型的指针。 与 C 语言中的 malloc 相比,new 更安全、更方便ÿ…...
C++高性能内存池
目录 1. 项目介绍 1. 这个项目做的是什么? 2. 该项目要求的知识储备 2. 什么是内存池 1. 池化技术 2. 内存池 3. 内存池主要解决的问题 4.malloc 3. 先设计一个定长的内存池 4.高并发内存池 -- 整体框架设计 5. 高并发内存池 -- thread cache 6. 高并发内存池 -- …...
chili3d调试笔记12 deepwiki viewport
xiangechen/chili3d | DeepWiki viewport阅读 🧠deep 我要把模型投影成dxf导出有什么办法 引用lookat 截图是如何实现的 明天接着搞 ----------------------------------------------------------------...
前端取经路——JavaScript修炼:悟空的九大心法
大家好,我是老十三,一名前端开发工程师。JavaScript如同孙悟空的七十二变,变化多端却又充满威力。本篇文章我将带你攻克JS中最令人头疼的九大难题,从闭包陷阱到原型链继承,从异步编程到性能优化。每个难题都配有实战代…...
从零实战:在Xilinx Zynq PS端移植VxWorks 6.9系统
一、环境准备与工具链搭建 1.1 硬件配置清单 开发板: Zynq-7000系列(推荐ZedBoard或ZCU102)调试工具: USB-JTAG调试器(如Xilinx Platform Cable USB II)存储介质: SD卡(建议Class 10以上)1.2 软件环境 工具版本作用Vivado2022.1FPGA硬件设计Vitis2022.1系统集成开发Wind…...
网工实验——RIP配置
网络拓扑图 配置 1.为每台设备配置ip地址 AR4 <Huawei>u t m <Huawei>sys [Huawei]sysname AR4 [AR4]int g0/0/0 [AR4-GigabitEthernet0/0/0]ip address 172.16.1.1 24 [AR4-GigabitEthernet0/0/0]q#下面配置换回口,模拟网 [AR4]int LoopBack 0 [AR4…...
前端流行框架Vue3教程:14. 组件传递Props效验
(4) 组件传递Props效验 Vue组件可以更细致地声明对传入的props的校验要求 ComponentA.vue <script> import ComponentB from ./ComponentB.vue; export default {components: {ComponentB},data() {return {title: 标题}} } </script> <template><h3&g…...
电子电器架构 --- 网关ECU中采用多CPU解决方案来实现网关功能
我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 钝感力的“钝”,不是木讷、迟钝,而是直面困境的韧劲和耐力,是面对外界噪音的通透淡然。 生活中有两种人,一种人格外在意别人的眼光;另一种人无论…...
关于tftpboot的用法
TFTPBOOT 是一个常用于嵌入式系统或网络设备中的命令,用于通过 TFTP 协议从网络上启动操作系统镜像或引导文件。这个命令通常在设备启动时执行,允许设备通过网络从 TFTP 服务器下载启动镜像或其他必要的文件,而不需要从本地存储中启动。 一般…...
团队协作的润滑剂——GitHub与协作流程
各位代码界的社交恐惧症患者们,今天我们要聊的是如何假装自己很会团队协作——使用GitHub!这就像程序员版的"相亲平台",只不过在这里,你展示的不是自拍和收入,而是代码和commit记录(后者往往更令…...
数据库复习
DML操作包括: SELECT INSERT UPDATE DELETE MERGE 返回字符串长度:length() 查询记录:SELECT 增(INSERT)、删(DELETE)、改(UPDATE)、查(SELECT&#…...
AI与机器学习、深度学习在气候变化预测中的应用与实践
前言: 全球气候变化是现代社会面临的最重要的环境挑战之一,影响了气温、降水、海平面、农业、生态系统等多个方面。气候变化的驱动因素主要包括温室气体排放、气溶胶浓度、火灾频发、海冰融化、叶绿素变化、农业变化和生态环境变化等。这些因素在全球范围…...
Laravel 12 基于 EMQX 实现 MQTT 消息发送与接收
Laravel 12 基于 EMQX 实现 MQTT 消息发送与接收 要在 Laravel 12 中实现基于 EMQX 的 MQTT 消息发送与接收,你可以按照以下步骤操作: 1. 安装必要的依赖包 首先安装 MQTT 客户端库: composer require php-mqtt/client2. 配置 EMQX 连接 …...
论广告系统对存算分离架构的应用
辅助论点 辅助论点一:存算分离架构起源于数据库领域,并不是在线系统。 存算分离的架构源于Google的Spanner数据库,这个数据库采用了KV做存储层,OLAP做计算层的分离式设计,其目的是能快速伸缩计算资源,且节…...
create-vue搭建Vue3项目(Vue3学习2)
一、认识create-vue image.png 二、create-vue搭建Vue3项目 image.png image.png 依次执行npm install 和npm run dev即可运行项目 image.png image.png © 著作权归作者所有,转载或内容合作请联系作者 喜欢的朋友记得点赞、收藏、关注哦!!ÿ…...
NHDEEP档案管理系统功能介绍
NHDEEP档案管理系统单机版专注于提高档案管理效率,无需网络连接即可独立运作,确保数据的安全与私密性。无论是机关单位的常规档案工作,还是工程、基建项目的特殊档案管理需求,系统都能提供全面的解决方案。系统支持信创环境。 核心…...
【C++】C++中的命名/名字/名称空间 namespace
C中的命名/名字/名称空间 namespace 1、问题引入2、概念3、作用4、格式5、使用命名空间中的成员5.1 using编译指令( 引进整个命名空间) ---将这个盒子全部打开5.2 using声明使特定的标识符可用(引进命名空间的某个成员) ---将这个盒子中某个成员的位置打…...
游戏引擎学习第260天:在性能分析器中实现钻取功能
昨天那个帧内存满之后触发段错误实在没找到什么原因导致的 继续研究一下为什么导致的 内存不够进来释放frame 释放frame 应该会给DebugState->FirstFreeStoredEvent 赋值吧 这段宏定义: #define FREELIST_DEALLOCATE(Pointer, FreeListPointer) \if(Pointer) {…...
人工智能100问☞第15问:人工智能的常见分类方式有哪些?
目录 一、通俗解释 二、专业解析 三、权威参考 人工智能的常见分类方式包括:按智能水平(弱人工智能、通用人工智能、超级人工智能)、按技术原理(生成式AI、判别式AI、强化学习)、按功能目标(生成内容、优化决策)、按应用领域(自然语…...
JavaSE核心知识点01基础语法01-04(数组)
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 JavaSE核心知识点01基础语法01-04࿰…...
抖音代播领航者——品融电商(PINKROON)的运营实力与服务解析
抖音代播领航者——品融电商(PINKROON)的运营实力与服务解析 在兴趣电商高速发展的背景下,杭州品融品牌管理有限公司(PINKROON)凭借其全域增长方法论与抖音生态的深度布局,成为众多品牌首选的抖音代播服务商…...
LeetCode 790 多米诺和托米诺平铺 题解
对于本题不去看LeetCode的评论区和题解很难想到如何去dp,毕竟就算再怎么枚举也很难找到适用于面向结果的规律。所以对于题解我建议大家还是去看一下灵神给的题解,以下是灵神汇总的图,如果能看懂的话,对于解决题目有很大的帮助。 根…...
力扣-hot100 (缺失的第一个正数)
41. 缺失的第一个正数 困难 给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。 请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。 示例 1: 输入:nums [1,2,0] 输出:3 解释ÿ…...
Electrolink信息泄露(CVE-2025-28228)
免责声明 本文档所述漏洞详情及复现方法仅限用于合法授权的安全研究和学术教育用途。任何个人或组织不得利用本文内容从事未经许可的渗透测试、网络攻击或其他违法行为。使用者应确保其行为符合相关法律法规,并取得目标系统的明确授权。 对于因不当使用本文信息而造成的任何直…...
Leetcode Hot 100 三数之和
思路 对数组先排序,然后使用双指针法进行,并且整个过程需要把握去重的逻辑 代码 class Solution:def threeSum(self, nums: List[int]) -> List[List[int]]:if not nums:return []nums.sort() #去重都需要排序res[]for i in range(len(nums)):if i…...
5月6日日记
一点心得是 看通知要仔细认真,自己想问的问题要先看看通知或者文件中说了没有,如果没说再去问相关负责人。 上课的教室一定要看好,看准了再去。别像今天一样先去了科技楼又去了工学馆。 线代开课了。感觉总体还行,并不是很难。…...
巧记英语四级单词 Unit7-中【晓艳老师版】
collapse v.倒塌,坍塌 都(col)来扑(lap)噻immune a.不受影响的,免疫的 我im 木讷mune,人应该木讷一点yard n.院子 鸭的,在哪养;backyard 后院backward a.往后的 ward表示方向 profile n.外形,轮廓 从前面看…...
Windows系统修改Docker Desktop(WSL2)内存分配
# Windows查看docker信息 docker info 新增wsl全局配置文件(.wslconfig文件):windows路径栏输入:%UserProfile%,找到目录C:\Users\Administrator,默认是没有这个配置文件的,可以自己新增 # 设置在wsl2上运行 [wsl2] # …...