Linux网络编程 Part4 高并发服务器之二
线程池并发服务器 为什么要引入线程池,不直接用之前的多线程并发? 因为多线程并发要频繁地对线程进行创建与销毁(一旦有客户端传来需求,就创建一个新线程,通信结束就立刻销毁该线程),这会占用大量的CPU时间并导致不必要的系统开销 相关结构体 线程池结构体:描述线程池相关信息 pthread_mutex_t lock; /* 用于锁住本结构体 */ pt…
LeetCode hot100@链表
单链表定义方式: struct ListNode { int val; // 节点上存储的元素 ListNode *next; // 指向下一个节点的指针 ListNode(int x) : val(x), next(NULL) {} // 节点的构造函数 }; STL链表:list<int> mylist; 是一个双向循环链表,不需要关心节…
LeetCode hot100@矩阵
73. 矩阵置零✅ Solution1:先把零的位置找出来,用二维数组存起来,但这样额外空间是O(mn) Solution2改进:仅使用常量空间,即O(1) class Solution1 { public: void setZeroes(vector<vector<int>>& matrix) { int m = …
C++算法模板
C++ Array/Vector 二分 int search(vector<int>& nums, int target) {    int left = 0;    int right = nums.size() - 1; // 定义target在左闭右闭的区间里,[left, righ…
C++基础编程
1 C++初识 1.1 第一个C++程序 编写一个C++程序总共分为4个步骤 创建项目 创建文件 编写代码 运行程序 1.1.1 创建项目 Visual Studio是我们用来编写C++程序的主要工具,我们先将它打开 1.1.2 创建文件 右键源文件,选择添加->新建项 给C++文件起个名称,然后点击添加即可。 1.1.3 编写代码 #inc…
C++核心编程
1 内存分区模型 C++程序在执行时,将内存大方向划分为4个区域 代码区:存放函数体的二进制代码,由操作系统进行管理 全局区:存放全局变量、静态变量以及常量 栈区:由编译器自动分配释放, 存放函数的参数值、局部变量等 堆区:由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收 内存四区意义: 不同区域存放的数据,赋予不同的生命周期, 增加编…
C++提高编程
1 模板 1.1 模板的概念 模板就是建立通用的模具,大大提高复用性 模板的特点: 模板不可以直接使用,它只是一个框架 模板的通用并不是万能的 1.2 函数模板 C++另一种编程思想称为泛型编程,主要利用的技术就是模板 C++提供两种模板机制:函数模板和类模板 1.2.1 函数模板语法 函数模板作用:建立一个通用函数,其函数返回值类型和形参类型可以…
LeetCode hot100@数组
53. 最大子数组和❌ 贪心:不能让“连续和”为负数的时候加上下一个元素(因为直接把前面这一堆和为负数的子串抛弃就回来,后面怎么也会比加上个负数更大),而不是不让“连续和”加上一个负数(加上负数也没事,只要整体还算大) class Solution { public: int maxSubArray(vector<int>& n…