八股集合1

news/2024/9/17 7:21:21/ 标签: c++

在HTTPS中,加密方法主要包括两种类型的加密技术:非对称加密(也称为公钥加密)和对称加密。这两种加密技术在HTTPS握手过程中协同工作,确保数据的安全传输。下面是具体的加密方法及其作用:

公钥加密 (非对称加密)

  • RSA (Rivest-Shamir-Adleman):一种常见的非对称加密算法,用于生成公钥和私钥对。在TLS握手过程中,客户端使用服务器的公钥来加密对称密钥,而服务器则使用其私钥来解密。
  • ECC (Elliptic Curve Cryptography):椭圆曲线密码学,是一种基于椭圆曲线数学的非对称加密算法,相比RSA在同等安全级别下可以使用更短的密钥长度,因此在计算资源有限的设备上更为高效。

对称加密

  • AES (Advanced Encryption Standard):高级加密标准,是一种常用的对称加密算法,用于快速加密大量数据。一旦通过非对称加密安全地交换了对称密钥,AES就被用来加密实际的数据传输。
  • ChaCha20:另一种对称加密算法,在某些情况下作为AES的替代方案,尤其是在需要高性能加密的情况下。

消息认证码 (MAC)

  • HMAC (Hash-based Message Authentication Code):基于哈希的消息认证码,用于确保消息的完整性和来源认证。常见的哈希函数如SHA-256经常被用来生成HMAC。
  • Poly1305:一种高效的MAC算法,常与ChaCha20一起使用。

密钥交换协议

  • Diffie-Hellman (DH) 或 Elliptic Curve Diffie-Hellman (ECDH):用于协商临时会话密钥的协议,使得即使私钥被泄露,过去和未来的会话也不会受到影响。

完整性验证

  • SHA (Secure Hash Algorithm):安全哈希算法,用于生成固定大小的消息摘要,以验证数据未被篡改。常见的有SHA-256, SHA-384等。

游戏后端使用udp的常用场景:

2.在游戏开发中,UDP(用户数据报协议)由于其低延迟、无连接特性以及无需等待确认的特点,成为了许多实时应用,特别是多人在线游戏的理想选择。以下是一些游戏后端使用UDP的常见场景:

  1. 实时多人游戏:在需要即时反馈的游戏类型中,如第一人称射击游戏(FPS)、多人在线战斗竞技场(MOBA)游戏、赛车游戏等,UDP可以提供更快的数据传输速度,减少延迟,这对于实时交互至关重要。
  2. 玩家位置更新:在游戏中,玩家的位置和其他状态信息需要不断地更新给其他玩家。使用UDP可以快速发送这些更新而不必等待确认,这样可以降低延迟并提高游戏体验。
  3. 语音聊天:对于游戏内的实时语音通信来说,UDP也是优选的选择。语音数据包通常很小且频繁发送,UDP的无连接特性可以保证语音数据尽可能快地到达目的地。
  4. 游戏事件同步:游戏中发生的事件,比如射击、爆炸、得分等,通常需要立即通知所有相关玩家。UDP可以快速地广播这类事件信息。
  5. 控制指令传输:玩家输入的控制指令,如移动、跳跃、射击等,需要尽快发送到服务器进行处理。UDP的低延迟特性非常适合这种场景。
  6. 多人同步状态:在一些策略游戏或MMORPG(大型多人在线角色扮演游戏)中,可能需要同步多个玩家的状态,如生命值、经验值等。UDP可以帮助快速同步这些信息。

尽管UDP提供了上述优点,但它也有缺点,例如数据包可能会丢失、乱序或重复。为了弥补这些不足,游戏开发者通常会在应用层实现可靠传输机制,例如重传丢失的数据包或者使用序列号来检测乱序和重复。此外,有时也会混合使用TCP(传输控制协议)来处理需要可靠传输的场景,比如登录认证、聊天消息等。通过这样的方式,游戏可以在保持低延迟的同时,也能确保关键数据的可靠性。

3.min_element和max_element函数

std::min_elementstd::max_element 是 C++ 标准库中的两个非常有用的算法,它们分别用于查找容器中的最小元素和最大元素的迭代器。这两个函数都位于 <algorithm> 头文件中,并且可以应用于任何支持双向迭代器的容器,如 std::vector, std::list, std::deque 等。

注意事项

  • 如果容器中有多个相同的最小或最大值,std::min_element 和 std::max_element 只会返回第一个这样的元素。(米哈游)
  • 使用这些函数时,确保容器不是空的,否则结果将是 end() 迭代器,这可能不符合你的期望。
  • 当使用自定义比较函数时,确保该函数正确实现了你需要的比较逻辑,以避免错误的结果。
#include <iostream>
#include <vector>
#include <algorithm>int main() {
std::vector<int> numbers = {5, 3, 9, 1, 2};
auto min_it = std::min_element(numbers.begin(), numbers.end());
if (min_it != numbers.end()) {std::cout << "Minimum element: " << *min_it << std::endl;
} else {std::cout << "The container is empty." << std::endl;
}return 0;
}

4.字符串和模式串匹配

基础方法:朴素字符串匹配(Brute Force)

这是最直接的方法,即逐字符比较pattern和text中的子串是否相等。

  1. 遍历:从text的第一个字符开始,将pattern与text中的每一个可能的子串进行比较。
  2. 比较:如果pattern的任意字符与text中的对应字符不匹配,则将pattern相对于text的位置移动一位,继续比较。
  3. 重复:重复此过程,直到找到匹配的子串或搜索完整个text。

这种方法的时间复杂度为O(nm),其中n是text的长度,m是pattern的长度。

高效方法:KMP算法(Knuth-Morris-Pratt)

KMP算法是一种改进的字符串匹配算法,它避免了不必要的比较。

  1. 预处理:构建一个前缀表(或部分匹配表),记录pattern自身的部分匹配信息。
  2. 匹配:使用前缀表来指导匹配过程,当发现不匹配时,不需要回溯text中的位置,而是根据前缀表向前移动pattern。

KMP算法的时间复杂度为O(n+m),其中n是text的长度,m是pattern的长度。

5.系统后台开销占比

在这个计算中,我们假设每个进程在一个周期内都轮流占用一次CPU时间片,并且在每个时间片结束后都会进行上下文切换。这意味着每个进程都会经历一次计算时间和一次上下文切换时间。通过将所有进程的计算时间和上下文切换时间加起来,我们得到了一个周期内的总时间和上下文切换总时间。最后,通过比较上下文切换时间与总时间的比例,我们得出了系统开销的百分比。

6.能够是的玩家指令快速响应的网络编程技术是什么

  • UDP 通常是首选的低延迟通信协议,适用于大多数实时交互游戏。
  • WebSocketgRPC 适合基于Web的游戏和服务端与客户端的实时通信。
  • 延迟隐藏技术边缘计算 是降低玩家感知到的延迟和提高响应速度的有效策略。

7.页框页号

8.进程与线程

进程与线程的概念,以及为什么要有进程线程,其中有什么区别,他们各自又是怎么同步的?

1. 基本概念:

进程是对运行时程序的封装,是系统进行资源调度和分配的的基本单位,实现了操作系统的并发

线程是进程的子任务,是CPU调度和分派的基本单位用于保证程序的实时性,实现进程内部的并发;线程是操作系统可识别的最小执行和调度单位。每个线程都独自占用一个虚拟处理器:独自的寄存器组指令计数器和处理器状态。每个线程完成不同的任务,但是共享同一地址空间(也就是同样的动态内存,映射文件,目标代码等等),打开的文件队列和其他内核资源

2. 区别:

  1. 一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。线程依赖于进程而存在。
  2. 进程在执行过程中拥有独立的内存单元,而多个线程共享进程的内存。(资源分配给进程,同一进程的所有线程共享该进程的所有资源。同一进程中的多个线程共享代码段(代码和常量),数据段(全局变量和静态变量),扩展段(堆存储)。但是每个线程拥有自己的栈段,栈段又叫运行时段,用来存放所有局部变量和临时变量。)
  3. 进程是资源分配的最小单位,线程是CPU调度的最小单位
  4. 系统开销: 由于在创建或撤消进程时,系统都要为之分配或回收资源,如内存空间、I/o设备等。因此,操作系统所付出的开销将显著地大于在创建或撤消线程时的开销。类似地,在进行进程切换时,涉及到整个当前进程CPU环境的保存以及新被调度运行的进程的CPU环境的设置。而线程切换只须保存和设置少量寄存器的内容,并不涉及存储器管理方面的操作。可见,进程切换的开销也远大于线程切换的开销
  5. 通信:由于同一进程中的多个线程具有相同的地址空间,致使它们之间的同步和通信的实现,也变得比较容易。进程间通信IPC,线程间可以直接读写进程数据段(如全局变量)来进行通信——需要进程同步和互斥手段的辅助,以保证数据的一致性。在有的系统中,线程的切换、同步和通信都无须操作系统内核的干预
  6. 进程编程调试简单可靠性高,但是创建销毁开销大;线程正相反,开销小,切换速度快,但是编程调试相对复杂
  7. 进程间不会相互影响 ;线程一个线程挂掉将导致整个进程挂掉
  8. 进程适应于多核、多机分布;线程适用于多核

进程间通信的方式:

进程间通信主要包括管道、系统IPC(包括消息队列、信号量、信号、共享内存等)、以及套接字socket

1.管道:

管道主要包括匿名管道和命名管道:管道可用于具有亲缘关系的父子进程间的通信,命名管道除了具有管道所具有的功能外,它还允许无亲缘关系进程间的通信

  • 1.1 匿名管道PIPE
  1. 它是半双工的(即数据只能在一个方向上流动),具有固定的读端和写端
  2. 只能用于具有亲缘关系的进程之间的通信(也是父子进程或者兄弟进程之间)
  3. 它可以看成是一种特殊的文件,对于它的读写也可以使用普通的read、write等函数。但是它不是普通的文件,并不属于其他任何文件系统,并且只存在于内存中。
  • 1.2 命名管道FIFO:
  1. FIFO可以在无关的进程之间交换数据
  2. FIFO有路径名与之相关联,它以一种特殊设备文件形式存在于文件系统中

2. 系统IPC:

  • 2.1 消息队列 消息队列,是消息的链接表,存放在内核中。一个消息队列由一个标识符(即队列ID)来标记。 (消息队列克服了信号传递信息少,管道只能承载无格式字节流以及缓冲区大小受限等特点)具有写权限得进程可以按照一定得规则向消息队列中添加新信息;对消息队列有读权限得进程则可以从消息队列中读取信息;

特点:

  1. 消息队列是面向记录的,其中的消息具有特定的格式以及特定的优先级。
  2. 消息队列独立于发送与接收进程。进程终止时,消息队列及其内容并不会被删除。
  3. 消息队列可以实现消息的随机查询,消息不一定要以先进先出的次序读取,也可以按消息的类型读取。
  • 2.2 信号量semaphore 信号量(semaphore)与已经介绍过的 IPC 结构不同,它是一个计数器,可以用来控制多个进程对共享资源的访问。信号量用于实现进程间的互斥与同步,而不是用于存储进程间通信数据。

特点:

  1. 信号量用于进程间同步,若要在进程间传递数据需要结合共享内存。
  2. 信号量基于操作系统的 PV 操作,程序对信号量的操作都是原子操作。
  3. 每次对信号量的 PV 操作不仅限于对信号量值加 1 或减 1,而且可以加减任意正整数
  4. 支持信号量组

2.3 信号signal

信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。

2.4 共享内存(Shared Memory)

它使得多个进程可以访问同一块内存空间,不同进程可以及时看到对方进程中对共享内存中数据得更新。这种方式需要依靠某种同步操作,如互斥锁和信号量等

特点:

  1. 共享内存是最快的一种IPC,因为进程是直接对内存进行存取
  2. 因为多个进程可以同时操作,所以需要进行同步
  3. 信号量+共享内存通常结合在一起使用,信号量用来同步对共享内存的访问

3.套接字SOCKET:

socket也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同主机之间的进程通信。

  • 线程间通信的方式: 临界区:通过多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问; 互斥量Synchronized/Lock:采用互斥对象机制,只有拥有互斥对象的线程才有访问公共资源的权限。因为互斥对象只有一个,所以可以保证公共资源不会被多个线程同时访问 信号量Semphare:为控制具有有限数量的用户资源而设计的,它允许多个线程在同一时刻去访问同一个资源,但一般需要限制同一时刻访问此资源的最大线程数目。 事件(信号),Wait/Notify:通过通知操作的方式来保持多线程同步,还可以方便的实现多线程优先级的比较操作进程间通信的方式: 进程间通信主要包括管道、系统IPC(包括消息队列、信号量、信号、共享内存等)、以及套接字socket。

http://www.ppmy.cn/news/1522427.html

相关文章

无人机飞控之光流知识小结

要完成飞行器的定位&#xff0c;则必须要有位置的反馈数据。在户外&#xff0c;我们一般使用GPS作为位置传感器&#xff0c;然而&#xff0c;在室内&#xff0c;GPS无法使用&#xff0c;要完成定位功能&#xff0c;可以选用光流传感器。 本讲主要介绍如何通过下视摄像头估计飞…

K12智慧校园云平台源码,智慧校园小程序源码,支持PC+小程序,提供丰富的API接口,支持和其他系统的融合对接

智慧校园平台是目前教育信息化领域的热点之一。随着数字化转型的加速&#xff0c;越来越多的学校开始寻求解决方案&#xff0c;以提高教育管理的效率和质量。 智慧校园电子班牌系统是一种集成信息化技术、物联网、智能化的教育管理解决方案&#xff0c;它在校园内实现了信息共…

四个pdf软件分享,你更爱哪一款?

如果说现在用的最多的电子文档是什么&#xff0c;不是Word就是PDF&#xff0c;所以PDF编辑器几乎成了我们日常工作中不可或缺的工具。但面对市面上琳琅满目的PDF编辑器&#xff0c;到底哪一款才是你的菜呢&#xff1f;今天&#xff0c;我就来和大家聊聊我用过的四款编辑器&…

【重学 MySQL】十六、算术运算符的使用

【重学 MySQL】十六、算术运算符的使用 加法 ()减法 (-)乘法 (*)除法 (/ 或 div )取模&#xff08;求余数&#xff09; (% 或 mod )注意事项 在 MySQL 中&#xff0c;算术运算符用于执行数学运算&#xff0c;如加法、减法、乘法、除法和取模&#xff08;求余数&#xff09;等。…

Html、Css3动画效果

文章目录 第九章 动画9.1 transform动画9.2 transition过渡动画9.3 定义动画 第九章 动画 9.1 transform动画 transform 2D变形 translate()&#xff1a;平移函数&#xff0c;基于X、Y坐标重新定位元素的位置 scale()&#xff1a;缩放函数&#xff0c;可以使任意元素对象尺…

选择服务器机柜租用要注意哪些方面?

企业在进行选择服务器租用和托管后&#xff0c;大多数的企业会选择租用服务器机柜来进行放置&#xff0c;同时机房中也有着不同款式的机柜&#xff0c;使计算机行业中不可或缺的用品&#xff0c;那我们在选择服务器机柜租用时需要注意哪些方面呢&#xff1f; 接下来就让我们了解…

Flask如何创建并运行数据库迁移

Flask创建并运行数据库迁移的过程是一个涉及多个步骤的操作&#xff0c;旨在帮助开发者在开发过程中管理数据库模式的变化&#xff0c;而不需要手动地删除和重建数据库表&#xff0c;从而避免数据丢失。以下是一个详细的步骤说明&#xff1a; 一、准备工作 1. 安装必要的包 …

紫色UI趣味测试小程序源码,包含多种评测

紫色UI趣味测试小程序源码&#xff0c;包含多种评测。 该源码里面包含了多种评测,每一种评测都包含大多小细节。 代码下载

计算机基础知识复习9.6

点对点链路&#xff1a;两个相邻节点通过一个链路相连&#xff0c;没有第三者 应用&#xff1a;PPP协议&#xff0c;常用于广域网 广播式链路&#xff1a;所有主机共享通信介质 应用&#xff1a;早期的总线以太网&#xff0c;无线局域网&#xff0c;常用于局域网 典型拓扑结…

CentOS7虚拟机下安装及使用Docker

文章目录 一&#xff0c;准备工作二、安装Docker三、启动Docker四、验证Docker五、使用Docker六&#xff0c;卸载Docker 有一个Centos7的虚拟机&#xff0c;想要安装个docker测试一些docker用法和熟悉命令 一&#xff0c;准备工作 1&#xff0c;使用uname -r命令检查系统内核…

2024国赛数学建模B题完整分析参考论文38页(含模型和可运行代码)

2024 高教社杯全国大学生数学建模完整分析参考论文 B 题 生产过程中的决策问题 目录 摘要 一、问题重述 二、问题分析 三、 模型假设 四、 模型建立与求解 4.1问题1 4.1.1问题1思路分析 4.1.2问题1模型建立 4.1.3问题1样例代码&#xff08;仅供参考&#xff09; 4.…

2024最新!Facebook手机版和网页版改名教程!

Facebook作为全球最大的社交平台之一&#xff0c;允许用户自定义名字和昵称。在Facebook更新姓名可以帮助您更好的展现账号形象。本文将为您提供详细的步骤指导&#xff0c;帮助您在手机APP和网页版上轻松完成Facebook改名操作。 Facebook手机版改名 打开Facebook APP并登录账号…

SAP学习笔记 - 开发02 - BTP实操流程(账号注册,BTP控制台,BTP集成开发环境搭建)

上一章讲了 BAPI的概念&#xff0c;以及如何调用SAP里面的既存BAPI。 SAP学习笔记 - 开发01 - BAPI是什么&#xff1f;通过界面和ABAP代码来调用BAPI-CSDN博客 本章继续讲开发相关的内容&#xff0c;主要就是BTP的实际操作流程&#xff0c;比如账号注册&#xff0c;登录&#…

Arch - 演进中的架构

文章目录 Pre原始分布式时代的核心内容1. 背景与起源2. 分布式系统的初步探索3. 分布式计算环境&#xff08;DCE&#xff09;4. 技术挑战与困境5. 原始分布式时代的失败与教训6. 未来展望 单体架构的特点与应用优势缺陷单体架构与微服务架构的关系总结 SOA架构1. SOA架构及其背…

pytorch torch.matmul函数介绍

torch.matmul 是 PyTorch 中用于进行矩阵乘法的函数。它可以执行两维矩阵、向量和更高维张量之间的乘法运算,支持的运算取决于输入张量的维度。 1. 函数签名 torch.matmul(input, other, out=None)input: 左乘的张量。other: 右乘的张量。out: 可选,用于存储输出结果的张量…

热力图科普:数据可视化的利器

hello大家好&#xff0c;俺是没事爱瞎捣鼓又分享欲爆棚的叶同学&#xff01;&#xff01;&#xff01; 日常闲扯 哎呀&#xff0c;第一天上完课&#xff0c;给俺的感觉是&#xff08;热和惊喜&#xff09;&#xff0c;热是真热&#xff0c;从出租屋走到教学楼给我整的汗流浃背…

智能代码编辑器:Visual Studio Code的深度剖析

引言&#xff1a;编程的革新者 在软件开发的历史长河中&#xff0c;编辑器始终扮演着至关重要的角色。它们不仅是代码的容器&#xff0c;更是开发者与计算机之间沟通的桥梁。然而&#xff0c;随着技术的飞速发展&#xff0c;传统的文本编辑器已经无法满足现代开发的需求。Visu…

解决商店汽水兑换问题——利用贪心算法与循环结构

解决商店汽水兑换问题——利用贪心算法与循环结构 在某商店中,有一种特别的促销活动:三个空汽水瓶可以换一瓶汽水。而且,如果空瓶数量不足,还可以向老板借空瓶(但必须要归还)。给定初始的空瓶数量,如何计算最多可以喝到多少瓶汽水?这个问题可以通过贪心算法来高效解决…

4.1 Sensors -- onClickOutside

4.1 Sensors – onClickOutside https://vueuse.org/onClickOutside 作用 监听当前的点击是否是在目标元素之外。在弹窗和下拉框中非常有用。 官方示例 <template><div ref"target">Hello world</div><div>Outside element</div>…

linux查看网络链接的具体进程

问题 linux上有多个程序&#xff0c;都在访问同一个数据库&#xff0c;如何知道哪些网络连接&#xff0c;是由那个程序的进程发出的&#xff0c;通过netstat看不出具体是那个进程产生的链接。 解决方案1 在 Linux 上&#xff0c;如果你想查看哪个进程发起了对数据库的网络连…