编程之美——微软技术面试心得 - (EPUB全文下载)

文件大小:0.69 mb。
文件格式:epub 格式。
书籍内容:

编程之美——微软技术面试心得(图文版)
《编程之美》小组
简介
《编程之美——微软技术面试心得》是微软亚洲研究院技术创新组研发主管邹欣继《移山之道——VSTS 软件开发指南》后的最新力作。它传达给读者:微软重视什么样的能力,需要什么样的人才。但它更深层的意义在于引导读者思考,提倡一种发现问题、解决问题的思维方式,充分挖掘编程的乐趣,展示编程之美。
编程之美——微软技术面试心得(图文版)
《编程之美》小组
简介
《编程之美——微软技术面试心得》是微软亚洲研究院技术创新组研发主管邹欣继《移山之道——VSTS 软件开发指南》后的最新力作。它传达给读者:微软重视什么样的能力,需要什么样的人才。但它更深层的意义在于引导读者思考,提倡一种发现问题、解决问题的思维方式,充分挖掘编程的乐趣,展示编程之美。
编程之美——微软技术面试心得(图文版)
《编程之美》小组
简介
《编程之美——微软技术面试心得》是微软亚洲研究院技术创新组研发主管邹欣继《移山之道——VSTS 软件开发指南》后的最新力作。它传达给读者:微软重视什么样的能力,需要什么样的人才。但它更深层的意义在于引导读者思考,提倡一种发现问题、解决问题的思维方式,充分挖掘编程的乐趣,展示编程之美。
编程之美——微软技术面试心得(图文版)
《编程之美》小组
简介
《编程之美——微软技术面试心得》是微软亚洲研究院技术创新组研发主管邹欣继《移山之道——VSTS 软件开发指南》后的最新力作。它传达给读者:微软重视什么样的能力,需要什么样的人才。但它更深层的意义在于引导读者思考,提倡一种发现问题、解决问题的思维方式,充分挖掘编程的乐趣,展示编程之美。
编程之美——微软技术面试心得(图文版)
《编程之美》小组
简介
《编程之美——微软技术面试心得》是微软亚洲研究院技术创新组研发主管邹欣继《移山之道——VSTS 软件开发指南》后的最新力作。它传达给读者:微软重视什么样的能力,需要什么样的人才。但它更深层的意义在于引导读者思考,提倡一种发现问题、解决问题的思维方式,充分挖掘编程的乐趣,展示编程之美。
题目1.让CPU 占用率曲线听你指挥
题目1.让CPU 占用率曲线听你指挥 问题
写一个程序,让用户来决定 Windows 任务管理器(Task Manager)的CPU 占用率。程序越精简越好,计算机语言不限。例如,可以实现下面三种情况:
1. CPU的占用率固定在50%,为一条直线;
2. CPU的占用率为一条直线,但是具体占用率由命令行参数决定(参数范围1~ 100);
3. CPU的占用率状态是一个正弦曲线。
分析与解法[1]
[1]作者注:当面试的同学听到这个问题的时候,很多人都有点意外。我把我的笔记本电脑交给他们说,这是开卷考试,你可以上网查资料,干什么都可以。大部分面试者在电脑上的第一个动作就是上网搜索"CPU 控制50%"这样的关键字,当然没有找到什么直接的结果。不过这本书出版以后,情况可能就不一样了。
有一名学生写了如下的代码:
while (true)
{
if (busy)
i++;
else
}
然后她就陷入了苦苦思索:else 干什么呢?怎么才能让电脑不做事情呢?CPU 使用率为0 的时候,到底是什么东西在用CPU?另一名学生花了很多时间构想如何“深入内核,以控制CPU 占用率”——可是事情真的有这么复杂么?
MSRA TTG(Microsoft Research Asia, Technology Transfer Group)的一些实习生写了各种解法,他们写的简单程序可以达到如图1-1 所示的效果。
看来这并不是不可能完成的任务。让我们仔细地回想一下写程序时曾经碰到的问题,如果我们不小心写了一个死循环,CPU 占用率就会跳到最高,并且一直保持100%。我们也可
以打开任务管理器2,实际观测一下它是怎样变动的。凭肉眼观察,它大约是1 秒钟更新一次。一般情况下,CPU 使用率会很低。但是,当用户运行一个程序,执行一些复杂操作的时候,CPU 的使用率会急剧升高。当用户晃动鼠标时,CPU 的使用率也有小幅度的变化。
那当任务管理器报告 CPU 使用率为0 的时候,谁在使用CPU 呢?通过任务管理器的“进程(Process)”一栏可以看到,System Idle Process 占用了CPU 空闲的时间——这时候大家该回忆起在“操作系统原理”这门课上学到的一些知识了吧。系统中有那么多进程,它们什么时候能“闲下来”呢?答案很简单,这些程序或者在等待用户的输入,或者在等待某些事件的发生(WaitForSingleObject()),或者进入休眠状态(通过Sleep()来实现)。
在任务管理器的一个刷新周期内,CPU 忙(执行应用程序)的时间和刷新周期总时间的比率,就是CPU 的占用率,也就是说,任务管理器中显示的是每个刷新周期内CPU 占用率的统计平均值。因此,我们写一个程序,让它在任务管理器的刷新期间内一会儿忙,一会儿闲,然后通过调节忙/闲的比例,就可以控制任务管理器中显示的CPU 占用率。
【解法一】简单的解法
步骤1 要操纵CPU 的usage 曲线,就需要使CPU 在一段时间内(根据TaskManager 的采样率)跑busy 和idle 两个不同的loop,从而通过不同的时间比例,来获得调节 CPU Usage 的效果。
步骤2 Busy loop 可以通过执行空循环来实现,idle 可以通过Sleep()来实现。
问题的关键在于如何控制两个 loop 的时间,方法有二:
Sleep一段时间,然后以for循环n次,估算n的值。
那么对于一个空循环 for(i = 0; i < n; i++);又该如何来估算这个最合适的n 值呢? 我们都知道CPU 执行的是机器指令,而最接近于机器指令的语言是汇编语言,所以我们可以先把这个空循环简单地写成如下汇编代码后再进行分析: loop: mov dx i ;将i置入dx寄存器 inc dx ;将dx寄存器加1 mov i dx ; ............ 书籍插图:
书籍《编程之美——微软技术面试心得》 - 插图1
书籍《编程之美——微软技术面试心得》 - 插图2

以上为书籍内容预览,如需阅读全文内容请下载EPUB源文件,祝您阅读愉快。

版权声明:书云(openelib.org)是世界上最大的在线非盈利图书馆之一,致力于让每个人都能便捷地了解我们的文明。我们尊重著作者的知识产权,如您认为书云侵犯了您的合法权益,请参考版权保护声明,通过邮件openelib@outlook.com联系我们,我们将及时处理您的合理请求。 数研咨询 流芳阁 研报之家 AI应用导航 研报之家
书云 Open E-Library » 编程之美——微软技术面试心得 - (EPUB全文下载)