网络编程问题解答
TCP/IP是哪种模型的协议
TCP/IP 是一组通信协议的集合,它基于 TCP/IP 模型。
TCP/IP 模型通常被认为是一种实用的网络通信模型,与 OSI 模型相比,TCP/IP 模型更加简洁和侧重于实际应用,被广泛应用于互联网和大多数计算机网络中。
TCP/IP 模型由四层组成,分别是网络接口层、网际层(网络层)、传输层和应用层。TCP(传输控制协议)和 IP(网际协议)是这个模型中非常重要和核心的协议。
TCP/IP分几层,每层的核心任务是什么
TCP/IP 通常分为四层,自下而上分别是:网络接口层(链路层)、网络层、传输层、应用层。
五层模型:物理层、数据链路层,网络层、传输层、应用层
1. 网络接口层(链路层):
◦ 数据传输与物理连接:负责在物理介质上传输数据帧,比如以太网帧等。将上层(网络层)传递下来的 IP 数据包封装成帧,并在物理网络上进行传输,同时也处理接收来自物理网络的帧,并将其解封装后传递给上层网络层。
◦ 物理寻址与差错检测:通过 MAC 地址(媒体访问控制地址)识别网络中的设备,确保数据能够准确地传输到目标设备。并且提供数据链路层的差错检测功能,例如检测传输过程中是否出现数据损坏或丢失等问题,若发现错误可能会采取相应的纠错措施,但有些情况下只是检错而不纠错。
2. 网络层:
◦ 路由与转发:这是网络层的核心任务。IP 协议作为网络层的核心协议,负责将数据包从源地址路由到目标地址。根据数据包中的 IP 地址信息,确定数据包的传输路径,使数据能够在不同的网络之间进行传递。路由器作为网络层的主要设备,根据 IP 地址和路由表将数据包从一个网络接口转发到另一个网络接口。
◦ 数据包的分片与重组:由于不同的网络可能具有不同的最大传输单元(MTU),当数据包的大小超过网络的 MTU 时,网络层需要将数据包分割成较小的片段进行传输。在到达目标地址后,再将这些片段重新组合成原始的数据包。
3. 传输层:
◦ TCP(传输控制协议):
◦ 可靠的数据传输:提供可靠的、面向连接的通信服务。通过建立连接、确认机制、重传机制、流量控制和拥塞控制等功能,确保数据能够准确、有序、完整地从发送端传输到接收端。例如,在文件下载、电子邮件发送等对数据准确性要求较高的应用场景中,TCP 是首选的传输协议。
◦ 连接管理:在数据传输之前,需要通过三次握手建立连接;数据传输完成后,通过四次挥手断开连接,保证连接的正确建立和释放,以便为后续的数据传输做好准备。
◦ UDP(用户数据报协议):
◦ 快速的数据传输:提供无连接的通信服务,不建立连接,直接将数据封装成 UDP 数据报进行发送。与 TCP 相比,UDP 的传输速度更快,开销更小,适用于对实时性要求较高、但对数据可靠性要求不高的应用场景,如视频会议、在线游戏、实时语音通信等。
◦ 端口复用与多路分解:通过端口号来标识不同的应用程序,实现端口复用和多路分解。接收方的传输层根据 UDP 数据报中的目的端口号,将数据交付给相应的应用程序。
4. 应用层:
◦ 应用服务与交互:直接面向用户和应用程序,为各种应用提供网络服务和用户接口。应用层包含了众多的应用程序和协议,如 HTTP(用于网页浏览)、FTP(用于文件传输)、SMTP(用于电子邮件发送)、DNS(用于域名解析)等。这些应用程序和协议根据用户的需求,将用户的数据转化为网络请求,并通过下层的传输层和网络层进行传输。
◦ 数据处理与表示:负责处理传输层提交的信息,将接收到的数据转化为用户可理解的信息。例如,网页浏览器将接收到的 HTML、CSS、JavaScript 等数据渲染成用户可以浏览的网页界面;电子邮件客户端将接收到的邮件数据展示给用户等。
TCP和UDP的区别
TCP(传输控制协议)和 UDP(用户数据报协议)主要有以下区别:
一、连接性
• TCP 是面向连接的协议,在通信之前需要建立连接,通过三次握手确保连接的可靠性。连接建立后,数据传输过程中有确认、重传、拥塞控制等机制来保证数据的可靠传输。
• UDP 是无连接的协议,不需要事先建立连接,直接发送数据报。每个数据报都是独立的,不保证数据的可靠到达。
二、可靠性
• TCP 提供可靠的数据传输,通过序号、确认号、重传机制等确保数据按序、无丢失地传输。如果数据在传输过程中丢失或损坏,TCP 会自动重传。
• UDP 不保证数据的可靠性,数据可能会丢失、重复或乱序到达。它适用于对实时性要求高而对数据准确性要求相对较低的场景。
三、传输效率
• TCP 由于有连接建立和各种可靠性机制,传输效率相对较低,会有一定的开销。
• UDP 没有这些复杂的机制,传输效率较高,适合于对实时性要求高、数据量小的通信,如音频、视频直播等。
四、报文格式
• TCP 报文首部较长,最小为 20 字节,最长60个字节,包含源端口、目的端口、序号、确认号、窗口大小等多个字段,用于实现可靠传输和流量控制等功能。
• UDP 报文首部很简单,只有 8 字节,只有源端口、目的端口、长度和校验和等少量字段。
五、应用场景
• TCP 适用于对数据准确性要求高的场景,如文件传输、电子邮件、网页浏览等。
• UDP 适用于实时性要求高的场景,如在线游戏、视频会议、语音通话等。
TCP为啥安全可靠?
TCP 之所以安全可靠,主要归因于以下几个特性和机制:
1. 面向连接:在数据传输之前,TCP 需要通过 “三次握手” 建立连接,确保通信双方都做好了数据传输的准备,并且能够确认对方的存在和可达性。
2. 序列号和确认应答:TCP 为每个发送的数据段都分配一个序列号,接收方成功接收数据后会返回一个确认应答,其中包含期望收到的下一个序列号。通过这种方式,确保数据的按序到达和不丢失。
3. 超时重传:如果发送方在一定时间内没有收到确认应答,就会认为数据丢失,然后重新发送该数据段,以保证数据的可靠传输。
4. 流量控制:通过接收方返回的窗口大小信息,发送方可以控制发送数据的速度,避免接收方缓冲区溢出导致的数据丢失。
5. 拥塞控制:TCP 会根据网络的拥塞情况调整发送数据的速率,避免网络拥塞导致的数据丢失和传输性能下降。
6. 校验:TCP 在数据段中包含校验和字段,用于检测数据在传输过程中是否发生错误,如果检测到错误,数据会被丢弃并要求重传。
3次握手的过程是怎么样的?
第一次握手:客户端向服务器发送一个带有 SYN(同步)标志的 TCP 报文段,该报文段中还会随机生成一个初始序列号(Sequence Number),假设为 x,此时客户端进入 SYN_SENT 状态。
第二次握手:服务器收到客户端的 SYN 报文段后,会向客户端发送一个带有 SYN 和 ACK(确认)标志的 TCP 报文段,SYN 标志表示服务器同意建立连接,ACK 标志用于确认客户端的 SYN 报文段。服务器生成自己的初始序列号,假设为 y,同时将客户端的序列号加 1 作为确认号,即 ack = x + 1,此时服务器进入 SYN_RCVD 状态。
第三次握手:客户端收到服务器的 SYN + ACK 报文段后,会向服务器发送一个带有 ACK 标志的 TCP 报文段,确认号为服务器的序列号加 1,即 ack = y + 1,自己的序列号为 x + 1。服务器收到这个 ACK 报文段后,连接建立成功,双方进入 ESTABLISHED 状态,开始数据传输。
通过三次握手,客户端和服务器能够相互确认对方的接收和发送能力,为可靠的数据传输建立连接。
应用层的协议有哪些?
1.HTTP(超文本传输协议):用于在 Web 浏览器和 Web 服务器之间传输网页和相关资源。
2. HTTPS(安全超文本传输协议):HTTP 的加密版本,提供更安全的通信。
3. FTP(文件传输协议):用于在客户端和服务器之间传输文件。
4. TFTP(简单文件传输协议):一种简单的文件传输协议,常用于小型网络。
5. SMTP(简单邮件传输协议):用于发送电子邮件。
6. POP3(邮局协议版本 3):用于接收电子邮件。
7. IMAP(互联网消息访问协议):另一种接收电子邮件的协议,提供了更强大的邮件管理功能。
8. DNS(域名系统):将域名转换为 IP 地址。
9. SSH(安全外壳协议):用于安全的远程登录和执行命令。
10. Telnet(远程登录协议):允许用户远程登录到其他计算机。
11. SNMP(简单网络管理协议):用于网络管理和监控。
12. DHCP(动态主机配置协议):为网络中的设备动态分配 IP 地址等网络配置信息。
http是干什么的?
HTTP 全称:Hyper Text Transfer Protocol 超文本传输协议
是一种按照URL指示,将超文本文档从一台主机(Web服务器)传输到另一台主机(浏览器)的应用层协议,以实现超链接的功能。
http协议就是将用户的请求发送到服务器,再将服务器返回的内容传输给浏览器,浏览器进行解析,解析成便于人类读取的页面
https://blog.51cto.com/u_15162069/2902726
描述端口号的作用,概念,通信双方都有还是只有一边有?
1.端口号的作用
标识不同的应用程序或服务:在计算机网络中,端口号就像是一个地址的延伸部分,用于区分不同的应用程序或服务。例如,一台服务器上可能同时运行着多个服务,如网页服务器(通常使用端口 80)、电子邮件服务器(端口 25)等。当客户端向服务器发送请求时,通过指定目标端口号,网络设备(如路由器、交换机等)就能够准确地将请求转发到相应的服务上。
实现多路复用和分解:在传输层,如 TCP 和 UDP 协议中,端口号用于将来自不同应用程序的数据进行多路复用,即将多个应用程序的数据封装在同一个 IP 数据包中进行传输。同时,在接收端,根据端口号将接收到的数据分解并交付给正确的应用程序。例如,在一台计算机上同时运行着浏览器、即时通讯软件和文件下载工具,它们各自使用不同的端口号与服务器进行通信。当网络数据包到达计算机时,操作系统根据数据包中的端口号将数据分别传递给相应的应用程序。
2. 端口号的概念
数字标识:端口号是一个 16 位的无符号整数,取值范围是 0 到 65535。其中,0 到 1023 被称为熟知端口号,分配给一些常用的服务,如 HTTP(端口 80)、FTP(端口 21)等;1024 到 49151 是注册端口号,通常由一些特定的应用程序或服务注册使用;49152 到 65535 是动态端口号或私有端口号,由客户端程序在发起连接时随机选择。
与协议关联:端口号通常与特定的传输层协议(如 TCP 或 UDP)相关联。同一个服务可能同时使用 TCP 和 UDP 协议,并且在不同的端口上提供服务。例如,DNS 服务既可以在 TCP 端口 53 上提供服务,也可以在 UDP 端口 53 上提供服务。
3. 端口号的存在形式
通信双方都有端口号:在网络通信中,通信的双方(客户端和服务器)都有端口号。客户端通常使用一个随机选择的临时端口号(动态端口号)来发起连接请求,而服务器则使用一个固定的知名端口号来监听来自客户端的请求。例如,当用户在浏览器中访问一个网站时,浏览器作为客户端会随机选择一个端口号,向网站服务器的端口 80(HTTP 默认端口)发起连接请求。服务器接收到请求后,会根据源 IP 地址和源端口号(客户端的端口号)以及目标 IP 地址和目标端口号(服务器的端口号)来确定与哪个客户端进行通信,并将响应数据发送回客户端的相应端口号。这样,通过双方的端口号,就能够实现双向的通信。
http的端口号是什么,代码是什么?
HTTP 协议默认使用的端口号是 80。
HTTP 状态码是用于表示 HTTP 请求的结果。常见的状态码及其含义如下:
• 200:表示请求成功,服务器成功返回了请求的数据。
• 404:表示请求的资源未找到。
• 500:表示服务器内部错误,通常是服务器在处理请求时遇到了问题。
• 301:表示永久重定向,请求的资源已被永久移动到新的位置。
• 302:表示临时重定向,请求的资源暂时被移动到了其他位置。
• 400:表示客户端请求存在语法错误,服务器无法理解。
• 403:表示服务器拒绝了请求,通常是因为权限不足。
http交互报文的格式是什么?
HTTP(超文本传输协议)交互报文分为请求报文和响应报文两种
一、HTTP 请求报文格式
1. 请求行:
◦ 包含请求方法、请求 URL 和 HTTP 版本。例如:GET /index.html HTTP/1.1。其中,“GET” 是请求方法,表示获取资源;“/index.html” 是请求的资源路径;“HTTP/1.1” 是使用的 HTTP 版本。
2. 请求头部:
◦ 由一系列键值对组成,每行一个,用冒号分隔。常见的请求头部有:
◦ Host:指定请求的服务器主机名和端口号。例如:Host: www.example.com。
◦ User-Agent:标识发出请求的客户端软件。例如:User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36。
◦ Accept:指定客户端能够接受的内容类型。例如:Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9。
◦ Connection:指定连接的处理方式,如 “keep-alive” 表示保持连接,“close” 表示关闭连接。例如:Connection: keep-alive。
3. 空行:
◦ 用于分隔请求头部和请求主体。
4. 请求主体:
◦ 可选部分,只有在使用某些请求方法(如 POST、PUT)时才会有请求主体,用于传递请求的数据。例如,在提交表单数据时,请求主体可以包含表单字段的值。
二、HTTP 响应报文格式
1. 状态行:
◦ 包含 HTTP 版本、状态码和状态描述。例如:HTTP/1.1 200 OK。其中,“HTTP/1.1” 是 HTTP 版本;“200” 是状态码,表示请求成功;“OK” 是状态描述,对状态码进行简要说明。
2. 响应头部:
◦ 与请求头部类似,由一系列键值对组成,每行一个,用冒号分隔。常见的响应头部有:
◦ Content-Type:指定响应内容的类型。例如:Content-Type: text/html;charset=UTF-8。
◦ Content-Length:指定响应内容的长度。例如:Content-Length: 1234。
◦ Server:标识响应的服务器软件。例如:Server: Apache/2.4.41 (Ubuntu)。
◦ Connection:指定连接的处理方式,与请求头部中的Connection类似。例如:Connection: keep-alive。
3. 空行:
◦ 用于分隔响应头部和响应主体。
4. 响应主体:
◦ 包含服务器返回给客户端的实际内容,如 HTML 页面、图片、JSON 数据等。例如,对于一个请求网页的响应,响应主体可能是 HTML 代码。
相关文章:

网络编程问题解答
TCP/IP是哪种模型的协议 TCP/IP 是一组通信协议的集合,它基于 TCP/IP 模型。TCP/IP 模型通常被认为是一种实用的网络通信模型,与 OSI 模型相比,TCP/IP 模型更加简洁和侧重于实际应用,被广泛应用于互联网和大多数计算机网络中。 T…...

【开源免费】基于SpringBoot+Vue.JS服装商城系统(JAVA毕业设计)
本文项目编号 T 046 ,文末自助获取源码 \color{red}{T046,文末自助获取源码} T046,文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 新…...

C语言字符串学习
在C语言中,字符串(String)是字符数组(character array),并且它以空字符(\0)结束,表示字符串的结尾。我们可以通过一些常见的操作和概念来详细理解它。 1. 字符串的概念 …...

当你在Linux系统中使用MySQL命令行工具查询数据库时,如果中文显示为问号(?)或其他乱码,简单解决办法。(2)
文章目录 1、问题出现2、解决办法 1、问题出现 2、解决办法 mysql -u [username] -p --default-character-setutf8 [database_name]rootab66508d9441:/# mysql -uroot -p123456 --default-character-setutf8 tingshu_album mysql: [Warning] Using a password on the command …...

API网关之Fizz Gateway
Fizz Gateway 是一款轻量级、高性能的 API 网关,专门为服务间通信、流量控制、请求路由、鉴权与认证等需求而设计。它旨在为分布式系统和微服务架构提供高效的请求处理能力,帮助开发者构建和管理 API 服务。 核心特性 1. 请求路由 Fizz Gateway 通过强…...

pgvector docker版安装;稀疏向量使用;psycopg2 python连接使用
参看: https://cloud.tencent.com/developer/article/2359831 https://hub.docker.com/r/pgvector/pgvector/tags https://github.com/pgvector/pgvector 一、安装 拉取0.7版本 docker pull pgvector/pgvector:0.7.4-pg16运行: docker run --name pgvector -v $(pwd)/dat…...

C#命令行参数解析库System.CommandLine介绍
命令行参数 平常在日常的开发过程中,会经常用到命令行工具。如cmd下的各种命令。 以下为sc命令执行后的截图,可以看到,由于没有输入任何附带参数,所以程序并未执行任何操作,只是输出了描述和用法。 系统在创建一个新…...

CCF CSP题解:密码(key)(202409-1)
题目和思路 题目背景 西西艾弗网对用户密码有一套安全级别评定标准。 题目描述 在西西艾弗网上,用户的密码是一个由大写字母(A‐Z)、小写字母(a‐z)、数字(0‐9)和特殊字符(*和 …...

RuntimeError: Maximum Recursion Depth Exceeded - 递归深度超限的完美解决方案
RuntimeError: Maximum Recursion Depth Exceeded - 递归深度超限的完美解决方案 🛠️ RuntimeError: Maximum Recursion Depth Exceeded - 递归深度超限的完美解决方案摘要 📃引言 ✨1. 什么是递归?🔍1.1 递归的基本概念 &#x…...

Linux1-ls,cd,pwd
1.Linux操作系统的根目录用/表示。 Windows操作系统的根目录有D:E: 2.Linux命令格式 命令 [选项] [参数] 例如:ls -l / ls表示显示文件夹内容 -l表示以列表的形式展示 /表示显示的是根目录文件夹的内容 其中,[]里面的内容可省略ÿ…...

【高级编程】XML DOM4J解析XML文件(含案例)
文章目录 DOM4JDOM4J 解析 XML读取修改添加删除 XML(EXtensible Markup Language),可扩展标记语言。一种用于存储和传输数据的标记语言。XML 与操作系统、编程语言的开发平台无关。实现不同系统之间的数据交换。 作用:数据交互&a…...

查看VSFTPD配置的服务器路径和linux系统有哪些用户
要查看VSFTPD (Very Secure FTP Daemon)配置中定义的服务器路径,需要检查VSFTPD的配置文件。这通常可以在配置文件中找到并有不同的选项来设置路径。 这里有几个方法可以查看配置的服务器路径: 1. 检查主配置文件 VSFTPD的默认配置文件通常位于`/etc/vsftpd.conf`。可以使用…...

JavaEE: 创造无限连接——网络编程中的套接字
文章目录 Socket套接字TCP和UDP的区别有连接/无连接可靠传输/不可靠传输面向字节流/面向数据报全双工/半双工 UDP/TCP api的使用UDPDatagramSocketDatagramPacketInetSocketAddress练习 TCPServerSocketSocket练习 Socket套接字 Socket是计算机网络中的一种通信机制࿰…...

记K8s组件harbor和kuboard故障恢复
#记录一次工作实践# 故障现象: 本地私有仓库harbor和控制台kuboard均无法正常登陆。 解决过程: 1、harbor恢复过程 通过docker ps -a |grep harbor查看harbor相关的容器状态,发现均显示启动状态,但是仓库无法访问。 通过doc…...

c++ return {};
https://segmentfault.com/q/1010000042734336 return {}; 表示“返回一个用空 列表初始化器 初始化的函数返回类型的对象”。确切的行为取决于返回对象的类型。 std::string get_string() {return {}; // an empty string is returned }...

【设计模式-适配】
Adapter Pattern(适配器模式) 是一种结构型设计模式,其主要目的是让不兼容的接口能够协同工作。适配器模式通过引入一个适配器类,转换一个类的接口,使得原本不兼容的接口可以互相配合,从而实现接口的兼容性…...

深度学习02-pytorch-08-自动微分模块
其实自动微分模块,就是求相当于机器学习中的线性回归损失函数的导数。就是求梯度。 反向传播的目的: 更新参数, 所以会使用到自动微分模块。 神经网络传输的数据都是 float32 类型。 案例1: 代码功能概述: 该…...

使用Python实现深度学习模型:智能宠物监控与管理
在现代家庭中,宠物已经成为许多家庭的重要成员。为了更好地照顾宠物,智能宠物监控与管理系统应运而生。本文将详细介绍如何使用Python实现一个智能宠物监控与管理系统,并结合深度学习模型来提升其功能。 一、准备工作 在开始之前,我们需要准备以下工具和材料: Python环境…...

【HTTPS】对称加密和非对称加密
HTTPS 是什么 HTTPS 是在 HTTP 的基础上,引入了一个加密层(SSL)。HTTP 是明文传输的(不安全) 当下所见到的大部分网站都是 HTTPS 的,这都是拜“运营商劫持”所赐 运营商劫持 下载⼀个“天天动听“&…...

MySQL中的LIMIT与ORDER BY关键字详解
前言 众所周知,LIMIT和ORDER BY在数据库中,是两个非常关键并且经常一起使用的SQL语句部分,它们在数据处理和分页展示方面发挥着重要作用。 今天就结合工作中遇到的实际问题,回顾一下这块的知识点。同时希望这篇文章可以帮助到正…...

Java 编码系列:集合框架(List、Set、Map 及其常用实现类)
引言 在 Java 开发中,集合框架是不可或缺的一部分,它提供了存储和操作一组对象的工具。Java 集合框架主要包括 List、Set 和 Map 接口及其常用的实现类。正确理解和使用这些集合类不仅可以提高代码的可读性和性能,还能避免一些常见的错误。本…...

Go进阶概览 -【7.2 泛型的使用与实现分析】
7.2 泛型的使用与实现分析 泛型是Go 1.18引入的概念,在引入这个概念前经过了好几年的考量最终才将这这个特性加进去。 泛型在多种语言中都是存在的,比如C、Java等语言中都有泛型的概念。 本节我们将针对泛型的使用、实现原理进行整体的讲解。 本节代…...

罗德岛战记游戏源码(客户端+服务端+数据库+全套源码)游戏大小9.41G
罗德岛战记游戏源码(客户端服务端数据库全套源码)游戏大小9.41G 下载地址: 通过网盘分享的文件:【源码】罗德岛战记游戏源码(客户端服务端数据库全套源码)游戏大小9.41G 链接: https://pan.baidu.com/s/1y0…...

AI+教育|拥抱AI智能科技,让课堂更生动高效
AI在教育领域的应用正逐渐成为现实,提供互动性强的学习体验,正在改变传统教育模式。AI不仅改变了传统的教学模式,还为教育提供了更多的可能性和解决方案。从个性化学习体验到自动化管理任务,AI正在全方位提升教育质量和效率。随着…...

WebServer
一、服务器代码 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <unistd.h> #define PORT 80 #define BUFFER_SIZE 1024 void ha…...

java项目之基于spring boot的多维分类的知识管理系统的设计与实现源码
项目简介 基于spring boot的多维分类的知识管理系统的设计与实现实现了以下功能: 基于spring boot的多维分类的知识管理系统的设计与实现的主要使用者管理员可以管理用户信息,知识分类,知识信息等,用户可以查看和下载管理员发布…...

go的结构体、方法、接口
结构体: 结构体:不同类型数据集合 结构体成员是由一系列的成员变量构成,这些成员变量也被称为“字段” 先声明一下我们的结构体: type Person struct {name stringage intsex string } 定义结构体法1: var p1 P…...

力扣第一题——删除有序数组中的重复项
给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使得出现次数超过两次的元素只出现两次,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1)额外空间的条件下完成。 示例 1&#x…...

Tuxera NTFS for Mac 2023绿色版
在数字化时代,数据的存储和传输变得至关重要。Mac用户经常需要在Windows NTFS格式的移动硬盘上进行读写操作,然而,由于MacOS系统默认不支持NTFS的写操作,这就需要我们寻找一款高效的读写软件。Tuxera NTFS for Mac 2023便是其中…...

LeetCode[中等] 155. 最小栈
设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。 实现 MinStack 类: MinStack() 初始化堆栈对象。void push(int val) 将元素val推入堆栈。void pop() 删除堆栈顶部的元素。int top() 获取堆栈顶部的元素。int get…...