面试编程
最近忙于找工作,看完了《剑指offer》这本书,深入思考其中的问题,感觉自己收获颇丰。回想自己的几次面试,总结经验和教训供大家思考。
面试前准备
面试时一个很累的过程,在准备面试-面试-准备面试的过程中,一定要合理的规划好作息和营养膳食。如果是电话面试的话,要保证手机电量充足,随时准备好要来的面试。
编程准备
在面试时面试官会问一些算法问题,通过共享文档,白板写代码方式考察应聘者的编程能力。因此,在这之前,要多做一些算法题,比如剑指offer,leetcode,牛客网上面的专题等上面的算法题,让自己保持编程状态,很好的应对随之而来的面试。笔者就因为不再状态而犯了几次错误,现在想想还是非常的后悔。
题目类型
数组和字符串
数组和字符串的概念比较简单。好处就是访问快,O(1)时间,但是删除和插入操作就比较麻烦。vector是数组的一个很好的实现。虽然概念简单,但是如果在数组上做文章,可以有各种类型的题目。比如排序,查找,反转等等。有几点技巧:
- 是否有序,如果有序,可能会用到二分查找算法。
- 用双指针解决数组问题。此时需注意指针的初始位置,移动方向,移动速度。
字符串的题目和数组很想。稍微一点区别就是字符串的结尾是’\0’。如果字符串是char*表示,第一步一定是判断指针是否为空。数组如果变成多维,处理起来就比较麻烦,此时,要冷静分析题目的特性,解决问题,必要时可以画图找思路。
链表
因为链表涉及到指针,所以编写链表出问题的概率大很多。同时,链表长度一般都是未知,所以少不了对链表的便利。对链表的指针进行修改时,一般都要一个临时变量指向链表断开的地方,不然整个链表就出问题了。但是,只要小心谨慎,一般的链表程序也不会出错。
二叉树
二叉树可以看成链表的升级,又多了一个指针,所以让结构更加复杂。二叉树是面试时常考的题目,所以一定要烂熟于心。我觉得二叉树最重要的就是三种遍历方法:前序,中序和后序。一定要牢记顺序并能够编程实现。二叉树的算法基本都是在遍历的基础上实现的。比如说二叉搜索树的中序遍历结果就是一个有序数组。关于二叉树的题目很多,多加练习就可以掌握好遍历方法了。
查找和排序
查找和搜索可以看成对算法的考察了。但是,一般有难度的就三个:
- 二分查找以及二分查找的变形
- 快速排序
- 归并排序
这三个算法一定要做到闭着眼都能写出来,许多面试题都是围绕这三个算法做文章。
搜索
常用到的搜索就是深度优先搜索(dfs)和广度优先搜索(bfs),它们可以实现遍历树,图等结构。bfs一般用于求最优解。进行搜索时要牢记结束条件,以及算法逻辑放在哪。因为嵌套很深,搜索的题目一般无法调试,所以要保证自己的程序不出错只有多加练习。
其它
其它题目就是无法归类的。这时候一般就是考你的思维能力了。遇到这些题目不要慌,可以试着举例,画图等手段试着解决。这种题目没有固定的解法,但是思维经过训练的人可以更快的找到问题的解法。
做题方法
做题时,首先要正确的理解好题目,保证题目没有理解错误,可以试着自己举几个例子。第二,对问题鲁棒性思考,如指针为空,数据量大小以及一些异常情况。然后,开始考虑测试用例,包括正常的,边界测试等。想清楚这些,才能更好的编程,不然直接就去编程,很容易出错误,所以,谨记:想好测试,再做编程。最后,推销一下我的leetcode题解。