后端开发面经系列 -- 小米C++开发,校招一面,纯C++

这是小米C++后端开发校招一面的面经,涵盖HTTP与HTTPS区别、lambda、右值引用等C++知识,还涉及STL容器对比、迭代器失效问题、多态、死锁预防等内容,最后有手撕环形链表II的题目及思路。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

小米C++开发,校招一面,纯C++

公众号:阿Q技术站

来源:https://www.nowcoder.com/feed/main/detail/e584c8b5d5e74f1faf8e8b9cc033dae2

1、说一下http和https的区别?

  1. 数据加密:
    • HTTP:传输的数据是明文的,安全性较低,容易被窃听和篡改。
    • HTTPS:通过 SSL/TLS 协议加密传输数据,可以保证数据的机密性,安全性更高。
  2. 数据完整性:
    • HTTP:不提供数据完整性保护,数据在传输过程中可能被篡改。
    • HTTPS:使用数字证书和加密算法来验证数据的完整性,保证数据在传输过程中不被篡改。
  3. 身份验证:
    • HTTP:不提供身份验证机制,无法验证通信双方的身份。
    • HTTPS:通过 SSL/TLS 协议验证服务器的身份,确保客户端连接的是真实的服务器,防止中间人攻击。
  4. 端口号:
    • HTTP:默认端口号是 80。
    • HTTPS:默认端口号是 443。
  5. SSL/TLS 握手过程:
    • HTTPS 在建立连接时需要进行 SSL/TLS 握手过程,包括密钥交换、身份验证和协商加密算法等步骤,而 HTTP 不需要。

2、你用过lambda吗?

它是一种用来创建匿名函数的方式,可以在需要函数的地方直接定义函数,而不必显式地编写函数的名称。

[capture clause] (parameters) -> return_type { 
    // 函数体
};

其中:

  • capture clause
    

    指定 lambda 表达式可以访问的外部变量。有两种形式:

    • [ ]:不捕获任何外部变量。
    • [var1, var2, ...]:捕获指定的外部变量。捕获的变量可以是值传递或引用传递。
  • parameters:lambda 函数的参数列表。

  • return_type:返回类型,可以省略,编译器会根据返回语句自动推断。

  • {}:函数体。

给个例子:

#include <iostream>

int main() {
    // lambda 表达式,捕获外部变量 a,b
    int a = 10, b = 20;
    auto sum = [a, &b] () -> int {
        b = 30; // 修改外部变量 b
        return a + b;
    };

    std::cout << "Sum: " << sum() << std::endl; // 输出:40
    std::cout << "b after lambda: " << b << std::endl; // 输出:30

    return 0;
}

3、右值引用说一下?

右值引用是 C++11 引入的一种新的引用类型,用于标识临时对象(右值)的引用。右值引用的语法是使用双 && 符号,例如 int&&

右值引用的特点和用途:

  1. 绑定临时对象:右值引用可以绑定到临时对象(右值)上,延长其生命周期,避免临时对象在表达式结束后被销毁。
  2. 移动语义:右值引用是实现移动语义的基础。通过移动构造函数和移动赋值运算符,可以将资源(如内存、文件句柄等)从一个对象“移动”到另一个对象,避免不必要的资源拷贝,提高效率。
  3. 完美转发:右值引用可以与模板结合使用,实现完美转发(perfect forwarding),即在传递参数时保持参数的类型信息和引用性质。

例子:

#include <iostream>

void process(int&& value) {
    std::cout << "Received rvalue: " << value << std::endl;
}

int main() {
    int a = 10;
    process(std::move(a)); // 此时 a 被转换为右值

    return 0;
}

4、a和&a?

C++ 中,a 表示变量的值,而&a 表示变量的地址(即指针)。

给个例子一清二楚:

#include <iostream>

int main() {
    int a = 10; // 定义一个整型变量 a,值为 10
    int* ptr = &a; // 定义一个指针 ptr,指向变量 a 的地址

    std::cout << "Value of a: " << a << std::endl; // 输出:Value of a: 10
    std::cout << "Address of a: " << &a << std::en
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值