内存泄漏
内存泄露1️⃣ 什么是内存泄漏? 在 C++ 中,内存泄漏 指的是程序通过 new、malloc 等方式向 堆区 申请了内存,却在不再需要时 没有及时释放,或者由于 指针丢失、异常中断、所有权管理混乱 等原因,导致这块内存再也无法被程序有效访问和回收。 2️⃣ 内存泄漏的危害 性能退化: 泄漏内存会持续占用物理内存,当物理内存不足时,系统会启用 swap 分区,磁盘 IO 速度远低于内存,导致程序响应变慢、CPU 等待时间增加。 程序崩溃: 泄漏内存耗尽系统可用内存(包括 swap)时,操作系统会触发 “内存溢出(OOM)”,强制终止占用内存最多的进程。 资源耗尽: 对于长期运行的服务(如服务器程序),泄漏会持续累积,可能导致服务在运行一段时间后突然宕机,且难以复现根因。 3️⃣ 内存泄漏的分类 对于 Valgrind 来说,其主要将 内存泄漏 分为四类: Definitely Lost: 定义: 没有指针 p 可以指向一块已经分配的堆内存,100% 确定为泄漏; Indirectly Lost: 定义:...
服务器压力测试
服务器压力测试测试机(云服务器) 配置:CPU(4 核 )、内存(8GB) 安全组:允许所有 ip,连接服务器固定端口 port CPU 利用率: 总利用率:200% 单 CPU 利用率:50% 发家机(本地主机) 测试工具:Jmeter 配置:CPU(6 核)、内存(16GB) 测试选项 ThreadGroup 线程数:表示启动多少个用户; Ramp-Up:启动所有线程的时间; 循环次数:每个用户执行多少次配置的请求; 调度器:所有线程都到达后,持续的时间; HTTP 属性: 方法:Get 地址:8.137.169.217:8081 URL:/sylar/xx 和 / 连接超时:3s 响应超时:10s 阶段测试 协程服务器 打开日志 1000 线程 2000 线程 5000 线程 10000 线程 关日志 1000 线程 2000 线程 muduo 网络库 1000 线程 思路解析针对 开日志 的情况下: 1000 线程的吞吐量大概是 2700/sec,平均响应时间是 301 ms,错误率是...
csig_腾讯云(一面)
面经C++ 八股 继承和多态这种面向对象的设计?(把共同点抽出来复用,把不同点留给子类自己实现) 多态解决了什么问题,C++ 为什么要使用多态? 多态:主要用于对同一个接口,进行不同的实现; C++ 使用多态主要是解决代码复用; 不用继承,多态的这种设计应该怎么做呢? 静态多态:模板、函数重载、工厂函数 多态的虚函数可以是内联函数嘛? 虚函数可以是内联函数,类内定义的成员函数默认就有 inline 属性,在语法上完全没问题; “能声明成 inline” 和 “调用时真的被内联展开” 不是一回事。 inline 本质上只是给编译器一个建议 虚函数在通过 父类指针/引用调用时,是 运行时动态绑定,编译器在 编译阶段 通常不知道最终会调用哪个版本,所以一般不能直接内联; 纯虚函数是干嘛的? 这个行为必须有,但父类没法给出通用实现; 纯虚函数不可以被实例化; 强制子类实现接口,子类没有实现父类的纯虚函数,那子类自己也还是抽象类。 STL 了解吧,一起讲 map 和 unordered_map map 底层使用 红黑树; 按 key...
面经(快手_01)
面经C++ 基础 static 的作用是什么? 修饰局部变量: 只初始化一次局部变量,生命周期延长到整个程序运行期间,但作用域仍然只在当前函数内。 修饰全局变量/函数: 表示该符号只在当前源文件内可见,避免和其他文件同名冲突。 修饰类的成员变量: 表示这个成员变量属于整个类,而不是某个对象。所有对象共享同一份静态成员变量。 修饰类的成员函数: 表示这个函数属于类本身,调用时不依赖具体对象。 修饰类成员函数的作用是什么?什么情况下要用静态成员函数?举一个场景 作用: 静态成员函数属于类,而不属于某个对象,因此: 可以不创建对象直接调用; 不能访问非静态成员变量/非静态成员函数; 可以访问静态成员变量/静态成员函数; 使用时机: 当一个函数的逻辑不依赖某个具体对象的状态,但又希望它在 “类的命名空间” 下时,就适合定义成静态成员函数。 场景: 统计对象个数; const 静态成员函数内部能否修改类的非静态变量?为什么? C++ 里静态成员函数不能声明为 const 因为 const 成员函数本质上修饰的是隐藏参数...
靖安科技 (一面)
面试 用户鉴权 用的什么进行鉴权?鉴权方式是什么?证书鉴权的方式是什么? 两段式鉴权 业务登录鉴权:发生于 SDK 与 管理平台 之间 SDK 用 用户名/密码 + optional TOTP 调 SDKAuth,用于确认 “这个人是不是合法用户”。 SDK 登录成功后,平台会下发 ca/ cert /key/ server[],客户端再用这些材料去建立 OpenVPN 实例去建立连接。 VPN 接入鉴权:发生于 OpenVPN 插件与 管理平台 之间 到了服务端,插件在 TLS_VERIFY 阶段取客户端证书的 **序列号 SN 和 CN**,再调用同步 RPC 方法 CertStatus 查询这个证书当前是不是有效、属于哪个实体、对应哪个用户。 所以插件做的主鉴权不是用户名/密码,而是: mTLS 握手 远端证书状态校验。 证书里面的内容是什么?基于什么的呢? 这套系统底层是基于 X.509 证书 + PKI/CA 体系 的 OpenVPN 双向 TLS。 插件实际会读取证书里的 CN 和...
csig_腾讯视频 (一面凉经)
面试问题 有没有实际上有用户使用这个 vpn,插件是不是只是把客户端上报的数据存储起来?是线上的业务嘛? 第一版,确实有用户在使用; 插件 不只是一个只做客户端上报存储的插件,而是一个和 客户端 进行通信的 服务端控制组件; 插件至少做了三类实质工作: 在 OpenVPN 的 TLS_VERIFY 阶段调用平台的 CertStatus 做证书状态校验; 拉取 UserAccessRules,再用 nftables 下发用户级访问控制; 通过 UserConnection 上报连接状态,并通过 PluginMsgPipe 接收动态规则更新; 拥有 流量解析 和 Kafka 投递能力,这已经不是单纯埋点了; grpc 同步和异步通信框架怎么去实现的?原来是什么样的?提升了什么性能? 同步 RPC 主要用在必须马上拿结果的链路上,这些请求如果不马上返回,后续流程就走不下去; 异步 RPC 主要用在不应该阻塞 OpenVPN 主线程的地方,比如 用户访问规则拉取 和 连接状态上报。 双向流主要用在 长生命周期 控制通道上; 托管节点和平台之间是...
面经 csig_0318
面经 select/poll/epoll ,常见的有哪些输入事件? 针对 epoll,常见的有:读事件(EPOLLIN)、写事件(EPOLLPUT)、异常事件(EPOLLPRI) 环形缓冲区 解决了哪些问题? 环形缓冲区 通过 首尾相接 的方式,让读写指针循环移动,在 固定大小内存 里反复利用空间,这样可以减少数据搬移、减少频繁内存申请释放的开销。 编程常用的数据结构(数组 vector、链表 list、红黑树 map、哈希表 unordered_map) 链表环的检测方法?(快慢指针) 如何解决哈希冲突? 链地址法: 把哈希表的每个桶设计成一个链表,发生冲突时,就把元素挂到同一个桶后面。 开放定址法: 冲突后,不用链表,而是继续在表里找别的空位置存放。 线性探测: 冲突了就往后 一个一个 找; 二次探测: 冲突后按 平方步长 去找: rehash: 冲突太多,往往说明 表太小了。 这时通常会 申请更大的哈希表把原来的元素重新哈希后搬过去 常见排序算法?(快排、归并、堆排序) map...
面经 csig_0318
面经 多态在编程中起什么作用?(对同一个接口,进行不同的实现) 数据库 ACID 是什么?(原子性、一致性、隔离性、持久性) 数据库的隔离级别分别有哪些?分别会出现哪些问题?(读未提交、读提交、可重复读、串行化) TCP 和 UDP 的区别? TCP 是可靠的、面向连接的、基于字节流的传输层协议; UDP 是不可靠的、无连接的、基于报文的传输层协议; UDP 不可靠,为什么还要用? 正是因为 不可靠,所以带来了很多的优点:更快、更轻、更灵活; HTTPS 证书伪造的可能性?(HTTPS 证书理论上不是不能被伪造,但直接伪造一个被浏览器信任的证书非常难,因为需要受信任 CA 的签名) B树 和 B+树 的区别? B+ 树的非叶子节点不存放数据,只存放索引,支持在叶子节点层进行范围查询; 由于 B+ 树的非叶子节点只存放索引项,不存放数据,因此可以一个磁盘页可以存放更多的索引项,导致 B+ 树的高度不高,因此每次访问叶子节点的时候,需要对的磁盘 IO 更少; 服务器会不会存在 ping 得通,但是 tcp 无法连接得状况? ping 用的是...
面经 wxg_0312
面经 进程和线程的区别?(进程是资源分配的基本单位,线程是 CPU 调度的基本单位) 进程和线程的开销有没有差异?(进程切换时要切换更完整的上下文,线程切换通常更轻量) 协程了解过嘛?(协程是用户态线程,是程序员自己进行切换) 在应用程序中读文件涉及进程的切换嘛?(读文件一定会发生 用户态到内核态的切换;是否发生进程/线程切换,要看会不会 阻塞) 为什么要切换进程?(CPU 是并发处理操作系统的任务的,当前进程阻塞,就需要让出 CPU 去做其他事情) 为什么不在当前进程内直接读而是切换到其他进程?(为了提高 CPU 利用率) 什么 IO 会阻塞当前线程?(同步阻塞 IO) 访问磁盘的时是直接访问到硬件还是用过一些系统的转换?(DMA 请求过程) 虚拟内存的概念?(虚拟内存 就是操作系统给每个进程看到的一套 “虚拟的、连续的内存空间” ) 如果把换页交给应用进程可以嘛? 理论上应用进程可以参与内存管理策略,但不能把换页完全交给应用进程。 因为 换页 需要了解整个系统的内存使用情况,还涉及 页表修改、物理页分配 和 缺页异常处理,这些都属于 内核权限。 内存管理...
