代码传奇丨比尔盖茨亲手挖了个非科班程序员 如今是硅谷公认的操作系统天神

David Cutler 听过吗? 他是微软公认的最厉害的程序员,VMS 和 Windows NT 的首席设计师,1988 年去微软前硅谷最牛的内核开发人员,在操作系统领域摸爬滚打几十年,其间的经历就像一部标准的硅谷程序员奋斗日记。

大卫·卡特勒(David Cutler),又叫做戴夫·卡特勒(Dave Cutler),戴夫是他的昵称。他是一位传奇程序员,是 VMS 和 Windows NT 的首席设计师,被人们成为「操作系统天神」。

他曾供职于杜邦、DEC 等公司,1988 年,由比尔 ·盖茨招募到微软,他用了 5 年时间花费了 15 亿美金,负责组织 NT 的开发。

与许多计算机界的前辈牛人们一样,David Cutler 并不是计算机科班出身,他在大学拿的是数学学士,主攻物理,满怀热情地想成为一位建造事物的工程师。所以,毕业后他进入杜邦公司从事材料测试。一次偶然的机会,David 被指派负责在 DEC 的计算机上运行模拟程序,还为多台单机实时系统编写中央控制程序,调度各种任务、监控系统运作。这个经历不仅丰富了 David 的软件知识,还让他做出了一个重大的决定:去一家真正从事计算机业务的公司,开发操作系统。

1971 年,David Cutler 离开杜邦公司来到 DEC。他的第一项任务就是为 DEC 的 PDP-11 微处理器开发操作系统——RSX-11M。PDP-11 是为工业控制和制造控制而设计的 16 位微处理器。David 结合总体概念和设计原则,利用汇编语言在非常有限的内存空间内实现了多项系统功能,如:树型文件系统、交换应用程序、实时调度和一整套开发工具等。据 David 回忆,当时连他的橡皮图章上都刻着开发这个操作系统的目标——「容量就是一切!」后来,这些概念和原则也体现在了 NT 上。

70 年代后期,DEC 公司在 PDP-11 的基础上开发出 32 位的 VAX 处理器。与之相应,也要开发基于 VAX 的操作系统 VMS,要能兼容 RSX-11M,可以在不同大小的机器上运行。David Cutler 成为这个项目主要负责人,设计 VMS 的架构。1977 年,VMS 1.0 问世。David 唯一的遗憾是,因为迎合商业进度,因此 VMS 也是用汇编语言写的,尽管当时完全可以用高级语言。所以,技术上正确的事并不见得是商业上的最佳选择。随后,David 继续研制 VMS 的后续版本,不过他有些不耐烦了。1981 年,David 威胁要离开 DEC。为了挽留它的明星开发者,DEC 给了 David 大约 200 位软硬件工程师。David 把他的小组搬到西雅图,并建立了一个开发中心。这个精英小组的目标是设计一个新的 CPU 体系结构和操作系统,可以把 DEC 带到九十年代。DEC 把这个小组的硬件项目称为 Prism,操作系统为 Mica。

很不幸,Prism 项目于 1988 年被 DEC 撤销,很多项目成员也被解雇。因此 David Cutler 萌生了去意。此时,为了未来能够与 Unix 抗争、开发新的操作系统,Bill Gates 见缝插针,竭力劝说 David 加入微软。David 去了,还带去了许多与他一同开发 VMS 和 Mica 的程序员。进入微软,David 领导一个工程小组,负责设计一种能提供文件服务、打印服务和应用服务的对称多处理。操作系统,起名为 Windows New Technology(NT)。这就是 Bill Gates 想用来对抗 Unix 的新型武器。

经过近 4 年的开发工作,在 1993 年 6 月发布的第一版 Windows NT 3.1,已经具备了现代操作系统的雏形——抢先式多任务、虚拟内存、对称多处理器、图形界面、C2 安全级、坚固而稳定的内核、内置网络支持、完全的 32 位代码等。而 1994 年推出的 Windows NT 3.51 和 1996 年推出的 Windows NT 4.0,在性能上有了更进一步提高;NT4.0 甚至提供了当时最先进的 Windows 95 风格界面。David Cutler 在自己的天梯上继续攀升,Bill Gates 也在销售数字面前笑得合不拢嘴。

毫无疑问,NT 操作系统有一个优秀的内核,David Cutler 成功地引入了硬件抽象层、内核对象这些天才的思想。虽然我们没能得见它的源代码,但在钻研 NT DDK 的过程中、在埋头可能就是由 David 亲笔撰写的文档中时,总能有那些闪光点,让我们可以在不同的时空与大师对话。

如今,Built On NT Technology 的 Windows 2000 和 XP 的成绩有目共睹,而针对 64 位处理器的 XP 也即将推出。回顾开发操作系统的历程,David 情不自禁地感叹道:「我也不知道,自己竟是那么的幸运,能够在有生之年开发好几个操作系统,而对于任何一个人来说,哪怕只开发一个都是非常难得的机会。」

是的,David Cutler 做到了,在操作系统领域中纵横了几十年,缔造了许多传奇和神话。然而,又有谁会去看他几十年的专注、寂寞、付出与艰辛呢?可能每个人在开始自己的职业生涯时都会设定一个目标。然而只有那么一些人会抓住目标紧紧不放、全心投入,最后这些人成了我们眼中的成功者、技术天才。也许,这就是成就天才与普通人的不同之处。

David Cutler 趣事一则

David Cutler,VMS 和 Windows NT 的首席设计师,去微软前号称硅谷最牛的 kernel 开发员。当初他和他的手下在微软一周内把一个具备基本功能的 bootable kernel 写出来,然后说:「who can』t write an OS in a week?",也是牛气冲天的说。顺便说一句,D 爷爷到 NT3.5 时,管理 1500 名开发员,自己还兼做设计和编程,不改 coder 本色啊。D 爷爷天生脾气火爆,和人争论时喜欢双手猛击桌子以壮声势。:-) 日常交谈 F-word 不离口。他面试秘书时必问:"what do you think of the word 『fuck』?",让无数美女刹羽而归。终于有一天,一个同样火爆的女面对这个问题脱口而出:"That』s my favorite word"。于是她被录取乐,为 D 爷爷工作到 NT3.5 发布。

David Cutler 是全世界公认的 Windows NT 之父,我们现在最常用的从 XP 开始直到 Win7 全部都是 NT 的内核,只是版本号不一样。这位 NT 之父对 Windows 内核有多少代码贡献呢,小编统计了一下:

\ntos\ex\alpha\raisests.c David N. Cutler (davec) 18-Oct-1990

\ntos\ex\ia64\raisests.c based on David N. Cutler (davec) 18-Oct-1990

\ntos\ex\mips\raisests.c David N. Cutler (davec) 18-Oct-1990

\ntos\ex\ppc\raisests.c David N. Cutler (davec) 18-Oct-1990

\ntos\ex\callperf.c David N. Cutler (davec) 22-May-1994

\ntos\ex\delay.c David N. Cutler (davec) 13-May-1989

\ntos\ex\event.c David N. Cutler (davec) 8-May-1989

\ntos\ex\exp.h David N. Cutler (davec) 23-May-1989

\ntos\ex\handle.c David N. Cutler (davec) 17-May-1995 (rewrite)

\ntos\ex\lookasid.c David N. Cutler (davec) 19-Feb-1995

\ntos\ex\mutant.c David N. Cutler (davec) 17-Oct-1989

\ntos\ex\pool.c David N. Cutler (davec) 27-May-1994

\ntos\ex\probe.c David N. Cutler (davec) 19-Jan-1990

\ntos\ex\raise.c David N. Cutler (davec) 29-Apr-1995

\ntos\ex\region.c David N. Cutler (davec) 25-Novy-1995

\ntos\ex\resource.c David N. Cutler (davec) 20-Mar-1994

\ntos\ex\semphore.c David N. Cutler (davec) 8-May-1989

\ntos\ex\spintrac.c David N. Cutler (davec) 16-May-1989

\ntos\ex\sysenv.c David N. Cutler (davec) 10-Nov-1991

\ntos\ex\timer.c David N. Cutler (davec) 12-May-1989

\ntos\inc\alpha.h Joe Notarangelo 31-Mar-1992 (based on mips.h by Dave Cutler)

\ntos\inc\arc.h David N. Cutler (davec) 18-May-1991

\ntos\inc\arccodes.h David N. Cutler (davec) 20-Sep-1991

\ntos\inc\duodma.h David N. Cutler (davec) 13-Nov-1990

\ntos\inc\dzport.h David N. Cutler (davec) 15-Aug-1990

\ntos\inc\hal.h David N. Cutler (davec) 25-Apr-1991

\ntos\inc\i386.h David N. Cutler (davec) 2-Aug-1989

\ntos\inc\ia64.h David N. Cutler (davec) 31-Mar-1990

\ntos\inc\jazzdef.h David N. Cutler (davec) 26-Nov-1990

\ntos\inc\jazzdma.h David N. Cutler (davec) 13-Nov-1990

\ntos\inc\jazzint.h David N. Cutler (davec) 6-May-1991

\ntos\inc\jazzprom.h David N. Cutler (davec) 27-Apr-1991

\ntos\inc\jazzrtc.h David N. Cutler (davec) 3-May-1991

\ntos\inc\jazzserp.h David N. Cutler (davec) 28-Apr-1991

\ntos\inc\jnsndef.h David N. Cutler (davec) 26-Nov-1990

\ntos\inc\jnsnint.h David N. Cutler (davec) 6-May-1991

\ntos\inc\jnsnrtc.h David N. Cutler (davec) 3-May-1991

\ntos\inc\jnsnserp.h David N. Cutler (davec) 28-Apr-1991

\ntos\inc\ke.h David N. Cutler (davec) 27-Feb-1989

\ntos\inc\mips.h David N. Cutler (davec) 31-Mar-1990

\ntos\inc\ppc.h Based on mips.h, by David N. Cutler (davec) 31-Mar-1990

\ntos\inc\ppcdef.h David N. Cutler (davec) 26-Nov-1990

\ntos\inc\ppcserp.h David N. Cutler (davec) 28-Apr-1991

\ntos\io\complete.c David N. Cutler (davec) 25-Feb-1994

\ntos\kd\alpha\kdtrap.c David N. Cutler 27-July-1990

\ntos\kd\mips\kdtrap.c David N. Cutler 27-July-1990

\ntos\kd\ppc\kdtrap.c Based on David N. Cutler MIPS version 27-July-1990

\ntos\kd\kdbreak.c David N. Cutler 2-Aug-1990

\ntos\kd\kdcomio.c David N. Cutler 27-July-1990

\ntos\kd\kdinit.c David N. Cutler 27-July-1990

\ntos\kd64\alpha\kdtrap.c David N. Cutler 27-July-1990

\ntos\kd64\ia64\kdtrap.c David N. Cutler 27-July-1990

\ntos\kd64\kdbreak.c David N. Cutler 2-Aug-1990

\ntos\kd64\kdcomio.c David N. Cutler 27-July-1990

\ntos\kd64\kdinit.c David N. Cutler 27-July-1990

\ntos\ke\alpha\alignem.c David N. Cutler (davec) 17-Jun-1991

\ntos\ke\alpha\allproc.c David N. Cutler 29-Apr-1993

\ntos\ke\alpha\apcuser.c David N. Cutler (davec) 23-Apr-1990

\ntos\ke\alpha\callback.c David N. Cutler (davec) 29-Oct-1994

\ntos\ke\alpha\exceptn.c David N. Cutler (davec) 3-Apr-1990

\ntos\ke\alpha\floatem.c David N. Cutler (davec) 16-Jun-1991

\ntos\ke\alpha\flush.c David N. Cutler (davec) 26-Apr-1990

\ntos\ke\alpha\flushtb.c David N. Cutler (davec) 13-May-1989

\ntos\ke\alpha\getsetrg.c David N. Cutler (davec) 17-Jun-1991

\ntos\ke\alpha\initkr.c David N. Cutler (davec) 11-Apr-1990

\ntos\ke\alpha\intobj.c David N. Cutler (davec) 3-Apr-1990

\ntos\ke\alpha\ipi.c David N. Cutler 24-Apr-1993

\ntos\ke\alpha\thredini.c David N. Cutler (davec) 1-Apr-1990

\ntos\ke\i386\apcuser.c David N. Cutler (davec) 23-Apr-1990

\ntos\ke\i386\callback.c David N. Cutler (davec) 29-Oct-1994

\ntos\ke\i386\exceptn.c David N. Cutler (davec) 30-Apr-1989

\ntos\ke\i386\flush.c David N. Cutler (davec) 26-Apr-1990

\ntos\ke\i386\flushtb.c David N. Cutler (davec) 13-May-1989

\ntos\ke\i386\intobj.c David N. Cutler (davec) 30-Jul-1989

\ntos\ke\i386\kernlini.c David N. Cutler (davec) 21-Apr-1989

\ntos\ke\i386\thredini.c David N. Cutler (davec) 31-Mar-1990

\ntos\ke\ia64\alignem.c David N. Cutler (davec) 17-Jun-1991

\ntos\ke\ia64\allproc.c Based on MIPS original (David N. Cutler 29-Apr-1993)

\ntos\ke\ia64\apcuser.c based on MIPS version by David N. Cutler (davec) 23-Apr-1990

\ntos\ke\ia64\callback.c based on David N. Cutler (davec) 29-Oct-1994

\ntos\ke\ia64\getsetrg.c David N. Cutler (davec) 17-Jun-1991

\ntos\ke\ia64\initkr.c Based on MIPS version (David N. Cutler (davec) 11-Apr-1990)

\ntos\ke\ia64\intobj.c David N. Cutler (davec) 3-Apr-1990

\ntos\ke\ia64\mpipi.c Based on version of David N. Cutler 24-Apr-1993

\ntos\ke\ia64\thredini.c David N. Cutler (davec) 1-Apr-1990

\ntos\ke\mips\alignem.c David N. Cutler (davec) 17-Jun-1991

\ntos\ke\mips\allproc.c David N. Cutler 29-Apr-1993

\ntos\ke\mips\apcuser.c David N. Cutler (davec) 23-Apr-1990

\ntos\ke\mips\branchem.c David N. Cutler (davec) 17-Jun-1991

\ntos\ke\mips\buserror.c David N. Cutler (davec) 31-Oct-1991

\ntos\ke\mips\callback.c David N. Cutler (davec) 29-Oct-1994

\ntos\ke\mips\dmpstate.c David N. Cutler (davec) 17-Jan-1992

\ntos\ke\mips\exceptn.c David N. Cutler (davec) 3-Apr-1990

\ntos\ke\mips\floatem.c David N. Cutler (davec) 16-Jun-1991

\ntos\ke\mips\flush.c David N. Cutler (davec) 26-Apr-1990

\ntos\ke\mips\genmips.c David N. Cutler (davec) 27-Mar-1990

\ntos\ke\mips\getsetrg.c David N. Cutler (davec) 17-Jun-1991

\ntos\ke\mips\initkr.c David N. Cutler (davec) 11-Apr-1990

\ntos\ke\mips\intobj.c David N. Cutler (davec) 3-Apr-1990

\ntos\ke\mips\thredini.c David N. Cutler (davec) 1-Apr-1990

\ntos\ke\mips\xxflshtb.c David N. Cutler (davec) 13-May-1989

\ntos\ke\mips\xxmpipi.c David N. Cutler 24-Apr-1993

\ntos\ke\ppc\alignem.c Based on MIPS version by David N. Cutler (davec) 17-Jun-1991

\ntos\ke\ppc\allproc.c David N. Cutler 29-Apr-1993

\ntos\ke\ppc\apcuser.c based on MIPS version by David N. Cutler (davec) 23-Apr-1990

\ntos\ke\ppc\callback.c David N. Cutler (davec) 29-Oct-1994

\ntos\ke\ppc\dmpstate.c Based on Dave Cutler』s MIPS implemenation

\ntos\ke\ppc\exceptn.c Adapted from MIPS version by David N. Cutler (davec) 3-Apr-1990

\ntos\ke\ppc\flush.c David N. Cutler (davec) 26-Apr-1990

\ntos\ke\ppc\flushtb.c David N. Cutler (davec) 13-May-1989

\ntos\ke\ppc\genppc.c David N. Cutler (davec) 27-Mar-1990

\ntos\ke\ppc\getsetrg.c Based on MIPS version by David N. Cutler (davec) 17-Jun-1991

\ntos\ke\ppc\initkr.c David N. Cutler (davec) 11-Apr-1990

\ntos\ke\ppc\intobj.c Based on original code by David N. Cutler (davec) 3-Apr-1990

\ntos\ke\ppc\ipi.c David N. Cutler 24-Apr-1993

\ntos\ke\ppc\thredini.c David N. Cutler (davec) 1-Apr-1990

\ntos\ke\tests\mipsflt\flpt.c David N. Cutler (davec) 20-Jun-1991

\ntos\ke\tests\mipsflt\flpt.h David N. Cutler (davec) 1-Jul-1991

\ntos\ke\tests\mipsflt\flpt2.c David N. Cutler (davec) 1-Jul-1991

\ntos\ke\tests\xcphnd\xcpt4.c David N. Cutler (davec) 18-Sep-1990

\ntos\ke\apcobj.c David N. Cutler (davec) 5-Mar-1989

\ntos\ke\apcsup.c David N. Cutler (davec) 14-Mar-1989

\ntos\ke\balmgr.c David N. Cutler (davec) 13-Jul-1991

\ntos\ke\channel.c David N. Cutler (davec) 26-Mar-1995

\ntos\ke\config.c David N. Cutler (davec) 9-Sep-1991

\ntos\ke\devquobj.c David N. Cutler (davec) 1-Apr-1989

\ntos\ke\dpcobj.c David N. Cutler (davec) 6-Mar-1989

\ntos\ke\dpcsup.c David N. Cutler (davec) 22-Apr-1989

\ntos\ke\eventobj.c David N. Cutler (davec) 27-Feb-1989

\ntos\ke\kernldat.c David N. Cutler (davec) 12-Mar-1989

\ntos\ke\ki.h David N. Cutler (davec) 28-Feb-1989

\ntos\ke\kiinit.c David N. Cutler 11-May-1993

\ntos\ke\miscc.c David N. Cutler (davec) 13-May-1989

\ntos\ke\mutntobj.c David N. Cutler (davec) 16-Oct-1989

\ntos\ke\procobj.c David N. Cutler (davec) 7-Mar-1989

\ntos\ke\queueobj.c David N. Cutler (davec) 31-Dec-1993

\ntos\ke\raisexcp.c David N. Cutler (davec) 8-Aug-1990

\ntos\ke\semphobj.c David N. Cutler (davec) 28-Feb-1989

\ntos\ke\thredobj.c David N. Cutler (davec) 4-Mar-1989

\ntos\ke\thredsup.c David N. Cutler (davec) 5-Mar-1989

\ntos\ke\timerobj.c David N. Cutler (davec) 2-Mar-1989

\ntos\ke\timersup.c David N. Cutler (davec) 13-Mar-1989

\ntos\ke\wait.c David N. Cutler (davec) 23-Mar-89

\ntos\ke\waitsup.c David N. Cutler (davec) 24-Mar-1989

\ntos\ke\xipi.c David N. Cutler (davec) 24-Apr-1993

\ntos\ke\yield.c David N. Cutler (davec) 15-Mar-1996

\ntos\mm\axp64\debugsup.c David N. Cutler (davec) 24-Feb-1998

\ntos\mm\flushbuf.c David N. Cutler 24-Apr-1991

\ntos\ps\alpha\psctxalp.c David N. Cutler (davec) 1-Oct-1990

\ntos\ps\ia64\psctxi64.c David N. Cutler (davec) 1-Oct-1990

\ntos\ps\mips\psctxmip.c David N. Cutler (davec) 1-Oct-1990

\ntos\ps\ppc\psctxppc.c David N. Cutler (davec) 1-Oct-1990

\ntos\ps\kulookup.c David N. Cutler (davec) 8-Oct-90

\ntos\rtl\alpha\chandler.c David N. Cutler (davec) 11-Sep-1990

\ntos\rtl\alpha\context.c David N. Cutler (davec) 18-Apr-1990

\ntos\rtl\alpha\exdsptch.c David N. Cutler (davec) 11-Sep-1990

\ntos\rtl\alpha\ntrtlalp.h David N. Cutler (davec) 19-Apr-90

\ntos\rtl\i386\divlarge.c David N. Cutler 10-Aug-1992

\ntos\rtl\i386\exdsptch.c David N. Cutler (davec) 13-Aug-1989

\ntos\rtl\i386\raisests.c David N. Cutler (davec) 8-Aug-1990

\ntos\rtl\ia64\chandler.c Based on the version by David N. Cutler (davec) 11-Sep-1990

\ntos\rtl\ia64\exdsptch.c based on the version by David N. Cutler (davec) 11-Sep-1990

\ntos\rtl\mips\chandler.c David N. Cutler (davec) 11-Sep-1990

\ntos\rtl\mips\context.c David N. Cutler (davec) 18-Apr-1990

\ntos\rtl\mips\exdsptch.c David N. Cutler (davec) 11-Sep-1990

\ntos\rtl\mips\ntrtlmip.h David N. Cutler (davec) 19-Apr-90

\ntos\rtl\ppc\chandler.c David N. Cutler (davec) 11-Sep-1990

\ntos\rtl\ppc\context.c David N. Cutler (davec) 18-Apr-1990

\ntos\rtl\ppc\exdsptch.c based on MIPS version by David N. Cutler (davec) 11-Sep-1990

\ntos\rtl\ppc\jumps.c David N. Cutler (davec) 15-Sep-1990

\ntos\rtl\ppc\ntrtlppc.h based on MIPS version by David N. Cutler (davec) 19-Apr-90

\ntos\rtl\ppc\vunwind.c based on MIPS version by David N. Cutler (davec) 11-Sep-1990

\ntos\rtl\generr.c David N. Cutler (davec) 2-Dec-1992

\ntos\rtl\lookasid.c David N. Cutler (davec) 19-Feb-1995

\ntos\rtl\ntrtlp.h David N. Cutler (davec) 15-Aug-1989

\ntos\rtl\recip.c David N. Cutler (davec) 13-May-1989

\sdktools\imagehlp\checksum.c David N. Cutler (davec) 21-Mar-1993

共计有 177 个文件是出自这位 NT 之父。比 Mark Lucovsky 还要多一倍。当之无愧的 NT 之父。

更让人钦佩的是,这位前辈依然奋战在代码的第一线。与国内目前普遍认为 30 岁以后就不适合做 Coding 的态度截然不同。现在业内的心态大多太浮躁了。

原文发布于微信公众号 - 顶级程序员(TopCoding)

原文发表时间:2017-11-19

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏机器人网

全程高能:特斯拉超级工厂探秘,看机器人如何造Model X

创立于 2003 年的 Tesla 近年来凭借 Model S 在全球大放异彩。该公司位于美国加州弗里蒙特市的工厂成为当之无愧的最大幕后功臣。就像其他汽车制造厂...

3226
来自专栏黑白安全

广东警方侦破黑客类案件100余宗 涉案金额2500余万元

南都记者从广东省公安厅获悉,近日,在公安部的指挥协调下,省公安厅组织开展“净网安网”15号打击黑客网络攻击破坏违法犯罪专项行动。行动期间,共侦破黑客类案件100...

1405
来自专栏汇智网教程

2018最新区块链白皮书大全

6866
来自专栏大数据文摘

罪与罚:近几年最惹争议的黑客判决

3605
来自专栏安恒信息

黑客成功破解ATM盗取百万美元

由于黑客新发现了一种非常危险的破解ATM盗取现金的手段,美国联邦监管机构已经提醒各银行对此进行防范。这种手段的危险之处在于无论储户的存款额有...

2286
来自专栏大数据文摘

德国情报机构再次与NSA合作,共享公民数据

1443
来自专栏大数据文摘

五张图,读懂致命病毒埃博拉来龙去脉

1818
来自专栏机器人网

植保无人机厂家不敢说的秘密

大家好,我是小明,飞手小明的小明,今天我们来谈一谈:植保无人机厂家不敢说的那些秘密 第一个:关于载重 无人机的载重为什么上不去,原理我就不说了(我特么也说不清...

3186
来自专栏黑白安全

俄罗斯黑客工具“Cannon”正在美欧计算机上进行更隐蔽的攻击

网络安全专家表示,俄罗斯黑客拥有一种新工具,可以在不被察觉的情况下访问敏感计算机。而且他们正在利用它来瞄准美国和欧洲政府实体,以及苏联的前领土。网络安全公司Pa...

1082
来自专栏安恒信息

美爆特大信用卡数据盗窃案 4000万顾客购物沦陷

美国零售巨头塔吉特公司(Target Corp。)19日声称,约4000万名顾客信用卡和借记卡账户数据在感恩节购物季期间被盗。这也是美国零售业近年来最大的信用卡...

3125

扫码关注云+社区

领取腾讯云代金券