被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 大小的,高位想加再加进位。
它不满意。。。笑着说你回去实现下试试吧。。。
然后我知道挂了。。。也没啥别的问题,说了一堆废话就走了。。。真心不懂啊。。。学的太烂了。。。
太晚了,明天再写,,,