- 博客(29)
- 收藏
- 关注
原创 【计算机网络 篇】TCP基本认识和TCP三次握手相关问题
TCP是面向连接的、可靠的、基于字节流的传输层通信协议。一定是一对一才能连接,不能像UDP协议可以一个主机同时向多个主机发送消息,也就是一对多是无法做到的;无论网络链路中出现了怎样的链路变化,TCP都可以保证一个报文一定能够到达接收端。用户消息通过TCP协议传输时,消息可能会被操作系统分组成多个的TCP报文,如果接收方的程序不知道消息的边界,是无法读出一个有效的用户消息的。
2025-07-22 12:33:24
973
原创 【MySQL 数据库 篇】MySQL架构、SQL语句在数据库框架中的执行流程、数据库的三范式、Char 和 varchar 的区别、varchar(10)和varchar(20)的区别、索引、B+树
1NF:每列原子性,字段不可分割2NF:唯一性和依赖性,要有主键,且其他字段完全依赖主键3NF:没有传递依赖范式的优缺点:优点:重复数据很少或者没有表更小,可以更好的放在内存里,执行操作更快更新操作更快可以更少使用group by和distinct缺点:复杂一点的查询需要关联,可能使索引无效。
2025-07-18 21:00:04
984
5
原创 【Linux 基础】终端与命令、文件与目录、ls、pwd、cd、 du、mkdir、touch、cp、 mv、 rm、cat、 head、tail、less指令
终端与指令一。
2025-06-25 21:46:29
751
原创 【C++篇 13】map和unordered_map ;new;纯虚函数的使用场景?多态的意义;vector扩容;迭代器失效?STL库里的容器-vector-map-deque
本文摘要: 主要介绍了C++中几种常用容器的特性和使用方法。map基于红黑树实现有序存储,查找稳定但稍慢;unordered_map基于哈希表实现,查找更快但无序。vector是动态数组,尾部操作高效,扩容策略因编译器而异。deque支持两端高效操作,采用分段存储结构。文章还详细说明了各容器的初始化、增删改查操作,以及迭代器失效、内存管理等重要概念,并对比了不同容器的适用场景和性能特点。
2025-06-23 17:19:01
1019
原创 【C++篇 13】sizeof和strlen的区别、拷贝构造和赋值运算符、vector、 vector中的push_back()和emplace_back()的区别、以及使用场景、map
比如你只存 1 个元素,它可能直接分配 2 个、4 个甚至更多的空间(具体扩容策略由编译器决定,常见是 “翻倍”),这样下次新增元素时,只要没超过 capacity,就不用重新分配内存,能提升效率。普通 vector 如果没初始化元素(比如默认构造后 push_back 前),直接用 [] 访问(如 v[0] )是危险的(可能访问到无效内存)strlen是专门用来计算c风格字符串的有效长度(即字符串中字符的个数,不包含末尾的\0结束符),(指定或默认0,初始化capacity=size=a)
2025-06-22 21:25:28
807
原创 【C++篇 12】声明和定义的区别、x=x+1,x+=1,x++哪个效率高、全局变量定义在头文件中、编译器会为类生成哪些函数、c++构造函数有几种、c++类对象的初始化顺序
51. 全局变量定义在头文件中有什么问题?54. c++类对象的初始化顺序?
2025-06-21 21:39:11
412
原创 【c++11 篇】智能指针-shared_ptr
智能指针产生原因:c++中不像java 自带垃圾回收机制,必须释放掉分配的内存,否则就会造成内存泄露。因此c++11引入了智能指针。智能指针是存储指向动态分配(堆)对象指针的类,用于生存期的控制,能够确保在离开指针所在作用域时,自动的销毁分配的对象,防止内存泄露。原理:智能指针的核心实现技术是引用计数,每使用它一次内部引用计数加1,每析构一次内部引用计数减1,减为0时,删除原始指针指向的堆区内存使用智能指针需要引用头文件<memory>。sharedptr共享的智能指针u。
2025-06-18 21:34:08
777
原创 【C++篇 11】 在成员函数中可以delete this么?静态成员函数可以成为虚函数么?c++如何阻止类创建对象;c++的内存分配
执行delete this过程中,线程 B 同时尝试访问对象(读 / 写成员),由于delete涉及内存释放、对象析构等步骤,两个线程操作顺序不确定,会导致对象状态混乱,像析构函数执行一半被其他线程干扰,或对象已标记销毁但其他线程还在使用。不同线程对对象内存管理预期不同,一个线程delete对象释放内存,其他线程可能还认为对象有效并持有指针,后续若有线程重新分配内存,新数据可能覆盖原对象内存区域,引发 “内存踩踏”,破坏其他数据结构,使程序运行时出现奇怪错误,排查困难。delete之后对象还可以使用么?
2025-06-12 10:01:55
471
原创 【C++ 篇 10】在类外有什么办法可以访问非公有成员、c++空类大小为多大?构造和析构的顺序;内联函数可以是虚函数么?抽象类为什么不能创建对象
等纯虚函数作为接口,具体的形状类(如圆形、三角形等)需要继承并实现这些接口。有时候也会将一组仅包含纯虚函数、没有数据成员的抽象类专门称为接口类。常见的实现接口的方式是通过抽象类,其中包含纯虚函数,这些纯虚函数构成了类需要实现的接口部分。接口可以指一组相关函数的集合,这些函数定义了一个类或一组类所具有的行为。41. 在继承关系中,在栈区创建子类对象构造和析构的顺序是什么?40. 在类外有什么办法可以访问非公有成员。43. 内联函数可以是虚函数么?42. c++空类大小为多大?
2025-06-10 21:37:29
449
原创 【C++ 篇 9】c++生成可执行文件的四个步骤、悬挂指针、define和const区别、c++定义和声明、将引用作为返回值的好处、类的四个缺省函数
本文摘要: C++基础知识总结:1)可执行文件生成四步骤:预处理、编译、汇编、链接;2)悬挂指针指非法内存指针,成因包括未初始化、对象消亡等;3)#define与const区别在于类型和存储方式;4)include<>用于系统头文件,include""用于用户头文件;5)声明告知存在,定义分配存储;6)引用返回值可提高效率但需避免返回局部变量;7)this指针区分对象成员变量;8)编译器默认提供四种类函数:默认构造函数、拷贝构造函数、赋值运算符重载和析构函数。
2025-06-07 15:37:23
759
原创 【c++ 篇】学习笔记之模板--什么是c++模板-函数模板-类模板
程序设计中经常会用到一些程序实体:他们的实现和所完成的功能基本相同,不同的仅仅是所涉及的数据类型不同。而模板正是一种专门处理不同数据类型的机制。模板——是泛型程序设计的基础(泛型generic type——通用类型之意)函数、类以及类继承为程序的代码复用提供了基本手段,还有一种代码复用途径——类属类型(泛型),利用它可以给一段代码设置一些取值为类型的参数(注意:这些参数的值是类型,而不是某类型的数据),通过给这些参数提供一些类型来得到针对不同类型的代码。
2025-06-03 21:39:46
915
原创 【c++11 篇】函数指针、lambda、内存分区、final、override
Lambda 表达式没有函数名,是匿名的。比如在使用std::for_each对容器元素进行遍历处理时,只需要定义一个简单的操作逻辑,使用匿名的 Lambda 表达式就能快速实现,不需要考虑函数命名问题,也避免了全局作用域或类作用域中函数名冲突等情况。使用关键字进行声明,extern关键字声明全局变量,只声明不定义(extern告诉编译器:“这个变量在其他文件中已经定义了,这里只是声明它的存在,不要为它分配内存。栈区是先进后出原则,即先进去的被堵在屋里的最里面,后进去的在门口,释放的时候门口的先出去。
2025-06-02 21:18:58
1128
原创 【C++篇8】为什么还要有 new 和 delete?类和结构体区别?被delete 或 free 释放的内存会直接返还给操作系统么?什么时候需要析构函数?常函数内能否修改静态成员?初始化参数列表特点
因为c语言没有对象,而c++是面向对象语言,c++中类或结构体创建的对象在释放时需要调用析构函数去释放对象内部的指针指向的堆区内存,在创建对象时需要调用构造函数给成员变量赋值。而 malloc 不会调用构造函数,free 不会调用析构函数。new会先调用malloc申请内存,然后再调用构造函数赋值(初始化是初始化参数列表),delete 会先调用析构函数释放对象内的成员变量指向的堆区内存,再调用free。(这里要注意为啥不是先调用free再调用析构)。delete 在释放数组时要注意加中括号。
2025-06-01 21:34:16
353
原创 【C++ 篇 7】类的大小由什么决定?内存对齐、虚函数和纯虚函数的区别
内存对齐就是为了让内存存取更加有效率而采取的一种优化手段,对齐的结构是使得内存中数据的首地址是CPU单次获取数据大小的整数倍。
2025-05-29 20:59:33
987
原创 【C++篇 6】堆和栈、构造函数可以成为虚函数么、析构函数可以成为虚函数么、什么是内存泄露、如何只在堆区或栈区申请对象、什么情况下会内存泄露、智能指针循环引用问题及解决方法、主函数之前可以执行哪些函数
内存泄露 memory leak,是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄露危害可以忽略,但内存泄露堆积后果很严重,无论多少内存,迟早会被占光。内存泄露是指你向系统申请分配内存进行使用(new),可是使用完了以后却不归还(delete),结果你申请到的那块内存你自己也不能再访问(也许你把它的地址给弄丢了),而系统也不能再次将它分配给需要的程序。(了解下如何查找解决内存泄露 vs 提供了工具)。如何用Visual Studio自带工具分析内存泄漏?
2025-05-19 20:39:07
636
原创 【C++ 篇 5】多态、纯虚函数 & 抽象类、内联函数
替换为纯虚函数 纯虚函数在虚函数表中存放的是0,虚函数则存放的是虚函数地址,拥有纯虚函数的类则被称为纯虚类(抽象类),纯虚类不能创建对象,一般来说只作为基类存在,子类如果不重写父类中的纯虚函数子类也是抽象类。当类中存在虚函数时,编译器会给类增加一个指针类型的成员变量,增加的这个指针变量就是虚函数表指针,创建对象虚表指针就会被创建,并且在构造函数中被赋值,每个对象都有一个自己的虚表指针。首先会通过父类指针或引用访问到子类对象中的虚表指针,然后通过虚表指针找到虚函数表通过虚函数表存放的虚函数地址去调用虚函数。
2025-05-16 11:12:10
385
原创 【C++ 篇 4】const、static静态成员变量、函数重载重写隐藏以及区别
静态成员函数没有this指针因此静态成员函数不能访问非静态成员变量(原因:无法区分是哪个对象的成员变量),静态成员函数不能调用非静态成员函数,因为非静态成员函数有隐含参数this,因为静态成员函数无法给非静态成员函数的this传值,静态成员函数可以调用静态成员变量因为静态成员变量时共享的不需要使用this来区分是哪个对象的,也可以调用静态成员函数,因为静态成员函数不需要给this传值。发生函数隐藏时,函数被调用的时候看调用该函数的指针或对象是什么类型的,就调用哪个类中的隐藏函数。基类中被重写的函数必须有。
2025-05-14 21:44:31
1146
原创 【C++ 篇 3 】 new 和 malloc 的区别、构造函数(this)、析构函数、拷贝构造(深拷贝和浅拷贝)
1. 选择基类通常继承自exception类或它的派生类(如等 )。exception是 C++ 标准库中所有异常类的基类,它提供了虚函数what(),用于返回描述异常的字符串。选择合适的基类,能让自定义异常类融入 C++ 标准异常体系,方便统一处理。2. 定义异常类以继承自exception// 自定义异常类private://用于存储异常信息public://构造函数,接收异常信息作为参数//重写what函数,返回异常信息声明了一个私有成员变量m_message。
2025-05-13 20:45:48
830
原创 【C++ 篇 2】面向对象三大特征-封装(struct和class区别)、继承(多继承、菱形继承、虚继承、虚基类指针)、多态(函数重写、函数隐藏)
继承的好处:可以减少重复的代码A 类称为子类 或 派生类B类称为父类 或 基类。
2025-05-11 23:18:11
1006
原创 【C++篇 1】c和c++区别、函数重载问题、引用
1. c语言头文件带.h,c++不带2. c语言没有bool类型:bool类型有只有两个值:true =1 、false=0。但是,C99标准里面,又定义了bool类型变量。这时,只要引入头文件 <stdbool.h>,就能在C语言里面正常使用bool类型。3. c语言不能函数重载,c++能重载: 函数重载是在同一个作用域内,函数名字相同,参数的个数顺序或类型其中一个不同则为函数重载,函数重载与返回值无关。c语言为什么不支持函数重载?
2025-05-10 20:06:01
1173
原创 【C/C++ 篇】bool、new操作符、引用
bool类型是c++中的基本数据类型,一种整型类型int类型的变量被赋值为true会自动转换为1,被赋值为false会被转换为0。
2025-04-18 08:47:07
499
原创 【MySQL 数据库 篇-表】-DDL(数据定义语言)-DML(数据操作语言)-约束
Data Definition Language, 用于定义和管理数据库中的对象和结构,如表、列、索引 等。
2025-04-16 11:21:33
1145
原创 数据库-表-数据类型
存储在表中的数据是一种类型的数据,不同类型的数据应放到不同的表中,否则会使以后得检索和访问很困难。数据库中的每个表都有一个名字,用来标识自己。此名字是唯一的,这表示数据库中没有其他表具有相同的名字。表由一个或多个列组成。每一列存储一列特定的信息,列称为字段,每个列都有相应的数据类型。数据类型定义列可以存储的数据种类。例如,某一列中需要存储数字,该列的数据类型应该定义为数值类型。
2025-03-09 17:31:30
244
原创 【MySQL 数据库 篇-简介与基本命令】简介-基本命令—基本查询—运算符
安装MySQL时会自动创建一些数据库在系统盘上划分一块区域用于数据的存储和管理Query OK:表示执行成功1 row affected :影响数据库中一行记录0.00 sec:操作执行的时间[if not exists] 可加可不加 ,如果当前想要创建的数据库已经存在,不加会报错。
2025-03-06 18:58:43
690
原创 埃氏筛找质数
1 1 0 1 0 1 0 1 0(依此类推 把2所有的倍数都标记为0)1 1 1 1 1 1 1 1 1(首先都标记为素数)(注意:此代码为了缩短复杂度 遍历的范围缩减到根号n,原理相同)再将 第一个数(2)的2倍 筛掉 将标记数组设置为0—代表合数。用到标记数组:1—代表是素数 0—代表是合数。将4跳过因为4 已经被标记为0(合数)了。埃氏筛原理:将素数的倍数(合数)筛掉。再将3所有的倍数筛出掉。
2025-01-22 16:48:48
151
原创 初等数论—模运算的性质
一、对于超大数据的处理要求,题目要求保留末几位-初等数论-模运算的性质。二、对于超大数据的处理要求,题目要求完整输出 —高精度算法。long long —10^18数量级。int ——10^9数量级。
2025-01-15 20:47:36
228
原创 计算机网络、互连网、互联网之间的区别
计算机网络概念:计算机网络:由若干结点和连接这些结点的链路组成。结点可以是计算机、集线器、交换机、路由器等。主要功能:数据通信(信息传递)、资源共享互连网:多个计算机网络通过路由器互相连接而成,可使用任意通信协议互联网:或译为因特网。特指全世界最大的计算机网络,由各大ISP和国际机构组建,使用TCP/IP协议族作为通信规则其他拓展:ISP,互联网服务提供商。集线器、交换机用于连接同一网络内的不同结点;路由器用于连接不同的网络。家用路由器=路由器+交换机+其他功能思考:
2025-01-09 18:07:09
1501
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅