类和结构体
类和结构体的区别类和结构体是面向对象编程中两种重要的数据结构,它们有以下主要区别: 1. 默认访问控制 类:成员默认为私有(private) 结构体:成员默认为公开(public) 2. 内存分配位置 类:通常在堆(heap)上分配内存 结构体:通常在栈(stack)上分配内存 3. 继承特性 类:可以实现继承、多态等完整的面向对象特性 结构体:在许多语言中不支持继承或有限支持继承 4. 语言差异不同编程语言对类和结构体的区别处理不同: C++1234567891011struct Point { int x; // 默认public int y;};class Point { int x; // 默认private int y;public: void setPoint(int a, int b) { x = a; y = b; }}; C#12345678910111213// 值类型,存储在栈上struct Point { public int X; ...
OSI模型
我们一般说网络有七层,是指OSI模型,从下到上依次为: 物理层 (Physical Layer) 数据链路层 (Data Link Layer) 网络层 (Network Layer) 传输层 (Transport Layer) 会话层 (Session Layer) 表示层 (Presentation Layer) 应用层 (Application...
构造函数
C++中的构造函数在C++中,构造函数是类中用于初始化对象的特殊成员函数。它们与类同名,没有返回类型(连void也没有)。以下是C++中常见的构造函数类型: 1. 默认构造函数 定义:不带参数或所有参数有默认值的构造函数。 作用:创建对象时无需提供初始值。 示例:1234567class MyClass {public: MyClass() { x = 0; } // 默认构造函数private: int x;};MyClass obj; // 调用默认构造函数 2. 参数化构造函数 定义:带参数的构造函数,用于初始化对象的成员。 作用:允许通过参数传递初始值。 示例:1234567class MyClass {public: MyClass(int val) : x(val) {} // 参数化构造函数private: int x;};MyClass obj(10); // 调用参数化构造函数 3....
http,tcp与websocket
HTTP协议、TCP协议、WebSocket的区别以下是HTTP协议、TCP协议和WebSocket的区别,从定义、功能、特点等多个方面进行比较: 1. TCP协议 定义:TCP(Transmission Control Protocol,传输控制协议)是传输层协议,属于OSI模型的第四层或TCP/IP模型的传输层。 功能: 提供可靠的、面向连接的数据传输。 确保数据按序到达、无丢失、无重复,通过三次握手建立连接、四次挥手断开连接。 提供流量控制和拥塞控制机制。 特点: 可靠性:通过确认机制(ACK)、重传机制和错误检测确保数据完整性。 面向连接:通信前需建立连接,通信后需断开连接。 适用场景:需要高可靠性的场景,如文件传输(FTP)、电子邮件(SMTP)、HTTP等。 缺点:相比UDP,开销较大,速度较慢。 与HTTP/WebSocket的关系: TCP是HTTP和WebSocket的底层传输协议,HTTP和WebSocket依赖TCP提供可靠的数据传输。 2. HTTP协议 定义:HTTP(HyperText Transfer...
进程的信息与如何设置进程退出
查看进程信息与设置进程优雅退出以下是如何在Linux/Unix系统中查看进程信息以及设置进程优雅退出的方法,使用常用命令和工具,结合C++编程示例。 1. 查看进程信息方法1:使用 ps 命令ps 命令用于显示进程信息,常用选项如下: ps aux:显示所有用户的所有进程。 a:显示所有用户的进程。 u:显示详细用户信息。 x:显示无终端的进程。 ps -ef:显示所有进程,包含完整命令行。 ps -p <PID>:查看指定进程ID(PID)的详细信息。 示例:查看所有进程的PID、用户、CPU/内存使用情况: 1ps aux 输出示例: 123USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMANDroot 1 0.0 0.1 123456 7892 ? Ss Jun28 0:01 /sbin/initalice 1234 1.2 0.5 987654 12345 pts/0 S ...
stl中的无序关联容器底层实现
unordered_map 时间复杂度与底层实现以下是对 C++ 中 unordered_map 时间复杂度、底层实现以及哈希冲突解决方法的详细分析。 1. unordered_map 时间复杂度unordered_map 是 C++ STL 中的无序关联容器,基于哈希表实现。其操作的时间复杂度如下: 平均情况: 插入(insert)、查找(find)、删除(erase):( O(1) )(常数时间)。 这是因为哈希表通过哈希函数将键映射到桶(bucket),平均情况下每个桶的元素很少,操作接近常数时间。 最坏情况: 插入、查找、删除:( O(n) ),其中 ( n ) 是容器中元素数量。 最坏情况发生在哈希冲突严重时,例如所有键都映射到同一个桶,导致桶内元素形成长链表或类似结构。 导致 ( O(n) ) 的情况 哈希函数质量差:如果哈希函数将大量键映射到同一桶,冲突增加,桶内查找退化为线性搜索。 高负载因子:负载因子(load_factor = 元素数 / 桶数)过高,导致更多冲突。C++ 默认最大负载因子为 1.0,当超过时会触发...
vector与array
vector 与 array 的区别以下是 C++ 中 std::vector 和 std::array 的区别,涵盖定义、特点、性能和使用场景等方面。 1. 定义 **std::vector**: 动态数组,来自 <vector> 头文件。 可以在运行时动态调整大小,支持插入、删除元素。 基于堆内存分配,容量不足时自动扩容。 **std::array**: 固定大小数组,来自 <array> 头文件(C++11 引入)。 封装了 C 风格数组,长度在编译时确定,无法动态改变。 通常分配在栈上(或静态存储区)。 2. 主要区别 特性 std::vector std::array 大小 动态大小,可通过 resize、push_back 等调整 固定大小,编译时确定 内存分配 堆内存,动态分配 栈内存(通常)或静态存储区 性能 访问速度快,但扩容/重新分配有开销 访问速度快,无动态分配开销 容量管理 支持 capacity 和 reserve,可预分配空间 无容量概念,大小固定 接口 丰富(如...
操作系统中的调度算法
操作系统中的调度算法操作系统中的调度算法用于决定进程或线程的执行顺序,以优化 CPU 利用率、吞吐量、响应时间等。以下是常见的调度算法,分为非抢占式和抢占式两类: 1. 非抢占式调度算法进程一旦获得 CPU,将运行至完成或主动让出 CPU。 先来先服务(First-Come, First-Served, FCFS): 按进程到达顺序执行。 优点:简单,易实现。 缺点:可能导致“短进程等待长进程”问题(护送效应),平均等待时间长。 时间复杂度:队列操作 ( O(1) )。 短作业优先(Shortest Job First, SJF): 选择预计运行时间最短的进程优先执行。 优点:最小化平均等待时间(理论上最优)。 缺点:需预知运行时间,难以实现;长进程可能饥饿。 时间复杂度:选择最短进程 ( O(n) ),可用优先队列优化。 优先级调度(Priority Scheduling): 根据进程优先级调度,优先级高的先执行。 优点:支持重要进程优先。 缺点:低优先级进程可能饥饿。 时间复杂度:取决于优先级队列实现,通常 ( O(\log n) )。 2....
用户态和内核态的区别及切换方法
用户态与内核态的区别及切换用户态(User Mode)和内核态(Kernel Mode)是操作系统中两种不同的运行状态,用于隔离用户程序和系统核心功能,以确保安全性和稳定性。以下是两者的区别及切换机制。 1. 用户态与内核态的区别 特性 用户态 (User Mode) 内核态 (Kernel Mode) 定义 应用程序运行的状态,受限访问权限 操作系统核心运行的状态,拥有完全控制权 权限级别 低权限(Ring 3),无法直接访问硬件或核心资源 高权限(Ring 0),可直接访问硬件和系统资源 可访问资源 受限,仅能访问用户空间内存和部分指令 可访问所有内存、硬件设备和特权指令 典型操作 执行用户程序、调用库函数、处理用户逻辑 执行系统调用、中断处理、设备驱动管理 安全性 隔离运行,防止程序破坏系统 完全控制,可能导致系统崩溃 性能开销 较高,因需通过系统调用访问内核 较低,直接访问资源 用户态: 用户程序(如浏览器、文本编辑器)运行在此状态。 只能访问用户空间内存,无法直接操作硬件(如 CPU、磁盘)或修改内核数据。 通过系统调用(如...
c++内存管理
C++ 内存管理与 malloc(无垃圾回收机制)C++ 是一种手动管理内存的编程语言,开发者需要显式分配和释放内存。与依赖垃圾回收(Garbage Collection, GC)的语言(如 Java)不同,C++ 不提供内置的 GC 机制,内存管理主要通过 new/delete 和 C 风格的 malloc/free 实现。以下是 C++ 内存管理的核心内容,重点介绍 malloc 及相关概念。 1. C++ 内存管理概述C++ 程序的内存分为以下主要区域: 栈(Stack): 存储局部变量、函数参数和返回地址。 由编译器自动分配和释放,速度快,生命周期固定。 示例:int x = 10;(栈上分配)。 堆(Heap): 用于动态分配内存,生命周期由程序员控制。 使用 new/delete 或 malloc/free 管理。 示例:int* p = new...




