上一篇讲到了如何写面试中的代码呢?为什么不在上一篇写呢?上一篇写的太多了,你看了多了肯定就会晕死了,有一个思考的疲劳了,考虑到了这一点。呵呵!好了,开始吧,如何写出好的面试代码!来吧!一下都是个人观点,仅供参考!如有错误,不符合,或者有偏差,请提出,也让我有提高,好了,伙计,开始吧,有点话多了!
写程序,写代码,是在面试中必不可少的环节,你要拿题,上机写出代码,好了,你可能不知道其中有多少的“猫腻”,是吧,伙计。别人我读不告诉他。
一:你要读懂题,懂得题意,要让你实现什么功能,看看题目的要求。
二:如果是算法题,在脑海中想算法的思想,在纸上写出伪代码,一般公司的面试算法题,无非就是那几道,没有更深的,当然了,我说的是一般的公司(不包括 google , microsoft 等),你可以在纸上走一遍算法,什么叫走一遍算法,就是对算法,举一个例子,用例子来验证你的算法。
三:非算法题,就是让你实现某些功能,这些都是题一般都是考你对数据结构的了解和掌握程度。
四:在写代码时,一定要注意代码的细节问题。让自己写的代码脱颖而出,是的,我也这么想的。代码的健壮性和安全性,是你不得不去考虑的问题,有的时候两者不能兼得,那就要考虑一个中间的方法了。
五:面试中的上机写代码题一般都是很简单的,不会很难的,这个你懂得。
好了,下面我就从几个实例来说明如何写面试中的代码:
例题一:
一个链表的操作,注意代码的健壮和安全性。要求:
( 1 )增加一个元素;
( 2 )获得头元素;
( 3 )弹出头元素(获得值并删除)。
好了,读题!题目很简单了,如何实现了,是的,只有三个功能,这在面试题中,已经是要求较多的了。
首先,是链表,不要告诉我,你说你看成数组了,那只能说那一个上帝蒙住了你的双眼。
再看看要求,题目特别要求,注意代码的健壮性和安全性。是的,你看到了吗?
还有呢?是的,没了,就只有三个功能了,很简单的功能。
好了,伙计,来吧,让我们完成这道题吧!
现在,题目在我的心中,代码似乎有了雏形,我使劲回忆着自己写的代码,关于链表操作的代码,如果你想看看我写的链表操作的代码,我有这么一篇博文的。去看看吧,或许,不错(其实,那是一篇和糟糕的博文,为什么这么说,因为很多的细节没有注意到,只是实现了某些基本的功能和操作而已)。是的,我想起来了,链表,一个节点挨着一个节点的,节点由两部分组成,数据域和指针域,是吧,我没有操作,还有什么?一个类,一个对链表操作的封装的类。好了雏形有了。
是的,上面的这中方法看起来不错,是的,自己来实现每一行代码。何不去想想别的方法,比如有现成的类库来实现,是的,伙计,你应该想到的。题目很清楚的说了,没有不允许你用现成的类库来实现, C++ 的标准类库,标准类库的健壮性和安全性,你不应该去怀疑的,好了,既然他没有说,那就用类库来实现吧, STL ,不错的选择,安全性有点,但是,至少比你自己写的好多了。来吧,已经说了这么多了。
#include <iostream> #include <list> #include <algorithm> using namespace std; int main() { list<int> iList; //为什么是整形的,因为我喜欢它 int iElement; //你要插入元素 int iHead; //头元素 cin>>iElement; iList.push_back(iElement); //是的,第一个功能完成了,就是这么简单 iHead = *iList.begin(); //这是第二个功能 cout<<iHead<<endl; iList.erase(iList.begin()); }
以上是用 STL 库来实现的,如果需要自己完全实现的话,代码可能就不只是这么点了,如果你对第一种方法感兴趣,我有一篇关于链表的操作的博文,不妨看看!
其实,如果真正的来分析这道题得意思,到底用什么来实现好呢?出题人想让你用什么来实现呢?其实,这个也说不清楚,真的不好琢磨的。用自己完全实现的方法来做这道题,考察基本功的扎实程度,用 STL 来实现,考察你对 STL 类库的基本掌握情况。以我个人的话来说,我会将二者都写上,为什么,因为 STL 实现起来很简单,不会浪费什么时间。而完全自己实现链表的操作,则能展示自己的扎实的基本功,这样是很不错的,如果你怕画蛇添足,选择你最稳的方法来实现,但是,话又说回来,如果对链表的操作基本功都不过关, STL 更是一塌糊涂的。
例题二:
编写 my_strcpy 函数,实现与库函数 strcpy 类似的功能,不能使用任何库函数;
好了,这道题,很明显,不能使用任何的库函数。 Strcpy 的功能你不知道的话,我只能说,其实你已经可以放弃这次面试了。不是吗?像这种实现某个特定类库中函数的功能是面试中的常客,大家需要多多的练手的。此时,你对于此题,需要知道什么? strcpy 的函数原型,参数是什么,返回值类型。
#include <iostream> #include <assert.h> using namespace std; char *my_strcpy(char *strdest, char *strsrc); int main() { char *strsrc = "GuoDong Young"; char strdest[50] = ""; cout<<my_strcpy(strdest, strsrc); } char *my_strcpy(char *strdest, char *strsrc) { assert(strdest != NULL && strsrc != NULL); char *address = strdest; for (; *strsrc != '/0'; strsrc++, strdest++) { *strdest = *strsrc; } *strdest = '/0'; return address; }
好了,面试中还是靠自己的能力水平了,读懂题意,注意细节,该判断变量的合法性就要判断。一定要让自己的程序好看又实用了。
注:文中内容仅为个人观点,代码如有错误,或者不妥,请大家提出,因为我也是菜鸟,还没有到达写出完美代码的时候。如果大家有好的方法,希望大家能共享你的代码,我们共同交流!