- 博客(72)
- 收藏
- 关注
原创 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:i < n;j < n;right--;left++;elseleft++;right--;j++;i++;return ret;
2025-03-21 21:35:26
425
原创 复写零的求解
public:dest++;elsedest += 2;break;cur++;cur--;dest -= 2;elsecur--;
2025-03-19 17:04:29
215
原创 哈希桶的实现
_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
原创 红黑树的实现
enum colorRED,BLACKT _data;color _col;{}{}elsepublic:elseelseelse。
2025-01-13 21:26:49
440
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人