明智软件开发的共鸣和思考 - 读Ivar博士PPT的读后感

如何处理动态语言(Python / JS)的“隐形”调用链? 本文揭示动态语言(Python/JS)中静态AST解析导致调用链“断链”的核心问题,提出通过运行时追踪补全图谱的解决方案。基于Code-Graph-RAG的cgr trace机制,分别利用pytest插件与V8 Profiler捕获真实调用路径,将动态边合并至静态图谱,并在权重体系中提升动态边优先级。实践表明,该方法可显著提升图谱覆盖率,实现“结构+行为”双视角理解代码,为MCP与Rerank系统提供可靠支持。 阅读详情
从优快云首页看到了曾总的 2008英雄大会的总结性文章,其中的Ivar Jacobson的主题演讲“明智-软件开发的新趋势”引起了我的注意,然后查看了 孟岩的博客,并下载了里面的ppt,仔细研读,感受颇深。

大家对需求的理解差异,是软件失败的最主要原因,引起了错误的预算,工期的预计以及人员的安排,最终导致质量无法保证,我们这么多年用的软件工程理论难道都是有问题的吗?从面向对象,UML建模,RUP,XP,甚至Scrum。是这些体系有问题?还是我们没有用好呢?

  我个人并非计算机专业出身,完全凭的自学,所以对于标准的软件开发理论一直没有深入的研究过。面向对象的思想也是在我2002年放弃php转学java之后才有一点体会的。UML我只用让他给客户做过方案,因为对方的一个家伙必须看这个。至于RUP,XP我没机会实践了。我公司的团队必须按照现有的适合的开发方法继续做,不可能随便换一个什么理论。从根本上讲,现有的软件开发系统思想并没有给我什么帮助。我在开发中遇到的最大问题,并不是怎么开发,而是无法准确理解用户的需求,而且用户的需求变更也是无法控制的。你不改?我们就不付款,你们看着办。 关系弄僵了,我想挨批评的肯定还是我们自己。
 

他提出了Smart的概念,也就是“明智软件开发”。我们来看看他的内容是什么。

一 什么是Smart
 1 他引用了爱因斯坦的一句话, Things should be done as simple as possible - but no simpler.

不好意思,这句话是我第一次看到。用简单的方法解决问题,应该是最好的。这个观念我在论坛里看到过许多人提到过。

个人认为简单有几个情况

  1 原始的简单,因为不会高深的技术和方法,对付着弄出来就行了,但是这个东西能用
  2 能从一群解决方案中,选出一个最简单的实现方法,能满足需求,能用,虽然可能在某个方面不适合以后的扩展。
  3 被迫的简单,因为工期催促,不能考虑那么多了,只能简单的实现最主要的功能,许多细节并不完善的简单。类似于原型。

我们面对用户一个很简单的需求,如果找一个手快的人,估计1-2个小时就能搞定,用户马上就能看到结果并确认,如果按照正规的流程,提交申请,审批,确认,转到开发人员,开发,提交测试,让用户看结果,我估计最快也需要2天,因为要考虑人家不是一天没事的等着你反馈,赶上出差,开会这类事情都要考虑进去的,而且一点用户有修改,这个流程肯定还要走一遍的。

正规适合于许多人一起合作的大系统,特别是人员变动比较大的情况。对于我来说,虽然有10几个人,但项目多,每个项目也就4-5个人,我想那些大公司看着人多,真正一个项目里有效参与的,估计不会到10个人。大家把负责的问题简单化才是解决这类项目的比较好的做法吧。至少我这么认为。


2 Smart意味着什么(What does being Smart mean?)
  Being Smart is not the same thing as being intelligent.
  你可以智力很高不精明,你也可以很精明,但智力却不是很高

  呵呵,我一开始分不清2个的区别,我想大致是这个意思吧。太聪明的人也许太聪明了,他们的设计太超前了,可以满足你5-10年的需求,可许多时候,我们只需要满足这个月的需求就行了,呵呵,仔细想想就知道为什么了。

  Smart is more then having common sense
  你可以拥有常识的东西,但不一定很精明,但是如果你很精明,则你一定拥有常识性的东西。

  我们掌握了许多的东西,这是基础,否则我们无法理解和实现用户的需求。业务的理解重要性远高于对基础的理解,因为对于用户来说,他要求的功能都可能是行业内的常识了。


  Being Smart is being agile, but more

  敏捷是灵活性,可以适应各种情况,而精明则是敏捷+在特定的条件下正确的完成了它。

  我们的项目很灵活,可以很快的进行调整来满足用户的需求,但我们真的需要调整吗?我们的调整真的是对的吗?如果对用户需求理解不足,出现了偏差,那么我们的调整就是错误的。而且我经常遇到用户又再次反悔的情况。 我一般对于用户的新的需求变更,都是最少压3-7天,给用户一个反悔的机会。期间通过其它方式确认需求,特别是那些影响很大的变动。有时还尽力说服用户不要变动,因为我们可以换一个思路给他实现类似的功能。 正确立即用户的需求并正确的实现它,用户高兴,我们也会少了许多的无用功。



二、精明的例子

  1 人
    不精明的人想通过过程和工具来提供人的智力,获得优秀的技能、。
    A Foo with a tools is still a foll but a dangerous fool.

    呵呵,可惜有些人是这样考虑的,希望通过工具来使自己变得更专业,更精明。

    但软件是人开发的,只有合适的人才能开发出合适的软件,而不是工具开发出来的。我个人就曾经在一个关键的系统使用时,用notepad编写了程序和HTML页面,并编译和发布了,那是2001年。许多那时候过来的人,都会怀念手工编写的经历,包括现在还有人鼓励用文本编辑器而不是是IDE来进行开发。这个我就不评价了,呵呵,毕竟年代不同了。


  2 项目
    瀑布式开发是不精明的。应该开发一个拥有核心功能的演示系统,然后再逐步的完善。

    用户其实最关系的地方只有几个,比如老板一般关系报表,你把这个弄出来,他们那里就会通过。 操作人员关心的是是否方便。许多支持的功能,已经锦上添花的功能,完全可以放到后面完成。主题完成,我们再开始绣花。何处是关键,这个要靠人去判断了,特别是根据用户的喜好决定。否则你辛苦做的一个功能,他也许根本不关心。

  3 需求
    需求是不断变化的,而许多人却努力的描述所有的需求,因为这样才能精确估算费用。

    我们应该用基于简单的需求,然后逐步的完善它,卖给用户的是一个定制的系统,与原始的方案作为再次谈判的标准。

    我们国内有点不同,我们大部分是用户提出了一个不是很具体的需求,我们开发了。用户看到后,增加和变动了许多,并且一般不会增加任何费用。这个是很不公平的。如果开发方拒绝开发,那么你这个公司在这个行业的名声将会出现问题。除非你是大公司,是强势的一方,但绝大多数公司不是这样的。用户是付款的,他们才是上帝。如果关系处好了,也许还能谈谈价格。 还有一种情况,就是开发商用低廉的价格中标,然后以各种功能为由增加费用,这个也是一些有些实力的大公司才敢做的,或者是关系非常铁的,还或者有猫腻的情况才可能出现。呵呵,不是你也知道是啥意思。。。。


  4 架构

     2个极端情况
    1)无须架构,直接编码,以后需要时再重构。
    2)架构在一个非常高级的结构上。

    对软件质量影响最大的是软件的架构。

    建议先架构一个核心的系统,只有大的骨架,然后开始编码实现。 没有可执行的代码的架构是个幻想。进行适当的重构。

    架构取决于经验,如果大方向正确,完全可以先进行功能的实现,出现问题再进行局部调整。没有人一开始就能预测所有的问题。需要重构的代码应该符合 1-9原则,而不是2-8原则。绝大部分代码是不需要重构的,因为他们运行次数不大,对系统的影响很小。只有那些频繁运行的代码,才最需要重构,效果也最明显。

   5 建模
    和架构非常类似


   6 测试
    我们有2类人,思考者和清理着。测试人员属于软件世界的清理者。

    如果测试总是在思考之后进行,那就太晚了并且太昂贵了。
    如果你无法验证你做的是否正确,那就先不要做。


    虽然大家都知道测试的重要性,但实际做起来还是有很多困难的,特别是人员和工期紧张的时候。大家还是多争取一些兼职的测试人员吧,呵呵呵,比如你的其它部门的同事,朋友啥的。


    7 文档
     多年以来,我们写了太多的文档了。

    几乎每个领导都非常重视文档,但我们真的需要那么多的文档吗?我们真的需要看所有的文档吗? 买来电视机,买来笔记本,看用户手册的有多少?但新买了一个电风扇,需要自己组装,看文档的又有多少人?

    软件文档中真正有用的,会被大家经常看的还是那些整体的文档,至于那些细节,人们会自己弄符合个人习惯的东西的,比如贴一大堆纸条,或者写一个txt文件放在桌面上。

    文档应该增加系统的价值,而不是成为累赘。

   8 过程管理
    我没啥好说的。



三、如何变得精明呢?

    1 你应该不断的进步
    2 你应该熟悉不同的角色,比如工程师,过程管理,社会工程师
    3 从你拥有的开始,找到不断提高的一小步,一次只实践一个。


    我们工程师习惯了听项目经理的安排,不断的按照指示和需求文档来用代码实现,我们很少去和客户直接接触,很少作为一个专业的测试人员去搞测试。在一些外包公司更是这样,你只知道自己眼前的这点东西,你不可能熟悉整个系统,因为你没有那个权利,呵呵。
 
   
   
四、Smart到底是什么?

    他啥也没说,只是告诉大家: 每个人都可以变得精明。


 

个人总结:

    我开发软件的时间可是不短了,从1988年接触电脑,到1992年和计算机系的人混的最熟,一直到现在用了6年的Java,期间做了许多的项目,对开发方法也是感触颇深的。

    在软件开发的环节上,需求、设计、开发、测试,越靠前,对后面的影响越大。而出问题最多的并不是设计,而是需求。改来该去,没完没了的系统简直是太常见了。

   用户在不断的学习,他的需求也会不断的完善,不断的增加,我们开发人员就要不断的开发,变更来满足需求。我个人的一般做法是。

   1 分清楚这个项目到底是【形象工程】,还是【实干工程】。这个太重要了,如果搞错了,你的辛苦很可能白搭。

    形象工程:允许你的系统不是很高效,代码不是很优雅,但一定要界面漂亮,使用一些高级的东西来满足用户的虚荣心,系统不能做的太简单,至少看上去是那样,否则他们会觉得拿不出手的。他们宁可用20万的,绝不会用你2万的。至于真正用起来会怎样,没人关心。这个项目很可能在6个月后无疾而终,因为他的做作用已经达到了。 至于啥作用,去问你的客户的老总吧。哈哈
    这样的工程一般是高层处于某个目的提出来的,你必须通过非常手段才能获得内部准确消息哦。


   实干工程:允许你爹系统不是非常漂亮,因为图片多了会影响速度,但要求你的系统必须稳定,必须快速。丑陋一点点不是大问题,可以慢慢完善。 必须实现他们日常工作需要的一些功能,特别是报表。

    这样的工程一般是基层或者中层提出来的,他们需要解决实际的问题,比如加快处理速度,提供合作和信息共享,降低通信费用等很实际的问题。和他们打交道要注意不要惹到了小鬼。你的一个不经意的东西,可能会引起一个最终用户的反感,他可能会成为你项目继续的一个阻碍。和基层的最终用户搞好关系,你的项目则会顺利的很多。即使出现了一些小的BUG,他们也会先通知你,而不会直接向上级汇报的。


    2 找对正确的甲方的配合人员

    有些项目,甲方派了一个基层的文职员来,这样的项目遇到的阻碍会很大。一般我会建议对方让一个中层来做,而且是一个和业务非常熟悉,且说话有一定分量的人来担当。这样需要一些资源的时候,比如开会,找部门人员调研都会比较好办。项目组和这个人一定要搞好关系。他是中间沟通的桥梁。

  

    3 使用大家最熟悉的技术,加上一点点尝试的技术做开发

    不要追求新技术,那不是项目里用的,而是实验室用的。新技术必须经过大家的共同实践,在正式的业务系统里被证明是有效的,才可以大面积的使用。在一些非关键的地方,正好可以作为实验点。

    我一般在新技术出现后的2年,才会考虑在正式的项目里使用它,因为这时候各种BUG已经修补的差不多了,各种文档也很齐备了,平时的积累也差不多了。大家已经都憋坏了。

    
    4 项目人员要定期沟通,搞好关系。

    这个就不多说了,那些比较内向的人,还是尽可能的多和人沟通吧,机器在好也是死的。




写的太多了,估计错别字不少,先这样吧。希望对大家有帮助
















<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
【仿真技巧】Smart Eye Probe在ADS信号仿真中的应用 Smart_Eye_Probe是一个眼探头,允许灵活数量的输入通道,输入通道支持单端或差分信号的混合,并且,可以使用一个共同的时钟信号触发通道的眼图。目前,仅支持瞬态(Transient)和通道(Channel Sim)逐位模式(Bit by bit)模拟,不支持信道统计(Statistical)模式和DDR总线(DDRSim)仿真。 阅读详情

相关推荐

避坑指南:ZYNQ MPSOC QSPI固化时MT25QU256闪存的特殊配置

本文针对Xilinx ZYNQ UltraScale+ MPSoC平台,详细解析了使用Vitis工具将BOOT.bin固化至Micron MT25QU256ABA QSPI NOR Flash时的特殊配置与避坑指南。重点阐述了Init文件的真实作用、电压与频率的精确匹配策略,以及针对该闪存型号的初始化序列,帮助工程师解决烧录失败、启动异常等常见问题,确保系统可靠启动。

weixin_29175469的博客 272

Jacobson博士演讲观后感

  今天早上我去听了Ivar Jacobson博士在交大的演讲,总体的评价是:“没什么意思,但是很划算。”     先说说为什么没意思,不是说博士的演讲水平不够,他的演讲是非常出色的,对于对手的攻击,也实在是非常的有效。Jacobson博士尖锐的指出了UP与敏捷方法的最重要的区别,一个是建立在明确的知识的基础上的,而另一个则是建立在“心照不宣”的知识的基础上的。而通过他的严密的逻辑分析,建立在这...

读书、思考、生活 350

单片机OTA升级:Bootloader如何多重校验保障APP完整性?

本文详细介绍了单片机OTA升级中Bootloader如何通过CRC校验、数字签名、版本比对和存储位置检查等多重校验机制保障APP完整性。CRC校验作为快速检测数据完整性的核心手段,结合其他安全措施有效防止设备变砖和安全漏洞,确保远程升级的可靠性。

l3m4n的博客 981

java编程思想读后感

最近找工作,面试了好多家企业,见了很多优秀的面试官,都给了很多有帮助的建议。大部分面试官在知道我在看Java编程思想,都会认为我现阶段不适合看编程思想,head first会更适合我。开始我觉得是不是自己有些好高骛远,应该踏实的把基础打扎实。后来我问了自己几个问题,看Java编程思想给自己带来进步了吗?有没有看着很痛苦的感觉?答案是很清楚的,当然给我带来很大帮助,也潜移默化的解决了一些问题。 我

gghh2015的博客 4628

Qt UI界面美化教程1:【“飞扬青云” Qt精美控件】使用教程1

相信很多小伙伴在使用Qt Widget的过程中都会遇到一个问题,开发出来的界面,丑!丑!丑!当然Qt做界面美化可以用到QSS,需要对前端知识有一定了解,后续本套教程将会做讲解。本篇文章,我们直接站在巨人(大佬飞扬青云)的肩膀上,使用他开发好的163款自定义控件,请大家一定支持他,去给他小心心,他的个人主页:本篇文章只讲述如何在 QtDesigner 安装这些控件。

2401_87556704的博客 1422

NLPIR 汉语分词系统 (PyNLPIR) 学习手札

1 关于NLPIR最近在做一些NLP相关的任务,其中一个关键的子任务就是如何对汉语进行分词?关于分词的方式,有很多很多,也是很多学习者的练手任务(比如我们当时的期末作业就有这个)。但是,轮子还是要搬来用,自己写的分词只能说是去了解这个方式(了解某个算法),做出来的都是能看不能用,毕竟模型、算法、语料库等一座座大山等着我们攻克。所以,我找了一些资料,看到一个不错的教程,他用了NLPIR,所以我也跟着使

MebiuW的专栏 2万+

python批量将PPT导出成图片集

导读 需要使用python做一个将很多个不规则PPT导出成用文件夹归纳好的图片集,所以就需要使用comtypes调用本机电脑上的ppt软件,批量打开另存为多张图片 采坑 公司电脑使用comtypes完美导出图片,系统win10 回家后使用自己的电脑就报错,系统也是win10,最后没办法放弃comtypes采用win32com,最终成功 源代码 """ 该工具函数的功能:批量将PPT导出成图片...

小青蛙的博客 4331

【AIGC】COT思维链:让AI学会拆解问题,像人一样思考

COT思维链的出现,为AI的发展开辟了一条新的道路。它让AI学会了像人类一样思考,将复杂问题分解成简单的步骤,并逐步推理出最终答案。希望我的引导会对你产生启发。

智兔唯新的博客 9003

「PPT 分享」跟著 Laravel'5.1 一起 成為更好的 PHP 開發者

本文经授权转自 PHPHub 社区 推荐一份很棒的 PPT。 前往观看:跟著 Laravel'5.1 一起 成為更好的 PHP 開發者.pdf

weixin_34274029的博客 135

【Unity 城市建模插件】POLY-Megapolis City Pack 提供超过数百种城市建筑、道路、车辆与城市家具模型,完美适用于构建现代化城市、模拟城市游戏、都市题材冒险类游戏和开放世界项目

POLY - Megapolis City Pack 是一套风格统一、内容丰富的低多边形城市建模资源包,专为 Unity 引擎设计。该资源包提供超过数百种城市建筑、道路、车辆与城市家具模型,完美适用于构建现代化城市、模拟城市游戏、都市题材冒险类游戏和开放世界项目。无论是快速原型开发还是正式发布项目,POLY 系列都能提供高效、风格统一的解决方案。

2403_88403568的博客 635

任务混部最少服务器数量计算问题

这里的并行度指的是该任务运行时会占用的服务器数量。要注意的是,一个服务器在每个时刻可以被任意任务使用,但同一时刻最多只能被一个任务占用,并且任务运行结束后会立即释放服务器(结束时刻不占用)。最后,我们从字典中找出服务器数量的最大值,这个最大值就是完成这批任务混部最少需要的服务器数量。对于每个任务,我们会遍历其对应的时间区间,将该任务的并行度累加到对应时刻的服务器数量上。任务混部的目标是让这批任务由同一批服务器承载运行,你需要计算完成这批任务混部最少需要多少服务器,以此来最大化控制资源成本。

m0_62153576的博客 108

模型之外的那套装置:用 AI harness 完成一个三端同步应用

AI harness 指模型之外、让模型能持续产出可交付软件的全部工程装置。本文把它称作"支架"。它由五层构成:输入层规定模型读什么,反馈层规定模型怎么知道自己错了,观测层把界面与设备状态变成可读事实,记忆层让跨会话不失真,边界层规定哪些动作不许模型自行作出。支架的价值在六天里可以直接计量。

Leo的Matrix 183

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

如果用pytest命令启动测试脚本有哪些方法和参数呢?请详细解析

pytest的命令行启动非常灵活,它围绕“”、“”和“”三个核心维度,提供了一套强大的参数体系。

simpleness_的博客 227

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

附录一源码阅读路线与断点索引

本索引固定于Boot 3.5.7与Framework 6.2.12。先选择要解释的现象,再打开对应源码。表中观察对象是逻辑名称,不保证在所有重载中都是同名局部变量。抽象接口和注解用于阅读契约,不提供可执行方法体断点。

weixin_45476869的博客 164

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

软件测试用例模板怎么写:从用例设计到执行记录的全套指南

测试用例是测试工作的核心产出,它决定测试覆盖了多少、漏掉了什么。但大多数人的测试用例写得像流水账——只有正常路径,没有异常场景;只有操作步骤,没有预期结果;只有功能测试,没有非功能测试。本文拆解测试用例的标准结构,说明每个字段的含义和写法,给出覆盖功能测试、性能测试、安全测试的完整用例范例,并列出测试用例设计的五个高频遗漏点。

wuwangzhiduoshao的博客 154

大型高复杂度互联网项目管理经验心得

复杂项目,管理的核心不是管人,而是管理依赖和变更简单项目重点是排任务、盯进度;多端多关联系统的大型项目,大部分延期、故障根源都来自依赖失控、变更失控。项目经理首要工作是把看不见的依赖显性化,把随意变更变成受控变更,而不是单纯催开发进度。分批上线不是降低标准,而是拆分风险,小步可控很多人觉得分批上线麻烦,希望攒到一起发布。但集中上线会把所有风险集中在同一个窗口,一旦出问题,排查范围巨大、影响面广。分批发布本质是风险隔离,每一批只承载有限的变更,出问题更容易定位、回滚、止损。

zyx980193917的博客 193

[LLM Wiki理论与实践-09]将OpenWiki融入Coding Agent为你节省Token

针对OpenWiki的整合则将Coding Agent的执行模式升级为**先读知识库、再精准修改代码**。OpenWiki预置概念文档、测试说明、页面清单与更新时间,让Agent快速理解业务意图、定位相关代码与测试、判断信息新旧,减少Token与时间开销,降低理解偏差和跨文件遗漏,使改动更一致、可复现,文档与代码同步维护。

JaydenAI的博客 444

MyBatis 入门核心教程:原生接口与 Mapper 代理双模式实战

MyBatis 是 Java 生态中应用最广泛的半自动化持久层框架,它在封装 JDBC 冗余模板代码的同时,将 SQL 的编写权完全交给开发者,兼具开发效率与性能优化空间,是国内企业级项目的主流持久层方案。MyBatis 提供了两种核心开发模式:原生接口模式适合理解框架底层执行原理,Mapper 代理模式是企业开发的标准规范。本文从基础概念出发,完整覆盖环境搭建、两种模式的代码实现、底层原理、事务机制与高频问题排查,所有代码均可直接运行,适合系统入门与实战参考。原生接口模式。

2401_87069538的博客 980

SpringBoot 的那些常用扩展点

JsonPropertySourceLoader,实现PropertySourceLoader接口@Override//这个方法表明这个类支持解析以json结尾的配置文件@Override//将文件内容读到 ByteBuffer 中//将读出来的字节转换成字符串// 将字符串转换成 JSONObject//将 json 的键值对读出来,放入到 map 中。

sxlishaobin的博客 87

FastAPI

FastAPI 是一个基于 Python 类型提示构建的现代、高性能 Web 框架,专门用于快速开发 API。它的核心设计理念是让你用标准 Python 写代码,就能同时获得数据校验、自动文档和编辑器支持。

hcgeng的专栏 311

Spring 高频面试题:用一次用户注册串起 IoC、AOP、事务和 MVC

学 Spring 时,我最容易混淆的是这些「看起来一样」的操作:调用业务方法和向容器取 Bean,调用目标对象和调用代理,方法正常返回和事务成功提交。把它们放进同一个例子里,很多面试题就能顺着调用路径推出来。假设我们要实现一个注册接口:前端发来,Controller 接收用户名,Service 在数据库里创建用户和默认资料。下面用这条链路理解 Spring 的几个核心机制。代码是用于讲解的片段,省略了导入、依赖声明和数据库实现。

weixin_42927227的博客 347

11.14号

与ai沟通了40多个问题关于就业方向的,推荐岗位ai标注员,然后软件测试,然后是硬件半导体相关工作,然后包住有社保的服务员,服务员一个月5000,ai说如果从事漫剧这行起码要多生成十几个视频看看流量有没有这方面天赋,除去涉及版权生成不出来的情况下,算上搓了6个视频,5个高清原创的二创类型视频,剧情是关于二创。后面又说服ai了软件测试早死了,不止点工,而且比较忙。学会了运用特殊分镜使得画面更美,环绕拍摄法提示词。

2302_80369360的博客 19
上一篇: 【转】秋季吃点“五仁”:滋养肝肾 润燥滑肠
下一篇: Servlet写入Cookie转发后无法读取的问题
老紫竹
博客等级 码龄19年 1万+粉丝 1252原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值