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<=0)
{
printf("error: n must > 0);
exit(1);
}
for(i=1;i<=n;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<=0)
{
printf("error: n must > 0);
exit(1);
}
while(j<=n)
{
temp=temp+i;
i=-i;
i>0?i++:i--;
j++;
}
return temp;
}
虽然我不敢保证我这个算法是最优的,但是比起上一个程序,我将所有涉及到乘法指令的语
句改为执行加法指令,既达到要题目的要求而且运算时间上缩短了很多!而代价仅仅是增加了
一个整型变量!但是我现在的信心已经受了一点打击,我将信将疑的看者面试官,他还是微笑
着跟我说:“不错,这个程序确实在效率上有了很大的提高!”我心里一阵暗喜!但他接着说这个程序仍然不能达到他的要求,要我给出更优的方案!天啊!还有优
化!我当时真的有点崩 溃了,想了一会后,我请求他给出他的方案!然后他很爽快的给出了他的程序!
long fn(long n)
{
if(n<=0)
{
printf("error: n must > 0);
exit(1);
}
if(0==n%2)
return (n/2)*(-1);
else
return (n/2)*(-1)+n;
}
搞笑,当时我目瞪口呆,没想到他是这个意思,这么简单的代码我真的不会写吗,但是我为
什么没有往那方面上想呢!他说的没有错,在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<6;i++)
{
temp=temp+n/t[flag][i];
}
最后得到计算值!呵呵,典型的空间换时间的算法!
这些总共花了50分钟的时间,还有十分钟我就跟他很随意的聊聊天,聊了一些编程以及生活 的问题,那时的我已经很放松了,因为我知道这次面试结果只有一个:失败。5:30的时候面试官要我等通知,于是我离开了他们公司。这就是面试的整个经过!
2.由面试想到的
真的是很失败啊!我记得那天下好大的雨,气温也很低,我边走边想,从5:30一直走到7:30
,全身都湿透了,又冷又饿,但是我只是一直走,脑子里面充满了疑惑,我也想让雨把自己淋
醒!看到这里有些朋友可能觉得那些面试题目不算什么如果让自己做的话肯定能全部答对,我
肯定相信你,因为我从未怀疑过中国程序员的能力,我认为中国有世界上最好的程序员,我也
从未认为自己是高手,所以我做不出来不代表中国程序员比台湾或者别的地方的程序员差,所以我就从我的角度,我的所见所想来谈一些感想:
不错全世界都有优秀的程序员,中国也不例外,但是我疑惑的是:到底中国和台湾或者国外
的优秀的程序员的比例到底是多少?台湾我不知道,中国100个程序员里有几个是优秀的呢?我
根本算不上,从上面的表现就足以说明一切了!是1个?5个?10个?50个?这个数字我不敢乱
猜,恐遭网友一顿痛骂,那么我们国内有多少人学习计算机呢?拿我们学校来说,计算机97级
4个班,98级5个班,99级10个班,2000级17个班,人多了,老师怎么办?我们学校的做法是让
研究生上课,然后呢?补考一抓一大把,大把大把的补考费落入了学校的口袋,还说现在的学生素质低!真是好笑,我都不知道学校这么做是为了什么,为国内培养
大量的程序员吗?学生 们能真正学到计算机知识吗?好了,我敢讲,在我们学校学习编程学生和优秀程序员(注意我
指的是优秀,只会编几个糟烂程序的人算不上)的比例应该是100:0.1
在这种比例下虽然我们中国学习编程的人铺天盖地,但是想想有多少个人能真正为中国软件 业发展作出贡献,有多少人能真正写出优秀的程序名扬海外!
我从学习编程以来,不管是自学还是老师指导,从来都是解决问题就好,编出程序来就行,
我的疑惑是:我们有真正的强调过程序的效率,程序的质量吗?我们有仔细分析过我们写的东
西,看看有没有可以改进的地方,看看有没有简单的方法来达到同样的目的呢?我问心自问,
我发现,我从来没有对我写出来的程序进行过优化,最多就是进行详细的测试,然后Debug, 但是这就足够了吗?
这些天我偶尔发现我曾经写过的一个游戏,那是一年做为
其中一员时候,感觉应该拿点东西出来,然后花了一个星期的时间写出来的!程序不算复杂,但是用到了不少数据结构的东西,也用到了一些精彩的算法,加上
windows的界面和游戏的可 玩性,写完后受到了不少好评,我当时真的很佩服自己!
但是现在看呢:没有一句注释,好多
丑陋的函数名比如:void chushihua(),好多没有必要的变量,可以用简单语句完成工作的我
使用华丽的算法,大量使用全局变量.....,说不好听的话,六百多行的程序除了能运行之外就是一陀屎!如果一年前我能听到一些反面意见的话,大概我能早
一点觉悟,但是自原代码在 网站发布以来听到的都是赞美之词,没有一个人向我提出程序改进的意见,这又说明了一个什 么问题呢?很值得思考啊!
还有一个疑惑是:我们说的和做的真的一样吗?我在学校的时候曾经受学院指派承办过一个
计算机大赛,请了一个老师出决赛的题目,主要是一些算法题目,这个老师可能是我上大学以
来唯一敬佩的老师了,从程序调试到打分,对于每个程序都仔细分析其时间效率和空间效率,
然后综合打分,四十个人的卷子,老师从下午三点一直调试到晚上十点,在有些写的精彩的语
句后还加上批注。我真是高兴很遇到这样的老师并且和他做深入的交流,但在事后,却发生了
一件不愉快的事,在比赛中获得第二名的学生找到我,说他程序全部调试成功应该给他满分,
并且应该得第一,我说不过他,最后调出了他的原程序和第一名的原程序对比,错,两个程
序都运行的很好,这时,那个同学开口了:“我的程序写的十分简捷明了,仅仅数行就完成了
题目要求,而他的却写了一大堆,为什么给他的分多过给我的分。”我当时很是气愤,如果不
是老师负责的话,那么现在第一名和第二名的位置真的要互调了,拜托,不是程序的行数越少
程序的质量就越高,我记得我跟他大谈这方面的道理,最后说服他了!哈哈,但是我,只能说
说而已,我不知道还有多少人一样,说起来头头是道,但心里却压根就从未重视过它!
分享到:
相关推荐
一位大四毕业生的自我总结.doc
这篇1000字的心得体会记录了一个大四学生在印刷厂的实践经验,揭示了社会实践的多重意义。 在印刷厂的工作中,学生首先接触的是设计与排版的岗位。他了解到,这个环节对于产品的视觉呈现至关重要,特别是对于塑料...
本文档"程序员内功修炼-V1.0.pdf"是一位大四学生在入职鹅厂(腾讯)前,结合自己四年学习和实践经验整理出的宝贵资料,涵盖了程序员在计算机科学领域的核心知识,主要包括数据结构与算法、操作系统以及计算机网络等...
本资源摘要信息是根据大四实训心得体会.docx文件生成的,主要讲述了作者在实习期间的体验和心得体会。 一、实习前的准备 作者刚刚到公司,接受了两天的销售培训,学习了销售技能,并初步了解了将要开始的工作。...
【实习报告】大四会计专业实习心得体会 实习是大学阶段重要的实践环节,尤其对于会计专业的学生来说,实践经验的积累能够使理论知识得以巩固并提升。在这次实习中,我深刻体验到会计工作的重要性和严谨性。 实习...
大四那年,一次偶然的机会让他接触到了一位成功企业家,这次交流深深触动了他。受到启发后,他决定放弃稳定的工作机会,开始尝试创业。尽管面临家庭的压力和未来的不确定性,但他坚信自己的选择,并投入了全部的努力...
标题和描述中提到的是关于大四学生进行法律法规学习的心得体会,文件内容聚焦于全民普法教育的重要性,以及在实施普法教育过程中存在的问题和改进的建议。此外,还提及了个人在学习法律基础过程中的体会,强调了法律...
【心得体会】 ...总的来说,大四实习是一段充实而富有挑战的经历。我从中收获了专业知识,提升了个人技能,也对教育和职业有了更深的认识。这段时光将成为我人生中宝贵的财富,伴随着我未来的职业道路。
程序员面试刷题的书哪个好 description 转载自嗨 程序员的生活 你,上海土著,家境贫寒,没房没车,普通师范本科+垃圾文科专业。大四毕业后你的同学不是考同校毛邓三专业的研究生就是去小学初中做老师、去考公务员,...
在第一篇心得体会中,作者通过在报社的实习经历,深刻体验到“纸上得来终觉浅,绝知此事要躬行”的真谛。作为新闻专业学生,她认识到理论知识与实际操作间的差距,并在实践中锻炼了自己的新闻采编能力和人际沟通技巧...
【大四校外实习心得体会】 实习是大学教育的重要环节,它为我们提供了一个将理论知识转化为实践技能的平台。在大四的校外实习过程中,我深刻体验到理论与实践之间的鸿沟,以及实习对于个人成长的重要性。 首先,...
【大四讲座心得体会】 在大学生涯的最后阶段,参加讲座是一种宝贵的自我提升方式。讲座不仅提供了专业知识,更关键的是,它教会我们如何理解和应对现实生活中的挑战。从“听高经理讲课后的心得体会”中,我们可以...
【大四学生专业实习手册】是一份为即将进入职场的大四软件工程专业学生提供实习指导的重要文献。手册的目的是确保学生能够系统性地、有目标地进行实习,从而获得宝贵的实践经验,提升专业技能,理解社会需求,明确...
通过大四学生的实习心得体会,我们可以了解到以下几个关键知识点: 1. **理论与实践的结合**:实习让学生们理解到,课堂上学到的理论知识在实际工作中的应用并不总是直接的,需要结合具体情境进行调整和应用。比如...
实习经历让大四学生深刻理解到,成为一名优秀的教师不仅需要扎实的专业知识,还需要不断学习和适应,以满足学生的需求和期望。同时,他们也感受到了教师工作的艰辛和满足感,这为他们未来的职业生涯打下了坚实的基础...
【实习报告】大四校外实习是我步入社会的重要一课,这次经历让我深刻体会到从理论到实践的跨越。在实习期间,我学到了许多书本上学不到的知识,这不仅仅是专业技能的提升,更是人生智慧的增长。 首先,实习使我认识...
程序员面试刷题的书哪个好新人求罩:在深圳的内蒙女娃子 看完你会爱我的。 (壹)自我介绍 代号: Rainie(大仙闺蜜逼着我改的英文名) 坐标:深圳(来了也没成为深圳人) 年龄: 95后的老女人(95年也要称自己为95...
本文是对大四实习报告的总结和反思。实习是大学毕业生必须拥有的宝贵经历,可以让我们在实践中了解社会,学习到许多在课堂上无法学到的知识,并打开视野,长见识,为我们以后进一步走向社会打下坚实的基础。 通过...