一个测试人员的反思

100天精通Python(爬虫篇)——第122天:基于selenium接管已启动的浏览器(反反爬策略) 阅读详情

前言:以前记得一个帖子《一个程序员的反思》曾经引起能很大震撼,帖子里有句话我始终记得。当初

作为研发的时候,我也一直深信这句名言:

     CPU是为客户服务的。

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

     而今天这篇帖子,没有什么经典的东西,只是老生长谈一个话题——作为测试,我们究竟在测什么? 

     我一个刚刚出道不长的助理测试工程师,嘿嘿,暂时是这个职位。但我关注东西,却不仅限这个职务本身。作为一个刚刚应届毕业大学本科生,确实我没什么经验,虽然我可能曾经做过很多职业。大学最后2年多时间中我自己先后开过公司,做过研发,做过UI,做过销售,做过策划,甚至做到公司的核心管理。但我并不想提这些,因为很多都不认可这些经历。大学毕业后,我毅然选择了软件测试,一个新起不久许多机会的行业。究竟当初我为什么会选择这个职业?其实,可能连我自己都不清楚,我心理思考的仅仅是更多的尝试更多的累积和不同侧面看到的现状,我认定它会是一段有趣的经历。这便是我当初的决定,我愿意去尝试,即使需要花费很多时间只要我愿意。


   
作为一个曾经有些开发经验的助理测试工程师,我现在的工作仅仅是执行同事写撰写的测试用例。但在实际工作往往会跳出他们的思想重新考虑整个测试,这当然会耗费一些时间。但我认为每个人逻辑都有狭至之处。我们不可能考虑所有的覆盖,这是必然的话题。当然,这也是成长与锻炼的一部分。我想任何一个测试工程师都需要经历这一步步慢慢成长起来。但这种方式未必是最有效的,因为我们在累积过程试图跳过了所谓的业务逻辑与代码逻辑,这样我们将花费更大精力与时间去测试它们。这是作为测试人员,最苦恼的问题,版本不断升级测试不断进行我们甚至没有时间去思考,每天无非重复那些步骤。久而久之,这样的生活你厌倦了,你还想得到什么呢?从一个产品过渡到另一个产品,我们所了解的就是N个Bug无法解决。因为这些是开发人员的事情了,作为测试我们能做的就是发现Bug。

而我想说的,另一个问题,一个我从进入公司一直思考的问题?作为测试工程师应该如何思考改进我们的工作,因为任何事情总有瓶颈,我不想做一件没有计划的事情。因为那些没有机会的东西,只会让我耽误时间最终可能连个结果也得不到。而相对于开发,在测试工程师的眼中,我们所关注的无非是所谓工程改进。但同时我们最缺乏的也是项目中的经验,移至我们无法驾驭这个职业之上更高深的职务。而我们在测试这个行业中能扮演的角色也只能这样往下走。这是我不想看到,也是当初我选择测试不想看到的。为了更宽的思想,更完善的思考方式,我选择了测试这个行业,但却没有察觉到这个行业其实存在很多局限之处。如果你想更好的去测试你程序,你必须知道它是如何实现的。更重要的是你能知道程序员都在写些什么,而不是纯黑盒测试。因为每个对需求的理解都是不同的,需求是什么?它们仅仅是一种约束和规定。而每个人理解和定义它的方式也是不同的。这样需求的误差会导致产品的失败,最终客户的投诉。那么作为测试人员,更因该去关注开发、关注流程、关注质量体系。这不仅仅是为了自己,也是为了公司,为了我们的产品。这样有人会骂我,你又不是老板为什么你的老板可以拿几百万而我们只能拿好几千。而我却总认为这是一种累积、一种经历,无所谓时间你的经历到那个阶段自然你能看到你的回报。因为你曾经长期计划过的你收益,产出与投入其实任何事情都可以看作项目,只看你是否能抓住机会。

最后,作为一个新人现在的确很累。因为我想兼顾开发和测试,而不是测试本身。一个好的技术应该以测试驱动开发,而不是什么都将实现。一个劣质的功能,交给测试。对于测试人员本身是一种痛苦的经历。为了他人的健康,请您做一个优秀的开发人员。从测试的角度思考开发,思考CPU到底应该为谁服务?

Python爬虫实战:逆向工程与异步处理攻克Pinterest无限滚动瀑布流 我们将从零开始,逐步分析其数据接口,构建一个功能完整的爬虫,并深入探讨反爬虫策略的应对、性能优化以及数据存储等高级主题。: 在实际爬取中,你需要先访问一次Pinterest主页,获取初始的Cookie和CSRF Token,然后再发起API请求。: Python爬虫,Pinterest,无限滚动,瀑布流,异步IO,httpx,逆向工程,API接口,动态内容,反爬虫。你会很快发现一些关键的请求模式。:页面初始加载有限内容,随着用户滚动,新的图片块通过AJAX动态加载,实现“永无止境”的浏览。 阅读详情

相关推荐

详细解读文字识别工具———Tesseract-OCR

   在尝试破解12306验证码的时候,提前了解了一下应对各种验证码的解决方案,这里主要是学习到了面对文字图片验证码,例如亚马逊、豆瓣等平台的登录时会遇到的情况,效果还不错。 一、工具介绍 ​    Tesseract-OCR 是一款由HP实验室开发由Google维护的开源OCR(Optical Character Recognition...

别看我只是一只羊 2万+

读:一个测试工程师的反思

其实软件开发人员与测试人员的关系一定是对立的吗?其实不是的,开发人员与测试人员说好像是一辆车的零件,各司其职。测试人员有助软件人员发现更多的Bug,从而提升软件的整体素质,而测试人员也不应该说软件人员的程序写的很人失败,要知道软件开发人员要考虑的不仅仅是一个功能的逻辑实现,还有在实现功能时,为下一功能留下更大的便利性。而一个人的思维往往有局限性。从而要求测试人员站在另一个高度看问题(项目整体)

jkqa_123的专栏 1548

Rockchip平台Android相机HAL3开发实战:从配置到调试全流程解析

本文深入解析了Rockchip平台Android相机HAL3的开发全流程。从理解AAL与PSL核心架构、解析关键配置文件(如camera3_profiles.xml和Tuning文件),到搭建编译环境、进行增量部署,并提供了系统日志分析、V4L2调试等高级问题排查技巧,为开发者提供了一套从配置到调试的实战指南。

docker7nomad的博客 844

LangChain实战:Plan and Execute代理在智能预算规划中的应用

本文详细介绍了如何利用LangChain框架中的Plan and Execute代理实现智能预算规划。通过拆解复杂财务问题、调用多工具链协作,该代理能自动完成从个人月度预算到家庭年度综合预算的智能规划,并具备消费习惯学习和多目标优化等进阶功能,帮助用户实现精准财务管理和决策优化。

weixin_42530732的博客 382

DESeq2差异分析结果不会看?用这个R脚本5分钟生成发表级火山图和热图

本文详细介绍了如何使用R语言快速可视化DESeq2差异分析结果,5分钟内生成可直接用于论文发表的火山图和热图。通过解析DESeq2数据结构、展示ggplot2和EnhancedVolcano包的绘图技巧,以及pheatmap包的热图定制方法,帮助研究者高效呈现差异表达基因分析结果。

weixin_30326515的博客 340

软件测试工程师工作总结

1、为什么要在一个团队中开展软件测试工作?  因为没有经过测试的软件很难在发布之前知道该软件的质量,就好比ISO质量认证一样,测试同样也需要质量的保证,这个时候就需要在团队中开展软件测试的工作。在测试的过程发现软件中存在的问题,及时让开发人员得知并修改问题,在即将发布时,从测试报告中得出软件的质量情况。2、测试能给你带来什么样的快乐?  测试可以给我带来很多快乐,如果测试出一个项目缺少东西,我会很...

方子的博客 1万+

shopee app算法分析第一篇

shopee app算法分析第一篇分析完整算法大概要好几篇,耐心等待下.国内只会发律师函,牛逼,一个律师套话,一个律师发函,大意了(警惕卡通律师头像),希望law可以保护好你,还是干国外好.

2531

写一份软件测试工程师在工作中的问题与反思

软件测试工程师在工作中会面临许多的问题和挑战。这些问题可能包括: 测试数据不足或不完整,导致测试结果不准确。 缺少足够的测试工具和资源,使测试过程缓慢。 缺乏与开发团队的良好沟通和协作,无法及时解决问题。 由于变更和升级,原有的测试用例可能失效,需要重新进行测试。 时间压力过大,无法保证测试质量。 为了解决这些问题,软件测试工程师可以思考以下问题并进行反思: 如何收集更多和更有效的...

weixin_42596214的博客 624

FDTD远场分析实战:从monitor数据到3D远场可视化的完整流程

本文详细介绍了FDTD远场分析的完整流程,从monitor采集的近场数据出发,通过近场-远场变换(NFFFT)生成3D远场可视化结果。文章重点解析了远场转换的物理原理、关键参数设置,并提供了构建稳健数据处理流水线及高级可视化(如3D辐射方向图)的实战脚本与技巧,适用于天线设计与光学器件分析。

weixin_29063035的博客 228

Cesium中级开发教程之二十二:视锥体

教程示例网站:https://thomaz529.github.io。

883

关于软件测试的几点反思 - 测试工作的三个阶段

每次我们的思路跳出一些框框,都会有不同的领域。有点点哲学上的意味,很多领域做到后面,其实会超出那个领域本身的范畴。就好比高性能的汽车,到后面就不得不研究空气动力学这个原本是和航空有关的东西。但是,这是否超出了本意,如果去看待,又是另一个问题。 其实这样的三个阶段也是一个粗略的划分,并不一定要逐步的来发展,其实都是一些具体的做法和实践。以我目前经历过的实践只想到这样的层次,应该还有更高级的阶段。 我们越到后面我们发现进一步的努力带来的提升幅度其实不大。但是很多事情也是一样,从85分到90分付出的努力可能比50

Ricky Qiu的软件测试笔记 2万+

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

《一个测试人员的反思》5年测试,从初级测试到测试部经理

这篇帖子是在2年之前写的,2年以来,我仍然研习我的想法与激情。 两年前,我所写的也许激怒了很多前辈认为那是幼稚和肤浅的想法但我现在站在这里我只想说我选择的道路是正确的测试开发,业务流程,底层设计我们都可以兼顾。只要我们愿意,愿意去学习 、愿意去开拓没有什么是不可能的 。什么是挫折?我不知道, 也许我们常常感到但那点挫折算不了什么因为激情和汗水背后是一片宽阔的草原感谢我在广州工作时候的同事与公司...

weimou66 118

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

《一个测试人员的反思》4年后的续篇-建立高效测试团队

《一个测试人员的反思》这个帖子,几乎每年我都会重写一次。每次重写这个帖子感触都不一样。是因为工作内容不断变化,还是因为整个行业不断成熟,不得而知。回首四年,真是弹指一挥间的事。从05年入行的一个小小助理工程师一路走来,酸甜苦辣人生百态。 今年的工作仍然围绕着华为垃圾短信(国内版本)这条产品线。从工作重心上来看,今年干了这几件事: 1)《测试度量体系》目的:年终部门度量数据分析(常态16张...

weimou66 72

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

JIRA问题报告和任务的委派心得

     今天负责承担小组一期项目的测试案例实施工作,当然也是希望项目组工作很好的开展开,因此在JIRA上提交了不少的bug,自己做事也过于细致,以至于有关模块的功能性改进也提交了JIRA报告,项目组中同事有些不快,跟我表露了心情,作为一个测试执行者,有问题报告不假,但却是不该演化成一种权利的执行,一旦如此,我这种bug提交行为无形中就演变成了一种责问追究或者任务派发,难怪同事希望我以后碰上这种问...

iteye_7914的博客 340

敏捷测试团队的测试流程

一、接到项目后,BA明确客户的需求,必要时可以带上测试经理、开发经理、测试员、开发员,出一份书面需求说明

软件测试技术交流分享 991

质量是我们的尊言

今天找了半天的安装版本错误,结果发现不是自己的问题,一个程序员居然在没有跟别人说一声的情况下,让做安装的删除了一个替换组件,结果让我和测试人员停滞了一天! 我还是那句话“质量是我们的尊言”! 用c/c++快六年,居然让人还指责“基础不行”,看来要加油了! 这些天技术上没有什么长进,多希望自己有时间看看另一床的书呀!这个版本之后主要工作转向设计方面的工作!不管怎么说总会有些改变! ...

zhangziyueup 113

【每晚一个恐怖的测开技术学习小故事】第二集:

第二夜:《夜深了~用例们活了!》在漆黑的午夜时分,公司早没了人影,但是在某会议室的墙角位置,你可能会发现一台笔记本电脑,它正在无休无止的在自动执行着测试用例!一遍又一遍...仿佛永无止境.......A市的老李是一家中等科技公司的测试人员,他在这里已经足足工作了10年,已经是组里资历最老的员工了,只可惜一直没有什么大的晋升机会,对此他很担心,怕有一天被公司淘汰...而就在大上个月的时候,公司突然重金招来了一位自动化测试大佬,希望把公司的用例全都做成自动化运行,好提高测试效率。这本来是件好事,同事们第一次看到

我去热饭的博客 497

生活的流水账

工作了这么多年,很少写些和工作学习相关的东西。大概是觉得工作本身没有什么好些的吧。最近和一个做Human resource的朋友聊天,他问我有没有Blog, 我说没有。 他很不以为然,建议我写一写东西,以后如果要找工作跳槽的话,猎头公司通过Blog 就知道我做过什么了。想想他说的不错,所以从今天开始起我也准备Blog一下了。 日子还是这么一天一天过去了。我负责这个项目已经做了一年半了,但是还是

suke04的专栏 627

工作感悟(一)

  已经两个多月没更新博客了,因为自己在外出差了两个月,赶项目很辛苦,没时间总结了。(其实说白了都是借口。不过朝八晚十一,无休的日子也实在提不起精神写博客总结,整天浑浑噩噩的,有点时间就想着睡觉了)  不过现在已经回来了,准备把之前在外出差学习到的一些新的知识记录一下。  这次出差还是学到了一些东西的,因为原来在公司只是开发自己公司的项目,整体功能相对简单。也是从零开始,凭自己的感觉写,没人指导,...

weixin_30778805的博客 173

如何在一周内成为更好的软件测试员?

虽然一周的时间看似短暂,但如果我们将注意力集中在提升软件测试的关键领域,那么即使在这样短的时间内,我们也可以看到显著的进步。例如,了解白盒测试可以让你更深入地测试代码,而黑盒测试可以让你更好地验证功能和业务流程。示例:你可以选择一个软件的某个功能,如电商应用的购物车功能,编写一系列的测试用例,包括正常情况和边缘情况。示例:你可以研究你所在公司的软件开发流程,了解需求分析、设计、编码、测试、部署等各个阶段的任务和要求。在最后一天,你需要花时间总结和反思你在过去一周中学到的东西,思考如何应用到你的工作中。

伤心的辣条 72

测试人员只能点点点?深度剖析测试人员如何变得更优秀

测试人员只能点点点?深度剖析测试人员如何获得晋升

weixin_42139800的博客 1万+
上一篇: CMM中的软件质量保证实施准则
下一篇: Ajax从零开始(1)
tonyevehello
博客等级 码龄22年 589粉丝 120原创
评论 20
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值