查找(特别是二分查找)和排序(快速排序和归并排序)是面试中经常考查的算法。
回溯法很适合解决迷宫及类似的问题。
如果面试官是求一个问题的最优解,可以尝试使用动态规划,假如我们在用动态规划分析问题时发现每一步都存在一个能得到最优解的选择,那么可以尝试使用贪婪算法。
还需掌握分析时间复杂度的方法,理解即使同一种思路,基于循环和递归的不同实现,时间复杂度大不相同,很多时候我们会自上而下的递归思路分析问题,却会基于自下而上的循环实现代码。
位运算是针对二进制数字的运算规律。
代码规范分为三点:
1、清晰的书写
2、清新的布局(清晰的思路)
3、合理的命名
代码的完整:
1、功能测试
2、边界测试
3、负面测试
写代码时,尽量用完整的英文单词组合命名变量和函数。
三种错误设置方法:
1、依靠返回值
优点:和系统API一致
缺点:不能方便的使用计算结果
2、依靠全局变量
优点:能够方便的使用计算结果
缺点:用户可能会忘记检查全局变量
3、抛出异常
优点:可以为不同的出错原因定义不同的异常类型,逻辑清晰明了
缺点:有些语言不支持异常,抛出异常时会对性能有负面影响(抛出异常时对性能有负面影响)
递归的优缺点:
优点:简洁
缺点:
1、由于是调用自身,而函数调用是有时间和空间的消耗的:每一次函数调用,都需要在内存栈中分配空间以保存参数、返回地址及临时变量,而且往栈里压入数据和弹出数据都需要时间。
2、递归中很多计算都是重复的,从而对性能带来很大的负面影响。
3、递归可能会引发更严重的问题,调用栈溢出。由于需要为每一次函数调用在内存栈中分配空间,而每个进程栈的容量是有限的。当递归调用层级太多时,就会超出栈的容量,从而导致调用栈溢出。