软件测试面试题及答案,不给答案的面试题都是耍流氓

面试指导

软件测试理论刷题篇

mysql数据库刷题库

linux操作系统刷题篇

软件测试工程师面试篇

一. 软件测试理论刷题篇

1.软件测试的意义是什么?

思路:什么是软件测试→软件测试的含义

什么是软件测试:在规定的条件下对程序进行操作,以发现错误对软件质量进行评估的一个过程。

软件测试的意义:提前发现潜在的安全隐患,避免出现损失,降低风险。

扩展回答

要做好软件测试工作还要从以下方面着手

①一方面打造提前发现问题的能力

对业务知识的熟练掌握

提前介入测试

推进更完善的质量把控制度

不断的提升自身的技术能力

②另一方面提前规避同类问题的发生,提高软件的稳定性

文档沉淀

流程沉淀

业务沉淀

技术沉淀

2.软件测试的基本原则是什么?

核心原则:基于用户的角度考虑问题,发现问题,提升用户使用系统的体验感。

更多原则

更早的介入测试

遵守二八原则,重点覆盖出现更多bug的模块

提升用例设计的覆盖度,正向,反向,异常等都需要覆盖到

更多考虑到上下游等未在需求中表现出来的因素

3.软件测试一般要做哪些测试?

软件测试的类型

①. 功能测试

功能逻辑实现准确性测试

界面测试

兼容性测试

易用性测试

②. 自动化测试

web自动化测试

接口自动化测试

③. 性能测试

高并发性能测试

稳定(可靠性)测试

疲劳测试

4.软件测试有哪些类型?

软件测试的类型

黑盒测试:完全不清楚代码逻辑,只按照需要设计输入数据,然后对输出进行验证的过程。

白盒测试:完全清楚代码逻辑,针对代码进行的测试。

灰盒测试:介于白盒和黑盒之间的一种测试类型,偏向于接口测试的感觉,即了解逻辑但又不完全针对代码实现逻辑进行测试。

5.软件测试有哪些类型?

缺陷的来源分类

新增功能bug

修复bug引起的关联bug

需求变更引发的bug

模块对接的bug

兼容性bug

6.请阐述完整的测试流程?

开发提测→准入测试(冒烟测试)→功能测试(系统测试)→bug跟踪和管理→集成测试→验收测试→上线→线上回归测试

7.如何测试一个水杯?

考虑角度

功能性:装水漏不漏,容量有多大

可靠性:水杯扔到地上会不会碎了

易用性:容不容易使用,有没有把手

兼容性:可不可以装饮料,沸水,冰水等

可维护性:是否容易清洗

安全性:是不是会伤到手,是否有毒等

8.如何得到4升水?

给你一个3升的杯子和一个5升,怎么得到4升水

装满3升的杯,然后倒入5升杯中

再装满3升的杯,然后再倒入5升杯中

5升杯中倒掉,3升杯中剩余的1升水倒入5升杯中

装满3升的杯,然后倒入5升杯中,共计4升

9.测试用例包含的要素有哪些?

用例编号

用例名称

优先级

测试模块

前置条件

测试输入

操作步骤

预期结果

实际结果

10.bug的生命周期?

11.bug生命周期中的状态管理?

12.黑盒测试用例设计方法有哪些?

黑盒测试用例设计方法有等价类划分法,判定表驱动法,场景分析法,边界值分析法,因果图,正交实验法,错误猜测法。

13.软件测试流程

系统测试相关规范和标准的流程:熟悉产品/项目,需求评审,测试需求,测试计划,测试方案,测试用例,预测试,第一轮正式测试、第二轮回归测试、第三轮测试,测试报告,测试总结,测试指南。

14. 如果你提的BUG开发不认为是BUG怎么办?

参考答案:

(1)首先测试人员要确保这确实是个bug(如果是误测,那只能测试人员自己背锅了);

(2)在测试环境将BUG复现出来,保存好截图、相关测试数据,发给开发人员,或直接给开发人员演示一遍;

(3)如果开发人员还认为不是BUG,或者是由于技术问题很难修改的BUG,可以叫上产品经理、开发负责人,一起讨论一下;

(4)对于等级比较低的建议性BUG,可以先记录到BUG管理系统,暂时不用说服开发去修改,后续再进行跟进。

15. 你对测试最大的兴趣在哪里?为什么?

答:我对未知的事物充满好奇心和挑战性。

我觉得在找到一个bug会让我兴奋,能够完善一个项目,让项目不出问题也是我很开心的一个地方。

解析:多从性格入手,可以自由的增加自己的看法,多往好的方向去说。

16. 开发说这个不是bug的时候该怎么解决?

答:首先要把自己检验出来的证据提交给开发工程师,和开发工程师积极沟通,遇到不能复现的bug,就要自己在去利用抓包、截图等方式去存证。如果和开发工程师沟通无果后,要让产品经理来确定是否属于bug。

解析:

和开发沟通

留存好bug的理由

如果无法解决,很多事情去找产品经理去解决

17. 从什么时候介入测试最好?

答:从项目需求阶段就开始介入最好,当我们介入测试越早,那么遇到的问题越少,我们在需求阶段就开始编写计划,方案,然后根据计划,方案进行测试用例编写,越能及时找出bug。

解析:越早越好,并编写相对应的文档。

18. 说下你测试之后的发展规划?

我要把功能测试这块熟悉好,然后不断的提升自己,能够独立负责一个项目的整体功能测试。

学会自动化测试,能够对项目进行自动化测试,节省回归测试的时间。

学会带领一个测试团队,分工,能够解决一个大型项目的测试工作…等等

解析:重点是思路要清晰,要清晰自己需要学什么,每一个阶段要去学什么东西。

19. 为什么进入测试行业?

答:因为测试行业是一个新兴行业,现在测试在互联网行业的比重越来越高,并且它需要很多样的技能,需要专心,耐心,与人沟通的技巧,也需要编程能力,相对开发要更加全面性。

解析:按自己的想法去打,前面说这个行业前景,后面就说自己的性格或者这个测试所需要的能力很多样。

20. 怎么才能够全面的测试到每一个点?

答:在项目伊始阶段,就要开始进行测试工作,测试计划一定要多方位,全面性的去考虑测试的策略,测试用例的编写等。

解析:及早介入项目测试,文档要编写的全面。

21. 你都用什么测试方法?

答:根据模块细分的功能不同,使用不同的测试方法,大方面是黑盒和白盒,然后我们黑盒测试的时候,设计测试用例根据不同的功能使用不同的设计方法(等价类划分、正交等),要保证测试的覆盖性。

解析:大部分测试都是在用黑盒测试,那么一般就要包括测试用例,而测试用例里几大设计方法要注意。

22. 测试用例通常包括哪些内容?

答:用例编号、用例名称、优先级、测试步骤、测试数据、预期结果、最终结果等。

解析:这个根据公司项目来定义,一般只需要有这几块就足够。

23. 如何定位前后端BUG?

答:可以通过以下几种方式

简单的去看请求响应定位

通过查询日志,如果日志无内容,说明前端问题,反之后端。

抓包工具去定位接口,查找数据。

解析:面试官问这个问题主要是看你怎么解决一个问题的思路,实际工作中很少会遇到这种情况,并且遇到也是很好去定位的。

24. 账号注册成功,但是登录的时候失败,怎么定位bug?

答: 调用登录的接口,看输入正确的账号是否成功,如果成功,登录接口无问题。那么注册接口,可能注册数据未存入数据库,或者注册接口验证等等都有问题。提交bug即可。

解析:简单的去测试一个功能点怎么定位bug,讲出自己的思路即可。

25. 软件质量是什么?

答:软件产品可以符合用户的需求,功能实现即可。

解析:满足用户的需求、功能是最重要的。

26. 测试用例的设计方法?

答:分为黑盒测试和白盒测试

黑盒测试:等价类划分法、边界值分析法、 因果图分析法、正交实验法、判定表法、场景法、功能图法、错误推测法

白盒测试:逻辑覆盖、循环覆盖、基本路径覆盖

解析:正常答出这些点即可。

27. 所有的bug都能够修复吗、都需要修复吗?

答:理论上所有的bug都是能够去进行修复的,但是有一些bug并不需要修复。有一些细微,并不影响程序运行,功能的bug可以不修复,先把大型bug,重要的bug去进行修复,然后最后再进行修复。

解析:重点是先修复大bug,再修复小bug。

28. 软件的完全测试有可能吗?

答:不可能的。测试工作主要是找出bug,但是不能保证没有bug,因为在测试过程中,完全测试需要的测试数据量特别大,人力物力是要消耗特别多的。所以我们会见到不同的软件有内测,公测,需要很多人来完成这个测试。

解析:做什么事都没有完美的,测试也是。

29. 测试过程中发现需求文档不完善怎么处理?

答:找产品经理及时沟通,要找到不完善的地方,然后准确的提交给产品经理,这样才有说服力。

解析:核心就是标注出不完善的地方。

30. 开发修复bug后,如何保证不影响其他功能?

答:追加场景法设计测试用例,对一些功能进行场景测试,业务测试。

解析:用多种方法进行追加测试。

31. 什么时候功能测试?

答:从测试介入一开始,就可以进行功能测试了,功能测试是软件测试的核心,保证在一段时间内运行所有的功能,并找出bug。

解析:功能测试是整个软件测试的核心,最早进行介入。

二. mysql数据库刷题库

最基本的要求是数据库记录的增删改查(insert、delete、update、select),表结构的增删改查(create、drop、alter、describe)、存储过程、触发器等。

1. 查询数学成绩与语文成绩高的同学

select s.student_id,student_name,

s.course_id,c.course_name,s.score

from student st

join score s

on st.id = s.student_id

join course_id = c.id

on s.course_id = c.id

where c.course_name ="数学"

2. 查询平均成绩大于80分的学生

select student_name from student

where id in

select student_id

from score

group by student_id

having avg(score) > 80

)

3. 学过体育课程的学生的年龄

select s.student_name,

datediff(curdate(),student_birthday)/365

from course c join grade g

on c.grade_id =g.id

join class cl on cl.grade_id =g.id

join student s on s.class_id =cl.id

where c. course_name = "体育"

4. 主键、外键作用,索引的优点与不足

主键

表中的唯一标示键

作用:保证实体的完整性,加快数据库的操作速度。

外键:

主键的从属,表示两个表之间的联系

作用:作用外键可以建立数据之间的关联,避免冗余

索引:

优点

通过创建唯一性的索引,保证表中数据唯一性

加速数据的检索速度

加快表与表之间的连接

使用优化隐藏器,提供系统性能

缺点:

创建索引需要时间,

索引需要占用物理空间

当对表中数据进行修改时,索引也要动态维护,减低数据的维护速度。

5. 表的创建语法

create table 表名(

属性名1 数据类型 [约束条件],

属性名2 数据类型 [约束条件],

属性名3 数据类型 [约束条件]

);

6. 删除表

drop table 表名;

7. 删除多个表

drop table 表名 1,表名 2 ...

8. 修改表结构

8.1. 添加列(属性)

alter table 表名 add 属性名 数据类型;

8.2. 删除表(属性)

alter table 表名 drop 属性名;

8.3. 修改属性:数据类型

alter table 表名 modify 属性名 数据类型;

8.4. 修改字段名

alter table 表名 change 旧字段名 新字段名 数据类型;

3.3数据库增删改查

create alter drop desc主要针对表结构来说的

insert delete update select 主要针对表中的数据来进行操作的

9. DML-INSERT

9.1.insert 插入 值和列一一对应关系

格式 1:

insert into 表名(列名 1,列名 2 ...) values(值 1,值 2 ...);

格式 2:

insert into 表名 values(值 1,值 2 ...);

格式 3:

insert into 表名 values(值 1,值 2,值 3 ...),(值 1,值 2,值 3 ...);

9.2.删除 delete

格式 1:代表清空表内的数据

delete from 表名;

格式 2:

有条件的进行删除:delete from 表名 where 条件;

9.3.DML–UPDATE 更新

格式 1

update table_name set 字段=值;

格式 2

update table_name set 字段=值,字段=值;

格式 3

update table_name set 字段=值,字段=值 where 条件;

9.4.select 查询

9.4.1.基本格式:

select 列名 from 表名;

select 列名 1,列名 2,列名 3 ... form 表名;

9.4.2. 使用关键字 distinct 查询

在查询返回结果中删除重复行

语法:select distinct 列名称 from 表名称;

只针对一个列去重

9.4.3.使用别名查询

根据需要对数据显示的标题进行修改

格式:select 列名1 '别名',列名2 '别名',... from 表名;

AS 关键字连接列表达式和指定的别名

select 列名 as '别名' from 表名;

9.4.4.条件查询

格式:select 列名 from 表名 where 条件;

如果在查询过程中,有多个条件,可以使用 and 或 or 进行连接

and 连接 —》同时满足; or 连接 ------只满足其一

9.4.5.范围搜索范围

在范围之内

select 列名 from where 列名 between 开始值 and 结束值

不在范围之内

select 列名 from 表名 where 列名 not between 开始值 and 结束值;

9.4.6.列表搜索条件

in: 只要匹配到括号里任意一个值就会有查询结果;

格式:select 列名 from 表名 where 列名 in (值 1,值 2,值 3 ...)

not in:

格式: select 列名 from 表名 where 列名 not in(值 1,值 2,值 3);

10. 数据库表连接查询:子查询、内连接、外连接

10.1. 多表查询

去重

显式

select [distinct] A.列名,B.列名,C.列名,... from C

oin A on A.key=C.FKeyA

oin B on B.key=C.FKeyA and B.key=A.key

[GROUP BY 字段名]

隐式

select [distinct] A.列名,B.列名,C.列名,... from 表A,

表B,

表C

where 表A.字段1 = 表B.字段1 and

表B.字段2 = 表C.字段2 and ....

[GROUP BY 表名.字段名]

排序

select A.列名,B.列名,C.列名,... from C

join A on A.key=C.FKeyA

join B on B.key=C.FKeyA and B.key=A.key

[ORDER BY 表名.字段名]

10.2. 子查询

  • 子查询只返回一个值
  • 子查询首选使用in做匹配
  • 子查询在其他查询结果的基础上提供了一种有效的方式来表示where字句的条件 。
  • 子查询的selec查询总是使用圆括号括起来。
  • 对于子查询来说,外查询条件要什么,子查询就查什么。 一一对应的关系。
  • 子查询结果分类:

①.标量子查询(子查询结果为单个值):

子查询返回的结果是单个值〔数字、字符串、日期等)

常用操作符:= <> > >= <= <

②.列子查询(子查询结果为一列):子查询返回的结果是一列

常用操作符:in、not in、any、some、all

select 列表名 from 表名 where 字段名 > all (子查询语句);

select 列表名 from 表名 where 字段名 > any (子查询语句);

③.行子查询(子查询结果为一行):

常用操作符:=、<>、 in、not in

select 字段名,... from 表名A where (字段名1,字段名2,...) = (select 字段名1值,字段名2值,... from 表名B where 条件)

④.表子查询(子查询结果为多行多列):in

select 字段名,... from 表名A where (字段名1,字段名2,...) in (select 字段名1值,字段名2值,... from 表名B where 条件)

10.3. 内连接:只有匹配到的情况下才会返回结果值

格式一(隐式):

from 表名1.列名1,表名1.列名2,表名2.列名1,表名2.列名2...

form 表名1,表名2

where 表名1.列=表名2.列; //列为相同的列

格式二(显式):

select 表名1.列名1,表名1.列名2,表名2.列名1,表名2.列名2...

from 表名1 inner join 表名2

on 表名1.列=表名2.列

10.4. 外连接

外部连接会返回from字句中提到的至少一个表或视图中的所有行

左连接:显示左边所有行。如果左表的某行在右表中没有找到匹配的行,则结果集中的右表相对应位置为null。

select 表名1.列名1,表名1.列名2,表名2.列名1,表名2.列名2

from 表名1 left outer join 表名2

on 表名1.列=表名2.列; //列为大家共有的列

右连接:显示右边所有行

right outer join

select 表名1.列名1,表名1.列名2,表名2.列名1,表名2.列名2

from 表名1 right outer join 表名2

on 表名1.列=表名2.列;

区分是左连接还是右连接:左连接以坐标为参考,左表没有则返回null,右连接以右表为参考,右表没有则返回null

10.4.5.联合查询

把多次查询的结果合并起来,形成一个新的查询结果集

对于联合查询的多张表的列数必须保持一致,字段类型也需要保持一致。

union all会将全部的数据直接合并在一起,union 会对合并之后的数据去重。

select 字段名 from 表A ....

UNION [ALL]

select 字段名 from 表B ...;

三. linux操作系统刷题篇

最基本的目标是熟悉常见的50个命令,比如find命令(-name、-type、-perm、-user、-group、-ctime、-atime)等,熟悉vi、熟悉linux搭建测试环境。比如LAMP环境搭建。

1. 进程与线程的理解

进程是操作系统资源分配的基本单位,而线程是任务调度和执行的基本单位

线程是进程的一部分

一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程

2. 进程监控与内存监控

基础概念

指令: ps

作用: 主要是查看服务器的进程信息

选项含义:

-e:等价于 ‘-A’ ,表示列出全部的进程

-f:显示全部的列(显示全字段)

执行结果

列的含义说明:

UID: 该进程执行的用户id

PID: 进程id

PPID: 该进程的父级进程id,如果一个程序的父级进程找不到,该程序的进程被称为僵尸进程

C: cpu的占用率,形式是百分数(%)

STIME: 进程的启动时间

TTY: 终端设备,发起该进程的设备识别符号,如果显示‘ ?’表示该进程并不是由终端发起

TIME: 进程的执行时间

CMD: 该进程的名称或对应的路径

常用组合命令

命令:ps -ef | grep 进程名称

注意:执行该命令至少有一个进程(搜索该命令的进程)

例如:查看火狐浏览器的进程

例:

执行进程:ps -ef | grep mariadb

杀掉进程:kill -9 123

3. linux常见命令有哪些

目录相关命令

cd

mkdir

pwd

ls

ll

文件相关命令

touch

cat

more

less

head

tail

find

vim

rm

其他命令

ip addr

chmod

useradd

reboot

top

ps

kill

tar

unzip

4. 修改文件权限

文件权限改为所有者读,所在的组写,其他用户执行

5. 动态查看日志

tail -f 文件名

动态查看日志

在运行大型EDA软件时候经常需要查看日志了解当前运行状态.

假设日志还是在实时更新ing

tail filename.txt

查看日志最后十行(默认是10行)会退出查看,回到命令行

tail -n 26 filename.txt

效果同第一条,也会推出,这里只是通过-n 后边的数字指定显示最后多少行,这里是显示了26行(默认只显示10行)

tail -f filename.txt

这条命令的-f选项可以支持动态实时显示,查看后不退出到命令行,一直等待日志更新(当然也是默认只显示最后十行)

tail -f -n 25 filename.txt

这一条比上一条指定的行数,动态显示最后25行

具体步骤

1 先cd到我们需要监控的日志目录。

2 tail -f -n 20 文件名                      //默认显示最后10行。

3查看完日志了需要退出,Ctrl + c

6. adb常用命令

adb 帮助:adb --help

启动adb 服务:adb start-server

关闭adb 服务:adb kill-server

获取设备号:adb devices

获取系统版本:adb shell getprop ro.build.version.release

发送文件到手机:adb push 电脑端⽂件路径/需要发送的文件,手机端存储的路径

adb push C:\Users\win\Desktop\xx.png /sdcard

从手机拉取文件: adb pull 手机端的路径/拉取文件名 电脑端存储文件路径

adb pull /sdcard/xx.png C:\Users\win\Desktop

查看手机运行日志: adb logcat

进入到手机终端: adb shell

安装app到手机: adb install 路径/xxx.apk

卸载手机app : adb uninstall app

获取app启动包名和启动名(⚠手机需要先打开对应app)

Mac/Linux: adb shell dumpsys window windows | grep mFocusedApp

在 Windows 终端运⾏: adb shell dumpsys window w | findstr mCurrent

获取app启动时间: adb shell am start -W 包名/.启动名

查看设备ip地址:

adb shell ifconfig wlan0

adb shell netcfg

查看设备cpu信息: adb shell cat /proc/cpuinfo

查看设备内存信息: adb shell cat /proc/meminfo

点亮屏幕: adb shell input keyevent 224

熄灭屏幕: adb shell input keyevent 223

四. 面试

1. 好工作从好简历开始

如何编写一份获得更多面试机会的简历

简历包含的要素:基本信息,求职意向,教育背景,专业技能,工作经历,项目经验,自我评价,学生(在校荣誉)

不打无把握之仗-面试赴约准备

2. 面试经验技巧

如何介绍自我介绍

自我介绍最重要的是能够在面试官心目中留下一个好的第一感觉。说得更直白一点是让面试官舒服。但是我发现很多人就是直接简单的介绍了一下过去的经历,但是实际上一方面过去的经历没有很好的让人发现优点。其实面试好比相亲,你想说什么不重要,重要地是人家想听什么。比较好的自我介绍套路是这样:“您好,我叫XXX,很高兴能获得这次面试机会,今天来面试是想证明自己是最合适的人选,另一个方面是获得您的认可,结合我过去的工作和学习经历,我自信我能符合咱们公司的认可,接下来您看是我继续介绍我做过的项目,还是您问您关心的问题?”

你的职业规划是什么?

一、走技术发展路线

1、测试专家,比如 “测试架构师”(关键词:技术难题攻关、关键业务评审、基础设施搭建、解决一线实际问题、规划团队技术发展)

2、专项测试工程师,比如 “自动化测试技术专家”、“性能测试技术专家”(关键词:软件测试某领域、技术专家)

区别:前者关注具体的某一个产品,综合考量选取更合适的技术;后者不关注具体的产品,而是研究某一专项技术的共性。

二、走管理发展路线

1、测试组长(关键词:产品重点难点测试、辅导新人、任务分配、任务跟进)

2、测试经理(关键词:项目管理、沟通协调、团队成长)

3、测试总监(关键词:理解产品商业目标、部门发展)

最后一个问题,面试官一般会问,您还有什么想问的吗?还有什么想了解的吗?

总体上来说最重要的是留下一个好的近因效应,就好比相亲的时候,分手离开的时候,留下好的最后的印象,基本的思路应该分三种情况,

第一种是面试官对你满意,自己也感觉不错的情况下,先表示感谢,然后积极主动的问题,比如,非常感谢您给的这次机会,但是我还是想问,如果我有下一轮面试,我想知道知道是什么时候,我应该再做哪些方面的准备。

第二种情况是面试官和自己感觉都一般般,感觉自己是鸡肋,这个时候说不说很重要,基本的套路是,非常感谢面试官给的这个机会,坦白地说我对自己今天的面试表现不是非常满意,还可以表现得更好,但是如果我还是非常想得到这个机会,您能否给我一些建议。

第三种情况是面试情况非常糟糕,这种情况下,很少有人能说出感谢,但这恰恰体现一个人的风度。基本的思路是,不管怎么样,还是得感谢您给的机会,让我自己认识到自己的不足,坦白地说我离这个岗位的要求还有些距离,但是我还是想知道,如果将来我还想来咱们公司面试,您能否给点具体建议。

总结,面试是一个相亲的过程,相亲的成败取决于很多要素,但是好的、充分地准备,能够让我们更加从容地和主动的去面对压力与挑战,而不是简单地把自己变成超市里面的菜,供人挑选。

3. 面试后的总结

面试前的准备: 笔,本

一般的面试流程: 笔试,技术面试, HR面试

一定要记住的: 无论在面试过程中的问题没有回答上了,要记到笔记本上再去查找答案,预防下一次会出现

结尾:

对于软件测试来说,其实没有严格的 “技术” 或者 “管理” 一说,管理不可能是纯粹的管理,技术也不可能是纯粹的技术。

软件测试是一门需要不断实践和总结的学科,身为测试经理却不去关注技术的发展,是做不好测试管理的;身为测试专家不去关注产品价值和目标,只懂技术不会管理,也是做不好测试策略的。

阿常作为测试管理者,实际工作中所做的也不是纯管理事务,平时也会经常参与实际的测试任务,只有在测试实践中不断总结测试经验、学习新的测试技术,管理水平才能有提升。

 

总结:

感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

 

          视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值