自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Ape's IT Blog

C/C++/Data Structure/Linux/OS/Internet/MySQL/Docker/Algorithm

  • 博客(463)
  • 收藏
  • 关注

原创 【C++】noncopyable类的设计思想和应用场景

C++中通过继承noncopyable基类可禁用子类的拷贝功能。该基类将拷贝构造和拷贝赋值运算符声明为delete,同时保护构造函数和析构函数,确保只能被继承使用。子类自动失去拷贝能力但仍支持移动语义,适用于单例、资源管理等需要禁止拷贝的场景。这种设计方式简洁明确,是C++中实现不可拷贝类的经典方法,Boost和标准库中广泛采用。开发者需注意继承方式选择、C++版本兼容性等问题,避免违背设计初衷。

2025-12-10 09:00:13 272

原创 【CPP】局部变量、静态局部变量、全局变量、静态全局变量

C++变量分类主要依据存储期和作用域两大维度。局部变量(自动变量)具有自动存储期和局部作用域,离开作用域即销毁;静态局部变量在局部作用域内保持静态存储期,值会被保留;全局变量具有全局作用域和静态存储期,程序启动时创建;静态全局变量则限定在当前文件可见。关键区别在于:静态全局变量限制文件可见性,而静态局部变量在函数内持久化。建议优先使用局部变量,谨慎使用全局变量,静态局部变量适用于需要记忆状态的场景,静态全局变量可用匿名命名空间替代。

2025-12-09 09:43:50 949

原创 【Linux】Ubuntu 24安装webbench

摘要: Webbench是一款轻量级HTTP/HTTPS压力测试工具,用于评估Web服务的并发性能。在Ubuntu系统中安装时需先通过apt安装gcc、make等依赖,然后克隆或下载源码。编译时若遇到rpc/types.h报错,需安装libtirpc-dev并修改源码中的头文件引用路径。安装完成后,通过webbench -c <并发数> -t <时间> URL命令进行测试,输出结果包括请求速度及成功率。测试HTTPS服务建议改用ab工具。卸载时直接删除二进制文件即可。

2025-12-08 20:47:34 953

原创 【C++】cpp虚函数和纯虚函数的声明和定义

摘要:C++中的虚函数和纯虚函数是实现多态的核心机制。虚函数通过virtual关键字声明,提供默认实现,派生类可选择性重写;纯虚函数通过=0声明,强制派生类实现,使基类成为抽象类。虚函数支持运行时多态,纯虚函数用于定义接口。两者关键区别在于:虚函数必须有定义且基类可实例化,纯虚函数无定义且基类不可实例化。使用时需注意析构函数应为虚函数,重写建议使用override关键字,以及纯虚函数可提供默认实现等特性。

2025-12-06 14:05:19 447

原创 【Linux】Ubuntu配置开发环境合集

本文详细介绍了在Ubuntu系统上安装和配置Redis与MySQL的方法。对于Redis,提供了两种安装方式:通过APT包管理器安装(推荐)和编译源码安装(获取最新版本),并包含验证安装、基础配置、卸载等步骤。MySQL部分则介绍了通过Ubuntu默认仓库快速安装的流程。文中还提供了Redis的详细配置说明,包括网络、安全、持久化、内存管理等关键设置,并给出生产环境配置建议。全文采用代码块与注释结合的形式,清晰展示各操作命令和配置参数,便于用户快速实践。

2025-12-04 08:50:37 582

原创 【大模型】什么是大模型?vLLM是?模型部署?CUDA?

大模型领域基础概念

2025-12-02 17:42:40 714

原创 【Linux】git push大文件很慢甚至卡死

本文介绍了使用git-filter-repo工具清理Git仓库中大文件的操作指南。主要内容包括:1)查看仓库中前10个最大的对象;2)安装git-filter-repo工具;3)批量删除指定路径的大文件;4)执行仓库优化和验证清理结果;5)重新添加远程仓库并强制推送更新后的分支。文章特别强调了在强制推送时使用--force-with-lease参数的注意事项,以及单人仓库环境下可以直接使用--force的安全情况。整个流程帮助开发者有效清理仓库历史中的大文件,优化存储空间。

2025-11-24 09:46:08 54

原创 【Linux】Ubuntu 24.04 LTS下的:E: Unable to correct problems, you have held broken packages.

摘要:本文针对Ubuntu 24.04 LTS(noble)系统因错误使用旧版本源(bionic/focal)导致的软件依赖冲突问题,提供了一套完整的修复方案。通过备份原配置文件、替换为适配24.04的清华国内源、清理缓存并更新软件包列表等步骤,可解决版本不匹配问题。脚本还包含验证方法和备用解决方案,确保彻底修复依赖冲突,使后续软件安装恢复正常。关键点在于将源文件统一调整为noble版本,保持软件包与系统版本的兼容性。

2025-11-21 15:41:32 115

原创 【Linux】Ubuntu 中查看项目代码行数

本文介绍了在Ubuntu系统中统计项目代码行数的两种方法。推荐使用cloc工具,它能自动识别不同语言,区分代码行、注释行和空白行,支持过滤指定文件类型和目录,安装简单只需执行sudo apt install cloc。文章详细说明了cloc的核心用法,包括统计整个项目、指定语言、排除目录等功能,并提供了示例输出。作为备选方案,也介绍了使用find和wc命令组合的统计方法,但无法区分注释和空白行。最后总结了cloc的关键参数,建议开发者优先使用功能更强大的cloc工具。

2025-11-21 11:45:02 33

原创 【Linux】云服务器内网IP与公网IP访问揭秘 &&云服务器防火墙

本文摘要: 公网IP与内网IP的核心区别在于服务器监听逻辑和客户端访问路径的不同。云服务器通常通过NAT网关实现内网监听地址(如172.17.0.2)与公网访问地址(如120.78.xx.xx)的映射转换。Linux系统的listen接口监听的是bind绑定的本地地址,可以是特定网卡IP(限制访问范围)、0.0.0.0(所有网卡)或127.0.0.1(仅本地)。通过C语言示例代码展示了服务端绑定内网IP监听、客户端通过公网IP访问的实现方式,并强调了云服务器安全组配置等关键前提条件。最终说明监听地址是程序内

2025-11-21 11:08:21 132

原创 【Linux】Linux查看coredump的完整指南

本文介绍了在Linux系统中查看和分析coredump文件的关键步骤。主要内容包括:1) 配置系统允许生成coredump文件,通过ulimit命令设置大小限制或修改配置文件;2) 触发程序崩溃并查找coredump文件;3) 使用gdb工具分析coredump文件,通过bt命令查看调用栈定位崩溃点。文章还提供了常见问题的解决方案,如未生成coredump、缺少调试信息等问题。通过系统配置和gdb分析,可以快速定位程序崩溃的根本原因。

2025-11-21 09:36:50 138

原创 【C++】map、set、unordered_set、unordered_map 的核心接口使用示例

本文介绍了C++中四种常用容器的核心接口使用方法: set:有序不重复集合,基于红黑树实现,支持插入、查找、范围查询和有序遍历,时间复杂度为O(logn)。 map:有序键值对容器,同样基于红黑树,提供键值对的插入、访问、修改和删除操作,支持[]和at()访问值。 unordered_set:基于哈希表实现的无序集合,提供平均O(1)时间的插入、查找和删除操作,但不保证元素顺序。 unordered_map:基于哈希表实现的无序键值对容器,提供快速查找和修改操作。 每种容器都详细演示了构造、插入、查找、遍历

2025-11-20 16:16:10 340

原创 【C++】内部类和组合类

inner可访问outter的static成员,不可访问private成员。outter不可直接访问inner的private成员,可通过友元访问。组合类不可直接访问部件类的private成员,可通过友元访问。

2025-11-08 18:47:21 692

原创 【环境配置】vscode远程连接云服务器死机问题

摘要: 本文介绍了在Linux系统中创建和使用交换文件的详细步骤:1)使用fallocate或dd命令创建指定大小的交换文件;2)通过chmod设置600权限确保安全;3)用mkswap格式化文件为交换空间;4)执行swapon启用交换空间;5)编辑/etc/fstab实现开机自动挂载;6)最后通过free -h验证虚存状态。整个过程覆盖了从创建到持久化配置的关键操作,适用于临时或长期扩展系统内存的场景。

2025-11-08 14:54:34 637

原创 windows本机vscode通过ssh免密登录远程linux服务器 && git push/pull 免密

本文详细介绍了如何在VS Code中配置SSH免密登录远程Linux服务器的方法。首先需满足本地安装VS Code和SSH客户端的条件,然后通过ssh-keygen生成密钥对(推荐ed25519算法),将公钥上传至服务器。文章提供了自动(ssh-copy-id)和手动两种公钥上传方式,并强调正确的文件权限设置(.ssh目录700权限,authorized_keys文件600权限)。最后指导安装VS Code的Remote-SSH插件,配置SSH连接文件,实现免密登录。文中还包含常见问题排查,如登录失败。

2025-11-07 14:42:01 1112

原创 【C++】std::unique_lock 和 std::lock_guard

C++中std::unique_lock和std::lock_guard都是互斥锁的RAII包装类,但存在显著差异: std::lock_guard是轻量级锁,构造时自动上锁、析构时解锁,不可手动控制,适用于简单同步场景。它体积小、开销低,但不能与条件变量配合使用。 std::unique_lock功能更强大,支持延迟上锁、手动锁/解锁、尝试锁和所有权转移。虽然体积较大,但能配合条件变量,适用于复杂同步场景,如需要精细控制锁粒度或转移所有权的情况。 选择原则:简单场景优先用lock_guard,需要灵活性、

2025-11-07 14:02:16 1077

原创 【Linux网络】shutdown()与close()的区别

shutdown()函数用于精细控制套接字的通信能力,可部分或完全关闭连接。与close()不同,它允许半关闭状态(如仅关闭写端),适用于TCP协议中需要明确通信状态变更的场景。函数接收套接字描述符和关闭方式参数(SHUT_RD/SHUT_WR/SHUT_RDWR),成功返回0,失败返回-1并设置errno。典型应用包括HTTP客户端发送请求后关闭写端以等待服务器响应,实现双向通信的灵活管理。使用时需注意UDP的特殊性及仍需调用close()释放资源。

2025-11-07 10:46:31 1031

原创 【C++11】dynamic_pointer_cast 和 static_pointer_cast

摘要: dynamic_pointer_cast是C++中用于智能指针(std::shared_ptr/std::weak_ptr)的动态类型转换工具,对应原生指针的dynamic_cast。其核心作用是在多态继承体系中安全地将基类智能指针转换为派生类智能指针,失败时返回空指针而非野指针,避免内存安全问题。使用需满足:1)启用RTTI;2)基类含虚函数(多态)。与static_pointer_cast相比更安全但有性能开销,适用于不确定类型匹配的场景。

2025-11-06 15:40:25 1372

原创 【C++11】枚举 和 枚举类

C++中的枚举(enum)和枚举类(enum class)是定义命名常量集合的两种方式。传统枚举存在作用域污染、类型不安全等问题,而C++11引入的枚举类通过作用域隔离和类型安全机制解决了这些缺陷。枚举类要求通过枚举名::常量名访问,不支持隐式转换,允许指定底层类型,并能避免命名冲突。相比之下,传统枚举更简单但不够安全。现代C++开发应优先使用枚举类,尤其是大型项目或需要类型安全的场景;传统枚举仅建议用于简单局部场景或旧代码兼容。枚举类已成为C++11后的推荐实践。

2025-11-05 19:45:05 396

原创 【C语言】localtime和localtime_r;strftime和strftime_l

localtime和localtime_r是C标准库中用于将时间戳转换为本地时间的函数,主要区别在于线程安全性和存储方式。

2025-11-05 16:58:16 822

原创 【成长经历】秋招经历/技术之路分享

摘要 本文分享了一名双非本科软件工程专业学生的转码与求职经历。作者通过转专业进入计算机领域,自学C++并坚持做技术笔记和代码提交积累。他建议初学者要夯实基础、多做实践,同时强调稳定的学习心态和持续积累的重要性。在职业规划方面,作者比较了考研、考公和就业三条路径的利弊,最终选择就业并成功通过实习转正获得互联网大厂后端开发offer。文章详细列出了C++后端开发需要掌握的技术栈,并分享了实习、面试和秋招的实用经验,包括投递记录表格模板和面试技巧。作者认为IT行业仍有发展空间,鼓励读者坚定信念、稳扎稳打地学习技术

2025-11-05 10:32:43 1309

原创 【成长经历】大三下实习经历

本文系统梳理了技术岗位求职全流程要点。技术准备应聚焦算法(拆解问题能力)、核心技能(C++/网络协议/数据库)和项目经验,强调笔记整理与定期复习的学习方法。简历制作需个性化设计,突出技术亮点。实习选择建议优先大厂,通过参与需求开发熟悉工程流程。面试环节需注重八股文理解转化、项目深度复盘及算法题的系统训练。作者结合亲身实习经历指出:算法思维在实际工作中的迁移价值远超预期,而持续的技术沉淀与结构化学习能力才是应对职场挑战的核心竞争力。

2025-07-21 20:57:35 1424 7

原创 【CPP】unique_ptr将删除器作为类型一部分实现高效性 共享指针为什么不这样做?

同一类型的智能指针对象可能需要不同的删除器,主要适用于以下场景:1)资源来源不同导致释放方式不同(如堆内存与静态内存);2)第三方库资源管理差异;3)生命周期需要特殊控制(如GUI线程安全销毁);4)资源池复用场景;5)条件性删除需求(如调试模式下记录释放)。这些场景下,shared_ptr通过将删除器存储在控制块中而非类型本身,实现了运行时灵活性和内存布局一致性,同时支持共享所有权机制。与unique_ptr不同,shared_ptr的设计允许同类型对象使用不同删除器,并保持接口统一,这是其核心优势所在。

2025-07-18 12:01:57 710

原创 【C++】std::exchange 原子性 返回值优化RVO

std::exchange 原子性 返回值优化RVO

2025-07-18 11:51:13 837

原创 【深入C++】std::move 空基类优化智能指针 vector<bool>

C++ 中,std::move并非移动资源,而是将左值转为右值引用,实现资源所有权高效转移,避免冗余拷贝,但需注意被移对象状态。空基类优化可将空基类作为基类时内存占用优化为 0,节省空间,需满足无虚函数等条件。unique_ptr借移动语义实现独占所有权,其删除器编译期绑定;shared_ptr删除器运行期绑定,各有适用场景。引用可与智能指针结合,临时访问资源不影响生命周期。vector<bool>是偏特化实现,以位存储省空间,但返回代理对象,不属真正标准容器,有兼容性和性能问题,可替换为vecto

2025-07-17 16:12:51 868

原创 【高并发服务器】多路复用的总结 eventfd timerfd

本文对比了三种I/O多路复用技术:select、poll和epoll。select通过fd_set监听文件描述符,但存在拷贝开销和数量限制;poll使用结构体数组改进,但仍需遍历所有fd。epoll采用红黑树和就绪队列实现高效事件管理,通过回调机制避免遍历,性能最优。实际应用中,epoll适合高并发场景,select/poll适用于简单需求。每种技术各有优缺点,选择需根据具体场景权衡。

2025-07-15 16:03:51 1233

原创 【经典面经】C++新特性 TCP完整收发数据 TLS1.2 TLS1.3

本文包含三部分内容:1) C++新特性总结,列举了C++11到20的主要新增功能;2) TCP协议保证数据完整性的7大机制,包括连接管理、序号确认、校验重传等;3) 判断点是否在扇形内的数学推导,重点解析了距离检测和角度检测的代数化方法,并对比了极坐标法的局限性。文章通过公式推导和逻辑分析,系统性阐述了各技术要点的实现原理。

2025-07-11 17:34:30 855

原创 【计算机网络】HTTP1.0 HTTP1.1 HTTP2.0 QUIC HTTP3 究极总结

HTTP协议演进与QUIC技术解析 HTTP协议从1.0到2.0经历了显著改进:1.0版本存在无状态、短连接和队头阻塞等问题;1.1版本引入长连接和管道传输,但响应阻塞仍未解决;2.0采用二进制分帧、多路复用和头部压缩,但基于TCP仍存在传输层阻塞。QUIC协议基于UDP实现突破性创新:通过独立递增的Packet Number和Stream机制解决队头阻塞,支持0-RTT快速连接,提供流级流量控制,并整合TLS 1.3加密。测试表明QUIC在移动网络和高延迟环境中性能提升显著,成为下一代互联网传输协议的核心

2025-07-10 18:22:03 1313

原创 【HTTP服务端】Cookie?Session?Token?

摘要:Cookie与Session、Token机制对比 Cookie通过键值对存储数据,包含域名、路径、有效期和安全属性(如HttpOnly、SameSite)。Session机制改进安全性,服务器生成唯一SessionID存储用户信息,客户端携带该ID进行验证,但服务器需存储大量Session数据。Token(如JWT)采用无状态验证,由Header、Payload和签名组成,通过算法验证合法性,避免服务器存储负担,适合分布式系统。JWT包含用户信息但不存储敏感数据,需配合HTTPS和安全措施使用。三种机

2025-07-10 17:48:19 832

原创 【OS与NET】常见面经的思考

本文主要探讨TCP三次握手的设计原理与必要性。三次握手能确保双方收发能力、防止历史连接初始化、同步序列号并避免资源浪费。相比之下,二次握手可能导致服务端资源浪费。文章还分析了半连接/全连接队列满时的处理机制,以及SYN攻击的防御策略。此外,比较了协程与线程的适用场景,协程适合I/O密集型任务而线程适合计算密集型。最后讨论了TCP可靠性的范围、引入服务端的必要性,以及TCP分段与IP分片的互补关系。这些机制共同构成了可靠网络通信的基础。

2025-07-10 15:10:31 630

原创 [C++]C++20协程的原理

每个协程都有一个与之关联的 Promise 对象,它负责管理协程的生命周期和结果。Promise 对象定义了协程的一些关键行为,例如协程开始时是否挂起、协程结束时如何处理返回值等。当协程函数被调用时,它并不会马上执行函数体里的代码,而是创建一个协程帧(Coroutine Frame)。协程帧是一个数据结构,用于保存协程的状态,其中包含局部变量、函数参数以及当前执行的位置等信息。通过这种方式,C++ 协程提供了一种高效、简洁的异步编程方式,使得异步代码可以以同步的方式编写,提高了代码的可读性和可维护性。

2025-04-29 17:20:02 824

原创 【面经】兼顾频繁插入/删除和查询访问 非阻塞网络I/O模型 connect的阻塞性 `unique_ptr`的使用场景和析构机制

T value;private:public:// 实现插入、删除、查找等方法对于现代高性能网络应用,在Linux平台上epoll几乎是必然选择,特别是当需要处理成千上万的并发连接时。而select因其跨平台特性,在简单应用或需要支持多种Unix系统的场景下仍有使用价值。模型阻塞点是否需要轮询典型实现非阻塞I/O无需要I/O多路复用在select/epoll调用不需要(内核通知)信号驱动I/O无不需要异步I/O无不需要在实际开发中,

2025-04-10 18:04:43 1217

原创 【面试】封装、继承、多态的具象示例 模板编程的理解与应用场景 链表适用的场景

C++中模板编程最常见的应用场景包括STL容器和算法、通用数据结构和算法实现、类型安全接口设计、策略模式实现、编译期计算、静态多态以及类型萃取等。模板编程是C++强大表达能力的核心之一,也是现代C++编程不可或缺的部分。

2025-04-09 14:40:09 1074

原创 【面试】C++与C override的报错阶段 RAII

如果标准库不提供现成的 RAII 封装,可以自行实现。

2025-04-08 14:37:07 1266

原创 【QT】QPixmap QImage QBitmap QPicture

都是用于处理图像数据的类,但它们有不同的特性和适用场景。根据需求选择最合适的类,可以兼顾性能和功能!

2025-04-07 17:37:16 1209

原创 【HTTP/HTTPS】从浏览器输入url到你看到网页发生了什么?

服务器生成HTTP响应报文:服务器收到请求后会根据请求内容准备浏览器需要的数据,如果是普通请求,直接根据url发送对应的资源,如果是cgi请求,则会处理后台程序后将结果返回,并生成对应的HTTP响应报文。发送HTTP请求报文:tcp握手成功后,通过tcp/ip通信协议将客户端生成的HTTP报文,发送至服务器。浏览器查找缓存:如果查找到缓存中有我们URL对应的网页信息,并且没有过期,如果有则会直接读取缓存内容,此时不会发送HTTP请求,如果没有则发送HTTP请求。https特有阶段:SSL/TLS握手。

2025-04-02 15:40:00 522

原创 【Linux】常见信号 + 进程和作业

信号是 Linux 系统中一种异步通知机制,用于通知进程某个事件的发生。每个信号都有一个唯一的编号(如SIGKILL是9)和默认行为(如终止进程、忽略或暂停进程)。信号编号默认行为常见用途SIGHUP1终止终端断开时通知进程SIGINT2终止Ctrl+C中断进程SIGQUIT3终止+core dumpCtrl+\强制终止并调试SIGKILL9终止强制杀死进程SIGTERM15终止请求进程正常退出SIGSTOP19暂停暂停进程(不可捕获)SIGCONT18继续恢复被暂停的进程。

2025-03-29 20:17:35 1194 1

原创 【CPP】协程

协程是一种特殊的函数,它可以在执行过程中暂停,并且能够在之后的某个时刻继续执行。与线程不同,协程并不会真正地“脱离”当前的线程,它只是让控制流从一个函数流转到另一个地方,然后再回来。这个过程是。

2025-03-12 19:37:23 884 1

原创 【C语言】字符串模拟实现函数

【代码】【C语言】字符串模拟实现函数。

2025-03-11 20:30:19 212

原创 【CPP】STL容器模拟实现篇之string

【代码】【CPP】STL容器模拟实现篇之string。

2025-03-07 21:25:56 533

空空如也

空空如也

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

TA关注的人

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