当前位置: 首页 > news >正文

【CPP】CPP经典面试题

文章目录

    • 引言
    • 1. C++ 基础
      • 1.1 C++ 中的 `const` 关键字
      • 1.2 C++ 中的 `static` 关键字
    • 2. 内存管理
      • 2.1 C++ 中的 `new` 和 `delete`
      • 2.2 内存泄漏
    • 3. 面向对象编程
      • 3.1 继承和多态
      • 3.2 多重继承
    • 4. 模板和泛型编程
      • 4.1 函数模板
      • 4.2 类模板
    • 5. STL 和标准库
      • 5.1 容器
      • 5.2 迭代器
    • 6. 高级特性
      • 6.1 移动语义和右值引用
      • 6.2 Lambda 表达式
    • 7. 设计模式
      • 7.1 单例模式
      • 7.2 工厂模式
    • 8. 性能优化
      • 8.1 内联函数
      • 8.2 缓存友好性
    • 9. 并发编程
      • 9.1 线程
      • 9.2 条件变量
    • 10. 异常处理
      • 10.1 异常机制
    • 11. C++17 和 C++20 新特性
      • 11.1 C++17 新特性
      • 11.2 C++20 新特性
    • 12. 实际应用
      • 12.1 智能指针
      • 12.2 RAII 原则
    • 13. 调试和测试
      • 13.1 调试技巧
      • 13.2 单元测试
      • 13.3 性能分析
    • 14. C++ 编码规范
      • 14.1 命名规范
      • 14.2 代码格式化
    • 15. C++ 项目构建
      • 15.1 Makefile
      • 15.2 CMake
    • 16. C++ 未来发展趋势
      • 16.1 C++23 新特性
      • 16.2 C++ 的未来
    • 结语

在这里插入图片描述

引言

C++ 是一门强大且复杂的编程语言,广泛应用于系统编程、游戏开发、嵌入式系统和高性能计算等领域。由于其灵活性和性能优势,C++ 程序员在面试中常常会遇到各种深入的问题。本文将探讨一些经典的 C++ 面试题,涵盖从基础语法到高级特性的多个方面,帮助读者更好地准备面试。

1. C++ 基础

1.1 C++ 中的 const 关键字

const 是 C++ 中用于定义常量的关键字。它可以用于修饰变量、函数参数、函数返回值以及成员函数。

问题: const#define 有什么区别?

答案:

  • const 是类型安全的,编译器会进行类型检查,而 #define 是宏定义,只是简单的文本替换。
  • const 定义的常量在编译时分配内存,而 #define 不分配内存。
  • const 可以用于修饰类的成员函数,表示该函数不会修改类的成员变量。

问题: const 成员函数的作用是什么?

答案:
const 成员函数表示该函数不会修改类的成员变量。它可以被 const 对象调用,而非 const 对象既可以调用 const 成员函数,也可以调用非 const 成员函数。

1.2 C++ 中的 static 关键字

static 关键字在 C++ 中有多种用途,包括修饰局部变量、全局变量、类成员变量和类成员函数。

问题: static 局部变量和普通局部变量有什么区别?

答案:

  • static 局部变量的生命周期贯穿整个程序运行期间,即使函数调用结束,static 局部变量也不会被销毁。
  • 普通局部变量的生命周期仅限于函数调用期间,函数调用结束后,局部变量会被销毁。

问题: static 成员函数和普通成员函数有什么区别?

答案:

  • static 成员函数不依赖于类的实例,可以直接通过类名调用。
  • static 成员函数不能访问类的非静态成员变量和非静态成员函数,因为它们没有 this 指针。

2. 内存管理

2.1 C++ 中的 newdelete

newdelete 是 C++ 中用于动态内存分配和释放的操作符。

问题: newmalloc 有什么区别?

答案:

  • new 是 C++ 的操作符,而 malloc 是 C 标准库函数。
  • new 会自动调用对象的构造函数,malloc 不会。
  • new 返回的是对象类型的指针,malloc 返回的是 void*,需要显式类型转换。
  • new 分配内存失败时会抛出 std::bad_alloc 异常,malloc 失败时返回 NULL

问题: deletefree 有什么区别?

答案:

  • delete 是 C++ 的操作符,而 free 是 C 标准库函数。
  • delete 会自动调用对象的析构函数,free 不会。
  • delete 用于释放 new 分配的内存,free 用于释放 malloc 分配的内存。

2.2 内存泄漏

内存泄漏是指程序在动态分配内存后,未能正确释放该内存,导致内存占用不断增加。

问题: 如何避免内存泄漏?

答案:

  • 使用智能指针(如 std::unique_ptrstd::shared_ptr)来管理动态内存。
  • 确保每次 new 操作都有对应的 delete 操作。
  • 使用 RAII(Resource Acquisition Is Initialization)原则,将资源的生命周期与对象的生命周期绑定。

3. 面向对象编程

3.1 继承和多态

继承和多态是面向对象编程中的核心概念。

问题: 什么是虚函数?为什么需要虚函数?

答案:
虚函数是用于实现多态的机制。通过在基类中声明虚函数,派生类可以重写该函数,从而实现运行时多态。当通过基类指针或引用调用虚函数时,实际调用的是派生类的重写函数。

问题: 虚函数表(vtable)是什么?

答案:
虚函数表是编译器为每个包含虚函数的类生成的一个表,表中存储了虚函数的地址。每个对象在内存中都有一个指向虚函数表的指针(vptr),通过这个指针可以在运行时确定调用哪个虚函数。

3.2 多重继承

多重继承是指一个类可以从多个基类继承。

问题: 多重继承会带来什么问题?如何解决?

答案:
多重继承可能导致菱形继承问题(Diamond Problem),即一个类从两个基类继承,而这两个基类又共同继承自同一个基类,导致派生类中包含多个相同的基类子对象。可以通过虚继承(virtual inheritance)来解决这个问题。

4. 模板和泛型编程

4.1 函数模板

函数模板允许编写通用的函数,可以处理不同类型的参数。

问题: 函数模板和函数重载有什么区别?

答案:

  • 函数模板通过参数类型推导生成具体的函数实例,适用于不同类型的数据。
  • 函数重载是通过定义多个同名函数,每个函数处理不同类型的参数。

问题: 如何特化一个函数模板?

答案:
可以通过显式特化或部分特化来为特定类型提供特殊的实现。显式特化是为特定类型提供完全不同的实现,而部分特化是为特定类型的一部分提供不同的实现。

4.2 类模板

类模板允许编写通用的类,可以处理不同类型的数据。

问题: 类模板和模板类的区别是什么?

答案:

  • 类模板是模板的定义,尚未实例化。
  • 模板类是类模板实例化后的具体类。

问题: 如何特化一个类模板?

答案:
可以通过显式特化或部分特化来为特定类型提供特殊的实现。显式特化是为特定类型提供完全不同的实现,而部分特化是为特定类型的一部分提供不同的实现。

5. STL 和标准库

5.1 容器

STL 提供了多种容器,如 vectorlistmap 等。

问题: vectorlist 有什么区别?

答案:

  • vector 是动态数组,支持随机访问,插入和删除操作在尾部高效,但在中间或头部效率较低。
  • list 是双向链表,不支持随机访问,插入和删除操作在任何位置都高效。

问题: mapunordered_map 有什么区别?

答案:

  • map 是基于红黑树实现的,元素按键值有序存储,查找、插入和删除操作的时间复杂度为 O(log n)。
  • unordered_map 是基于哈希表实现的,元素无序存储,查找、插入和删除操作的平均时间复杂度为 O(1)。

5.2 迭代器

迭代器是用于遍历容器中元素的对象。

问题: 迭代器的种类有哪些?

答案:

  • 输入迭代器:只能读取元素,单向移动。
  • 输出迭代器:只能写入元素,单向移动。
  • 前向迭代器:可以读取和写入元素,单向移动。
  • 双向迭代器:可以读取和写入元素,双向移动。
  • 随机访问迭代器:可以读取和写入元素,支持随机访问。

6. 高级特性

6.1 移动语义和右值引用

移动语义和右值引用是 C++11 引入的重要特性,用于提高性能。

问题: 什么是右值引用?为什么需要右值引用?

答案:
右值引用是用于绑定临时对象(右值)的引用类型,通过 && 表示。右值引用允许将资源(如动态内存)从一个对象“移动”到另一个对象,避免不必要的拷贝操作,从而提高性能。

问题: 什么是移动构造函数和移动赋值运算符?

答案:
移动构造函数和移动赋值运算符是用于实现移动语义的特殊成员函数。移动构造函数接受一个右值引用参数,将资源从源对象移动到目标对象。移动赋值运算符也接受一个右值引用参数,将资源从源对象移动到目标对象,并释放目标对象原有的资源。

6.2 Lambda 表达式

Lambda 表达式是 C++11 引入的匿名函数,可以方便地定义和使用函数对象。

问题: Lambda 表达式的语法是什么?

答案:
Lambda 表达式的语法为:

[捕获列表](参数列表) -> 返回类型 { 函数体 }

捕获列表用于指定 Lambda 表达式可以访问的外部变量,参数列表和返回类型与普通函数类似。

问题: Lambda 表达式的捕获列表有哪些方式?

答案:

  • [&]:以引用方式捕获所有外部变量。
  • [=]:以值方式捕获所有外部变量。
  • [&x, =y]:以引用方式捕获 x,以值方式捕获 y
  • [this]:捕获当前对象的 this 指针。

7. 设计模式

7.1 单例模式

单例模式是一种创建型设计模式,确保一个类只有一个实例,并提供全局访问点。

问题: 如何实现线程安全的单例模式?

答案:
可以通过双重检查锁定(Double-Checked Locking)或使用局部静态变量来实现线程安全的单例模式。

class Singleton {
public:static Singleton& getInstance() {static Singleton instance;return instance;}private:Singleton() {}Singleton(const Singleton&) = delete;Singleton& operator=(const Singleton&) = delete;
};

7.2 工厂模式

工厂模式是一种创建型设计模式,用于创建对象而不指定具体的类。

问题: 工厂模式和抽象工厂模式有什么区别?

答案:

  • 工厂模式定义一个创建对象的接口,但由子类决定实例化哪个类。
  • 抽象工厂模式提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

8. 性能优化

8.1 内联函数

内联函数是一种优化技术,通过在调用点展开函数体来减少函数调用的开销。

问题: 内联函数有什么优缺点?

答案:

  • 优点:减少函数调用的开销,提高执行效率。
  • 缺点:增加代码体积,可能导致缓存不命中,影响性能。

问题: 如何定义内联函数?

答案:
可以通过 inline 关键字定义内联函数,或者在类定义中直接定义成员函数。

inline int add(int a, int b) {return a + b;
}

8.2 缓存友好性

缓存友好性是指程序在访问内存时能够充分利用 CPU 缓存,减少缓存未命中的次数。

问题: 如何编写缓存友好的代码?

答案:

  • 尽量使用连续内存访问模式,如数组遍历。
  • 避免频繁的内存分配和释放,减少内存碎片。
  • 使用适当的数据结构和算法,减少不必要的内存访问。

9. 并发编程

9.1 线程

C++11 引入了多线程支持,提供了 std::thread 类。

问题: 如何创建和启动一个线程?

答案:
可以通过 std::thread 类创建和启动一个线程,线程函数可以是普通函数、Lambda 表达式或成员函数。

#include <iostream>
#include <thread>void threadFunc() {std::cout << "Hello from thread!" << std::endl;
}int main() {std::thread t(threadFunc);t.join();return 0;
}

问题: 如何避免数据竞争?

答案:
可以通过互斥锁(std::mutex)、原子操作(std::atomic)或其他同步机制来避免数据竞争。

9.2 条件变量

条件变量是用于线程间同步的机制,允许线程等待某个条件成立。

问题: 如何使用条件变量?

答案:
可以通过 std::condition_variablestd::mutex 来实现线程间的条件等待和通知。

#include <iostream>
#include <thread>
#include <mutex>
#include <condition_variable>std::mutex mtx;
std::condition_variable cv;
bool ready = false;void waitForReady() {std::unique_lock<std::mutex> lock(mtx);cv.wait(lock, []{ return ready; });std::cout << "Ready!" << std::endl;
}void setReady() {std::this_thread::sleep_for(std::chrono::seconds(1));{std::lock_guard<std::mutex> lock(mtx);ready = true;}cv.notify_all();
}int main() {std::thread t1(waitForReady);std::thread t2(setReady);t1.join();t2.join();return 0;
}

10. 异常处理

10.1 异常机制

C++ 提供了异常处理机制,允许程序在运行时处理错误。

问题: trycatchthrow 的作用是什么?

答案:

  • try 块用于包含可能抛出异常的代码。
  • catch 块用于捕获并处理异常。
  • throw 用于抛出异常。

问题: 如何自定义异常类?

答案:
可以通过继承 std::exception 类来定义自定义异常类,并重写 what() 方法以提供异常描述。

#include <exception>
#include <string>class MyException : public std::exception {
public:MyException(const std::string& msg) : msg(msg) {}const char* what() const noexcept override {return msg.c_str();}private:std::string msg;
};

11. C++17 和 C++20 新特性

11.1 C++17 新特性

C++17 引入了许多新特性,如结构化绑定、std::optionalstd::variant 等。

问题: 什么是结构化绑定?

答案:
结构化绑定允许将结构体或数组的元素绑定到变量上,简化代码。

#include <iostream>
#include <tuple>int main() {std::tuple<int, double, std::string> t(1, 2.0, "hello");auto [a, b, c] = t;std::cout << a << ", " << b << ", " << c << std::endl;return 0;
}

11.2 C++20 新特性

C++20 引入了更多新特性,如概念(Concepts)、范围(Ranges)、协程(Coroutines)等。

问题: 什么是概念(Concepts)?

答案:
概念是用于约束模板参数的机制,可以在编译时检查模板参数是否满足特定要求。

#include <concepts>
#include <iostream>template<typename T>
requires std::integral<T>
void print(T value) {std::cout << value << std::endl;
}int main() {print(42);  // OK// print(3.14);  // Error: does not satisfy std::integralreturn 0;
}

12. 实际应用

12.1 智能指针

智能指针是 C++11 引入的用于自动管理动态内存的工具。

问题: std::unique_ptrstd::shared_ptr 有什么区别?

答案:

  • std::unique_ptr 是独占所有权的智能指针,不能复制,只能移动。
  • std::shared_ptr 是共享所有权的智能指针,通过引用计数管理资源,可以复制和移动。

问题: 如何使用 std::make_shared

答案:
std::make_shared 是用于创建 std::shared_ptr 的工厂函数,可以一次性分配内存并创建对象。

#include <memory>
#include <iostream>int main() {auto ptr = std::make_shared<int>(42);std::cout << *ptr << std::endl;return 0;
}

12.2 RAII 原则

RAII(Resource Acquisition Is Initialization)是 C++ 中的重要原则,用于管理资源。

问题: 什么是 RAII 原则?

答案:
RAII 原则是指将资源的生命周期与对象的生命周期绑定,通过对象的构造函数获取资源,通过析构函数释放资源,确保资源在对象销毁时自动释放。

问题: 如何实现 RAII?

答案:
可以通过类的构造函数和析构函数来实现 RAII。例如,使用智能指针管理动态内存,使用 std::fstream 管理文件资源等。

#include <fstream>
#include <iostream>class FileHandler {
public:FileHandler(const std::string& filename) : file(filename) {if (!file.is_open()) {throw std::runtime_error("Failed to open file");}}~FileHandler() {file.close();}void write(const std::string& data) {file << data;}private:std::ofstream file;
};int main() {try {FileHandler fh("test.txt");fh.write("Hello, RAII!");} catch (const std::exception& e) {std::cerr << e.what() << std::endl;}return 0;
}

13. 调试和测试

13.1 调试技巧

调试是程序开发中的重要环节,掌握调试技巧可以提高开发效率。

问题: 如何使用 GDB 调试 C++ 程序?

答案:

  • 编译时添加 -g 选项生成调试信息。
  • 使用 gdb 启动程序,设置断点,单步执行,查看变量值等。
g++ -g -o my_program my_program.cpp
gdb ./my_program

问题: 如何使用 assert 进行调试?

答案:
assert 是用于检查条件的宏,如果条件为假,程序会终止并输出错误信息。

#include <cassert>
#include <iostream>int main() {int x = 5;assert(x == 5);std::cout << "Assertion passed" << std::endl;return 0;
}

13.2 单元测试

单元测试是软件开发中的重要实践,用于验证代码的各个单元(如函数、类)是否按预期工作。

问题: 什么是单元测试?为什么需要单元测试?

答案:

  • 单元测试是对代码的最小可测试单元(如函数、方法)进行测试的过程。
  • 单元测试可以帮助开发者尽早发现代码中的错误,提高代码质量,减少回归问题的发生。

问题: 如何使用 Google Test 进行单元测试?

答案:
Google Test 是一个流行的 C++ 单元测试框架。以下是一个简单的示例:

#include <gtest/gtest.h>int add(int a, int b) {return a + b;
}TEST(AddTest, HandlesPositiveInput) {EXPECT_EQ(add(1, 2), 3);EXPECT_EQ(add(10, 20), 30);
}TEST(AddTest, HandlesNegativeInput) {EXPECT_EQ(add(-1, -2), -3);EXPECT_EQ(add(-10, -20), -30);
}int main(int argc, char **argv) {::testing::InitGoogleTest(&argc, argv);return RUN_ALL_TESTS();
}

编译并运行测试:

g++ -std=c++11 -isystem /path/to/gtest/include -pthread test.cpp /path/to/gtest/libgtest.a /path/to/gtest/libgtest_main.a -o test
./test

13.3 性能分析

性能分析是优化代码性能的关键步骤,帮助开发者找到代码中的性能瓶颈。

问题: 如何使用 gprof 进行性能分析?

答案:
gprof 是一个常用的性能分析工具,可以生成函数调用图和执行时间统计。

  1. 编译时添加 -pg 选项:

    g++ -pg -o my_program my_program.cpp
    
  2. 运行程序生成性能数据:

    ./my_program
    
  3. 使用 gprof 分析性能数据:

    gprof my_program gmon.out > analysis.txt
    

问题: 如何使用 valgrind 进行内存分析?

答案:
valgrind 是一个强大的工具,用于检测内存泄漏和内存错误。

  1. 安装 valgrind

    sudo apt-get install valgrind
    
  2. 使用 valgrind 运行程序:

    valgrind --leak-check=full ./my_program
    
  3. 查看输出,分析内存泄漏和错误。


14. C++ 编码规范

14.1 命名规范

良好的命名规范可以提高代码的可读性和可维护性。

问题: C++ 中常见的命名规范有哪些?

答案:

  • 变量和函数名使用小写字母和下划线分隔(snake_case)。
  • 类名使用大写字母开头的驼峰命名法(PascalCase)。
  • 常量名使用全大写字母和下划线分隔(UPPER_CASE)。

问题: 为什么命名规范很重要?

答案:
命名规范可以提高代码的可读性,使其他开发者更容易理解代码的意图,减少沟通成本。

14.2 代码格式化

代码格式化是保持代码风格一致的重要手段。

问题: 如何使用 clang-format 格式化代码?

答案:
clang-format 是一个自动格式化 C++ 代码的工具。

  1. 安装 clang-format

    sudo apt-get install clang-format
    
  2. 创建配置文件 .clang-format

    clang-format -style=llvm -dump-config > .clang-format
    
  3. 格式化代码:

    clang-format -i my_program.cpp
    

15. C++ 项目构建

15.1 Makefile

Makefile 是用于自动化构建 C++ 项目的工具。

问题: 如何编写一个简单的 Makefile

答案:
以下是一个简单的 Makefile 示例:

CXX = g++
CXXFLAGS = -std=c++11 -Wall
TARGET = my_program
SRCS = main.cpp utils.cpp
OBJS = $(SRCS:.cpp=.o)all: $(TARGET)$(TARGET): $(OBJS)$(CXX) $(CXXFLAGS) -o $(TARGET) $(OBJS)%.o: %.cpp$(CXX) $(CXXFLAGS) -c $< -o $@clean:rm -f $(OBJS) $(TARGET)

问题: 如何使用 make 构建项目?

答案:
在项目根目录下运行以下命令:

make

15.2 CMake

CMake 是一个跨平台的构建工具,可以生成 Makefile 或其他构建系统的配置文件。

问题: 如何编写一个简单的 CMakeLists.txt

答案:
以下是一个简单的 CMakeLists.txt 示例:

cmake_minimum_required(VERSION 3.10)
project(MyProgram)set(CMAKE_CXX_STANDARD 11)add_executable(my_program main.cpp utils.cpp)

问题: 如何使用 CMake 构建项目?

答案:

  1. 创建构建目录并进入:

    mkdir build
    cd build
    
  2. 运行 cmake 生成构建文件:

    cmake ..
    
  3. 使用 make 构建项目:

    make
    

16. C++ 未来发展趋势

16.1 C++23 新特性

C++23 是 C++ 的下一个版本,预计将引入更多新特性。

问题: C++23 可能引入哪些新特性?

答案:

  • 模块化标准库(Modular Standard Library)。
  • 协程改进(Coroutine Improvements)。
  • 更强大的概念支持(Enhanced Concepts)。

16.2 C++ 的未来

C++ 作为一门历史悠久的语言,仍在不断进化。

问题: C++ 的未来发展方向是什么?

答案:

  • 更加注重性能和安全性。
  • 引入更多现代编程范式,如函数式编程。
  • 提高开发效率,减少语言复杂性。

结语

C++ 是一门强大且复杂的语言,掌握其核心概念和高级特性对于成为一名优秀的 C++ 开发者至关重要。本文涵盖了许多经典的 C++ 面试题,希望能够帮助读者更好地准备面试,并在实际开发中运用这些知识。无论是初学者还是经验丰富的开发者,持续学习和实践都是提升技能的关键。

相关文章:

【CPP】CPP经典面试题

文章目录 引言1. C 基础1.1 C 中的 const 关键字1.2 C 中的 static 关键字 2. 内存管理2.1 C 中的 new 和 delete2.2 内存泄漏 3. 面向对象编程3.1 继承和多态3.2 多重继承 4. 模板和泛型编程4.1 函数模板4.2 类模板 5. STL 和标准库5.1 容器5.2 迭代器 6. 高级特性6.1 移动语义…...

STM32的HAL库开发---通用定时器(TIMER)---定时器脉冲计数

一、脉冲计数实验原理 1、 外部时钟模式1&#xff1a;核心为蓝色部分的时基单元&#xff0c;时基单元的时钟源可以来自四种&#xff0c;分别是内部时钟PCLK、外部时钟模式1&#xff0c;外部时钟模式2、内部定时器触发&#xff08;级联&#xff09;。而脉冲计数就是使用外部时钟…...

在C#中,Array,List,ArrayList,Dictionary,Hashtable,SortList,Stack的区别

Array Array你可以理解为是所有数组的大哥 普通数组 : 特点是长度固定, 只能存储相同类型的数据 static void Main(string[] args){//声明int[] ints;string[] strings;People[] peoples;//默认值 //int 类型是 0//string 类型是 nullint[] ints1 { 1, 2, 3 };string[] …...

Ollama 部署本地大语言模型

一、下载安装ollama 1.百度 ollama Ollama 2.点击下载 可以复制下载链接&#xff0c;使用下载器下载。 3.双击安装 默认安装目录&#xff1a;C:\Users\用户名\AppData\Local\Programs\Ollama 二、更改模型下载目录 0.默认下载目录 (跳过) 之前没下载过模型&#xff0c;不…...

sql批量更新和删除语句

1.更新一条数据 update om_sellorder set SOSTATUS2 where id 283d3eb87b134e1c993b70b018406285 2.更新多个数据为某一个特点值 string ID context.Request["ID"]; //需要替换‘,’逗号&#xff0c;不然识别不出ID数据这里注意 ‘ID’ 是一个逗号&#xff08;&a…...

探索从传统检索增强生成(RAG)到缓存增强生成(CAG)的转变

在人工智能快速发展的当下&#xff0c;大型语言模型&#xff08;LLMs&#xff09;已成为众多应用的核心技术。检索增强生成&#xff08;RAG&#xff09;&#xff08;RAG 系统从 POC 到生产应用&#xff1a;全面解析与实践指南&#xff09;和缓存增强生成&#xff08;CAG&#x…...

基于ArcGIS的SWAT模型+CENTURY模型模拟流域生态系统水-碳-氮耦合过程研究

流域是一个相对独立的自然地理单元&#xff0c;它是以水系为纽带&#xff0c;将系统内各自然地理要素连结成一个不可分割的整体。碳和氮是陆地生态系统中最重要的两种化学元素&#xff0c;而在流域系统内&#xff0c;水-碳-氮是相互联动、不可分割的耦合体。随着流域内人类活动…...

深入浅出:机器学习的全面解析

深入浅出&#xff1a;机器学习的全面解析 引言 机器学习&#xff08;Machine Learning, ML&#xff09;作为人工智能的一个重要分支&#xff0c;近年来取得了显著进展&#xff0c;并在多个领域中得到了广泛应用。本文将从基础概念、核心算法、应用场景以及未来发展趋势等方面…...

go运算符

内置运算符 算术运算符关系运算符逻辑运算符位运算符赋值运算符 算术运算符 注意&#xff1a; &#xff08;自增&#xff09;和–&#xff08;自减&#xff09;在 Go 语言中是单独的语句&#xff0c;并不是运算符 package mainimport "fmt"func main() {fmt.Printl…...

w196Spring Boot高校教师科研管理系统设计与实现

&#x1f64a;作者简介&#xff1a;多年一线开发工作经验&#xff0c;原创团队&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取&#xff0c;记得注明来意哦~&#x1f339;赠送计算机毕业设计600个选题excel文…...

SQL Server 数据库迁移到 MySQL 的完整指南

文章目录 引言一、迁移前的准备工作1.1 确定迁移范围1.2 评估兼容性1.3 备份数据 二、迁移工具的选择2.1 使用 MySQL Workbench2.2 使用第三方工具2.3 手动迁移 三、迁移步骤3.1 导出 SQL Server 数据库结构3.2 转换数据类型和语法3.3 导入 MySQL 数据库3.4 迁移数据3.5 迁移存…...

安卓7以上抓包证书安装

安卓7以上抓包证书安装 fiddler 用户可以直接试试这个文件 前提是要root过了&#xff0c;如果是模拟器就很容易开启 前提&#xff1a;要有openssl工具&#xff0c;在linux一个指令就可以下载了&#xff1a;sudo apt-get install openssl,windons则是在https://www.openssl.org/…...

C基础寒假练习(8)

一、终端输入10个学生成绩&#xff0c;使用冒泡排序对学生成绩从低到高排序 #include <stdio.h> int main(int argc, const char *argv[]) {int arr[10]; // 定义一个长度为10的整型数组&#xff0c;用于存储学生成绩int len sizeof(arr) / sizeof(arr[0]); // 计算数组…...

10. k8s二进制集群之Kube Scheduler部署

在开始之前需要准备什么?创建kube-scheduler证书请求文件【即证书的生成⓵】根据上面证书配置文件生成kube-scheduler证书【即证书的生成⓶】创建与关联kube-scheduler配置文件(为后面生成系统服务做准备)创建kube-scheduler服务配置文件【准备系统服务⓵】创建kube-schedul…...

低代码开发与传统开发:未来的技术路线选择

在科技飞速发展的当下&#xff0c;软件开发技术日新月异&#xff0c;低代码开发与传统开发作为两种重要的开发模式&#xff0c;正站在未来技术路线选择的十字路口&#xff0c;引发了众多企业和开发者的关注。它们各自有着独特的优势和适用场景&#xff0c;究竟该如何抉择&#…...

HIVE如何注册UDF函数

如果注册UDF函数的时候报了上面的错误&#xff0c;说明hdfs上传的路径不正确&#xff0c; 一定要用下面的命令 hadoop fs -put /tmp/hive/111.jar /user/hive/warehouse 一定要上传到上面路径&#xff0c;这样在创建函数时&#xff0c;引用下面的地址就可以创建成功...

Got socket exception during request. It might be caused by SSL misconfiguration

引入xutils3依赖&#xff0c;结果包找不到 maven里面添加阿里云镜像 核心 maven { url uri("https://maven.aliyun.com/nexus/content/groups/public/") }repositories {google()maven { url uri("https://maven.aliyun.com/nexus/content/groups/public/"…...

ORACLE 数据库的启动和关闭

文章目录 1、 启动 ORACLE 数据库的三步操作2、 关闭 ORACLE 数据库的三步操作3 、启动和关闭 ORACLE 数据库的相关命令4、 启动和关闭 ORACLE 数据库 1、 启动 ORACLE 数据库的三步操作 1、启动数据库并使它可用&#xff0c;有三步操作&#xff1a;a、启动一个实例b、装配数据…...

搭建集成开发环境PyCharm

1.下载安装Python&#xff08;建议下载并安装3.9.x&#xff09; https://www.python.org/downloads/windows/ 要注意勾选“Add Python 3.9 to PATH”复选框&#xff0c;表示将Python的路径增加到环境变量中 2.安装集成开发环境Pycharm http://www.jetbrains.com/pycharm/…...

Python 学习与开发:高效编程技巧与实用案例

Python 学习与开发&#xff1a;高效编程技巧与实用案例 Python 是现代编程语言中最受欢迎的一种&#xff0c;它以简洁、易读的语法和强大的功能广泛应用于数据分析、人工智能、Web开发等多个领域。无论你是 Python 新手还是有经验的开发者&#xff0c;掌握一些高效编程技巧和实…...

Twitter 安卓客户端安装包下载

Twitter 安卓客户端安装包下载 项目地址:https://gitcode.com/open-source-toolkit/a16c4 欢迎来到Twitter安卓客户端安装包资源页&#xff01;在这里&#xff0c;您可以获取适用于Android设备的Twitter应用安装文件。请注意&#xff0c;下载过程中可能会遇到速度较慢的情况&…...

openAI官方prompt技巧(一)

1. 使用最新的模型 2. 将指令放在提示词的开头&#xff0c;并使用 ### 或 """ 来分隔指令和上下文&#xff0c;例如 错误示范❌ 将下面的文本总结为一个要点列表&#xff0c;列出最重要的内容。 Summarize the text below as a bullet point list of the most…...

小众收集癖好

文章目录 邮票收藏古钱币收藏手表收藏黑胶唱片收藏文玩核桃收藏紫砂壶收藏陶瓷收藏书画收藏古籍收藏奇石收藏根雕艺术其他 邮票收藏 稀有性&#xff1a;越少见的邮票通常价值越高&#xff0c;特别是那些发行量极小或因为某种原因被召回的邮票。例如&#xff1a;早期邮票、错版…...

从 .NET Framework 升级到 .NET 8 后 SignalR 问题处理与解决方案

随着 .NET Framework 向 .NET 8 的迁移&#xff0c;许多开发者在使用 SignalR 时遇到了一些前后端连接、配置、调用等方面的问题。尤其是在处理 SignalR 实时通信功能时&#xff0c;升级后的一些兼容性问题可能导致应用程序无法正常工作。本文将介绍在从 .NET Framework 升级到…...

【2024华为OD-E卷-100分-箱子之字形摆放】((题目+思路+JavaC++Python解析)

题目描述 给定一个宽度为 width 的仓库&#xff0c;要求将 n 个箱子按之字形&#xff08;Zigzag&#xff09;方式摆放。每个箱子的宽度都是 1&#xff0c;箱子必须摆放在仓库的同一层上&#xff0c;且摆放过程中不能重叠。 之字形摆放的定义是&#xff1a;箱子交替地向左和向…...

基于SpringBoot养老院平台系统功能实现五

一、前言介绍&#xff1a; 1.1 项目摘要 随着全球人口老龄化的不断加剧&#xff0c;养老服务需求日益增长。特别是在中国&#xff0c;随着经济的快速发展和人民生活水平的提高&#xff0c;老年人口数量不断增加&#xff0c;对养老服务的质量和效率提出了更高的要求。传统的养…...

如何打造一个更友好的网站结构?

在SEO优化中&#xff0c;网站的结构往往被忽略&#xff0c;但它其实是决定谷歌爬虫抓取效率的关键因素之一。一个清晰、逻辑合理的网站结构&#xff0c;不仅能让用户更方便地找到他们需要的信息&#xff0c;还能提升搜索引擎的抓取效率 理想的网站结构应该像一棵树&#xff0c;…...

蓝桥杯备赛——进制转化相关问题

目录 一、基础概念 二、问题研究&#xff08;1&#xff09; 代码解读&#xff1a; 1. transfer 函数 代码功能概述 详细步骤 2. main 函数 代码功能概述 详细步骤 三、运用递归解决 &#xff08;一&#xff09; 代码如下&#xff1a; 代码解读&#xff1a; &#…...

ubuntu20.04+RTX4060Ti大模型环境安装

装显卡驱动 这里是重点&#xff0c;因为我是跑深度学习的&#xff0c;要用CUDA&#xff0c;所以必须得装官方的驱动&#xff0c;Ubuntu的附件驱动可能不太行. 进入官网https://www.nvidia.cn/geforce/drivers/&#xff0c;选择类型&#xff0c;最新版本下载。 挨个运行&#…...

汽车智能座舱的技术演进与用户体验重构 —— 基于多模态交互与 AI 融合的范式创新

摘要&#xff1a; 汽车智能座舱作为人 - 车 - 环境交互的核心载体&#xff0c;正经历从功能驱动到体验驱动的范式变革。本文通过技术解构与用户行为分析&#xff0c;深入揭示智能座舱在异构计算、多模态感知、服务生态等维度的创新路径。研究表明&#xff0c;智能座舱的竞争焦…...

TresJS:用Vue组件构建3D场景的新选择

在当今数字化时代&#xff0c;3D图形技术正以前所未有的速度发展&#xff0c;从游戏开发到虚拟现实&#xff08;VR&#xff09;、增强现实&#xff08;AR&#xff09;&#xff0c;再到各种沉浸式体验&#xff0c;3D技术的应用场景日益丰富。TresJS作为一款基于Three.js的Web3D开…...

【鸿蒙HarmonyOS Next实战开发】实现ArkTS/JS和C/C++的交互-Node-API

一、HarmonyOS Node-API简介 在HarmonyOS应用开发中&#xff0c;通常以ArkTS/JS语言为主&#xff0c;但在一些特殊场景下&#xff0c;例如游戏开发、物理模拟等&#xff0c;由于对性能、效率等有较高要求&#xff0c;需要借助现有的C/C库来实现。为了满足这种需求&#xff0c;…...

QT笔记——多语言翻译

文章目录 1、概要2、多语言切换2.1、结果展示2.2、创建项目2.2、绘制UI2.2、生成“.st”文件2.4、生成“.qm”文件2.5、工程demo 1、概要 借助QT自带的翻译功能&#xff0c;实现实际应用用进行 “多语言切换” 2、多语言切换 2.1、结果展示 多语言切换 2.2、创建项目 1、文件…...

JPG、PNG、GIF有什么区别?

JPG、PNG、GIF是三种常见的数字图像格式&#xff0c;它们各自具有不同的特点和适用场景。以下是它们之间的主要区别以及如何进行选择&#xff1a; 一、JPG与PNG、GIF的区别 1. JPG&#xff08;JPEG&#xff09;&#xff1a; 特点&#xff1a;JPG是一种有损压缩的图像格式&…...

Excel 融合 deepseek

效果展示 代码实现 Function QhBaiDuYunAIReq(question, _Optional Authorization "Bearer ", _Optional Qhurl "https://qianfan.baidubce.com/v2/chat/completions")Dim XMLHTTP As ObjectDim url As Stringurl Qhurl 这里替换为你实际的URLDim postD…...

机器学习在环境科学中的应用

机器学习在环境科学中的应用 第一节 机器学习的基本概念 什么是机器学习 机器学习是一种通过对大量数据的学习和分析&#xff0c;让计算机系统能够逐渐改善其性能和行为的技术。它通过建立数学模型来识别数据中的模式和规律&#xff0c;进而进行预测和决策。 机器学习在环境科学…...

【AIGC魔童】DeepSeek v3推理部署:vLLM/SGLang/LMDeploy

【AIGC魔童】DeepSeek v3推理部署&#xff1a;vLLM/SGLang/LMDeploy &#xff08;1&#xff09;使用vLLM推理部署DeepSeek&#xff08;2&#xff09;使用SGLang推理部署DeepSeek&#xff08;3&#xff09;使用LMDeploy推理部署DeepSeek &#xff08;1&#xff09;使用vLLM推理部…...

Monorepo保姆级教程

Monorepo是一种将多个项目或组件存储在一个统一的代码仓库中的策略&#xff0c;旨在提高代码复用性和团队协作效率。以下是一个详细的Monorepo管理多个项目的保姆级教程&#xff1a; 1. 初始化项目 首先&#xff0c;创建一个新的项目目录并初始化为Git仓库&#xff1a; mkdi…...

【蓝桥杯—单片机】第十一届省赛真题代码题解题笔记 | 省赛 | 真题 | 代码题 | 刷题 | 笔记

第十一届省赛真题代码部分 前言赛题代码思路笔记竞赛板配置内部振荡器频率设定键盘工作模式跳线扩展方式跳线 建立模板明确设计要求和初始状态显示功能部分数据界面第一部分第二部分第三部分调试时发现的问题 参数设置界面第一部分第二部分和第四部分第三部分和第五部分 按键功…...

hive的几种复杂数据类型

Hive的几种复杂数据类型 Hive 提供了几种复杂数据类型&#xff0c;能够支持更灵活和多样的数据存储。这些复杂数据类型对于处理嵌套数据或不规则数据特别有用。主要包括以下几种&#xff1a; 文章目录 Hive的几种复杂数据类型1. 数组&#xff08;ARRAY&#xff09;2. 结构体&a…...

使用 `WITH` 子句优化复杂 SQL 查询

使用 WITH 子句优化复杂 SQL 查询 在 SQL 中&#xff0c;处理复杂的查询需求时&#xff0c;代码往往会变得冗长且难以维护。为了解决这个问题&#xff0c;SQL 提供了 WITH 子句&#xff08;也称为公用表表达式&#xff0c;Common Table Expression&#xff0c;CTE&#xff09;…...

k8s网络插件及基础命令

一、k8s的cni网络插件 1.k8s的内部网络模式 pod内的容器与容器之间的通信。一个节点上的pod之间的通信&#xff0c;docker0网桥直接通信。不同节点上的pod之间的通信&#xff1a;通过物理网卡的ip地址和其他节点上的物理网卡的设备进行通信&#xff0c;然后把流量转发到指定的…...

组合总和II(力扣40)

这道题的难点就在于题目所给的集合中有重复的数字&#xff0c;我们需要进行去重操作。首先明确去重指的是去重哪一部分。注意并不是对递归的集合去重&#xff0c;而是对当前集合的遍历进行去重。这么说可能有点抽象&#xff0c;举个例子&#xff1a;假设集合为1,1,2,3,4&#x…...

【vue3 入门到实战】7. 标签中的 ref

目录 1. ref 的作用 2. 如何使用 1. ref 的作用 用于注册模板引用 用在普通DOM标签上&#xff0c;获取的是DOM节点。 用在组件标签上&#xff0c;获取的是组件的实例对象。 2. 如何使用 代码如下 <template><div class"app"><h2 ref"titl…...

MAC OS安装Homebrew

文章目录 1.下载Homebrew2.完成安装3.验证安装4.更新 Homebrew作为一个包管理器&#xff0c;提供了一种简便的方式来安装、更新和卸载各种命令行工具和应用程序。相比于手动下载和编译源代码&#xff0c;或者从不同的网站下载安装包&#xff0c;使用Homebrew可以显著减少这些操…...

数据结构之栈和队列(超详解)

文章目录 概念与结构栈队列 代码实现栈栈是否为空&#xff0c;取栈顶数据、栈的有效个数 队列入队列出队列队列判空&#xff0c;取队头、队尾数据&#xff0c;队列的有效个数 算法题解有效的括号用队列实现栈用栈实现队列复用 设计循环队列数组结构实现循环队列构造、销毁循环队…...

[Deepseek-自定义Ollama 安装路径+lmStudio 简易安装]

ollama 先下载 https://ollama.org.cn/download 使用 发现报错 检查路径 自己的路径! 再用 .\OllamaSetup.exe /DIRE:\MySoftware\Ollama 删除掉 多余模型 ollama delete <model_name> 例如 ollama delete deepseek-r1:1.5b 下载 ollama run deepseek-r1:1.5b…...

uniapp mqttjs 小程序开发

在UniApp中集成MQTT.js开发微信小程序时&#xff0c;需注意平台差异、协议兼容性及消息处理等问题。以下是关键步骤与注意事项的综合指南&#xff1a; 一、环境配置与依赖安装 安装MQTT.js 推荐使用兼容性较好的版本&#xff1a;mqtt4.1.0&#xff08;H5和小程序兼容性最佳&…...

LabVIEW位移测量系统

本文介绍了一种基于LabVIEW的位移测量系统&#xff0c;结合先进的硬件设备与LabVIEW平台的强大功能&#xff0c;能够实现对位移的精确测量和高效数据处理。该系统具备高精度、实时性和良好的可扩展性&#xff0c;适用于工程与科学实验中对位移测量的多种需求。 项目背景 位移…...

VMware下Linux和macOS遇到的一些问题总结

1.解决.NET程序通过网盘传到Linux和macOS不能运行的问题 这是文件权限的问题。当你通过U盘将文件传输到虚拟机的macOS和Linux系统时&#xff0c;文件的权限和所有权可能得到了保留或正确设置。但如果你通过网盘上传&#xff0c;文件的权限或所有权可能没有正确设置&#xff0c…...