蛋糕是一个谎言!

您是否曾经想过-“如何向从未接触过programming的人解释programming ”。

原始文章是很久以前在另一个星系中创建的。 这只是一个翻译试用,没有包含尽可能多的笑话。

所以,让我们想象一下-你有一个朋友,谁是不soiled由计算机科学,永远不要试图自动化的东西,从来不玩factorio ,从来不写的一行代码。

因此,让我们想象一个正常的人。

让我们称他为比尔。

他的数学不是很好,即使只是“不好”, 但他喜欢糖果

你的任务是比尔一些神奇事情 IT,你做的每一天。 最简单的。 加密秘密知识。

你该怎么办?

喂他!

蛋糕是一个谎言!_第1张图片

长话短说,但是一天安德烈·亚历山大(Andrey Alexandrescu)问比尔:

—安德烈:比尔,你想要糖果吗?
—比尔:是的,当然!

然后,比尔将得到糖果,从糖果包装纸中取出糖果并吃掉有效载荷

简单? 并且我们使用了2个魔术字!

— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — —

几天后, 沃思问比尔:

—沃思:嗨,比尔,你想要糖果吗?
—比尔:是的! 当然!
—沃思:嘿,我有另一个,你想要吗?
—比尔:是的! 当然!

这是一个条件控制的循环周期。

—沃思:嘿,我有另一个,你想要吗?
—比尔:是的! 当然!

但是没有糖果,比尔有一个常见的空指针异常

— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — —

当心-如果亚历山大(Alexandrescu)突然返回并继续给比尔(Bill)提供糖果,则会发生缓冲区溢出 。 最终,比尔将永远接受新的糖果。

蛋糕是一个谎言!_第2张图片
缓冲区溢出

— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — —

第二天,沃思就准备好了。 他有一大袋糖果。

—沃思:好的,让我检查一下我的袋子……。
沃斯:我还有糖果。 比尔,你要糖果吗?
—比尔:是的! 当然!

在这种情况下,沃思只有在有糖果的情况下才会提供糖果。

在这里,我们以前提条件开始一个循环

— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — —

但是有一天,比尔来到沃思的房子,然后房子:

—比尔:给我糖果!
沃斯:没有什么能永远持续下去! 你已经吃光了!
-比尔:但是无论如何我都会接受!!!
—比尔:你有糖果吗?

这是一个带有后置条件循环 。 悲剧。 谢谢上帝警察在附近。 下次要小心,不要喂野鸟。

蛋糕是一个谎言!_第3张图片

— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — —

几十年后,丹·阿布拉莫夫(Dan Abramov)来到比尔(Bill),并将他所有的糖果放在桌上:

丹:无语的凝视比尔。
—比尔:无语的凝视着第一个糖果
丹:比尔,你要这些糖果一个吗?
—比尔:是的,可以。

这是一个集合控制的循环

— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — —

紧随其后,Dan又拿了一个袋子,将所有糖果放在桌子上,数数,然后放回袋子。

丹:比尔,看来我还有糖果。 你要糖果吗?
—比尔:是的,可以。

这是一个计数控制的循环

蛋糕是一个谎言!_第4张图片

— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — —

迟早要用Bjarne_Stroustrup来喂比尔。

—比耶恩:比尔,你有糖果吗?
—比尔:是的,可以。
—比耶恩:比尔,你要糖果吗?
—比尔:— — —

比尔正在嚼糖果。 他很忙,没有什么可以打扰他。 他举起一个互斥锁 ,线程被锁定,时间停止了……

蛋糕是一个谎言!_第5张图片
螺纹锁。

— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — —

Bjarne是一个非常聪明的人,他找到了解决方案:

—比耶恩:比尔,你要糖果吗?
—比尔:— — —
— Bjarne:好的,我要等到完全咀嚼...

在这里,我们进行了线程同步

— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — —

好的,这一次我们将呼叫Peter_Norton 。

彼得:比尔,你要糖果吗?
—比尔:是的! 当然!
彼得:我要提供一整包。 自己蒙克。

接下来的比尔将从袋子里一个个地拿糖果,然后一个个地吃。

这称为LIFO-最后,最后一次。 只要从包装底部的糖果最后被吃掉。

同时,比尔的消化是先进先出的FIFO

您以前必须知道。
蛋糕是一个谎言!_第6张图片

— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — —

Donald_Knuth也加入了喂养团队。 但是有一天,他厌倦了为比尔购买新糖果,并要求一家餐饮公司来做。

-唐纳德​​:嘿,我的朋友,你能在最近的商店里买最好的糖果,然后交给比尔吗? 这是比尔的地址和钱……

从那时起,比尔(Bill)总是有唐纳德(Donald)的新糖果。

在这种情况下,餐饮公司是一个职能部门 ,地址和金钱是争论的焦点 。 糖果是回报价值

如果对于相同的地址和相同的金额,比尔将始终获得相同的糖果—这将被称为纯函数

但是只有在公司仅将糖果从A点转移到B点的情况下,并且只要失去糖果,商店就永远不会发挥纯功能。
蛋糕是一个谎言!_第7张图片

但是Dennis_Ritchie甚至还很聪明!

丹尼斯:嗨,比尔,你要糖果吗?
比尔:你知道的!
丹尼斯:这是一个地址。 您会在那找到想要的糖果。

这是一个指针

但是,比尔到达那个地址时,他发现那里有一个军事目标。 无论如何,他得到了一个地址,并不惜一切代价努力实现自己的目标,但安全就是安全。

访问冲突

蛋糕是一个谎言!_第8张图片

几个月后,在逃离监狱后,他试图重蹈覆辙,但又无法达到“目标”。 远处阻止他的东西- 边界检查的无形和坚不可摧的墙。

— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — —

但是有一天……。 甚至说实话-夜晚-Cyber​​demon来到Bill的房子里大喊:

— Cyber​​demon :你想要糖果吗?
比尔:是的! 在白天,然后星星闪耀! 总是!

因此,比尔又得到了糖果。 但这是一个可悲的故事,只要他忘记检查有效载荷的类型或执行任何其他数据验证即可 。 ☠️

蛋糕是一个谎言!_第9张图片

— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — —

之后,比尔在一片空白中醒来,听到:

宇宙:比尔! 你要糖果吗?
比尔:是的!
宇宙:比尔! 你要糖果吗?
比尔:是的!
宇宙:比尔! 你要糖果吗?
比尔:是的!

这就是ping的工作方式。

在具有非零延迟的受干扰系统中,看起来可能是这样:

宇宙:比尔! 你要糖果吗?
宇宙:比尔! 你要糖果吗?
宇宙:比尔! 你要糖果吗?
比尔:是的!
比尔:是的!
比尔:是的!

但是这种情况仅对TCP / UDP有效。 如果是TCP / IP,则可能会更改

宇宙:比尔! 你要糖果吗? 法案! 你要糖果吗?
宇宙:比尔! 你要糖果吗?
比尔:是的! 是! 是!

只要同级分组通过时间或大小因子( MTU )加入。

蛋糕是一个谎言!_第10张图片

结束

我有很多不为人知的故事,例如比尔和四人帮 或非跨浏览器糖果。

但是,让我告诉最后一个关于“不可分割的糖果”的问题:

比尔吃了上百遍,但它突然变回他的手,松了口甚至还很甜!

因此,不可分割的糖果可能是单例内存 泄漏,因为长时间的垃圾收集器无法消化它。

蛋糕是一个谎言!_第11张图片
祝你玩得开心,比尔。

原始文章“ The Val`s Candies”发布于7年前,从那时起,它有了许多新的示例作为用户注释-递归,委托,接口,堆栈溢出,过程与函数,类,B树和以此类推。

那么, 您能描述一下IT方面的事情吗? 从使用糖果,蛋糕或其他东西的抽象计算机世界中……。

蛋糕是一个谎言!_第12张图片

比尔仍然很饿,他饿了。 你要喂他

From: https://hackernoon.com/the-cake-is-a-lie-f0210aab2ee3

你可能感兴趣的:(网络)