自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 算法小技巧

1 正难则反。

2025-06-06 21:42:46 99

原创 Http请求的内容

1. 请求行(Request Line):包含请求方法(如GET、POST)、请求的资源路径(如/index.html)、以及HTTP协议版本(如HTTP/1.1)。2. 请求头部(Request Headers):特定于请求的头部,如Host、User-Agent、Accept、Authorization等。1. 表单数据(Form Data):application/x-www-form-urlencoded,用于提交表单数据。POST:向服务器提交数据,通常用于表单提交,数据在请求体中。

2025-06-05 09:56:00 430

原创 锁的底层原理

在C++中,锁(例如std::mutex)用于确保多线程访问共享资源时避免冲突。递归锁 (Recursive Lock):同一线程可重复加锁(如std::recursive_mutex)。读写锁 (RWLock):允许多读单写,适用于读多写少场景(如std::shared_mutex)。防止编译器/CPU重排内存访问顺序,保证多线程数据一致性(如std::memory_order)。解决方案:锁层次化、超时机制(如try_lock)、按固定顺序获取锁。典型应用:无锁队列、无锁栈(需处理ABA问题)。

2025-06-05 09:47:35 226

原创 TCP/IP四层模型

TCP关键字段:Source Port(源端口)、Destination Port(目的端口)、Sequence Number(序列号)、Acknowledgment Number(确认号)、Flags(标志位)- IP关键字段:Source IP Address(源IP地址)、Destination IP Address(目的IP地址)、TTL(生存时间)、Protocol(上层协议类型)- OSI七层模型:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。

2025-05-29 14:03:52 657

原创 DNS详解

互联网中的域名地址,分为多级结构:最顶级是根域,然后是顶级域(TLD),如.com、.org,接着是二级域(如mianshiya.com),以及子域(如www.mianshiya.com)。- 根域名服务器将请求转发到对应的TLD服务器(例如,.com、.org或.net服务器),这些服务器负责处理特定顶级域的请求。- 权威DNS服务器返回与域名对应的IP地址给递归DNS服务器,然后递归DNS服务器将该IP地址返回给用户的浏览器。- 根域名服务器:最顶层的DNS服务器,负责根域和TLD的解析。

2025-05-29 13:53:38 351

原创 函数调用的过程

1.保存当前上下文:保存程序计数器(指令指针)和寄存器的内容,用于恢复调用前的状态。2.分配栈帧:在栈上为被调用函数分配内存,管理局部变量、参数和返回地址。- call:将返回地址压栈(rsp递减),跳转至函数入口。- 函数栈帧是调用栈中的单元,存储单个函数执行所需的信息。- ret:弹出返回地址(rsp递增),跳转至该地址。4.保存的上下文信息:调用者的栈指针和寄存器状态。- ebp/rbp:栈底指针,保存栈帧基地址。- ebx/rbx:基址寄存器,存放基地址。-返回地址:函数结束后返回的指令地址。

2025-05-26 11:13:00 324

原创 Linux的top命令使用

ps aux --sort=-%cpu | head (查看CPU占用前10进程)CPU状态:用户空间(us)、系统空间(sy)、空闲(id)等。进程列表:PID、用户、优先级、CPU/内存占用率、命令等。系统信息:当前时间、运行时长、登录用户数、平均负载。1. -d:设置刷新间隔(秒),示例:top -d 5。2. -p:监控指定进程,示例:top -p 1234。3. -n:设定刷新次数后退出,示例:top -n 1。进程摘要:总进程数/运行中进程数/睡眠进程数。- k:结束指定PID进程。

2025-05-26 11:01:34 571

原创 Git的工作流程

3) 提交改动:git commit -m "提交信息"(注意commit正确拼写)1) 初始化仓库:使用 git init 命令在目录中创建新Git仓库。- git checkout <分支名> 切换分支。- git add <文件名> 添加指定文件。- git merge <分支名> 合并分支。- 分支:支持并行开发,最终可合并到主分支。- git branch 查看/创建分支。- git pull 拉取并合并远程更改。- 功能分支工作流:每个功能独立分支开发。- 集中式工作流:直接提交到远程主分支。

2025-05-22 09:32:25 487

原创 Git的工作区,暂存区,本地仓库

git restore(Git 2.23+):替代checkout的新方式。- git checkout/git switch:切换分支。- git checkout:放弃工作区未暂存的修改。- git reset:撤销提交或取消已暂存的修改。- .gitignore 文件管理:排除非追踪文件。- git push 推送本地提交到远程仓库。- 差异对比:git diff 查看修改细节。- git branch:查看/创建新分支。- 历史追溯:git log 查看提交记录。

2025-05-22 09:26:21 330

原创 Linux的内存泄漏问题及排查方法

内存泄漏是指在计算机程序中,已不再被使用的内存未被正确释放,导致内存占用随时间累积,进而引发系统内存不足、性能下降甚至崩溃的问题。针对C/C++程序,运行valgrind --leak-check=full ./your_program进行内存泄漏检测,可精确到代码行级分析。通过ps aux --sort=-%mem命令按内存使用率对进程排序,识别高内存占用的进程。执行free -h查看系统内存整体使用情况,包括总内存、已用内存、空闲内存和缓存使用量。- 配置进程级内存监控,自动触发告警和日志记录。

2025-05-19 00:11:24 375

原创 Git基础原理和使用

3. 版本库(Repository):永久存储版本信息的.git目录。- 通过不断复制文件来保存历史版本(如报告-v1、报告-最终版等)- 使用.gitignore管理不需要版本控制的文件。- 版本数量增多后无法清晰记住每个版本的修改内容。- 保持原子性提交(每次提交一个功能/修复)- Fast-forward(快进式合并)- 有限支持二进制文件(图片、视频等)- 默认主分支:master/main。- master/main分支保持稳定。- 完美支持文本文件(代码、文档等)- HEAD指针指向当前分支。

2025-05-19 00:06:13 435

原创 Linux系统的权限管理机制

每个文件和目录都由三种实体管理权限:所有者(user)、组(group)和其他人(others)。权限分为三种类型:读取(read)、写入(write)和执行(execute)。使用 ls -l 命令可查看文件的权限和所有者信息。- 每个文件和目录都有一个所有者和所属组。ls -l 会显示特殊权限位(如 rwsr-xr-x 中的s表示SUID)- 符号表示:r=读,w=写,x=执行。- 用户可属于多个组,但文件只能有一个所有者和一个组属性。- 八进制表示:r=4,w=2,x=1,三者相加。

2025-05-15 11:07:06 227

原创 Linux 系统中的文件系统层次结构和重要目录的用途。

采用读(r)/写(w)/执行(x)权限模型,为文件所有者、用户组和其他用户设置独立权限。可将外部存储设备挂载到指定目录(如/mnt/external),实现灵活存储管理。/proc和/sys目录实时反映系统状态,内容由内存动态生成,用于系统监控和调试。11. /sbin : 系统级管理命令(ifconfig/reboot等)2. /bin : 存储基础用户命令(ls/cp/mv等)4. /etc : 系统配置文件目录(网络/服务配置等)14. /var : 动态数据存储目录(日志/缓存等)

2025-05-15 10:44:12 293

原创 Linux常见命令

curl/wget:发送HTTP请求或下载文件(如curl -O http://example.com/file)。- umask:控制新文件默认权限,例如umask 022对应文件权限755(目录)和644(文件)。- tar:打包/解包文件(如tar -czvf archive.tar.gz dir)。- shutdown:关机或重启系统(如shutdown -h now)。- du:统计文件/目录的磁盘使用量(如du -sh)。- rm:删除文件或目录(慎用-r参数删除目录)。

2025-05-12 18:42:16 561

原创 Linux修改文件权限

在Linux系统中,修改文件权限的核心命令是chmod(全称change mode),其作用是调整文件或目录的访问权限。- 644(rw-r--r--):所有者可读写,其他用户仅可读(适用于普通文件)。- 777(rwxrwxrwx):所有用户拥有完全权限(慎用,存在安全风险)。- 600(rw-------):仅所有者可读写(适合敏感文件如私钥)。- 第二个数字5:所属组权限为r-x(仅可读、可执行,不可写)。- 第一个数字7:所有者权限为rwx(可读、可写、可执行)。

2025-05-12 17:55:27 375

原创 Linux的进程与线程

2. 线程:线程是进程中的一个单独的执行路径,一个进程可以包含多个线程,它们共享进程的地址空间和其他资源。1. 进程:进程是一个具有独立运行环境的程序实例,它拥有自己的地址空间、内存、数据栈以及其他系统资源。- 独立性:进程之间彼此独立,一个进程崩溃不会影响其他进程;线程共享进程资源,一个线程崩溃可能导致整个进程崩溃。- Web服务器(如Apache/Nginx):为每个请求生成独立进程,保证请求隔离。线程在同一进程内切换开销较小。- 资源分配:进程是资源分配的基本单位,线程是CPU调度的基本单位。

2025-05-09 16:19:03 445

原创 硬链接与软连接

在Linux文件系统中,硬链接(hard link)和软链接(symbolic link)是两种不同的文件链接方式,用于将一个文件关联到另一个文件。2. 删除影响:删除原文件后,硬链接仍能正常访问数据,因为inode的引用计数会减少,直到所有硬链接被删除后数据才被释放。1. 实现原理:创建一个独立的新文件,其中存储目标文件的路径(类似快捷方式),拥有独立的inode和文件属性。2. 删除影响:若原文件被删除,软链接将失效(称为“悬空链接”),无法访问数据。- 仅能链接同一文件系统中的文件,不可跨文件系统。

2025-05-09 15:44:11 244

原创 emplace_back和push_back

push_back:存在临时对象构造和销毁开销,效率较低(对复杂对象更明显)- emplace_back:避免中间步骤,直接构造对象,性能更优。- 默认首选emplace_back(C++11及以上)- 行为:通过拷贝或移动操作添加对象到末尾。- 行为:在容器内存中直接构造对象。- 参数:构造对象所需的原始参数。- 触发机制:仅调用一次构造函数。- 需要显式拷贝/移动已存在对象。- 构造参数较多或构造过程复杂。右值对象触发移动构造函数。- 需要优化性能的关键代码段。- 处理不可拷贝/移动的对象。

2025-05-04 12:13:02 179

原创 继承与组合

必要时(如需要多态或明确 is-a 关系)再使用继承,平衡代码复用与耦合问题。当需要对基类的行为进行扩展或修改,并利用多态性(通过基类指针或引用调用派生类的函数)。- 设计不当:滥用继承会导致类层次结构混乱,增加维护难度。当需要复用其他类的功能而非继承,避免继承导致的过度耦合。- 多态性:通过基类调用派生类函数,提升灵活性和扩展性。- 代码复用:直接使用基类的属性和方法,减少重复代码。- 单一职责:组件功能应专注,避免功能冗余。- 接口设计:确保组件接口清晰,协同工作。- 低耦合:组件独立修改,互不影响。

2025-05-04 12:02:28 155

原创 深刻理解new[]和delete[]

最终建议:无论数据类型,始终严格配对使用new/delete和new[]/delete[],这是编写健壮C++代码的基本准则。内存管理:new/delete与new[]/delete[]配对使用原理及后果分析。| 数据类型 | new/delete | new[]/delete[] || 操作 | 析构次数 | 释放起始地址 | 长度读取方式 || delete[] | N次 | A-4 | 前4字节 |[数组长度][元素1][元素2]...[元素n]| delete | 1次 | A | 无 |

2025-05-02 12:47:15 491

原创 动态库与静态库的区别

静态库在编译时合并到可执行文件,文件类型为.lib(Windows)或.a(Linux)动态库在程序运行时加载,文件类型为.dll(Windows)或.so(Linux)动态库可被多个程序共享,节省内存和磁盘空间,但存在加载开销。动态库需确保目标系统存在正确版本库文件,易出现版本冲突问题。动态库更新时只需替换库文件,无需重新编译依赖程序。静态库更新后必须重新编译所有依赖该库的程序。动态库依赖在运行时解析,顺序影响较小。动态库与静态库核心区别及扩展知识点。静态库程序可独立分发,无需额外依赖。

2025-05-02 12:32:41 198

原创 静态多态和动态多态的区别

多态是面向对象编程的核心特性,允许通过统一接口执行不同实现。在C++中,多态表现为基类指针或引用调用虚函数时,根据实际对象类型执行对应派生类的函数逻辑。每个含虚函数的类自动生成虚表(vtable),存储虚函数地址列表。特点:系统灵活性高,存在虚表查询开销,适用于接口抽象场景。对象实例内置虚表指针(vptr),指向所属类的虚表。特点:执行效率高,但扩展性受限,常用于泛型编程。依赖虚函数机制实现,运行时动态绑定函数地址。禁止直接实例化,强制派生类实现接口。作用:建立标准化接口,实现模块解耦。

2025-04-26 22:55:00 308

原创 function,bind,lambda的用法

定义一个std::function对象,例如std::function<void(int)>,可以存储普通函数、Lambda或成员函数(需结合std::bind)。通过std::bind可将成员函数绑定到具体对象,例如:std::bind(&Class::Method, &obj, ...),生成独立的可调用对象。例如,接口需要一个无参函数,但现有函数需要参数,此时可以预先绑定参数。3. 结合std::function:当需要存储或传递不同类型的可调用对象时,通过std::function实现统一接口。

2025-04-26 22:33:28 595

原创 sizeof和strlen的区别

错误示例:char arr[5] = {'a','b'};sizeof(p) 返回指针变量本身的大小。- 示例:char arr[] = "Hello";- 示例:int arr[10];sizeof(arr) 返回整个数组的字节大小。- 示例:sizeof(MyClass) 计算类/结构体的内存占用。- 功能:计算C风格字符串的有效字符长度(不包含终止符\0)- 示例:sizeof(int) 返回整型占用的字节数。// sizeof(arr) 仅返回指针大小。

2025-04-23 23:56:43 368

原创 左值和右值的区别

在C++编程中,左值(Lvalue)和右值(Rvalue)是两个基础但至关重要的概念,它们直接关系到代码的效率、安全性和现代C++特性的正确使用。通过深入理解左值和右值的区别,可以更好地掌握现代C++的移动语义、完美转发等高级特性,编写出更高效、更安全的代码。4. 标识特性:左值有明确标识符,右值通常是匿名临时量。1. 赋值能力:左值可以出现在赋值号左边,右值不能。3. 生命周期:左值生命周期较长,右值通常是临时的。1. 临时性:通常是临时创建的、即将销毁的值。2. 地址获取:左值可以获取地址,右值不能。

2025-04-22 11:14:44 220

原创 C++多态的实现原理

3)虚表指针(vptr):每个包含虚函数的对象实例会有一个隐藏的虚表指针(vptr),它在对象创建时自动初始化,指向该类的虚表。不同类型的对象,其虚表指针会指向不同的虚表。4)多态的调用机制:当通过基类指针或引用调用虚函数时,程序会通过该指针或引用找到对应的对象,然后通过虚表指针找到正确的虚表中的函数地址,最终调用适当的函数实现,这样程序能够在运行时决定调用哪一个函数实现。虚表是一个函数指针数组,包含了该类所有虚函数的地址,而虚表指针存储在对象实例中,指向属于该对象的虚表。它包含了该类所有虚函数的指针。

2025-04-21 10:29:23 300

原创 C++move的作用和原理

因为触发了移动构造函数或者 移动赋值函数,我们就默认,原对象后面已经不会再使用了(包括内部的某些内存),这样我们就可以在新对象中直接使用原对象的那部分内存,减少了数据的拷贝操作,昂贵的拷贝转为了廉价的移动,提升了程序的性能。它的主要作用是将对象的资源从一个对象转移到另一个对象,而无需进行深拷贝,减少了资源内存的分配,可提高性能。我们可以理解为在对象转换的时候,通过右值可以触发到类的移动构造函数或者移动赋值函数。如果在移动构造函数+移动赋值函数中,还是使用了拷贝动作,那原对象还是可以使用的,见下面示例。

2025-04-20 18:40:43 222

原创 C和C++的区别

C++的 STL 标准库能力比C语言丰富的多,比如vector、string、list、map等等,还有很多算法相关的能力,这些C 语言都没有。C++是一门多范式语言,主要支持面向对象,侧重于使用类和对象来组织代码。C++支持继承,允许一个子类继承一个或多个父类,达到代码复用的目的。C++使用 new 和 delete操作符来管理内存,也支持使用智。C语言是一门面向过程的语言,侧重于通过过程(函数)来解决问题。.C++支持模板,支持静态和动态形式的多态。C++支持函数通过参数类型和参数个数的重载。

2025-04-20 17:48:00 340

原创 判定字符是否唯一

public:

2025-03-25 22:01:42 186

原创 和可被 K 整除的子数组

public:sum += e;hash[r]++;return ret;

2025-03-24 22:27:25 253

原创 将 x 减到 0 的最小操作数

public:right++)

2025-03-22 20:31:14 196

原创 四数之和求解

public:i < n;j < n;right--;left++;elseleft++;right--;j++;i++;return ret;

2025-03-21 21:35:26 425

原创 无重复字符串的最长子串

public:right++;return ret;

2025-03-21 21:07:12 181

原创 有效三角形的个数

public:i >= 2;i-- )right--;elseleft++;return ret;

2025-03-20 12:48:35 103

原创 快乐数的判定

public:while(n)n /= 10;return sum;while(slow!= fast)

2025-03-20 12:37:27 133

原创 复写零的求解

public:dest++;elsedest += 2;break;cur++;cur--;dest -= 2;elsecur--;

2025-03-19 17:04:29 215

原创 shared-ptr的实现

release();

2025-03-11 20:48:29 339

原创 哈希桶的实现

_kv(kv){}public:i++)delete cur;cue = next;Hash hs;i++)cur = next;++n;Hash hs;Hash hs;elsedelete cur;--n。

2025-02-23 16:56:32 321

原创 红黑树的进阶

{}else=s._node;public:elseelseelseelsebraeak;private:

2025-01-19 10:55:54 302

原创 红黑树的实现

enum colorRED,BLACKT _data;color _col;{}{}elsepublic:elseelseelse。

2025-01-13 21:26:49 440

空空如也

空空如也

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

TA关注的人

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