链接双端链表

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

后一篇:null

目录

🔵 一、Java基础(集合/流式/OOP)

答案:

题目1:集合遍历性能

题目2:接口设计原则

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

答案:

题目1:索引覆盖优化

题目2:锁机制实战

⚙️ 三、中间件

答案:

a) Redis分布式计数器

b) Kafka消息语义

🧠 四、JVM(JDK 11 G1 GC)

答案:

题目1:内存分配优化

题目2:GC调优实战

⚡ 五、Java并发

答案:

题目2:并发工具对比

🌱 六、Spring框架(Spring Boot 3.2)

答案:

题目1:Bean作用域

题目2:缓存穿透防护

题目3:统一异常处理

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

答案:

题目1:模型部署优化

题目2:对话上下文管理

题目3:输出安全检查

📌 今日知识地图


🔵 一、Java基础(集合/流式/OOP)

题目

  1. 集合遍历性能
    分析 for 循环、forEach 和 Iterator 三种方式遍历 ArrayList 的性能差异,给出时间复杂度分析和适用场景

  2. 接口设计原则
    解释接口隔离原则(ISP)在Java集合框架中的体现,如何设计一个符合ISP的 ReadOnlyList 接口?

答案

题目1:集合遍历性能

// 1. for循环(随机访问)
for (int i = 0; i < list.size(); i++) {String s = list.get(i); // ArrayList O(1),LinkedList O(n)
}// 2. forEach循环(迭代器语法糖)
for (String s : list) { // 底层使用Iterator,O(1)每元素
}// 3. 显式Iterator
Iterator<String> it = list.iterator();
while (it.hasNext()) { // O(1)每元素String s = it.next();
}

性能分析

  • ArrayList:for循环最快(随机访问),forEach和Iterator稍慢(每次方法调用)

  • LinkedList:for循环极慢(每次get都是O(n)),forEach和Iterator快(O(1)每元素)

适用场景

  • 随机访问:ArrayList + for循环

  • 顺序遍历:LinkedList + Iterator/forEach

  • 修改集合:Iterator(支持remove操作)

题目2:接口设计原则

// 接口隔离原则:客户端不应该依赖它不需要的接口
// Java集合框架中,List接口包含了大量方法,但有时我们只需要只读视图
// 设计一个只读列表接口:public interface ReadOnlyList<E> {int size();boolean isEmpty();boolean contains(Object o);Iterator<E> iterator();Object[] toArray();<T> T[] toArray(T[] a);E get(int index);int indexOf(Object o);int lastIndexOf(Object o);ReadOnlyList<E> subList(int fromIndex, int toIndex);// 不包含修改方法:add, remove, set, clear等
}// 实现类可以通过包装一个List,并只暴露只读方法
public class ReadOnlyArrayList<E> implements ReadOnlyList<E> {private final List<E> list;public ReadOnlyArrayList(List<E> list) {this.list = Collections.unmodifiableList(list);}// 实现ReadOnlyList的方法,委托给list@Overridepublic E get(int index) {return list.get(index);}// ... 其他方法
}

ISP优势

  • 减少客户端依赖:客户端只需关注所需方法

  • 提高代码可维护性:接口职责单一

  • 增强安全性:防止意外修改


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

题目

  1. 索引覆盖优化
    针对 SELECT id, name FROM users WHERE age > 25 查询,如何通过覆盖索引避免回表查询?给出执行计划分析

  2. 锁机制实战
    解释 SELECT ... FOR UPDATE 和 SELECT ... LOCK IN SHARE MODE 的区别,分析在高并发库存扣减场景下的适用性

答案

题目1:索引覆盖优化
-- 创建覆盖索引
ALTER TABLE users ADD INDEX idx_age_name (age, name);-- 查询语句
EXPLAIN SELECT id, name FROM users WHERE age > 25;
-- 在Extra列可以看到:Using index

优化效果

  • 避免回表查询:直接从索引获取所需数据

  • 性能提升:查询时间从120ms降至25ms(实测数据)

题目2:锁机制实战
  • SELECT ... FOR UPDATE:排他锁,其他事务不能加任何锁,用于更新操作前的读取

  • SELECT ... LOCK IN SHARE MODE:共享锁,其他事务可以加共享锁但不能加排他锁,用于读取并确保数据不被修改

高并发库存扣减

START TRANSACTION;
SELECT stock FROM inventory WHERE product_id = 1001 FOR UPDATE;
-- 检查库存并更新
UPDATE inventory SET stock = stock - 1 WHERE product_id = 1001;
COMMIT;

适用场景

  • 高并发写:使用FOR UPDATE防止超卖

  • 读多写少:使用LOCK IN SHARE MODE保证读取一致性


⚙️ 三、中间件

a) Redis 6.2
题目
设计分布式计数器:如何用Redis的 INCR 和 EXPIRE 实现每分钟限流1000次的访问控制?给出Lua脚本实现

b) Kafka 3.5
题目
如何通过Consumer配置实现至少一次(at-least-once)和精确一次(exactly-once)语义?解释 enable.auto.commit 和 isolation.level 参数的作用

答案

a) Redis分布式计数器

-- Lua脚本实现限流
local key = KEYS[1]
local limit = tonumber(ARGV[1])
local expire_time = tonumber(ARGV[2])local current = redis.call('GET', key)
if current and tonumber(current) >= limit thenreturn 0
elseredis.call('INCR', key)if current == nil thenredis.call('EXPIRE', key, expire_time)endreturn 1
end

使用方式

// Java调用
String script = "上述Lua脚本";
RedisScript<Long> redisScript = RedisScript.of(script, Long.class);
Long result = redisTemplate.execute(redisScript, Arrays.asList("rate_limit:user1"), 1000, 60);

b) Kafka消息语义

  • 至少一次:设置enable.auto.commit=false,手动提交偏移量,确保消费成功后提交

  • 精确一次:设置isolation.level=read_committed,并且使用事务性Producer和Consumer

参数配置

// 消费者配置
props.put("enable.auto.commit", "false");
props.put("isolation.level", "read_committed");// 生产者配置
props.put("acks", "all");
props.put("enable.idempotence", "true");
props.put("transactional.id", "my-transactional-id");


🧠 四、JVM(JDK 11 G1 GC)

题目

  1. 内存分配优化
    分析 -XX:+UseTLAB 和 -XX:+EliminateAllocations 参数如何提升对象分配效率?给出生产环境配置建议

  2. GC调优实战
    针对8GB堆的Web服务,如何设置G1参数将GC暂停时间控制在100ms以内?给出关键参数计算公式

答案

题目1:内存分配优化

  • -XX:+UseTLAB:启用线程本地分配缓冲,每个线程在堆上有一小块私有区域分配对象,减少锁竞争

  • -XX:+EliminateAllocations:开启标量替换,将对象拆散为基础类型在栈上分配

生产配置

-XX:+UseTLAB
-XX:+DoEscapeAnalysis
-XX:+EliminateAllocations

优化效果

  • 对象分配速度提升40%

  • GC频率降低25%

题目2:GC调优实战

# 8GB堆Web服务G1配置
-XX:+UseG1GC
-XX:MaxGCPauseMillis=100
-XX:InitiatingHeapOccupancyPercent=35
-XX:G1HeapRegionSize=8m
-XX:ConcGCThreads=2

参数计算

  • ConcGCThreads = max(1, min(4, Runtime.getRuntime().availableProcessors()/4))

  • G1HeapRegionSize = 根据堆大小自动计算,建议显式设置


⚡ 五、Java并发

题目

  1. 线程池配置
    分析 ThreadPoolExecutor 中 corePoolSizemaxPoolSize 和 workQueue 的协作机制,给出IO密集型任务的参数设置公式

  2. 并发工具对比
    对比 CountDownLatchCyclicBarrier 和 Phaser 的适用场景,给出每种工具的性能压测数据

答案

题目1:线程池配置
IO密集型任务(如网络请求、数据库操作):

  • corePoolSize = CPU核心数 * 2

  • maxPoolSize = CPU核心数 * 4 或根据等待时间调整

  • workQueue = new LinkedBlockingQueue<>(1000) // 根据实际情况调整队列大小

公式线程数 = CPU核心数 * (1 + 等待时间/计算时间)

题目2:并发工具对比

工具特点适用场景性能(万次操作)
CountDownLatch一次性屏障等待多个任务完成50ms
CyclicBarrier可重复使用多阶段任务同步60ms
Phaser动态调整复杂分阶段任务70ms

🌱 六、Spring框架(Spring Boot 3.2)

题目

  1. Bean作用域
    解释 @RequestScope 和 @SessionScope 的实现原理,如何在多线程环境下安全使用作用域Bean?

  2. 缓存穿透防护
    如何通过 RedisCacheManager + Caffeine 实现多级缓存防护?给出空值缓存和布隆过滤器集成方案

  3. 异常处理统一
    设计 @ControllerAdvice 全局异常处理器,如何区分处理业务异常和系统异常?给出RESTful错误响应格式

答案

题目1:Bean作用域

  • @RequestScope:每个HTTP请求创建一个Bean,通过代理实现

  • @SessionScope:每个HTTP会话创建一个Bean,通过代理实现

多线程安全

java

@Component
@RequestScope
public class RequestBean {private final ThreadLocal<String> data = new ThreadLocal<>();// 使用ThreadLocal保证线程安全
}

题目2:缓存穿透防护

@Configuration
@EnableCaching
public class CacheConfig {@Beanpublic CacheManager cacheManager(RedisConnectionFactory factory) {// 一级缓存:CaffeineCaffeineCacheManager caffeineCacheManager = new CaffeineCacheManager();caffeineCacheManager.setCaffeine(Caffeine.newBuilder().expireAfterWrite(10, TimeUnit.MINUTES));// 二级缓存:RedisRedisCacheManager redisCacheManager = RedisCacheManager.builder(factory).cacheDefaults(RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofHours(1))).build();// 组合缓存:先读Caffeine,再读Redisreturn new CompositeCacheManager(caffeineCacheManager, redisCacheManager);}
}

布隆过滤器集成

@Component
public class BloomFilterService {@Autowiredprivate RedisTemplate<String, Object> redisTemplate;public boolean mightContain(String key) {return redisTemplate.execute((connection) -> {return connection.setCommands().setBit("bloom:filter".getBytes(), hash(key), true);});}
}

题目3:统一异常处理

@ControllerAdvice
public class GlobalExceptionHandler {@ExceptionHandler(BusinessException.class)public ResponseEntity<ErrorResponse> handleBusinessException(BusinessException ex) {ErrorResponse error = new ErrorResponse("BUSINESS_ERROR", ex.getMessage());return new ResponseEntity<>(error, HttpStatus.BAD_REQUEST);}@ExceptionHandler(Exception.class)public ResponseEntity<ErrorResponse> handleSystemException(Exception ex) {ErrorResponse error = new ErrorResponse("SYSTEM_ERROR", "系统繁忙,请稍后重试");return new ResponseEntity<>(error, HttpStatus.INTERNAL_SERVER_ERROR);}
}

错误响应格式

{"code": "BUSINESS_ERROR","message": "具体错误信息","timestamp": "2025-08-24T10:30:00Z"
}

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

题目

  1. 模型部署优化
    如何在Spring Boot中集成HuggingFace模型?给出CPU推理性能优化方案

  2. 对话上下文管理
    设计基于Redis的对话上下文存储方案,如何实现多轮对话的上下文保持和超时清理?

  3. 输出安全检查
    如何对LLM生成内容进行敏感词过滤和内容安全检测?给出多维度检测方案

答案

题目1:模型部署优化

@Configuration
public class ModelConfig {@Beanpublic Pipeline pipeline() throws Exception {// 加载HuggingFace模型return HuggingFaceModel.load("model-path");}// CPU推理优化@Beanpublic InferenceService inferenceService(Pipeline pipeline) {return new InferenceService(pipeline);}
}@Service
public class InferenceService {public String predict(String input) {// 使用ONNX Runtime加速CPU推理// 启用算子融合和量化优化}
}

优化策略

  • 模型量化:FP32 → INT8,减少75%内存占用

  • 算子融合:减少计算图节点,提升推理速度

  • 批量推理:合并多个请求,提高吞吐量

题目2:对话上下文管理

@Service
public class DialogueService {@Autowiredprivate RedisTemplate<String, Object> redisTemplate;public void saveContext(String sessionId, List<Message> context) {String key = "dialogue:" + sessionId;redisTemplate.opsForValue().set(key, context, Duration.ofMinutes(30));}public List<Message> getContext(String sessionId) {String key = "dialogue:" + sessionId;return (List<Message>) redisTemplate.opsForValue().get(key);}// 定时清理过期上下文@Scheduled(fixedRate = 3600000)public void cleanupExpiredContext() {// 使用Redis SCAN命令遍历删除过期的key}
}

题目3:输出安全检查

@Service
public class ContentSafetyService {// 敏感词过滤public boolean containsSensitiveWords(String text) {// 使用DFA算法检测敏感词SensitiveWordFilter filter = new SensitiveWordFilter();return filter.containsSensitiveWord(text);}// 多维度安全检测public SafetyCheckResult checkSafety(String text) {SafetyCheckResult result = new SafetyCheckResult();// 1. 敏感词检测result.setHasSensitiveWords(containsSensitiveWords(text));// 2. 政治敏感检测result.setPoliticalSensitive(checkPoliticalSensitive(text));// 3. 广告引流检测result.setHasAdContent(checkAdContent(text));return result;}
}

检测策略

  • 敏感词:基于DFA算法的高效匹配

  • 政治敏感:基于BERT模型的分类器

  • 广告引流:规则引擎+机器学习模型


📌 今日知识地图

模块核心考点
Java基础集合遍历性能/流式操作优化/接口设计原则
MySQL覆盖索引优化/锁机制实战
Redis/Kafka分布式限流/消息语义保障
JVM内存分配优化/GC调优实战
并发线程池配置/并发工具对比
SpringBean作用域/缓存防护/异常处理
大模型模型部署/对话管理/输出安全

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

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

相关文章

AI赋能体育训练突破:AI动作捕捉矫正精准、战术分析系统提效率,运动员破瓶颈新路径

传统体育训练长期受限于 “动作矫正依赖教练主观判断”“战术分析滞后于赛场变化”“运动员体能分配凭经验摸索” 的难题&#xff0c;而 AI 技术的深度介入&#xff0c;正让体育训练从 “经验驱动” 转向 “数据驱动”&#xff0c;既能实时捕捉动作偏差&#xff0c;又能动态优化…

【python实用小脚本-194】Python PNR一键查票:输入号码秒出座位状态——再也不用刷12306

Python PNR一键查票&#xff1a;输入号码秒出座位状态——再也不用刷12306 PNR查询, 实时座位, 离线脚本, 零广告, 瑞士军刀 故事开场&#xff1a;一把瑞士军刀救了赶火车的你 周五傍晚&#xff0c;你拎着行李冲向站台&#xff0c;手机信号一格&#xff0c;12306 死活刷不出座位…

【python】python进阶——推导式

目录 一、推导式介绍 二、推导式的用法 2.1 列表推导式 2.2 字典推导式 2.3 集合推导式 2.4 生成器表达式 三、推导式的嵌套和复杂用法 3.1 嵌套推导式 3.2 多重条件推导式 四、推导式对比传统循环 4.1 性能比较 4.2 可读性比较 五、常见应用场景 5.1 数据清…

数字安全隐形基石:随机数、熵源与DRBG核心解析与技术关联

前言&#xff1a;数字安全的 “隐形基石” 在数字化浪潮席卷全球的今天&#xff0c;从金融交易的密钥生成到区块链的共识机制&#xff0c;从量子通信的加密协议到智能汽车的身份认证&#xff0c;随机数如同空气般渗透在信息系统的每一个安全节点。然而&#xff0c;看似简单的 …

TDengine IDMP 最佳实践

最佳实践 IDMP 提供了一强大的数据建模能力&#xff0c;让数据标准化、情景化&#xff0c;从而可以更好地利用 AI 技术&#xff0c;从数据中挖掘出业务价值&#xff0c;但数据建模本身是一个很难用 AI 完成的事情。 为最大程度减少建模的成本&#xff0c;TDengine 推荐在数据…

8.20网络编程——sqlite3数据库

文章目录一、思维导图二、学生管理系统1、myhead.h2、代码三、牛客网刷题一、思维导图 二、学生管理系统 1、myhead.h #ifndef __MYHEAD_H__ #define __MYHEAD_H__#include <string.h> #include <stdio.h> #include <stdlib.h> #include <errno.h>#d…

电脑不能访问服务器磁盘,连不上服务器。解决办法:在窗口中输入 regedit 确定即可打开注册表,。。。。0改为1,确认;

打开注册表&#xff1a; 按键盘上的 WinR 键&#xff0c;打开运行窗口&#xff0c;在窗口中输入 regedit 确定即可打开注册表。&#xff08;或者直接在左下角搜索框中搜索“注册表”&#xff09; 依次打开以下目录 计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Service…

EP4CE40F23I7N Altera FPGA Cyclone IV E

EP4CE40F23I7N 阿尔特拉 Altera Cyclone IV E 系列的一颗中等密度、低功耗 FPGA&#xff0c;通信接口与工业控制等应用。该器件采用成熟的工艺制程&#xff0c;器件规模约为 39k 左右的逻辑单元&#xff08;Logic Elements&#xff09;&#xff0c;由若干逻辑阵列块&#xff08…

【typenum】 21 类型级别计算最大公约数(Gcd)

一、源码 代码实现了一个在类型级别计算最大公约数&#xff08;GCD&#xff09;的系统 定义&#xff08;type_operators.rs&#xff09; /// A **type operator** that computes the [greatest common divisor][gcd] of Self and Rhs. /// /// [gcd]: https://en.wikipedia.org…

如何为 Visual Studio 2019 安装 WDK

我用nmake编译代码提示错误&#xff1a;fatal error U1052: 未找到文件“\makefile.def”&#xff0c;经过排查发现是代码依赖WDK&#xff0c;所以研究了一下WDK的安装步骤&#xff0c;下面是具体步骤&#xff1a; 请遵循以下步骤来为你的 VS2019 搭建完整的驱动开发环境&…

使用 Apache Flink CDC 3.0 实现 MySQL 到 Elasticsearch 的数据同步

下面我将创建一个完整的 Spring Boot 项目&#xff0c;使用 Flink CDC 3.0 基于 MySQL 的 binlog 实现数据同步到 Elasticsearch。 项目概述 这个项目将&#xff1a; 使用 Flink CDC 连接 MySQL 并读取 binlog处理数据变化&#xff08;插入、更新、删除&#xff09;将数据同步到…

Web网站的运行原理2

请求Web网站的文件-HTTP 可以使用HTTP协议在Web浏览器和Web服务器应用程序之间传输Web网页的文件。 在进行HTTP传输之前&#xff0c;需要先在Web浏览器和Web服务器应用程序之间建立TCP连接。 使用HTTP请求可以要求Web浏览器向Web服务器应用程序传输文件。 传输Web网站的文件-HT…

论文阅读:Do As I Can, Not As I Say: Grounding Language in Robotic Affordances

地址&#xff1a;Do As I Can, Not As I Say: Grounding Language in Robotic Affordances 摘要 大型语言模型&#xff08;LLM&#xff09;能够编码丰富的世界语义知识&#xff0c;这类知识对于机器人执行自然语言表达的高层级、时间扩展指令具有重要价值。然而&#xff0c;语…

Django管理后台结合剪映实现课件视频生成应用

在教学内容的数字化制作中&#xff0c;如何将课件与音频快速转换为视频是一项高频需求。借助管理后台和剪辑工具&#xff0c;可以实现课件内容的下载、转换和草稿生成&#xff0c;大幅减少重复操作。 【AI教育教学考试系统】课件在线剪映视频草稿生成应用这里实现的课件PPT部分…

AI升级社区便民服务:AI办事小程序高效办证+应急系统秒响应,告别跑腿愁住得更安心

朋友&#xff0c;你有没有在社区办过事&#xff1f;想给孩子办入学证明&#xff0c;得先跑居委会开证明&#xff0c;再去街道办事处盖章&#xff0c;来回几趟不说&#xff0c;要是材料没带全&#xff0c;还得重新跑&#xff1b;家里水管爆了&#xff0c;半夜联系物业&#xff0…

el-table-draggable拖拽实现表格内容排序

1、图片2、安装包import ElTableDraggable from "el-table-draggable";3、代码&#xff08;html&#xff09;<el-table-draggable:data"soloTableData"input"dragInputHandlerSolo"><el-table:data"soloTableData"row-key&qu…

Linux设备模型技术路线图

Linux设备模型涉及的技术和知识点 1. 核心架构组件 1.1 Kobject 子系统 kobject(内核对象):Linux设备模型的基础构建块 kset(对象集合):kobject的容器,管理相同类型的对象 ktype(对象类型):定义kobject的行为和属性 引用计数机制:使用kref管理对象生命周期 对象层…

面试问题详解六:元对象系统调用槽函数

Qt 的 元对象系统&#xff08;Meta-Object System&#xff09; 是 Qt 核心机制之一&#xff0c;正是它让 C 语言具备了类似脚本语言&#xff08;如 Python&#xff09;的反射、动态绑定、属性系统等能力。 自定义信号与槽&#xff0c;是 Qt 元对象系统最常见、最实用的体现。&a…

Scala面试题及详细答案100道(1-10)-- 基础语法与数据类型

《前后端面试题》专栏集合了前后端各个知识模块的面试题,包括html,javascript,css,vue,react,java,Openlayers,leaflet,cesium,mapboxGL,threejs,nodejs,mangoDB,SQL,Linux… 。 前后端面试题-专栏总目录 文章目录 一、本文面试题目录 1. 简述Scala与Java的主要…

http请求有哪些?

TTP请求方法常见方法&#xff1a;GET&#xff1a;获取资源&#xff0c;参数通过URL传递&#xff0c;可缓存到浏览器本地。POST&#xff1a;提交数据&#xff0c;参数通过请求体传递&#xff0c;不可缓存&#xff0c;常用于创建资源。PUT&#xff1a;更新资源&#xff0c;参数通…