
C++面试常见问题
文章平均质量分 81
面试常见问题
四代目 水门
绵绵发力,久久为功。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
C++ 9
一般来说,epoll 的效率是要比 select 和 poll 高的,但是对于活动连接较多的时候,由于回调函数触发的很频繁,其效率不一定比 select 和 poll 高。epoll: epoll是Linux特有的I/O多路复用机制,相较于select和poll,它在处理大量文件描述符时更加高效。poll: poll是select的一种改进,它使用轮询方式来检查多个文件描述符的状态,避免了select中文件描述符数量有限的问题。然而,但是它的效率可能随着监视的文件描述符数量的增加而降低。原创 2025-02-01 07:00:00 · 366 阅读 · 0 评论 -
C++ 8
lambda 表达式(也称为匿名函数)是在 C++11 标准中引入的一种方便的函数编写方式。Lambda 允许你在需要一个函数对象的地方快速定义函数的行为,而不需要按照传统方式定义一个完整的函数。● 闭包:Lambda 可以捕获外部变量,形成闭包,使得函数可以访问和操作外部作用域的变量。● API:Lambda 函数可以简化回调函数的编写,特别是在使用 STL 时。● 简洁:在需要临时使用一个函数但不想定义一个完整函数的情况下。原创 2025-02-01 07:00:00 · 431 阅读 · 0 评论 -
C++ 7
push_back()和emplace_back()都是C++标准库容器(如std::vector)中用来添加元素的方法,但它们在添加元素的方式上有所不同:原创 2025-01-31 07:00:00 · 1911 阅读 · 0 评论 -
C++ 6
在C++中,构造函数有几种不同的类型,每种都有其特定的作用:原创 2025-01-31 07:00:00 · 1173 阅读 · 0 评论 -
C++ 5
构造函数● 构造函数是创建对象时自动调用的成员函数,它的作用是初始化成员变量,为对象分配资源,执行必要的初始化操作。● 特点○ 函数名必须与类名相同,且没有返回类型;○ 可以有多个构造函数;○ 如果没有为类定义一个构造函数,编译器会自动生成一个默认构造函数,它没有参数,也可能执行一些默认的初始化操作。● 构造函数不能是虚函数。○ 构造函数在对象创建时被调用,此时不涉及多态性。原创 2025-01-31 01:12:26 · 1074 阅读 · 0 评论 -
C++ 3
如果程序的某一段代码在内存池中动态申请了一块内存而没有及时将其释放,就会导致那块内存一直处于被占用的状态而无法使用,造成了资源的浪费。内存泄漏并不是说物理上的消失掉了,是因为无法使用该区域,在外界看来这块内存就好像被泄漏了一样。什么操作会导致内存泄漏○ 忘记释放内存:使用 new 或 malloc 等分配内存后,没有使用 delete 或 free 释放内存。○ 子类继承父类时,没有将基类的析构函数定义为虚函数。原创 2025-01-30 07:00:00 · 890 阅读 · 0 评论 -
C++ 2
智能指针是C++中用来自动管理动态分配内存的一种模板类,维护着一个指向动态分配对象的指针,并在智能指针对象被销毁时,自动释放该内存,从而避免内存泄漏。C++有以下几种智能指针:● std::unique_ptr:独占式拥有指针,保证同一时间只有一个unique_ptr指向特定内存,适用于不需要共享所有权的场景,如栈上对象的管理。● std::shared_ptr:多个shared_ptr可以共享同一内存,使用引用计数机制来管理内存的生命周期,适用于多个对象需要共享同一个资源的场景。原创 2025-01-30 07:00:00 · 925 阅读 · 0 评论 -
C ++ 1
常量指针"和 "指针常量"是两种不同的概念,它们的区别主要在于它们所指向的数据是否可以被修改,以及它们自己的值是否可以改变。原创 2025-01-29 07:00:00 · 959 阅读 · 0 评论 -
C++ 4
OOP是一种编程范式,通过它,程序可以以对象的形式组织数据和功能,并通过对象之间的交互来实现任务。○ 堆用于存储生存期不受限于单个函数调用的对象,如使用 new 或 malloc 分配的对象。■ 堆的内存分配和释放速度通常比栈慢,因为可能需要搜索合适的内存块,并且涉及内存碎片整理。■ 栈的内存分配和释放速度很快,因为栈的内存管理是连续的,不需要搜索空闲内存。○ 栈的大小通常有限制,远小于堆的大小,且在不同系统和编译器中可能不同。■ 是由编译器自动管理的,用于存储局部变量和函数调用的上下文信息。原创 2025-01-30 07:00:00 · 727 阅读 · 0 评论 -
数据库 3
● 问题:假如有两个操作一个更新一个查询,第一个操作先更新数据库,还没来及删除缓存,查询操作可能拿到的就是旧的数据;还有的问题就是有一个是读操作没有命中缓存,然后就到数据库中取数据,此时来了一个写操作,写完数据库后,让缓存失效,然后,之前的那个读操作再把老的数据放进去,也会造成脏数据。● Read Through:就是在查询操作中更新缓存,也就是说,当缓存失效的时候,Cache Aside策略是由调用方负责把数据加载入缓存,而Read Through则用缓存服务自己来加载,从而对调用方是透明的。原创 2025-01-23 07:00:00 · 559 阅读 · 0 评论 -
数据库 2
数据库查询的执行时间超过指定的超时时间时,就被称为慢查询。原因:● 查询语句比较复杂:查询涉及多个表,包含复杂的连接和子查询,可能导致执行时间较长。● 查询数据量大:当查询的数据量庞大时,即使查询本身并不复杂,也可能导致较长的执行时间。● 缺少索引:如果查询的表没有合适的索引,需要遍历整张表才能找到结果,查询速度较慢。● 数据库设计不合理:数据库表设计庞大,查询时可能需要较多时间。● 并发冲突:当多个查询同时访问相同的资源时,可能发生并发冲突,导致查询变慢。原创 2025-01-23 07:00:00 · 329 阅读 · 0 评论 -
数据库 1
● InnoDB引擎提供了对事务ACID的支持,还提供了行级锁和外键的约束,是目前MySQL的默认存储引擎,适用于需要事务和高并发的应用。● MyISAM引擎是早期的默认存储引擎,支持全文索引,但是不支持事务,也不支持行级锁和外键约束,适用于快速读取且数据量不大的场景。MySQL的执行引擎主要负责查询的执行和数据的存储, 其执行引擎主要有MyISAM、InnoDB、Memery 等。● Memery就是将数据放在内存中,访问速度快,但数据在数据库服务器重启后会丢失。原创 2025-01-22 07:00:00 · 350 阅读 · 0 评论 -
操作系统3
● 互斥锁:互斥锁是一种最常见的锁类型,用于实现互斥访问共享资源。在任何时刻,只有一个线程可以持有互斥锁,其他线程必须等待直到锁被释放。这确保了同一时间只有一个线程能够访问被保护的资源。● 自旋锁:自旋锁是一种基于忙等待的锁,即线程在尝试获取锁时会不断轮询,直到锁被释放。其他的锁都是基于这两个锁的● 读写锁:允许多个线程同时读共享资源,只允许一个线程进行写操作。分为读(共享)和写(排他)两种状态。● 悲观锁:认为多线程同时修改共享资源的概率比较高,所以访问共享资源时候要上锁。原创 2025-01-22 07:00:00 · 649 阅读 · 0 评论 -
操作系统2
死锁是系统中两个或多个进程在执行过程中,因争夺资源而造成的一种僵局。当每个进程都持有一定的资源并等待其他进程释放它们所需的资源时,如果这些资源都被其他进程占有且不释放,就导致了死锁。死锁只有同时满足以下四个条件才会发生:●互斥条件:一个进程占用了某个资源时,其他进程无法同时占用该资源。●请求保持条件:一个线程因为请求资源而阻塞的时候,不会释放自己的资源。●不可剥夺条件:资源不能被强制性地从一个进程中剥夺,只能由持有者自愿释放。原创 2025-01-20 10:02:33 · 869 阅读 · 0 评论 -
操作系统1
如果新的进程需要的时间更少,则挂起当前进程,运行新的进程。并发是指在相同的时间段内执行多个任务,这些任务可能不是同时发生的,而是交替执行,通过时间片轮转或者事件驱动的方式。线程是程序执行的最小单位,线程是进程的子任务,是进程内的执行单元。●进程:由于每个进程都有独立的内存空间,创建和销毁进程的开销较大。●线程:由于线程共享相同的内存空间,一个线程的错误可能会影响整个进程的稳定性。●进程:由于进程间相互隔离,一个进程的崩溃不会直接影响其他进程的稳定性。进程是资源分配和调度的基本单位。原创 2025-01-20 09:59:50 · 767 阅读 · 0 评论 -
计算机网络3
(1)三次握手的过程第一次握手:客户端向服务器发送一个SYN(同步序列编号)报文,请求建立连接,客户端进入SYN_SENT状态。第二次握手:服务器收到SYN报文后,如果同意建立连接,则会发送一个SYN-ACK(同步确认)报文作为响应,同时进入SYN_RCVD状态。第三次握手:客户端收到服务器的SYN-ACK报文后,会发送一个ACK(确认)报文作为最终响应,之后客户端和服务器都进入ESTABLISHED状态,连接建立成功。(2)为什么需要三次握手。原创 2025-01-19 07:00:00 · 808 阅读 · 0 评论 -
计算机网络4
如果有缓存,CDN节点会直接返回缓存的资源,如果没有缓存所需资源,它会从源服务器(原始服务器)回源获取资源,并将资源缓存到节点中,以便以后的请求。通过缓存内容,减少了对原始服务器的请求,减轻了源站的负载。CDN是一种分布式网络服务,通过将内容存储在分布式的服务器上,使用户可以从距离较近的服务器获取所需的内容,从而加速互联网上的内容传输。●就近访问:CDN在全球范围内部署了多个服务器节点,用户的请求会被路由到距离最近的CDN节点,提供快速的内容访问。原创 2025-01-19 07:00:00 · 760 阅读 · 0 评论 -
计算机网络2
带宽优化 :HTTP1.0中,存在一些浪费带宽的现象,例如客户端只是需要某个对象的一部分,而服务器却将整个对象送过来了,并且不支持断点续传功能, 而HTTP1.1则在请求头引入了range头域,它允许只请求资源的某个部分,即返回码是206(Partial Content)头部压缩:HTTP/2.0 引入了HPACK 压缩算法,对请求和响应的头部信息进行压缩,减少了冗余头部信息的传输,提高了传输效率。优先级和依赖:HTTP/2.0 允许客户端为请求设置优先级,并表达请求之间的依赖关系,资源加载更加有序。原创 2025-01-12 07:00:00 · 716 阅读 · 0 评论 -
计算器网络1
强缓存和协商缓存是HTTP缓存机制的两种类型,它们用于减少服务器的负担和提高网页加载速度。强缓存:客户端在没有向服务器发送请求的情况下,直接从本地缓存中获取资源。强缓存通过HTTP响应头中的Cache-Control字段实现,如max-age,告诉浏览器在指定时间内可以直接使用缓存数据,无需再次请求。协商缓存:当强缓存失效时,浏览器会发送请求到服务器,通过ETag或Last-Modified等HTTP响应头与服务器进行验证,以确定资源是否被修改。原创 2025-01-12 07:00:00 · 717 阅读 · 0 评论