自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 正向代理 vs 反向代理

比如我们访问一个网站,可能需要先通过一个代理服务器,代理服务器把我们的请求转发到他们很多的服务器节点中的某一个,并将从服务器节点上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。虽然正向代理服务器和反向代理服务器所处的位置都是客户端和真实服务器之间,所做的事情也都是把客户端的请求转发给服务器,再把服务器的响应转发给客户端,但是二者之间还是有一定的差异的。反向代理服务器可以做负载均衡,根据所有真实服务器的负载情况,将客户端请求分发到不同的真实服务器上。

2025-02-08 22:38:27 411

原创 Web开发概念解析

Web 服务器是一个软件或硬件系统,负责接收客户端的 HTTP 请求并返回响应(通常是 HTML 页面、图片、JSON 数据等)。它的主要任务是处理网络通信、管理连接、以及提供静态或动态内容。

2025-02-07 13:22:29 1981

原创 数据库读写分离、事务的特性、事务隔离级别及默认级别、脏读不可重复读和幻读、更新丢失问题、写偏斜问题、MVCC

写偏斜问题是一种并发事务问题,发生在多个事务根据条件读取数据并独立更新时,由于缺乏全局一致性检查,可能导致违反业务约束的更新。例如,两个事务在检查条件时看到的是同一状态,但在更新时导致不一致。

2025-02-05 22:48:33 1159

原创 InnoDB和MyISAM的比较、水平切分和垂直切分、主从复制中涉及的三个线程、主从同步的延迟产生和解决

如果你的应用需要和,选择。如果你的应用主要是,选择。随着 MySQL 的发展,InnoDB 已经成为默认的存储引擎,未来的开发中推荐优先使用 InnoDB。

2025-02-05 21:47:20 1078

原创 聚簇索引、哈希索引、覆盖索引、索引分类、最左前缀原则、判断索引使用情况、索引失效条件、优化查询性能

聚簇索引的叶子节点直接存储整行数据(而不是指向数据的指针),因此表中的数据行。

2025-02-03 00:05:13 943

原创 理解红黑树

简介:红黑树是一种自平衡二叉查找树,由鲁道夫·贝尔(Rudolf Bayer)在1972年发明,最初称为“对称二叉B树”。它的设计旨在解决普通二叉查找树在频繁插入和删除操作时可能退化为链表的问题,从而保持高效的查找、插入和删除性能。

2025-02-02 14:55:10 269

原创 索引的底层数据结构、B+树的结构、为什么InnoDB使用B+树而不是B树呢

MySQL中常用的是Hash索引和B+树索引Hash索引:基于哈希表实现的,查找速度非常快,但是由于哈希表的特性,不支持范围查找和排序,在MySQL中支持的哈希索引是自适应的,不能手动创建。

2025-02-01 17:16:00 1853

原创 char和varchar的区别、varchar(?)中问号部分的含义、索引的作用

char是固定长度类型,当输入字符不满设定的固定长度时依旧占用固定长度的空间,补充空字节。最大长度为255个字符容易想到,存储固定长度的值时适合用charvarchar可变长度,只占用实际存储粗的字符串长度加上一个到两个字节(用于记录字符串长度),不会填充空格,存储的字符串长度可变适合存储可变长度类型,最好不要存储固定长度类型的数据,因为会额外存储长度信息,所以会浪费存储空间。

2025-01-31 22:23:53 244

原创 MySQL基本架构&SQL语句在数据库框架中的执行流程&数据库的三范式

MySQL主要分为和连接客户端,获取权限,管理连接在执行查询语句之前会先到查询缓存中查看是否执行过这条语句,如果执行过那就直接返回缓存中的结果,优点是命中缓存时效率很高,缺点是很难命中,只要任意一个表更新了,所有表的查询缓存都会清空,MySQL8.0已经删除了查询缓存对SQL语句进行词法分析和语法分析,判断语句是否合法对SQL语句进行优化,查看是否使用索引存储数据,提取数据,架构是插件式的,支持InnoDB MyISAM等多个存储引擎。

2025-01-30 22:14:14 802

原创 使用redis-cli shutdown redis时出现(error) ERR Errors trying to SHUTDOWN. Check logs.报错的解决办法

ctrl+f(vscode远程连接)查找logfile。使用chmod 777给log文件授予权限。找到你使用的redis.conf文件。找到后设置自己的log文件路径。

2025-01-20 21:29:31 196

原创 安装protobuf时遇到的问题

这个问题通常发生在安装或配置过程中,缺少了必要的库文件或库文件没有正确链接。

2025-01-18 18:48:25 210

原创 C++11特性简述

Lambda表达式,final关键字,右值引用,C/C++中空指针的区别 (nullptr_t类型的引入),判断程序是C还是C++

2025-01-17 23:32:16 527

原创 查找某个年龄段的用户信息&TCP头格式&为什么需要 TCP 协议? TCP 工作在哪一层?

接收方在收到设置了 URG 标志且紧急指针有效的 TCP 报文段后,会尽快将紧急数据交付给上层应用程序进行处理,而不必按照正常的顺序等待缓冲区中其他数据的处理。这确保了紧急信息能够及时被应用程序获取和处理,例如在一些实时性要求较高的场景中,如远程登录(Telnet)中,用户可能需要立即发送一个中断命令来停止当前正在进行的操作,这时紧急指针就可以确保该中断命令作为紧急数据优先被处理。紧急指针指向紧急数据的末尾(在序列号的基础上),与序列号一起用于标识紧急数据在报文段中的位置范围。TCP 工作在哪一层?

2025-01-15 11:43:57 1790

原创 如何处理对象的创建与销毁的时机? C++ 中面向对象编程如何处理对象的状态存储与恢复?

临时对象:当在表达书求值过程中,当需要一个临时对象来存储一些属性或状态时创建,例如函数返回一个对象时,如果返回的不是引用,可能会需要创建一个临时对象来保存返回值。堆对象:使用new创建内存分配到堆上的对象,需要使用delete手动释放。全局和静态对象:在程序启动时,在main函数运行前创建,全局对象是在文件作用域内定义的对象,静态对象可以是全局静态、局部静态、对象的静态成员。序列化和反序列化:将对象的状态通过序列化转换成字节流或者是其他可以存储的格式,以便于在网络中传输或者是存储在存储器中进行数据持久化。

2025-01-11 21:25:13 336

原创 插入排序&计数排序&数据库的三范式是什么?

时间复杂度:最好on,最差on方空间复杂度:o1稳定性:稳定是否能对代码进行提升:可以使用二分查找优化寻找位置环节时间复杂度:最好on+k,最差on+k空间复杂度:on+k稳定性:稳定是否能对代码进行提升:可以考虑使用 std::unordered_map 来存储元素及其出现的次数,当元素范围很大但元素个数较少时,可减少空间开销。数据库的三范式(3NF)是数据库设计中用于规范关系型数据库表结构的一系列规则,旨在减少数据冗余,提高数据完整性和一致性。一、第一范式(1NF)定义:示例:二、第二范式(2NF

2024-12-22 22:57:14 1019

原创 选择排序、冒泡排序 包括 代码 时间复杂度 空间复杂度 稳定性 是否能对代码进行提升 对 MYSQL 架构的了解?

【代码】选择排序、冒泡排序 包括 代码 时间复杂度 空间复杂度 稳定性 是否能对代码进行提升 对 MYSQL 架构的了解?

2024-12-22 12:52:45 219

原创 如何处理对象的创建与销毁的时机? C++ 中面向对象编程如何处理对象的状态存储与恢复?

通过上述方法,可以有效地管理 C++ 中对象的创建和销毁时机,以及存储和恢复对象的状态,根据不同的需求和场景选择合适的方式,有助于提高程序的性能和可维护性。这种方法可以根据具体需求将对象的状态保存到文件、数据库等存储介质,这里仅简单地将状态存储在成员变量中作为示例。静态局部对象在第一次进入函数时创建,程序结束时销毁。自动存储对象的创建和销毁由编译器自动管理,当程序离开对象的作用域时,会自动调用析构函数进行清理工作。std::shared_ptr` 可以共享对象所有权,它们会在不再使用时自动销毁对象。

2024-12-20 21:11:20 324

原创 如何处理对象的状态变化?如何实现工厂模式?

【代码】如何处理对象的状态变化?如何实现工厂模式?

2024-12-19 16:00:15 607

原创 如何实现对象的克隆?如何实现单例模式?

移动构造(移动语义实现的):通过移动语义实现移动构造,旧对象的资源的拥有权转移给新对象拷贝构造 :通过旧对象初始化新对象,可能会存在浅拷贝和深拷贝的问题赋值运算符:把一个对象的属性赋值给另一个对象,实现对前一个对象的拷贝自定义一个clone方法:对于基类和派生类的层次结构,定义一个虚函数 clone(),在派生类中重写该函数,以确保多态克隆。使用模板和完美转发:使用模板函数进行克隆,通过完美转发将参数传递给对象的构造函数,实现通用的克隆机制。

2024-12-18 18:07:39 542

原创 如何实现序列化和反序列化?如何处理对象的生命周期管理?

实现思路:代码解释:实现思路:代码解释:

2024-12-17 21:18:46 412

原创 如何实现接口继承与实现继承的区别?&如何处理多态性与性能的平衡?

接口继承:只继承方法签名实现继承:继承实际的方法实现接口继承:基类只定义纯虚函数,抽象为接口(纯虚类),接口类中只保留函数声明,没有成员变量或函数定义。派生类继承此类必须实现全部方法。实现实现继承:基类没有纯虚函数,并且可以有成员变量,有成员函数定义(有实现),派生类可以直接使用基类提供的功能,派生类还可以重写基类的虚函数,也可以隐藏基类的成员函数。

2024-12-15 17:13:20 228

原创 C++ 中面向对象编程如何实现动态绑定?C++如何管理内存?

动态绑定是C++面向对象三大特性之一多态的一种实现结果,多态包括静态多态和动态多态,动态绑定就是通过动态多态实现的一种运行时多态。其实现方式是通过继承和虚函数,在基类中定义一个虚函数,然后他的派生类重写这个虚函数,这些虚函数和重写后的虚函数的地址就会被统一放到一个虚函数表中,每个具有虚函数的类都会有一个指向虚函数表地址的指针,当使用基类指针或引用调用这些虚函数时,对象首先会通过虚表指针找到虚表,然后在虚表中找到要调用具体类型的重写的虚函数,这种多态是在程序运行时决定的,就实现了动态绑定。

2024-12-14 15:20:43 218

原创 SQL去重查询&C++ 中面向对象编程如何实现数据隐藏?C++ 中面向对象编程如何处理异常?&Pimpl模式

也就是说将类Widget的实现完全放到另外一个类Impl里,而类Widget对外提供接口,这些接口的调用最终会通过Impl指针成员(裸指针或智能指针),调用相应的实现接口。缺点:会在运行时增加开销,访问开销(对私有成员的每次访问都是用过指针间接访问的)、空间开销、生命周期管理开销,降低程序可读性。具体实现:在头文件中只有一个私有成员变量pimpl指针,用户无法直接从头文件获取信息,起到了数据信息隐藏的作用。优势:这么做可以减少项目的依赖,进而减少不必要的编译。无法从头文件获取类的具体实现。

2024-12-13 21:09:42 528 1

原创 复原IP地址& 什么是运算符重载? 如何在 C++ 中进行运算符重载?运算符重载在面向对象编程中的好处是什么?getline方法

C++中允许重载运算符,使得非基本数据类型也可以实现自定义的运算操作基本规则必须是类的成员函数或友元函数:成员函数的左操作数是类对象自身。友元函数可访问私有成员,但不能直接访问类外的对象。不能重载的运算符:::(域运算符)、sizeof、.*、.(成员访问运算符)、typeid。重载不改变运算符的优先级和结合性。支持的运算符可以重载为一元或二元形式。public:// 重载 +返回值类型:通常是与类相关的类型。参数:取决于操作数的数量。使用operator。

2024-12-12 19:45:53 857

原创 合并区间&C和C++的区别、布尔、整型、浮点、指针类型和0做比较、malloc、calloc、realloc的区别

C++相对C语言增强了类型检查,结构体允许定义函数了(类似于class,访问权限默认是public)支持了类、对象、继承、多态、封装、抽象、构造函数、析构函数、new、delete、引用、模版、STL容器、算法库、迭代器、命名空间、默认函数参数、函数重载、运算符重载、异常处理、多线程支持。使用c开头的头文件是为了标明这是C++版本的C语言标准库,这些库函数和宏定义都是在std命名空间里的,提供了更好的兼容性和类型安全性。C++中使用C的头文件可以把.h去掉 在前面补一个c 比如math.h和cmath。

2024-12-09 17:54:28 597

原创 K 个一组翻转链表&什么是纯虚函数?什么是抽象类?纯虚函数和抽象类在面向对象编程中的意义是什么?

纯虚函数是C++中的一种特殊函数 定义方法为:它只能声明,不能在定义的类中实现,因为没有实现,所以定义纯虚函数的类不能被实例化,也就是不能定义对象。也被称为抽象类。= 0表示该函数没有定义(纯虚函数),必须在派生类中被重写。所以抽象类就是包含了至少一个纯虚函数的类。抽象类不能被实例化,如果继承抽象类的类没有实现继承的抽象类的所有纯虚函数,那么派生类也是抽象类,也不能被实例化。纯虚函数和抽象类在面向对象编程中的意义是什么?

2024-12-08 17:47:57 559

原创 重排链表&构造函数和析构函数是否可以是虚函数?什么是多态性?C++中如何实现多态?多态性的好处是什么?

多态性是C++的面向对象编程中的特性之一,它允许同一个接口或者函数在上下文中出现不同的行为,允许对象根据自己的特性来执行自己的行为。C++中可以实现两种多态:一种是静态多态,通过函数重载、运算符重载和模版来实现,此类多态在程序编译时就能确定。另一种是动态多态,通过虚函数和基类指针或引用来实现。多态性的好处是:方便拓展代码、提高可维护性(需要拓展代码可以直接创建一个新的派生类继承要拓展的类,无需关心已有的代码),灵活性、代码可复用(通过统一的基类指针调用派生类的方法)

2024-12-07 17:03:43 219

原创 最长递增子序列&什么是继承性?C++中如何实现继承?继承的好处和注意事项有哪些?

继承性和面向对象编程的一个特性之一,继承性是指一个类可以作为继承另一个类的成员变量和方法,实现代码的复用和扩展,还可以通过重写基类的虚函数来实现多态。

2024-12-06 17:32:14 488

原创 螺旋矩阵&C++封装性

封装性是面向对象编程(OOP)中的一个基本概念,它指的是将数据(属性)和操作数据的方法(函数)捆绑在一起,并限制外部对数据的直接访问,从而实现数据隐藏和访问控制。通过封装,可以确保对象的内部状态不会被随意修改,从而提高了代码的安全性和可维护性。数据隐藏:将对象的状态(数据)封装起来,外部只能通过公开的接口(方法)来访问和修改数据。暴露行为:通过公开的接口方法控制外界如何与对象交互,而不暴露对象的内部实现细节。C++中如何实现封装?在C++中,封装通过使用类(Class)来实现。

2024-12-05 14:50:50 409

原创 反转链表||&动静态链接

第一种方法:使用数组顺序记录区间内节点的地址,然后双指针双向向内遍历节点地址,逐步交换节点存储数值。时间复杂度为on、空间复杂度为on。

2024-12-05 13:13:43 656

原创 二叉树的最近公共祖先&类型转化

隐式类型转换也可以叫自动类型转换,是指编译器自动进行的将一种类型的变量转换成另外一种类型,不用程序员明确表明转换操作。算数运算:当不同的类型进行算数运算时,编译器会自动将较小的类型提升为较大的类型,比如double和int运算,int就会自动被提升为double函数调用:当形参和实参的类型不匹配时,编译器会尝试进行自动类型转换,使函数能被正常调用赋值操作:当变量的类型和赋值的类型不匹配时,编译器会尝试自动类型转换带来的问题:精度丢失、类型不匹配导致的逻辑错误、性能问题、难以发现的程序错误。

2024-12-03 15:57:55 672

原创 二叉树的锯齿形层序遍历&函数重载

什么是函数重载?函数重载的实现原理是什么?

2024-12-01 17:40:35 648

原创 C++小问题

怎么分辨const修饰的是谁 是限定谁不能被改变的?两种在vector中删除元素的方法Map和unorderedMap的区别C++类的大小由什么决定?

2024-12-01 14:54:32 867

原创 全排列&内存对齐

内存对齐是一种计算机的内存管理策略,数据存储的基本单位是字节,内存对齐要求数据的存储地址必须是某个值(通常是数据类型自身大小或某个倍数)的整数倍例如,对于一个 4 字节的整数类型(如int类型,假设为 32 位系统),其存储地址应该是 4 的整数倍。如果按照自然顺序存储数据,有可能出现数据的存储地址不是其类型大小倍数的情况,而内存对齐就是通过填充字节等方式来保证每个数据的存储地址符合相应的规则。char a;int b;在内存中,char类型通常占 1 个字节,int类型占 4 个字节。

2024-11-30 15:37:36 772

原创 岛屿数量&C++11新特性

如果移动赋值操作抛出异常,则会破坏对象状态的一致性,并导致潜在的问题。是相同的(即它们指向的是同一个对象),那么在移动操作时会导致对象的资源被错误地释放,最终使得对象处于不一致的状态。右值引用通常与移动语义一起使用,使得对象的资源(如内存、文件句柄等)能够从一个对象转移到另一个对象,而不是进行深拷贝。在传统的C++中,右值只能绑定到常量或临时变量,但通过右值引用,程序员可以显式地“转移”对象的所有权。移动语义允许对象的资源(如内存或文件句柄)在不进行深拷贝的情况下,从一个对象“移动”到另一个对象。

2024-11-29 21:13:46 971

原创 搜索旋转排序数组&volatile

const关键字含义是:被他修饰的变量在初始化之后不会被改变,在编译时就可以确定的值,编译器可能会在使用这个值时直接把这个变量直接替换为其代表的常量使用。volatile关键字含义是:被他修饰的变量可能会被程序控制之外被改变,告诉编译器不要过度优化。

2024-11-28 21:43:52 584

原创 二叉树层次遍历&函数对象

函数对象的定义在 C++ 中,函数对象(Function Object)也叫仿函数(Functor),是一个类,它重载了函数调用运算符()。这使得类的对象可以像函数一样被调用。public:在这个例子中,Add类就是一个函数对象,它可以像函数一样使用。函数对象的特点可携带状态:函数对象可以有自己的数据成员,能够在多次调用之间保存和维护状态。这个Counter函数对象每次被调用时都会返回一个递增的计数。类型安全。

2024-11-27 18:24:10 930

原创 最长回文子串&多/虚继承

C++中的多继承概念:一个类继承多个类public:public:// 类Derived同时继承自Base1和Base2上面这段代码就是一个类Derived继承了Base1和Base2两个类优点:功能复用性高:可以从多个不同的类中继承功能,能够更灵活地组合代码。例如,有一个Shape类和一个Printable类,Shape类提供图形相关的属性和计算方法(如计算面积、周长等),Printable类提供打印对象信息的功能。如果有一个Rectangle。

2024-11-26 21:26:27 1069

原创 快速排序&Lambda表达式

定义Lambda 表达式是 C++11 引入的一种匿名函数。它可以在需要函数对象(如函数指针、对象等)的地方定义和使用一个临时的函数。Lambda 表达式的语法形式如下:其中,是捕获列表,用于指定在 Lambda 函数体中可以访问的外部变量;是参数列表,和普通函数的参数列表类似,用于接收传入的参数;mutable关键字是可选的,用于修改按值捕获的变量(如果没有mutable,按值捕获的变量在 Lambda 函数体内是不可修改的);是可选的异常规范;是可选的返回类型指定部分;

2024-11-25 23:46:05 827

原创 每日一题&using&类型别名

类型别名(Type Alias)类型别名是为已存在的类型定义一个新的名字。它提供了一种方便的方式来简化复杂的类型名称,或者为具有特定用途的类型创建一个更具描述性的名称。例如,在处理复杂的模板类型或者长类型名称(如指向函数的指针类型)时,类型别名可以使代码更易读。using 声明(Using Declaration)using 声明在 C++ 中有多种用途。在类型别名的上下文中,using 声明主要用于引入类型别名,它是一种替代typedef(在 C++ 11 之前主要用于定义类型别名)的更灵活的方式。

2024-11-24 14:47:39 330

空空如也

空空如也

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

TA关注的人

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