- 博客(480)
- 收藏
- 关注
原创 【网络编程】百度BRPC:百万级QPS的RPC框架解析
BRPC是百度开源的高性能C++ RPC框架,具有百万级QPS处理能力,广泛应用于百度核心业务。其核心优势包括:自研bthread协程模型实现高效并发,支持多协议同端口处理,提供丰富的调用模式和服务治理功能。架构上采用三层设计,包含Server、Channel等核心组件,通过连接复用、零拷贝等技术优化性能。相比gRPC等框架,BRPC在延迟和吞吐量上表现更优,适合微服务、AI推理等高并发场景。该框架支持多语言和跨平台,并提供完善的监控诊断工具,是构建高性能分布式系统的理想选择。
2026-01-11 18:50:11
975
1
原创 【C++】JSON核心数据结构解析及JSONCPP使用
JSON是一种轻量级数据交换格式,基于键值对组织数据,支持字符串、数字、布尔值、null等基础类型,以及对象和数组两种复合结构。JSON对象是无序键值对集合,数组是有序值列表。实际应用中常组合使用对象和数组表示复杂数据,如列表型数据和多层级结构。JSON语法严格,要求键必须用双引号、末尾不能有多余逗号。JsonCpp是C++的JSON处理库,核心类Json::Value可表示所有JSON数据类型,通过类型枚举区分不同结构。JSON广泛应用于前后端交互和数据存储,是跨平台数据交换的首选格式。
2026-01-04 17:39:26
812
原创 【MySQL】ORM与ODB:数据库编程技术大比拼
ORM和ODB是两种解决对象与关系型数据库映射的技术方案。ORM(如Hibernate、SQLAlchemy)采用运行时动态映射,通过框架自动生成SQL,开发效率高但存在性能开销;而ODB(如C++ ODB)采用编译时静态代码生成,性能接近原生SQL但灵活性较差。ORM适合企业级应用开发,强调开发效率;ODB则适用于对性能要求苛刻的系统级开发。两者各有优劣,现代ORM也在吸收静态化思想进行性能优化。选择时需根据具体场景权衡开发效率与运行性能的需求。
2026-01-04 15:40:01
929
原创 【Elasticsearch】Elasticsearch:高性能分布式搜索与分析引擎
Elasticsearch(ES)是基于Lucene的分布式开源搜索引擎,具备实时性、高可用和可扩展性,适用于海量数据的搜索与分析。其核心特性包括分布式架构、全文检索、近实时响应、多数据类型支持等,广泛应用于日志分析、全文检索、业务监控等场景。ES采用RESTful API设计,支持多语言客户端,并融入ELK生态(Kibana、Logstash等)提供完整解决方案。尽管资源消耗较大且学习曲线较陡,但凭借其强大的分布式能力和实时分析性能,ES已成为企业级数据处理的重要工具,适用于从搜索到分析的多类业务需求。
2026-01-04 12:27:40
780
原创 【ETCD】分布式键值存储神器:etcd详解
摘要 etcd是一个开源的分布式键值存储系统,采用Raft算法保证强一致性和高可用性,是Kubernetes等分布式系统的核心组件。它具有简单清晰的API、租约机制、多版本控制和安全特性,主要应用于配置管理、服务发现和分布式协调。相比ZooKeeper和Consul,etcd在K8s生态中占据优势,API设计更简洁。与Redis相比,etcd侧重强一致性和可靠性,而Redis更注重高性能和丰富数据结构。etcd通过将复杂的分布式问题封装为简单可靠的存储服务,成为云原生基础设施的关键组件。
2026-01-04 12:17:04
872
原创 【FastDFS】FastDFS:高性能分布式文件系统解析
FastDFS是一个轻量级、高性能的开源分布式文件系统,专为海量小文件存储设计。其核心架构包含Tracker Server(调度元数据)、Storage Server(实际存储)和Client三个组件,采用分组存储机制实现负载均衡和冗余备份。系统具有无中心存储、文件ID即地址、高效小文件处理等优势,适用于图片、视频等互联网应用场景。尽管存在不支持文件修改、同步延迟等局限性,但凭借简单高效的架构设计,FastDFS成为处理高并发小文件存储的理想解决方案。
2026-01-04 11:57:41
1529
原创 【Elasticsearch】定义索引结构的核心 -- Mapping
Elasticsearch(ES)中的Mapping是定义索引结构的核心机制,相当于数据库表结构。它分为索引级和字段级配置,后者包含数据类型(type)、索引控制(index)、存储策略(store)等基础属性。文本字段(text)支持分词器(analyzer)、多字段映射(fields)等专属配置,数值/日期字段可设置格式(format)和类型转换(coerce)。高级功能包括空值替代(null_value)、忽略非法值(ignore_malformed)等。合理配置Mapping能显著优化ES的存储效率
2026-01-04 11:49:06
1050
原创 【计算机网络】邮件协议:POP3、IMAP、SMTP全解析及libcurl实现邮件通知
电子邮件传输和访问主要依赖SMTP、POP3和IMAP三大协议。SMTP负责邮件发送,使用25/465/587端口,采用"推"模式;POP3(110/995端口)用于邮件下载,采用"拉"模式,适合单设备离线访问;IMAP(143/993端口)支持多设备同步和远程管理邮件。三者协同工作:SMTP发送邮件到服务器,POP3/IMAP从服务器获取邮件。现代应用推荐使用IMAP协议,因其支持多端同步和服务器存储。开发邮件服务时,libcurl库提供全局初始化接口(CURL_G
2026-01-03 21:43:08
650
原创 【Redis】一文带你了解Redis常用数据结构使用和底层
Redis提供多种高效数据结构,包括String(字符串)、Hash(哈希)、List(列表)、Set(集合)和Sorted Set(有序集合),以及扩展结构如Bitmap、HyperLogLog和Geo。String适用于缓存和计数器;Hash适合存储结构化数据;List支持队列操作;Set用于去重和集合运算;Sorted Set通过分数实现有序存储。底层实现采用内存优化技术,如ziplist、quicklist和跳表,确保高性能操作。这些结构广泛用于计数器、消息队列、排行榜和地理位置等场景,满足不同业务
2026-01-03 16:09:59
760
原创 【音视频】HLS 协议详细解析
HLS(HTTP Live Streaming)是苹果提出的基于HTTP的自适应流媒体传输协议,核心包括TS媒体片段和M3U8索引文件。其特点包括:HTTP传输(80/443端口)、自适应码率切换、2-10秒短切片、无状态服务器。工作流程为客户端请求M3U8文件,解析码率后下载TS片段播放。支持直播/点播模式,提供AES-128加密和多语言/字幕扩展。优势是跨平台兼容和CDN友好,缺点是直播延迟较高(10-30秒)。常用工具包括ffmpeg切片和VLC播放器。
2026-01-02 11:09:49
759
原创 【音视频】MP4 文件结构详细解析
MP4文件基于ISOBMFF格式,由嵌套的Box结构组成。核心Box包括必选的ftyp(文件标识)、moov(元数据容器)和可选的mdat(媒体数据)。moov包含mvhd(全局信息)和trak(轨道数据),通过stbl子Box实现帧索引定位。关键特性包括大端字节序、Full Box扩展格式、时间戳映射机制和64位大文件支持。优化技巧如快速启动(moov前置)可提升网络播放体验。文件解析需注意Box嵌套关系和索引完整性,常用工具包括mp4box和ffmpeg。
2026-01-02 11:00:09
522
原创 【C++】CMake与Makefile:核心区别与实战指南
CMake与Makefile的核心区别在于:CMake是跨平台构建工具,通过高层语法自动生成适配不同环境的构建文件(如Makefile或VS工程),适合中大型项目;而Makefile是直接定义编译规则的脚本,依赖Make工具执行,仅适用于类Unix环境的小型项目。 CMake常用命令包括: 基础配置:cmake_minimum_required指定最低版本,project定义项目 变量操作:set定义变量,list管理列表,预定义变量如CMAKE_CXX_STANDARD 构建命令:include_dire
2025-12-29 18:21:00
686
原创 【计算机网络】websockeet是怎么支持全双工的
摘要: WebSocket通过HTTP升级实现全双工通信的核心逻辑是: 协议切换:利用HTTP 1.1的Upgrade机制完成握手,验证后切换为WebSocket协议,复用底层TCP连接。 帧化设计:抛弃HTTP的请求-响应模型,采用轻量级帧(2~10字节头)双向传输,支持文本、二进制及控制帧。 适配TCP全双工:解除HTTP的单向限制,允许服务端主动推送和双端同时传输,直接利用TCP的双向字节流能力。 持久连接:避免重复握手,保障高效连续通信。
2025-12-29 11:25:15
776
原创 【C++】brpc与grpc对比
摘要: brpc是百度开源的高性能RPC框架,专为高并发、低延迟场景设计,支持多协议(Protobuf、HTTP等)和C++原生API,内置负载均衡、容错等特性,适用于大规模分布式系统。与gRPC相比,brpc在服务端性能(吞吐量、延迟)上更优,但跨语言支持较弱;gRPC强绑定Protobuf和HTTP/2,跨语言生态完善,适合通用微服务。选型建议:C++高并发服务端优先brpc,多语言微服务选择gRPC。
2025-12-28 16:18:31
524
原创 【C++】glog和spdlog技术选型对比
摘要: glog(Google Logging Library)和spdlog是C++主流日志库,各有侧重。glog注重稳定性和标准化,适合Google生态和老项目;spdlog强调高性能和易用性,支持异步日志和丰富输出方式。性能上,spdlog的异步模式优势明显;易用性方面,spdlog集成更简单。选型建议:高性能和轻量级需求选spdlog,稳定性优先或C++98项目选glog。两者在功能完备性和工程适配性上各有优劣,需根据具体场景选择。
2025-12-27 15:38:46
709
原创 【C++】Google Test(gtest)全面使用指南
Google Test(gtest)是Google开发的C++单元测试框架,支持跨平台使用,具有丰富的断言机制、灵活的测试组织和详细的报告输出。本文介绍了gtest的基本概念、安装配置方法(包括Linux和Windows环境)、核心测试套件与用例的组织方式,以及各类断言的使用。此外还讲解了测试夹具和异常断言等进阶功能,帮助开发者快速掌握gtest并应用于实际项目测试中。
2025-12-27 12:59:12
1567
原创 【C++】noncopyable类的设计思想和应用场景
C++中通过继承noncopyable基类可禁用子类的拷贝功能。该基类将拷贝构造和拷贝赋值运算符声明为delete,同时保护构造函数和析构函数,确保只能被继承使用。子类自动失去拷贝能力但仍支持移动语义,适用于单例、资源管理等需要禁止拷贝的场景。这种设计方式简洁明确,是C++中实现不可拷贝类的经典方法,Boost和标准库中广泛采用。开发者需注意继承方式选择、C++版本兼容性等问题,避免违背设计初衷。
2025-12-10 09:00:13
292
原创 【CPP】局部变量、静态局部变量、全局变量、静态全局变量
C++变量分类主要依据存储期和作用域两大维度。局部变量(自动变量)具有自动存储期和局部作用域,离开作用域即销毁;静态局部变量在局部作用域内保持静态存储期,值会被保留;全局变量具有全局作用域和静态存储期,程序启动时创建;静态全局变量则限定在当前文件可见。关键区别在于:静态全局变量限制文件可见性,而静态局部变量在函数内持久化。建议优先使用局部变量,谨慎使用全局变量,静态局部变量适用于需要记忆状态的场景,静态全局变量可用匿名命名空间替代。
2025-12-09 09:43:50
1004
原创 【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
975
原创 【C++】cpp虚函数和纯虚函数的声明和定义
摘要:C++中的虚函数和纯虚函数是实现多态的核心机制。虚函数通过virtual关键字声明,提供默认实现,派生类可选择性重写;纯虚函数通过=0声明,强制派生类实现,使基类成为抽象类。虚函数支持运行时多态,纯虚函数用于定义接口。两者关键区别在于:虚函数必须有定义且基类可实例化,纯虚函数无定义且基类不可实例化。使用时需注意析构函数应为虚函数,重写建议使用override关键字,以及纯虚函数可提供默认实现等特性。
2025-12-06 14:05:19
656
原创 【Linux】Ubuntu配置开发环境合集
本文详细介绍了在Ubuntu系统上安装和配置Redis与MySQL的方法。对于Redis,提供了两种安装方式:通过APT包管理器安装(推荐)和编译源码安装(获取最新版本),并包含验证安装、基础配置、卸载等步骤。MySQL部分则介绍了通过Ubuntu默认仓库快速安装的流程。文中还提供了Redis的详细配置说明,包括网络、安全、持久化、内存管理等关键设置,并给出生产环境配置建议。全文采用代码块与注释结合的形式,清晰展示各操作命令和配置参数,便于用户快速实践。
2025-12-04 08:50:37
592
原创 【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
67
原创 【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
172
原创 【Linux】Ubuntu 中查看项目代码行数
本文介绍了在Ubuntu系统中统计项目代码行数的两种方法。推荐使用cloc工具,它能自动识别不同语言,区分代码行、注释行和空白行,支持过滤指定文件类型和目录,安装简单只需执行sudo apt install cloc。文章详细说明了cloc的核心用法,包括统计整个项目、指定语言、排除目录等功能,并提供了示例输出。作为备选方案,也介绍了使用find和wc命令组合的统计方法,但无法区分注释和空白行。最后总结了cloc的关键参数,建议开发者优先使用功能更强大的cloc工具。
2025-11-21 11:45:02
65
原创 【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
158
原创 【Linux】Linux查看coredump的完整指南
本文介绍了在Linux系统中查看和分析coredump文件的关键步骤。主要内容包括:1) 配置系统允许生成coredump文件,通过ulimit命令设置大小限制或修改配置文件;2) 触发程序崩溃并查找coredump文件;3) 使用gdb工具分析coredump文件,通过bt命令查看调用栈定位崩溃点。文章还提供了常见问题的解决方案,如未生成coredump、缺少调试信息等问题。通过系统配置和gdb分析,可以快速定位程序崩溃的根本原因。
2025-11-21 09:36:50
218
原创 【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
347
原创 【C++】内部类和组合类
inner可访问outter的static成员,不可访问private成员。outter不可直接访问inner的private成员,可通过友元访问。组合类不可直接访问部件类的private成员,可通过友元访问。
2025-11-08 18:47:21
711
原创 【环境配置】vscode远程连接云服务器死机问题
摘要: 本文介绍了在Linux系统中创建和使用交换文件的详细步骤:1)使用fallocate或dd命令创建指定大小的交换文件;2)通过chmod设置600权限确保安全;3)用mkswap格式化文件为交换空间;4)执行swapon启用交换空间;5)编辑/etc/fstab实现开机自动挂载;6)最后通过free -h验证虚存状态。整个过程覆盖了从创建到持久化配置的关键操作,适用于临时或长期扩展系统内存的场景。
2025-11-08 14:54:34
669
原创 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
1197
原创 【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
1114
原创 【Linux网络】shutdown()与close()的区别
shutdown()函数用于精细控制套接字的通信能力,可部分或完全关闭连接。与close()不同,它允许半关闭状态(如仅关闭写端),适用于TCP协议中需要明确通信状态变更的场景。函数接收套接字描述符和关闭方式参数(SHUT_RD/SHUT_WR/SHUT_RDWR),成功返回0,失败返回-1并设置errno。典型应用包括HTTP客户端发送请求后关闭写端以等待服务器响应,实现双向通信的灵活管理。使用时需注意UDP的特殊性及仍需调用close()释放资源。
2025-11-07 10:46:31
1037
原创 【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
1403
原创 【C++11】枚举 和 枚举类
C++中的枚举(enum)和枚举类(enum class)是定义命名常量集合的两种方式。传统枚举存在作用域污染、类型不安全等问题,而C++11引入的枚举类通过作用域隔离和类型安全机制解决了这些缺陷。枚举类要求通过枚举名::常量名访问,不支持隐式转换,允许指定底层类型,并能避免命名冲突。相比之下,传统枚举更简单但不够安全。现代C++开发应优先使用枚举类,尤其是大型项目或需要类型安全的场景;传统枚举仅建议用于简单局部场景或旧代码兼容。枚举类已成为C++11后的推荐实践。
2025-11-05 19:45:05
421
原创 【C语言】localtime和localtime_r;strftime和strftime_l
localtime和localtime_r是C标准库中用于将时间戳转换为本地时间的函数,主要区别在于线程安全性和存储方式。
2025-11-05 16:58:16
869
原创 【成长经历】秋招经历/技术之路分享
摘要 本文分享了一名双非本科软件工程专业学生的转码与求职经历。作者通过转专业进入计算机领域,自学C++并坚持做技术笔记和代码提交积累。他建议初学者要夯实基础、多做实践,同时强调稳定的学习心态和持续积累的重要性。在职业规划方面,作者比较了考研、考公和就业三条路径的利弊,最终选择就业并成功通过实习转正获得互联网大厂后端开发offer。文章详细列出了C++后端开发需要掌握的技术栈,并分享了实习、面试和秋招的实用经验,包括投递记录表格模板和面试技巧。作者认为IT行业仍有发展空间,鼓励读者坚定信念、稳扎稳打地学习技术
2025-11-05 10:32:43
1328
原创 【成长经历】大三下实习经历
本文系统梳理了技术岗位求职全流程要点。技术准备应聚焦算法(拆解问题能力)、核心技能(C++/网络协议/数据库)和项目经验,强调笔记整理与定期复习的学习方法。简历制作需个性化设计,突出技术亮点。实习选择建议优先大厂,通过参与需求开发熟悉工程流程。面试环节需注重八股文理解转化、项目深度复盘及算法题的系统训练。作者结合亲身实习经历指出:算法思维在实际工作中的迁移价值远超预期,而持续的技术沉淀与结构化学习能力才是应对职场挑战的核心竞争力。
2025-07-21 20:57:35
1457
7
原创 【CPP】unique_ptr将删除器作为类型一部分实现高效性 共享指针为什么不这样做?
同一类型的智能指针对象可能需要不同的删除器,主要适用于以下场景:1)资源来源不同导致释放方式不同(如堆内存与静态内存);2)第三方库资源管理差异;3)生命周期需要特殊控制(如GUI线程安全销毁);4)资源池复用场景;5)条件性删除需求(如调试模式下记录释放)。这些场景下,shared_ptr通过将删除器存储在控制块中而非类型本身,实现了运行时灵活性和内存布局一致性,同时支持共享所有权机制。与unique_ptr不同,shared_ptr的设计允许同类型对象使用不同删除器,并保持接口统一,这是其核心优势所在。
2025-07-18 12:01:57
720
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅