51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

测试开发精英班,通向高级软件测试工程师【长期招募】博为峰网校招聘兼职讲师!【直播预售】接口测试行业大佬带你从青铜上王者一站式软件测试平台
【第98期】:走进海外测试开发工程师的生活!【专题】安全测试中的王牌工具—Wireshark 《51测试天地》分享测试经验赚稿费! 自学软件测试那点事
查看: 90|回复: 0

关于Docker这个问题,你可能不知道?

[复制链接]

该用户从未签到

发表于 2018-12-6 16:00:44 | 显示全部楼层 |阅读模式
    首先讲下"冷知识"这个词.。要一个比较地道的翻译的话,我个人觉得 trivia是一个比较好的单词.
  Trivia:
  The act of answering questions regarding information that is often useless or inapplicable
  回答那些无意/无用问题的行为.
  那今天的"冷知识"(trivia question)是:
  * 当启动一个docker 容器时, 默认的容器名字是什么? *
  1.  CONTAINER ID    IMAGE          COMMAND    NAMES  
  2.   eee4de167f06    hello-world    "/hello"   peaceful_mcnulty  
  3.   783ab628a474    hello-world    "/hello"   suspicious_jones  
  4.   5767cd8dc7c0    hello-world    "/hello"   heuristic_bassi  
  5.   cc4623db38ad    hello-world    "/hello"   elated_montalcini  
  6.   e8bb358ada71    hello-world    "/hello"   sleepy_kilby  
  7.   6e67c5398a72    hello-world    "/hello"   boring_kowalevski  
  8.   21ffb481d971    hello-world    "/hello"   angry_euler  
  9.   8c9322287dff    hello-world    "/hello"   keen_mayer
复制代码
      简单的说,默认容器名为"${形容词}_${人名}"的格式.

  但是再深入的问一句,那些人名是谁呢? 一共多少个这样的组合呢?
  源代码说明一切 /pkg/namesgenerator/names-generator.go#L105
  源码中的 left 是 93 个形容词的数组,褒贬的都有; right 是 160 位知名科学家和黑客的名字.
  1. func GetRandomName(retry int) string {  
  2.   begin:  
  3.       name := fmt.Sprintf("%s_%s", left[rand.Intn(len(left))], right[rand.Intn(len(right))])  
  4.       if name == "boring_wozniak" /* Steve Wozniak is not boring */ {  
  5.           goto begin  
  6.       }  
  7.       if retry > 0 {  
  8.           name = fmt.Sprintf("%s%d", name, rand.Intn(10))  
  9.       }  
  10.       return name  
  11.   }
复制代码

那看到代码其实会有两个吐槽点.

  1.关于 goto
  pshu 在接受大学计算机编程教育的时候,老师就提到使用 goto是一个坏的编程习惯. 所以很多接受过类似说法的同学都是对这个 goto嗤之以鼻. 其实恰恰相反,这个 goto 其实让代码变的更加的容易理解.
  那关于 goto有害的说法是怎么来的能,这里就是介绍今天的这位荷兰的大神 Edsger Wybe Dijkstra. 中文一般音译为"狄克斯特拉".
其实叫他大神我觉得有点太不严肃,应该称作是计算机行业中的先贤. 像图论中寻找两个之间最短路径的算法 Dijkstra算法就是 Dijkstra 发明的. 除了算法方面, Dijkstra 在并行计算(concurrent programming) 领域也是开拓者. critical section (临界区) 和 Dining philosophers problem (哲学家就餐问题), 都是他提出来的概念.

  回到 Goto 的问题上,关于 goto "有害"的历史是怎么来的呢?
  While Dijkstra had programmed extensively in machine code in the 1950s, he came to the conclusion that in high-level languages frequent use of the GOTO statement was usually symptomatic of poor structure. In 1968 he wrote a private paper "A Case against the GO TO Statement", which was then published as a letter in CACM.[59] Editor Niklaus Wirth gave this letter the heading "Go To Statement Considered Harmful", which introduced the phrase "considered harmful" into computing.

  Dijkstra 在20世纪50年代大量使用机器码编程的经历;就此经历,他提出了"在高级编程语言中频繁使用 goto 通常是程序结构不好的征兆." 1968的时候, 他写了一篇小论文 "A Case against the GO TO Statement", 标题大意,就是一个不要用 goto 的案例. 结果在 CACM 发表的时候, 编辑把标标题改成了 "Goto 语句"被认为是有害.
  想不到最后以讹传讹,直接给很多学编程的学生心里立下了 goto 就是烂代码的 flag.
  这段代码的第二个点就是 /* Steve Wozniak is not boring */

  2. the Woz
  国内翻译成沃兹,提到沃兹就不得不提[url=]苹果[/url]这家伟大的公司了. 对苹果这家公司,最有名的肯定是 Steve Jobs 了; 但这个 Woz 是和 Jobs 一起称为苹果双核的人. 当年沃兹发明的 Apple I/II 这两台苹果电脑, 可以说是开拓了个人电脑的新时代. 苹果还有一个第三号创始人 Ronald Wayne,他仅在苹果工作了12天; 他是这样评价这两个人的:"乔布斯有时如同恶魔附身,而沃兹尼亚克则像个被天使控制着的孩子。" 当Apple II热销之后苹果股票大涨, 沃兹就拿出八万股票以很低的价格卖给那些他认为没有被苹果善待的老员工.
  除了这些 Woz还有哪些让人觉得不一般的事迹呢?
  1.6岁就做出半导体收音机, 而且是全美最年轻获得业余无线电操作证.
  2.和 Jobs 制作贩卖盗打[url=]电话[/url]的设备, 并用此设备恶作剧假装是基辛格打电话给意大利教皇打电话.
  3.自建了一个讲笑话的电话热线,虽然亏钱,但靠这个热线遇到了第一任太太
  4.带着第二人未婚妻,开飞机,坠机,所幸最后无大碍.

  这些经历看, Woz 绝对不是一个无趣 boring 的 人.

  还有一点是 Woz 是 Sheldon 的心目中排名15的最有科技远见的人(Steve Jobs 排在第21位) ,因为版权问题,请各位同学自行搜该视频片段吧.

     最后小结下

  当面对 "docker 容器的默认名字是什么?"这样的trivial question 和 "Goto 语句是否是有害"的复杂问题时. 如果能抑制住内心想用一个简单答案来回答的冲动,保持着一颗好奇心,慢慢探索,多多思考. 最后获得的肯定会比问题本身更有价值的知识.

  最后祝大家 happy hacking & happy docker!




回复

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /3 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2018-12-20 00:33 , Processed in 0.060210 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2018 Comsenz Inc.

快速回复 返回顶部 返回列表