DTrace 全称 Dynamic Tracing,即动态跟踪,是由 Sun Microsystems 开发的一个用来在生产和试验性生产系统上找出系统瓶颈的工具,可以对内核和用户应用程序进行动态跟踪并且对系统运行不构成任何危险的技术。

这是一个很久以前的故事,如今的 Sun Microsystems 鲜有动态,上一次出现在众人视线,还是因为谷歌和甲骨文的十年版权之争获得最终裁决。

1995 年,Sun Microsystems 推出了 Java。当年谷歌构建安卓操作系统,用了 Sun Microsystems 的一万多行代码。2009 年,甲骨文以 74 亿美元价格收购了 Sun Microsystems 和 Java 软件。2010 年,甲骨文以「谷歌擅自使用 Java API 作为 Android 操作系统的一部分侵犯专利及版权」为由提起诉讼。历经十年,2021 年 4 月,美国最高法院判处谷歌胜诉。

曾经的 Sun Microsystems 是一家极具创新能力的 IT 巨头,但慢慢被其他竞争对手取代。接下来,Brendan Gregg 详细回忆了当年的故事。

一个热门开源项目如何被盗

这是我在开源世界中遇到的难以置信的经历,绝对不是编造。

2005 年,我被卷入飓风中心。当时我是一名独立绩效顾问,而 Sun Microsystems 刚刚发布了 DTrace,这是一个可以检测所有软件的工具。当我忙着使用 DTrace 编写和发布高性能工具时,我发现一个问题:此前我开源的 DTraceToolkit 和其他 DTrace 工具,比 Sun 公司推出的工具要更全面,难道是一些内部项目消耗了他们的技术能力?

DTraceToolkit v0.96 工具 (2006)。

由于不是 Sun 公司的员工,我对其内部项目一无所知。当时我住在澳大利亚悉尼,正在为 Sun 公司进行培训和咨询工作,帮助他们的客户提升系统管理和性能方面的工作。Sun 公司有时会邀请我以本地专家的身份参加他们的客户会议和其他我可能感兴趣的活动。

有一次,我被告知,有一位非常重要的人物从美国来。我不认识那个名字,但听说他是 Sun 公司的 DTrace 专家和开发人员,并且正在世界巡回演讲,展示 Sun 基于 DTrace 的新产品。

我见过一些来自 Sun 公司的顶尖技术,但我从未见过巡回展示的开发者。这位大人物在去下一个澳大利亚城市之前,要在悉尼停留几天,所以我同意在 Sun 公司的悉尼办公室见面。

两名澳大利亚的 Sun 公司员工向这位大人物介绍了我:「Brendan 为我们讲授一些课程,并且一直在做 DTrace 的相关工作。」低调介绍在澳大利亚是常态(尤其是对澳大利亚人)。

我试图表达我写了 DTraceToolkit,以此来打开话题,但他并没有留下什么深刻印象。他不认识我的名字,也没有听说过 DTraceToolkit。对他来说,我只是随便一个陌生人。

无论如何,他还是友好地做了一个快速演示。他的 DTrace 产品是我非常熟悉的一个更大的 Sun GUI 的附加组件。加载后,他展示了如何通过双击图标来运行多个 DTrace 工具。原始输出在单独的窗口中,或者将结果显示为折线图,这些似乎相当平庸。我希望有一个新的 GUI 功能。

唯一的新东西是工具本身。他进行了一番销售式宣传,就是那些说过很多次、期望能给客户留下深刻印象的话术。我有一种感觉,他不希望我正确地欣赏它们的价值。

但我十分了解他讲的这些工具,我为自己的 DTraceToolkit 编写了类似的功能。所以我说:「我以前做过这些,我自己写过做这些事情的工具!」

「当然可以。」他没说别的,但是有一种不太相信我的感觉。毕竟这是估值数十亿美元的跨国公司 Sun Microsystems 的重要创新,而我只是随便一个澳大利亚人。

随后,我浏览了一些新的 GUI 图标,其中有用于跟踪套接字 I/O 的工具。我在 2004 年尝试过这个(socketsnoop.d)并将其作为开源项目发布,但我当时写的工具不完整:它没有访问内核源代码的权限,所以不得不使用黑盒分析来解决所有问题;它适用于大多数 TCP 流量类型,但不适用于某些类型,我在脚本注释中对此进行了提示;它没有包含在 DTraceToolkit 中,因为我认为它还没有完成。

这也是为什么,在所有工具中我最感兴趣的是看到这个。Sun 公司应该可以做得更好,并实际应用这个工具。

「我可以看下套接字 I/O 脚本吗?」然后我启动了一个终端。他看起来很惊慌,好像我不应该看后台,然后他仿佛意识到了另一个卖点:「嗯当然,你甚至可以在 GUI 中添加更多工具!」停顿片刻后,他加上了一句「如果你有的话」。

经过一番搜索,我找到了包含他此前演示的所有工具的目录。

这些工具的名字都很熟悉,其中一个甚至叫做「socketsnoop.d」。这让我想到了一种新的可能,难道……

于是我输出了 socketsnoop.d,屏幕上都是我写的脚本,是我一年前的不完整尝试,并作为开源项目发布的内容。它包含一些奇怪的代码,并且是用我早期的编码风格编写的。我输出其他工具并看到了同样的结果 —— 脚本都是我写的。

Sun 公司的这位人物在世界各地炫耀的新产品,其实就是我自己的开源工具。

我在我所有工具中都写了一条带有我名字的注释,因此我使用 grep 在他们的工具中搜索我的名字,以证明这本来是我的项目。但我什么也没找到,我的名字被删掉了。

我编写的一些工具甚至包括:

现在,在澳大利亚悉尼,他们试图将 Brendan Gregg 的工具卖给 Brendan Gregg。

一位 Sun 公司的澳大利亚员工打断道:「那些人说版权是 Sun Microsystems 的。」我的大部分工具都有我自己的版权和 GPLv2 或 CDDL 许可证。但这些工具现在只有 Sun 的标准版权信息,开源许可证也已经被剥夺。

「你删掉了我的名字!还有版权和许可证!」

另一个澳大利亚人对大人物补充道:「你『不能』这样做。」

基于发生事情的严重性,整个房间陷入了沉默。虽然 Sun 的一些人鼓励开源贡献并建立了一个社区,但其他人却在同一个社区行盗窃之事:拿走他们的作品,更改许可和版权,然后将其出售。

这位大人物对此毫无准备,一脸疑惑。他没有说太多,也许并不知道发生了什么,只是从其他人那里得到了已更改版权的工具,意思是「这不怪他」,并且他似乎对我们说的话半信半疑。

会议很快结束了。我建议他,直接从 DTraceToolkit 获取我的工具的更新副本,因为我主页上的这些旧版本已经过时,而且有些错误我已经修复了。我还提醒他保留我的姓名、版权和许可证。

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
img

最后总结我的面试经验

2021年的金三银四一眨眼就到了,对于很多人来说是跳槽的好机会,大厂面试远没有我们想的那么困难,摆好心态,做好准备,你也可以的。

另外,面试中遇到不会的问题不妨尝试讲讲自己的思路,因为有些问题不是考察我们的编程能力,而是逻辑思维表达能力;最后平时要进行自我分析与评价,做好职业规划,不断摸索,提高自己的编程能力和抽象思维能力。

BAT面试经验

实战系列:Spring全家桶+Redis等

其他相关的电子书:源码+调优

面试真题:


712030095853)]

其他相关的电子书:源码+调优

[外链图片转存中…(img-1s3mONRe-1712030095853)]

面试真题:

[外链图片转存中…(img-nT5Lq8st-1712030095853)]

[外链图片转存中…(img-61CFpH1C-1712030095854)]

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐