自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

modi000的博客

零碎的知识,简单的理解

  • 博客(1148)
  • 资源 (1)
  • 收藏
  • 关注

转载 纯干货全面解读AI框架RAG

这种能力的增加不仅极大地扩展了模型的知识范围,还提高了其与现实世界同步的能力,让它能够更有效地参与到关于时事的对话中。如果你的问题涉及特定的专业领域,RAG就像一个熟练的图书管理员,它不仅掌握着大量的专业书籍,还能够迅速而准确地从这些书籍中找到与你的问题最相关的答案。设想你有成千上万本书籍和文章,当你提出一个问题时,检索模型就像一个聪明的图书管理员,能迅速理解你的问题并找到与之最相关的最佳信息。​ 作者:秋水札记 https://www.bilibili.com/read/cv27742028/?

2023-11-22 10:26:05 77

原创 new/delete 和malloc/free的区别

小结:C语言中,申请了多个内存空间,也是只用free即可。

2023-11-20 22:11:08 126

转载 C语言——冒泡排序

以从小到大排序为例,第一轮比较后,所有数中最大的那个数就会浮到最右边;第二轮比较后,所有数中第二大的那个数就会浮到倒数第二个位置……版权声明:本文为CSDN博主「小明的c++笔记本」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。冒泡排序的原理是:从左到右,相邻元素进行比较。每次比较一轮,就会找到序列中最大的一个或最小的一个。这个数就会从序列的最右边冒出来。值得注意的是函数中的定义的count是为了检验是否进行了元素的交换,是对代码的一种优化。

2023-11-20 11:49:19 35

转载 时间复杂度计算方法以及常见的时间复杂度

即,我们将字母取无穷大,例如本题中字母为n,n取无穷大,而十对于n取无穷大后没有影响,因此10可以舍去,原表达式化为n*n+n,再转化为n*(n+1),由于n为无穷大,因此-1也是没有影响的,原式就变成了O(N*N)。指数阶一般是算法题的暴力解法,一般是多层循环的嵌套,例如上面题二中,最大是两层n次循环的嵌套因此`时间复杂度为O(N^2),n的平方次,要是三层n次循环的嵌套则为O(N^3).因为假设n是数k的因子,那么n^2也必定是数k的因子,所以不需要枚举小于k这么多数,只需要枚举根号n个数就可以了.

2023-11-19 16:31:23 32

转载 LLM的上下文长度

转载:

2023-11-09 15:31:40 28

转载 C++经典面试题100例及答案

虚函数实现的是在基类中通过使用关键字virtual来申明一个函数为虚函数,含义就是该函数的功能可能在将来的派生类中定义或者在基类的基础之上进行扩展,系统只能在运行阶段才能动态决定该调用哪一个函数,所以实现的是动态的多态性。虚函数是通过虚函数表来实现的,每个对象都有一个虚函数表指针,指向该类的虚函数表。而对象在构造函数中才初始化虚函数表指针,如果构造函数是虚函数,就需要通过虚函数表来调用,但此时对象还没有实例化,也就没有虚函数表指针,无法找到虚函数表,因此构造函数不能是虚函数。因此构造函数没有必要是虚函数。

2023-11-06 12:20:41 71

原创 虚析构函数

2)因为存在多态性,如果父类的析构函数不为虚函数,则会出现问题,所以,为增强程序的鲁棒性,则父类的析构函数中设置为虚函数。发生继承后,子类的成员函数比父类多,所以父类指针无法指向子类的成员变量或者函数。虚析构函数是为了解决父类指针指向子类对象时,释放子类对象的资源时,释放不完全,造成的内存泄漏问题。子类会继承父类对象的所有的成员变量和成员函数(除了构造,析构,拷贝构造和赋值操作运算符)。结论:1)如果是自身的类指针指向自身的类对象,不会出现问题。发生多态的条件是,父类指针或引用指向子类对象,虚函数重写。

2023-11-06 12:16:10 78

原创 C++构造函数

/调用的是默认构造函数。

2023-11-05 18:53:12 29

转载 C++核心编程---友元

友元生活中你的家有客厅(Public),有你的卧室(Private)客厅所有来的客人都可以进去,但是你的卧室是私有的,也就是说只有你能进去但是呢,你也可以允许你的好闺蜜好基友进去。在程序中,有些私有属性 也想让一些特殊的类或者类外特殊的函数访问,需要友元。友元的目的是让一个函数或者类访问另一个类中的私有成员类的主要特点是封装性,即类的私有成员只能被它自己的成员函数访问,类外的函数无法访问类的私有成员。

2023-11-05 14:29:30 18

转载 GDB调试

虽然它是命令行模式的调试工具,但是它的功能强大到你无法想象,能够让用户在程序运行时观察程序的内部结构和内存的使用情况。要调试C/C++的程序,首先在编译时,要使用gdb调试程序,在使用gcc编译源代码时必须加上“-g”参数。GDB中的命令很多,但我们只需掌握其中十个左右的命令,就大致可以完成日常的基本的程序调试工作。说明没有带有调试功能,则不能被调试。/home/minger/share/tencent/gdb/main是程序的路径。1、按照自定义的方式启动运行需要调试的程序。3、程序暂停时的值的监视。

2023-11-05 14:26:50 16

转载 KeepAlive

首先,我们要明确我们谈的是TCP的 KeepAlive 还是HTTP的 Keep-Alive。TCP的KeepAlive和HTTP的Keep-Alive是完全不同的概念,不能混为一谈。实际上HTTP的KeepAlive写法是Keep-Alive,跟TCP的KeepAlive写法上也有不同。TCP的keepalive是侧重在保持客户端和服务端的连接,一方会不定期发送心跳包给另一方,当一方端掉的时候,没有断掉的定时发送几次心跳包,如果间隔发送几次,对方都返回的是RST,而不是ACK,那么就释放当前链接。

2023-11-02 17:30:37 21

转载 从机器智能到感知智能,再到认知智能的人工智能技术

综上所述,从机器智能到感知智能,再到认知智能,人工智能技术正在以惊人的速度向前发展。感知智能使机器能够主动感知和理解外部环境,认知智能赋予机器类似人类的学习、推理和记忆能力。随着技术的不断突破和应用场景的拓展,相信认知智能将继续推动人工智能技术的创新与发展,为我们的未来带来更多可能性和机遇。人工智能技术的发展一直以来都备受关注,近年来,从机器智能到感知智能,再到认知智能,人工智能越来越接近人类的智能水平。本文将详细介绍从机器智能到感知智能,再到认知智能的人工智能技术,并探讨其对社会与生活的深远影响。

2023-11-02 11:07:52 32

转载 WAMS系统与传统SCADA系统的区别是什么?

而WAMS采用的PMU单元利用GPS信号实现数据的同步采集,采集信号除稳态量外,还包括各个母线电压电流的相角,并且能对各台发电机的功角进行测量。一种可行的方案是:只在系统中最关键的部分安装 WAMS系统,以精细的 WAMS 量测数据对这部分系统进行精确监控,并利用这些精细数据来提高系统其它部分SCADA数据的精度。(3)对数据共享的要求不同:WAMS系统测量的是各母线电压的相量和发电机功角,要求数据的同步采集和传输,并且WAMS系统数据几十毫秒刷新一次,带来的海量数据对数据共享和通信系统具有较高的要求。

2023-11-01 21:39:13 50

转载 长连接 、短连接、心跳机制

在使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,客户端再次访问这个服务器时,会继续使用这一条已经建立的连接。HTTP的长连接和短连接本质上是TCP长连接和短连接。HTTP是一个无状态的面向连接的协议,无状态不代表HTTP不能保持TCP连接,更不能代表HTTP使用的是UDP协议(无连接)。很多网络设备,尤其是NAT路由器,由于其硬件的限制(例如内存、CPU处理能力),无法保持其上的所有连接,因此在必要的时候,会在连接池中选择一些不活跃的连接踢掉。

2023-10-31 11:35:46 38

原创 C++中显示调用构造函数和隐式调用构造函数及exciplit的使用

截图来源于C++ primerplus 第六版。

2023-10-25 18:01:54 213

转载 构造函数的4种使用方式总结

通过让构造函数创建一个新的临时对象,然后将其内容复制给d,然后程序调用析构函数,以删除该临时对象。我们无法像调用成员函数那样使用对象来调用构造函数,因为在构造函数构造出对象之前,对象是不存在的,因此构造函数被用来创建对象,而不能通过对象来调用。如果既可以通过初始化,也可以通过赋值来设置对象的值,则应采用初始化方式。无参的时候不可以像上面那样隐式地调用构造函数,因为编译器无法区分这是函数的声明还是对象的定义。其功能可以描述为创建一个名为d的Date对象,并将其数据成员初始化为指定的值。

2023-10-24 17:18:56 60

转载 【深入理解C++】浅拷贝与深拷贝

编译器默认提供的拷贝是浅拷贝(shallow copy),将一个对象中所有成员变量的值拷贝到另一个对象,如果某个成员变量是个指针,只会拷贝指针中存储的地址值,并不会拷贝指针指向的内存空间,可能会导致堆空间多次 free 的问题。深拷贝和浅拷贝主要是针对类中的指针和动态分配的空间来说的,因为对于指针只是简单的值复制并不能分割开两个对象的关联,任何一个对象对该指针的操作都会影响到另一个对象。深拷贝(deep copy)是将指针类型的成员变量所指向的内存空间拷贝到新的内存空间。对于值类型的成员进行值复制。

2023-10-24 16:27:31 24

转载 C++ 运算符重载

本文引用于“C语言中文网”,我整理出来放在博客,方便大家共同学习。所有知识点和代码均已亲测可用,如有疑问,可提出,一起讨论学习。1. C++运算符重载的概念和原理2. C++重载=(C++重载赋值运算符)3. C++深拷贝和浅拷贝(C++深复制和浅复制)4. C++运算符重载为友元函数5. C++实现可变长度的动态数组6. C++重载(C++重载输出运算符和输入运算符)7. C++重载()(强制类型转换运算符)8. C++重载++和--(自增和自减运算符)

2023-10-23 16:39:24 24

转载 C++:友元(看这一篇就够了)

需要注意的是,在类外定义,需要在成员函数加上所在类的作用域(

2023-10-23 16:06:44 21

转载 C++ 内联函数

来结束自己的生命,从而结束整个程序。使用内联函数的缺点也是非常明显的,编译后的程序会存在多份相同的函数拷贝,如果被声明为内联函数的函数体非常大,那么编译后的程序体积也将会变得很大,所以再次强调,一般只将那些短小的、频繁调用的函数声明为内联函数。由于内联函数比较短小,我们通常的做法是省略函数原型,将整个函数定义(包括函数头和函数体)放在本应该提供函数原型的地方。当函数比较复杂时,函数调用的时空开销可以忽略,大部分的 CPU 时间都会花费在执行函数体代码上,所以我们一般是将非常短小的函数声明为内联函数。

2023-10-23 14:45:23 21

转载 C++父类指针指向子类对象的实现原理

当定义一个指向子类实例的父类指针的时候,内存中实例化了子类,由于子类继承了父类,因此内存中的子类里包含父类的所有成员。但是如果用子类指针指向父类的话,一旦访问子类特有的方法函数或者成员变量,就会出现非法,因为被子类指针指向的由父类创建的对象,根本没有要访问的那些内容,那些是子类特有的,只有用子类初始化对象时才会有。如果基础类和派生类类定义了相同名称的成员函数,那么通过对象指针调用成员函数时,到底调用那个函数要根据指针的原型来确定,而不是根据指针实际指向的对象类型确定。2.1 没有虚函数的继承。

2023-10-23 14:05:09 64

转载 互斥信号量和二进制信号量的区别

打印机资源只有一个,abc三个任务共享,当a取得使用权后,为了防止其他任务错误地释放了信号量(),必须将打印机房的门关起来(进入临界段),用完后,释放信号量,再把门打开(出临界段),其他任务再进去打印。因此,为了访问共享资源,线程必须从信号量得到通行证, 如果该信号量的计数大于0,则此线程获得一个通行证,这将导致信号量的计数递减,否则,此线程将阻塞直到获得一个通行证为止。当信号量被释放一个,值被加一后,系统自动从等待队列中唤醒一个等待中的线程,让其获得信号量,同时信号量再减一。同一个任务可以递归申请。

2023-10-18 13:29:28 45

转载 函数指针和指针函数用法和区别

函数指针,其本质是一个指针变量,该指针指向这个函数。总结来说,函数指针就是指向函数的指针。声明格式:类型说明符 (*函数名) (参数)函数指针是需要把一个函数的地址赋值给它,有两种写法:取地址运算符&不是必需的,因为一个函数标识符就表示了它的地址,如果是函数调用,还必须包含一个圆括号括起来的参数表。x = fun();两种方式均可,其中第二种看上去和普通的函数调用没啥区别,如果可以的话,建议使用第一种,因为可以清楚的指明这是通过指针的方式来调用函数。

2023-10-18 13:21:23 35

原创 子类对象构造与析构的过程

可以看到,显示构造父类,然后是子类,析构是先析构子类,再是父类。

2023-10-17 19:25:53 125

转载 多态和继承的详细理解以及什么是父类指针指向子类对象

当存在继承关系时,父类的引用变量可以引用子类的对象,并且可以根据对象的实际类型调用相应的方法。继承可以形成类的层次结构,通过上溯转型(upcasting),可以将子类对象当作父类对象对待,实现父类的引用指向子类的对象。多态是面向对象编程中的一个重要概念,指的是同一种行为在不同的对象上具有不同的表现形式。多态性是继承的一个重要目标,它通过允许父类的引用变量指向子类的对象,实现了在不同对象上调用同一方法的不同行为。多态提高了代码的灵活性和可扩展性,可以编写通用的代码,适用于多种不同的对象类型。

2023-10-17 11:06:40 45

转载 怎么理解C++多态的“父类指针或引用指向子类对象”?

所以用父类指针指向子类时,没有问题,因为父类有的,子类都有,不会出现非法访问问题。但是如果用子类指针指向父类的话,一旦访问子类特有的方法函数或者成员变量,就会出现非法。可以通俗的理解,子类可能含有一些父类没有的成员变量或者方法函数,但是子类肯定继承了父类所有的成员变量和方法函数。虽然父类指针可以指向子类,但是其访问范围还是仅仅局限于父类本身有的数据,那些子类的数据,父类指针是无法访问的。调用时,可以定义父类的指针,然后指向子类的对象,指向哪个对象,便执行其对象的虚函数实现。为什么父类指针可以指向子类?

2023-10-17 10:57:16 153

转载 Linux 软链接 与 硬链接 的区别

​  软链接(soft link):也称为符号链接(Symbolic Link),类似于 Windows 操作系统中的快捷方式文件,该文件有自己的名称、inode 和 物理存储的文件数据(记录着另一文件的路径名指向),访问该文件会被重新定向到软链接所指的源文件名。​  硬链接(hard link):相当于为当前文件名对应的文件再创建一个文件别名,当前文件名与该文件别名对应的 inode 和 物理存储的文件数据 都是一样的,访问该文件别名同访问当前文件名一致。删除源文件,软链接会失效,硬链接不会;

2023-10-13 22:02:22 26

转载 总结软连接和硬连接区别

​ 硬链接:硬链接的文件类型是,原来是什么就是什么,例如:原来是普通文件,还是普通文件。​ 软链接:删除一个软链接,链接数不会有变化,删除的相当于是一个文件(或快捷方式)。​ 软链接:软链接的原始文件路径是,相对的软链接的相对路径,而不是相对当前工作目录。​ 软链接:原始文件和软链接有依赖关系,原始文件删了,软链接就失效了。​ 硬链接:硬链接的相对路径,是相对的当前工作目录的相对路径。​ 硬链接:删除某一个硬链接,另一个硬链接不影响使用。​ 硬链接:删除一个硬链接,硬链接的链接数会有变化。

2023-10-13 21:41:38 155

转载 两个指向同一个字符串常量的指针

是不是很奇怪,原因是这是在Debug调试版本下的运行结果,此时创建的两个指针,虽然均指向的是a的地址,但是他们的自身的地址不一样,所以不相等。事实上,为了节省空间(可以节省一个指针大小的空间),系统会进行优化,让两个指针指向相同的同时存放地址也相同,即相等。版权声明:本文为CSDN博主「__CFeng」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/hfeng1_/article/details/126525878。

2023-10-10 16:24:07 28

转载 使用Spring AOP实现日志记录

在LogAspect类的方法上,我们使用了Spring AOP的注解,通过指定切点表达式来切入指定的方法。在上述示例中,我们创建了一个简单的Spring MVC控制器,并定义了两个接口:hello()和exception()。通过编写一个切面类,并通过配置文件激活切面,我们可以在需要记录日志的方法上切入相关逻辑,实现日志记录的同时保持代码的整洁性。当我们访问/exception接口时,由于抛出了异常,切面会记录一条异常日志。接下来,让我们来演示如何在实际的代码中应用日志记录切面。

2023-09-24 10:36:17 104

转载 TCP socket心跳包示例程序

在TCP socket心跳机制中,心跳包可以由服务器发送给客户端,也可以由客户端发送给服务器,不过比较起来,前者开销可能更大。可以看出,客户端启动以后发送了15次心跳包,然后停止发送心跳包。在做游戏开发时,经常需要在应用层实现自己的心跳机制,即定时发送一个自定义的结构体(心跳包),让对方知道自己还活着,以确保连接的有效性。若 count 等于 5,说明已经15秒未收到该用户心跳包,判定该用户已经掉线;2) 客户端则只是开辟子线程,定时给服务器发送心跳包(本示例中定时时间为3秒)。

2023-09-14 17:24:17 153

原创 补码的最终理解

如上例所示,实际中,我们只会使用50至99表示-50至-1的补码,空出1-49。让计算机做加法,故将减法(负数)转换成加法(正数),转换后结果求和结果不变。先移项:xxxx xxxx = 0000 0000-0010 1101,可得出:xxxx xxxx = (借位 1) 1101 0011,其中的:xxxx xxxx,就是【-45 的八位补码】。实际上,任意负数(-X)的补码,都是:0 - X。同理,任意正数(+X)的补码,也都是:0 + X。其实,补码的原理,与 “取反加一” 毫无关系。

2023-09-11 21:23:30 134

转载 RPA的介绍

RPA是Robotic Process Automation的缩写,它译为机器人流程自动化,指用软件机器人实现业务处理的自动化,是以“模拟人”的方式进行业务操作,它可以帮助企业处理很多重复的、规则固定的、繁琐的流程作业。RPA技术无需侵入已有的软件系统,通过模拟人的行为进行操作,对于原有系统不感知,打破多软件、多系统、多版本系统间的数据孤岛问题,打破系统制约,打通业务数据,实现企业效率实质提升,助力业务增长。引入数字化劳动力,使用RPA自动化机器人可以全天候7x24小时不间断的、高效率的完成工作。

2023-09-05 17:16:57 88

转载 Git提交的本地仓库在什么位置

今天通过idea提交本地的项目到github上,先提交到本地仓库,最后再push到远程仓库上,突然有点迷惑本地仓库在什么地方,我相信搜索的人这个问题的小伙伴门应该都很迷惑吧,其实git的本地仓库就是存在.git的文件夹,因为我们在添加git的时候,会进行初始化本地库的操作:git init,最后会在当前目录下生成.git的目录,.git目录下存放的是本地库相关的文件和子目录。到本地库,更实际的是保存本次的更新版本或记录,以便之后我们可以切换到这个历史版本。

2023-09-01 17:31:59 366

转载 Sublime Merge 日常使用

版权声明:本文为CSDN博主「莫要空想」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。切换到某一分支,右键被合并分支,右键,merge xxx into xxx ,图中feat就被合并消失了。选择想要创建分支的分支,点击 create branch。2. 在提交树上选择想要删除的的记录的上一条reset。点击pull,建议每次进行工作前前都进行避免代码冲突。4. 点击 commit 而后点击 push。2. 想要那一边点击那一边。3. 提交到本地仓库。

2023-09-01 15:44:48 42

原创 word表格左侧边线明明有,但却不显示

3)自动调整中,选择“根据窗口自动调整表格”4)表格左侧边线就显示出来了。2)布局菜单--->自动调整。

2023-08-30 14:35:58 901

转载 TCP协议规定2MSL等待的原因

所以,Client不是直接进入CLOSED,而是要保持TIME_WAIT,当再次收到FIN的时候,能够保证对方收到ACK,最后正确的关闭连接。也就是说有可能新连接和老连接的端口号是相同的。假设新连接和已经关闭的老连接端口号是一样的,如果前一次连接的某些数据仍然滞留在网络中,这些延迟数据在建立新连接之后才到达Server,由于新连接和老连接的端口号是一样的,又因为TCP协议判断不同连接的依据是。pair,于是,TCP协议就认为那个延迟的数据是属于新连接的,这样就和真正的新连接的数据包发生混淆了。

2023-08-30 13:12:14 158

转载 Sublime Merge——一款超好用的Git可视化工具

3.合并代码(从A分支合并到B分支):B分支更新到最新且没有冲突-切换至A分支更新到最新-切换至B分支,点击二-10右侧三个点处的按钮,在弹出页面点击Merge Branch...,然后在弹出页面内点击A分支,接下来在新弹出菜单内点击Merge就ok,通常到这一步如果没有任何冲突和错误,只是简单的合并分支的话,直接点击此处的commit,然后再点击二-7,push上去就完成了合并代码的操作。可能拉取失败的情况:本地有修改,和git上最新的不一致,这时候需要先提交本地修改;

2023-08-28 21:10:36 502

转载 【通俗易懂】三次握手与四次挥手

该报文段表明:“我收到了你发起建立连接的请求,该请求报文的初始序号是x(确认号ack=x+1就表明了我收到了初始序号seq=x的报文),我同意建立该连接,我的初始序号是y。4.第四次挥手:客户端收到报文后,一样发出一个ACK报文段做出应答,上一次客户端发送的报文段序号为u,那么这次序号就是seq=u+1,确认号为ack=w+1。如果服务器收到了最后一段ACK报文,客户端在2MSL的时间内就不会收到任何报文,客户端就知道刚刚发送的ACK报文没有丢失,不需要再次发送,可以安心进入CLOSED状态了。

2023-08-28 12:15:31 90

原创 利用数据透视表统计出现的次数

注意:字段是用拖动的方式,直接拖动到求和栏中。

2023-08-28 10:12:02 129 1

QNX编译器快速入门指南

该资料介绍了使用QNX编译器进行创建工程、编译连接工程、调试工程等内容,浅显易懂、适合初学者快速入门。

2020-10-12

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除