当前位置: 首页 > article >正文

暑期实习面经记录(十四)(java)(4.2号补充下,闪闪改改)

本人最近面的被问的比较多的java八股先完成再完美1.如何设计一个扣减库存或者说秒杀抢券系统2.最近问这个问的比较多多线程-线程池-并发安全-场景2.锁-synconiezed,retranlock-可重入吗-怎么实现的2.1读写锁 怎么实现的AQS底层分布式锁用于什么场景2.2redis怎么自己去设计一个分布式锁某讯今天面试题目2.3多线程并发的线程安全问题2.3.1比如多线程去计数i2.3.2两个线程同时对arrayList进行一个add操作这个时候会出现什么情况2.3.3这里就会出现像扣减库存或者对立的一个对数据一致性要求高的或者低的场景-悲观锁2.4怎么去保证线程安全 锁机制的深度考察锁是并发编程的核心面试官会从多个维度考察你对锁的理解。1.synchronized的演进与锁升级面试官不仅会问synchronized的用法更会关注其底层原理和优化。锁升级过程JDK 1.6 之后synchronized进行了大量优化引入了偏向锁、轻量级锁和重量级锁的概念。你需要清晰描述从偏向锁到轻量级锁再到重量级锁的升级过程。偏向锁线程首次获取锁时会将锁对象的标记偏向该线程后续再次获取锁时无需进行任何同步操作。轻量级锁当有第二个线程尝试获取已被偏向的锁时偏向锁就会升级为轻量级锁。此时线程会通过 CAS 自旋的方式尝试获取锁避免了线程阻塞。重量级锁当轻量级锁的竞争加剧例如 CAS 多次失败锁会升级为重量级锁未获取到锁的线程会被阻塞进入等待队列。常见误区很多人认为只有在多线程激烈竞争时才会升级但实际上只要有另一个线程尝试获取锁偏向锁就会升级。2.ReentrantLock与 AQSReentrantLock是synchronized之外最常用的显式锁其核心是 AQS (AbstractQueuedSynchronizer)。AQS 原理AQS 是 Java 并发包的基石ReentrantLock、CountDownLatch、Semaphore等都是基于它实现的。它的核心是一个state状态变量和一个 FIFO 线程等待队列。你需要理解 AQS 如何通过 CAS 操作来修改state以及线程如何在获取锁失败后进入等待队列。公平锁 vs 非公平锁ReentrantLock可以指定为公平锁或非公平锁默认。性能差异非公平锁性能通常优于公平锁因为它允许新来的线程“插队”减少了线程唤醒和上下文切换的开销。公平锁则严格按照请求顺序分配锁避免了线程饥饿但性能开销更大。应用场景在对锁获取顺序有严格要求的场景下如银行交易系统应选择公平锁。3. 读写锁与StampedLock针对读多写少的场景面试官会考察你对读写锁的理解。ReadWriteLock的写锁饥饿问题标准的读写锁如ReentrantReadWriteLock遵循“读读共享读写互斥写写互斥”的原则。但在读操作非常频繁时写线程可能因为一直有读线程获取锁而无法执行导致“写锁饥饿”。StampedLock的引入为了解决ReadWriteLock的饥饿问题Java 8 引入了StampedLock。它提供了三种模式写锁、读锁和乐观读。乐观读是一种非阻塞的读操作性能极高但需要配合validate()方法检查在读期间数据是否被修改如果被修改则需要升级为读锁重新读取。 并发基石CAS 与原子类无锁并发是高性能并发的关键CAS 是其核心思想。CAS 原理CAS (Compare-And-Swap) 是一种硬件级别的原子指令。它的操作逻辑是比较内存中的值与期望值如果相等则更新为新值否则不操作。这个过程是原子的由 CPU 指令保证。原子类实现AtomicInteger、AtomicLong等原子类就是通过 CAS volatile实现的。它们在不使用重量级锁的情况下保证了线程安全在低竞争场景下性能非常高。CAS 的缺点ABA 问题一个值从 A 变成 B又变回 ACAS 会认为它没有变化。可以通过AtomicStampedReference带版本号的引用来解决。循环时间长开销大如果 CAS 长时间不成功会一直自旋给 CPU 带来很大开销。️ 并发工具与场景题面试官会结合具体场景考察你如何选择和使用并发工具。1. 线程池线程池是管理线程、复用资源的核心工具。核心参数必须熟练掌握ThreadPoolExecutor的 7 个核心参数核心线程数、最大线程数、空闲线程存活时间、时间单位、工作队列、线程工厂、拒绝策略及其作用。工作流程理解任务提交后线程池是如何根据当前线程数和队列状态来决定是创建新线程、放入队列还是执行拒绝策略的。2. 并发容器ConcurrentHashMap面试官会问它如何保证线程安全。你需要了解它在 JDK 1.7分段锁和 1.8synchronized CAS 红黑树中实现方式的演变。ThreadLocal考察其原理每个线程维护一个ThreadLocalMap以及可能导致的内存泄漏问题弱引用 Entry 的 key但 value 是强引用需要手动remove。3. 常见并发问题死锁能够说出死锁产生的四个必要条件互斥、请求与保持、不可剥夺、循环等待并给出解决方案如统一加锁顺序、使用tryLock()设置超时等。线程饥饿低优先级线程因为高优先级线程长期占用 CPU 而无法执行。使用公平锁是避免饥饿的一种方式。 高并发场景与 JVM 优化当面试进入高级阶段会涉及到系统层面的设计。1. 高并发场景设计面试官可能会抛出一些经典的系统设计题考察你的综合能力。秒杀系统如何应对瞬时高并发核心思路包括前端静态资源 CDN 缓存、按钮置灰、限流。网关层使用 Sentinel 等工具进行熔断降级。服务层Redis 预减库存使用 Lua 脚本保证原子性、消息队列如 Kafka异步下单削峰。缓存问题如何处理缓存穿透、击穿、雪崩穿透查询不存在的数据使用布隆过滤器 空值缓存。击穿热点 Key 失效使用互斥锁如 Redisson。雪崩大量 Key 同时过期设置随机过期时间 多级缓存。2. JVM 层面的锁优化JVM 会在运行时对锁进行优化以减少性能开销。锁消除JVM 在即时编译时如果发现某些锁对象不可能被其他线程访问到即不存在共享就会将这些锁操作直接消除。例如方法内部的StringBuffer操作。锁粗化JVM 会探测到一连串对同一对象的加锁和解锁操作并将它们合并为一次加锁和解锁操作减少锁的获取和释放次数。 2025 新趋势随着技术发展一些新的并发特性也成为面试考点。虚拟线程 (Virtual Threads)作为 Java 21 的重要特性虚拟线程也称协程旨在以极低的开销创建海量线程非常适合 I/O 密集型的高并发应用。理解它与平台线程传统线程的区别是未来的加分项。响应式编程通过异步和非阻塞的方式处理数据流也是应对高并发场景的一种重要范式。显式锁和隐式锁的概念1.lock是个类还是接口还是apiapi和接口一样吗Lockinterface语法接口ReentrantLockclass实现类lock() / unlock() / tryLock()API方法调用入口所以Lock 是 interface同时它也是 JUC 提供的一套锁 API。我们常说 “Lock API”指的是以 Lock 接口为核心的整套锁机制。2.Lock和它的一些实现类1.ReentrantLock最常用、独占可重入锁独占锁、可重入支持公平 / 非公平底层AQS用途替代 synchronized更灵活2.ReentrantReadWriteLock.ReadLock读锁共享锁共享锁多线程可同时加读锁底层AQS共享模式3.ReentrantReadWriteLock.WriteLock写锁独占锁独占锁写的时候完全互斥底层AQS独占模式3.AQS -Sync -实现类(四个) -Lock接口面向接口编程规范如何防止超卖在图片描述的秒杀流程中“通过唯一标识防止重复消费”是确保数据一致性的关键一环其核心思想就是幂等性Idempotence。简单来说幂等性就是同一个操作无论执行多少次产生的结果都是一样的。在秒杀场景中这意味着无论这条“扣减库存”的消息被消费多少次哪怕因为网络抖动、服务重启导致重复消费最终数据库里的库存只会被扣减一次。为了实现这一点通常有两种主流的技术方案它们都依赖于“唯一标识”唯一标识的构成首先你需要生成一个全局唯一的 ID 作为标识。这个 ID 通常由业务关键字段拼接而成例如用户ID_商品ID_订单号业务类型_时间戳_随机数这个唯一标识会随着消息一起传递。方案一数据库唯一索引推荐强一致性这是最简单、最可靠的方法。原理在数据库的订单表或库存流水表中添加一个字段例如order_no或deduction_id并为这个字段建立唯一索引Unique Key。执行过程当后台服务消费消息时首先尝试向数据库插入一条记录或者更新库存。这条记录包含了刚才生成的“唯一标识”。第一次执行数据库中没有这个 ID插入成功库存扣减。重复执行如果消息重复到达服务再次尝试插入。此时数据库检测到唯一索引冲突Duplicate Key会抛出异常。结果服务捕获到这个异常认为这是重复请求直接返回成功因为第一次已经处理过了不再执行扣减逻辑。优点利用数据库的原子性绝对可靠不会出现超扣。缺点会有一次数据库的写入冲突开销虽然很小。方案二Redis 标记位高性能防重利用 Redis 的原子性来拦截重复请求。原理利用 Redis 的SETNXSET if Not eXists命令。这个命令是原子性的只有当 key 不存在时才设置成功如果 key 已存在则设置失败。执行过程消费者拿到消息提取“唯一标识”。尝试执行SETNX deduplication:unique_id 1。第一次执行Redis 中没有这个 key设置成功。服务继续执行扣减库存逻辑。重复执行如果消息重复SETNX返回 0设置失败说明这个请求已经处理过了。结果服务直接返回成功不再执行后续的数据库操作。优点速度快不用写数据库就能拦截。缺点需要考虑 Redis 本身的可用性虽然概率极低且需要设置合理的过期时间防止 Redis 中堆积太多垃圾 key。

相关文章:

暑期实习面经记录(十四)(java)(4.2号补充下,闪闪改改)

本人最近面的被问的比较多的java八股先完成再完美1.如何设计一个扣减库存或者说秒杀抢券系统2.最近问这个问的比较多多线程->线程池->并发安全->场景2.锁->synconiezed,retranlock->可重入吗->怎么实现的2.1读写锁 怎么实现的;AQS底层&#xff1b…...

嵌入式AI开发实战:从MCU到模型部署全流程

1. 嵌入式AI开发实战:从入门到项目落地作为一名在嵌入式领域摸爬滚打多年的工程师,我深知AI技术给这个传统行业带来的变革。记得2018年第一次接触基于MCU的简单图像识别时,那种"原来嵌入式设备也能做AI"的震撼感至今难忘。如今&…...

OPCUA结构体数据处理全解析:C#如何高效读写ExtensionObject中的复杂数据

OPCUA结构体数据处理全解析:C#如何高效读写ExtensionObject中的复杂数据 在工业自动化与物联网系统中,OPCUA协议已成为设备间数据交换的事实标准。当面对复杂的自定义结构体数据时,ExtensionObject的处理往往成为开发者的痛点。本文将深入剖析…...

3步搞定iOS微信聊天记录完整导出:WeChatExporter终极指南

3步搞定iOS微信聊天记录完整导出:WeChatExporter终极指南 【免费下载链接】WeChatExporter 一个可以快速导出、查看你的微信聊天记录的工具 项目地址: https://gitcode.com/gh_mirrors/wec/WeChatExporter 还在为无法备份微信聊天记录而烦恼吗?微…...

如何轻松获取网页媒体资源?猫抓开源工具让资源提取效率提升3倍

如何轻松获取网页媒体资源?猫抓开源工具让资源提取效率提升3倍 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 你是否曾在浏览网页时遇…...

珠海内有哪些做专精特新,创新型中小企业。权代理事务通过率高

在珠海,众多专精特新、创新型中小企业在发展过程中,知识产权代理事务变得尤为重要,而珠海飞拓知识产权代理事务凭借其独特优势,成为了高通过率的代表。企业痛点催生专业服务在专精特新、创新型中小企业培育与申报过程中&#xff0…...

QT 生成动态链接库

QT 生成动态链接库 前言 一、创建新的动态库项目(Qt Creator) 1 新建项目 二 、 自动生成的文件结构 1 项目会包含一个导出宏定义头文件,例如 Test001_global.h: 2 在需要导出的类或函数前加上 TEST001_EXPORT(我自己测试不加也行): 3 crtl+B 或者点击左下角锤子 进行编译…...

Python胶水代码变高性能引擎(Mojo原生编译实战手记)

第一章:Python胶水代码变高性能引擎(Mojo原生编译实战手记)Python 以其简洁语法和丰富生态成为数据科学与系统集成的“胶水语言”,但其解释执行机制常在数值计算、实时推理等场景遭遇性能瓶颈。Mojo 作为新兴的系统级编程语言&…...

Linux系统学习:38张思维导图构建核心知识体系

1. Linux学习思维导图概述作为一名从嵌入式开发转战云计算的老兵,我深知系统化学习Linux的重要性。最近整理硬盘时翻出一套珍藏多年的学习资料——38张涵盖Linux核心知识体系的思维导图,这些图纸曾帮助我顺利通过RHCE认证,也指导过团队新人快…...

FastAPI + TinyDB并发陷阱与实战:告别数据错乱的解决方案

核心摘要本文针对在FastAPI框架下使用TinyDB(JSON文件数据库)时遇到的并发写入数据冲突、错乱问题,深入浅出地解释了问题根源,并提供了从“文件锁”到“内存队列”再到“乐观锁”的三种由浅入深的实战解决方案,帮助你根…...

利用快马平台与openclaw切换模型功能,快速构建待办事项应用原型

最近在尝试快速构建一个待办事项应用的原型时,发现InsCode(快马)平台的AI代码生成功能特别适合这种场景。通过平台内置的openclaw切换模型功能,可以快速比较不同AI模型生成的代码风格差异,大大缩短了原型开发周期。下面分享下我的实践过程&am…...

避坑指南:在华为Atlas 200DK A2上部署YOLOv8-pose模型前,如何用ONNX Runtime在CPU/GPU上验证推理流程

边缘部署前的关键验证:YOLOv8-pose模型在CPU/GPU环境下的ONNX Runtime推理实战 在AI模型边缘部署的实践中,一个经常被忽视却至关重要的环节是本地验证。许多工程师在将模型部署到华为Atlas 200DK A2等边缘设备时,常常跳过这一步骤直接进入板端…...

OpenClaw家装设计:Qwen2.5-VL-7B根据户型图生成3D效果示意图

OpenClaw家装设计:Qwen2.5-VL-7B根据户型图生成3D效果示意图 1. 为什么选择OpenClaw做家装设计自动化 去年装修新房时,我花了大量时间在设计师和施工队之间来回沟通。每次修改设计方案都需要等待设计师重新出图,周期长、成本高。直到发现Op…...

OpenClaw个性化设置:Qwen3.5-9B模型参数调优实战

OpenClaw个性化设置:Qwen3.5-9B模型参数调优实战 1. 为什么需要调整模型参数? 上周我在用OpenClaw自动处理一批技术文档时,遇到了一个奇怪的现象:同样的任务指令,有时候AI能完美执行,有时候却会输出一堆无…...

深入解析Camera-IMU联合标定:从理论到实践

1. 为什么需要Camera-IMU联合标定? 在机器人定位和三维重建领域,相机和IMU(惯性测量单元)是最常用的传感器组合。相机能提供丰富的环境特征信息,但在快速运动或弱光环境下容易失效;IMU可以稳定输出运动数据…...

轻舟体重管理大模型:赋能减重全病程管理,构建智能体重健康生态

在“健康中国2030”战略深入推进的背景下,慢性病防控与全民体重管理已成为公共卫生体系的重要议题。随着肥胖及相关代谢性疾病发病率持续上升,传统的体重干预模式已难以满足全人群、全生命周期的健康管理需求。在此趋势下,基于人工智能技术的…...

CMake 导言

为什么选择 CMake 在掌握 Linux 基础后,我们知道一个项目通常由多个源文件组成。想要构建这个项目,就需要按照一定的规则对源文件进行编译和链接,而这些规则通常需要在 Makefile 中定义。 但随着项目体量增大,手写 Makefile 会变得…...

如何高效突破Cursor试用限制:全功能AI编程助手解锁指南

如何高效突破Cursor试用限制:全功能AI编程助手解锁指南 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Youve reached your tr…...

SEO的发展趋势会是什么样的

SEO的发展趋势会是什么样的 在互联网的快速发展中,搜索引擎优化(SEO)技术一直是网站排名和流量增长的关键。随着技术的不断进步,SEO的发展趋势也在不断演变。未来SEO的发展趋势会是什么样的呢?本文将从多个角度探讨这…...

BiliBiliCCSubtitle:3分钟掌握B站字幕下载与格式转换的终极指南

BiliBiliCCSubtitle:3分钟掌握B站字幕下载与格式转换的终极指南 【免费下载链接】BiliBiliCCSubtitle 一个用于下载B站(哔哩哔哩)CC字幕及转换的工具; 项目地址: https://gitcode.com/gh_mirrors/bi/BiliBiliCCSubtitle 你是否经常需要从B站视频中提取字幕内…...

Companion Object - 伴生对象 类比java中的什么?

这是一个非常经典且准确的对比问题。简单来说,Kotlin 中的 companion object(伴生对象)核心类比的是 Java 中的 static(静态)成员。在 Java 中,如果你想让一个成员(方法或变量)属于类…...

根据给定文本内容,适合的标题可以是:“‘三泵排水电气控制系统及组态设计的梯形图、接线图原理图”...

自动排水控制设计3泵排水三泵排水电气控制系统排水组态 我们主要的后发送的产品有,带解释的梯形图接线图原理图图纸,io分配,组态画面每逢暴雨天,物业师傅盯着排水泵的手机都要刷出火星子——生怕哪台泵罢工,地下室直…...

AutoDL上传大文件夹实操教程|避坑指南(解决中文路径、端口报错等高频问题)

前言:做深度学习、大模型部署的同学,大概率会用到AutoDL云GPU(性价比高、配置灵活,尤其适合毕设、小项目实操)。但很多新手在上传本地大文件夹(比如包含模型脚本、数据集、配置文件的项目文件夹&#xff09…...

数据自主权:WeChatMsg让微信聊天记录回归用户掌控

数据自主权:WeChatMsg让微信聊天记录回归用户掌控 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we/WeChatMsg…...

Nuki:多芯片组合,覆盖全场景需求

当下“以家庭为中心”的生活趋势,推动了智能家居需求激增,智能门禁作为家庭安全与便捷的核心,却因传统门锁适配性差、智能锁安装繁琐等问题发展受限,设备制造商亟需能简化无线开发、提升能效且满足安全认证的解决方案,…...

OpenClaw多模型切换指南:Qwen3.5-9B与Llama3混合调度实战

OpenClaw多模型切换指南:Qwen3.5-9B与Llama3混合调度实战 1. 为什么需要多模型切换? 去年我在搭建个人AI工作流时,发现单一模型很难满足所有需求。用Qwen处理文档时效果惊艳,但遇到代码生成任务就显得力不从心;换成专…...

Python入门第6章:字典(键值对数据结构)

Python入门第6章:字典(键值对数据结构) 大家好,欢迎来到Python入门系列的第6章内容!在前5章里,我们学会了变量、数据类型、运算符、if语句等基础知识点,也接触了列表、元组这两种序列数据结构—…...

油气勘探数据可视化流程图制作

一、前言 油气勘探属于高投入、高风险、数据密集型行业,勘探过程中会产生地震数据、测井数据、地质录井数据、试油试采数据等多维度海量信息。数据可视化流程图能够将复杂的勘探流程、数据流转逻辑、分析决策路径进行结构化呈现,既便于团队内部技术交底…...

千问3.5-9B提示词工程:优化OpenClaw任务拆解质量

千问3.5-9B提示词工程:优化OpenClaw任务拆解质量 1. 为什么需要优化提示词 去年冬天第一次用OpenClaw自动整理会议纪要时,我被它的"耿直"气笑了——让它"提取关键结论",结果给我返回了整段录音的文字版,连&…...

循环冷却水流量示意图设计 建筑水流量示意图绘制教程

一、引言 在建筑给排水、暖通空调及工业循环水系统设计中,循环冷却水流量示意图与建筑水流量示意图是核心技术图纸之一,其作用是直观呈现水流路径、管径规格、流量分配、设备连接关系及压力节点参数,为系统施工、调试、运维及故障排查提供可…...