【架构面试】二、消息队列和MySQL和Redis
MQ
MQ消息中间件
-
问题引出与MQ作用
- 常见面试问题:面试官常针对项目中使用MQ技术的候选人提问,如如何确保消息不丢失,该问题可考察候选人技术能力。
- MQ应用场景及作用:以京东系统下单扣减京豆为例,MQ用于交易服和京豆服务通信。其主要作用是系统解耦和流量控制,实现系统高可用,如隔离上下游不稳定因素、服务降级;还能在流量突增时削峰填谷 。
-
消息丢失问题
-
消息丢失环节:消息从生产到消费分为生产、存储、消费三个阶段。生产阶段处理好返回值和异常可避免丢失;存储阶段由MQ保证,如broker做副本;消费阶段接收消息后执行完业务逻辑再确认可防止丢失。
-
-
-
消息丢失检测:在生产端给消息指定消息版本号,通过拦截器注入消息;消费端用拦截器检测版本连续性或消费状态,实现不侵入业务代码的消息检测。
-
-
解决方案:MQ的可靠消息投递机制
-
-
消息重复消费问题
- 问题转化:消息重复消费问题可转化为消费端幂等性问题。
- 实现方案:以扣减京豆为例,在数据库建消息日志表,含消息id和执行状态字段,消费消息前检查是否已存在,避免重复执行,实现幂等操作。还可基于关系数据库实现唯一约束方案。
- 全局唯一ID生成:解决消息丢失和重复消费问题,需掌握全局唯一ID生成技术,如数据库自增主键、UUID、Redis、Twitter Snowflake算法等,选型要结合业务平衡考虑,作者倾向Snowflake算法并会改造以适应业务。
-
消息积压问题
- 问题分析:消息积压反映性能问题,主要出在消费阶段。因为消息发送后才可能积压,且消息队列单节点存储性能较高,不易出现问题。
- 解决思路:现场突发问题时,临时扩容消费端数量并降低非核心业务,抗住流量;排查消费端业务逻辑问题,通过监控日志分析;若消费端处理能力不足,水平扩容消费端,同时同步扩充分区数量,确保消费者实例数和分区数相等,如Kafka中一个分区只能被一个消费者消费,增加分区可提高消费能力。
-
总结与思考
- 重点回顾:总结MQ消息队列热门问题解决方案,包括保证消息不丢失(了解各阶段丢失情况、监控及基于可靠消息投递解决)、不被重复消费(实现消费端幂等性)、处理消息积压(按应急处理、排查优化、扩容的思路)。强调面试时展示解决问题的思维过程更重要。
- 拓展知识:应聘基础架构还需掌握消息中间件其他知识,如选型、模型区别、高吞吐原理、序列化协议及内存管理等。
- 思考题:卡夫卡实现高性能的方式,鼓励观众留言讨论。
MySQL
MySQL索引原理与优化
- 索引在面试中的重要性:面试常考察数据库知识,索引原理和优化方法是重要切入点。以电商订单中心系统为例,为避免文件排序,应建立status和create time的组合索引。面试官还会追问索引底层数据结构、InnoDB选择B+树的原因、查看执行计划、索引失效情况及优化方法等问题。
- MySQL索引原理:MySQL常用索引有B+树索引、哈希索引、全文索引,InnoDB是默认存储引擎且常用B+树索引。创建表时,若有主键则用其作为主键索引;若无,InnoDB会生成隐藏主键。通过创建商品表并插入数据,展示B+树索引的构建和查询过程。B+树节点含多个子节点,父节点数据值会出现在子节点中,叶子节点包含所有数据值且形成链表。查询数据时,B+树自顶向下查找,如查询数据值15,仅需三次IO操作,体现其查询效率优势。若通过辅助索引查询,需先找到主键值,再通过主键索引查询,此过程称为回表。
- B+树索引的优势:与其他索引类型相比,B+树只在叶子节点存储数据,单个节点数据量小,相同磁盘IO次数可查询更多节点;叶子节点的双向链表结构适合范围查找,而B树不具备;B+树搜索复杂度为O(logdN) ,数据量达千万级别时,树高仍能维持在3 - 4层,磁盘IO操作次数少,优于二叉树;哈希表适合等值查询,不适合范围查找,B+树适用场景更广泛。
- 索引执行计划:通过查看执行计划(如possible key、key、key length等参数),可分析索引详情,其中type字段描述数据扫描类型,不同扫描类型效率不同。以like查询为例,分析索引失效原因,当查询优化器预估走索引代价比全表扫描大时,会放弃使用索引。
- 常见索引优化方法:
- 前缀索引:用字段前几个字符建立索引,可减少索引字段大小,提高查询速度,但存在局限性,如无法用于order by、不能用作覆盖索引。
- 覆盖索引:查询字段在B+树叶子节点都能找到,可避免回表,减少IO操作,如建立商品id、名称、价格的组合索引,查询这几个字段时无需回表。
- 联合索引:遵循最左匹配原则,建立时应将区分度大的字段排在前面,提高索引过滤概率。区分度是字段不同值个数除以表总行数,性别区分度小,不适合建索引或放联合索引前列;ID区分度大,适合建索引或放前列。
MySQL事务隔离级别和锁
- MySQL事务隔离级别与锁机制基础
- 事务隔离级别:用于多线程操作数据库时确保数据准确性,分为读未提交、读已提交、可重复读和串行化读。读未提交隔离度低,虽性能最高但会导致脏读、不可重复读和幻读,实际项目很少使用;读已提交解决了脏读问题,但仍存在不可重复读和幻读可能;可重复读是InnoDB引擎默认级别,能解决脏读和不可重复读,但幻读问题依旧存在;串行化读隔离级别最高,通过加锁实现,性能最低 。
- 锁机制概念:锁机制分为悲观锁和乐观锁。悲观锁认为数据冲突可能性大,利用select for update语句加锁避免数据意外修改;乐观锁认为冲突可能性小,借助CAS机制,通过对比时间戳或版本号实现版本控制。
- 脏读、不可重复读和幻读详解
- 脏读:脏读指读取到未提交事务的数据。并发事务A和B,A读取并更新数据未提交时,B读取到A更新后的数据,若A回滚,B读到的数据就是过时的,这种情况仅在读未提交隔离级别下出现。
- 不可重复读:不可重复读是指事务A读取数据后,事务B更新了该数据,导致A再次读取时数据不一致。读未提交和读已提交隔离级别会出现此问题,升级事务隔离级别可解决,如MySQL InnoDB默认的可重复读级别。
- 幻读:幻读是在同一事务内,相同查询语句不同时间执行得到不同结果集。解决幻读不能简单升级隔离级别,MySQL InnoDB引入间隙锁,面试时需掌握间隙锁及与行锁结合的相关知识。
- 死锁的产生与解决
- 死锁产生原因:死锁多发生在多线程争抢资源时,线程相互等待形成死锁状态。其产生有互斥、持有并等待、不可剥夺、循环等待四个必要条件,只有四个条件同时满足才会发生死锁。
- 死锁避免方法:避免死锁可破坏产生条件,如一次性申请所有资源破坏持有并等待条件;申请不到资源时主动释放已占资源破坏不可剥夺条件;按需申请资源,按资源序号顺序申请,破坏循环等待条件。
- 数据库领域应用开发者需掌握的内容及作业
- 需掌握内容:从数据库领域应用开发者角度,需掌握数据库设计基础(基本范式、表视图索引外键等概念、数据类型使用、业务实体关系与数据库结构映射、ORM开发)、数据库隔离级别(4种隔离级别基础知识、MVCC和锁机制进阶内容、不同索引类型及底层结构算法)、SQL优化(调试技巧、利用索引、分析执行计划)、数据库架构设计(高并发场景解决方案,如读写分离、分库分表)。
- 作业:思考并回答在面试中如何回答好MVCC和乐观锁的区别。
MySQL 优化查询方案
- MySQL在高流量场景下的优化问题
- 缓存的局限性:在电商订单中心场景,用Redis作MySQL缓存无法解决高流量问题,因其缓存命中率低,大量请求仍会到达数据库。
- 读写分离的必要性:互联网系统读写请求差异大,读写分离是提升MySQL并发的首选方案,通过将MySQL集群拆分成主从结构实现。
- 应对面试官套路的准备要点
- 架构设计思路:读多写少场景下,缓存有局限,读写分离才是提升系统并发能力的关键。
- 主从复制原理:深入了解MySQL主从复制的原理、问题及解决方案,其依赖bin log,分为写入bin log主库、同步binlog、回放binlog三个阶段。
- 技术认知抽象:从实践出发,做到技术的认知抽象,从方法论层面看待设计。
- MySQL主从复制的详细过程
- 集群结构:一个主库通常搭配2 - 3个从库,主库收到事务请求后,先写入bin log,提交事务更新数据并响应客户端;从库创建IO线程接收主库bin log日志写入中继日志并响应主库;从库再创建回放线程读中继日志更新数据,实现主从数据一致。
- 复制模型:MySQL主从复制有同步复制、异步复制、半同步复制三种模型。半同步复制介于同步和异步之间,能降低主库宕机时的数据丢失风险。
- 解决MySQL主从复制延迟及扩展问题
- 延迟问题解决方案:包括使用数据冗余(注意参数大小影响)、使用缓存(会带来数据和缓存一致性问题)、直接查询主库(需谨慎,避免影响主库性能)。
- 数据库使用变化及实现方式:主从分离后数据库使用需区分主从库地址和读写操作。工程代码实现数据访问有两种方式,一是提前配置数据源在代码逻辑中判断;二是独立部署代理中间件(如My Cat),但存在性能损耗和运营复杂的问题。
- 技术抽象能力:中高级研发工程师面试时,除掌握上述内容外,还应展示技术抽象能力,如理解复制状态机机制及其在MySQL主从复制中的应用,许多存储系统或数据库都采用类似方法实现数据复制和备份恢复。
分库分表
- 分库分表问题引入
- 在业务发展、数据量增加及读写分离后,写入压力增大导致数据库性能下降,引出分库分表方案。
- 分库分表常见策略有垂直拆分、水平拆分、垂直水平拆分。面试中不仅要知晓策略,更要能阐述整体设计方案与技术实现思路。
- 分库分表场景与策略选择
- 分库分表场景:数据量过大致使事务执行缓慢时考虑分表;单库性能无法满足高并发需求时进行分库。
- 垂直拆分:依据数据业务相关性拆分,常伴随系统架构调整,可隔离业务数据、利于架构扩展,但无法解决单一业务数据膨胀问题。
- 水平拆分:将单库表数据按规则拆分到多个库表,如哈希取模(把单表数据按哈希取模拆分到多个相同结构表中)和范围分片(按某字段区间拆分,常见按商品所属品类分配 )。范围分片可预估业务,但存在数据分布不均和热点数据问题,处理手段有垂直扩展(提升单机处理能力)和分配原数据(灵活性高,但实现复杂,需保证分配原数据服务高可用)。
- 垂直水平拆分:先垂直拆分不同类型数据到不同库,再水平拆分使单表数据量合理,提升性能。
- 分库分表后的数据查询问题:分库分表后传统查询方式受限,可通过将聚合查询数据同步到ES、单独存储计数数据、利用大数据技术处理报表数据等方式解决。
- new sql在面试中的应用及作业
- new sql:作为下一代存储技术,具备高性能、高可用、弹性扩容且兼容SQL标准和保障事务等优势,有可能取代MySQL。面试时可借此展示技术视野,提前了解其数据库原理,从与现有关系数据库区别切入讨论。
- 作业:思考数据库分片时商品关联表的处理方式。
文章目录
- MQ
- MQ消息中间件
- MySQL
- MySQL索引原理与优化
- MySQL事务隔离级别和锁
- MySQL 优化查询方案
- 分库分表
- 缓存
- Redis
- 缓存常见问题
缓存
Redis
- Redis线程模型
- 面试回答要点:回答Redis线程模型问题不能仅停留在单线程层面,应补充相关知识,如Redis并非完全单线程,网络IO和读写操作由一个线程完成,但持久化、集群同步等由其他线程执行。
- Redis单线程速度快的原因:主要原因包括大部分操作在内存中完成且采用高效数据结构;单线程模型避免多线程竞争和线程切换开销,不会出现死锁问题;采用IO多路复用机制处理大量客户端socket请求,基于非阻塞IO模型,读写流程不阻塞。
- 不同版本线程模型特点:Redis 4.0之前是典型单线程模型;4.0之后增加多线程支持,体现在数据异步删除功能上;6.0之后采用多个IO线程处理网络请求,但读写命令仍由单线程处理,以提高网络请求处理并行度。
- Redis数据持久化
- 持久化目的与方式:Redis为防止内存数据随服务器重启丢失,将数据存储到磁盘,有AOF日志、RDB快照、混合持久化三种方式。
- AOF日志原理与特点:AOF日志记录Redis收到的每一条命令,以文本形式追加到文件中,是写后日志,先执行命令再记录日志。优点是避免记录错误命令且不阻塞当前写操作,缺点是数据可能丢失,写入磁盘时可能阻塞后续操作。
- RDB快照原理与考点:RDB快照将某一时刻的内存数据以二进制写入磁盘,做数据恢复时直接读入内存,能快速恢复。考点包括RDB做快照时会阻塞线程,Redis提供save和bg save命令,默认使用bg save命令创建子线程操作避免阻塞;RDB做快照时数据可修改,利用bgcl子线程处理,写操作时修改数据会复制副本,子线程将副本写入RDB文件,主线程可直接修改原数据。
- 混合持久化:Redis 4.0后增加混合持久化方式,先以RDB方式写入文件,再将后续命令以AOF格式存储,既保证重启速度又降低数据丢失风险。
- Redis高可用方案
- 主从复制:是Redis高可用服务的基础保障,实现一主多从模式,可读写分离承载更多并发操作,但主从服务器出现故障时需手动恢复。
- 哨兵模式:为解决主从复制故障手动恢复问题,Redis增加哨兵模式,可监控主从服务器并提供自动恢复功能。
- Redis集群(Redis Cluster):是分布式去中心化运行模式,在Redis 3.0版本推出。采用哈希槽处理数据和实例之间的映射关系,一个分片集群有16384个哈希槽。哈希槽映射到具体Redis实例有平均分配(使用cluster create命令创建集群时自动分配)和手动分配(使用cluster meet等命令手动创建连接并指定哈希槽个数)两种方案,能提高Redis服务读写性能 。
缓存常见问题
- 缓存设计问题引入及面试套路
- 基于上一集redis原理学习,本集从应用案例切入,引出缓存雪崩、并发、穿透等常见设计问题。
- 面试中常给定场景,让候选人找出问题并提供解决方案,以电商平台商品详情页缓存问题为例展开后续探讨。
- 缓存穿透问题及解决方案
- 问题:查询特定key时,缓存和数据库都不命中,每次都查询数据库,若被恶意利用,会使数据库压力剧增甚至当机。
- 解决方案:给指定key预设默认值(如空字符串),业务代码据此判断是否查询数据库,避免无效请求穿透缓存到数据库。
- 缓存并发问题及解决方案
- 问题:缓存失效时多个客户端并发请求同一key,都查询数据库并更新缓存,增加数据库压力且占用缓存资源。
- 解决方案:客户端请求先读缓存,未命中则用redis的setnx方法设置锁定状态,设置成功的请求查询数据库并更新缓存,设置失败的请求等待后重新查询,确保同一时间只有一个请求操作数据库和缓存。
- 缓存雪崩问题及解决方案
- 问题:开发中常将缓存过期时间设为固定常量,大量缓存key同时过期,高并发请求下会使数据库压力瞬间增大,引发缓存雪崩。
- 解决方案:一是随机打散缓存失效时间,在原失效时间基础上加随机值;二是设置缓存不过期,通过后台服务更新缓存数据,可避免雪崩和一定程度上的并发问题。
- 动态缓存热点数据策略设计
- 场景:在电商平台,只缓存用户经常访问的top1000商品。
- 策略:通过缓存系统的排序队列,按商品访问时间排名,定期过滤排名靠后的商品并从数据库读取新商品加入。请求到达时,先从队列获取商品id,再从另一缓存结构读取商品信息。
- 缓存操作与业务分离架构设计
- 问题:缓存操作与业务代码耦合会导致代码可维护性差,不符合高内聚低耦合设计原则。
- 解耦思路:通过mysql binlog、Kafka、MQ实现解耦。如用户添加配置信息到mysql,binlog记录更新,Kafka获取日志解析后通过MQ发送数据,应用系统将MQ数据更新到redis。
- 总结与作业布置
- 总结:推荐预设值方案解决缓存穿透,用redis的setnx方法解决缓存并发,通过随机打散失效时间或设置缓存不过期解决缓存雪崩。同时强调使用缓存要考虑缓存与数据库一致性、缓存容量限制、数据大小等问题。
- 作业:要求用redis实现一个计数器。
相关文章:
【架构面试】二、消息队列和MySQL和Redis
MQ MQ消息中间件 问题引出与MQ作用 常见面试问题:面试官常针对项目中使用MQ技术的候选人提问,如如何确保消息不丢失,该问题可考察候选人技术能力。MQ应用场景及作用:以京东系统下单扣减京豆为例,MQ用于交易服和京豆服…...
A4988一款常用的步进电机驱动芯片
A4988 是一款常用的步进电机驱动芯片,广泛应用于 3D 打印机、CNC 机床和小型自动化设备中。它可以驱动多种类型的步进电机,但需要根据电机的参数(如电压、电流、相数等)进行合理配置。 一、A4988 的主要特性 驱动能力:…...
TypeScript语言的语法糖
TypeScript语言的语法糖 TypeScript作为一种由微软开发的开源编程语言,它在JavaScript的基础上添加了一些强类型的特性,使得开发者能够更好地进行大型应用程序的构建和维护。在TypeScript中,不仅包含了静态类型、接口、枚举等强大的特性&…...
A星算法两元障碍物矩阵转化为rrt算法四元障碍物矩阵
对于a星算法obstacle所表示的障碍物障碍物信息,每行表示一个障碍物的坐标,例如2 , 3; % 第一个障碍物在第二行第三列,也就是边长为1的正方形障碍物右上角横坐标是2,纵坐标为3,障碍物的宽度和高度始终为1.在rrt路径规划…...
什么情况下,C#需要手动进行资源分配和释放?什么又是非托管资源?
扩展:如何使用C#的using语句释放资源?什么是IDisposable接口?与垃圾回收有什么关系?-CSDN博客 托管资源的回收有GC自动触发,而非托管资源需要手动释放。 在 C# 中,非托管资源是指那些不由 CLR(…...
【最长上升子序列Ⅱ——树状数组,二分+DP,纯DP】
题目 代码(只给出树状数组的) #include <bits/stdc.h> using namespace std; const int N 1e510; int n, m; int a[N], b[N], f[N], tr[N]; //f[i]表示以a[i]为尾的LIS的最大长度 void init() {sort(b1, bn1);m unique(b1, bn1) - b - 1;for(in…...
day37|完全背包基础+leetcode 518.零钱兑换II ,377.组合总和II
完全背包理论基础 完全背包与01背包的不同在于01背包的不同物品每个都只可以使用一次,但是完全背包的不同物品可以使用无数次 在01背包理论基础中,为了使得物品只被使用一次,我们采取倒序遍历来控制 回顾:>> for(int j …...
【VM】VirtualBox安装ubuntu22.04虚拟机
阅读本文之前,请先根据 安装virtualbox 教程安装virtulbox虚拟机软件。 1.下载Ubuntu系统镜像 打开阿里云的镜像站点:https://developer.aliyun.com/mirror/ 找到如图所示位置,选择Ubuntu 22.04.3(destop-amd64)系统 Ubuntu 22.04.3(desto…...
Qt事件处理:理解处理器、过滤器与事件系统
1. 事件 事件 是一个描述应用程序中、发生的某些事情的对象。 在 Qt 中,所有事件都继承自 QEvent ,并且每个事件都有特定的标识符,如:Qt::MouseButtonPress 代表鼠标按下事件。 每个事件对象包含该事件的所有相关信息ÿ…...
DeepSeek 云端部署,释放无限 AI 潜力!
1.简介 目前,OpenAI、Anthropic、Google 等公司的大型语言模型(LLM)已广泛应用于商业和私人领域。自 ChatGPT 推出以来,与 AI 的对话变得司空见惯,对我而言没有 LLM 几乎无法工作。 国产模型「DeepSeek-R1」的性能与…...
【论文复现】基于Otsu方法的多阈值图像分割改进鲸鱼优化算法
目录 1.摘要2.鲸鱼优化算法WOA原理3.改进策略4.结果展示5.参考文献6.代码获取 1.摘要 本文提出了一种基于Otsu方法的多阈值图像分割改进鲸鱼优化算法(RAV-WOA)。RAV-WOA算法能够在分割灰度图像和彩色图像时,自动选择最优阈值,并确…...
Hive之数据定义DDL
Hive之数据定义DDL 文章目录 Hive之数据定义DDL写在前面创建数据库查询数据库显示数据库查看数据库详情切换当前数据库 修改数据库删除数据库创建表管理表(内部表)外部表管理表与外部表的互相转换 修改表重命名表增加、修改和删除表分区增加/修改/替换列信息 删除表 写在前面 …...
Golang 应用的 Docker 部署方式介绍及使用详解
本文将介绍如何使用 Docker 部署一个基于 Go 语言的后台服务应用 godco,并介绍如何配置 MongoDB 数据库容器的连接,确保应用能够成功启动并连接到容器方式部署的mongoDB数据库。 前提条件 1.已安装 Docker/Podman 2.已安装 MongoDB 数据库容器ÿ…...
SuccessFactors OData OAuth with SAP IAS-generated SAML assertion
导读 IAS:一句话说明白。SAP相关的系统可以通过IAS登录,只要IAS登录,其他系统免密登录。 作者:vivi,来源:osinnovation 上图有三个角色:brower,就是自己的浏览器,sp就是我们的目标…...
vue入门到实战 三
目录 3.1 v-bind 3.1.1 v-bind指令用法 编辑3.1.2 使用v-bind绑定class 3.1.3 使用v-bind绑定style 3.2.1 v-if指令 3.2.1 v-if指令 3.2.2 v-show指令 3.3 列表渲染指令v-for 3.3.1 基本用法 3.3.2 数组更新 3.3.3 过滤与排序 3.4 事件处理 3.4.1 使用v-on指令…...
音视频入门基础:RTP专题(7)——RTP协议简介
一、引言 本文对RTP协议进行简介。在简介之前,请各位先下载RTP的官方文档《RFC 3550》。该文档总共有89页,本文下面所说的“页数”是指在pdf阅读器中显示的页数: 二、RTP协议简介 根据《RFC 3550》第5页,实时传输协议(…...
06-机器学习-数据预处理
数据清洗 数据清洗是数据预处理的核心步骤,旨在修正或移除数据集中的错误、不完整、重复或不一致的部分,为后续分析和建模提供可靠基础。以下是数据清洗的详细流程、方法和实战示例: 一、数据清洗的核心任务 问题类型表现示例影响缺失值数值…...
《逆向工程核心原理》第三~五章知识整理
查看上一章节内容《逆向工程核心原理》第一~二章知识整理 对应《逆向工程核心原理》第三章到第五章内容 小端序标记法 字节序 多字节数据在计算机内存中存放的字节顺序分为小端序和大端序两大类 大端序与小端序 BYTE b 0x12; WORD w 0x1234; DWORD dw 0x12345678; cha…...
影视文件大数据高速分发方案
在当今的数字时代,影视行业的内容创作和传播方式经历了翻天覆地的变化。随着4K、8K高清视频的普及,以及虚拟现实(VR)和增强现实(AR)技术的发展,影视文件的数据量正以前所未有的速度增长。这就要求行业内的参与者必须拥有高效的大数据传输解决…...
使用朴素贝叶斯对散点数据进行分类
本文将通过一个具体的例子,展示如何使用 Python 和 scikit-learn 库中的 GaussianNB 模型,对二维散点数据进行分类,并可视化分类结果。 1. 数据准备 假设我们有两个类别的二维散点数据,每个类别包含若干个点。我们将这些点分别存…...
pytorch线性回归模型预测房价例子
人工智能例子汇总:AI常见的算法和例子-CSDN博客 import torch import torch.nn as nn import torch.optim as optim import numpy as np# 1. 创建线性回归模型类 class LinearRegressionModel(nn.Module):def __init__(self):super(LinearRegressionModel, self).…...
微信登录模块封装
文章目录 1.资质申请2.combinations-wx-login-starter1.目录结构2.pom.xml 引入okhttp依赖3.WxLoginProperties.java 属性配置4.WxLoginUtil.java 后端通过 code 获取 access_token的工具类5.WxLoginAutoConfiguration.java 自动配置类6.spring.factories 激活自动配置类 3.com…...
C++运算符重载
C的运算符重载:使对象的运算表现得和编译器内置类型一样 以复数类为例: #include <iostream> using namespace std;class CComplex { public:CComplex(int r 0, int i 0): mreal(r), mimage(i){}// 指导编译器怎么做CComplex类对象的加法操作CC…...
pandas(三)Series使用
一、Series基础使用 import pandasd {x:100,y:200,z:300} s1 pandas.Series(d) #将dict转化为Series print(s1)print("") l1 [1, 2, 3] l2 [a, b, c] s2 pandas.Series(l1, indexl2) #list转为Series print(s2)print("") s3 pandas.Series([11…...
PVE 中 Debian 虚拟机崩溃后,硬盘数据怎么恢复
问题 在 PVE 中给 Debian 虚拟机新分配硬盘后,通过 Debian 虚拟机开启 Samba 共享该硬盘。如果这个 Debian 虚拟机崩溃后,怎么恢复 Samba 共享硬盘数据。 方法 开启 Samba 共享相关知识:挂载硬盘和开启Samba共享。 新建一个虚拟机…...
【大数据技术】案例01:词频统计样例(hadoop+mapreduce+yarn)
词频统计(hadoop+mapreduce+yarn) 搭建完全分布式高可用大数据集群(VMware+CentOS+FinalShell) 搭建完全分布式高可用大数据集群(Hadoop+MapReduce+Yarn) 在阅读本文前,请确保已经阅读过以上两篇文章,成功搭建了Hadoop+MapReduce+Yarn的大数据集群环境。 写在前面 Wo…...
PySPARK带多组参数和标签的SparkSQL批量数据导出到S3的程序
设计一个基于多个带标签SparkSQL模板作为配置文件和多组参数的PySPARK代码程序,实现根据不同的输入参数自动批量地将数据导出为Parquet、CSV和Excel文件到S3上,标签和多个参数(以“_”分割)为组成导出数据文件名,文件已…...
分享刷题过程中有价值的两道题目
小编在这里先祝大家新的一年里所愿皆得,万事顺意,天天开心!!! 一.水仙花数 题目描述: 求100∼999中的水仙花数。若三位数ABCA^3B^3C^3,则称ABC为水仙花数。例如153,135333112527153&…...
Java篇之继承
目录 一. 继承 1. 为什么需要继承 2. 继承的概念 3. 继承的语法 4. 访问父类成员 4.1 子类中访问父类的成员变量 4.2 子类中访问父类的成员方法 5. super关键字 6. super和this关键字 7. 子类构造方法 8. 代码块的执行顺序 9. protected访问修饰限定符 10. 继承方式…...
7.DP算法
DP 在C中,动态规划(Dynamic Programming,DP)是一种通过将复杂问题分解为重叠子问题来高效求解的算法设计范式。以下是DP算法的核心要点和实现方法: 一、动态规划的核心思想 重叠子问题:问题可分解为多个重…...
[SAP ABAP] 在ABAP Debugger调试器中设置断点
在命令框输入/H,点击回车以后,调试被激活,点击触发任意事件进入ABAP Debugger调试器界面 点击按钮,可以在Debugger调试器中新增临时断点 我们可以从ABAP命令、方法、功能、表单、异常、消息、源代码等多个维度在Debugger调试器中设…...
使用LLaMA-Factory对AI进行认知的微调
使用LLaMA-Factory对AI进行认知的微调 引言1. 安装LLaMA-Factory1.1. 克隆仓库1.2. 创建虚拟环境1.3. 安装LLaMA-Factory1.4. 验证 2. 准备数据2.1. 创建数据集2.2. 更新数据集信息 3. 启动LLaMA-Factory4. 进行微调4.1. 设置模型4.2. 预览数据集4.3. 设置学习率等参数4.4. 预览…...
2 [GitHub遭遇严重供应链投毒攻击]
近日,有黑客针对 Discord Top.gg 的GitHub 账户发起了供应链攻击,此次攻击导致账户密码、凭证和其他敏感信息被盗,同时也影响到了大量开发人员。 Checkmarx 在一份技术报告中提到,黑客在这次攻击中使用了多种TTP,其中…...
[c语言日寄]C语言类型转换规则详解
【作者主页】siy2333 【专栏介绍】⌈c语言日寄⌋:这是一个专注于C语言刷题的专栏,精选题目,搭配详细题解、拓展算法。从基础语法到复杂算法,题目涉及的知识点全面覆盖,助力你系统提升。无论你是初学者,还是…...
Python魔法函数
在Python中,的确有“魔法函数”(Magic Methods)这种说法,也被称为特殊方法(Special Methods)。这些函数的名称以双下划线开始和结束,例如 __init__、__len__ 等。它们为Python提供了一种约定俗成…...
Cypher入门
文章目录 Cypher入门创建数据查询数据matchoptional matchwhere分页with 更新数据删除数据实例:好友推荐 Cypher入门 Cypher是Neo4j的查询语言。 创建数据 在Neo4j中使用create命令创建节点、关系、属性数据。 create (n {name:$value}) return n //创建节点&am…...
excel如何查找一个表的数据在另外一个表是否存在
比如“Sheet1”有“张三”、“李四”“王五”三个人的数据,“Sheet2”只有“张三”、“李四”的数据。我们通过修改“Sheet1”的“民族”或者其他空的列,修改为“Sheet2”的某一列。这样修改后筛选这个修改的列为空的或者为出错的,就能找到两…...
【华为OD-E卷 - 连续出牌数量 100分(python、java、c++、js、c)】
【华为OD-E卷 - 连续出牌数量 100分(python、java、c、js、c)】 题目 有这么一款单人卡牌游戏,牌面由颜色和数字组成,颜色为红、黄、蓝、绿中的一种,数字为0-9中的一个。游戏开始时玩家从手牌中选取一张卡牌打出&…...
buu-jarvisoj_level0-好久不见30
嘶,我咋觉得这个也是栈溢出呢,找到读取的值,在再找到后门函数...
DeepSeek r1本地安装全指南
环境基本要求 硬件配置 需要本地跑模型,兼顾质量、性能、速度以及满足日常开发需要,我们需要准备以下硬件: CPU:I9内存:128GB硬盘:3-4TB 最新SSD,C盘确保有400GB,其它都可划成D盘…...
【论文笔记】Fast3R:前向并行muti-view重建方法
众所周知,DUSt3R只适合做稀疏视角重建,与sapnn3r的目的类似,这篇文章以并行的方法,扩展了DUSt3R在多视图重建中的能力。 abstract 多视角三维重建仍然是计算机视觉领域的核心挑战,尤其是在需要跨不同视角实现精确且可…...
开源智慧园区管理系统对比其他十种管理软件的优势与应用前景分析
内容概要 在当今数字化快速发展的时代,园区管理软件的选择显得尤为重要。而开源智慧园区管理系统凭借其独特的优势,逐渐成为用户的新宠。与传统管理软件相比,它不仅灵活性高,而且具有更强的可定制性,让各类园区&#…...
第四节 MATLAB变量
每个MATLAB变量可以是数组或者矩阵。 用一个简单的方法指定变量。例如: x 3 % defining x and initializing it with a value MATLAB执行上述语句,并返回以下结果: x 3 上述的例子创建了一个1-1的矩阵名为x和的值存储在其元素中…...
小红的小球染色期望
B-小红的小球染色_牛客周赛 Round 79 题目描述 本题与《F.R小红的小球染色期望》共享题目背景,但是所求内容与范围均不同,我们建议您重新阅读题面。 有 n 个白色小球排成一排。小红每次将随机选择两个相邻的白色小球,将它们染成红色。小红…...
c++井字棋(单人对电脑:1.电脑随机下 2.电脑AI;3.双人对决)
本游戏分两个模式,三种玩法: 每个玩法中的人下棋规则不变,如下: while (1) {/*输入*/int row,col;cout<<"请输入坐标(1索引):\n";cin>>row>>col;/*切换索引*/row--;col--;if(legal(row,col)) {prin…...
Python 原子操作:使用 `atomic` 模块保证线程安全
Python 原子操作:使用 atomic 模块保证线程安全 在多线程编程中,共享数据的访问往往需要考虑线程安全问题。如果多个线程同时修改同一个变量,可能会导致数据竞争,从而产生不可预测的结果。为了解决这个问题,我们可以使用原子操作。原子操作是指不可中断的操作,要么全部执…...
《解锁AI黑科技:数据分类聚类与可视化》
在当今数字化时代,数据如潮水般涌来,如何从海量数据中提取有价值的信息,成为了众多领域面临的关键挑战。人工智能(AI)技术的崛起,为解决这一难题提供了强大的工具。其中,能够实现数据分类与聚类…...
使用朴素贝叶斯对自定义数据集进行分类
准备自定义数据集 首先,需要一个自定义数据集来进行分类。创建一个简单的二维数据集,其中每个样本有两个特征,并且属于两个类别之一。 import numpy as np import pandas as pd# 创建自定义数据集 np.random.seed(42) num_samples 100# 生…...
《超自然》:科学与灵性融合的自我转变之路
在现代社会中,许多人开始探寻自我成长、身心疗愈与灵性提升的可能性。Bestselling author Dr. Joe Dispenza 的《超自然:普通人如何创造非凡人生》正是在这样的大背景下问世的。书中既融合了量子物理、神经科学和表观遗传学的前沿理论,又吸收…...
学习日记-250202
现在开始要继续写我的日记了......(也可以当作笔记吧) 一.论文 Prompt Transfer for Dual-Aspect Cross Domain Cognitive Diagnosis 主要内容: 主要是加入prompt提示, 为重叠实体设计个性化的提示,为非重叠实体设计共…...