性能的题目大多是涉及封底估算的。对于性能的风险,最初选择方案是就要做出一个评估,不然后期会带来很多麻烦,当然最初的估算不要求面面俱到,十分精确。但是需要有数字出来,而不是“我觉得应该不会有问题”之类的答案。估算主要集中在资源的占用,时间复杂度,数据增长对于性能的影响。估算不仅对于选择合适的算法和数据结构有帮助,而且对于选择硬件也会有影响,比如内存,网络带宽等等。
作性能调整时需要注意的一点时,要用数据为依据,分析哪一个环节最值得去突破,而不是仅仅靠猜想,所以profiler工具是需要的,如果程序中用到层超类型,gateway之类的,数据收集会方便一点。
对于第一题, 有些公交车的刷卡设备是会显示一天的刷卡总额的,可以作为验证估算结果的参考。几个算法题目在给出方案时应该也估算一下方案的时间复杂度和空间复杂度。电话号码的题目当然最好是线性扫描一次后就给出排序结果,可以利用电话号码本身的特性。变位词问题一个关键的地方是如如何判断两个词是变位词,对单词进行合适的编码有助于变位词的判断。求整数数组连续区间的和的最大值的题目最好是遍历一次就能把结果找出来,会用到性能优化的一个原则:利用已有计算结果。这几个问题在《编程珠玑》中有详细的讨论。
sql题目和性能没太大关系,主要是说明对索引列操作性能不一定就一定好。viewstate的问题需要注意两个方面:估算对存储空间的要求和viewstate信息丢失的处理。
编写正确的程序中的1,2题中涉及怎样处理错误,第3题中所列的都是可能发生的。一个月至少28天这一个有点抬杠的味道,这和现有历法施行的第一个月有关。第4提是讲要根据行为来确定继承关系,而不是属性。第6题只要去想就会想出很多简单方法,有一点要注意,不一定要procedure的文档,测试代码和procedure写在一起。
团队的问题仁者见仁,智者见智。发布的几个问题曾经是我们的面试题目,总之自动化是根本。还有一点,顺利的发布除了技术因素之外,还有一些非技术因素,比如备份,与用户的沟通等等。