秋招斩获所有互联网大厂面经之计算机网络

>> 背熟,唯手熟尔,大家都这么厉害,只能记得更准才行。
 
1
CSRF 攻击
① 概念: CSRF 中文是跨站请求伪造,如图片的src写成删除用户的接口,就会导致只要浏览图片删除用户的BUG.
② 防范:验证码、Referer 检查、添加 Token。
 
 

-----------------------------------

2
从输入URL到渲染出整个页面的过程
① DNS解析的过程:
依次通过浏览器缓存、操作系统缓存、路由缓存、ISP的DNS服务器、根服务器。
② 浏览器与服务器的交互过程:
(1) 利用tcp协议通过三次握手与服务器建立连接。
(2) 浏览器根据解析的IP地址和端口号发起请求
(3) 服务器收到http请求后,返回相应报文
(4) 若状态为200,浏览器则开始页面的渲染。
③ 浏览器页面渲染的过程
(1) HTML 转换为 DOM 树。
(2) CSS 转换为 CSS 对象模型
(3) 两者合并为渲染树,并计算节点的layout
(4) 遍历渲染树绘制节点

从输入 URL 到页面加载完成的过程

特别复杂的版本:
  • 判断是否需要跳转(301)
  • 从浏览器中读取缓存
  • DNS 解析
  • TCP 连接
  • HTTP 请求发出
  • 服务端处理请求,HTTP 响应返回
  • 浏览器拿到响应数据,解析响应内内容,把解析结果展示给用户
  1. 在浏览器地址栏输入 URL
  2. 判断是否有永久重定向(301)
    1. 如果有,直接跳转到对应 URL
  3. 浏览器查看资源是否有强缓存,有则直接使用,如果是协商缓存则需要到服务器进行校验资源是否可用
    1. 检验新鲜通常有两个 HTTP 头进行控制ExpiresCache-Control
      • HTTP1.0 提供 Expires,值为一个绝对时间表示缓存新鲜日期
      • HTTP1.1 增加了 Cache-Control: max-age=,值为以秒为单位的最大新鲜时间
  4. 浏览器解析 URL获取协议,主机,端口,path
  5. 浏览器组装一个 HTTP(GET)请求报文
  6. DNS 解析,查找过程如下:
    1. 浏览器缓存
    2. 本机缓存
    3. hosts 文件
    4. 路由器缓存
    5. ISP DNS 缓存
    6. DNS 查询(递归查询 / 迭代查询)
  7. 端口建立 TCP 链接,三次握手如下:
    1. 客户端发送一个 TCP 的SYN=1,Seq=X的包到服务器端口
    2. 服务器发回SYN=1, ACK=X+1, Seq=Y的响应包
    3. 客户端发送ACK=Y+1, Seq=Z
    4. TCP 链接建立后发送 HTTP 请求
    5. 服务器接受请求并解析,将请求转发到服务程序,如虚拟主机使用 HTTP Host 头部判断请求的服务程序
    6. 服务器检查HTTP 请求头是否包含缓存验证信息如果验证缓存新鲜,返回304等对应状态码
    7. 处理程序读取完整请求并准备 HTTP 响应,可能需要查询数据库等操作
    8. 服务器将响应报文通过 TCP 连接发送回浏览器
    9. 浏览器接收 HTTP 响应,然后根据情况选择关闭 TCP 连接或者保留重用,关闭 TCP 连接的四次挥手如下
      1. 主动方发送Fin=1, Ack=Z, Seq= X报文
      2. 被动方发送ACK=X+1, Seq=Z报文
      3. 被动方发送Fin=1, ACK=X, Seq=Y报文
      4. 主动方发送ACK=Y, Seq=X报文
    10. 浏览器检查响应状态吗:是否为 1XX,3XX, 4XX, 5XX,这些情况处理与 2XX 不同
    11. 如果资源可缓存,进行缓存
    12. 对响应进行解码(例如 gzip 压缩)
    13. 根据资源类型决定如何处理(假设资源为 HTML 文档)
    14. 解析 HTML 文档,构件 DOM 树,下载资源,构造 CSSOM 树,执行 js 脚本,这些操作没有严格的先后顺序,以下分别解释
    15. 构建 DOM 树
      1. Tokenizing:根据 HTML 规范将字符流解析为标记
      2. Lexing:词法分析将标记转换为对象并定义属性和规则
      3. DOM construction:根据 HTML 标记关系将对象组成 DOM 树
    16. 解析过程中遇到图片、样式表、js 文件,启动下载
    17. 构建CSSOM 树
      1. Tokenizing:字符流转换为标记流
      2. Node:根据标记创建节点
      3. CSSOM:节点创建 CSSOM 树
      1. 从 DOM 树的根节点遍历所有可见节点,不可见节点包括:1)script,meta这样本身不可见的标签。2)被 css 隐藏的节点,如display: none
      2. 对每一个可见节点,找到恰当的 CSSOM 规则并应用
      3. 发布可视节点的内容和计算样式
    18. js 解析如下
      1. 浏览器创建 Document 对象并解析 HTML,将解析到的元素和文本节点添加到文档中,此时document.readystate 为 loading
      2. HTML 解析器遇到没有 async 和 defer 的 script 时,将他们添加到文档中,然后执行行内或外部脚本。这些脚本会同步执行,并且在脚本下载和执行时解析器会暂停。这样就可以用 document.write()把文本插入到输入流中。同步脚本经常简单定义函数和注册事件处理程序,他们可以遍历和操作 script 和他们之前的文档内容
      3. 当解析器遇到设置了async属性的 script 时,开始下载脚本并继续解析文档。脚本会在它下载完成后尽快执行,但是解析器不会停下来等它下载。异步脚本禁止使用 document.write(),它们可以访问自己 script 和之前的文档元素
      4. 当文档完成解析,document.readState 变成 interactive
      5. 所有defer脚本会按照在文档出现的顺序执行,延迟脚本能访问完整文档树,禁止使用 document.write()
      6. 浏览器在 Document 对象上触发 DOMContentLoaded 事件
      7. 此时文档完全解析完成,浏览器可能还在等待如图片等内容加载,等这些内容完成载入并且所有异步脚本完成载入和执行,document.readState 变为 complete,window 触发 load 事件
    19. 显示页面(HTML 解析过程中会逐步显示页面)
 

-----------------------------------

3
网络不通了,如何定位网络问题?
ifconfig查看本机网络配置,ping查看服务器是否通畅,telnet查看端口是否可以访问
 
 

-----------------------------------

4
tcp/udp 的区别
  • TCP 面向连接,UDP 无连接。
  • TCP 面向字节流,UDP 面向报文。
  • TCP 开销大,UDP 开销小
  • TCP 可靠传输,UDP 不可靠传输
  • TCP 只能一对一, UDP 支持一对一、一对多、多对一、多对多
  • TCP 传输大量可靠性高的数据,如文件。UDP 适合实时应用,如直播、视频会议。
 
 

-----------------------------------

5
TCP-三次握手/四次断开的必要性
三次握手
① 客户端发送SYN建立客户端到服务端的有效连接 
② 服务端回应 ACK + SYN 建立服务端到客户端的有效连接 
③ 客户端回应 ACK。
必要性是防止已失效的请求报文突然又传送到了服务端而造成连接的误判
四次断开
① 客户端发送释放请求 
② 服务端确认 
③ 服务端发送释放请求 
④ 客户端确认。
必要性:关闭连接时,当服务端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉客户端,"你发的FIN报文我收到了"。只有等到我服务端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。
 
 

-----------------------------------

6
SEQ 序列号的作用
跟踪发送的数据量,比方说序列号为1000,就是告诉接收端”我发送的数据是从第1000开始的
 
 

-----------------------------------

7
TCP四次挥手客户端关闭链接为什么要等待2倍MSL
① 保证TCP协议的全双工连接能够可靠关闭。 
② 保证这次连接的重复数据段从网络中消失
 
 

-----------------------------------

8
TCP如何保证可靠
① 校验和 :二进制相加后取反,检测数据在传输过程中的变化。
② 确认应答 + 序列号:对每一个包进行编号。 
③ 超时重传:没有及时收到确认就重发。 
④ 流量控制:让发送方的发送速率不要太快,让接收方来得及接收,可以使用滑动窗口来实现。 
⑤ 拥塞控制:网络拥挤时,减少数据的发送。
 
 

-----------------------------------

9
OSI,TCP/IP,五层协议的体系结构,以及各层协议
三种分层:
① OSI分层 (7层):物理层、数据链路层、网络层、传输层、会话层、表示层应用层。
② 五层协议 (5层):物理层、数据链路层、网络层、传输层、 应用层。
③ TCP/IP分层(4层):网络接口层、 网络层、传输层、 应用层。
每一层的协议如下:
物理层:RJ45、CLOCK、IEEE802.3 (中继器,集线器)
数据链路层:PPP、VLAN、MAC (网桥,交换机)
网络层:IP、IPX、ARP、RARP(路由器)
传输层:TCP、UDP、SPX
会话层:NFS、SQL、RPC
表示层:JPEG、MPEG、ASCII
应用层:FTP、DNS、Telnet、SMTP、HTTP
每一层的作用如下:
物理层:通过媒介传输比特,确定机械及电气规范
数据链路层:将比特组装成帧进行点到点的传递
网络层:负责数据包从源到宿的传递和网际互连
传输层:提供端到端的可靠报文传递和错误恢复
会话层:建立、管理和终止会话。
表示层:对数据进行翻译、加密和压缩
应用层:访问OSI环境的手段
 
 

-----------------------------------

10
信道复用技术
时分、频分、统计时分、波分、码分
 
 

-----------------------------------

11
ARQ 协议
① 解释:ARQ 全称 Automatic Repeat-reQuest, 中文自动重传请求。
② 原理:发送一段时间之内没有收到确认,会重新发送。
③ 分类
1. 停止等待 ARQ:每发送一个分组就停止发送,等待对方确认。
2. 连续 ARQ:发送窗口中连续发送,不需要等待确认,接收方对最后一个发送确认。
 
 

-----------------------------------

12
打开一个网页,使用了哪些协议?
① 通过域名查找 IP,使用 DNS 协议。
② 建立 HTTP 的过程中:
建立的连接是 TCP 协议,建立 TCP 时在网络层使用 IP 协议,IP数据包在路由器之间使用 OPSF 协议,路由器与服务器之间将 IP 转换为 MAC 地址使用的是 ARP 协议,最后通过 HTTP 协议访问网页。
 
 

-----------------------------------

13
HTTP 1.0 和 HTTP 1.1 的区别
① 长短连接:1.0 默认短连接,1.1 默认长连接。Connection: keep-alive.
② 状态码:1.1 增加了 24 个状态码,如 410 已删除。
③ 缓存:1.1 引入了更多的缓存头,如If-Match, If-None-Match.
 ④ 带宽优化:1.1 支持 range 部分请求,返回 206 Partial Content,能充分利用带宽。
 
 

-----------------------------------

14
HTTP 与 HTTPS 区别
① 端口协议:“http:// :80”与“https:// 443” 的默认端口区别。
② 安全性:HTTP 明文传输, HTTPS 加密传输,证书验证阶段采用的是非对称加密,数据传送阶段采用的是对称加密。
③ 资源消耗:HTTPS 比 HTTP 耗费更多资源。
 
 

-----------------------------------

15
各种认证授权方式
认证
① Cookie: 存储在客户端的用户信息
② Session: 存储在服务端的状态
③ Token: 如 JWT,包含头、负载、签名,存储在 LocalStorage 中,传递的时候放在 Header 的 Authorization 中。
授权
① OAuth 2.0: 为第三方应用发放一个有时效性的令牌 token,通过这个 token
可以获取相关资源。应用场景如第三方登录、支付。
② SSO: 单点登录,用户登录多个子系统中的其中一个,就有权访问其他的相关系统。
 
 

-----------------------------------

16
Nginx 负载均衡
Nginx 负载均衡怎么做
首先要有两台及以上的应用服务器,然后在 nginx.conf 中配置 proxy_pass 、up_stream 。
Nginx 负载均衡方式
① 轮询:按时间顺序逐个分配到不同的后端服务器。
② weight: 指定轮询权重。
③ ip_hash: 根据 ip 的 hash 分配,每个访客固定一个服务器。
④ backup: 作为备份,其他忙或者 down 的时候使用。
⑤ down: 暂时不参与.
⑥ 第三方的 fair: 按后端服务器的响应时间来分配。
常见的负载均衡算法
① 轮询算法:均匀、逐个分配到后端服务器上。
② 随机算法:随机选取,统计上趋近于轮询。
③ 加权轮询算法:轮询基础上增加权重。
④ 加权随机算法:随机基础上增加权重。
⑤ 最小时延算法:分配到时延最小的后端服务器。
⑥ 一致性哈希算法:构造一个长度为2^32的一致性 hash 环,将 key 的 hash 映射到环上,查找离它最近的服务器节点。这个“一致性”指的是增加、删除服务器时只影响到环空间中前一台服务器,增加了系统的鲁棒性。
 
 

-----------------------------------

17
中间人攻击
① 中间人攻击的概念:英文名称 Man In The Middle Attack,简称 MITM 攻击,指的是攻击者与通讯的两端分别建立独立的联系,并交换其收到的数据,通讯的两端认为他们正在通过一个私密的连接与对方直接对话,殊不知整个会话都被中间人完全控制。
② 中间人攻击的原理:参与成员有发送者 A,接受者 B,攻击者 C。
 
○ A 让 B 发送公钥,结果 C 拦截,变成 C 让 B 发送公钥;
○ B 发送公钥给 A,结果 C 拦截,变成 B 给 C,然后 C 替换后给 A。
○ A 用替换后的密钥加密发给 B,结果 C 拦截,C 解密后伪造新数据再发给 B。
 
③ 中间人攻击的防范:不要轻易信任证书、APP 预埋证书。
 
 

-----------------------------------

18
HTTPS 证书验证
① 证书是否过期
② 通过本地信任的根证书查询 CA 是否可靠。
③ 证书是否被篡改,使用 CA 根密钥解密签名得到原始指纹,再对证书使用指纹算法得到新指纹,两者不一样则被篡改。
④ 域名是否匹配。
 
 

-----------------------------------

19
详细说一下滑动窗口
① TCP 窗口机制:TCP 窗口大小指的是一次传输多少数据。窗口机制有两种:固定大小、滑动窗口。窗口有两个:发送窗口、接收窗口。
② 滑动窗口协议:窗口过大导致拥塞,窗口过小导致延迟。滑动窗口协议是传输层进行流量控制的一种措施,接收方通知发送方自己的窗口大小,从而控制发送方的发送速度,避免发送速度过快。
③ 滑动窗口的可靠性:建立在确认重传基础上,发送窗口收到确认才会移动左边界,接收窗口前面所有段都确认才会移动左边界,以确保对方有机会重传。
④ 滑动窗口的三大作用
  • 可靠性:对发送的数据进行确认。
  • 流量控制:窗口大小随链路变化。
  • 加速传输:滑动窗口协议允许发送方在停止并接收确认报文前可以连续发送多个分组,不需要每发送一个就等待确认,因此可以加速数据的传输。
 
 

-----------------------------------

20
详解 DNS
① 概念:全称是 Domain Name System,作用是域名转 IP。
② 流程
首先尝试缓存:
浏览器缓存、操作系统缓存、路由缓存、ISP 的 DNS 服务器、根服务器。
如果缓存中没有:
应用程序查询域名的 IP --> Socket 层面上生成发送给 DNS 服务器的查询消息 --> 操作系统内部协议栈层面发送 UDP 消息 --> 物理层面通过网卡发送给服务器 --> 服务器返回 --> 物理层面通过网卡返回 --> 操作系统内部协议栈层面接收 UDP 消息 --> Socket 层面接收消息、取出 IP 地址、放入内存 --> 应用程序得到 IP。
③ 协议:在域名解析中使用的是 UDP 协议,因为在 512 字节以内,速度快;在主从 DNS 服务器之间进行区域传送使用的是 TCP 协议,因为同步的内容可能大于 512 字节。
 
 

-----------------------------------

21
HTTPS 的四次握手
① 客户端发送客户端随机数、支持的加密方法。
② 服务端回复支持的加密方法、服务端随机数、证书、非对称加密的公钥。
③ 客户端生成新随机数,用公钥加密后发给服务端。
④ 服务端用私钥解密,利用上面三个随机数生成对称加密的秘钥,之后通过对称加密传输数据。
 
 

-----------------------------------

22
http报文:响应/请求报文内容
报文包括状态行、头部、空行、数据四个部分。
状态行
(请求)请求方法、URL、HTTP 版本
(响应)状态码、HTTP 版本
头部
(两者都有)Date, Connection, Cache-Control, Content-Type, Content-Length 等
(请求)Host, Accept, Accept-Encoding, Accept-Language 等
(响应)Accept-Ranges, Location,Set-Cookie 等
 
 

-----------------------------------

23
302重定向过程
302 是临时重定向,如果出现了 302,本次跳转 Location,下次还是向原来的 URI 发出请求。
 
 

-----------------------------------

24
TCP 拥塞控制
① 概念:对网络中资源的需求超出了能提供的部分,网络的性能就会变坏,称为拥塞。原因:接收方容量不够、网络内部有瓶颈。拥塞控制就是防止过多的数据注入到网络中,避免过载。
② 检测方法:分组中保留一个比特存储是否发生拥塞,然后发出探测分组,询问拥塞是否发生。如果发生拥塞的话,会收到重复的 ACK,或者出现超时。
③ 四种算法:慢开始、拥塞避免、快速重传、快速恢复。
  • 慢开始:从小到大逐渐增大发送窗口,大于阈值变成拥塞避免算法。
  • 拥塞避免:窗口线性加一,发生超时则重新进行慢开始算法。
  • 快速重传:让发送方尽快重传,接收方不要等待自己发送数据才确认,而是要立即确认。
  • 快速恢复:与快速重传配合使用,连续收到 3 个重复确认后将门限减半,然后不执行慢开始算法,而是执行拥塞避免算法。
 
 

-----------------------------------

25
SSL
SSL 全称 Secure Socket Layer, 中文是安全套阶层。SSL 基于 HTTP 标准并对 TCP 传输数据时进行加密,所以HTTPS 是 HTTP + SSL/TCP 的简称。TLS 是 SSL 标准化后的产物,TLS 1.0 相当于 SSL 3.1。
 
 

-----------------------------------

26
DNS 劫持
DNS 劫持指的是通过某种手段获得域名的解析控制权,进而修改解析结果,导致访问修改后的 IP. 解决办法是使用公用的 DNS 服务器,如 4 个 8、4 个4、4 个 114.
 
 

-----------------------------------

27
对称加密和非对称加密,非对称加密的过程
对称加密:双方使用相同的秘钥,如 DES, 3DES, AES.
非对称加密:使用不同的公钥和私钥。如 RSA, DSA, ECC.
 
非对称加密的过程:
① A/B 都要产生一对公钥和私钥。
② A/B 相互告知公钥。
③ 发送方使用接收方的公钥加密后发送,接收方使用自己的私钥解密。
 
 

-----------------------------------

28
DoS 攻击
中文是拒绝服务攻击,用数据包淹没本地系统,耗尽系统资源,使之不能执行有用的业务。
常见的攻击方式:
① TCP SYN 泛洪:三次握手 + 源地址欺骗
② ping 泛洪:让系统耗尽资源去做无用的应答
③ UDP 泛洪:UDP 无状态,更容易攻击,要关闭所有非必要的 UDP 端口。
④ 缓冲区溢出:数据堆栈被覆盖导致崩溃,如使用 snprintf() 代替 printf()
⑤ ICMP 路由重定向炸弹:欺骗主机转发到另一个更远的主机处
⑥ 分片炸弹:构造一个非常小的数据包导致系统或程序崩溃。
 
 

-----------------------------------

29
在手机上将网络的 DNS 改为手动,此时大部分软件不可以访问,而微信和 QQ 仍然可以访问,为什么?
HTTPDNS:通过 HTTP 请求搭建好的服务器集群。

腾讯云:119.29.29.29
 
 

-----------------------------------

30
如何控制长连接
① 应用程序发送心跳包检测连接是否正常。
② TCP 的 KeepAlive 机制。
 
 

-----------------------------------

31
路由表咋来的 mac 表咋来的
路由表:分为静态路由表和动态路由表。静态路由表由系统管理员事先设置好。动态路由表是路由器根据网络系统的运行情况而自动调整。
mac 表:比如 1 给 2 发消息,首先查询自己的 mac 表,如果没查到,就除了 1 以外的都广播出去,等回传的时候,就记录下 2 的 mac。循环往复,所有 mac 地址都有记录了。
 
 

-----------------------------------

32
怎么维持的长连接 为啥要有心跳包
① 进程保活:两点考虑,提高进程的优先级,降低进程被杀死的概率;如果进程被杀死,则重新启动。
② 心跳保活:客户端发送心跳包给服务端,服务端回复同样的心跳信息。作用是确保连接存活,并检测长连接的有效性。
③ 断线重连:当监测到网络变化时,重新连接。
 
 

-----------------------------------

33
三次握手 第二个包丢了会咋样?
① 第一个包丢了:客户端会周期性超时重传,直到收到服务端的确认
② 第二个包丢了:服务端会周期性超时重传,直到收到客户端的确认
③ 第三个包丢了,服务端直接发送 RTS 报文,进入 CLOSED 状态,目的是为了防止 SYN 泛洪攻击。
 
 

-----------------------------------

34
TCP的分包机制
① 分包:如发送一个 helloworld, 收到了 hello 和 world。
TCP 是以 Segment 为单位发送数据的,有一个最大消息长度 MSS ,如果数据包长度超过 MSS,则需要拆分成两个段发送。
② 粘包:两个数据包中间出现粘连,如发送 hello 和 world,收到了 helloworld。原因是 Nagle 算法,或者是接收端接收不及时。 
 
 

-----------------------------------

35
TCP包头内容都有哪些
 
这个图失效了,建议直接背诵图。
 

-----------------------------------

36
TCP的keepalive了解吗?说一说它和http的keepalive的区别?
TCP 的 keepalive 作用
判断对方是否存活、防止中间设备因超时删除相关的连接表。
区别
HTTP keepalive 是为了让 TCP 活得更久一些,而 TCP 的 keepalive 是检测 TCP 连接状况的保鲜机制。
 
 

-----------------------------------

37
网络字节序和CPU字节序
CPU 字节序
① 大端存储:数据的高字节保存在内存的低地址中,低字节保存在高地址中。
② 小端存储:数据的高字节保存在内存的高地址中,低字节保存在低地址中。
网络字节序
是 TCP/IP 规定的格式,与 CPU、操作系统无关,采用大端模式。
 
 

-----------------------------------

38
TCP的TIME_WAIT
TIME_WAIT 的作用,在 2MSL 时间中:
① 保证TCP协议的全双工连接能够可靠关闭。
② 保证此次连接的重复数据段从网络中消失
问题及如何避免
问题:高并发短连接的服务器上,会出现大量的 TIME WAIT,将端口占用完后,部分客户端就会连不上。
避免:设置 SO_REUSEADDR,如果端口忙,TIME WAIT 可以重用端口。
 
 

-----------------------------------

39
UDP 的头部
① 源端口号和目的端口号。
② 报文长度
③ 校验和
 
 

-----------------------------------

40
用udp下载的文件缺失了怎么判断,怎么补救
判断 UDP 是否丢失数据
使用类似于" TCP 保证可靠性"的措施来判断即可:校验和、确认应答、超时重传、流量控制、拥塞控制。
比方说校验和,直接看校验和是否一致,具体一点,就是直接计算文件的 MD5 是否和源文件一致。
 
补救方法
也是模拟 TCP 的机制即可:
① 校验和 :二进制相加后取反,检测数据在传输过程中的变化。
② 确认应答 + 序列号:对每一个包进行编号。
③ 超时重传:没有及时收到确认就重发。
④ 流量控制:让发送方的发送速率不要太快,让接收方来得及接收,可以使用滑动窗口来实现。
⑤ 拥塞控制:网络拥挤时,减少数据的发送。
 
 

-----------------------------------

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MichaelToLearn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值