igt system pa 实习面试

来源:互联网 发布:淘宝网1566735 编辑:程序博客网 时间:2024/05/07 04:42

被igt血虐,这些东西我真不知道答案,求知道的告诉告诉我:

今天去面试,进去了先做笔试题,题目不难,一些基本的,tcpudp协议区别,分层模型,strcpy实现,特大数据组,取第十大的

笔试完了进去面试,英文自我介绍,说一个最熟悉的项目。

之后,悲剧开始了:


1:问题,你写的strcpy有什么问题?写一个测试用例,怎么设计测试用例?

我写的strcpy:

char * strcpy(char* des,const char* src){if(des==null||src=null) throw "invalid argument";char* strdes = des;while((des++=src++)!='\0');return strcpy;

测试用例,输入,简单些一下,两个字符串分别是:

a:null b:null

a:null b:'abc'

a 'ab' b 'abc'

a'abc' b'ab'

总之就是这几类的,面试官说,不行,有问题,再想

后来提示说参数万一特别大怎么办?为什么要返回char*?

我不知道什么叫参数特别大,,,特别大复制啊会溢出嘛?


2:怎么确定某程序读写,瓶颈在硬盘上还是cpu或者内存上。

控制变量我想的是,让他们除了这个一样。这个上过学的都知道。。。具体的没做过所以不太会

提示,通过操作系统的过程去想,问操作系统怎么和硬件接触?

答:通过系统调用以及驱动程序的接口

问:对,再想.

答:不知道

答案,有一个system counter 之类的东西一直在记录这个。

这个真的不知道。。。


3:一个特大的数组,找出其中第十大的数

答:装入内存,不能装入那就分片,之后建堆,扔掉前9个堆顶。

问:如何扔掉?

答:可以把队顶随便找一个叶节点赋值之后调整堆。

问:如何分片?

答:按内存能的量

问:怎么知道第十大的在哪一个片里?

答:肯定不能直接判断出来,分片之后分别建堆,之后因为堆顶是该片最大,可以先取两层,片间比较,可以一定程度上减少次数。

问:堆是什么数据结构本质上?

答:(我懵了,堆本质不就是二叉树,父节点大于子节点的)说了之后它不满意

问:堆是排序二叉树

我囧。。。。

之后反正这个答案不满意。。。


4:简单的,两数相加,考虑所有情况,写测试用例

答,首先是重载不同方法,因为确定了是数字,所以无非几种类型,检测非法输入,数字太大什么的

问:(很明显这时候他不满意)

如何重载?数字太大了怎么办?

我:重载long double int 之类的,太大了截取,非法输入报错返回

问:(他的意思不让我返回错误,一定要加出来个东西,之后说如果比double还大怎么办,我也不知道,因为他要返回而不是输出,其实没有变量可以承接我觉得,又不能返回两个值,输出的话我想用字符串去分段加)

它说我没考虑到的有,在32位64位机器上的问题,这个之前的strcpy也有。(我不知道c语言怎么判断机器,只知道汇编的有这么个东西,具体忘记了)

后来他说输入两个字符串加怎么加,我说检测非法字符先,进制转换等等,字符串拆分之后加,拆成int 大小的,高位想加再加进位。

它不满意。。。笑着说你回去实现下试试吧。。。

然后我知道挂了。。。也没啥别的问题,说了一堆废话就走了。。。真心不懂啊。。。学的太烂了。。。

太晚了,明天再写,,,

1 0
原创粉丝点击