代码的规范程度
代码的书写规范程度会影响面试考官阅读代码的兴致,从下图可看出,书写、布局和命名规则都决定着代码的规范性。
首先,规范的代码书写清晰。绝大部分面试都要求应聘者在白纸或者白板上书写。不要因为担心没时间写代码就在纸上写潦草或者简略。通常面试代码量不会超过50行,所以关键是在写代码前形成一个清晰的思路,并能把它用某种语言清楚的写出来。
其次,规范的书写布局。由于我们平时用的是各种编程软件如VS。它里面已经加入合理的缩进和括号对齐等使代码清晰的功能。但在面试时,可能是文本编写,这时候就得格外注意布局问题。当循环、判断较多,逻辑复杂时,缩进的层次可能会较多,就更得注意,给面试官留下一个好印象。
最后,规范的代码命名合理。应尽量避免简单变量命名,如i,j,k等。建议我们写代码时,用完整的英文单词组合命名变量和函数。比如函数需要传入一个二叉树的根结点作为参数,则可命名为:BinaryTreeNode* 。pRoot,
代码的完整性
功能测试
边界测试
负面测试3个方面设计测试用例
错误处理
三种错误处理方法的比较
重点论述一下第三种方法:当函数运行出错,我们可以抛出一个异常,根据不同的出错原因定义不同的异常类型。方便函数调用者根据异常类型就能知道出错原因。另外,利用try和cache模块来显示划分程序正常运行的代码块使代码逻辑较清晰。
正题
题目:实现函数 double Power(double base, int exponent),求base的exponent次方,不得使用库函数,同时不需要考虑大数问题。
分析:题目简单,但是面试时,能写完整并且让考官满意的人寥寥无几啊。
方法1:
正常人都会想到的方法。
1.double Power(double base, int exponent)
2.{
3. double result = 1.0;
4. for ( int i = 1; i <= exponent; i++ )
5. {
6. result *= base;
7. }
8. return result;
9.}
如果你很快写出这样的代码,那你肯定被刷。
首先:边界情况处理。指数是负数时该如何处理。
其次:这样做效率较低,要循环指数次。
上述两点,估计你当时没有想过为什么会出这么简单的面试题。
方法2:
考虑了边界情况,且有异常处理,较完整。
1.bool g_InvalidInput = false;
2.
3.bool IsEqual(double num1, double num2)
4.{
5. if ( (num1 - num2 > -0.000001)
6. && (num1 - num2 < 0.000001))
7. {
8. return true;
9. }
10. else
11. return false;
12.}
13.
14.double PowerWithUnsignedExponent(double base, unsigned int exponent)
15.{
16. double result = 1.0;
17. for (int i = 0; i < exponent; i++ )
18. {
19. result *= base;
20. }
21. return result;
22.}
23.
24.double Power(double base, int exponent)
25.{
26. g_InvalidInput = false;
27.
28. if ( IsEqual(base,0.0) && exponent < 0 )
29. {
30. g_InvalidInput = true;
31. return 0.0;
32. }
33.
34. unsigned int absExponent = (unsigned int)(exponent);
35. if ( exponent < 0 )
36. {
37. absExponent = (unsigned int)(-exponent);
38. }
39.
40. double result = PowerWithUnsignedExponent(base, absExponent);
41. if ( exponent < 0)
42. {
43. result = 1.0/result;
44. }
45.
46. return result;
47.}
方法3:
对方法2中的PowerWithUnsignedExponent()函数进行了优化-位运算,能使考官眼前一亮。
1.double PowerWithUnsignedExponent(double base, unsigned int exponent)
2.{
3. if ( exponent == 0 )
4. return 1;
5.
6. if ( exponent == 1 )
7. return base;
8.
9. double result = PowerWithUnsignedExponent(base, exponent>>1);
10. result *= result;
11. if ( exponent & 0x01 == 1 )
12. result *= base;
13.
14. return result;
15.}
总结:
平时想问题,多想想,尽量能够全面
细节决定成败,很关键。