技术方案设计没有深度?试试这套方法论

2023-11-13

原文为阿里技术发布的一篇文章,作者 高福来(不拔),读后受益匪浅,决定转载分享

平时听到一些同学说技术方案没什么深度,很难讲出来,怎么去体现技术方案设计的深度是大家普遍关心的一个问题,这个问题不是个例问题,因此分享下自己的一些观点和看法。主要从三个部分来讲:

  • 第一部分主要分析为什么技术方案没有体现出深度,找到问题后就好解决,并提出技术方案的广度和深度特征;

  • 第二部分是技术方案设计的方法论,主要包括了本质论、矛盾论、系统论、演进论四个方法论,构成一个闭环反馈链路;

  • 第三部分是通过具体的案例,反复运用第二部分的方法论阐述在实例的案例中如何去应用,加深对方法论的理解。

一  技术方案体现广度和深度

1  方案设计常见的反馈

我们都希望自己设计的技术方案能够让人眼前一亮、叹为观止、拍案叫绝……,然而在实际情况下,却并不是这样的,经常听到如下的说法:

  • 场景简单:业务场景很简单,怎么也设计不出花儿来;

  • 复杂度低:业务复杂度低,很难讲得出挑战出来;

  • 亮点少:运用的技术亮点少,基本上都是现有的中间件或框架来完成;

  • 设计普通:方案缺乏新颖,业内也是这么做的,没有体现出自己的设计能力;

  • ……

的确,上面反而是经常遇到的场景,那么需要思考下背后的问题和原因,为什么会有这样的感受,如果这个事情交给另外一个人去做,为什么他却能设计出更好的方法,而当时你却没有想到呢。

2  原因探究

个人觉得这个问题的最为核心的一点是就事论事,因为只是看到这个事,需要完成某个具体的功能点,而没有跳出这个事情的表象,去思考到底要什么、解决了什么问题、价值是什么,这样思考很有可能你现在的解决方案只是其中一个很小的一个点,没有站在全局去思考问题。曾经我的老师给我讲一个观点,把手掌放在眼前,你只能看到这个手掌,如果把手掌放在远处,你的视野就更广了,因此视野更关键,不要只关注事情的本身,可以跳出来看看,或者你能想到的更多。

就事论事只是一个表象,它背后还是深层次的原因,个人觉得是缺乏体系化地思考问题,"只见树木、不见森林",没有从不同的维度上去思考问题,只是线性地思考,它直接的表现就是就事论事,只把手头上的事情完成即可。讲体系化思考的书籍很多,大家有兴趣可以去了解下,帮助自己更好地思考问题。

到这里其实还没有结束,还有一个重要的原因是缺乏方法论引导,就是没有形成自己的一套方法去思考问题、解决问题,这个不同的人有不同的方法,这里也只是分享自己的一些观点和方法,不同的人会有自己的方法,有了方法论的引导,拿到一个问题,知道怎么去分析、思考、解决,远比只是被动地接受一种具体的方案要好,下次场景变了,很有可能现有的方案是不能支撑的,因此需要建立一套适合自己的方法论,具体在第二部分会分享自己的方法论。

3  技术广度和深度

广度和深度对于我们来讲并不陌生,大家都知道要体现出广度和深度,却不知道怎么去做。广度觉得从数量和类型两个维度去分析(应该还有其它的维度,大家可以自行补充),是让事物更加地丰富,比如动物园里有不同的动物,种类比较多,就能更加满足不同人的观赏需求;深度主要体现出问题的识别和创新解决上,一个问题大家没有发现,而你从中发现了,这就是一个深度,比如网上购物,站在今天来看,再平常不过了,但在20年前,并不是每个人能想到的,今天同样是做电商,每个公司的打法、策略是不一样的,这就是体现在深度上,深耕于某一个领域。

这里拿自己的经历来说明,在之前的公司做优惠券业务(当时营销比较简单,就是单一券业务),优惠券只是一种营销的具体手段,行业内有卡、券、分、金,那么对于技术来讲就是丰富营销基础能力,从单一券能力发展至卡、券、分、金的营销行业标配能力,这个就是体现广度,从数量、类型上丰富了。而怎么体现深度呢,营销中有一个重要问题是如何防控资损,一旦有资损,问题就比较大,因此需要去好好思考和设计方案,当时借鉴稳定性方案,分成事前、事中、事后三个阶段去防控资损,每一个阶段里又包含了不同的方案,深度主要体现对问题的识别,以及怎样创新地去解决,重点是创新,做到人无我有、人有我优。

4  怎样证明技术方案是好的

大家在和别人分享、交流技术方案时,有人就会提出尖锐的问题,为什么说你的技术方案是好的,其实这个问题是一个非常好的问题,值得大家去思考。

常见大家去讲一个技术方案时,把背景、目标讲完之后,直接给出了技术方案,其实技术方案本身并不重要,重要的是你是怎么思考的,思考的过程非常重要,强调的是WHY,HOW很重要,但WHY更重要。这里有两个原则:

  • 三段论:大前提、小前提、结论。一定要先讲大前提,它是一个有力的支撑,比如写议论文时,平时常写"鲁迅说过xxxxx",这个就是大前提,对于技术方案设计上,就是要看业内的方案,业界的标杆在哪里,和它有什么不一样、创新了什么,一目了然,往往大家忽略了这个大前提,直接讲自己的方案,哪怎么证明你的就是好的呢,没有对比就没有感觉。

  • 环境论:有时业内还没有具体的方案,或者是当下你的公司不适合业内顶配的方案,比如"中国特色社会主义",它就是强调当前的环境,结合了具体的业务场景来权衡考虑的,并不是行业内的最优方案就是适合你的,方案的设计一定要有权衡、选择,设计出最适合当前环境的方案。

图片

二  技术方案设计的方法论

1  方法论到底是什么

经常有人讲方法论,方法论也让人感觉比较玄乎,感觉是一种虚无缥缈的东西,方法论在百科中的解释是方法论是关于人们认识世界、改造世界的方法的理论,看了这个定义,大家还是不清楚它到底是什么,只知道它挺厉害的,但不知道方法论到底是什么、有哪些方法论、应该如何去运用方法论,所以这里谈下自己的理解。

自己对方法论的理解是方法论是让方法更成更方法的方法,方法论拆分成两个词方法和论,因此它首先是一种方法,方法是为了解决具体的问题,比如大家熟知的稳定性建设,全链路压测、异常监控等都是具体的方法,但这些方法都是一个个散的点,并不是最好的方法,方法论强调的是好的方法;然后再看"论",论是议论、分析、思考的过程,它最大的好处是让方法更好,还是拿稳定性建设来讲,现在有成熟的方法论,分成事前、事中、事后三个阶段,事前包括容量评估、全链路压测、强弱依赖……,这样讲就比较成体系,将它划分成事前、事中、事后,全覆盖了整个过程,你基本上挑不出什么毛病出来。因此方法论是对解决方法进一步的升华和提炼,形成更通用、成体系的方法,它并不是虚无缥缈的东西。

方法论是通过不完全归纳法总结出来的,方法论并不是万能的,比如你看到的天鹅都是白色的,万一哪天出现了一只黑天鹅,就说明当时的归纳是不完全归纳的。

2  技术方案设计方法论

下面所说的方法论都是存在的,自己只是组合运用了这些方法论而已,下面总结下自己工作中使用的一些受益比较大的方法论:

本质论

本质论是我第一个受益的方法论,本质论强调的是透过现象看本质,这句话听起来是比较简单的,但要做到却是非常难的。看透本质是至关重要的,能让你真正把控事物的核心,我自己的一个方法是使用不超过15个字概括出事物的本质,因为本质的东西是简单的、美的、直揭主旨的,所以判断是否抓住了事物本质的一个标准就是用简单的话能否概括出事物的主旨。比如高并发,现在不再是一个新鲜的词汇,甚至大学生都知道怎么去做,缓存、异步操作、并行……,这些都是具体的措施,问高并发到底是什么,大家都能回答一些,比如流量大、系统压力大、用户多……,这些都具体的特征,自己用一句话概括高并发:有限的资源应对大量的请求,概括出了高并发的根本特性,抓住了本质的东西就比较解决问题,自己带应届生的时候,就提到一个观点,工作三年以后,要能说得出10句对技术本质理解的话,提早给自己定下目标,在平时中积累一些思考和沉淀。

矛盾论

矛盾论揭示的是事物之间的矛盾,矛盾是推动事物不断发展的动力,一般从事物本质中,可以看到一些矛盾出来,比如上面高并发的本质是有限的资源应对大量的请求,有限对大量本身就是一对矛盾,找到了矛盾就有去解决矛盾,解决的一个方向就是平衡矛盾,矛盾解决了问题就自然解决了,比如现在资源是大量的,完全可以应对大量的请求,这样高并发的场景对于你来讲就不是一个问题。

系统论

系统论是从系统各个要素出发,多维度思考问题,最为简单的是从矛盾双方出发思考问题,比如有限的资源,能不能让资源的数量变多呢?能不能提升资源的处理能力呢?……,从这些方向去思考,思路就一下子打开了,所谓的缓存等常说的方法只是一个个具体的解决手段,我们需要更加立体、多维的解决思路,再结合具体的场景、现状组合一些解决方法。

演进论

演进论强调的是事物是进化的,也是符合事物的发展规律和人的认识,有可能我们想得非常完善,不可能等所有的事情都做好了再上线,得有计划、分阶段的解决问题,优先解决主要矛盾、核心诉求。也有可能经过一段时间之后,事物的主要矛盾发生了变化,我们的方案也得演进式设计。

 图片

三  技术方案设计案例

下面拿三个具体的案例来讲怎么将方法论落地于实际的技术方案设计,让大家能够感觉到方法论的真正作用,不再是一种虚的感觉。

1  高并发技术方案

高并发在之前是非常火的,大家也都能说出一些解决措施,如使用缓存、MQ、并行……下面谈下自己的一些思路。

问题定义

高并发的本质是有限的资源应对大量的请求,它的核心问题就是现状不足已支撑那么大量的请求,系统的负载太高,很可能可能出现网站打不开,用户下不了单等现象。

问题分析


高并发的矛盾就是有限的资源对大量的请求,解决了这个矛盾就解决了高并发的问题。接下来就是平衡这对矛盾,一般是采用"中和"的思想,就像中医治病的,寒病用热药、热病用寒药,因此就会站在资源和请求两个维度去思考,资源能不能变多了,常见的有水平扩展,资源能不能变强呢,常见的是性能优化,性能优化又会分成前端优化、网络优化、计算优化、存储优化、程序优化……,请求能不能减少呢,比如通过答题错峰,合并请求等等,这样解决问题的思路就一下子打开了。

解决方案是重要的,但设计的过程更为重要,清楚了问题是什么、怎么去分析,解决方案是自然而然就出来了,重点的还是分析的过程。

图片

2  异步处理技术方案

说到异步处理,大家最容易想到的方案就是MQ,MQ是常见解决的技术方案,如下图当时遇到一个问题:贷款端系统向放款端系统发送标的信息,一天的量大约有4000多笔,每天偶尔有几个是超时的,影响放款。怎么去解决这个问题呢,用MQ是最容易想到的,当时公司还没有用到MQ中间件,去搭建一个不现实,怎么办呢。

问题定义

现有的系统能力无法支撑实时处理,同步调用对系统的压力很大,很有可能某个时间点系统的负载比较大,处理慢了接口调用就超时了。

问题分析

借鉴MQ的设计原理,发送方将消息先发送至Broker上,消费方从Broker上拉取消息消费,抽象出异步处理的本质就是数据暂存 + 择机处理,那么问题来了,数据暂存在哪里呢,内存?文件?数据库?……,择机处理的方式是拉还是推,定时还是随机……,这样一思考,发现除了MQ还有很多其它的解决方法,总结出通用的解决方案后,可以在不同具体的环境中演绎出不同的方案。当时设计的方案就是将数据存储到ftp服务器上,实现也比较简单,方案没有最好,只有适不适合,难道公司没有MQ中间件,这个事情就不能解决了吗。

图片

3  可扩展性技术方案

可扩展性设计是现在一个非常典型的场景,当时遇到的场景是实时人群计算场景,每当业务方提一个需求过来,就要进行对数据口径,然后熟悉业务方的一些业务,接下来就是编写Flink任务,测试、核对,最后上线,整个流程下来至少2周,需求提一个简单需求,很疑惑为什么要2周才能上线。

问题定义:业务方希望快速上线而实际开发要2周的矛盾,究其主要原因是不懂业务,需要有熟悉的阶段,这个阶段耗时比较多,真正开发的时间不多,怎么去解决这个问题呢。

问题分析:虽然主要的矛盾找到了,很明显的一个方向是让业务方的开发参与进来,平台只做一些支撑、答疑的作用,然而让业务方的同学进来,就有一个挑战,别人没有学过Flink,你让他来开发,业务方愿意么。对整个业务进一步的抽象,发现我们的需求场景是变化的,实时指标也是变化的,但整个流程却是不变的,用 y = f(x) 来表示,就是来一个x经过计算、变换成结果 y,所以当时就梳理了出了哪些是变化的、哪些是不变的,从多变中找不变的东西,这里还需要一种能力是抽象分层,如果把 f() 只当作一层,就只有一个抽象分层,如果里面它还有复合函数,那么就有多个抽象层,这起决于对问题的思考,不同的人设计出的抽象层次是不一样的。当时借鉴了Flink的一些设计思想,将整个过程产品化了,业务方只要选择、勾选一些信息,会自动生成Flink SQL,然后点击运行即可,SQL对于大家来讲,入门比较简单,基本上能看得懂,没太大的难度。平台侧不需要像之前那样完全投入人力去学习业务知识、开发、测试上线。

图片

四  总结

本要分享了技术方案设计的一些思路,整个方法论包括本质论、矛盾论、系统论、演进论,通过三个具体的案例阐述怎么去运用方法论。

技术方案设计没有深度?试试这套方法论_Arthur_Lees的博客-CSDN博客

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

技术方案设计没有深度?试试这套方法论 的相关文章

  • 微服务版本控制

    就在运行时支持同一服务的多个版本化部署以及消费者如何使用不同版本而言 适应基于微服务的架构中的版本控制的最佳实践是什么 1 如果我们使用基于路由的版本控制作为提到的方法之一here http niels nu blog 2016 micro
  • n 层架构 - BLL、DAL 和接口。什么是最佳实践?

    我有一个关于 n 层架构的问题 在问这个问题之前 我想了很久 因为这里已经有很多类似的问题了 但是 在看了一天半并阅读了其他答案之后 我仍然不确定 各种看似相似的术语和不同的方法让我感到困惑 如果我在不同的类库中有一个 BLL 和一个 DA
  • 使用多个提供程序的客户端应用程序应使用什么设计/模式?

    这是一个与设计相关的问题 假设我们有一个名为 ClientAPI 的公共 API 其中包含一些 Web 方法 例如 CreateAccount GetAccount 根据客户的不同 我们使用许多不同的提供商来满足这些请求 假设我们有 Pro
  • 你现在在做MDA(模型驱动架构)吗?如果是这样,您使用什么工具,效果如何?

    模型驱动架构是这样一种想法 您创建模型 以一种不依赖任何 或至少大多数 实现技术的方式表达您需要解决的问题 然后为一个或多个特定平台生成实现 人们声称 在更高的抽象级别上工作更加强大和高效 此外 您的模型比技术更长寿 因此 当您的第一语言
  • socket.io 广播功能 & Redis pub/sub 架构

    如果有人能帮助我解决一个小疑问 我将不胜感激 使用socket io广播功能和在Redis上使用pub sub设计架构有什么区别 例如 在另一个示例中 node js 服务器正在侦听 socket io 针对 键 模型 todo 和值 数据
  • 就MVC模式而言,Struts 2中使用的Action是什么?

    在Struts2中 控制器将请求分派给Action Action将其传递给后端逻辑 这可以看作是一个非常大的过程 model 处理请求 JSP代表视图 Struts2中如何定义Action 肯定是not一个看法 是控制器还是模型 Strut
  • 我无法设置顶级标题

    我想为 TopLevel 设置标题 但 TopLevel 显示 Root 的标题 我认为我的下一个脚本与 TkInter 文档中的示例相对应 但给了我不好的结果 你能解释一下 为什么我的设置master title 顶部 in 应用程序顶部
  • 您的 Web 服务版本控制最佳实践是什么?

    我们有 2 个独立的产品 需要通过 Web 服务相互通信 支持 API 版本控制的最佳实践是什么 I have 本文 http www ibm com developerworks webservices library ws versio
  • 服务作为 SOA 中的中介

    我知道什么是 通常的 中介设计模式 维基百科中有一些描述 http en wikipedia org wiki Mediator pattern http en wikipedia org wiki Mediator pattern 在我的
  • 如何在保留图标的同时删除最小化/最大化按钮?

    是否可以显示我的图标toplevel and root删除最小化和最大化按钮后的窗口 我尝试使用 toolwindow但之后图标就无法显示了 有没有其他方法可以从窗口中删除最小和最大尺寸按钮 同时仍显示图标 from tkinter imp
  • CISC 机器 - 它们不只是将复杂指令转换为 RISC 吗?

    也许我在架构上存在误解 但如果机器有 比如说 乘法指令 该指令是否未转换为更小的指令 或者过于复杂以至于最终与等效的 RISC 指令具有相同的速度 乘法是一个不好的例子 它在两种体系结构中都是一条指令 将上面的 乘法 替换为 CISC 中更
  • Web 应用程序架构 - 需要作业/任务队列吗?

    我目前正在设计一个 Web 应用程序 该应用程序将允许用户安排将针对 HTTP API 代表他们 执行的任务 这些任务可以重复出现 并且可用于调度的最小时间分辨率为一分钟 由于任务的性质 我认为异步执行它们是有意义的 但是 这部分的架构应该
  • 简单的注入器和内部构造函数

    我正在开发一个小型类库 并为我的 DI 使用简单注入器 类库有一个访问点 我猜是某种服务 它是public它有一些internal服务和存储库 我看到 Simple Injector 不支持使用内部构造函数进行构造函数注入 例如 我的产品服
  • 无法构造 String 类型

    我正在使用 Web api 和 Unity 并且在尝试打开默认 帮助 区域时收到以下错误 InvalidOperationException The type String cannot be constructed You must co
  • 有人还在使用客户端服务器架构吗[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我编写软件已有几十年了 现在一切都是网络 在网络出现之前 我们拥有的客户端服务器应用程序基本上是直接与数据库对话的胖客户端应用程序 它
  • 内存缓存 VS。分布式系统中的集中式缓存

    我们目前正在寻找最合适的解决方案来访问分布式系统上的关键数据 并且我们正在考虑是否使用内存缓存而不是集中式缓存 有关我们希望存储 访问的数据的一些信息 数据量非常小 数据很冷 这意味着它几乎不会改变 并且只有当人们改变我们后台系统中的某些内
  • 将所有代码放入 C++ 头文件中的优点和缺点?

    您可以构造一个 C 程序 以便 几乎 所有代码都驻留在头文件中 它本质上看起来像一个 C 或 Java 程序 但是 您至少需要一个 cppfile 来在编译时拉入所有头文件 现在我知道有些人绝对会讨厌这个想法 但我还没有发现这样做有任何令人
  • 返回地址预测堆栈缓冲区与堆栈存储的返回地址?

    一直在阅读 Agner Fog 的 Intel AMD 和 VIA CPU 的微架构 他在第 34 页描述了 返回地址预测 http www agner org optimize microarchitecture pdf http www
  • 将用户数据存储在身份验证服务器或资源服务器中?或两者?

    这是我第一次使用 IdentityServer 4 和 AspNetIdentity 设置 OpenID Connect 我希望有人能够揭开有关存储用户数据的部分的神秘面纱 到目前为止我读到的是 用户数据应该存储在连接到身份验证服务器的身份
  • 具有订阅者缓存的 WCF Pub/Sub

    Problem 如何使用 WCF 提供分布式 可扩展且具有抗灾能力的发布 订阅服务 Details 请注意 除了 Tibco EMS 等消息传递 中间件解决方案之外 我们还在考虑这种方法 我一直在研究 WCF 特别是如何使用它来提供发布 订

随机推荐

  • Python爬虫从入门到精通:(39)增量式爬虫_Python涛哥

    概念 检测网络数据更新的情况 以便于爬取到最新更新出来的数据 实现核心 去重 实战中去重的方式 记录表 记录表需要记录什么 记录的一定是爬取过的相关信息 例如某电影网 爬取过的相关信息 每一部电影详情页的url 只需要使用某一组数据 该组数
  • 一个产品的商业目标应该从哪些方面制定?

    产品面向社区治理相关服务 比如信息发布 事件调解 活动发布 数据统计等等 但感觉缺少合理的商业策略和商务模式 文心一言 一个产品的商业目标应该从以下几个方面制定 市场定位 确定你的产品的目标客户是谁 这可以是你的社区治理服务所面向的人群 也
  • 【数学公式】Mathpix和MathType等等

    MathML MathML指 数学标记语言 是XML语言的一个子集 用来在web网页 甚至部分软件中显示数学公式 简言之 就是使用特殊的类似HTML的标记在网页中显示数学公式 MathType公式编辑器 MathType是一个强大的数学公式
  • JSP的原理

    Tomcat的lib目录下的jasper jar包 这个包里面有一个HttpJspBase类 这个类我们看一下源码 Source code recreated from a class file by IntelliJ IDEA power
  • CC++ 标头和源文件:它们如何工作?

    本文将向您展示将程序划分为C中的组件部分或正确使用标头和源文件C 诀窍 介绍 我主要是为我的一个朋友写这篇文章的 但是 如果我不与大家分享这一点 我会对社区造成伤害 所以就在这里 我们将探索标头和源文件以及它们的作用 这些代码的大部分在 C
  • SSH框架简介篇

    文章目录 概述 目录结构 struts Spring Hibernate 总结 概述 SSH框架 Struts Spring Hibernate 是一种广泛应用的Java企业级开发框架组合 它将Struts Spring和Hibernate
  • LVM原理及配置

    1 简介 1 1 什么是LVM LVM是 Logical Volume Manager 逻辑卷管理 的简写 它由Heinz Mauelshagen在Linux 2 4内核上实现 目前最新版本为 稳定版1 0 5 开发版 1 1 0 rc2
  • 中国天气网接口

    中国天气weather com http m weather com cn data 101110101 html 六天预报 http www weather com cn data sk 101110101 html 实时天气信息 其中1
  • RSA pkcs1与pkcs8 java获取私钥

    RSA pkcs1与pkcs8 java获取私钥 目录 RSA pkcs1与pkcs8 java获取私钥 获取秘钥 获取pkcs1 格式秘钥 获取pkcs8格式秘钥 读取秘钥信息 解密 获取秘钥 maven依赖
  • 【网络】几种常见的协议

    几种常见的协议 DNS Domain Name System 域名解析协议 端口号 53 通过域名解析获得域名所对应的IP FTP File Transfer Protocol 文件传输协议 端口号 21 用户可通过客户机程序向远程主机上传
  • el-input正则限制

    el input限制只能输入1 9且只保留一位小数 return rules deductionPrice required true message 请输入折扣力度 trigger blur validator this valuePri
  • 栈溢出学习

    前言 跟着ctfwiki学习 所有题目都在ctfwiki上可以找到 加油加油 栈溢出原理 栈溢出指的是程序向栈中某个变量中写入的字节数超过了这个变量本身所申请的字节数 因而导致与其相邻的栈中的变量的值被改变 看一个简单的程序 include
  • 【枚举的定义;枚举变量的定义、初始化和赋值】(学习笔记16--枚举)

    目录 枚举的定义 枚举变量的定义 枚举变量的初始化与赋值 使用枚举类型 可以提高程序代码的健壮性和可读性 并且枚举成员属于常量 甚至可以使用枚举成员名作为维的大小 来进行数组的定义 枚举的定义 定义枚举的格式为 enum 枚举名 枚举成员1
  • Muduo网络库核心梳理

    Muduo网络库 Muduo网络库本身并不复杂 是一个新手入门C 面向对象网络编程的经典实战项目 但是 新手在刚刚上手读代码的时候 非常容易陷入代码的汪洋大海 迷失方向 本文旨在简要梳理Muduo网络库的核心内容 帮助初学者快速上手源码阅读
  • DES算法简单介绍及用法

    大家好 今天给大家分享一下DES加密 一 DES介绍 加密一般分为可逆加密和不可逆加密 其中可逆加密一般又分为对称加密和非对称加密 前者是我们使用公用密钥加密之后可以使用公用密钥再解密出来 而后者则是使用公用密钥加密之后必须使用私用密钥来解
  • MySQL这一章就够了(一)

    前言 呕心沥血5个月淦出本文 整理所有MySQL知识 我愿称之为地表最强MySQL MySql笔记 MySQL是关系型数据库 基于SQL查询的开源跨平台数据库管理系统 它最初是由瑞典MySQL AB公司开发的 现在它是Oracle Corp
  • 手把手教你区块链java开发智能合约nft(第四篇)-如何动态获取gasPrice和gasLimit?

    手把手教你区块链java开发智能合约nft 第三篇 如何动态获取gasPrice和gasLimit 初学区块链 那真叫一个痛苦并无助 如果没有人带你的话 今天写的这篇是在前面文章基础上写的 初学区块链的朋友建议先看我前面写的文章 手把手教你
  • 【雕爷学编程】Arduino动手做(72)---HX711 人体称重模块

    37款传感器与执行器的提法 在网络上广泛流传 其实Arduino能够兼容的传感器模块肯定是不止这37种的 鉴于本人手头积累了一些传感器和执行器模块 依照实践出真知 一定要动手做 的理念 以学习和交流为目的 这里准备逐一动手尝试系列实验 不管
  • win32读取注册表

    直接代码 bool bIsIE6 false HKEY hKey NULL DWORD dwType DWORD dwSize LONG lReg RegOpenKey HKEY CLASSES ROOT HTTP shell open c
  • 技术方案设计没有深度?试试这套方法论

    原文为阿里技术发布的一篇文章 作者 高福来 不拔 读后受益匪浅 决定转载分享 平时听到一些同学说技术方案没什么深度 很难讲出来 怎么去体现技术方案设计的深度是大家普遍关心的一个问题 这个问题不是个例问题 因此分享下自己的一些观点和看法 主要