自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 WIFI后端功能问题解决

在前端页面使用WiFi网络扫描功能,会产生多个重复的UUID,用NetworkManager工具并未产生类似情况。

2025-12-16 20:36:33 704

原创 流量监控前端不显示问题

前端界面显示上下行速率有问题,有时候是0有时候有数字。通过接口定位到以下代码:.h文件看代码后问题显而易见:只有在以下条件时,才会看到非 0:网卡此刻刚好有流量线程刚好按近似 1 秒跑HTTP 线程刚好没读到写一半的 string在demo里能跑,但是在生产环境必出问题。

2025-12-16 15:38:36 154

原创 网卡获取模组ip失败问题解析

不是:有没有输出有没有“某一次成功”有没有。

2025-12-15 15:14:58 394

原创 adb安装和调试基本指令

adb devices 列出已连接的安卓设备。adb version 查看自身版本。ip route 查看路由规则。adb shell 进入设备。里面的指令和linux类似。

2025-12-02 15:28:38 74

原创 nginx匹配优先级问题

网关ip是192.168.2.1,在浏览器输入192.168.2.1没办法去到我想要的前端,去到了nginx默认页面,输入localhost才能去到我想要的界面。但是等我reload时发现报错,因为 include /etc/nginx/sites-enabled/*也有一个default server;我在思考,明明我的server是写在前面,为什么用的是include的conf文件。同事有新的配置需求,导致80端口直接用了include里的conf文件,可以重新进入到我想要的前端界面。

2025-11-27 10:10:30 166

原创 github使用问题

git remote add origin "git@github.com:runningSherry/netDetectRequest.git" (这里写Code复制的SSH链接)把"ssh-rsa A......."这段文字全部记录下来,这个就是ssh-key公钥。回到主页面,点击设置,找到SSH and GPG key,add SSH key。现在进入你想备份的代码的机子里,我这边是linux系统,执行。点击个人头像,设置,public profile就可以修改。回到页面,可以看到你的提交。

2025-11-25 14:15:45 358

原创 C++ 杂项讨论

在 C++ 中Handle 类指:一个类内部只包含一个指针,真正的数据存在堆里。// handle → 指向真正的对象data不是“字符串本体”。data只是一个“指针”(handle),指向真正存放字符串的“内存区域”(真正的对象)。String 对象本身:▼│ 'H''i''\0' │ ← 字符串真正储存在这里也叫:指针语义(pointer semantics)智能指针(也算一种 Handle)句柄类(handle class)

2025-11-23 18:06:40 35

原创 C++ 定制new和delete 理解

分配内存(malloc)在那块内存上构造对象(调用构造函数)而// malloc只是分配原始内存,这个内存啥也没有,不是一个widget对象placement new 做的事只有两步1. 不分配内存(跳过 operator new)直接使用传进去的mem2. 在那块内存上调用构造函数构造一个 Widget 对象含义:“不要帮我分内存,我已经有内存了,你只负责在这块内存上构造对象。

2025-11-23 17:41:24 37

原创 C++ 模板与泛型编程 理解

如果你写一个模板类,并且这个类需要支持隐式类型转换(例如用于运算符重载),那么相关的运算符函数应该写成“非成员函数(friend或外部函数)”,而不是成员函数。(看不懂啊看不懂)原因:成员函数不支持两边的隐式转换,而非成员函数可以。成员函数 operator*只能让右边的操作数发生隐式类型转换。但不能让左边发生转换,因为左边被绑定成了this,必须已经是类类型。public:// 成员版本的 operator*private:T n, d;函数名重载的是operator+加法。

2025-11-23 16:35:09 100

原创 C++ 继承与面向对象设计 理解

如果一个函数在基类里不是 virtual,就不要在派生类中重新定义它。原因:这样做不会产生多态效果反而会导致调用行为和你预期的不一致。public:它在编译期就绑定了函数地址。换句话说:不管对象的真实类型是什么,只要用Base*或Base&调用,永远执行。如果在派生类里“重定义”public:Derived d;b->say();//?d.say();//?你以为这是“重写(override)”,其实这是“隐藏(hiding)”!这两个函数完全是不同的两个函数。

2025-11-11 14:25:13 940

原创 C++ 实现 理解

换句话说,不要一开始就定义变量,而是等到真正需要它的时候再定义。错误示范:提前定义的缺点:1.性能浪费2.逻辑不清晰3.构造函数浪费正确是示范:好处:1.只在必要时创建对象2.对象生命周期更短,作用域更小3.可减少构造/析构的性能开销。4.代码逻辑更清晰吗,异常安全性更高tips:构造成本高的对象要延后,延后定义还能防止“未初始化使用”但有时候提早定义反而更高效,比如改成:二、尽量少做转型动作(Effective C++ 27)c++中的类型转换是危险的,应尽量避免,如果一定要用

2025-11-09 17:00:13 1016

原创 可变参数模板

TArgs...T打印出命令类型名称,方便调试Args...表示。这个函数可以接收的参数,参数类型也被自动推导为不同类型的组合:调用1 →调用2 →Args...args...“我定义了一个模板类型包Args...“我同时定义了一组实参args...,它们的类型由Args...决定”。

2025-11-07 16:21:22 235

原创 Socket vs WebSocket

握手成功后,HTTP连接升级为 WebSocket 通道(TCP 长连接),之后就可以实时收发数据。WebSocket 本质上是用 HTTP 协商,然后在 TCP Socket 上跑自定义的帧格式。之间的字节流,谁都可以定义内容(比如你定义 JSON 协议、自定义命令)。Socket 是“机制”,WebSocket 是“协议”2、WebSocket 是建立在 HTTP 上的一种。它定义了“浏览器如何与服务器保持长连接”的标准做法。1、Socket 是操作系统提供的。它是“怎么通信”的底层通道。

2025-11-07 11:14:01 377

原创 C++ 设计与声明 理解

所以你要像设计语言内建类型(int、double、std::string)那样去思考:“别人会怎么使用它?我应该限制、提供哪些操作?换句话说:一个 class 不只是代码,它是一个“概念的抽象 + 使用契约”。当你定义一个 class 时,要考虑以下问题:1. 对象的创建与销毁你要控制对象如何“出生”和“死亡”。

2025-11-03 13:48:48 963

原创 C++ 资源管理 理解

目录一、以对象管理资源(Effective C++ 13)二、在资源管理类中小心 copying 行为(Effective C++ 14)三、在资源管理类中提供对原始资源的访问(Effective C++ 15)四、成对使用 new 和 delete 时要采取相同形式(Effective C++ 16)五、以独立语句将 newed 对象置入智能指针(Effective C++ 17)在对象的构造函数中获得资源,在析构函数中释放资源。这样,当对象生命周期结束的时,资源会自动释放。换句话说:资源的生命周期=对象

2025-11-02 13:54:23 1033

原创 C++ 构造/析构/赋值运算 理解

栈展开:当异常被抛出后,程序未来找到合适的catch块,会依次退出当前函数调用栈中的函数,并在退出的过程中自动调用已构造对象的析构函数。一旦定义了自己的拷贝构造函数或operator=,编译器就不会再自动生成默认版本,而默认版本里才会包含”基类+成员“的完整拷贝逻辑。因为在 C++ 中,如果析构函数在栈展开(stack unwinding)过程中抛出异常,简单说,就是从抛出点开始,一层层弹出函数调用栈,清理已创建的局部对象。这个就是自我赋值,如果没有处理好,就可能在赋值过程中把自己给毁掉了。

2025-10-31 15:28:00 1028

原创 观察者模式

【代码】观察者模式。

2025-10-27 15:10:16 152

原创 protected,private,public三者的区别

限定符谁能访问常用位置用途public所有人类接口提供功能protected自己 + 子类基类方法继承扩展private仅自己数据成员封装隐藏public 人人能看,protected 儿孙能看,private 自家能看。protected 用来干嘛?用来让基类保留“对子类开放”的接口,而仍然对外部隐藏。比如虚函数模板方法模式(Template Method)。在模板方法模式中,父类定义流程,子类填细节。控制继承范围:让子类访问内部工具函数。防止外部直接创建或销毁资源。

2025-10-27 14:05:14 263

原创 三种智能指针不用和用的写法

类型所有权能否复制能否共享是否自动释放常见用途unique_ptr独占❌(只能移动)❌✅独占资源、局部对象shared_ptr共享✅✅✅(计数归零时)资源共享weak_ptr无(观察)✅✅❌防循环引用、检测有效性独占用unique_ptr共用用shared_ptr只看不用用weak_ptr。

2025-10-27 13:51:20 355

原创 构造函数,拷贝构造函数,析构函数,赋值运算符重载

区别于拷贝构造函数:拷贝构造是在创建时复制;赋值运算符是在已有对象上复制。(离开作用域或被 delete)时自动调用,用于。:在创建对象时自动调用,用来。(如内存、文件句柄等)。

2025-10-25 12:50:12 146

原创 socket TCP基本参数解析

AF_INET, SOCK_STREAM, 0, IP地址, 端口号这些共同决定了通信是:基于 IPv4 的 TCP 长连接远程传输。

2025-10-21 10:12:01 443

原创 模型的微调和蒸馏过程(简要)

维度微调 Fine-Tuning蒸馏 Distillation目标适配任务模仿教师输入真实数据教师输出(软标签)输出定制化模型小型模型优点性能强速度快、体积小缺点计算开销大需要教师模型微调让模型懂新任务,蒸馏让小模型学会大师的思考方式。

2025-10-18 18:12:30 791

原创 FTP 和 SFTP 的区别:一文读懂两种文件传输协议

特性FTPSFTP协议类型应用层基于 SSH端口21 / 20+随机端口22数据传输明文加密安全性低高防火墙配置较复杂简单使用场景内网或低安全需求公网或高安全需求核心结论:如果你在公网环境传输敏感文件,建议使用 SFTP;FTP 更适合内部快速传输或历史系统兼容需求。

2025-09-22 13:40:37 624

原创 技术产品负责人学习经验和总结

2.每周与供应商和团队内成员(同事+领导)同步颗粒度,问进展,定时间节点和里程碑。3.说话不说绝对,需要调理清晰,把话讲清楚,定期与相关人员总结(设备数,bug)。4.和领导汇报前需要考虑领导可能需要什么,会问什么。一定要找领导有时间的时候汇报。6.所有说出去的话需要确认,没有确定的话不要说出口。5.有风险除了及时汇报外,想想解决方案。1.样机到了必须自己手头使用测试。7.管理好供应商和领导的预期。

2025-09-21 19:17:01 140

原创 串口连接失败排坑步骤

设备已正确识别(可见)有足够权限访问设备(非 root 用户加入 dialout 组)波特率 / 数据位 / 校验位 / 停止位完全匹配AT 指令包含正确结束符(\r或\r\n读写前清空缓冲区使用 select 设置合理超时时间禁用不需要的硬件流控。

2025-09-19 17:05:42 1094

原创 librespeed c++ 上传下载带宽测试 排坑全流程

在搭建 LibreSpeed 测速服务并实现基于 curl/API 的上传下载测试时,遇到 Nginx 配置冲突、PHP 权限异常等问题。本文将梳理从环境搭建到功能验证的全流程,针对 “curl 上传报 404/405”“PHP-FPM 权限拒绝”等典型问题,提供可复现的解决方案。初始需求:c++后端开发用librespeed测试download,upload的带宽。

2025-09-17 14:09:52 581

原创 RIL模式和数传模式的区别

AT 指令本身是底层接口,无论 RIL 还是数传模式都能访问网络状态,区别在于 RIL 把 AT 指令封装成系统 API 并提供异步事件通知,而数传模式需要应用自己手动发送 AT 指令并解析结果。RIL 是 Android 系统里的蜂窝通信框架,负责把上层的电话、短信、数据请求转化为底层 AT 命令或 QMI 协议,和 Modem 通信。常用于 TCP、UDP、MQTT、HTTP、CoAP 等 IoT 协议。不支持 SIM 管理、VoLTE、短信、网络状态查询。SIM 卡管理(插拔检测、PIN 校验)

2025-09-09 11:11:35 785

原创 管道的优缺点

管道的缓冲区大小是有限的(Linux 默认 64KB)。但如果两个完全无关的进程想通信,匿名管道不行,必须用。,让一个进程的输出可以直接作为另一个进程的输入。每个命令只处理自己的数据段,利用管道高效协作。不需要像文件那样写入磁盘再读出来,速度很快。如果写端不停写,而读端处理不及时,就会阻塞。管道在内核中实现,不会在磁盘上生成临时文件。如果需要双向通信,要么建两根管道,要么用。管道是基于内核缓冲区的,不能跨主机通信。管道只是一段字节流,没有消息边界。如果只在父子进程之间传数据,如果需要跨主机通信,必须用。

2025-09-07 16:22:32 504

原创 泛型编程(简单介绍,通俗易懂)

泛型编程大多c++程序员了解最少地部分,《Effective C++》条款48有讲到。所以,虽然你要告诉编译器类型,但你不需要为每种类型手动写类,这就是泛型的强大之处。只写了一份模板代码,C++ 编译器会在编译期自动生成对应类型的代码,这叫做。理解成一个“万能胶”,用的时候会自动变成你需要的类型。,那不是我手动指定了类型吗?假设你要写一个函数,找到两个数字中较大的那个。,但编译器帮我们生成了多个版本的函数。,在调用函数的时候由编译器自动替换。不是具体的类型,比如。表示:这里定义了一个。,不需要重写很多份。

2025-09-07 15:48:50 279

原创 单例模式(巨通俗易懂)普通单例,懒汉单例的实现和区别,依赖注入......

保证在整个程序中,某个类只有一个实例,并且可以全局可访问。整个类只想要一个对象全局都可以使用这个对象不允许创建第二个对象程序的配置管理器(只需要一个)日志系统(写日志的对象只有一个)数据库连接池(共享同一个)想用全局变量(虽然用单例模式也不太好)static只有第一次调用getInstance()才会创造对象如果程序没有用到这个对象,就不会浪费资源适合“可能用,也可能不用”的场景程序一启动就会创造对象初始化顺序再程序启动阶段完成适合“肯定会用”的场景,比如日志系统,配置管理器。

2025-09-06 20:46:02 1217 2

原创 *和->的区别

ptr->menber 等于 (*ptr).menber。* 解引用(取指针指向的值),通过指针访问指针指向的对象。-> 等价于(*ptr).member。→ 等价写法,更简洁。

2025-09-06 19:36:02 188

原创 实例和对象的区别

它表示“某个类的一个成员”,是“逻辑上的个体”。实例一定是对象,但对象不一定是实例。对象是概念,实例是现实。

2025-09-06 19:24:00 275

原创 栈溢出可能原因

如果错误地写越界了某个局部数组,可能会覆盖返回地址或栈指针,导致程序在下一次返回时崩溃,看起来像栈溢出。在 C++ 中,如果在函数栈上创建了很大的对象,而异常抛出需要回溯多个栈帧,也可能导致栈溢出。如果在创建新线程时设置的栈空间太小,而线程函数中又分配了较大的局部变量,也会导致栈溢出。当程序在栈上申请的内存超过系统为线程分配的栈空间上限时,就会发生。如果在函数中定义了超大数组或对象,超过栈容量,就会溢出。如果没有终止条件,递归调用会无限叠加,最终超出栈大小。在 Linux 上,单个线程的默认栈大小通常是。

2025-09-02 10:07:40 1132

原创 堆和栈的区别

编译器在函数调用时,直接在栈指针(SP)上减去一定字节,预留内存。:程序向操作系统请求一定的内存块,OS 在堆区查找合适的空闲块返回。:灵活,可以动态分配大块内存,但容易出现内存泄漏、悬空指针。:不需要程序员操心,非常快,但灵活性差,不能动态控制大小。:函数返回时,恢复 SP 寄存器,内存整体一次性回收。→ 高效、安全、短生命周期,适合小而快的临时数据。→ 灵活、可扩展、跨作用域,适合大对象和动态管理。多线程场景 → 堆上的数据需要加锁,避免数据竞争。:程序员,最终由操作系统维护。:操作系统+编译器。

2025-09-02 09:50:09 346

原创 c++程序员日常超实用工具(长期记录更新)

2.在你要看的线上代码github.com改成github1s.com,就可以获得一个线上查看的代码的编辑器。3.日常记笔记工具:obsidian。日常办公完全够用,可根据需求安装插件。1.在线编译器,算是用过比较好用的编译器了。

2025-08-31 20:51:42 295

原创 一会儿能ping通一会ping不通解决方案

如果摄像头网口是百兆(很多 RTSP 摄像头就是百兆口),两边都固定 100Mbps → 完全兼容。比如你的网关是千兆,摄像头是百兆,交换机中间再混一个三层设备,容易谈不拢。一些老设备只支持 100Mbps 半双工,自动协商时和千兆网卡不兼容。千兆模式需要 8 芯线,如果网线只接了 4 芯,协商可能失败。手动固定两端速率和模式,避免反复切换,就能保持链路稳定。如果协商失败,UDP 丢包率会非常高,导致绿屏。,强制让两边保持在一个稳定的速率和模式下工作。或速率反复变化,就是协商失败。

2025-08-20 16:59:02 1434

原创 面向对象5大原则(巨通俗)

比如你家插线板有 USB 口,现在要加 Type-C,不要把旧插口锯掉换掉,而是加一个新的口。类里既有“登录”,又有“保存日志”。比如:你去奶茶店点单,菜单只应该有“奶茶、加料”,不要强制你还必须点“炸鸡”。比如买手机充电器,只要求它符合“USB 标准”,不用管它是华为的还是苹果的。程序里就是:写代码要依赖“抽象接口”,而不是具体实现,这样可以随时替换实现。如果你写了个“石头”继承“动物”,结果石头不会跑,那就不对。实现类里充满“空方法”或“假实现”,代码冗余。继承关系混乱,代码“看起来对,跑起来错”。

2025-08-18 14:31:34 865

原创 g++终端命令行整理

DDEBUG # 定义一个宏 DEBUG-DFLAG=1 # 定义一个宏 FLAG 为 1#endif。

2025-07-25 16:31:14 730

原创 c++ thread基本用法

捕获方式意义[]不捕获任何变量[x]按值捕获变量x[&x]按引用捕获变量x[=]按值捕获所有用到的变量[&]按引用捕获所有用到的变量问题原因没有join()或detach()编译不过没加传引用失败忘了用std::ref()数据错乱多线程访问共享资源没加锁。

2025-07-25 10:44:58 880

原创 CMAKE构建配置类型及命令行接口整理

在 GUI 环境(图形用户界面(Graphical User Interface)的操作环境)下自动用 IDE(如 Visual Studio)打开该构建目录(Windows 上常见)。cmake --build <目录> [<选项>] [-- <构建工具选项>]cmake [-D <变量>=<值>]...-P <cmake 脚本文件>cmake [<选项>] -B <构建路径> [-S <源路径>]cmake --install <目录> [<选项>]cmake -E <命令> [<选项>]

2025-07-24 11:16:49 1368

空空如也

空空如也

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

TA关注的人

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