自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(60)
  • 收藏
  • 关注

转载 Linux安装python虚拟环境以及简要操作

virtualenv是什么?virtualenv是一个创建隔绝的Python环境的工具。为什么要创建虚拟环境?它解决了“项目X依赖于版本1.x,而项目Y需要项目4.x”的两难问题,而且使你的全局site-packages目录保持干净和可管理

2023-05-23 10:34:25 1130

原创 MySQL/Oracle获取当前时间几天/分钟前的时间

对于获取当前时间偏移多少天前,或者多少分钟后的时间;MySQL给出了一个函数,这个函数可以用来获取偏移时间,函数名timestampadd();要想获取当前时间几天/分钟前的时间,首先要知道怎么获取当前时间;对于MySQL和Oracle获取当前时间的方法是不一样的;第二个参数是:偏移多少(负数往前偏移,正数往后偏移)第一个参数是:偏移的类型(分钟、小时、天)第三个参数一般填当前时间。

2023-02-25 16:18:27 3136

转载 Linux如何在控制台输出带颜色的字体

首先他这个\33[0m是直接输出了,说明没有被转义,而是被当作字符串了,我们知道ANSI控制码\033[0m是关闭所有属性的意思,既然没有被转义,说明我们并没有关闭所有属性,只有当检测到\033[0m的时候才会关闭这个黄色背景蓝色字体;===============================================ANSI控制码的说明。字体颜色m字符串\033[0m"背景加亮颜色范围:100--------------------107。字体加亮颜色:90------------97。

2023-01-17 22:11:59 1985 3

原创 C++11基于范围的for循环&vector容器扩容详解&迭代器失效

首先vector容器原来的大小capacity()=1,1是无法满足两个元素的("www","eee"),所以需要扩充,但是。没有拷贝构造,因为我们使用的是vector容器中的对象本身,不会发生拷贝,既然没拷贝就不会有拷贝构造的日志,a也不会析构它;然后因为我们是将"www"的对象拷贝给a,那么a使用完这个对象肯定要析构啊,所以调用了析构函数,1、申请一个新的地址,这个地址可以存放下"www",和"eee"的对象,这一步没有日志;v中都是什么内容呢?"www"、"eee"、"rrr"的对象,一共三个对象;

2023-01-07 12:03:26 2649 2

原创 C++ 函数模板、具体化模板的分文件书写

1、具体化函数模板的声明要放到普通函数模板的下方2、函数模板只是函数的描述符,没有实体,应该把整个函数模板放到头文件中;具体化函数模板有实体,编译过程和普通函数一样,所以应该把声明放到头文件中,实现放到源文件中

2022-12-28 18:57:22 728

原创 C++ 当基类为抽象类时如何析构派生类

举个栗子:假设基类A有成员a和b,派生类B新增了成员c,那么基类的指针范围指向的就是8个字节的地址,但是成员c的地址是8-12字节;但是我们学过多态,我们知道,如果将函数前面加上virtual关键字,那么他的地址就会被写入虚表,基类指针可以通过指向子类对象来调用子类虚表中的重写函数;因为派生类的对象析构了之后会调用基类的析构,但是你基类的析构函数没写实现他怎么调用?:即动态绑定,在运行时才去确定对象类型和正确选择需要调用的函数,一般用于解决基类指针或引用派生类对象调用类中重写的方法(函数)时出现的问题。

2022-12-27 18:37:15 534

原创 C++ 函数重载的细节

1、使用重载函数时,如果数据类型不匹配,C++尝试使用类型转换与形参进行匹配,如果转换后有多个函数能匹配上,编译器将报错;2、引用可以作为函数重载的条件,但是,调用重载函数的时候,如果实参是变量,编译器将形参类型的本身和类型引用视为同意特征;3、如果重载函数有默认参数,调用函数时,可能导致匹配失败;4、const不能作为函数重载的特征;5、返回值类型不同不能作为函数重载的特征;

2022-12-08 17:22:51 471

原创 C++ 各种形参的使用场景

如果实参是内置数据类型,则使用指针。如果实参是类,则使用const引用,传递类的标准方式是引用传递(类设计的语义经常要求使用引用);如果实参是数组,则使用const指针,因为这是唯一的选择(没有数组建立引用的说法);注意如果需要在函数中修改实参的话都是不能加const约束的,所以上面四点不能加;如果实参是较大的结构,则使用const指针或const引用;或小型结构体,则按值传递,因为也不用担心拷贝花费太多时间;如果实参是结构体,则使用指针和引用;如果实参是数组,则只能使用指针;如果是惨是类,则使用引用;

2022-12-08 15:25:13 245

原创 C++对const引用的特殊处理、为什么函数形参的引用建议加上const?只是为了防止值被修改吗?

我们知道普通变量、指针、函数形参,加上const修饰表示不可改变,但是引用前面加上const就有特别之处了const形参不能被修改内容;这也是const引用的用途之一:防止实参被修改但是,const引用还有一个很特别的用途,下面为大家介绍

2022-12-07 23:55:52 2559 1

原创 str(n)cpy的注意事项以及memset的简单使用

目录strcpystrncpymemset我们先看strcpy函数:注意使用strcpy需要在第一行加上#define _CRT_SECURE_NO_WARNINGS一定要是第一行,其他地方不行;然后输出一下字符串: 没有问题,我们单个输出name数组的每个成员的ascii码值试一下:运行: 我们可以看到,因为我们并没有初始化,所以strcpy函数是帮我们把hello后的第六个元素置为0了,因为有\0才是字符串嘛; 如果我们的name只有五个元素,但是我们依旧赋值给他hello,那么还会不会补充\0

2022-12-06 16:21:35 795

原创 qsort()数组排序函数的回调函数怎么写?

C语言提供了给一维数组排序的库函数qsort(),他的声明如下:第一个参数:待排序的数组首地址第二个参数:数组元素个数第三个参数:数组单个元素占用字节数第四个参数:回调函数的函数指针,需要用户自己实现回调函数看完声明,我们先来看看如何使用这个函数,我们先定义一个数组:因为qsort函数的第四个参数是回调函数的函数指针,所以这里我们需要写一个回调函数,当然qsort对回调函数也是有要求的:1、如果函数的返回值

2022-12-05 22:07:31 314

原创 C++ std::nothrow

我们知道,当我们写程序时,栈区的内存是非常小的,如果是写那种大型的项目,不够用是很正常的,所以我们需要在堆区申请内存;但是如果在堆区申请了大量的内存,导致没有空间了,那么程序就会崩溃,很烦人;我们做程序,想要的并不是崩溃,因为程序一旦崩溃就代表什么都做不了;我们需要的是如果内存不足,程序不要崩溃掉,返回一个错误或者空地址就行了,我们根据返回值在来进行不同的操作;这就要用到std::nothrow了以我自己的电脑为例,先在栈区分配内存:先在栈区申请10 0000*4字节的内存,运行一下,程序正常,并没有崩溃加

2022-12-05 18:22:38 3034 2

原创 C++11新特性-原始字面量

当我们书写文件路径的时候,会发现,文件路径无法正确输出,如下:这是因为反斜杠本身就是转义的意思,如果想要输出反斜杠则需要两个反斜杠,如下: 当然这只是其中一种解决方法,还有一种就是使用C++11的原始字面量,如下: 输出了我们想要的结果;原始字面量的写法就是:R"(str)";当然原始字面量不止这一个用途,还有就是用于换行书写举个栗子: 在做项目开发的时候我们经常会遇到很长很长的字符串,就比如xml格式的字符串,里面存放着重要的信息,一般情况下这个字符串会很长,当然比我写的这个长的多;这个时候写在一行会显得

2022-12-03 21:57:52 942

原创 C++ bool类型变量cin输入true,输出结果却是false?是因为cin输入的true会被当成字符串,所以bool变量原值不变吗?

首先,大家可能看过其他文章,他们给出的观点是这样的:在C++中bool类型的变量初始值为false,所以如果你不初始化,那么对变量使用cin>>赋值true和false的时候,编译器会把true和false当成是字符串,因此bool变量的值不会变,还是原来的false,所以输出结果为0;但是呢,在这里我想说的是,上面这个观点只说对了一半C++中bool的全局变量如果不初始化,那么默认为false没毛病;编译器会把true和false当成字符串,也没毛病;但是bool变量如果赋值true和

2022-11-30 15:42:46 3016 3

原创 ftp协议主动模式与被动模式

客户端给服务端的21控制端口发命令说,我要下载什么什么,并且还会说我已经打开了自己的某个端口,你就从这里把东西给我吧,服务器知道后就会连接客户端已打开的那个数据端口把东西传给客户端,这就是主动模式,客户端给服务器端的21端口发命令说,我要下载什么什么,服务端知道后,就打开一个空闲的端口,然后告诉客户端,我已经打开了某某端口,你自己进去拿吧。服务端会打开一个端口,等待客户端的主动连接,因为端口是服务端主动打开的,并且服务端一般情况下会很忙,因为可能要处理很多个客户端的请求,所以。,然后通知客户端来连接。

2022-11-22 15:11:25 5412

原创 C++对象拷贝

首先看下面这张图:假设我们现在有一个对象数组,里边有三个对象,O1、O2和O3;但是随着业务逻辑的提升,这三个对象已经无法满足我们的使用了;那么我们肯定要再添加几个对象进去,但是我们又不想重新创建O1、O2、O3;那么怎么办呢?首先在C语言中,我们肯定是用一些拷贝函数之类的,通过赋值拷贝将一个对象的内容拷贝给另一个对象进行使用;这个过程就叫对象拷贝;当然C++中也有类似拷贝对象内容的方式,并且C++的编译器支持我们用更简单的方式进行内存复制,接下来就让我们看看C++中如何实现对象拷贝;

2022-11-18 22:13:14 2949

原创 【C++】模板template

1、我们使用模板的目的就是为了提高代码的复用性,减少重复代码的编写; 2、函数模板的底层并不是只有一个函数完成的,它是根据你传入参数的类型,给你分配一个适用你传入类型的函数;如果你连续传入n个类型,他就会给你分配n个函数;

2022-11-15 22:43:36 2086 1

原创 【C++】运算符重载

谁说++就一定要加了?谁说++就一定要加1?这也就是为什么计算机中1+1不一定等于2,因为这个操作符是别人自己按照他的思维来重载的,我们当然也可以按照自己的思维来写,++我们写个减1,但是没必要,一般情况下我们还是遵守计算机的算法来写,不要乱写,没什么好处;

2022-11-15 18:42:42 1559

原创 【汇编 C++】多态底层---虚表、__vfptr指针

我们可以确认了,如果类中具有virtual修饰的虚函数,无论有多少个虚函数,类的对象在底层中只有一个虚表,因为我们传入的是虚表的首地址,只占用四个字节,并且这个虚表首地址是类对象的第一个成员!

2022-11-14 21:46:34 1024

原创 C++多态_virtual

多态按字面的意思就是多种形态。当类之间存在层次结构,并且类之间是通过继承关联时,就会用到多态。C++ 多态意味着调用成员函数时,会根据调用函数的对象的类型来执行不同的函数。我们知道,面向对象编程思想就是为了节省代码的重复编写,那么我会围绕节省代码编写的例子去讲多态,可能例子会有些莫名其妙,但是知道这个道理就行了。class Person{ // 基类Person:成员有a、bpublic:int a;int b;}void print() // 基类添加一个打印成员的函数,会继承到派生类。

2022-11-11 21:58:46 1454

原创 【Linux Socket C++】为什么IO复用需要用到非阻塞IO?EAGAIN的简单介绍与应用

因为我们死循环只是为了接收缓冲区中的连接,一旦accept在缓冲区找不到可用的连接了,那么accept会将errno设置为EAGAIN,这个时候我们只需要判断errno==EAGAIN就说明了,accept已经将缓冲区中的连接读取完,所以可以直接break了。达到缓冲区的数据有可能被别人抢走,比如多个进程accept同一个socket时引发的惊群现象,只有一个客户端连接到来,但是所有的监听程序都会被唤醒,最终只能有一个进程可以accept到这个请求,如果采用阻塞的IO,其他进程的accept就会产生阻塞。

2022-11-10 23:36:04 1349

原创 动态爱心--HTML源码

复制内容,在桌面新建txt文件,将内容拷贝至文件中,保存退出,修改后缀名为.html即可。如下:右键新建 复制内容粘贴(ctrl+c,ctrl+v):修改后缀名为.html: 点击确定,鼠标左键单点即可使用。。。 效果如下:找不到后缀名的,在文件中找到文件扩展名,勾选即可。如下:再次感谢大佬提供!!!感谢观看。

2022-11-08 11:44:53 5198 1

原创 32位汇编ebp、ebp-4、ebp+4、ebp+8等含义

ebp-4: 从ebp-4开始到函数提升堆栈后的栈顶之间被称为缓冲区(一般缓冲区栈顶是:函数调用时提升堆栈后esp的值),我们常说的局部变量都是定义在这里,所以大致可以理解为函数中。我们知道,当调用了一个函数后,底层汇编大多数会使用ebp寻址的方式去查找参数,关于ebp与esp寻址可以看我这篇文章《ebp寻址》。的含义,先总结这么多,因为长时间不使用汇编可能会忘了这些东西,忘了的话翻到这篇文章看看就行了。ebp+4:存放call指令调用函数时压入堆栈的。ebp+C: 存放函数传参的第二个参数地址。

2022-11-07 21:27:31 4814

原创 C++继承时常见问题

目录前言子类默认调用父类无参构造 观点一 观点二子类调用父类有参构造子类与父类的构造顺序总结结语 关于C++继承的基础,请看:《C++继承浅谈》或自行百度 如果父类不写构造函数,那么子类构造对象的时候不传参/传参调用的都是子类自己的无参/有参构造。 验证代码如下: 运行查看结果: 断点、编译、调试、ALT+8转到反汇编: F10步过,不会进入函数内部,F11跟进这两个函数的内部:

2022-10-18 11:50:13 791

原创 【汇编 C++】C++引用详解、引用与指针的区别

引用是C++的一种新类型,引用变量是一个别名,也就是说,它是某个已存在变量的另一个名字。一旦把引用初始化为某个变量,就可以使用该引用名称或变量名称来指向变量。那么怎么证明ref是a的别名呢?我们知道,别名和本体指的是同一个东西,所以操作ref应该就是操作a,如下:运行,如果ref和a的值一直都是一样的,就代表ref是a的别名,和a是同一个东西如下:观点证明成功!先来对比基础变量的定义对比,引用和指针的区别。

2022-10-16 01:51:59 2260

原创 【汇编 C++】在堆中创建对象

栈区也就是之前汇编调用函数时提升堆栈的'堆栈',只有在函数调用时才会有堆栈,函数调用结束后该堆栈虽然在,但已经被使用并且不属于这个函数。所以说栈(堆栈)中的数据只有函数调用时存在,函数调用完成后将不存在。

2022-10-11 01:10:38 2347

原创 【汇编 C++】C++继承浅谈

继承就是数据的复制struct Master // 父类(基类){int a;int b;};struct Slave:Master // 子类(派生类){int c;int d;};int main(){// 此处下断点查看x的大小(子类的大小)return 0;

2022-10-10 20:47:33 562

原创 【汇编 C++】类的构造与析构

本文章将会可能会涉及到汇编的知识,不过没有关系,我会讲的尽量通俗易懂;另外本篇文章开始前,建议了解下什么是函数重载,这个概念很简单的--有相同的函数名,但参数列表不相同的函数,就是函数重载;和类具有相同名称,并且没有返回值类型的函数,就是类的构造函数{Test() // 和类具有相同的名、并且没有返回值{}};}类的构造函数名前加上'~'这个符号,就是类的析构函数{Test(){printf("你调用了一次类的构造函数\n");}

2022-10-09 21:32:52 1920

原创 【汇编 C++】C++this指针、this指针长什么样?

this指针是“C++封装后的结构体或类中成员函数”的一个默认参数,用于存放当前结构体变量(类的对象)的首地址,它是一个隐藏的参数。概念听起来很模糊,不急,代码测试之后就能明白。{int a;int b;int c;};// 结构体的外部定义函数{}int main(){// 此处下断点,观察反汇编return 0;}我们先把函数定义在结构体的外部,现在的结构体就是个简单的结构体,没有进行封装,函数也是个简单的函数,没有this指针。

2022-10-08 16:39:28 824

原创 【汇编 C】从汇编分析为什么传递结构体指针比传递结构体变量高效

本文章使用的工具是vs2010,本篇文章主要讲解结构体指针作为参数传递与结构体变量作为参数传递的对比,不谈值传递与址传递的概念。 先声明下观点:当有少量结构体成员时,传递结构体指针和结构体变量的差距不大;当有大量结构体成员时,随着成员越来越多,传递指针的效率也越来越高,与传递变量的差距也越来越大。

2022-10-08 00:08:33 1062

原创 【汇编 C】C语言常用的三种函数调用约定:__cdecl、__stdcall、__fastcall

本篇文章使用的工具是vs2010,内容可能涉及到汇编的知识,建议有一些汇编基础的再来看,不过没有汇编基础也没有关系,了解一下这三种调用约定即可。如果有听不懂的地方可以私信我,有错误的地方望指出。

2022-10-06 01:19:46 2302

原创 【C语言】结构体字节对齐

字节对齐是字节按照一定规则在空间上排列。现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特 定的内存地址访问,这就需要各种类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐。在我们之前写程序的时候可能会发现有的时候你定义的变量是一个字节,但是他在内存中依然按照四个字节给你存储,因为在32为系统中,4字节对齐执行效率是最快的。这就是一种牺牲内存换取性能的方案。举个栗子。

2022-10-04 00:09:57 3154

原创 MySQL修改安全策略时报错:ERROR 1193 (HY000): Unknown system variable ‘validate_password_policy‘的解决方法

我使用的版本是MySQL5.73,环境是Linux CentOS7,其他版本不知道是否可行,望谅解。当我们想设置简单的密码的时候,看了别人发的如何修改安全策略的代码,如下:

2022-09-29 14:33:36 12890

原创 MySQL简单密码设置、ERROR 1819 (HY000): Your password does not satisfy the current policy requirements解决方法

首先我使用的MySQL版本是5.73,环境Linux centos7,其他版本不知道是否可用,望谅解 当我们修改简短的密码的时候,可能会遇到如下问题:

2022-09-29 14:16:46 1609

原创 ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables 解决方法

【代码】【MySQL5.73 CentOS7】ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables 解决方法。

2022-09-29 13:44:10 5629

原创 【Linux CentOS7 MySQL5.73】root用户密码修改方法、ERROR 1193、ERROR1819与ERROR1290:... running with --skip-...

ERROR1193解决方法 如果遇到如上提示,说明你没有密码验证插件,解决方法如下: 首先还是打开/etc/my.cnf这个文件 继续在[mysqld]下面加上两行加载插件的代码如下:

2022-09-29 13:28:50 1769

原创 【汇编 C】循环语句goto、while、dowhile、for

在不少实际问题中有许多具有规律性的重复操作,因此在程序中就需要重复执行某些语句。一组被重复执行的语句称之为循环体,能否继续重复,决定循环的终止条件。循环结构是在一定条件下反复执行某段程序的流程结构,被反复执行的程序被称为循环体。循环语句是由循环体及循环的终止条件两部分组成的。例子:(这里就拿汇编举例吧)首先401210位置的jmp会跳到401230的位置,然后将1,2,3,4分别放到对应的寄存器中之后再一次使用jmp跳到401210的位置。

2022-09-28 00:13:38 3599 2

原创 【汇编 C】switch为什么高效率?分支语句if else与switch

本文章使用到的工具是vs2010,建议使用VC++6,操作都一样。什么是分支语句?分支语句即进行一个选择,如果出现情况A则进行相应的操作;如果出现情况B则进行相应的操作,等等。if else分支语句我们也知道if是如果的意思,那么可以根据意思理解,比如:if(love == true) // 如果love是真不是假printf("这是真爱。\n");// 那么就输出这是真爱。

2022-09-24 17:10:03 1833

原创 【汇编 C】i++和++i底层刨析

不过++ii输出的是+1之后的变量,而ii++输出的则是+1之前备份的临时变量。代码的逻辑很简单,简单到没有逻辑。都是先+1,然后再输出。

2022-09-21 22:57:02 931

原创 【汇编 C】函数嵌套底层原理堆栈图、为什么局部变量一定要赋初始值

对于堆栈图不够了解的话,可以先观看这篇文章《函数调用底层堆栈图》。此外,对于编译器最好使用VC++6。因为我当前使用的是win11操作系统,所以只能使用vs2010进行讲解。对于vs2010和VC++6对于局部变量在内存中的处理是不一样的,本篇文章以VC++6为标准。

2022-09-21 01:35:28 989

空空如也

空空如也

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

TA关注的人

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