【面试系列】C++ 高频面试题
欢迎来到我的博客,很高兴能够在这里和您见面!欢迎订阅相关专栏:
⭐️ 全网最全IT互联网公司面试宝典:收集整理全网各大IT互联网公司技术、项目、HR面试真题.
⭐️ AIGC时代的创新与未来:详细讲解AIGC的概念、核心技术、应用领域等内容。
⭐️ 全流程数据技术实战指南:全面讲解从数据采集到数据可视化的整个过程,掌握构建现代化数据平台和数据仓库的核心技术和方法。
文章目录
- C++ 初级面试题及其详细解答
- 1. 解释 C++ 中的基本数据类型。
- 2. 如何在 C++ 中定义和使用函数?
- 3. 解释 C++ 中的引用和指针。
- 4. 什么是类和对象?如何定义和使用?
- 5. 解释构造函数和析构函数。
- 6. 如何在 C++ 中实现函数重载?
- 7. 解释 C++ 中的继承。
- 8. 解释 C++ 中的虚函数和纯虚函数。
- 9. 解释 C++ 中的模板。
- 10. 如何在 C++ 中处理异常?
- C++ 中级面试题及其详细解答
- 1. 解释 C++ 中的深拷贝与浅拷贝的区别。
- 2. 解释 C++ 中的智能指针及其类型。
- 3. 如何在 C++ 中实现一个简单的 RAII 类?
- 4. 解释 C++ 中的多态性及其实现方式。
- 5. 什么是拷贝构造函数和赋值运算符重载?为什么需要它们?
- 6. 解释 C++ 中的虚函数表(V-Table)。
- 7. 解释 C++ 中的内联函数及其优缺点。
- 8. 解释 C++ 中的命名空间及其用途。
- 9. 解释 C++ 中的虚继承及其用途。
- 10. 解释 C++11 引入的 `nullptr` 和其优势。
- C++ 高级面试题及其详细解答
- 1. 解释 C++ 中的内存模型和内存管理。
- 2. 解释 C++11 中的移动语义和 `std::move` 的作用。
- 3. 解释 C++ 中的线程与线程同步机制。
- 4. 如何实现一个线程安全的单例模式?
- 5. 解释 C++ 中的 `constexpr` 和其优势。
- 6. 解释 C++ 中的协程及其应用。
- 7. 解释 C++ 中的 CRTP(Curiously Recurring Template Pattern)。
- 8. 如何在 C++ 中实现 RAII(资源获取即初始化)?
- 9. 解释 C++ 中的 SFINAE(Substitution Failure Is Not An Error)。
- 10. 解释 C++ 中的表达式模板及其用途。
C++ 初级面试题及其详细解答
1. 解释 C++ 中的基本数据类型。
解答:
C++ 提供了几种基本数据类型,包括:
int:整型,用于存储整数。float和double:浮点型,用于存储小数。char:字符型,用于存储单个字符。bool:布尔型,用于存储true或false值。void:无类型,通常用于函数返回类型。
示例:
int a = 10;
float b = 3.14;
char c = 'A';
bool d = true;
2. 如何在 C++ 中定义和使用函数?
解答:
在 C++ 中定义函数需要指定返回类型、函数名和参数列表。使用函数时通过函数名和参数进行调用。
示例:
#include <iostream>
using namespace std;int add(int x, int y) {return x + y;
}int main() {int result = add(3, 4);cout << "Result: " << result << endl;return 0;
}
3. 解释 C++ 中的引用和指针。
解答:
- 引用:是已有变量的别名,定义时必须初始化,不能更改引用目标。
- 指针:是存储变量地址的变量,可以在初始化后修改指向的地址。
示例:
int a = 5;
int& ref = a; // 引用
int* ptr = &a; // 指针ref = 10; // 修改 a 的值
*ptr = 15; // 修改 a 的值
4. 什么是类和对象?如何定义和使用?
解答:
- 类:是定义对象的蓝图,包含属性和方法。
- 对象:是类的实例,通过类创建。
示例:
class MyClass {
public:int x;void display() {cout << "Value: " << x << endl;}
};int main() {MyClass obj;obj.x = 10;obj.display();return 0;
}
5. 解释构造函数和析构函数。
解答:
- 构造函数:是类的特殊函数,用于初始化对象。名称与类名相同,无返回类型。
- 析构函数:在对象销毁时调用,用于清理资源。名称与类名相同,前加
~符号,无返回类型。
示例:
class MyClass {
public:MyClass() { cout << "Constructor called" << endl; }~MyClass() { cout << "Destructor called" << endl; }
};int main() {MyClass obj;return 0;
}
6. 如何在 C++ 中实现函数重载?
解答:
函数重载是指在同一个作用域内定义多个函数,这些函数具有相同的名称但参数列表不同。
示例:
#include <iostream>
using namespace std;int add(int a, int b) {return a + b;
}double add(double a, double b) {return a + b;
}int main() {cout << "Int add: " << add(3, 4) << endl;cout << "Double add: " << add(3.5, 4.5) << endl;return 0;
}
7. 解释 C++ 中的继承。
解答:
继承是面向对象编程的特性,允许一个类从另一个类派生,继承基类的属性和方法。使用 : 和访问控制符(public, protected, private)实现继承。
示例:
class Base {
public:void display() {cout << "Base class display" << endl;}
};class Derived : public Base {
public:void show() {cout << "Derived class show" << endl;}
};int main() {Derived obj;obj.display();obj.show();return 0;
}
8. 解释 C++ 中的虚函数和纯虚函数。
解答:
- 虚函数:使用
virtual关键字声明,可以在派生类中重写,实现多态性。 - 纯虚函数:使用
= 0声明,必须在派生类中实现,所在类为抽象类,不能实例化。
示例:
class Base {
public:virtual void display() {cout << "Base display" << endl;}
};class Derived : public Base {
public:void display() override {cout << "Derived display" << endl;}
};int main() {Base* ptr = new Derived();ptr->display(); // 输出:Derived displaydelete ptr;return 0;
}
9. 解释 C++ 中的模板。
解答:
模板是泛型编程的基础,允许定义函数或类时使用类型参数,从而在使用时指定具体类型。分为函数模板和类模板。
示例:
template <typename T>
T add(T a, T b) {return a + b;
}int main() {cout << "Int add: " << add(3, 4) << endl;cout << "Double add: " << add(3.5, 4.5) << endl;return 0;
}
10. 如何在 C++ 中处理异常?
解答:
使用 try、catch 和 throw 关键字处理异常。try 块中放置可能抛出异常的代码,catch 块处理异常,throw 抛出异常。
示例:
#include <iostream>
using namespace std;int divide(int a, int b) {if (b == 0) {throw runtime_error("Division by zero");}return a / b;
}int main() {try {cout << divide(10, 0) << endl;} catch (const runtime_error& e) {cout << "Error: " << e.what() << endl;}return 0;
}
C++ 中级面试题及其详细解答
1. 解释 C++ 中的深拷贝与浅拷贝的区别。
解答:
- 浅拷贝:拷贝对象的所有成员,包括指针,但不会拷贝指针所指向的内容,导致多个对象共享同一块内存。
- 深拷贝:不仅拷贝对象的所有成员,还会拷贝指针所指向的内容,确保每个对象都有独立的内存。
示例:
class MyClass {
public:int* data;MyClass(int value) {data = new int(value);}// 深拷贝构造函数MyClass(const MyClass& other) {data = new int(*other.data);}~MyClass() {delete data;}
};
2. 解释 C++ 中的智能指针及其类型。
解答:
C++11 引入了智能指针,自动管理动态内存,防止内存泄漏。常见类型包括:
std::unique_ptr:独占所有权,一个时间点只有一个智能指针指向对象。std::shared_ptr:共享所有权,多个智能指针可以指向同一对象,使用引用计数管理。std::weak_ptr:弱引用,不增加引用计数,避免循环引用。
示例:
#include <memory>std::unique_ptr<int> p1(new int(5));
std::shared_ptr<int> p2 = std::make_shared<int>(10);
std::weak_ptr<int> p3 = p2;
3. 如何在 C++ 中实现一个简单的 RAII 类?
解答:
RAII(资源获取即初始化)是一种管理资源的惯用方法,通过对象的生命周期管理资源。实现一个简单的 RAII 类,确保资源在构造时获取,在析构时释放。
示例:
class RAII {
public:RAII() {resource = new int(5); // 获取资源}~RAII() {delete resource; // 释放资源}
private:int* resource;
};int main() {RAII obj;// 资源在作用域结束时自动释放return 0;
}
4. 解释 C++ 中的多态性及其实现方式。
解答:
多态性允许通过基类指针或引用调用派生类的方法。实现方式包括:
- 编译时多态:通过函数重载和模板实现。
- 运行时多态:通过虚函数实现。
示例:
class Base {
public:virtual void show() {cout << "Base show" << endl;}
};class Derived : public Base {
public:void show() override {cout << "Derived show" << endl;}
};int main() {Base* ptr = new Derived();ptr->show(); // 输出:Derived showdelete ptr;
}
5. 什么是拷贝构造函数和赋值运算符重载?为什么需要它们?
解答:
- 拷贝构造函数:用于创建对象的副本,防止默认浅拷贝导致资源冲突。语法:
ClassName(const ClassName& other); - 赋值运算符重载:用于赋值操作,防止默认浅拷贝导致资源冲突。语法:
ClassName& operator=(const ClassName& other);
示例:
class MyClass {
public:int* data;MyClass(int value) {data = new int(value);}// 拷贝构造函数MyClass(const MyClass& other) {data = new int(*other.data);}// 赋值运算符重载MyClass& operator=(const MyClass& other) {if (this != &other) {delete data;data = new int(*other.data);}return *this;}~MyClass() {delete data;}
};
6. 解释 C++ 中的虚函数表(V-Table)。
解答:
虚函数表是编译器为支持多态性生成的结构。它包含类的虚函数指针。每个包含虚函数的类实例都有一个隐藏的指针指向对应的虚函数表。调用虚函数时,通过虚函数表找到实际调用的函数地址。
示例:
class Base {
public:virtual void show() {cout << "Base show" << endl;}
};class Derived : public Base {
public:void show() override {cout << "Derived show" << endl;}
};int main() {Base* ptr = new Derived();ptr->show(); // 通过 V-Table 调用 Derived::showdelete ptr;
}
7. 解释 C++ 中的内联函数及其优缺点。
解答:
内联函数通过 inline 关键字声明,提示编译器将函数体展开到调用处,减少函数调用开销。优点包括减少函数调用开销,提高执行效率。缺点是可能增加代码大小,导致指令缓存效率降低。
示例:
inline int add(int a, int b) {return a + b;
}int main() {int result = add(3, 4); // 内联展开,减少调用开销return 0;
}
8. 解释 C++ 中的命名空间及其用途。
解答:
命名空间用于组织代码,避免命名冲突。使用 namespace 关键字定义,通过作用域解析运算符 :: 访问命名空间中的成员。常用于大型项目和库中。
示例:
namespace MyNamespace {int value = 10;void show() {cout << "Value: " << value << endl;}
}int main() {MyNamespace::show(); // 访问 MyNamespace 中的成员return 0;
}
9. 解释 C++ 中的虚继承及其用途。
解答:
虚继承用于解决多重继承中的菱形继承问题,防止基类的多份拷贝。使用 virtual 关键字声明虚继承。这样,派生类只包含一份基类的成员。
示例:
class Base {
public:int value;
};class Derived1 : virtual public Base {};
class Derived2 : virtual public Base {};class Final : public Derived1, public Derived2 {
public:void show() {value = 10; // 没有二义性cout << "Value: " << value << endl;}
};int main() {Final obj;obj.show();return 0;
}
10. 解释 C++11 引入的 nullptr 和其优势。
解答:
nullptr 是 C++11 引入的空指针常量,用于替代 NULL 和 0,解决了它们与整数混淆的问题。nullptr 是 std::nullptr_t 类型,能更明确地表示指针为空,提高代码可读性和类型安全性。
示例:
void func(int x) {cout << "Integer: " << x << endl;
}void func(int* ptr) {cout << "Pointer" << endl;
}int main() {func(0); // 调用 func(int)func(nullptr); // 调用 func(int*)return 0;
}
C++ 高级面试题及其详细解答
1. 解释 C++ 中的内存模型和内存管理。
解答:
C++ 中的内存模型包括堆、栈、自由存储区和全局/静态区:
- 栈:局部变量和函数调用信息,自动管理。
- 堆:动态分配内存,需要手动管理(
new和delete)。 - 自由存储区:
malloc和free管理的内存。 - 全局/静态区:存储全局变量和静态变量,在程序结束时释放。
内存管理包括防止内存泄漏、双重释放、无效指针等问题。智能指针(如 std::unique_ptr 和 std::shared_ptr)有助于自动管理内存,减少内存泄漏风险。
2. 解释 C++11 中的移动语义和 std::move 的作用。
解答:
移动语义通过引入右值引用(T&&)和移动构造函数、移动赋值运算符,优化资源管理,避免不必要的拷贝。std::move 用于将左值强制转换为右值引用,允许对象资源的转移,而不是复制。
示例:
#include <utility>class MyClass {
public:MyClass() : data(new int[100]) {}~MyClass() { delete[] data; }// 移动构造函数MyClass(MyClass&& other) noexcept : data(other.data) {other.data = nullptr;}// 移动赋值运算符MyClass& operator=(MyClass&& other) noexcept {if (this != &other) {delete[] data;data = other.data;other.data = nullptr;}return *this;}private:int* data;
};int main() {MyClass obj1;MyClass obj2 = std::move(obj1); // 使用移动构造函数return 0;
}
3. 解释 C++ 中的线程与线程同步机制。
解答:
C++11 引入了线程支持,提供了 std::thread 进行多线程编程。线程同步机制包括:
- 互斥锁(
std::mutex):保护共享数据,防止数据竞争。 - 条件变量(
std::condition_variable):实现线程间的等待和通知。 - 读写锁(
std::shared_mutex):允许多个线程并发读取,独占写入。
示例:
#include <thread>
#include <mutex>
#include <iostream>std::mutex mtx;void print(int i) {std::lock_guard<std::mutex> lock(mtx);std::cout << "Thread " << i << std::endl;
}int main() {std::thread t1(print, 1);std::thread t2(print, 2);t1.join();t2.join();return 0;
}
4. 如何实现一个线程安全的单例模式?
解答:
使用双重检查锁定实现线程安全的单例模式。确保在多线程环境下只有一个实例被创建。
示例:
#include <mutex>class Singleton {
public:static Singleton* getInstance() {if (instance == nullptr) {std::lock_guard<std::mutex> lock(mtx);if (instance == nullptr) {instance = new Singleton();}}return instance;}private:Singleton() {}static Singleton* instance;static std::mutex mtx;
};Singleton* Singleton::instance = nullptr;
std::mutex Singleton::mtx;
5. 解释 C++ 中的 constexpr 和其优势。
解答:
constexpr 是 C++11 引入的关键字,用于指定常量表达式,允许在编译时计算结果。优势包括:
- 编译时计算:提高程序效率,减少运行时开销。
- 类型安全:通过编译时检查,提高代码安全性和可靠性。
- 优化机会:允许编译器进行更好的优化。
示例:
constexpr int square(int x) {return x * x;
}int main() {constexpr int result = square(5); // 编译时计算return 0;
}
6. 解释 C++ 中的协程及其应用。
解答:
协程是 C++20 引入的特性,允许函数在执行过程中暂停和恢复,实现异步编程。通过 co_await、co_yield 和 co_return 关键字使用协程。协程的应用包括事件驱动编程、异步 IO 和生成器等。
示例:
#include <coroutine>
#include <iostream>struct Coroutine {struct promise_type {Coroutine get_return_object() { return {}; }std::suspend_always initial_suspend() { return {}; }std::suspend_always final_suspend() noexcept { return {}; }void return_void() {}void unhandled_exception() { std::terminate(); }};
};Coroutine myCoroutine() {std::cout << "Hello ";co_await std::suspend_always{};std::cout << "World!" << std::endl;
}int main() {auto coro = myCoroutine();coro.resume();return 0;
}
7. 解释 C++ 中的 CRTP(Curiously Recurring Template Pattern)。
解答:
CRTP 是一种模板编程技术,基类以派生类作为模板参数,实现静态多态性。CRTP 的优势包括编译时多态性、性能优化和代码重用。常用于实现静态接口和 CRTP 组合。
示例:
template <typename Derived>
class Base {
public:void interface() {static_cast<Derived*>(this)->implementation();}static void staticInterface() {Derived::staticImplementation();}
};class Derived : public Base<Derived> {
public:void implementation() {std::cout << "Derived implementation" << std::endl;}static void staticImplementation() {std::cout << "Derived static implementation" << std::endl;}
};int main() {Derived d;d.interface(); // 输出:Derived implementationDerived::staticInterface(); // 输出:Derived static implementationreturn 0;
}
8. 如何在 C++ 中实现 RAII(资源获取即初始化)?
解答:
RAII 是 C++ 管理资源的惯用方法,通过对象的生命周期管理资源。常见的 RAII 包括 std::lock_guard 和 std::unique_ptr。RAII 类在构造时获取资源,在析构时释放资源。
示例:
#include <mutex>class LockGuard {
public:LockGuard(std::mutex& m) : mtx(m) {mtx.lock();}~LockGuard() {mtx.unlock();}
private:std::mutex& mtx;
};std::mutex mtx;int main() {{LockGuard lock(mtx);// 临界区} // 自动释放锁return 0;
}
9. 解释 C++ 中的 SFINAE(Substitution Failure Is Not An Error)。
解答:
SFINAE 是一种模板编程技术,当模板参数替换失败时,不会产生编译错误,而是选择其他重载。SFINAE 用于实现模板的条件编译、类型推导和静态多态性。常用工具包括 std::enable_if 和类型特征。
示例:
#include <type_traits>
#include <iostream>template <typename T>
typename std::enable_if<std::is_integral<T>::value, void>::type
print(T value) {std::cout << "Integral: " << value << std::endl;
}template <typename T>
typename std::enable_if<std::is_floating_point<T>::value, void>::type
print(T value) {std::cout << "Floating point: " << value << std::endl;
}int main() {print(42); // 输出:Integral: 42print(3.14); // 输出:Floating point: 3.14return 0;
}
10. 解释 C++ 中的表达式模板及其用途。
解答:
表达式模板是一种模板编程技术,通过构建表达式树,在编译时优化计算。常用于高性能计算库(如 Eigen 和 Boost),避免不必要的临时对象和拷贝,提高计算效率。
示例:
template <typename L, typename R>
class Add {
public:Add(const L& l, const R& r) : lhs(l), rhs(r) {}auto operator[](size_t i) const {return lhs[i] + rhs[i];}private:const L& lhs
💗💗💗 如果觉得这篇文对您有帮助,请给个点赞、关注、收藏吧,谢谢!💗💗💗
相关文章:
【面试系列】C++ 高频面试题
欢迎来到我的博客,很高兴能够在这里和您见面!欢迎订阅相关专栏: ⭐️ 全网最全IT互联网公司面试宝典:收集整理全网各大IT互联网公司技术、项目、HR面试真题. ⭐️ AIGC时代的创新与未来:详细讲解AIGC的概念、核心技术、…...
程序猿大战Python——实现简单的图书馆系统操作
步骤1:安装和导入库 首先,确保已经安装了 pymysql 库。如果没有安装,请执行以下命令: pip install pymysql 然后,导入必要的库: import pymysql 步骤2:创建数据库和表的函数 编写一个函数来…...
液体粒子计数器的原理及常见型号选择 lighthouse代理商北京中邦兴业
液体颗粒计数用于测量液体样品中颗粒的大小和分布。通过用激光二极管照射液体样品并检测散射光来测量颗粒分布和尺寸。散射光的性质与粒子大小的大小有关。液体颗粒计数器可用于批量取样或在线(连续监测)应用,如水处理厂,或用于…...
Java知识点整理 16 — Spring Bean
在之前的文章 Java知识点整理 8 — Spring 简介 中介绍了 Spring 的两大核心概念 IoC 和 AOP,但对 Spring Bean 的介绍不全面,本文将补充 Spring 中 Bean 的概念。 一. 什么是 Spring Bean 在 Spring 官方文档中,对 bean 的定义为…...
Nvidia Jetson/RK3588+AI双目立体相机,适合各种割草机器人、扫地机器人、AGV等应用
双目立体视觉是基于视差原理,依据成像设备从不同位置获取的被测物体的图像,匹配对应点的位置偏移,得到视差数据,进而计算物体的空间三维信息。为您带来高图像质量的双目立体相机,具有高分辨率、低功耗、远距离等优点&a…...
springboot使用feign调用不依赖cloud
在使用spring boot调用第三方api中,常用的是okhttp、apache http client等,但是直接使用下来还是有点繁琐,需要手动转换实体。 在springcloud中有个openfeign调用,第一次体验到调用接口还能这么丝滑。注解写道接口上,…...
springboot中使用springboot cache
前言:SpringBoot中使用Cache缓存可以提高对缓存的开发效率 此图片是SpringBootCache常用注解 Springboot Cache中常用注解 第一步:引入依赖 <!--缓存--><dependency><groupId>org.springframework.boot</groupId><artifactId…...
Promise,async/await的运用
一,了解Promise Promise是异步编程的一种解决方案,它是一个对象,可以获取异步操作的消息,它的出现避免了地狱回调。 (1)Promise的实例有三个状态: Pending(进行中) Re…...
图论·多源最短路径Floyddijsktra
例题地址 多源最短路径 多个源点多个终点可以使用Floyd算法直接求各源点到终点的最短距离,也可以直接多次使用dijsktra算法求单源点到终点的最短距离 Floyd算法 使用条件 多源最短路径权值正负皆可 核心思想:动态规划 子问题: 设(A,B)…...
微服务 | Springboot整合GateWay+Nacos实现动态路由
1、简介 路由转发 执行过滤器链。 网关,旨在为微服务架构提供一种简单有效的统一的API路由管理方式。同时,基于Filter链的方式提供了网关的基本功能,比如:鉴权、流量控制、熔断、路径重写、黑白名单、日志监控等。 基本功能…...
做google SEO 有哪些好用的工具?这12款谷歌SEO工具值得收藏!
1、Google Trends 谷歌旗下一款基于搜索数据推出的一款免费分析工具 外贸人有句老话,七分靠选品,三分靠运营。在你开始做独立站之前,在你不清楚你的行业在Google上面能否有足够的流量时,那么Google Trends则是你最好的工具。 你只…...
【变频调速在锅炉引风机控制中的应用】
变频调速在锅炉引风机控制中的应用 变频器的选型 变频器是利用电力半导体器件的通断作用将工频电源变换为另一种频率的电能控制装置,能宏观对交流异步电机软启动,变频调速,提高运转精度,改变功率因数,过流/过压/过载保护等功能,国内技术较领先的品牌有汇川、欧瑞(原烟台…...
网络配置(IP、NETMASK、GATEWAY、DNS、DHCP) <持续更新中>
参考: 初学Linux之网络配置(IP、NETMASK、GATEWAY、DNS、DHCP)-CSDN博客【学习笔记】网关 & 路由_网关和路由-CSDN博客【学习笔记】计算机网络 IP地址与MAC地址_根据mac分配ip-CSDN博客【学习笔记】TCP 和 UDP 协议_tcp 发送 syn 应答没有syn ack-CSDN博客 一…...
【ArcGIS 脚本工具】拯救密恐,隐藏唯一值渲染图层的标记符号
最近拿到了【Hello 图狗】制作的三调/变更样式符号库,确实比之前网上下载的版本好用很多。 ArcGIS Pro三调23变更符号库V1.02(汇总)_中大比例尺.stylx和样式属性对调 不过使用过程中触发了一个旧病,就是匹配样式之后,…...
tensorflow学习1.3-创建会话,启动会话
tensorflow学习1.3-创建会话,启动会话 会话的由来与作用由来作用 会话的定义与结构定义 用法基本用法上下文管理器执行部分计算图获取多个结果 总结 练习代码报错原因:TensorFlow 2.x中的Eager Execution使用兼容模式来启用SessionEager Execution和计算…...
QT基本对话框(基本对话框、工具盒类、进度条、调色板与电子钟、可扩展对话框、程序启动画面)
此篇文章通过实例介绍基本对话框的用法。首先介绍标准文件对话框(QFileDialog)、标准颜色对话框(QColorDialog)、标准字体对话框(QFontDialog)、标准输入对话框(QInputDialog)以及标…...
Docker 部署 MariaDB 数据库 与 Adminer 数据库管理工具
文章目录 MariaDBmariadb.cnf开启 binlog Adminerdocker-compose.ymlAdminer 连接 MariaDB MariaDB MariaDB是一个流行的开源关系型数据库管理系统(RDBMS),它是MySQL的一个分支和替代品。 官网:https://mariadb.com/镜像ÿ…...
qt 可以在一个函数中读一个文件,然后再将内容写入另一个文件中
是的,Qt 允许你在一个函数中读取一个文件的内容,并将这些内容写入到另一个文件中。这可以通过结合使用 QFile 和 QTextStream(或 QDataStream,取决于你的具体需求)来实现。以下是一个简单的示例,展示了如何…...
Dijkstra算法C代码
一个带权图n个点m条边,求起点到终点的最短距离 先定义一个邻接矩阵graph,graph[i][j]表示从i到j的距离,i到j没有路就表示为无穷 然后定义一个visit数组,visit[i]表示i结点是否被访问 然后定义一个dist数组,dist[i]表…...
P1064 [NOIP2006 提高组] 金明的预算方案
[NOIP2006 提高组] 金明的预算方案 题目描述 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用的很宽敞的房间。更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置࿰…...
【WiFi帧结构】
文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成:MAC头部frame bodyFCS,其中MAC是固定格式的,frame body是可变长度。 MAC头部有frame control,duration,address1,address2,addre…...
从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)
设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile,新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...
【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)
骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术,它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton):由层级结构的骨头组成,类似于人体骨骼蒙皮 (Mesh Skinning):将模型网格顶点绑定到骨骼上,使骨骼移动…...
多种风格导航菜单 HTML 实现(附源码)
下面我将为您展示 6 种不同风格的导航菜单实现,每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...
vue3+vite项目中使用.env文件环境变量方法
vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...
云原生玩法三问:构建自定义开发环境
云原生玩法三问:构建自定义开发环境 引言 临时运维一个古董项目,无文档,无环境,无交接人,俗称三无。 运行设备的环境老,本地环境版本高,ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...
Web后端基础(基础知识)
BS架构:Browser/Server,浏览器/服务器架构模式。客户端只需要浏览器,应用程序的逻辑和数据都存储在服务端。 优点:维护方便缺点:体验一般 CS架构:Client/Server,客户端/服务器架构模式。需要单独…...
tomcat入门
1 tomcat 是什么 apache开发的web服务器可以为java web程序提供运行环境tomcat是一款高效,稳定,易于使用的web服务器tomcathttp服务器Servlet服务器 2 tomcat 目录介绍 -bin #存放tomcat的脚本 -conf #存放tomcat的配置文件 ---catalina.policy #to…...
sshd代码修改banner
sshd服务连接之后会收到字符串: SSH-2.0-OpenSSH_9.5 容易被hacker识别此服务为sshd服务。 是否可以通过修改此banner达到让人无法识别此服务的目的呢? 不能。因为这是写的SSH的协议中的。 也就是协议规定了banner必须这么写。 SSH- 开头,…...
stm32进入Infinite_Loop原因(因为有系统中断函数未自定义实现)
这是系统中断服务程序的默认处理汇编函数,如果我们没有定义实现某个中断函数,那么当stm32产生了该中断时,就会默认跑这里来了,所以我们打开了什么中断,一定要记得实现对应的系统中断函数,否则会进来一直循环…...
