保持思维的灵活和变通,在解决问题时尝试通过多个角度、多种方法来完成,这样在条件受限时就不至于束手无策而是可以通过类比举一反三来寻找可能的方法。
面试中有许多隐性考察的能力,沟通和学习的能力往往是相互交织的。知识迁移的能力则是把已经掌握的知识和举一反三应用到新的场景和问题上。
由于内存成本的下降,现代计算机往往配有充足的内存,所以在处理通常问题时我们更愿意用空间换时间(嵌入式开发和处理海量数据等场景除外)。本节虽然说的时时空平衡,但显然更倾向于优化时间,当然和面试官探讨时空权衡的问题总是好的。
面试的时候要展现敏捷的思维能力和追求完美的激情,第一时间告诉面试官最直观的想法能体现出思维的敏捷,同时在寻找更优的办法的路上也不能轻言退缩,要有解决问题的态度和激情。
鲁棒性要求程序对特殊的、错误的输入能作出适当的处理。防御性编程是一种好的编程习惯,在看到问题时,要多问几个“如果不……那么会怎么样”,而链表相关的问题总有大量的指针操作,往往是容易出错的。
其他章节的代码段中,限于篇幅没有强调代码的完整性。但一个深刻教训是,面试编程时千万不要只考虑基本情况就开始动手,要提前和面试官沟通好基本情况、边界情况以及错误输入。测试用例也自己先写好,尽量不要等到面试官给出用例后发现有问题再去补救。