1. 关于深度优先、广度优先遍历算法及非递归实现的特点
这道题我索性将深度优先和广度优先便利算法都写出来,然后简单说明了一下其非递归实现的特点,就是需要一个堆栈或队列,辅助空间较大等。
2. 一道程序改错题,可能存在错误,也可能存在安全隐患。
这道题一般对C/C++熟悉的同学都会做,就是一些关于指针的指针传递,也有一些数组越界的问题,不难。
3. 一台计算机有1KB内存和1MHZ的处理器,能在该机上运行且确定性终止的所有程序中,最长的运行时间是多少,要求写出推理过程,可作出任意假设。
我假设该机是但用户单任务操作系统,实地址模式,运行的程序就是在不断不重复地更改内存状态,程序结束的终止状态为内存的某一确切状态,定义为终止态。于是推理过程如下:
1KB的内存共有状态:2^(1024*8) 种
1MHZ的处理器每一秒钟可以更改内存状态的次数为: 10^6 次
因此,如果一个应用程序,从某个状态出发,遍历了所有的中间状态,最终到大终止态后结束,经历的这段时间即为程序运行的最长时间。为:
(2^(1024*8)-1)/10^6 秒
4. 关于编译依赖的问题,大意是一个项目中存在诸多组件,某些组件的编译需要以另外一些组件的编译为前提,问怎样找出一个合理顺序,使得所有组件能够顺利编译。
该题其实是拓补排序问题,详见清华大学出版的严蔚敏编著的《数据结构》一书。我以一个确切的例子,绘出了一些图形和数据结构,然后以文字形式表述了算法。
5. 编程题。要求在一个字符串中找出最长的数字串,如“fafdahruqa12343fa43faf56454354fas”,你需要找出“56454354”即可。
该题很简单,可以直接写出可以运行的代码。
6. 关于URL的系统设计问题,一个URL分为站点和路径两部分,除此之外还需要维护一些定长的属性和不定长的属性,定长属性如URL被发现的时间,不定长属性如URL的描述文字。要求设计一个系统,可以存储和维护100亿条URL及其属性,支持添加,更新和删除URL,能判定一个站点是否在系统中,如果在,需要给出信息,一个站点可能有多个路径,如果给出一个站点,支持给出站点下所有的路径。