您的位置:首页 > 职场人生

面试—每日一题(7)

2011-03-28 14:04 211 查看
上一篇讲到了如何写面试中的代码呢?为什么不在上一篇写呢?上一篇写的太多了,你看了多了肯定就会晕死了,有一个思考的疲劳了,考虑到了这一点。呵呵!好了,开始吧,如何写出好的面试代码!来吧!一下都是个人观点,仅供参考!如有错误,不符合,或者有偏差,请提出,也让我有提高,好了,伙计,开始吧,有点话多了!

写程序,写代码,是在面试中必不可少的环节,你要拿题,上机写出代码,好了,你可能不知道其中有多少的“猫腻”,是吧,伙计。别人我读不告诉他。

一:你要读懂题,懂得题意,要让你实现什么功能,看看题目的要求。

二:如果是算法题,在脑海中想算法的思想,在纸上写出伪代码,一般公司的面试算法题,无非就是那几道,没有更深的,当然了,我说的是一般的公司(不包括
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;
}


好了,面试中还是靠自己的能力水平了,读懂题意,注意细节,该判断变量的合法性就要判断。一定要让自己的程序好看又实用了。

注:文中内容仅为个人观点,代码如有错误,或者不妥,请大家提出,因为我也是菜鸟,还没有到达写出完美代码的时候。如果大家有好的方法,希望大家能共享你的代码,我们共同交流!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: