1.面试始末 大抵在年前我接到了瑞晟(Realtek)姑苏公司的面试公告,公告我2月21日到姑苏工业园区面试,接到面试后的几天我把少少专长课复习了一遍,特别是C++和数据布局,因为大学几年里,我不停专研这些方面,加上议决了高等程序员的测验,对付少少常用的算法我差不多也 到达了纯熟于胸的地步,当时的感想是倘使问了我这些方面的题目我应当是没有题目的! 21日那天我被策画在4:30面试,由一位技术人员零丁给我面试,在四人麻将小游戏问了少少粗略的题目之后 ,他给我出了一道编程题目,题目是这样的: (因为实在面试的题目对比啰嗦,我将其重心脑筋提掏出来分解成……(乱码) 1) 写一个函数估计打算当参数为n(n很大)时的值 1-2+3-4+5-6+7......+n 哼,我的内心冷笑一声!没料到这么粗略,我有点紧急的心情即刻放松起来! 因此很快我给出我的解法: long fn(long n) { long temp=0; int i,flag=1; if(n{ printf("error: n must > 0); exit(1); } for(i=1;i{ temp=temp+flag*i; flag=(-1)*flag; } return temp; } 搞定!当我用愿望的眼光看着面试官的时刻,他含笑着跟我说,执行后来必定是没有题目! 但当n很大的时刻我这个圭表执行成就很低,在嵌入式编制的开辟中,圭表的运行成就很要紧 ,能让CPU少执行一条指令都是好的,他让我看看这个圭表再有什么可以删改的场地,把圭表 优化一下!听了这些话,我的神气其时变的有点沉重,没料到他的请求很严厉,之后我对圭表 举办了严厉的剖析,给出了鼎新了的打算! long fn(long n) { long temp=0; int j=1,i=1,flag=1; if(n{ printf("error: n must > 0); exit(1); } while(j{ temp=temp+i; i=-i; i>0?i++:i--; j++; } return temp; } 尽管我不敢担保我这个算法是最优的,不过比起上一个圭表,我将一切涉及到乘法指令的语 句改为执行加法指令,既达到要题方向请求并且运算时间上缩短了很多!而价值仅仅是增补了 一个整型变量!不过我目前的决心已继承了一点回手,我半信半疑的看者面试官,他依旧含笑 着跟我说:“不错,这个圭表确确实成就上有了很大的升高!”我内心一阵暗喜!但他接着说这个圭表依旧不可以达到他的请求,要我给出更优的打算!天啊!再有优化!我其时果真有点崩 溃了,想了一会后,我乞求他给出他的打算!然后他很爽气爽直的给出了他的圭表! long fn(long n) { if(n{ printf("error: n must > 0); exit(1); } if(0==n%2) return (n/2)*(-1); else return (n/2)*(-1)+n; } long result( long n ){return -((n-1)>>1)+n;} 因为我看它是1-2+3-4 ... +n,这边是个+n,所以就认为必定是奇数项了, 其它我没有考虑到n 其它增补一下:当你必要乘以除以2的时刻,可以用>来代替。 搞笑,其时我木鸡之呆,没料到他是这个兴趣,这么简略单纯的代码我果真不会写吗,不过我为 什么没有往那方面上想呢!他说的没有错,在n很大很大的时刻这三个圭表运行时间的不同简 直是天壤之别!当我刚想启齿说点什么的时刻,他却先启齿了:“不要认为CPU运算速度快就 把一切的题目都推给它去做,圭表员该当将代码优化再优化,我们自己能做的决不要让CPU做 ,因为CPU是为用户服务的,不是为我们圭表员服务的!”多么简练的语言,我已经不想再说 什么了!接着是第二个题目: 他请求我用一种手段性的编程办法来用一个函数竣工两个函数的功能n为如: fn1(n)=n/2!+n/3!+n/4!+n/5!+n/6! fn2(n)=n/5!+n/6!+n/7!+n/8!+n/9! 目前用一个函三国麻将风云小游戏数fn(int n,int flag)竣工,当flag为0时 ,竣工fn1功能,假使flag为1时竣工fn2功能!他的请求依旧成就,成就,成就!说确实话, 假使我神气好的话我该当能给出一种对比好的算法,但我其时果真没有什么心情再想了,我在纸上胡乱画了少少诸如6!=6*5!的公式后直言不讳的跟他说要他给出他的谜底!面试官也没有 说什么,给出了他的思绪: 定义一个二维数组 float t[2][5]存入[2!,3!,4!,5!,6!},{5! ,6! ,7!,8!,9!]然后给出一个轮回: for(i=0;i{ temp=temp+n/t[flag][i]; } // 确实很高明。。 最终获得估计打算值!呵呵,类型的空间换时间的算法!这些全部花了50分钟的时间,再有特殊钟我就跟他很随便的聊聊天,聊了少少编程以及生活 的题目,那时的我已经很放松了,因为我明白这回面试结尾只有一个:失败。5:30的时刻面试官要我等通知,因而我离开了他们公司。这就是面试的悉数通过! (转载请注明出处:http://www.aq78.com/mingxingsanqueyi/20100705/41.html) |