在高并发短连接场景中,TCP 连接的频繁建立与释放可能导致系统出现连接耗尽或连接建立失败的问题。
CPP 内存管理
发表于
分类于
interview
Vcpkg manifest 简单介绍
发表于
分类于
vcpkg
什么是清单模式?
- 在工程根目录的
CMakeLists.txt
文件中添加如下内容:
1 | if(CMAKE_HOST_WIN32) |
常用的bash命令
发表于
分类于
bash
第三方库typedef重定义冲突的一种解决方案
发表于
分类于
c++
桌面端程序开机自启动代码实现
Linux操作系统面试题(2)——网络
Linux操作系统面试题(1)
1. 进程和线程的区别
- 进程有独立的地址空间,线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间;
- 进程和线程切换时,需要切换进程和线程的上下文,进程的上下文切换时间开销远远大于线程上下文切换时间,耗费资源较大,效率要差一些;
- 进程的并发性较低,线程的并发性较高;
- 每个独立的进程有一个程序运行的入口、顺序执行序列和程序的出口,但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制;
- 系统在运行的时候会为每个进程分配不同的内存空间;而对线程而言,除了 CPU 外,系统不会为线程分配内存(线程所使用的资源来自其所属进程的资源),线程组之间只能共享资源;
- 一个进程崩溃后,在保护模式下不会对其他进程产生影响,但是一个线程崩溃整个进程都死掉。所以多进程要比多线程健壮;
STL面试题(1)
1. STL 中有哪些常见的容器
- 顺序容器 容器并非排序的,元素的插入位置同元素的值无关,包含 vector、deque、list;
- vector:动态数组 元素在内存连续存放。随机存取任何元素都能在常数时间完成。在尾端增删元素具有较佳的性能;
- deque:双向队列 元素在内存连续存放。随机存取任何元素都能在常数时间完成(仅次于 vector )。在两端增删元素具有较佳的性能(大部分情况下是常数时间);
- list:双向链表 元素在内存不连续存放。在任何位置增删元素都能在常数时间完成。不支持随机存取;
- 关联式容器 元素是排序的;插入任何元素,都按相应的排序规则来确定其位置;在查找时具有非常好的性能;通常以平衡二叉树的方式实现,包含set、multiset、map、multimap;
- set/multiset set中不允许相同元素,multiset 中允许存在相同元素;
- map/multimap map 与 set 的不同在于 map 中存放的元素有且仅有两个成员变,一个名为 first,另一个名为 second,map 根据 first 值对元素从小到大排序,并可快速地根据 first 来检索元素。map 和multimap 的不同在于是否允许相同 first 值的元素
- 容器适配器 封装了一些基本的容器,使之具备了新的函数功能,包含 stack、queue、priority_queue;
- stack:栈 栈是项的有限序列,并满足序列中被删除、检索和修改的项只能是最进插入序列的项(栈顶的项),后进先出
- queue:队列 插入只可以在尾部进行,删除、检索和修改只允许从头部进行,先进先出;
- priority_queue:优先级队列 内部维持某种有序,然后确保优先级最高的元素总是位于头部,最高优先级元素总是第一个出列。
CPP面试题(2)
1. C++引用的概念
- 引用(Reference)是 C++ 相对于 C 语言的一个扩充。引用可以看做是数据的一个别名,通过这个别名和原来的名字都能够找到这份数据。引用类似于 Windows 中的快捷方式,一个可执行程序可以有多个快捷方式,通过这些快捷方式和可执行程序本身都能够运行程序;引用还类似于人的绰号(笔名),使用绰号(笔名)和本名都能表示一个人;
- 基本语法 typename & ref = varname;
- 使用引用的注意事项:
- 引用必须引用合法的内存空间;
- 引用在定义时必须初始化;
- 引用一旦初始化后,就不能再引用其它数据;
- 引用在定义时需要加上 &,在使用时不能加 &,使用时加 & 表示取地址;
- 函数中不要返回局部变量的引用;
- 引用的本质是指针,低层的实现还是指针;