Larry Osterman系列--去西雅图面试
2022-5-27 12:0:1 Author: mp.weixin.qq.com(查看原文) 阅读量:7 收藏

2006.1.18

昨天Raymond指出,Splay Trees很有趣,但当你进行有序遍历时,它们降级为链表。这让我想起开发NT 3.1 Browser服务时一段经历。

Browser服务现在已经跟废了差不多,但在上个世纪90年代,获取子网内其他主机名是件很酷的事。从Lan Manager开始,就有一种内置机制,用于枚举子网内所有服务器,后来Windows for Workgroups更进一步,还可以枚举子网内其他工作组。这非常酷。

在Browser架构中,只有某些主机充当Active Browser Server,它们收集其他主机发出的通知报文,维护一张列表。其他主机从Active Browser Server直接获取这张列表。NT 3.1的Browser架构需要支持多种协议,典型的有TCP/IP、NetBEUI、IPX/SPX。

我在Browser架构的C/S两侧都使用了Splay Trees。在后来的性能分析中,发现C端从S端获取列表的过程非常耗时,进一步分析,在C端出现了Raymond所指出的现象。

scz: 后面是些算法层面的文字,我看不懂,自己去看英文原文吧。

2006.2.3

西联汇款终于要退出电报业务了。

这辈子我只收到过一次电报,那是大约21年前了,电报邀请我去西雅图面试一家几乎没人听说过的小软件公司。我去了,面试官是个有点秃顶的大个子,噪门贼大,我从未听过他的名字,史蒂夫·鲍尔默。

scz: LO说的21年前是1985年

2006.2.7

我们家四个人四台电脑,由于不允许孩子们的电脑上网,所以在厨房里另有一台专用电脑,其唯一目的是让孩子们收Email以及浏览网页。理论上,如果他们在厨房上网,不太可能背着我们访问什么不好的内容。他们在自己的电脑上使用管理员账号,有些游戏非得如此,在厨房电脑上只有非管理员账号。

昨晚我在厨房电脑上网,注意到IE的菜单栏不见了,IE的设置没问题,但不能全屏,还有一些其他奇奇怪怪的现象。我进行了反间谍软件/病毒扫描,一无所获。

早上Daniel喊我起床,以便他可以在厨房电脑收Email。接着他遇到一条弹框提示

Outlook Express could not be started because MSOE.DLL could not be initialized

我决定对硬盘执行"chkdsk /f",然后重启。重启时chkdsk发现了硬盘坏块,有一些文件损坏。运行完chkdsk,再次重启,得到新的提示,说msimn.exe有问题。查看后发现msimn.exe文件大小为0。

我决定用SFC(System File Checker),它会校验受WFP(Windows File Protection)保护的文件并尝试修复,像这样,"SFC /SCANNOW"。之后IE菜单栏回来了。

我猜数据损坏发生有一阵了,只是我们没注意到,有可能与周末的断电有关。

2006.3.1

之前我以为自己对《调试Windows服务》完全清楚了,但LO在此展示了一项我从未想过的技术

sc config <service> binpath= "C:\temp\ntsd.exe -d <service executable> <service options>"

-d这个无所谓,可以换用-server技术。我没想过直接改binpath也是可以的,总是思维定势到IFEO去了。

Skywing在下方的评论也不错。

我是抱着看技术八卦的心态遍历LO的blog,没想到先是看到"连续差分法",后又看到这种对我实际工作直接有用的,赚了。

2006.3.2

我从Ryan那儿收到一条即时消息,他是负责性能调优的人员之一

Ryan: 嗨,Larry,我们刚刚发现了一个很严重的性能错误,导致Windows启动慢了3秒
Me:   让我猜猜,他们在某个服务启动时调用了RegFlushKey
Ryan: (长时间沉默)
Ryan: 谁告诉你的?
Me:   (内心哈哈哈)

RegFlushKey实际涉及磁盘I/O,并且是阻塞式的。Ryan的案例中,有人在DllMain中调用RegFlushKey,由于此时该段代码持有"loader lock",意味着同一svchost中的其他服务dll处于加载等待中,如果再有更多其他服务依赖这些等待启动的服务,事情就大发了。

RegFlushKey的文档明确说过,一般情况下,不要用。

为啥我猜得这么准呢?好吧,当我第一次将新的音频堆栈部署到Vista中时,遭遇了问题。新的音频服务导致Windows启动慢了四分之三秒。开发Vista时有项准则,对启动时间进行毫秒级评估,不允许进行降低系统启动性能的更改。我查看了系统启动过程的性能日志,注意到audiosrv服务启动时出现大量写磁盘的操作,深入排查后发现这与操作注册表的代码强相关,最终发现是RegFlushKey惹的祸。删掉对它的调用就好了。


文章来源: http://mp.weixin.qq.com/s?__biz=MzUzMjQyMDE3Ng==&mid=2247485897&idx=1&sn=9505d445884f2ee00977e279dcc219ec&chksm=fab2caf6cdc543e0b66f102bba0793c9ccbff518d2c213a3ba1ef14df6acc555623f2a1211d9#rd
如有侵权请联系:admin#unsafe.sh