Linda面试题-详解

Gaussian安装指南:Linux下量子化学计算环境的精密构建 Gaussian作为量子化学计算的核心引擎,其安装本质是构建一个高精度、低耦合的HPC级运行环境。它并非普通软件部署,而是涉及Fortran/C++混合编译链、Intel MKL数学库绑定、MPI并行通信层配置、许可证服务(FlexLM)及临时文件I/O路径优化等多维度技术协同。理解BLAS/LAPACK ABI兼容性、glibc版本约束与x86_64硬件指令集依赖,是规避‘undefined reference’‘License not found’等高频报错的关键。该环境直接支撑CCSD(T)、TD-D 阅读详情

第一题:虚函数表是在什么时候建立的?

分析过程:虚函数表的建立是取决于定义类的时候是否包含虚函数,如果有类函数/ 方法声明为虚,则改类会建立一张虚表.在网上找到一个牛人用汇编的方法论证虚 表是存放在常量区内(具体论证就省略,否则就扯远了). 继承类会同样建立一张虚表,并将覆盖虚表中父类虚函数的地址.

虚函数指针:虚函数指针是在实例化对象 的时候由构造函数生成的指向虚表的指针.放在对象地址的首位. 下面代码用于显 示虚表及虚表指针.

(在Ubuntu下验证通过)


#include <iostream>
#include <string>
using namespace std;
class Base{
public:
virtual void f(){cout<<"Base::f"<<endl;};
virtual void g(){cout<<"Base::g"<<endl;};
};

//typedef void(*Fun)(void);
int main(int argc,char* argv[])
{
typedef void(*Fun)(void);
Base b;
Fun pFun=NULL;
cout<<"v-table address:"<<(int*)(&b)<<endl;
cout<<"first virtual fun address:"<<(int*)*(int*)(&b)<<endl;
pFun=(Fun)*((int*)*(int*)(&b));
pFun();
cin.get();
return 0;
}
所以这个问题的答案:我的理解是虚函数表是在代码编译生成,程序载入内存的时候,放在内存常量区.
虚函数指针是在对象建立时由构造函数生成并保存于对象地 址首部.


第二题:请说明一下静态函数和静态变量

 

C++中的静态成员变量和静态成员函数。

(1)类静态数据成员在编译时创建并初始化:在该类的任何对象建立之前就存在, 不属于任何对象,而非静态类成员变量则是属于对象所有的。类静态数据成员只有 一个拷贝,为所有此类的对象所共享。需要注意的是:静态数据成员不能在类中初 始化(对于常量静态类变量有待考证,好像可以在类外或main()函数之前定义,初 始化可以放在类中),一般在类外和main()函数之前初始化,缺省时初始化为0。静 态数据成员用来定义类的各个对象所公有的数据,比全局变量更安全。(2)类静态 成员函数属于整个类,不属于某个对象,由该类所有对象共享。静态成员可定义为 inline函数。一般情况下静态成员函数用于访问同一类中的静态数据成员或全局变 量,而不访问非静态成员,如需访问非静态成员,需要将对象作为参数,通过对象 名访问该对象的非静态成员。静态成员函数也可以在类外定义,此时不可以用 static修饰。静态成员函数存在的原因是什么呢?主要是在建立任何对象之前可用 它来访问静态数据成员,普通函数不能实现此功能。

C++静态成员和静态成员函数的使用:静态成员的调用格式:类名::静态数据 成员名、对象名.静态数据成员名、对象指针->静态数据成员、对象引用.静态数据 成员(但类中很少会出现公有数据成员,这段仅仅讨论语法,未考虑实际运用中的 数据封装问题)。静态成员函数的调用格式:类名::静态成员函数名、对象名.静 态成员函数名、对象指针->静态成员函数名、对象引用.静态数据成员。静态成员 函数没有this指针,因它不与特定对象相联系,调用时推荐使用“类名::静态成 员函数名”格式。总结来说,在有对象的情况下,可以用调用普通类成员函数、普 通成员变量的方式调用静态成员函数和静态成员变量。从这里可以看出静态成员变 量和静态成员函数的使用应该是在不建立任何对象的情况下调用它们。

 

第三题:C++多态是怎么是实现的?

编译时的多态性
编译时的多态性是通过重载来实现的。对于非虚的成员来说,系统在编译时,根据传递的参数、返回的类型等信息决定实现何种操作。


运行时的多态性
运行时的多态性就是指直到系统运行时,才根据实际情况决定实现何种操作。C++中,运行时的多态性通过虚成员实现。
编译时的多态性为我们提供了运行速度快的特点,而运行时的多态性则带来了高度灵活和抽象的特点。



第四题:构造函数可以是虚函数吗?

由前面第一问的时候给出,如果构造函数是虚函数的话,在调用构造函数的时候会使用指针在虚函数表里寻找构造函数. 但是由于虚函数指针是在构造函数执行后才能生成的. 所以会产生悖论.

实际的使用效果是当构造函数为虚函数的时候,编译时会报错,构造函数不能设为虚.


第五题:const 在什么时候使用?

1可以定义const常量
const int Max = 100; 
 
2便于进行类型检查
const常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查,而对后者只进行字符替换,没有类型安全检查,并且在字符替换时可能会产生意料不到的错误
void f(const int i) { .........}//对传入的参数进行类型检查,不匹配进行提示
 
3可以保护被修饰的东西
防止意外的修改,增强程序的健壮性。
void f(const int i) { i=10;//error! }//如果在函数体内修改了i,编译器就会报错
 
4可以很方便地进行参数的调整和修改
同宏定义一样,可以做到不变则已,一变都变
  
 
5为函数重载提供了一个参考
class A
{
           ......
  void f(int i)       {......} //一个函数
  void f(int i) const {......} //上一个函数的重载
           ......
};
 
6
 可以节省空间,避免不必要的内存分配
 const定义常量从汇编的角度来看,只是给出了对应的内存地址,而不是象#define一样给出的是立即数,所以,const定义的常量在程序运行过程中只有一份拷贝,而#define定义的常量在内存中有若干个拷贝
 #define PI 3.14159         //常量宏
const doulbe  Pi=3.14159;  //此时并未将Pi放入ROM中
              ......
double i=Pi;   //此时为Pi分配内存,以后不再分配!
double I=PI;  //编译期间进行宏替换,分配内存
double j=Pi;  //没有内存分配
double J=PI;  //再进行宏替换,又一次分配内存!
 
7提高了效率
编译器通常不为普通const常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与读内存的操作,使得它的效率也很高

 


第六题:虚函数与纯虚函数的区别?

1.C++虚函数与纯虚函数用法与区别,.虚函数和纯虚函数可以定义在同一个类(class)中,含有纯虚函数 的类被称为抽象类(abstract class),而只含有虚函数的类(class)不能被称为抽象类(abstract class) 。


2.虚函数可以被直接使用,也可以被子类(sub class)重载以后以多态的形式调用,而纯虚函数必须在子
类(sub class)中实现该函数才可以使用,因为纯虚函数在基类(base class)只有声明而没有定义。
3.虚函数和纯虚函数都可以在子类(sub class)中被重载,以多态的形式被调用。
4.虚函数和纯虚函数通常存在于抽象基类(abstract base class -ABC)之中,被继承的子类重载,目的是
提供一个统一的接口。
5.虚函数的定义形式:virtual fun{};
  纯虚函数的定义形式:virtual fun{ } = 0;
虚函数和纯虚函数的定义中不能有static标识符,原因很简单,被static修饰的函数在编译时候要求前期

bind,然而虚函数却是动态绑定(run-time bind),而且被两者修饰的函数生命周期(life recycle)也不一

样。
6. 如果一个类中含有纯虚函数,那么任何试图对该类进行实例化的语句都将导致错误的产生,因为抽象

基类(ABC)是不能被直接调用的。必须被子类继承重载以后,根据要求调用其子类的方法。

 

 

第七题:引用与指针的区别?

1.在任何情况下都不能使用指向空值的引用,一个引用必须总是指向某些对象,引用应被初始化。指针可以为空指针

2. 指针与引用的另一个重要的不同是指针可以被重新赋值以指向另一个不同的对象。但是引用则总是指向在初始化时被指定的对象,以后不能改变。(但是引用所指的对象可以被修改,可以理解为地址不被修改?)


3.重载某个操作符时,你应该使用引用(返回值使用引用)

 

以下引用答案:

    ★ 相同点:

    1. 都是地址的概念;

    指针指向一块内存,它的内容是所指内存的地址;引用是某块内存的别名。

    ★ 区别:

    1. 指针是一个实体,而引用仅是个别名;

    2. 引用使用时无需解引用(*),指针需要解引用;

    3. 引用只能在定义时被初始化一次,之后不可变;指针可变;

    引用“从一而终” ^_^

    4. 引用没有 const,指针有 const,const 的指针不可变;

    5. 引用不能为空,指针可以为空;

    6. “sizeof 引用”得到的是所指向的变量(对象)的大小,而“sizeof 指针”得到的是指针本身(所指向的变量或对象的地址)的大小;

    typeid(T) == typeid(T&) 恒为真,sizeof(T) == sizeof(T&) 恒为真,但是当引用作为成员时,其占用空间与指针相同(没找到标准的规定)。

    7. 指针和引用的自增(++)运算意义不一样;

    ★ 联系

    1. 引用在语言内部用指针实现(如何实现?)。

    2. 对一般应用而言,把引用理解为指针,不会犯严重语义错误。引用是操作受限了的指针(仅容许取内容操作)。

24 硬件工程师笔面试高频考点真题解析——SPI总线 摘要: SPI(串行外设接口)是一种高速同步串行通信总线,采用主从架构,通过四根信号线(SCLK、MOSI、MISO、CS)实现全双工同步传输。其特点包括高速率(可达几十MHz)、无地址与应答机制、四种工作模式(由CPOL和CPHA组合决定)及灵活的电路拓扑(标准四线、菊花链、三线半双工)。高速SPI需串联电阻以匹配阻抗、消除信号反射并降低EMI。SPI广泛应用于Flash、传感器等场景,但缺乏多主机仲裁和校验机制,需注意主从模式匹配与硬件设计优化。 阅读详情

相关推荐

2024年最全scrapy+scrapyd+gerapy 爬虫调度框架,字节跳动面试时间

scrapyd是一个用于部署和运行scrapy爬虫的程序,它允许你通过JSON API来部署爬虫项目和控制爬虫运行,scrapyd是一个守护进程,监听爬虫的运行和请求,然后启动进程来执行它们方便地控制爬虫运行直观地查看爬虫状态实时地查看爬取结果简单地实现项目部署统一地实现主机管理轻松地编写爬虫代码。

2401_84140653的博客 1200

探秘static——类不需实例化就能用?

人是一个非静态类。人有脑子,这是一个用static修饰的属性。 这个属性是针对所有的人,是人的共同特征。而不是某个特点对象所特有的(比如张三有脑子,李四没脑子),因为只要是个人,他都有脑子(虽然卡洛斯·罗德里格兹只有半个脑子,还有些人比较脑残→_→,那也算是有脑子),既然是人类共有的,那么他就不能被实例化。

点滴汇聚,智在积累。——Danny 8502

使用 arxiv-sanity 实时跟进自己研究领域的Paper

介绍 arxiv.org是一个非常大的预印本资源库,里面有大量的最新的论文,但缺点是浏览、搜索和排序不是很方便。这个资源库每天会更新大量的论文,如果通过手动搜索和浏览则效率很低,高引用的好文章难以及时的找到并阅读,造成时间的浪费。因此 使用 ...

John's Blogs 8278

C++类静态成员初始化顺序

存在多个全局变量时,它们的初始化顺序是未知的,如果某些全局变量初始化依赖了其他的全局变量,可能会诱发程序未定义行为,在进入main函数之前就崩溃。尤其是在c++类的静态成员之间,这种依赖关系还是挺常见的,一旦发生这种bug,是很难定位的,一来没办法debug,因为还没进入main就崩了,在一个这种问题可能还是偶发的,更难排查了。此时,派生类的静态成员就依赖了父类的静态成员,有可能派生类静态成员去执行初始化时,父类的静态成员尚未初始化,这样就直接导致程序异常退出。

yuanshenqiang的博客 733

【CTFhub】——hate_php2021

【CTFhub】——hate_php2021

manerzi的博客 1605

Livox-avia+FAST-LIO麻瓜使用教程

激光雷达 SLAM Fastlio 安装

aaaaaaaaaww12的博客 3675

静态成员数据 静态对象初始化

1.静态成员数据的定义,与静态类型的变量的定义方式一样,要在成员数据的定义之前加关键字static。2.静态成员数据必须有确定的值,但由于在类的定义中不能对成员数据直接进行初始化,故必须在类定义的外部对静态成员数据再声明一次,并进行初始化,此时,前面不需要加关键字static。同时为了保持静态成员数据取值的一致性,一般在类的构造函数中不给静态成员数据设置初值。对静态成员数据初始化的顺序为它们在

zhuzongwei1988的专栏 4407

C# 与华中数控设备通信:数控机床自动化控制与实时监测系统

华中数控系统与C#通信开发指南 核心要点 通信基础 支持串口(RS232/RS485)和以太网两种连接方式 协议选择:通用Modbus协议或华中自定义HNC协议 关键数据映射表明确各参数对应的寄存器地址和功能码 系统架构 四层架构:设备层→通信层→业务层→应用层 包含实时数据采集、指令下发、状态监控、异常处理全流程 支持Modbus和HNC协议动态切换 代码实现 串口通信使用NModbus库简化开发 提供连接管理、数据读取、指令下发完整示例 包含异常处理和超时重连机制 应用价值 实现数控机床远程监控和自动化

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 2018

2010.10.13-Linda的面试题

看完Socket,看完AO,看完二阶段构造,看完描述符,看完OOP,看完设计模式,看完算法,然后兴高采烈去面试.第一题:虚函数表是在什么时候建立的?答: .....第二题:请说明一下静态函数和静态变量打击中未缓过神来答:静态...静态.... 静态啥?静态变量只能有一个实例?静态函数不需要实例化就能使用?第三题:C++多态是怎么是实现的?终于有个有把握的了答:多态分为静多态和动多态(其实我的意思是编译时多态,和运行时多态),静多态有函数的重载,运算符的重载,动多态有虚函数.点评:不要背书上的答案,要在使用中

Crazy Bird 545

海洋CMS admin_notify.php 远程代码执行漏洞复现(CVE-2024-30565)

海洋CMS admin_notify.php 接口处存在远程代码执行漏洞,经过身份验证的远程攻击者可利用该漏洞执行任意代码,写入后门文件,进而控制整个web服务器。

0xSec 2713

飞牛fnNAS搭建Web网页版OFFICE(WPS)软件

本文介绍了如何在飞牛NAS上通过Docker容器部署WPS Office办公软件。主要内容包括:启用Docker服务、准备项目文件夹结构、使用Compose方式构建容器、解决端口冲突问题、配置中文输入法和字体库,以及通过ZeroTier实现远程访问。文章详细说明了每个步骤的操作方法,包括容器启动、输入法设置、字体添加和文件存储位置配置。最后还介绍了使用ZeroTier内网穿透技术实现远程访问NAS上WPS服务的方法,让用户可以在不同设备上随时编辑NAS中的文件。整个部署过程完整清晰,为NAS用户提供了便捷的

dgnankai的专栏 1699

Linda-Zhang Blog

Linda-Zhang Blog链接:http://linda1980.itpub.net ...

ckkay800264的博客 75

【VibeCoding系列】小白入门指南:模型选择、编辑器选择、项目预定全分析

开箱即用:下载安装就能用,不用配 API Key(也可以自己配)Cmd+K 快速修改:选中代码,按 Cmd+K,直接让 AI 修改Cmd+L 对话:侧边栏聊天,支持引用文件和代码@文件引用:输入 @ 就能引用项目中的文件,AI 自动读取上下文Agent 模式:告诉 AI 一个需求,它自动跨文件修改下载地址cursor.com(免费版有额度限制,足够入门)✅下载 Cursorcursor.com),安装打开✅选一个小项目(个人名片页 or Todo List)✅按照七步工作流开干。

十年老程序猿,AI 疯狂研究专家,前沿硬核知识分享 209

帮人家做了一个面试题

帮人家做了一个面试题作者: BadcoffeeEmail: blog.oliver@gmail.comBlog: http://blog.youkuaiyun.com/yayong2004年12月题目:shell编程,实现如下功能:/tmp路径下有800个文件,文件名的格式是:filename_YYYYMMDD_序列号(从001到999).dat, 例如:filename_20040108_089.dat 现

新博客请访问- http://oliveryang.net 2510

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

RabbitMQ 面试题

你发一条消息,在网络上并不是一个整体飞过去的。如果消息比较大,RabbitMQ 的底层协议会把它切成多个数据包(帧),按顺序发送,Broker 收到后再拼起来。假设线程 T1 和 T2 同时用同一个 Channel 发消息:T1 发消息 A,被切成三个帧:[A1] [A2] [A3]T2 发消息 B,也被切成三个帧:[B1] [B2] [B3]如果没有任何保护,这两个线程的帧可能交错到达 Broker,变成 [A1] [B1] [A2] [B2] [A3] [B3]。

互联网叫兽 464

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

基于 TVM Relax BYOC 扩展 Example NPU 后端:从跑通官方流程到自定义算子融合

至于 codegen 要不要补,取决于 Example NPU 的实现细节——先跑通分区验证,再决定是否深入 codegen,是更稳妥的路径。而「扩展一个原本不支持的融合模式」这件事,恰好能证明你不是照着教程抄了一遍,而是真的理解了 BYOC 的分区规则是怎么工作的。),那么新模式即使被切出来,codegen 阶段也可能报「不支持的算子」。如果 Example NPU 的 codegen 是「按算子名硬编码」的,那么新模式切出来之后,这句话本身没问题,但偏「结果导向」,面试官会追问细节。

Maxwell_Newton的博客 274

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

smart-tunnel-ai · 隧道/高速智慧化 AI 应用项目

面向的工程师:一个能跑通、能改、能讲清楚的 Spring Boot + Spring AI 项目。:它不是「调了个 ChatClient 输出一句话」,而是把切块策略、增量入库、来源溯源、防幻觉、工具调用、结构化输出、评估集、密钥守卫、CI 护栏这些工程问题都落到了代码里。每一处都能指向具体类讲取舍。详见。

futurn_hero的博客 201

LeetCode 面试经典 150_多维动态规划_交错字符串(97_C++_中等)

LeetCode 面试经典 150_多维动态规划_交错字符串(97_C++_中等) 题目描述: 给定三个字符串 s1、s2、s3,请你帮忙验证 s3 是否是由 s1 和 s2 交错 组成的。 两个字符串 s 和 t 交错 的定义与过程如下,其中每个字符串都会被分割成若干 非空 子字符串: - s = s1 + s2 + ... + sn - t = t1 + t2 + ... + tm - |n - m| <= 1 - 交错 是 s1 + t

huayimenghan的博客 205

Spring 原理高频面试题全解:Bean 生命周期、三级缓存与 @Transactional 失效(2026 招聘 JD 真题复盘)

按 2026 招聘 JD 与一线面经整理 10 道 Spring 高频题:Bean 生命周期与扩展点顺序、AOP 代理生成时机、三级缓存为何必须三级、构造器注入循环依赖为何无解、@Transactional 六类失效与自调用修复三法、REQUIRES_NEW 连接池耗尽风险、事件总线同步语义与 @TransactionalEventListener、自动配置从 spring.factories 到 imports 的演进、自定义 Starter 三步走,附速查表与三条追问链。

蒙眼过河 310

Docker镜像优化:面试高频翻车的简单题

本文深入探讨Docker镜像优化的两大核心层面:体积优化与构建速度优化。指出仅关注镜像瘦身(如使用Alpine)是表面理解,真正关键在于平衡空间与时间——在DevOps流水线中,构建速度常优先于体积。文章详解了多阶段构建、缓存利用、.dockerignore文件等高效策略,并揭示Alpine镜像虽小但存在兼容性、依赖缺失等风险,强调需结合业务场景权衡选择。掌握这些细节,方能在面试中展现真实技术深度,脱颖而出。

java后端架构 190

从 MLIR Toy Tutorial 到自定义硬件方言 Pass:一份 AI 编译器面试项目实战指南

AI 编译器岗位的面试,通常不会只问你「什么是算子融合」这种概念题,而是会顺着简历上的项目往下挖:你写的这个 Pass 解决了什么问题?IR 是怎么设计的?lowering 的边界在哪?为什么这里要插一个 Op 而不是直接生成循环?一个基于 MLIR 的小项目,恰好能覆盖这些追问点。它足够「真」——你能讲清楚 IR、Dialect、Pass、Lowering 的完整链路;又足够「小」——不需要真的去写一个后端,也不需要跑在真实硬件上。先讲 MLIR 的核心思想、分层设计和功能;

Maxwell_Newton的博客 334

AI 全栈开发工程师【二面】

传统的大模型应用通常采用:用户输入 → Prompt → LLM → 输出结果这种模式适合简单问答、文本生成和信息提取等任务。但对于复杂业务,仅依靠一次模型调用往往不够。例如,用户提出:帮我查询某个地区近三个月销量最高的产品,并分析销量变化原因。理解用户需求。拆解查询条件。调用数据库或外部工具。获取查询结果。分析数据。生成最终报告。Agent 的核心价值在于让大模型不仅能够生成文本,还能够根据任务目标进行规划、调用工具、观察执行结果,并根据结果调整后续行动。

qq_22841387的博客 444

【AI Agent面试系列】上下文管理1

工具返回价值密度最低、体积最大(常占 30%~60%),清理它收益最高、损失最小。摘要对话会丢语义细节,代价更高。按"价值密度从低到高"排序,不是按"体积从大到小"。

354

邓明 Agent 系统面试-意图识别学习笔记

不要只是做意图识别而不做测评,就好像要评估 RAG 准确性,在接口服务要测试响应时延,超时控制等等,这里也要关注意图识别准确率,如果面试官认为项目指标太高是在吹牛,关键就是回答因为 Agent 解决的是特定领域的意图识别,识别场景单一,另外就是因为用户输入相对简单。意图识别影响 prompt/spec 的加载,意图识别影响上下文组织,意图识别影响工具选择,意图识别影响 prompt 建议,意图识别得到的意图不是让模型随机生成而是候选类别里去做选择。2.意图识别的原因,以及意图识别得到的是什么?

m0_57222081的博客 212

我,13年Java老兵,建了个免费网站,公开叫板“Java已死”:没有广告,没有付费墙,151个页面全是踩坑干货

深耕Java13年的一线架构师,搭建免费无广告技术站javadashen.com。站点基于VuePress构建,涵盖Java面试、高并发场景设计、算法、Java+AI工程落地、企业级实战项目等内容。分享大厂生产踩坑经验、源码原理与可落地方案,拒绝焦虑营销,按不同成长阶段规划学习路线,Java开发者可直接复用。

xiaokjv的博客 256
上一篇: 2010.10.13-Linda的面试题
下一篇: C++ 虚函数机制-(转载)
devilkin64
博客等级 码龄19年 16粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值