- 博客(67)
- 收藏
- 关注
原创 Git 知识点总结
这篇Git面试指南总结了核心概念与常用操作。重点包括:1)Git的三个工作区域(工作目录、暂存区、本地仓库)及其关系;2)基本命令(add/commit/status/log等)和撤销操作(reset/revert的区别);3)分支管理(merge与rebase的区别及适用场景);4)高级技巧(stash、tag)和工作流。文中强调了实操重要性,并提供了常见面试问题解答,帮助开发者系统掌握Git的核心原理和实用技能。
2025-09-18 10:57:30
993
原创 epoll网路编程--多路复用
本文介绍了一个基于epoll边缘触发(ET)模式的TCP回声服务器实现。核心思路包括:1)创建非阻塞监听socket并注册到epoll实例;2)使用epoll_wait监控事件;3)ET模式下需循环处理直到EAGAIN;4)分别处理新连接、可读、可写等事件。代码示例展示了基本框架,但存在缓冲区共享问题,实际应用中应为每个连接维护独立缓冲区。注意事项:ET模式必须配合非阻塞I/O,可写事件监听需谨慎以避免busy loop,且需完善错误处理和连接管理。该实现展示了高性能网络编程的基础模式。
2025-09-17 11:00:58
899
原创 Linux网络编程
Linux网络编程核心围绕TCP/UDP协议栈与Socket编程展开,重点包括:1)基础概念:TCP/UDP特性对比、三次握手/四次挥手、Socket本质;2)核心流程:TCP服务端(socket-bind-listen-accept)和客户端(socket-connect)的编程范式;3)I/O多路复用:select/poll/epoll机制及边缘触发(ET)/水平触发(LT)模式;4)高性能进阶:Reactor/Proactor模型、多线程架构、零拷贝技术等。面试需深入理解原理,建议通过实践编程和画图辅
2025-09-17 10:54:54
717
原创 C++ 多线程编程
本文介绍了C++多线程编程的核心概念和常用技术。主要内容包括:1. 基本头文件及线程创建:使用std::thread创建线程,join/detach方法的使用;2. 线程同步机制:互斥锁(std::mutex)、锁保护类(std::lock_guard, std::unique_lock)的使用;3. 原子操作(std::atomic)实现无锁编程;4. 条件变量(std::condition_variable)实现线程间协调;5. 高级异步操作(std::async, std::future, std::
2025-09-03 23:14:30
1193
原创 QNX pidin 命令中STATE 含义
摘要:QNX的pidin命令STATE字段揭示了进程/线程的关键状态信息,对系统调试和性能分析至关重要。常见状态包括READY(就绪)、RUNNING(运行)、RECEIVE/SEND(消息阻塞)、MUTEX(锁竞争)等。通过结合grep、watch等命令分析状态分布和变化,可快速识别CPU瓶颈、消息延迟、死锁等问题。掌握这些状态含义和排查技巧,能有效提升QNX系统的故障诊断效率。(149字)
2025-09-03 17:21:21
811
1
原创 C++ 条件变量,互斥锁
摘要:C++多线程编程的核心同步机制包括互斥锁和条件变量。互斥锁(std::mutex)保护共享数据,防止数据竞争,推荐使用RAII风格的std::lock_guard和更灵活的std::unique_lock管理锁。条件变量(std::condition_variable)用于线程间通信,实现生产者-消费者模式,必须与互斥锁配合使用,通过wait()、notify_one()方法协调线程。使用时需注意虚假唤醒、RAII原则和通知前解锁等最佳实践,这对编写线程安全的高效程序至关重要。
2025-09-02 21:08:07
945
1
原创 详解C++ 函数重载与重写
C++中函数重载与重写的核心区别:重载是在同一作用域内定义同名但参数列表不同的函数,实现编译时多态;重写是在继承体系中派生类重新定义基类虚函数,实现运行时多态。重载通过参数列表区分,重写要求函数签名相同。重载是静态绑定,重写是动态绑定。此外还需注意派生类可能隐藏基类同名函数的情况。理解这些概念对掌握C++面向对象编程和多态性至关重要。
2025-09-02 16:22:41
891
原创 详解 C++ 中的虚析构函数
摘要: 虚析构函数是确保通过基类指针删除派生类对象时能正确调用派生类析构函数的关键。未声明虚析构函数会导致派生类析构函数未被调用,引发资源泄漏。示例显示,基类析构函数声明为virtual后,删除操作会依次调用派生类和基类析构函数。关键规则:多态基类必须使用虚析构函数;非多态类或final类则无需。若类含虚函数,析构函数也应声明为虚,以明确其多态用途。STL类通常无虚析构函数,建议通过组合而非继承扩展功能。虚析构函数是防止资源泄漏的重要保障。
2025-09-02 16:12:19
441
原创 C++ 中的友元(Friend) 机制。
C++友元机制是一种打破封装的特权机制,允许指定函数或类访问当前类的私有成员。友元有三种形式:友元函数(非成员函数)、友元类(整个类)和友元成员函数(特定成员函数)。常用于操作符重载和紧密协作类间的直接访问。友元具有单向性、不传递、不继承等特点。虽然能提高性能并提供灵活性,但会破坏封装性,增加耦合度。建议谨慎使用,优先考虑公有接口,最小化权限范围,并充分注释使用原因。友元机制在需要高效访问私有数据时非常有用,但应避免过度使用以维护良好的代码结构。
2025-09-01 17:28:43
900
原创 C++ 继承与派生类
C++继承机制实现代码复用和类层次关系。基类(父类)定义公共属性和方法,派生类(子类)通过public/protected/private继承获得基类特性,并可扩展新功能。public继承最常用,保持"is-a"关系,基类private成员对派生类不可见。构造顺序为基类→派生类成员→派生类,析构顺序相反。派生类构造函数通过初始化列表向基类传参。继承体现了面向对象的核心思想,合理使用能有效提高代码复用性。
2025-09-01 16:30:16
516
原创 C++ 智能指针
摘要:C++智能指针(unique_ptr、shared_ptr、weak_ptr)通过自动内存管理解决传统指针的内存泄漏、野指针等问题。unique_ptr实现独占所有权,开销最小;shared_ptr通过引用计数支持共享所有权;weak_ptr解决shared_ptr的循环引用问题。最佳实践包括优先使用make_unique/make_shared、避免手动管理资源、谨慎使用get()获取原始指针。智能指针基于RAII机制,在对象析构时自动释放资源,提高代码安全性和可维护性。
2025-08-29 11:11:45
860
原创 c++ const 关键字
C++中的const关键字用于定义常量,确保数据不可变性和代码安全性。主要用法包括:定义常量变量替代宏常量、修饰指针(指向常量/常量指针)、函数参数保护、类const成员函数等。const提供类型安全、明确设计意图,constexpr则用于编译期常量。最佳实践建议默认使用const,避免修改不必要的数据,但需谨慎使用const_cast强制转换。合理使用const能提高代码可读性、安全性和性能。
2025-08-29 10:39:47
748
原创 C++ 移动语义
C++11引入的移动语义通过右值引用(T&&)解决了不必要的对象拷贝问题,允许资源所有权转移而非深拷贝。核心实现包括移动构造函数和移动赋值运算符,使用std::move()将左值转为右值。被移动后的对象处于有效但不确定状态,应避免读取但可安全析构或重新赋值。移动语义在返回值优化、容器操作和交换操作中自动触发,显著提升性能。最佳实践包括标记移动操作为noexcept、遵循Rule of Five,以及避免盲目使用std::move。STL容器和智能指针(如unique_ptr)都全面支持移动语
2025-08-29 10:30:59
1283
原创 new/delete 和 malloc/free 区别
C++的new/delete与C的malloc/free存在本质区别:new/delete是运算符,会调用构造/析构函数,返回类型安全指针,内存不足时抛出异常,且支持重载和初始化;而malloc/free是库函数,仅分配原始内存,需手动计算大小和类型转换,返回NULL表示失败。关键差异在于对象生命周期管理,混用会导致资源泄漏。现代C++建议优先使用智能指针替代显式内存管理。
2025-08-29 10:22:50
862
原创 c++ 右值引用
摘要: 右值引用(T&&)是C++11引入的核心特性,用于绑定临时对象(右值),主要解决性能问题和实现完美转发。关键点包括:1) 区分左值(持久、可寻址)和右值(临时);2) 移动语义通过移动构造函数/赋值运算符“窃取”资源,避免深拷贝;3) std::move将左值转为右值引用,std::forward保持参数值类别实现完美转发;4) 被移动的对象须置为空状态以确保安全析构。右值引用与编译器优化(如RVO)协同提升性能,是现代C++高效编程的基础。
2025-08-29 10:15:21
714
原创 什么是 Lambda 表达式?
C++ Lambda表达式是一种创建匿名函数的便捷方式,其核心特性包括捕获列表、参数列表和返回类型。捕获列表定义了如何访问外部变量,支持值捕获、引用捕获及混合方式。Lambda本质上是编译器生成的匿名函数对象,可配合STL算法、作为回调函数或简化代码。C++14引入通用Lambda(auto参数),C++20支持显式模板语法。Lambda通过捕获机制实现状态管理,mutable关键字允许修改值捕获的变量副本。该特性显著提升了C++在函数式编程和现代代码设计中的表达能力。
2025-08-28 16:35:18
777
原创 详细讲解 C++ 中 static 关键字的作用
C++中的static关键字有五种主要用法:1)静态局部变量:函数内保持值的持久性;2)静态成员变量:类内共享数据;3)静态成员函数:类级操作无this指针;4)静态全局变量/函数:限制文件内可见性;5)C++17静态内联变量:允许类内初始化。静态特性影响变量生命周期、作用域和链接属性,分别用于持久化数据、类共享成员、工具函数、命名隔离和便利初始化。理解这些差异对掌握C++编程至关重要。
2025-08-28 15:24:19
964
原创 Qt QSS中 background-image,border-image,以及image属性差别
QSS中 background-image,border-image,以及image属性差别
2022-11-28 18:43:42
3973
原创 Qt EventLoop使用原理
Qt EventLoop建立一个局部的local event loop,但网上普遍就此结论,却没有阐述深入理解,
2022-09-25 21:51:48
1819
原创 Qt绘图中坐标系统
简介:Qt中坐标系统是由Qpaint类控制,Qpaint在属于绘图设备中绘制,QpaintDevice类是所有可以绘制图像的基类一个绘图设备的默认坐标系统中原点(0, 0)在其左上角,x坐标向右增长,y坐标向下增长。在基于像素的设备上,默认的单位是一个像素,而在打印机上默认的单位是一个点(1/72英寸)。QPainter的逻辑坐标与绘图设备的物理坐标之间的映射由QPainter的变换矩阵、视口和窗口处理。逻辑坐标和物理坐标默认是一致的。...
2022-03-30 00:18:12
1795
转载 STM32上实现驱动注册initcall机制
转载:STM32上实现驱动注册initcall机制一、代码实现了代码应用层和硬件层的分离管理,但是代码中还存在一个问题,每个硬件如LED控制,GPIO口需要初始化,初始化函数bsp_led_init();这个函数需要在主函数中调用初始化,类似这样:void bsp_init(void){ bsp_rcc_init(); bsp_tick_init(); bsp_led_init(); bsp_usart_init();}这样存在的问...
2022-02-22 18:46:53
797
原创 Qt 使用布局管理器失效或者异常
1.使用布局管理器失效继承与mainwindow或者再mainwindow的窗口,使用布局管理器将不起作用。mainwindow窗口有自己的布局管理方式,mainwindow中有个中心部件。如果要在mainwindow中使用布局,可以new 一个widget部件,然后在该部件上使用布局管理器;最后设置该部件为中心部件。2.使用布局管理器后,不能设置其中部件大小(setGeometry失效)。使用布局管理器后,部件位置大小将由布局管理器控制。如果要指定部件的大小,可以使用setFixe..
2022-01-06 20:19:49
3426
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅