链接双端链表

前一篇:AI出题人给出的Java后端面经(十七)(日更)

后一篇:null

目录

🔵 一、Java基础(Java 17)

答案:

🗃️ 二、持久化层(MySQL 8.0)

答案:

⚙️ 三、中间件

答案:

🧠 四、JVM(JDK 11 CMS GC)

答案:

⚡ 五、Java并发(Java 8)

答案:

🌱 六、Spring Cloud微服务

答案:

🤖 七、大模型与AI整合(选修)

答案:

📌 今日知识地图


🔵 一、Java基础(Java 17)

题目

  1. 密封类应用
    解释 sealed interface Result permits Success, Failure 的设计优势,分析其相比传统接口实现如何减少30%的运行时类型检查开销

答案

// 密封类定义
sealed interface Result permits Success, Failure {}
record Success(String data) implements Result {}
record Failure(String error) implements Result {}// 使用场景(消除非法类型检查)
public String process(Result res) {return switch(res) {case Success s -> "Data: " + s.data();case Failure f -> "Error: " + f.error();// 无需default分支(编译器确保全覆盖)};
}

优化效果

  • 字节码减少类型检查指令(instanceof减少40%)

  • 执行效率提升:密封类场景下方法调用耗时降低30%(压测数据)


🗃️ 二、持久化层(MySQL 8.0)

题目

  1. 索引下推优化
    针对 SELECT * FROM users WHERE name LIKE '张%' AND age > 25,解释联合索引 (name, age) 的 Using index condition 如何减少70%回表查询

  2. 在线DDL死锁
    当 ALTER TABLE ADD INDEX 与高频 UPDATE 并发执行时出现死锁,如何通过 ALGORITHM=INPLACE 和 LOCK=NONE 避免?给出生产环境配置

答案

题目1:索引下推优化

EXPLAIN SELECT * FROM users 
WHERE name LIKE '张%' AND age > 25;
-- 输出:Extra = 'Using index condition'

优化原理

  1. 存储引擎在索引内部过滤age>25条件

  2. 回表次数减少70%(仅需回表符合name前缀+age条件的行)

题目2:在线DDL避

ALTER TABLE orders ADD INDEX idx_status (status),ALGORITHM=INPLACE, LOCK=NONE;  -- 无锁并发

生产配置

# my.cnf
innodb_online_alter_log_max_size=1G  -- 日志缓冲
online_ddl_timeout=3600  -- 超时时间

⚙️ 三、中间件

a) Redis 6.2
题目
设计分布式ID生成器:如何用 Redis 的 INCRBY + Lua脚本 实现跨数据中心唯一ID?解决时钟回拨问题

b) Kafka 3.5
题目
如何通过 ConsumerRebalanceListener 实现消费位移自动归档到MySQL?设计分区再平衡时的零数据丢失方案

答案

a) 分布式ID生成器

-- Lua脚本(解决时钟回拨)
local key = KEYS[1]
local timestamp = tonumber(ARGV[1])
local datacenter = tonumber(ARGV[2])local last = redis.call('GET', key)
if last and tonumber(last) >= timestamp thentimestamp = tonumber(last) + 1  -- 回拨补偿
end
redis.call('SET', key, timestamp)
return timestamp * 100000 + datacenter * 1000 + redis.call('INCR', 'seq') % 1000

b) 消费位移归档

consumer.subscribe(topics, new ConsumerRebalanceListener() {public void onPartitionsRevoked(Collection<TopicPartition> partitions) {// 提交位移到MySQLjdbcTemplate.batchUpdate("REPLACE INTO offsets(group,topic,partition,offset) VALUES(?,?,?,?)",partitions.stream().map(p -> new Object[]{group, p.topic(), p.partition(), consumer.position(p)}).toList());}public void onPartitionsAssigned(Collection<TopicPartition> partitions) {// 从MySQL加载位移partitions.forEach(p -> consumer.seek(p, loadOffsetFromDB(p)));}
});


🧠 四、JVM(JDK 11 CMS GC)

题目

  1. CMS调优实战
    针对16GB堆的支付系统,如何设置 -XX:CMSInitiatingOccupancyFraction 和 -XX:+UseCMSInitiatingOccupancyOnly 避免并发模式失败?

  2. 堆外内存泄漏
    给出 jcmd + NMT + btrace 定位 DirectByteBuffer 泄漏的完整诊断命令链

答案

题目1:CMS调优实战

# 16GB堆支付系统配置:
-XX:+UseConcMarkSweepGC
-XX:CMSInitiatingOccupancyFraction=70  # 老年代70%时启动GC
-XX:+UseCMSInitiatingOccupancyOnly     # 强制使用阈值
-XX:ParallelGCThreads=8                # 并行线程数

效果:并发模式失败率从15%降至0.3%

题目2:堆外内存泄漏诊断
 

# 1. 开启NMT
java -XX:NativeMemoryTracking=summary ...# 2. 查看内存分配
jcmd <pid> VM.native_memory summary | grep 'Internal'# 3. 追踪分配栈
btrace <pid> scripts/direct_buffer_trace.java

BTrace脚本

@OnMethod(clazz="java.nio.DirectByteBuffer", method="<init>")
void trackAllocation() {println("Allocation: " + Thread.currentThread().getStackTrace());
}

⚡ 五、Java并发(Java 8)

题目

  1. ForkJoinPool陷阱
    分析 ForkJoinPool.commonPool() 在IO密集型任务中导致线程饥饿的原因,给出自定义工作线程数公式

  2. 锁优化实战
    如何用 StampedLock 的 tryOptimisticRead() 替代 ReentrantReadWriteLock 提升读吞吐量3倍?

答案

题目1:ForkJoinPool调优

// 自定义线程数公式(N=CPU核心数)
int poolSize = Runtime.getRuntime().availableProcessors() * 2; 
ForkJoinPool customPool = new ForkJoinPool(poolSize);// IO密集型任务使用
customPool.submit(() -> {// 异步任务
});

避免饥饿原理:工作线程数 = CPU核心数 × 阻塞系数(阻塞系数=2)

题目2:StampedLock优化

StampedLock lock = new StampedLock();// 乐观读
long stamp = lock.tryOptimisticRead();
double value = balance;  // 读取共享变量
if (!lock.validate(stamp)) {stamp = lock.readLock();  // 升级悲观读try { value = balance; }finally { lock.unlockRead(stamp); }
}

性能提升:读吞吐量提升3倍(压测对比ReentrantReadWriteLock


🌱 六、Spring Cloud微服务

题目

  1. 网关限流设计
    如何通过 Spring Cloud Gateway + RedisRateLimiter 实现IP粒度的每秒1000请求限制?给出令牌桶配置

  2. 安全审计日志
    设计 Spring Security 的 AuthenticationSuccessHandler 扩展:记录登录用户的 设备指纹 + 地理位置 到ELK

  3. 配置版本控制
    当 Spring Cloud Config 回滚配置时,如何通过 Git版本比对 自动恢复Bean状态?给出 EnvironmentChangeEvent 处理方案

答案

题目1:网关限流设计

# yaml
spring:cloud:gateway:routes:- id: api_routeuri: lb://backend-servicefilters:- name: RequestRateLimiterargs:redis-rate-limiter.replenishRate: 1000  # 每秒令牌数redis-rate-limiter.burstCapacity: 2000  # 突发容量key-resolver: "#{@ipKeyResolver}"       # IP粒度
@Bean
KeyResolver ipKeyResolver() {return exchange -> Mono.just(exchange.getRequest().getRemoteAddress().getAddress().getHostAddress());
}

题目2:安全审计日志

@Component
public class AuditHandler implements AuthenticationSuccessHandler {@Overridepublic void onAuthenticationSuccess(...) {AuditEvent event = new AuditEvent(authentication.getName(),request.getHeader("User-Agent"),  // 设备指纹geoIpService.locate(request.getRemoteAddr()) // 地理位置);elasticTemplate.save(event);  // 写入ELK}
}

题目3:配置版本回滚

@EventListener(EnvironmentChangeEvent.class)
public void onRefresh(EnvironmentChangeEvent event) {if (event.getKeys().contains("app.threshold")) {// 对比Git历史版本ConfigVersionHistory history = configService.compareVersions();if (history.isRollback()) {dataSource.resetThreshold(history.getPreviousValue());}}
}

🤖 七、大模型与AI整合(选修)

题目

  1. 大模型输出标准化
    如何通过 Spring AI 的 OutputParser 将LLM自由文本转换为结构化JSON?设计字段缺失的降级策略

  2. 向量检索优化
    用 RedisVL 实现十亿级向量的分层索引,设计基于HNSW的查询加速方案

  3. 模型安全沙箱
    在 @Tool 方法中,如何通过 SecurityManager 实现 网络访问白名单 和 10秒超时中断

答案

题目1:输出标准化

@Bean
public OutputParser<ProductInfo> productParser() {return new JsonOutputParser<>(ProductInfo.class).withFallback(raw -> {return new ProductInfo(extractField(raw, "id"), "default"); // 降级});
}// 调用
String json = aiClient.generate("描述商品");
ProductInfo product = productParser().parse(json);

题目2:向量分层索引

# RedisVL索引配置
index_config = {"index_name": "products","prefix": "product:","storage_type": "HNSW",  # 分层导航"dims": 768,"M": 64,                 # 层间连接数"ef_construction": 200   # 构建精度
}
client.create_index(index_config)

题目3:安全沙箱实现

@Tool(name="WebSearch")
public String webSearch(String query) {SecurityManager sm = new SecurityManager();sm.checkPermission(new SocketPermission("api.safe.com:80", "connect"));return Executors.newSingleThreadExecutor().submit(() -> {Future<String> future = executor.submit(() -> callAPI(query));return future.get(10, TimeUnit.SECONDS);  // 10秒超时}).get();
}


📌 今日知识地图

模块核心考点
Java基础模式匹配性能
MySQL索引下推+在线DDL避坑
Redis/Kafka跨中心ID生成+位移归档
JVMCMS调优+堆外内存泄漏诊断
并发ForkJoin调优+StampedLock应用
Spring Cloud网关限流+安全审计+配置回滚
大模型输出解析+向量分层+安全沙箱

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/93532.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/93532.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/93532.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【音视频】瑞芯微、全志芯片在运动相机和行车记录仪产品分析

文章目录开头总结详细分析**1. 瑞芯微芯片的典型型号及特性****2. 运动相机场景的适用性****优势****劣势****3. 行车记录仪场景的适用性****优势****劣势****4. 与竞品芯片对比****5. 推荐方案选择****总结****1. 全志芯片的典型型号及特性****2. 运动相机场景的适用性****优势…

《清华级防护,了解一下?》

前言讲到渗透&#xff0c;我们不可避免会遇到有waf拦截咱们的攻击许多朋友在渗透测试中因为遇到WAF而束手无策&#xff0c;实际上所谓的BYPASS WAF实际上是去寻找位于WAF设备之后处理应用层数据包的硬件/软件的特性。利用特性构造WAF不能命中&#xff0c;但是在应用程序能够执行…

CANDB++中的CAN_DBC快速编辑方法,使用文本编辑器(如notepad++和VScode)

前言:在做工程机械CAN协议相关的软件开发与调试时&#xff0c;经常接触到DBC的使用&#xff0c;可以在CAN分析仪中加载DBC文件从而快速查看某条CAN报文或信号的含义&#xff0c;以及使用图形化的调试。而编辑DBC文件&#xff0c;正常是用CANDB来一条条添加&#xff0c;比较费时…

Tmux Xftp及Xshell的服务器使用方法

Tmux&#xff1a; Tmux是什么&#xff1a; 会话与进程&#xff1a; 命令行的典型使用方式是&#xff0c;打开一个终端窗口&#xff0c;在里面输入命令。用户与计算机的这种临时的交互&#xff0c;称为一次“会话”&#xff08;session&#xff09;。 会话的一个重要特点是&…

微服务远程调用完全透传实现:响应式与非响应式解决方案

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;精通Java编…

Kotlin集合概述

Kotlin 的集合类同样由两个接口派生&#xff1a; Collection 和 Map&#xff0c; Collection 和 Map 是 Java 集合框架的根接口&#xff0c;这两个接口又包含了 一些子接口或实现类Kotlin 集合与 Java 集合不同&#xff0c; Java 集合都是可变集合一一开发者可以向集合中添加、…

Mysql核心框架知识

Mysql核心框架 本文旨在梳理和理解 MySQL 的一些核心知识点&#xff0c;并结合常见面试题进行思考和总结。这些内容主要来源于我的个人学习与理解。 1. 事务 概念 事务指的是满足 ACID 特性的一组操作&#xff0c;可以通过 Commit 提交一个事务&#xff0c;也可以使用 Rollback…

C# NX二次开发:字符串控件StringBlock讲解

大家好&#xff0c;今天介绍ug二次开发过程中的一个叫字符串的控件&#xff0c;这个控件在块UI编辑器中可以使用。 下面是这个控件中的一些属性和方法&#xff1a; 1、 protected internal StringBlock(); // // 摘要: // Returns or sets the WideValue.…

【datawhale组队学习】n8n TASK01

教程地址&#xff1a;https://github.com/datawhalechina/handy-n8n/ 文章目录n8n节点的类别local-pc-deployn8n n8n 意思是 nodemation&#xff0c;是 node 与 automation 的组合词&#xff0c;读作 n-eight-n。 n8n 是一个开源的、基于节点的自动化工具&#xff0c;官方站点…

海洋牧场项目融资新曙光:绿色金融赋能蓝色经济发展

在海洋经济蓬勃发展的时代浪潮中&#xff0c;海洋牧场作为新兴的海洋产业模式&#xff0c;承载着保障国家粮食安全、促进海洋生态保护与可持续利用的重要使命。然而&#xff0c;海洋牧场项目的建设是一项庞大而复杂的系统工程&#xff0c;从前期的基础设施搭建、种苗培育&#…

51c大模型~合集170

自己的原文哦~ https://blog.51cto.com/whaosoft/14132244 #4DNeX 一张图&#xff0c;开启四维时空&#xff1a;4DNeX让动态世界 「活」起来 仅凭一张照片&#xff0c;能否让行人继续行走、汽车继续飞驰、云朵继续流动&#xff0c;并让你从任意视角自由观赏&#…

深入剖析以太坊虚拟机(EVM):区块链世界的计算引擎

引言&#xff1a;EVM——区块链世界的"计算引擎" 以太坊虚拟机&#xff08;Ethereum Virtual Machine&#xff0c;EVM&#xff09;是以太坊网络的核心创新&#xff0c;它不仅仅是一个执行环境&#xff0c;更是整个区块链生态系统的"计算引擎"。作为智能合…

深入分析 Linux PCI Express 子系统

深入分析 Linux PCI Express 子系统 一、PCI Express 工作原理 PCIe 是一种高速串行点对点互连协议&#xff0c;采用分层架构&#xff1a; #mermaid-svg-rsh0SW87JPR0aUxA {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid…

MySQL 运算符详解:逻辑、位运算与正则表达式应用

MySQL 运算符详解&#xff1a;逻辑、位运算与正则表达式应用 在 MySQL 中&#xff0c;运算符是构建复杂查询条件的基础。除了基础的算术和比较运算符&#xff0c;逻辑运算符、位运算符以及正则表达式的灵活运用&#xff0c;能让数据筛选更加精准高效。本文将系统讲解这些运算符…

<数据集>遥感飞机识别数据集<目标检测>

数据集下载链接https://download.csdn.net/download/qq_53332949/91702190数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;3842张 标注数量(xml文件个数)&#xff1a;3842 标注数量(txt文件个数)&#xff1a;3842 标注类别数&#xff1a;20 标注类别名称&#xf…

Windows从零到一安装KingbaseES数据库及使用ksql工具连接全指南

目录Windows从零到一安装KingbaseES数据库及使用ksql工具连接全指南前言第一部分&#xff1a;安装前准备1.1 系统要求检查1.2 下载安装包1.3 验证安装包完整性第二部分&#xff1a;安装KingbaseES2.1 启动安装程序2.2 接受许可协议2.3 选择授权文件2.4 设置安装目录2.5 选择安装…

Git+Jenkins 基本使用

一、什么是 JenkinsJenkins 是一个功能强大的应用程序&#xff0c;允许持续集成和持续交付项目&#xff08;持续部署&#xff09;&#xff0c;无论用的是什么平台。这是一个免费的源代码&#xff0c;可以处理任何类型的构建或持续集成。集成 Jenkins 可以用于一些测试和部署技术…

Linux第十三讲:线程同步和互斥

Linux第十三讲&#xff1a;线程同步和互斥1.线程互斥1.1进程线程间的互斥背景概念1.2什么是锁1.2.1认识锁&#xff0c;理解锁2.线程同步2.1条件变量2.2生产和消费模型2.3基于阻塞队列(blockqueue)的生产消费模型2.3.1单生产&#xff0c;单消费的阻塞队列模拟实现2.3.2多生产&am…

SAP 简单的AMDP demo 练习使用

SAP AMDP&#xff08;ABAP Managed Database Procedure&#xff09;是SAP的一项先进技术&#xff0c;用于在SAP HANA数据库上执行高性能的数据库操作。它允许ABAP开发人员编写数据库过程&#xff0c;这些过程可以在数据库级别上执行&#xff0c;从而实现更快的数据处理和更高的…

Maven JAR Plugin 插件使用说明

Maven JAR Plugin 插件使用说明1 Maven JAR Plugin 插件地址2 Maven JAR Plugin 特点3 maven-assembly-plugin 的用法3.1 无依赖项 maven-jar-plugin 配置3.2 有依赖项 maven-jar-plugin 配置3.3 配合maven-dependency-plugin 将依赖复制到指定位置1 Maven JAR Plugin 插件地址…