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

CD19.【C++ Dev】类和对象(10) 日期类对象的成员函数(日期+天数)

目录

日期+天数

需要考虑的几个问题

1.天数加在日上,有可能会溢出,需要进位

2.对月进位,也有可能导致月会溢出,需要进位

3.对年进位,需要考虑是否为闰年

代码设计

取得指定月的天数GetMonthDay函数

方法1:if判断或switch/case

方法2:查表

版本1

版本2

operator+

初始化临时对象

进位的处理

完整代码

测试代码

提问

operator+=

完整代码

测试代码

代码复用

1.+复用+=

2.+=复用+

提问

+复用+=调用拷贝构造函数次数如下:

+=复用+调用拷贝构造函数次数如下:

练习


日期+天数

日期+天数:显然需要重载"+",操作:?年?月?日+天数==?年?月?日

需要考虑的几个问题

1.天数加在日上,有可能会溢出,需要进位

2.对月进位,也有可能导致月会溢出,需要进位

3.对年进位,需要考虑是否为闰年

闰年判断参见15.【C语言】初识操作符 下文章

口诀:四年一闰,百年不闰,四百年又闰

if ((year%4==0 && year%100!=0) || (year%400==0))
{//do_something
}

代码设计

取得指定月的天数GetMonthDay函数

天数加在日上,有可能会溢出,需要进位则需要考虑每一个月最多多少天,而且二月份比较特殊(闰年2月有29天,非闰年2月有28天),可以写一个函数来取得每个月的天数

方法1:if判断或switch/case
if (month==1)
{//......
}
else if (month==2)
{//......
}
else if (month==3)
{//......
}
//.......
else
{//......
}

或者使用switch/case

switch (month)
{case 1:case 2://......case 3:
}

无论使用if还是switch/case,代码冗长,可读性差

方法2:查表

这个思想其实是哈希表思想

int day[] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };//默认2月是28天,之后单独判断

(注:day[0]可以为任何数,仅起到占位的作用)

使用下标访问的方法:day[month]来取得指定月的天数

版本1
int GetMonthDay(int year,int month)
{int day[] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };//默认2月是28天,之后单独判断if (((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) && month == 2){return 29;}return day[month];
}

提问:版本1代码有没有可以优化的地方?

答:

优化1:day数组为局部数组,每次调用该函数,程序都会创建day数组,如果多次调用,该步骤会消耗大量时间,可以尝试使用全局数组或者将数组放到静态区上

优化2:if判断的改进

可以利用短路运算的特点,将第二个条件month==2前置,月份不为2就不判断是否为闰年,节省时间

版本2
int GetMonthDay(int year,int month)//可以不使用引用返回
{//数组放到静态区上,只创建一次static int day[] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };//默认2月是28天,之后单独判断if (month == 2 && ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))){return 29;}return day[month];
}

operator+

算法:天满了向月进位,月满了向年进位.显然需要使用循环

要点:

1.先加到天上,再考虑进位的问题

2.operator+是不能改变原对象的,需要使用临时对象tmp,一旦使用临时对象tmp就不能引用返回,只能传值返回(避免传引用返回错误,牺牲一点时间)

3.区分operator+和operator+=

初始化临时对象

可以使用构造函数来初始化tmp,如下:

Date Date::operator+(int day)
{Date tmp(*this);tmp._day += day;//......
}
进位的处理
while (tmp._day > GetMonthDay(tmp._year,tmp._month))
{tmp._day -= GetMonthDay(tmp._year,tmp._month);tmp._month++;if (_month == 13){tmp._year++;tmp._month = 1;}
}
完整代码
Date Date::operator+(int day)
{Date tmp(*this);tmp._day += day;while (tmp._day > GetMonthDay(tmp._year,tmp._month)){tmp._day -= GetMonthDay(tmp._year,tmp._month);tmp._month++;if (_month == 13){tmp._year++;tmp._month = 1;}}return tmp;//注意返回的不是*this!
}
测试代码
#include "Date.h"
int main()
{Date d1(2025, 3, 25);Date d2=d1 + 100;d2.Print();return 0;
}

运行结果:

提问

Date d2=d1 + 100;是初始化还是赋值?

回顾CD17.【C++ Dev】类和对象(8):赋值运算符文章的知识点:

1.赋值运算符重载:已经存在的两个对象之间的拷贝(如d3 = d1)

2.构造函数:用一个已经存在的对象去初始化另一个对象

显然Date d2=d1 + 100是构造函数执行的,因此为初始化

也可以手动打印测试信息:

修改构造函数和拷贝构造函数:

Date::Date(int year , int month, int day)
{cout << this <<" Date::Date(int year , int month, int day)" << endl;_year = year;_month = month;_day = day;
}Date::Date(const Date& x)
{cout << this<< " Date::Date(const Date& x)" << endl;_year = x._year;_month = x._month;_day = x._day;
}

调用哪个函数就打印哪个函数的信息

测试以下代码:

#include "Date.h"
int main()
{Date d1(2025, 3, 25);cout << "d1 address:"<< & d1 << endl;Date d2 = d1 + 100;cout <<"d2 address:"<< &d2 << endl;return 0;
}

运行结果:

初始化d2时调用的是拷贝构造函数,因为拷贝构造也是构造!

operator+=

可以在operator+的基础上进行代码复用(代码复用的思想参见CD18.【C++ Dev】类和对象(9)(声明和定义分离的写法以及代码复用)文章)

完整代码

按照之前在CD17.【C++ Dev】类和对象(8):赋值运算符文章中讲过复制运算符的格式,注意要返回*this,返回类型为Date&

Date& Date::operator+=(int day)
{_day += day;while (_day > GetMonthDay(_year, _month)){_day -= GetMonthDay(_year, _month);_month++;if (_month == 13){_year++;_month = 1;}}return *this;
}
测试代码
#include "Date.h"
int main()
{Date d1(2025, 3, 25);d1 += 100;d1.Print();return 0;
}

运行结果是正确的:

提问

operator+=的代码真的没有问题吗?

答:其实仍然有问题.

使用下面这个测试代码:

#include "Date.h"
int main()
{Date d1(2025, 3, 25);d1 += -100;d1.Print();return 0;
}

 运行结果:日是负数,错误

修复

需要添加判断:加一个负数等于减这个数的相反数,需要调用operator-=,会在CD20.【C++ Dev】类和对象(11) 日期类对象的成员函数(++、--、日期-日期)文章实现

Date& Date::operator+=(int day)
{if (day < 0){*this -= -day;return *this;}_day += day;while (_day > GetMonthDay(_year, _month)){_day -= GetMonthDay(_year, _month);_month++;if (_month == 13){_year++;_month = 1;}}return *this;
}

代码复用

+和+=的代码有些重复,代码如下:

1.+复用+=

Date Date::operator+(int day)
{Date tmp(*this);tmp += day;return tmp;
}

2.+=复用+

Date& Date::operator+=(int day)
{*this = *this + day;return *this;
}

提问

对比以上两段代码,哪个写法更高效?

修改函数,打印测试信息:

Date::Date(int year , int month, int day)
{cout <<"构造函数:Date::Date(int year , int month, int day)" << endl;_year = year;_month = month;_day = day;
}Date::Date(const Date& x)
{cout << "拷贝构造函数:Date::Date(const Date& x)" << endl;_year = x._year;_month = x._month;_day = x._day;
}

测试代码(在没有优化的情况下,问一共拷贝对象几次?)

#include "Date.h"
int main()
{cout << "d1和d2初始化:" << endl;Date d1(2025, 3, 25);Date d2(1, 1, 1);cout << endl;cout << "d2=d1 + 100如下:" << endl;d2=d1 + 100;cout << endl;cout << "d1 += 100如下:" << endl;d1 += 100;return 0;
}
+复用+=调用拷贝构造函数次数如下:

可画过程图分析:

(注:Date tmp(*this)传的是*this,为Date::Date(const Date& x)需要的参数) 

结果:拷贝对象一共两次 

测试代码执行结果:

(VS显示只调用拷贝对象一次的原因:编译器做了优化)

 如果在MSDOS下的老编译器Tubro C++上测试:

#include <iostream.h>
#include <conio.h>
class Date
{
public:int GetMonthDay(int year,int month){static int day[] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };if (month == 2 && ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))){return 29;}return day[month];}Date (int year , int month, int day){cout << this <<"Date (int year , int month, int day)" << endl;_year = year;_month = month;_day = day;}Date (const Date& x){cout << "Date(const Date& x)" << endl;_year = x._year;_month = x._month;_day = x._day;}Date operator+(int day){Date tmp(*this);tmp += day;return tmp;}Date& operator+=(int day){_day += day;while (_day > GetMonthDay(_year, _month)){_day -= GetMonthDay(_year, _month);_month++;if (_month == 13){_year++;_month = 1;}}return *this;}int _year;int _month;int _day;
};int main()
{cout << "Initializing d1 and d2......" << endl;Date d1(2025, 3, 25);Date d2(1, 1, 1);cout << endl;cout << "d2=d1 + 100:" << endl;d2=d1 + 100;cout << endl;cout << "d1 += 100:" << endl;d1 += 100;getch();return 0;
}

(旧编译器下头文件是.h结尾的,最后的getch()是为了让运行临时暂停,好查看结果)  

运行结果:

(没有优化,一共拷贝对象2次)  

+=复用+调用拷贝构造函数次数如下:

可画过程图分析:

结果:拷贝对象一共四次

测试代码执行结果:

(VS显示只调用拷贝对象两次的原因:编译器做了优化)  

如果在MSDOS下的老编译器Tubro C++上测试:

#include <iostream.h>
#include <conio.h>
class Date
{
public:int GetMonthDay(int year,int month){static int day[] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };if (month == 2 && ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))){return 29;}return day[month];}Date (int year , int month, int day){cout << this <<"Date (int year , int month, int day)" << endl;_year = year;_month = month;_day = day;}Date (const Date& x){cout << "Date(const Date& x)" << endl;_year = x._year;_month = x._month;_day = x._day;}Date operator+(int day){Date tmp(*this);tmp._day += day;while (tmp._day > GetMonthDay(tmp._year,tmp._month)){tmp._day -= GetMonthDay(tmp._year,tmp._month);tmp._month++;if (tmp._month == 13){tmp._year++;tmp._month = 1;}}return tmp;}Date& operator+=(int day){*this = *this + day;return *this;}int _year;int _month;int _day;
};int main()
{cout << "Initializing d1 and d2......" << endl;Date d1(2025, 3, 25);Date d2(1, 1, 1);cout << endl;cout << "d2=d1 + 100:" << endl;d2=d1 + 100;cout << endl;cout << "d1 += 100:" << endl;d1 += 100;getch();return 0;
}

运行结果是这样的: 

(没有优化,一共拷贝对象4次)

练习

日期-日期问题:

https://leetcode.cn/problems/number-of-days-between-two-dates/

下篇博客将分析此题

相关文章:

CD19.【C++ Dev】类和对象(10) 日期类对象的成员函数(日期+天数)

目录 日期天数 需要考虑的几个问题 1.天数加在日上,有可能会溢出,需要进位 2.对月进位,也有可能导致月会溢出,需要进位 3.对年进位,需要考虑是否为闰年 代码设计 取得指定月的天数GetMonthDay函数 方法1:if判断或switch/case 方法2:查表 版本1 版本2 operator 初始…...

Linux安装MySQL数据库并使用C语言进行数据库开发

目录 一、前言 二、安装VMware运行Ubuntu 1.安装VMware 2.使用VMware打开Ubuntu 三、配置VMware使用网卡 1.添加NAT网卡 四、Linux下安装MySQL数据库 五、安装MySQL开发库 六、演示代码 sql_connect.c sql_connect.h main.c中数据库相关代码 结尾 一、前言 由于最…...

GStreamer —— 3.1、Qt+GStreamer制作多功能播放器,支持本地mp4文件、rtsp流、usb摄像头等(可跨平台,附源码)

🔔 GStreamer 相关音视频技术、疑难杂症文章合集(掌握后可自封大侠 ⓿_⓿)(记得收藏,持续更新中…) 运行效果...

如何在根据名称或id找到json里的节点以及对应的所有的父节点?

函数如下&#xff1a; 数据如下&#xff1a; [{ "name": "数据看板", "id": "data", "pageName": "tableeauData", "list": [] }, { "name": "审计模块", "id": &quo…...

IP第一次笔记

一、TCP协议 第0步&#xff1a;如果浏览器和host文件存在域名对应的P地址记录关系 则直接封装HTTP数据报文&#xff0c;如果没有记录则触发DNS解析获 取目标域名对应的P地址 第一步&#xff1a;终端主机想服务器发起TCP三次握手 1.TCP的三次握手 2.传输网页数据 HTTP --应用层…...

手机硬件检测详解:从版本信息到相机功能的全面指南

手机硬件检测概述 接下来&#xff0c;我们将为您提供一份详尽的手机硬件检测指南&#xff0c;涵盖三十项关键内容&#xff0c;助您轻松掌握手机硬件的检测技巧。对于开发者而言&#xff0c;在测试手机硬件性能时&#xff0c;可以结合使用克魔开发助手&#xff08;Keymob&#…...

大数据学习(86)-Zookeeper去中心化调度

&#x1f34b;&#x1f34b;大数据学习&#x1f34b;&#x1f34b; &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 用力所能及&#xff0c;改变世界。 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4dd;支持一…...

05-SpringBoot3入门-整合SpringMVC(配置静态资源、拦截器)

1、说明 在01-SpringBoot3入门-第一个项目-CSDN博客中&#xff0c;其实就已经整合了SpringMVC。下面讲解怎么配置静态资源和拦截器 2、配置静态资源 命名&#xff1a;static&#xff08;文件夹&#xff09; 位置&#xff1a;src/main/resources 编写一个html文件 访问 http:/…...

大数据学习(88)-zookeeper实现的高可用(HA)

&#x1f34b;&#x1f34b;大数据学习&#x1f34b;&#x1f34b; &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 用力所能及&#xff0c;改变世界。 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4dd;支持一…...

自然语言处理(5)—— 中文分词

中文分词的基本原理及实现 1. 什么是词2. 基本原理3. 发展趋势&#xff1a;多数场景无需显式分词 信息处理的目标是使用计算机能够理解和产生自然语言。而自然语言理解和产生的前提是对语言能够做出全面的解析。 汉语词汇是语言中能够独立运用的最小的语言单位&#xff0c;是语…...

MP4音视频格式

1.MP4 MP4是一种用于封装音视频/字幕/图片/章节信息等数据的多媒体容器格式&#xff0c;是MPEG-4系列的成员之一 2.文件结构 MP4由一层层的嵌套Box&#xff08;atom&#xff09;组成 [ size (4 bytes) ][ type (4 bytes)][ payload (嵌套box或者数据) ] 3.常见Box 类型名称…...

NO.59十六届蓝桥杯备战|基础算法-前缀和|一维前缀和|最大子段和|二维前缀和|激光炸弹(C++)

前缀和与差分的核⼼思想是预处理&#xff0c;可以在暴⼒枚举的过程中&#xff0c;快速给出查询的结果&#xff0c;从⽽优化时间复杂度。 是经典的⽤空间替换时间的做法 前缀和 解法1&#xff1a;暴力模拟&#xff0c;q有几次&#xff0c;就套几次for循环 解法2&#xff1a;前…...

Node.js 模块加载机制--详解

目录 Node.js 模块加载机制详解 1. 什么是模块&#xff1f; 2. 模块加载顺序 3. 核心模块加载 4. 自定义模块加载 5. 目录作为模块&#xff08;index.js&#xff09; 6. require.resolve() 查找模块路径 7. module 对象解析 8. require.cache 机制&#xff08;避免重复…...

Live555+Windows+MSys2 编译Androidso库和运行使用(三,实战篇)

文章目录 先上效果图VLC中打开日志权限cmakelist 和gradle建议直接去git查看源代码ui下一篇视频预览和采集 先上效果图 VLC中打开 日志 com.mq.qrtspclient E mystream stream, from the file /storage/emulated/0/Android/data/com.mq.qrtspclient/files/…...

验证码通过“Canvas 绘制”与“Base64 图片”渲染两种不同的实现方式显示

文章目录 &#x1f389;验证码通过“Canvas 绘制”与“Base64 图片”渲染两种不同的实现方式显示一、Canvas 绘制&#xff1a;接口回调“字符串”通过绘制的方式显示到前端✨1、前端代码&#xff08;Canvas 绘制&#xff09;&#xff1a;包含验证码区域、绘制验证码方法&#x…...

FALL靶场通关攻略

1&#xff0c;下载好靶机后打开&#xff0c;通过kali扫描靶机ip和端口&#xff0c;得到靶机ip为192.168.50.144 2&#xff0c;扫描目录 3&#xff0c;访问靶机 4&#xff0c;访问扫描到的test.php,得到缺少GET请求参数的提示 5&#xff0c;使用FUZZ来扫出参数为file 6&#xff…...

(学习总结31)Linux 进程地址空间与进程控制

Linux 进程地址空间与进程控制 进程地址空间Linux 进程地址空间分布虚拟地址空间和页表创建子进程与写时拷贝权限访问缺页中断 Linux 虚拟内存管理mm_struct 内存描述符区域划分vm_area_struct 独立虚拟内存区域 虚拟地址空间的作用 进程控制进程创建fork 函数介绍写时拷贝作用…...

基于Springboot的网上订餐系统 【源码】+【PPT】+【开题报告】+【论文】

网上订餐系统是一个基于Java语言和Spring Boot框架开发的Web应用&#xff0c;旨在为用户和管理员提供一个便捷的订餐平台。该系统通过简化餐饮订购和管理流程&#xff0c;为用户提供快速、高效的在线订餐体验&#xff0c;同时也为管理员提供完善的后台管理功能&#xff0c;帮助…...

Axure设计之中继器表格——拖动行排序教程(中继器)

一、原理介绍 在Axure中实现表格行的拖动排序&#xff0c;主要依赖于中继器的排序事件。然而要实现拖动效果&#xff0c;就必须结合动态面板&#xff0c;因为动态面板可以设置拖动事件&#xff0c;之所以使用动态面板或许是因为它可以更灵活地处理位置变化。用户拖动行时&…...

GAUSSDB 分布式存储机制深度解析

GAUSSDB 分布式存储机制深度解析 一、核心机制概览 GAUSSDB 的分布式存储通过 数据分片、多副本管理 和 全局事务控制 实现高可用与水平扩展。以下为关键机制详解&#xff1a; 二、数据分片&#xff08;Sharding&#xff09; 1. 分片策略 GAUSSDB 支持多种分片规则&#xff…...

【NLP 46、大模型技术发展】

目录 一、ELMo 2018 训练目标 二、GPT-1 2018 训练目标 三、BERT 2018 训练目标 四、Ernie —— baidu 2019 五、Ernie —— Tsinghua 2019 六、GPT-2 2019 七、UNILM 2019 八、Transformer - XL & XLNet 2019 1.模型结构 Ⅰ、循环机制 Recurrence Mechanism Ⅱ、相对位置…...

汽车加气站操作工证书报考条件是什么?

关于汽车加气站操作工的资格证书&#xff1a; 一、核心证书要求 CNG充装人员上岗证 这是加气站加气工的核心资质证书&#xff0c;需通过专业培训并考核。该证书由相关部门颁发&#xff0c;证明持证人具备从事CNG&#xff08;压缩天然气&#xff09;充装操作的专业技能&#xf…...

材质及制作笔记

基本流程&#xff1a; 建中模——zb雕刻高模——maya拓扑低模——拆uv——sp烘焙贴图——sp绘制材质——渲染 1 材质贴图&#xff1a; diffuse/albedo/basecolor&#xff1a;漫反射 reflection/specular&#xff1a;反射 metalness&#xff1a;金属度 glossiness&#xf…...

Opencv 图像读取与保存问题

本文仅对 Opencv图像读取与保存进行阐述&#xff0c;重在探讨图像读取与保存过程中应注意的细节问题。 1 图像读取 首先看一下&#xff0c;imread函数的声明&#xff1a; // C: Mat based Mat imread(const string& filename, int flags1 );// C: IplImage based IplImage*…...

Flutter 2025生态全景:从跨端到嵌入式开发的新机遇

一、技术演进&#xff1a;从"一次编写多端运行"到"全场景覆盖" 1.1 渲染引擎革命&#xff1a;Impeller 2.0的性能突破 // 启用Impeller的配置示例&#xff08;android/app/build.gradle&#xff09; def enableImpeller true android {defaultConfig {…...

Idea中诡异的文件编码问题: 设置fileCodeing为UTF8但不生效

在fileCoding配置了编码utf-8&#xff0c;右下角的文件里编码格式却是ISO-8859-1&#xff0c;git后到远程仓库里却是ISO-8859-1的乱码&#xff0c;怎么修改都不生效&#xff0c;重启也不行&#xff0c;恶心的不行。 最后发现修复方案是&#xff1a; 1. 先随便做个变更&#x…...

Linux中逻辑卷的使用、扩容与磁盘配额

目录 一.逻辑卷概述 1.普通分区的优缺点 2.逻辑卷的优点 3.逻辑卷概述 二.逻辑卷的创建 1.逻辑卷相关命令 2.创建步骤 三.逻辑卷的扩容 1.扩容步骤 四.磁盘配额 1.概念及注意点 2.使用条件 3.相关命令 一.逻辑卷概述 1.普通分区的优缺点 普通分区优点&#xff1a…...

Java版Manus实现来了,Spring AI Alibaba发布开源OpenManus实现

此次官方发布的 Spring AI Alibaba OpenManus 实现&#xff0c;包含完整的多智能体任务规划、思考与执行流程&#xff0c;可以让开发者体验 Java 版本的多智能体效果。它能够根据用户的问题进行分析&#xff0c;操作浏览器&#xff0c;执行代码等来完成复杂任务等。 项目源码及…...

关于IP免实名的那些事

IP技术已成为个人与企业保护隐私、提升网络效率的重要工具。其核心原理是通过中介服务器转发用户请求&#xff0c;隐藏真实IP地址&#xff0c;从而实现匿名访问、突破地域限制等目标。而“免实名”代理IP的出现&#xff0c;进一步简化了使用流程&#xff0c;用户无需提交身份信…...

从零构建大语言模型全栈开发指南:第二部分:模型架构设计与实现-2.2.3实战案例:在笔记本电脑上运行轻量级LLM

👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 实战案例:在笔记本电脑上运行轻量级LLM2.2.3 模型架构设计与实现1. 环境与工具准备1.1 硬件要求1.2 软件栈选择2. 轻量级模型架构设计2.1 模型参数配置2.2 关键技术优化3. 实战流程3.1 数据准备流程3.2…...

Labview信号分析系统(含报告)

1.摘要 本文详细介绍了基于LabVIEW的轴承故障信号分析系统的设计与实现。该系统以凯斯西储大学轴承驱动端的振动信号为研究对象&#xff0c;涵盖了正常信号以及内圈、滚珠、外圈三种故障信号的分析。系统可以对信号进行滤波、时域分析、频域分析和时频域分析等。系统的功能如下…...

基于FastAPI与Kimi AI的智能聊天应用开发实践

一、项目概述 本文介绍一个基于现代Web技术栈的智能对话系统&#xff0c;前端采用响应式设计实现聊天界面&#xff0c;后端通过FastAPI框架构建高性能API服务&#xff0c;集成Moonshot AI大语言模型实现智能对话功能。系统具备完整的消息交互流程&#xff0c;支持参数定制化配…...

Android 蓝牙/Wi-Fi通信协议之:经典蓝牙(BT 2.1/3.0+)介绍

在 Android 开发中&#xff0c;经典蓝牙&#xff08;BT 2.1/3.0&#xff09;支持多种协议&#xff0c;其中 RFCOMM/SPP&#xff08;串口通信&#xff09;、A2DP&#xff08;音频流传输&#xff09;和 HFP&#xff08;免提通话&#xff09;是最常用的。以下是它们在 Android 中的…...

介绍FRAMES:一个统一的检索增强生成评估框架

引言 大型语言模型&#xff08;LLMs&#xff09;在认知任务上取得了显著进步&#xff0c;检索增强生成&#xff08;RAG&#xff09;技术成为提升模型性能的重要方法。然而&#xff0c;现有的评估方法往往孤立地测试模型的检索能力、事实性和推理能力&#xff0c;无法全面反映模…...

云钥科技多通道工业相机解决方案设计

项目应用场景分析与需求挑战 1. 应用场景 ‌目标领域‌&#xff1a;工业自动化检测&#xff08;如精密零件尺寸测量、表面缺陷检测&#xff09;、3D立体视觉&#xff08;如物体建模、位姿识别&#xff09;、动态运动追踪&#xff08;如高速生产线监控&#xff09;等。 ‌核心…...

微信小程序逆向开发

一.wxapkg文件 如何查看微信小程序包文件&#xff1a; 回退一级 点击进入这个目录 这个就是我们小程序对应的文件 .wxapkg概述 .wxapkg是微信小程序的包文件格式&#xff0c;且其具有独特的结构和加密方式。它不仅包含了小程序的源代码&#xff0c;还包括了图像和其他资源文…...

Debian ubuntu源

配置文件路径 /etc/apt/sources.list 阿里 deb http://mirrors.aliyun.com/ubuntu/ $(lsb_release -cs) main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ $(lsb_release -cs) main restricted universe multiverse deb http://mirrors.aliyun.…...

几个工作中常用的网站

1.思维导图流程图 在线版 ProcessOn思维导图流程图-在线画思维导图流程图_在线作图实时协作 2.编码转换及报文格式化 ESJSON在线工具首页(ES JSON在线工具) JSON在线解析格式化验证 - JSON.cn 3.AI助手 通义 - 你的个人AI助手 文心一言 谷灵AI&#xff0c;你的工作好帮手…...

《Apipost如何超越Postman与Apifox?SocketIO调试工具横评》

实时通信调试工具可能已「过时」&#xff01;许多主流工具如Apifox不支持SocketIO协议&#xff0c;导致调试效率低下。而Apipost作为国产工具&#xff0c;原生支持SocketIO&#xff0c;提供自定义事件管理、连接状态可视化等功能&#xff0c;极大提升了实时通信开发的效率和准确…...

为什么要将项目部署到外部tomcat

一、是什么 指将你的Java Web应用程序&#xff08;如WAR包&#xff09;安装并运行在一个独立安装的、位于项目外部的Tomcat服务器上&#xff0c;而不是使用内嵌的或开发环境自带的服务器。 外部Tomcat 指独立安装的Tomcat服务器&#xff08;如从Apache官网下载的Tomcat&#…...

小迪安全109-php模型动态调试,反序列化,变量覆盖,tp框架,原生pop链

案例一 原生代码变量覆盖&#xff0c;duomicms 变量覆盖是什么 这个时候为什么会输出xiaodi呢 就是因为$ab所以$$a$b 所以就让$bxiaodi 搞不到源码&#xff0c;看老师的学吧 这一般在web端页面是看不到&#xff0c;也不好发现&#xff0c;代码可以看关键字和函数 例如$$这…...

Python 练习项目:MBTI 命令行测试工具

在当今数字化的时代,心理测试工具越来越受到欢迎,它们帮助人们更好地了解自己,做出更明智的职业选择,甚至改善人际关系。MBTI(迈尔斯-布里格斯性格分类法)是其中一种广为人知的人格测试,通过评估个人在四个维度上的偏好(外向-内向、实感-直觉、理智-情感、判断-理解),…...

zynq7000 + ucos3 + lwip202_v1_2调试过程

1 现在裸机应用上验证lwip 跑起来可能会报错&#xff0c;看下面的链接解决 zynq 网卡Phy setup error问题 zynq 网卡Phy setup error问题-CSDN博客 2 ping同以后&#xff0c;在zynq上添加ucos系统 链接如下&#xff1a; ZYNQ移植uCOSIII_zynq ucos-CSDN博客 3 移植lwip协议…...

Oracle数据库数据编程SQL<2.2 DDL 视图、序列>

目录 一、Oracle 视图(Views) &#xff08;一&#xff09; Oracle 视图特点 &#xff08;二&#xff09;Oracle 视图创建语法 关键参数&#xff1a; &#xff08;三&#xff09;Oracle 视图类型 1、普通视图 2、连接视图&#xff08;可更新&#xff09; 3、对象视图 4…...

关于bug总结记录

1、vs中出现bug error C1083:无法打开文件 链接&#xff1a;vs中出现bug error C1083:无法打开文件_vs20151083错误解决方法-CSDN博客 2、 VS小技巧&#xff1a;系统却提示&#xff1a;示msvcp120.dll丢失 链接&#xff1a;VS小技巧&#xff1a;系统却提示&#xff1a;示msvc…...

ClickHouse与TiDB实操对比:从入门到实战的深度剖析

ClickHouse与TiDB实操对比&#xff1a;从入门到实战的深度剖析 宝子们&#xff0c;在当今数据驱动的时代&#xff0c;选择合适的数据库对于处理海量数据和支撑业务发展至关重要。ClickHouse和TiDB作为两款备受关注的数据库&#xff0c;各自有着独特的优势和适用场景。今天&…...

【测试开发】OKR 小程序端黑盒测试报告

【测试报告】OKR 小程序端 项目名称版本号测试负责人测试完成日期联系方式OKR 小程序端4.0马铭胜2025-03-2515362558972 1、项目背景 1.1 OKR 用户端 在如今这个快节奏的时代中&#xff0c;个人和组织的成长往往依赖于清晰、明确且意义深远的目标。然而&#xff0c;如何设定…...

LibVLC —— 《基于Qt的LibVLC专业开发技术》视频教程

🔔 LibVLC/VLC 相关技术、疑难杂症文章合集(掌握后可自封大侠 ⓿_⓿)(记得收藏,持续更新中…) 《基于Qt的LibVLC专业开发技术》课程视频,(CSDN课程主页、51CTO课程主页) 适合具有一些C++/Qt编程基础,想要进一步提高或涉足音视频行业的。本课程分7章节,共计35小节。…...

故障识别 | 基于改进螂优化算法(MSADBO)优化变分模态提取(VME)结合稀疏最大谐波噪声比解卷积(SMHD)进行故障诊断识别,matlab代码

基于改进螂优化算法&#xff08;MSADBO&#xff09;优化变分模态提取&#xff08;VME&#xff09;结合稀疏最大谐波噪声比解卷积&#xff08;SMHD&#xff09;进行故障诊断识别 一、引言 1.1 机械故障诊断的背景和意义 在工业生产的宏大画卷中&#xff0c;机械设备的稳定运行…...

2025年最新自动化/控制保研夏令营预推免面试真题分享(东南大学苏州校区/华东理工/南航/天大)

笔者来2021级本科自动化专业&#xff0c;以下部分将介绍我在夏令营以及预推免期间发生经历和问题 东南大学苏州校区蒙纳士大学联培 东南大学苏州校区的项目算是一个比较小众的项目&#xff0c;是第一年在苏州校区&#xff0c;二三年到南京校区找导师&#xff08;不提供住宿自…...