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

【门店租金指定日期区间计算】

目录

    • 一、背景
      • (一)业务场景
      • (二)相关数据支撑
    • 二、计算方法统一封装
      • (一)门店租金数据表格逻辑
      • (二)业务逻辑详细解释
      • (三)具体代码

一、背景

(一)业务场景

1、零售互联网都会涉及到门店,很多报表都需要计算门店租金合计指标
门店租金合计:指指定日期区间分摊的租金
2、门店一般对应一个门店id,但是可能存在多个门面房

(二)相关数据支撑

门店租金信息表格:一个门店id可能有多条数据(多个门面房)
包含基本信息:门店ID,初始租金(第一次签订的合同租金,一般指一年),合同开始时间,合同结束时间,租金递增方式、组件递增类型、租金递增系数

在这里插入代码片store_rent表建表语句如下
create table store_rent
(id                           bigint         not null primary key,store_id                     bigint         null comment '门店id',company_id                   int            null comment '公司id',landlord_name                varchar(255)   null comment '房东姓名',landlord_phone               varchar(20)    null comment '房东电话',landlord_type                varchar(255)   null comment '房东类型【个人 / 企业】',rent_money                   decimal(19, 2) null comment '租金',rent_start_time              datetime       null comment '租赁开始时间',rent_end_time                datetime       null comment '租赁结束时间',rent_incremental_method      varchar(255)   null comment '租金递增方式【无递增/每年/第二年/第三年/第四年/第五年】',rent_incremental_type        varchar(255)   null comment '租金递增类型【固定金额/固定比例】',rent_incremental_coefficient decimal(19, 2) null comment '租金递增系数【百分数或者金额】',property_fee                 decimal(19, 2) null comment '物业费',deposit                      decimal(19, 2) null comment '押金',deposit_apportion_year       int            null comment '押金分摊年限',transfer_fee                 decimal(19, 2) null comment '转让费',transfer_fee_apportion_year  int            null comment '转让费分摊年限',bank_account                 varchar(255)   null comment '银行账号',bank_name                    varchar(255)   null comment '开户行',bank_account_name            varchar(255)   null comment '开户人'
)row_format = DYNAMIC;

二、计算方法统一封装

(一)门店租金数据表格逻辑

1、门店租金信息的合同起始或者截止时间不能为空
2、租金递增方式如果是无递增,递增类型和递增系数可以为空;
其他递增方式,递增类型和递增系数不可以为空
3、递增方式
无递增:每年租金都是一样的
每年/第二年:意思相同,都是从第二年开始租金递增
第三年/第四年/第五年/:都是指第几年开始递增
4、递增类型
如果是固定金额,那么递增系数就是金额
如果是固定比例,那么递增系数就是百分数

(二)业务逻辑详细解释

1、年真实租金计算逻辑:
rent_money:初始租金金额(第一个合同周期的年租金)
rent_incremental_method:租金递增方式【无递增/每年/第二年/第三年/第四年/第五年】
rent_incremental_type :租金递增类型【固定金额/固定比例】
rent_incremental_coefficient:租金递增系数【百分数或者金额】
根据租赁增长周期,增长方式和系数计算出对应合同周期的租金

2、日租金rent_fee=对应合同周期的年真实租金/周期总天数)

3、示例1:门店id为1001的日期区间为String[] bizday=[20231129,20231201],根据下面条件计算下总租金
初始租金rent_money是10000
合同开始日期rent_start_time:20221130
合同截止日期rent_end_time:20251130
租金递增方式rent_incremental_method:每年
递增模式rent_incremental_type:按固定金额
递增系数rent_incremental_coefficient:10000
解答:
3.1根据已知条件[20231129,20231201]和[20221131,20251130]有交集
3.2 合同的每个周期就是一年左右,合同第一个周期是20221130-20231129,第二个周期是20231130-20241129,第三个周期是20241130-20251129
3.3那么bizday属于1,2两个周期,第一个周期占了了1天,第二周期占了2天
3.4第一个周期的年真实租金是10000,周期总天数是365,所以第一个周期的日租金是10000/365
第二个周期的年真实租金是10000+10000=20000,周期总天数是365,所以第二个周期的日租金是20000/365
3.5bizday在第一个周期占用了1天,在第二个周期占用了2天,所以第一个周期的总租金是(10000/365)1,第二个周期的总租金是(20000/365)2
最后得出bizday日期区间的总租金是1
(10000/365)+2
(20000/365)

4、示例2:门店id为1001的日期区间为String[] bizday=[20241129,20241201],根据下面条件计算下总租金
初始租金rent_money是10000
合同开始日期rent_start_time:20221130
合同截止日期rent_end_time:20251129
租金递增方式rent_incremental_method:3年
递增模式rent_incremental_type:按固定金额
递增系数rent_incremental_coefficient:10000
解答:
4.1根据已知条件[20241129,20241201]和[20221130,20251129]有交集
4.2 合同的每个周期就是一年左右,合同第一个周期是20221130-20231129,第二个周期是20231130-20241129,第三个周期是20241130-20251129
4.3那么bizday属于1,2两个周期,第一个周期占了了1天,第二周期占了2天
4.4第一个周期的年真实租金是10000,周期总天数是365,所以第一个周期的日租金是10000/365
第二个周期的年真实租金是10000,周期总天数是365,所以第二个周期的日租金是10000/365
第三个周期的年真实租金是10000+10000=20000,周期总天数是365,所以第三个周期的日租金是20000/365
4.5bizday在第二个周期占用了1天,在第三个周期占用了2天,所以第二个周期的总租金是(10000/365)1,第二个周期的总租金是(20000/365)2
最后得出bizday日期区间的总租金是1
(10000/365)+2
(20000/365)

5、如果是递增类型是系数,同理。

(三)具体代码

public class RentCalculatorUtil {/*** 计算指定查询区间内各门店租金总和* @param queryStart 查询开始日期* @param queryEnd   查询结束日期* @param storeRents 租金合同列表(合同起止时间均不为空)* @return key为门店id,value为总租金*/public static Map<Long, BigDecimal> calculateTotalRent(Date queryStart, Date queryEnd, List<StoreRentDetailDTO> storeRents) {if (CollectionUtil.isEmpty(storeRents)){return Map.of();}Map<Long, BigDecimal> rentMap = Map.of();;for (StoreRentDetailDTO rent : storeRents) {Long storeId = rent.getStoreId();Date contractStart = rent.getRentStartTime();Date contractEnd = rent.getRentEndTime();// 求合同与查询区间的交集Date effectiveQueryStart = maxDate(contractStart, queryStart);Date effectiveQueryEnd = minDate(contractEnd, queryEnd);if (effectiveQueryStart.after(effectiveQueryEnd)) {continue;}BigDecimal totalRent = BigDecimal.ZERO;// 按“每年一个周期”划分,周期定义为:[周期起始, 起始日期+1年-1天]Calendar cycleStartCal = Calendar.getInstance();cycleStartCal.setTime(contractStart);int cycleIndex = 0; // cycleIndex==0 表示第一周期while (true) {Date cycleStart = cycleStartCal.getTime();Calendar cycleEndCal = (Calendar) cycleStartCal.clone();cycleEndCal.add(Calendar.YEAR, 1);cycleEndCal.add(Calendar.DATE, -1);Date cycleEnd = cycleEndCal.getTime();// 若当前周期结束超出合同结束,则以合同结束日期为周期结束if (cycleEnd.after(contractEnd)) {cycleEnd = contractEnd;}// 求当前周期与查询区间的交集Date cycleEffectiveStart = maxDate(cycleStart, queryStart);Date cycleEffectiveEnd = minDate(cycleEnd, queryEnd);if (!cycleEffectiveStart.after(cycleEffectiveEnd)) {long effectiveDays = daysBetween(cycleEffectiveStart, cycleEffectiveEnd) + 1;//long cycleTotalDays = daysBetween(cycleStart, cycleEnd) + 1;// 计算当前周期的年租金,根据递增规则与递增类型决定BigDecimal annualRent = computeAnnualRent(rent.getRentMoney(),rent.getRentIncrementalMethod(),rent.getRentIncrementalType(),rent.getRentIncrementalCoefficient(),cycleIndex);BigDecimal dailyRent = annualRent.divide(BigDecimal.valueOf(365), 10, BigDecimal.ROUND_HALF_UP);totalRent = totalRent.add(dailyRent.multiply(BigDecimal.valueOf(effectiveDays)));}// 准备下个周期:当前周期结束后一天为下个周期起始Calendar nextCycleStartCal = Calendar.getInstance();nextCycleStartCal.setTime(cycleEnd);nextCycleStartCal.add(Calendar.DATE, 1);if (nextCycleStartCal.getTime().after(contractEnd)) {break;}cycleStartCal = nextCycleStartCal;cycleIndex++;}BigDecimal previousRent = rentMap.getOrDefault(storeId, BigDecimal.ZERO);rentMap.put(storeId, previousRent.add(totalRent));}return rentMap;}/*** 根据递增规则计算当前周期的年租金* 仅处理 FIXED_MONEY 和 FIXED_RATE 两种递增类型,规则如下:** 1. 对于 EVERY_YEAR 和 TWO_YEAR(效果相同):从第2周期开始递增*    - 如果递增类型是固定金额:*         年租金 = baseRent, 当 cycleIndex == 0;*         当 cycleIndex >= 1,年租金 = baseRent + (cycleIndex) * coefficient*    - 如果递增类型是固定比例:*         年租金 = baseRent, 当 cycleIndex == 0;*         当 cycleIndex >= 1,年租金 = baseRent * (1 + coefficient)** 2. 对于 THREE_YEAR:从第3周期开始递增*    - FIXED_MONEY:cycleIndex < 2时年租金 = baseRent;cycleIndex>=2时,年租金 = baseRent + (cycleIndex - 1)*coefficient*    - FIXED_RATE:cycleIndex < 2时年租金 = baseRent;cycleIndex>=2时,年租金 = baseRent * (1 + coefficient)** 3. FOUR_YEAR:从第4周期开始递增*    - FIXED_MONEY:当 cycleIndex < 3 时,年租金 = baseRent;否则 = baseRent + (cycleIndex - 2)*coefficient*    - FIXED_RATE:当 cycleIndex < 3 时,年租金 = baseRent;否则 = baseRent * (1 + coefficient)** 4. FIVE_YEAR:从第5周期开始递增*    - FIXED_MONEY:当 cycleIndex < 4 时,年租金 = baseRent;否则 = baseRent + (cycleIndex - 3)*coefficient*    - FIXED_RATE:当 cycleIndex < 4 时,年租金 = baseRent;否则 = baseRent * (1 + coefficient)** @param baseRent    合同初始租金* @param method      递增方式* @param type        递增类型(FIXED_MONEY 或 FIXED_RATE)* @param coefficient 递增系数(FIXED_MONEY时为金额,FIXED_RATE时为乘数,例如2表示 1+2=3倍)* @param cycleIndex  当前周期编号(0表示第一周期)* @return 当前周期的年租金*/private static BigDecimal computeAnnualRent(BigDecimal baseRent,StoreRentDetailDTO.RentIncrementalMethodEnum method,StoreRentDetailDTO.RentIncrementalTypeEnum type,BigDecimal coefficient,int cycleIndex) {// 根据递增方式确定起始递增周期(threshold)int threshold;switch (method) {case EVERY_YEAR:case TWO_YEAR:threshold = 1;break;case THREE_YEAR:threshold = 2;break;case FOUR_YEAR:threshold = 3;break;case FIVE_YEAR:threshold = 4;break;default:threshold = 1;}// 若当前周期在递增阈值之前,则不递增if (cycleIndex < threshold) {return baseRent;}// 递增模式如果是NONE,说明每个周期都是相同的租金if (method == StoreRentDetailDTO.RentIncrementalMethodEnum.NONE) {return baseRent;}// 针对两种递增类型分别处理:if (type == StoreRentDetailDTO.RentIncrementalTypeEnum.FIXED_MONEY) {// 递增次数 = cycleIndex - threshold + 1int increaseCount = cycleIndex - threshold + 1;return baseRent.add(coefficient.multiply(BigDecimal.valueOf(increaseCount)));} else if (type == StoreRentDetailDTO.RentIncrementalTypeEnum.FIXED_RATE) {// 计算从递增开始到当前周期的总增长倍数int periodsPassedThreshold = cycleIndex - threshold + 1;BigDecimal totalMultiplier = BigDecimal.ONE.add(coefficient).pow(periodsPassedThreshold);return baseRent.multiply(totalMultiplier);}return baseRent;}private static Date maxDate(Date d1, Date d2) {return d1.after(d2) ? d1 : d2;}private static Date minDate(Date d1, Date d2) {return d1.before(d2) ? d1 : d2;}/*** 返回两个日期之间的整天数(不含首日,因此计算时需加1表示包含首尾)*/private static long daysBetween(Date d1, Date d2) {long diffMs = d2.getTime() - d1.getTime();return diffMs / (1000 * 60 * 60 * 24);}/*** 测试方法* @param args* @throws Exception*/public static void main(String[] args) throws Exception {List<StoreRentDetailDTO> storeRents = new ArrayList<>();// 示例查询区间Date startTime = java.sql.Date.valueOf("2024-11-29");Date endTime = java.sql.Date.valueOf("2024-12-01");StoreRentDetailDTO storeRent = new StoreRentDetailDTO();storeRent.setStoreId(100002L);storeRent.setRentStartTime(java.sql.Date.valueOf("2022-11-30"));storeRent.setRentEndTime(java.sql.Date.valueOf("2028-12-30"));storeRent.setRentMoney(new BigDecimal("10000"));// 修改此处测试不同递增方式和类型// 以下示例测试 THREE_YEAR 方式:// 1. 当递增类型为 FIXED_MONEY,coefficient 为 10000 时://    第1周期(2022-11-30至2023-11-29):年租金 = 10000//    第2周期(2023-11-30至2024-11-29):年租金 = 10000(不递增)//    第3周期(2024-11-30至2025-11-29):年租金 = 10000 + 1*10000 = 20000// 2. 当递增类型为 FIXED_RATE,coefficient 为 2 时://    第1、2周期:年租金 = 10000//    第3周期:年租金 = 10000*(1+2) = 30000//    注意:后续周期仍保持 30000storeRent.setRentIncrementalMethod(StoreRentDetailDTO.RentIncrementalMethodEnum.THREE_YEAR);// 这里可切换递增类型:FIXED_MONEY 或 FIXED_RATE// 示例:FIXED_MONEY// storeRent.setRentIncrementalType(StoreRent.RentIncrementalTypeEnum.FIXED_MONEY);// storeRent.setRentIncrementalCoefficient(new BigDecimal("10000"));// 示例:FIXED_RATE
//		storeRent.setRentIncrementalType(StoreRent.RentIncrementalTypeEnum.FIXED_RATE);
//		storeRent.setRentIncrementalCoefficient(new BigDecimal("2"));  // 表示1+2倍storeRent.setRentIncrementalType(StoreRentDetailDTO.RentIncrementalTypeEnum.FIXED_MONEY);storeRent.setRentIncrementalCoefficient(new BigDecimal("10000"));  // 表示1+2倍storeRents.add(storeRent);Map<Long, BigDecimal> totalRents = calculateTotalRent(startTime, endTime, storeRents);System.out.println(totalRents);// 根据示例:// 若递增方式为 THREE_YEAR 且递增类型为 FIXED_MONEY,则:// - 第1周期(2022-11-30至2023-11-29):年租金 = 10000(不递增)// - 第2周期(2023-11-30至2024-11-29):年租金 = 10000(不递增),交集仅一天(2024-11-29)// - 第3周期(2024-11-30至2025-11-29):年租金 = 10000+10000=20000,交集2天(2024-11-30、2024-12-01)// 总租金 = 1*(10000/365) + 2*(20000/365) ≈ 136.91//// 如果递增类型为 FIXED_RATE,则:// - 第1、2周期年租金 = 10000;第3周期 = 10000*(1+2)=30000// 总租金 = 1*(10000/365) + 2*(30000/365)≈ 191.78}}

相关文章:

【门店租金指定日期区间计算】

目录 一、背景&#xff08;一&#xff09;业务场景&#xff08;二&#xff09;相关数据支撑 二、计算方法统一封装&#xff08;一&#xff09;门店租金数据表格逻辑&#xff08;二&#xff09;业务逻辑详细解释&#xff08;三&#xff09;具体代码 一、背景 &#xff08;一&am…...

Dify:开源大模型应用开发平台全解析

从部署到实践&#xff0c;打造你的AI工作流 一、项目简介 Dify 是一款面向开发者和企业的开源大语言模型&#xff08;LLM&#xff09;应用开发平台&#xff0c;旨在降低AI应用开发门槛&#xff0c;让用户通过可视化界面快速构建、管理和部署基于大模型的智能应用。其名称寓意“…...

使用DDR4控制器实现多通道数据读写(四)

在创建完DDR4的仿真模型后&#xff0c;我们为了实现异步时钟的读写&#xff0c;板卡中在PL端提供了一组差分时钟&#xff0c;可以用它通过vivado中的Clock Wizard IP核生成多个时钟&#xff0c;在这里生成两个输出时钟&#xff0c;分别作为用户的读写时钟&#xff0c;这样就可以…...

BFS--------N叉树的层序遍历

429. N 叉树的层序遍历 - 力扣&#xff08;LeetCode&#xff09; 1.题目解析 给定一个 N 叉树&#xff0c;返回其节点值的层序遍历。&#xff08;即从左到右&#xff0c;逐层遍历&#xff09;。 树的序列化输入是用层序遍历&#xff0c;每组子节点都由 null 值分隔&#xff08…...

蓝桥杯备考----小贪心+分类讨论问题---Popsicle

这道题有点小贪心的意思&#xff0c;小老鼠每次都想阻碍小猫最多&#xff0c;老鼠每次阻碍猫的话&#xff0c;可能是把0变成9 也可能是把1变成9&#xff0c;再有可能把2变成9&#xff0c;把3变成9&#xff0c;小老鼠的贪心就是尽可能更多的阻碍小猫拿冰棍&#xff0c;所以小老…...

强大的AI网站推荐(第一集)—— Devv AI

网站&#xff1a;Devv AI 号称&#xff1a;最懂程序员的新一代 AI 搜索引擎 博主评价&#xff1a;我的大学所有的代码都是使用它&#xff0c;极大地提升了我的学习和开发效率。 推荐指数&#xff1a;&#x1f31f;&#x1f31f;&#x1f31f;&#x1f31f;&#x1f31f;&#x…...

【问题解决】Postman 测试报错 406

现象 Tomcat 日志 org.springframework.web.servlet.handler.AbstractHandlerExceptionResolver.logException Resolved org.springframework.web.HttpMediaTypeNotAcceptableException: No acceptable representation HTTP状态 406 - 不可接收 的报错&#xff0c;核心原因 客…...

互联网it常用抓包工具说明

一、引言 在互联网 IT 领域&#xff0c;无论是网络故障排查、安全检测&#xff0c;还是开发调试&#xff0c;抓包工具都发挥着举足轻重的作用。 当网络出现故障&#xff0c;比如网页加载缓慢、应用无法连接服务器时&#xff0c;抓包工具可以帮助我们捕获网络数据包&#xff0…...

RS485总线加终端电阻可能存在的问题

目录 1、降低驱动信号幅值 2、增大通信线压降 3、增大收发器功耗 4、降低总线空闲时的差分电压 尽管终端电阻能有效减少信号反射、提高信号质量&#xff0c;但它也引入了一系列问题&#xff0c;需要在设计中谨慎考虑。以下是几个常见问题的详细分析&#xff1a; 1、降低驱…...

在 Linux 系统上部署 Deepseek AI 的全面指南‌

对于所有希望亲身体验 AI 魅力的玩家来说&#xff0c;本文将提供一个详尽的教程&#xff0c;指导你在 Linux 系统上部署 Deepseek AI。无论你是技术小白还是有一定基础的用户&#xff0c;都能轻松跟随本文完成部署。 ‌一、关于 Ollama‌ Ollama 是一款功能强大的开源应用&am…...

Docker下载,包含Win、Mac

介绍 Docker 是一种开源的容器化平台&#xff0c;通过操作系统级虚拟化技术实现应用的快速开发、部署和运行。以下从多个维度对 Docker 进行详细介绍&#xff1a; 一、Docker 的核心概念与功能 容器化技术 Docker 利用 Linux 内核的容器隔离技术&#xff08;如 Cgroups 和 Nam…...

算法|2025最强优化算法

根据2025年的最新研究进展&#xff0c;以下是被广泛认可的几种“最强优化算法”&#xff0c;它们在理论创新、性能表现和应用范围上均有显著突破&#xff1a; 一、植物根茎生长优化算法&#xff08;PRGO&#xff09; 1 - 核心原理&#xff1a;灵感来源于植物根系结构&#xf…...

Prime: 1靶场渗透测试

Prime: 1 来自 <Prime: 1 ~ VulnHub> 1&#xff0c;将两台虚拟机网络连接都改为NAT模式 2&#xff0c;攻击机上做namp局域网扫描发现靶机 nmap -sn 192.168.23.0/24 那么攻击机IP为192.168.23.182&#xff0c;靶场IP192.168.23.207 3&#xff0c;对靶机进行端口服务探测…...

html相关常用语法

html相关常用语法 HTML&#xff08;HyperText Markup Language&#xff09;即超文本标记语言&#xff0c;是用于创建网页的标准标记语言 HTML使用标记语言描述Web页面的结构 HTML元素是HTML页面的建构快 HTML元素通过标签tag来表示 HTML标签是“标题”、”段落“、”表格“等内…...

2025年R1 快开门式压力容器操作证考试题目及答案解析

R1 快开门式压力容器操作证考试题目及答案&#xff1a; 单选题 1、快开门式压力容器的快开门&#xff08;盖&#xff09;应设计安全联锁装置并应具有&#xff08; &#xff09;功能。 A. 当快开门达到预定关闭部位方能升压运行的安全联锁功能 B. 当压力容器的内部压力完全释…...

《傲慢与偏见》(Pride and Prejudice)简介

学习《傲慢与偏见》 本文缘于阅读床头灯3000词英文版《傲慢与偏见》。读完之后&#xff0c;想要了解的更深一点。 英语学习记录&#xff1a;床头灯3000词&#xff1a;《傲慢与偏见》&#xff08;Pride and Prejudice&#xff09;阅读记录 故事梗概 《傲慢与偏见》&#xff08…...

绿盟科技春招面试

《网安面试指南》https://mp.weixin.qq.com/s/RIVYDmxI9g_TgGrpbdDKtA?token1860256701&langzh_CN 5000篇网安资料库https://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247486065&idx2&snb30ade8200e842743339d428f414475e&chksmc0e4732df793fa3bf39…...

dpkg-architecture命令详解

dpkg-architecture 是 Debian 系系统中用于处理软件包架构相关操作的工具&#xff0c;尤其在软件包构建和交叉编译环境中至关重要。以下是其核心功能及用法的详细说明&#xff1a; ‌一、核心功能‌ ‌架构查询与验证‌ 显示或验证当前系统&#xff08;DEB_HOST_ARCH&#xff…...

阿里的MNN源码如何编译成so文件,供Android调用

在Ubtuntu下面的编译&#xff0c;先整理编译环境 1、安装环境依赖 # 安装必要工具 sudo apt update sudo apt install -y cmake ninja-build git wget # 安装Android NDK&#xff08;建议使用r21版本或更高&#xff09; wget https://dl.google.com/android/repository/a…...

【高项】信息系统项目管理师(九)项目资源管理【4分】

项目资源管理包括识别、获取和管理所需资源以成功完成项目的各个过程,这些过程有助于确保项目经理和项目团队在正确的时间和地点使用正确的资源。项目资源是指对于项目来说,一切具有使用价值,可为项目接受和利用,且属于项目发展过程所需的客观存在的资源,包括实物资源和团…...

hive 数据简介

Hive介绍 1&#xff09;Hive简介 Hive是基于Hadoop的一个数据仓库工具&#xff0c;用于结构化数据的查询、分析和汇总。Hive提供类SQL查询功能&#xff0c;它将SQL转换为MapReduce程序。 Hive不支持OLTP&#xff0c;Hive无法提供实时查询。 2&#xff09;Hive在大数据生态环境…...

SpringBoot的启动原理?

大家好&#xff0c;我是锋哥。今天分享关于【SpringBoot的启动原理&#xff1f;】面试题。希望对大家有帮助&#xff1b; SpringBoot的启动原理&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Spring Boot的启动原理主要是通过 SpringApplication 类来…...

蓝桥杯2023年第十四届省赛真题-子矩阵

题目来自DOTCPP&#xff1a; 暴力思路&#xff08;两个测试点超时&#xff09;&#xff1a; 题目要求我们求出子矩阵的最大值和最小值的乘积&#xff0c;我们可以枚举矩阵中的所有点&#xff0c;以这个点为其子矩阵的左上顶点&#xff0c;然后判断一下能不能构成子矩阵。如果可…...

hackmyvm-connection

connection(利用445端口smb) ubuntu:192.168.89.225(这里使用ubuntu代替centos7) connection:192.168.89.47 kali:192.168.89.149 arp-scan -l nmap -sS -v 192.168.36.47 nmap 192.168.89.47 --script vuln 使用nmap vuln扫描192.168.111.80靶机&#xff0c;观察可能存在的…...

JVM——Java虚拟机

JVM——Java虚拟机 一. 内存区域划分二. 类加载机制2.1 双亲委派模型&#xff08;类加载环节&#xff09; 三. 垃圾回收机制&#xff08;GC&#xff09;3.1 识别垃圾3.2 释放内存空间 一. 内存区域划分 JVM本身也是一个进程&#xff0c;会向系统申请内存&#xff0c;然后根据实…...

2024年数维杯数学建模A题多源机会信号建模与导航分析解题全过程论文及程序

2024年数维杯数学建模 A题 多源机会信号建模与导航分析 原题再现&#xff1a; &#xff08;一&#xff09;问题背景   尽管全球卫星定位系统下的定位导航技术已成熟&#xff0c;但考虑到室内、隧道、建筑密集区等复杂环境或全球卫星定位系统被毁失灵等突发场景&#xff0c;…...

解释 TypeScript 中的类型保护(type guards),如何使用类型保护进行类型检查?

TypeScript类型保护深度解析 核心概念解析 类型保护是TypeScript用于在条件分支中缩小变量类型范围的机制&#xff0c;通过特定的语法结构让编译器能够推导出更精确的类型信息。其核心价值在于提升代码类型安全性&#xff0c;同时保持开发效率。 五大实现方式及实战案例 1.…...

【时时三省】(C语言基础)习题:分析一个程序

( 1 )运行时会输出什么信息&#xff1f;为什么&#xff1f; ( 2 )如果将程序第4&#xff0c;5行改为 c1 197&#xff1b; c2 198&#xff1b; 运行时会输出什么信息?为什么? ( 3 )如果将程序第3行改为 int cl , c2 ; 运行时会输出什么信息?为什么? ( 1 )输出结果…...

基于springboot的旅游网站(013)

摘 要 随着科学技术的飞速发展&#xff0c;各行各业都在努力与现代先进技术接轨&#xff0c;通过科技手段提高自身的优势&#xff0c;旅游网站当然也不能排除在外&#xff0c;随着旅游网站的不断成熟&#xff0c;它彻底改变了过去传统的旅游网站方式&#xff0c;不仅使旅游管理…...

vscode查看文件历史git commit记录

方案一&#xff1a;GitLens 在vscode扩展商店下载GitLens 选中要查看的文件&#xff0c;vscode界面右上角点击GitLens的图标&#xff0c;选择Toggle File Blame 界面显示当前打开文件的所有修改历史记录 鼠标放到某条记录上&#xff0c;可以看到记录详情&#xff0c;选中O…...

基于Wasm的边缘计算Pandas:突破端侧AI的最后一公里——让数据分析在手机、IoT设备上飞驰

引言&#xff1a;边缘计算的算力觉醒 在智能家居设备每秒产生数万条传感器数据、手机App需要实时分析用户行为的今天&#xff0c;传统云计算模式面临高延迟、隐私风险、带宽成本三大挑战。本文将揭示如何通过WebAssembly&#xff08;Wasm&#xff09;Pandas的技术组合&#xf…...

负载均衡的在线OJ项目

负载均衡的在线OJ项目 所用技术与开发环境项目的宏观结构我们的项目要实现的最重要的功能&#xff1a;我们项目的整体结构&#xff1a;项目编写思路 compile_server模块compiler模块设计与编写Runner模块设计与编写细节setrlimit系统调用函数程序流程图 Compile_and_run模块设计…...

CPP从入门到入土之类和对象Ⅱ

一、六大默认成员函数 默认成员函数是用户没有显式实现&#xff0c;编译器自动生成的成员函数。 一个类&#xff0c;我们在不写的情况下&#xff0c;编译器会默认生成六个默认成员函数 本文详细介绍构造函数和析构函数 二、构造函数 构造函数虽名为构造函数&#xff0c;但是…...

2025年 cocosCreator 1.8 定制 JavaScript 引擎

参考文档&#xff1a;https://docs.cocos.com/creator/1.9/manual/zh/advanced-topics/engine-customization.html PS: 1.8的文档已经没了&#xff0c;只能看1.9的&#xff0c;所幸这两个版本差别不大 获取 JS 引擎 原文中github上的分支已经找不到了&#xff0c;这里直接从c…...

「JavaScript深入」Socket.IO:基于 WebSocket 的实时通信库

Socket.IO Socket.IO 的核心特性Socket.IO 的架构解析Socket.IO 的工作流程Socket.IO 示例&#xff1a;使用 Node.js 搭建实时聊天服务器1. 安装 Socket.IO2. 服务器端代码&#xff08;Node.js&#xff09;3. 客户端代码&#xff08;HTML JavaScript&#xff09;4. 房间功能 高…...

turnjs图册翻书效果

npm install https://github.com/igghera/turn.js.git //或者 npm install turn.js //import $ from "jquery"; //记得引入jquery import turn.js; // 引入 Turn.jsimport turn from "/utils/turn.min.js";// 引入 Turn.jsinitBook(length) {var that thi…...

大语言模型的训练数据清洗策略

目录 大语言模型的训练数据清洗策略 1. 数据去重与标准化 问题 解决方案 示例代码&#xff08;Python 实现数据去重&#xff09;&#xff1a; 2. 过滤有害内容 问题 解决方案 示例代码&#xff08;基于关键词过滤有害内容&#xff09;&#xff1a; 3. 纠正数据不均衡 …...

在 Vue 项目中调用 DeepSeek API(示例篇)

在 Vue 项目中调用 DeepSeek(假设 DeepSeek 是一个提供 API 服务的第三方工具,例如用于搜索、数据分析等),通常需要通过 HTTP 请求与 DeepSeek 的 API 进行交互。以下是一个简单的示例,展示如何在 Vue 项目中调用 DeepSeek API。 实例如下: 安装依赖 首先,确保你的项目中…...

对接股票金融数据源API

StockTV 股票市场API StockTV 提供全面的实时和历史股市数据 API&#xff0c;涵盖全球股票、外汇、期货及市场新闻数据&#xff0c;助力投资者精准把握市场动态。 主要功能 实时和历史股市数据 API 获取全球股票市场的实时行情、历史数据及深度分析&#xff0c;支持多语言查询…...

蓝桥杯关于栈这个数据结构的一个算法题目

文章目录 1.题目概述解释2.思路分析3.代码解析 1.题目概述解释 找出来这个字符串里面重复出现的字符&#xff0c;类似于这个消消乐的游戏&#xff1b; 示例一里面的这个bb是连续的并且是一样的这个字符&#xff0c;因此删除bb&#xff0c;删除之后发现这个aa有一次相邻了&…...

SpringBoot配置文件加载优先级

在Spring Boot项目中&#xff0c;配置属性的优先级是一个重要的概念&#xff0c;它决定了当存在多个配置源时&#xff0c;哪个配置源的属性将被应用。以下是SpringBoot中配置属性的优先级&#xff0c;从最高到最低&#xff1a; 命令行参数&#xff1a; 命令行参数具有最高的优先…...

企业数据治理解决方案(46页PPT)(文末有下载方式)

资料解读&#xff1a;企业数据治理解决方案 详细资料请看本解读文章的最后内容。 在当今数字化时代&#xff0c;数据已成为企业的核心资产&#xff0c;对企业的发展起着至关重要的作用。然而&#xff0c;许多企业在数据管理方面面临诸多挑战&#xff0c;如数据不全、样式繁多、…...

版本控制器Git ,Gitee如何连接Linux Gitee和Github区别

&#x1f4d6; 示例场景 假设你和朋友在开发一个「在线笔记网站」&#xff0c;代码需要频繁修改和协作&#xff1a; 只用本地文件管理 每次修改后手动复制文件&#xff0c;命名为 v1.html、v2.html 问题&#xff1a;无法追踪具体改动内容&#xff1b;多人修改易冲突&#xff1…...

[网安工具] 网安工具库 —— 工具管理手册

0x00&#xff1a;工具管理类 — Tools Management 0x01&#xff1a;信息收集类 — Information Gathering 自动化综合信息收集工具 — ARL 灯塔 0x02&#xff1a;漏洞探测类 — Vulnerability Identification 浏览器渗透辅助插件 —— HackBar 0x03&#xff1a;漏洞利用类…...

在LwIP中,`tcp_recved()`、`tcp_sndbuf()` 和 `tcp_write()`三个函数详细用法及示例

在LwIP中&#xff0c;tcp_recved()、tcp_sndbuf() 和 tcp_write() 是TCP协议栈的核心函数&#xff0c;用于管理接收和发送数据流。以下是它们的详细用法及示例&#xff1a; 1. tcp_recved() 功能 通知协议栈已处理接收数据&#xff1a;当应用层从接收缓冲区读取数据后&#x…...

外卖避雷方案 改进型(个人使用版)

昨天怒花100请教了双尾彗星对外卖避雷的计划。 总结下来是行不通。 1.很容易被水军冲击数据真实性, 1.这种方案是从末端来解决问题,食品卫生问题,最好还是从解决分成方面的问题。 2.这种方案没有解决人们对食品安全的焦虑。 既然这样那只能先弄个只给自己用的避雷程序,打造…...

深度学习与传统算法在人脸识别领域的演进:从Eigenfaces到ArcFace

一、传统人脸识别方法的发展与局限 1.1 Eigenfaces&#xff1a;主成分分析的经典实践 算法原理 Eigenfaces是基于主成分分析&#xff08;PCA&#xff09;的里程碑式方法。其核心思想是将人脸图像视为高维向量&#xff0c;通过协方差矩阵计算特征向量&#xff08;即特征脸&…...

druid开启防火墙之后的bug

bug以及解决方案 不允许执行多个语句不允许有注释部分数据有误识别&#xff0c;抛出异常&#xff0c;导致原本正常执行的语句被中断 解决方案 application.yaml中对于druid配置如下&#xff1a; wall:enabled: true # 开启防火墙config:multi-statement-allow: true # 允许多个…...

代码随想录_动态规划

代码随想录 动态规划 509.斐波那契数 509. 斐波那契数 斐波那契数 &#xff08;通常用 F(n) 表示&#xff09;形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始&#xff0c;后面的每一项数字都是前面两项数字的和。也就是&#xff1a; F(0) 0&#xff0c;F(1) 1 F(n…...

指令系统3(算数运算指令)

一.加法指令&#xff08;ADD&#xff09;&#xff1a; 用于执行 16 位或 32 位的加法运算。 指令格式及功能&#xff1a; ADD Rd, Rm&#xff1a;将寄存器Rd和Rm的值相加&#xff0c;结果存回Rd&#xff0c;即Rd Rd Rm。ADD Rd, Rn, Rm&#xff1a;把寄存器Rn和Rm的值相加&…...