大公司面试智力题集锦

2024-05-02

大公司面试智力题集锦(通用5篇)

篇1:大公司面试智力题集锦

选择2元的最多,这个最容易理解,用一般的市场买卖思维理解就可以,题中某人8元买入9元卖出中间赚了1元,10元买入11元卖出又赚了1元,因此总共赚了2元;

但是,10买入和9元卖出之间,明显地有人认为是亏了1元(这也是本题的关键),因此这些人会选择总共赚了1元;

选择没赚一分钱的人,我也觉得不好理解,大概他们认为鸡的cpi=买卖的利润率,所以钱即鸡,鸡即钱,无论最终买卖多少次它都是值这个数;

赔了,作为一道选拔 人才 的面试题来看,我认为这个答案最合理,如1所讲将题中的某人分两笔交易来看总共赚了2元,而2所讲有些人明显地认为9与10之间亏了1元。

正确答案:

-2元,即亏2元。

也就是说选择“赔了”的应聘者是最接近答案的,什么是这样呢?从短线来看,做了两次交易,第一次交易8元买9元卖,赚1元,第二次交易10元买11元卖赚1元,共2元;9元到10元之间亏1元——因为股价涨到10元之后,你手头的钱不够了,你得向别人借1元,即亏1元。两次交易盈亏相抵,共赚1元(严格地说是做了三次交易,9元到10元之间做了一次亏损的交易)。

从长线来看,如果短线不折腾,长线持有可以赚3元(8元买11卖)。但由于短线折腾了两次,使得长线能赚的3元没有赚到,即亏了3元。

赚的1元和亏的3元相抵,即在一个完整的交易过程中共亏2元。

看来,宝马公司面试题也不是那么容易回答的,不知道对于这道智力面试题,你是不是答对了,其实站在招聘官角度,结合行业性质,考的是每个人对经济交易的认识,因此提醒面试者答题,勿忘参考应聘职位的基本岗位能力要求。

篇2:大公司面试智力题集锦

网上答案投票结果:

·一元 807360(19%)

·两元 1858541(45%)

·没赚一分钱 1074513(26%)

·赔了 273690(7%)

篇3:大公司的“极度面试”

到了最后一轮,她铆足了劲儿准备再做一道难题,却被考官问到:“告诉我,此刻天上有多少架飞机?”

朋友的孩子运用她认为最合理的数学模型得出了一个她认为最接近的数字。

她没有拿到那份工作。

“极度面试”

其实,考官感兴趣的不是推算结果的准确性,而是应试者的推算过程。

这类以往牛津剑桥引以为荣的脑筋急转弯“怪题”,正在越来越多的被国际一流大公司在面试时采用,被称作“极度面试”(extreme interviewing)。

英国招聘公司Glassdoor从参加公司面试的应聘者那里搜集了3.5万多个面试问题。Glassdoor提供的分析报告说,面试时,某些一流的国际大公司,除了准备常规的可能问题之外,还备有各种“刁钻古怪”、做梦也不会想到的问题。

也难怪,随着经济紧缩,就业市场竞争愈加激烈,大学毕业生供过于求,大公司自然可以挑挑拣拣,想出各类“极度”的问题难为应聘者,优中选优。

脑筋急转弯

这里随手挑几个在实际面试中使用过的问题,各位先试一试:

1-10分级,你的怪异程度是多少?

房间、书桌、汽车,你先清理哪一个?

如何将一头长颈鹿装入冰箱?

先别急着琢磨如何对付长颈鹿的长颈和长腿。其实,“极度面试”的秘密即不在问题也不在答案,而在于应聘者的反应。

《应聘:超难问题的绝佳答案》一书的作者里斯说,这类“刁钻”问题是给应聘者一个机会展示个人的机敏、应变、临危不乱和灵活多样。

考官更感兴趣的是你得出答案的过程,而不是答案的准确性,因为许多问题根本没有准确的答案。

比如上面举的三个例子,专家建议的最佳答案分别是:

10级,任何低于10 显然很怪。

清理?问我的清洁工。

至于如何将长颈鹿装入冰箱,你可以反问考官,让考官提供一些基本的事实,比如长颈鹿个头多大?多大的冰箱?可以不可以合法的杀死长颈鹿,有没有肢解的工具?

极度……无聊?

国际大公司的“极度面试”风,谷歌是始作俑者之一。“世界上有多少调琴师”?“你是更愿意做香蕉还是苹果”之类,都是著名的“谷歌问题”。

但是,谷歌不久前宣布,今后面试不再出这类“怪题”。为什么?谷歌公司人事部副主任伯克说,现在回过头来看,这些怪题纯粹是浪费时间。

伯克说:“一架客机里能装多少个高尔夫球?曼哈顿有多少个加油站?问应聘者这类问题能考察出什么?什么也考察不出来,纯粹是让考官自我感觉良好罢了。”

谷歌公司今后将注重“行为考察”的面试,也就是给出一个具体的与工作有关的场景,看应聘者如何应对。

回归传统

“极度面试”的风头依然强劲,但回归传统之风也悄然吹来。伦敦国际广告公司Saatch &Saatch2013年夏天的实习生招聘,应聘者被要求设计出自己的推特网页,看谁在规定时间内获得最多的跟随者、内容更新和转推。

美国哈佛大学早在1992年做过这样一个试验,让普通人观看一段10秒钟的面试录像。结果,看录像者与实际考官对应聘者的看法是一样的。结论:一切都在第一印象。

还有一个例子,大公司的考官和应聘者都可以借鉴。第二次世界大战时,英国皇家空军发现优秀飞行员苗子的最有效的一个问题是:你有没有制作过可以飞的飞机模型?

(编辑/唐馨)

篇4:逻辑智力50题集锦

比较-{三个灯泡}

门外三个开关分别对应室内三个灯泡,线路良好,在门外控制开关时候不能看到室内灯的情况,现在只允许进门一次,确定开关和灯的对应关系?(这个也是微软面试题,这个是脑筋急转弯类型)

----1,这是要解决:门外三个开关与室内三进盏电灯之间的对应滚系。2,拨的是开,灯就亮;拨的是关,灯就灭。这是两个开关和两盏灯的对应。3,可是,现在是三个开关和三盏灯;还有一个开关和易盏灯的对应,该怎麽办?也就是说,灯除了明暗这一属性,和开关对应以外,还有是麽其他的属性和开关有因果关系呢?往这个方面一想,就会想到:灯泡亮得久了,就会发热;那麽,就可以利用着一属性,将一个开关提前拨开,让灯泡不单是亮着,而且还发烫;另一盏灯后开,灯就只亮不烫,余下第三盏灯关着,灯就不亮。这样,三盏灯和三个开关就可以对应区分了。4,如果不想花时间等待灯泡发烫,要想速战速决;也有简单的办法,那就是一灯拨开灯亮;另一灯拨关灯不亮;第三盏灯连续拨动开关,灯就忽亮忽暗;这也可以将三灯和开关对应区别开来。-----解题思路,是从属性的差异变化,比较求异而得到的区分。

可能**{蒙特门难题} 本智力题得名于一位美国电视游戏节目的主持人蒙特,他曾在多年之前主持一档档名为成交的节目。在其中的一个游戏中,Monty向竞猜者展示了三扇门。有一扇门之后是一辆小轿车。另两扇门之后是空房间。蒙特事先知道门后是什么,但您并不知道。

游戏分为三步:

1.您选择一扇门。

2.蒙特将会打开剩余的两扇门中的一扇,展示一个空的房间。(他从不会打开那扇后面藏有汽车的。)

3.然后,您可以选择是仍然选择在步骤1中选择的那扇门,还是选择去打开另一扇仍然关闭的。

假定您选择了A门。然后蒙特打开了另两扇门中的一扇,假定为B门。现在您可以选择改选C门或者仍然坚持最初的选择,即A门。如果没有改变选择,那么可能会猜对也可能会猜错。另一方面,如果您改选C门,则还是既可能猜对也可能猜错。您会做出什么选择呢?在蒙特打开一扇门之后,是坚持最初的选择,还是改变前面已做的选择呢?为什么呢?

-----当你在三扇门中选则了A门,可能猜到里面有轿车的几率是1/3,即33%;当主持人打开了三扇门中的一扇门是个空房,让你再次选择时,是从余下还未打开的两扇门中选择,这时的几率变了,即从1/3 提升到1/2,这是50%。因为,单从可能的几率上看,第二次选中的可能机会,要比第一次高出了近17%;所以,应该在AC两门中,再作第二次的选择。

{称量药丸}

你有四个装药丸的罐子,每个药丸都有一定的重量,被污染的药丸是没被污染的重量+1。只称量一次,如何判断哪个罐子的药被污染了?-----1,因每罐的药丸不一定痛数,又只能称一次,所以,不能采用整罐重量来比较,只能从各罐中取样一次称重;2,从每罐各取一个样合起来称,得出的重量异常(+1),又如何区分出,这是由哪一罐的样引起的呢?差异+1是由于由1个样的重量异常引起的,从每个罐都是取出1个样,所以区分不出来;那麽,如果差异是+2又怎麽样?差异+2,这是由于由2个异常的样引起的;啊!这就是说,只要从每罐取不同个数的样,就可以从重量差的数,找出异常药丸样个数,从取样个数,就可以找出异常药丸的罐来。(这里的关键是取样数目的转换,而转换是由因果份析而产生)。

对应**{奇怪的村庄} 某地有两个奇怪的村庄,张庄的人在星期一、三、五说谎,李村的人在星期二、四、六说谎。在其他日子他们说实话。一天,外地的王从明来到这里,见到两个人,分别向他们提出关于日期的题。两个人都说:“前天是我说谎的日子。”

如果被问的两个人分别来自张庄和李村,那么这一天是星期几?-----1,按照习惯:‘张庄的人在星期一、三、五说谎,李村的人在星期二、四、六说谎。在其他日子他们说实话’。所以,如果那天是周一三五,张庄人说谎,如果那天是周二四六,李村人说谎,也就是说,假的说成真,真的说成是假。2,按此,对周日一二三四五六各天,则将出现的情况如下:

当日—张庄人说--李村人说--其前天—张庄人说--李村人说 –

两人说的 周日

实话

实话

周二

---实话

谎话

--

相反

周一--谎话

实话

周三 实话(周一说的)实话

变成都是实话

周二

--实话

谎话

周四

--实话

实话(周二说的)变成都是实话

周三

--谎话

实话

周五 实话(周三说的)实话

变成都是实话

周四

--实话

谎话

周六

--实话

实话(周四说的)变成都是实话

周五

--谎话

实话

周日 谎话(周五说的)实话

相反

周六

--实话

谎话

周一

--

谎话

谎话(周六书的)变成都是谎话

1,如果那天是星期六,张庄人说实话;其前天应是周一,这天张庄人说谎,所以他照直说了;而周六,李村人说谎话;所以他说,前天(即周一)是说谎。所以才出现了,两人都说:“前天是我说谎的日子。”

*这里的条件对应。是不止一次;头一次是对应当日;还有一次是对应前日;忽略了后者,便得不出结果来。

发展-{爱瓦梯尔的学费} 古希腊有个著名的诡辩学者,叫普罗太哥拉丝。有一次,他收了一个很有才华的学生叫爱瓦梯尔,两人签了一份合同。普罗太哥拉丝向爱瓦梯尔传授法律知识,而爱瓦梯尔须分两次付清学费:第一次,是在开始授课的时候,第二次,则在结业后爱瓦梯尔第一次出庭打官司赢了的时候。爱瓦梯尔交上第一次学费,便孜孜不倦地向老师学习法律,学习成绩十分出色。几年后他结业了,但是过了很长时间,总不交第二次的学费。

普罗太哥拉丝等了再等,最后都等火了,要到法庭去告爱瓦梯尔,(1)爱瓦梯尔却对普罗太哥拉丝说:“只要你到法庭去告我,我就可以不给你钱了,因为如果我官司打赢了,依照法庭的判决,我当然就不会把钱给输了的人;如果我官司打败了,依照我们的合同,由于第一次出庭败诉,我也不能把钱给你。因此,不论我在这场官司中打输还是打赢,我不可能把钱给你。你还是不要起诉吧。”

(1)普罗太哥拉丝听后却有自己的打算,他说:“只要我和你一打官司你就一定要把第二次学费付给我。因为,如果我这次官司打胜了,依照法律的判决,你理所当然地要付学费给我;如果我官司打败了,你当然也要付学费给我,我们当初的合同上就是这样写的。所以,不论怎样你总要向我交第二次的学费。”

于是两个人都带着必胜的信心走进了法庭。

法官听了他们的诉讼,看过他俩的合同,思索了一会,便当众宣读了他的判决......你知道这位法官怎样判决才能使爱瓦梯尔既交上了学费又心服口服吗?((2)按照协议,在第一次诉讼,包将败诉;这证明了包已教出了‘青出于蓝’的学生;正是这个条件的出现,第二次诉讼,保将胜诉无疑)。

-----在本案例中,思维上有两点值得注意吸取运用:一是从不同角度分析问题(见1),二是从情况发展分析问题(见2)。

可能-{天堂里的游戏}

有个人死后来到天堂,圣彼得领着他在天堂各处参观。他们来到高墙下,圣彼得说:“嘘--轻点。”说完,他悄悄从旁边搬来一张长梯子。圣彼得先爬上去,然后招手让那个人也爬上去。他们站在梯子的顶端向里面张望着。原来,这 是一块被墙围起来的草地。草地的正中,坐着七个少年。“他们在干什么?”那个人问。圣彼得说:“如果不是早逝,”他们都是无与伦比的天才。到了天堂,他们志同道合,天天聚在一起玩智力游戏。今天,他们大概在猜 帽子吧。游戏是这样的:“六个少年A、B、C、D、E、F,按六边形围坐。另一个少年G,则用毛巾蒙着眼睛坐在当中。有人在他们7人每人头上戴一顶帽子,其中四顶白帽子,三顶黑帽子。由于G挡住了视线,六个少年都看不见自己正对面的人戴的是 什么颜色的帽子。现在,让A、B、C、D、E、F猜自己头上戴的帽子的颜色。智力游戏一开始,六个少年陷入沉思,一时都猜不出来。这时,坐在当中的G说:“我猜到了,我戴的是白帽子。” G是如何推理的?

-----这个游戏的条件是:(1)四白三黑七顶帽子戴在七人头上,(2)其中坐在周边的6个人,能看到除了在对面的人以外,其他6个人所戴帽子的颜色;(3)而在中心的人被蒙住眼,既不知自己帽子,也看不见其他6人帽子的颜色。(但这人却能猜出自己帽子的颜色)。1,为什麽围坐的6人都猜不出自己所戴帽子的颜色呢?一是他本人看不到自己头上的帽子,二是四白三黑的7顶帽子,他只看见5顶,还有黑白亮顶没见到,不易猜准。2,那麽这7人帽子的颜色,是怎麽样的分布,才能令围坐的6人都是看到三白二黑的呢?经过尝试,不难得出,只要中心的人是白帽,为坐的6人顺次是3顶白帽和3顶黑帽,变可的导这样的视觉效果。

3,因此,作在中心的人,尽管被蒙上眼睛,是麽也看不见;只要他能思考领悟到上面1-2两点所说的7顶帽子的颜色分布结构之间的位置关系,他就能够猜出自己头上戴的是白帽。

对应-可能{六张纸币}

(!)有3个美国孩子,他们摸了摸衣兜,把兜中的钱全部掏出来,(2)共是320美元,其中100美元的两张,50美元的两张,10美元的两张。(3)据了解每个孩子所带的纸币没有一个是相同的。而且,(4)没带100美元纸币的孩子也没带10美元的纸币,(5)没带50美元纸币的孩子也没带100美元的纸币。

你能不能弄清楚,3个孩子原来各自带了多少和什么样的纸币?

-----1,按条件(1,2,3)则可推断:三人各带:三,二,一张纸币;再按(4,5)有只带10元的;有只带50元的,2,综合这两个要求,符合要求的两个可能是:

1)甲(5)带一张10元的;乙(4)带二张50元的;丙带三张是两张100元的和一张10元的。

2)甲(5)带二张10元的;乙(4)带一张50元的;丙带三张是两张100元的和一张50元的。

尝试{11个教徒}

有一次,一艘船在海上遇到风暴。为了减轻船的重量,摆在25名乘客面前的选择是把一部分人抛到海里。这样,船和剩下的人也许还能得救。谁也不愿意自动跳入海中。乘客里有11个教徒,其中一个想出了一个主意。他让所有的25人坐成一圈,然后依次报数“1、2、3”,规定报到“3”的人就被抛到海里。最后报数的结果有14人被抛下海。剩下的是这11个教徒。那么,他是如何安排这些剩余者的位置的?

-----这可以从假设尝试后得出结果:

原有人数:1-2-3-4-5-6-7-8-9-10-11-12-13-14-15-16-17-18-19-20-21-22-23-24-25 第一轮剩:1-2 4-5

7-8 10-11

13-14

16-17

19-20

22-23

报3者是3的倍数,共8人,剩余17人;

第二轮剩:1

4-5 10

13-14

19-20

报3者是2-7-11-16-22,共5人;剩余12人;

第三轮剩:

4-5

报3者8一人,前后共14人;剩余生存者11人是10

11-13-14-16-17-19-20-22-23-25。

对应-{计算年龄} 小明对哥哥说:我长到你现在这么大的年龄时,你就31岁了。

哥哥说:是啊,我像你这么大年龄时,你只有1岁呢。

问:小明与他的哥哥现在各几岁?

-----如果运用代数去解:1,设他哥现年为X,小明的现年为Y;按题意可得下列两式:(1)Y+n=X;X+n=31;(2)X-m=Y;Y-m=1.2,将(1)式整理为:X-Y=n;31-X=n;则可得:X-Y=31-X,即:2X=Y+31;或Y=2X-31(a).对(2)式整理可得:X-Y=m;Y-1=m;联立可得:.X=2Y-1(b);3,将式(a)(b)联立,得:Y=2(2Y-1)-31;Y=11;X=21.n=10;m=10.

{猴子搬香蕉}

一个小猴子边上有100根香蕉,它要走过50米才能到家,每次它最多搬50根香蕉,(多了就被压死了),它每走1米就要吃掉一根,请问它最多能把多少根香蕉搬到家里。

提示:他可以把香蕉放下往返的走,但是必须保证它每走一米都能有香蕉吃。也可以走到n米时,放下一些香蕉,拿着n根香蕉走回去重新搬50根。

-----1,按题示,搬运来回走动,每米要消耗1根香蕉;因此,一次搬50根,到达时,50根究吃光了;即使将50根搬25米,到达时刻剩25根;但回程还得消耗同属25根,即无声余。可见,每次搬50根的距离,如果要有剩余。距离必须小于25米。,2,小于25米的范围内多次搬运,其中就会有一个效益的大小问题。先将搬距10米和20米两种情况进行尝试,比较其效益:

(1)搬距20米,对100米,计划要分5站,每次搬50根;每站来回两次,共10次; 第1次-到第1站:搬50根;来回剩50-40=10根;

第2次,搬50根,搬来,剩50-20=30根;前后搬来40根; 第3次-到第2站::搬40根;搬来;剩40-20=20根;

第4次-到第3站:搬20根; 搬来;剩20-20=0根。100根搬4次到达第3站已无剩余。

(2)搬距10米,对100米,计划最多10站,每次搬50根,来回20次: 第1次-到第1站:搬50根;来回剩50-20=30根;

第2次,搬50根,搬来,剩50-10=40根;前后搬来70根; 第3次-到第2站:搬50根;来回,剩50-20=30根;

第4次,搬20根:搬来;剩20-10=10根;前后搬来40根。第5次-到第3站:搬40根:搬来;剩40-10=30根。第6次-到第4站:搬30根;搬来;剩30-10=20根。第7次-到第5站:搬20根“搬老,剩20-10=10根。

第8次-到第6站:搬10根:搬来;剩10-10=0根。100根搬到底6站后已无剩余。可见,搬距必须再次缩小否则毫无效益。

(3)搬距5米,对100米距离,要分20站。每次搬50根;最多搬40次。第1次,到第1站;搬50根;来回;剩50-10-40根; 第2次,搬50根;搬来,剩50-5=45根;即前后共85根。第3次,到第2站:搬50根;来回;剩50-10=40根;

第4次;

搬35根;搬来;剩35-5=30;即前后共70根。第5次;到第3站;搬50根;来回;剩50-10=40根;

第6次;

搬20根;搬来;剩20-5=15根;即前后共55根。第7次;到第4站;搬50根;来回;剩50-10=40根;

第8次;

搬5根; 搬来;剩5-5=0根;即前后共40根。第9次;到第5站;搬40根;搬老;剩40-5=35根。第10次;到第6站;搬35根;搬来;剩35-5=30根。第11次;到第7站;搬30根;搬来;剩30-5=25根。第12次;到第8站;搬25根;搬来;剩25-5=20根。第13次;到第9站;搬20根;搬来;剩20-5=15根。第14次,到第10站;搬15根;搬来;剩15-5=10根。第15次;到第11站;搬10根;搬来;剩10-5=5根。

第16次;到第12站;搬5根;搬来;剩5-5=0.。原100根,搬到第12站后,已无剩余。

(4)搬距1米;100米距离,要分100站,每次搬50根,最多搬200次。第1次;到第1站;搬50根;来回;剩50-2=48根;

第2次;

搬50根;搬来‘剩50-1=49根;即前后共97根。第3次;到第2站;搬50根;来回;剩50-2=48根;

第4次;

搬47根;搬来‘剩47-1=46根;即前后共94根。(即每站将减少3根)第10次;到第5站后,剩100-15=85根; 第20次;到第10站后;剩100-30=70根; 第30次;到第15站后;剩100-45=55根; 第40次‘到第20站后;剩100-60=40根 第60次;到第30站后;剩100-90=10根; 第64次;到第32站后;剩100-96=4根;

第66次;到第33站后;剩100-99=1根;到第67次时,将无剩余。(共搬距66米)

4,经过多次尝试验证,即使是最小的运距1米,当搬到66米时,效益亦已为0.。为什麽会这样?因为100根香蕉,每走1米要消耗1根;走100米,就刚好消耗完。现在的条件是每次只运50米,不能一次运完;于是产生附加的回程消耗,这样,消耗就成倍的增多,效益也就大为下降,该运到的距离也就到达不了。

5,在这样的消耗条件下,只有距离小于66米,或者每次的运量能增到100以上,才能显示出效益来。

可能-{找房子} 有一家人决定搬进城里,于是去找房子。全家三口,夫妻两个和一个5岁的孩子。他们跑了一天,直到傍晚,才好不容易看到一张公寓出租的广告。他们赶紧跑去,房子出乎意料的好。于是,就前去敲门询问。这时,温和的房东出来,对这三位客人从上到下地打量了一番。丈夫豉起勇气问道:“这房屋出租吗?”

房东遗憾地说:“啊,实在对不起,我们公寓不招有孩子的住户。”

丈夫和妻子听了,一时不知如何是好,于是,他们默默地走开了。那5岁的孩子,把事情的经过从头至尾都看在眼里。那可爱的心灵在想:真的就没办法了?他那红叶般的小手,又去敲房东的大门。这时,丈夫和妻子已走出5米来远,都回头望着。门开了,房东又出来了。这孩子精神抖擞地说“......” 房东听了之后,高声笑了起来,决定把房子租给他们住。问:这位5岁的小孩子说了什么话,终于说服了房东?(水平思考法)

-----五岁的孩子,开始懂点事。但懂得不多。他可能说:“我很快就会成为大人的”,或者说:“我不淘气捣乱,不也成大人了吗?”。

对应-{细菌分裂} 有一个细菌,1分钟分裂为2个,再过1分钟,又分别分裂为2 个,总共分裂为4个。这样,一个细菌分裂成满满一瓶需要1个小时。同样的细菌,如果从2个开始分裂,分裂成一瓶需要几分钟。

篇5:大公司的PHP面试题

$begin=strtotime(‘2007-2-5′);

$end=strtotime(‘2007-3-6′);

echo ($end-$begin)/(24*3600);

3. 请写一个函数,实现以下功能:

字符串“open_door” 转换成 “OpenDoor”、”make_by_id” 转换成 ”MakeById”。

function str_change($str) {

$str = str_replace ( “_”, ” “, $str );

$str = ucwords ( $str );

$str = str_replace ( ” “, “”, $str );

return $str; }

4. 要求写一段程序,实现以下数组$arr1转换成数组$arr2:

$arr1 = array (

‘0′ =>array (‘fid’ =>1, ‘tid’ =>1, ‘name’ =>’Name1′ ),

‘1′ =>array (‘fid’ =>1, ‘tid’ =>2 , ‘name’ =>’Name2′ ),

‘2′ =>array (‘fid’ =>1, ‘tid’ =>5 , ‘name’ =>’Name3′ ),

‘3′ =>array (‘fid’ =>1, ‘tid’ =>7 , ‘name’ =>’Name4′ ),

‘4′ =>array (‘fid’ =>3, ‘tid’ =>9, ‘name’ =>’Name5′ )

);

$arr2 = array (

‘0′ =>array (

‘0′ =>array ( ‘tid’ =>1, ‘name’ =>‘Name1′),

‘1′ =>array ( ‘tid’ =>2, ‘name’ =>‘Name2′),

‘2′ =>array ( ‘tid’ =>5, ‘name’ =>‘Name3′),

‘3′ =>array ( ‘tid’ =>7, ‘name’ =>‘Name4′) ),

‘1′ =>array (

‘0′ =>array ( ‘tid’ =>9, ‘name’ =>‘Name5′ ) ) );

$arr1 = array (

‘0′ =>array (‘fid’ =>1, ‘tid’ =>1, ‘name’ =>’Name1′ ),

‘1′ =>array (‘fid’ =>1, ‘tid’ =>2 , ‘name’ =>’Name2′ ),

‘2′ =>array (‘fid’ =>1, ‘tid’ =>5 , ‘name’ =>’Name3′ ),

‘3′ =>array (‘fid’ =>1, ‘tid’ =>7 , ‘name’ =>’Name4′ ),

‘4′ =>array (‘fid’ =>3, ‘tid’ =>9, ‘name’ =>’Name5′ )

);

function changeArrayStyle($arr){

foreach($arr as $key=>$value){

$result[$value[fid]][]=$value;

}

return array_values($result);

}

$arr2=changeArrayStyle($arr1);

echo “

”;

var_dump($arr2);

?>

5. 请简述数据库设计的范式及应用。

一般第3范式就足以,用于表结构的优化,这样做既可以避免应用程序过于复杂同时也避免了SQL语句过于庞大所造成系统效率低下。

ANSWER:

第一范式:若关系模式R的每一个属性是不可再分解的,再属于第一范式。

第二范式:若R属于第一范式,且所有的非码属性都完全函数依赖于码属性,则为第二范式。

第三范式:若R属于第二范式,且所有的非码属性没有一个是传递函数依赖于候选码,则属于第三范式。

6.一个表中的Id有多个记录,把所有这个id的记录查出来,并显示共有多少条记录数,用SQL语句及视图、存储过程分别实现。

存储过程:

DELIMITER //

create procedure proc_countNum(in columnId int,out rowsNo int)

begin

select count(*) into rowsNo from member where member_id=columnId;

end

call proc_countNum(1,@no);

select @no;

视图:

create view v_countNum as select member_id,count(*) as countNum from member group by member_id

select countNum from v_countNum where member_id=1

7 表中有A B C三列,用SQL语句实现:当A列大于B列时选择A列否则选择B列,当B列大于C列时选择B列否则选择C列。

select

case

when first_name>middle_name then

case when first_name>last_name then first_name

else last_name end

else

case when middle_name>last_name then middle_name else last_name

end

end as name

from member

8请简述项目中优化sql语句执行效率的方法,从哪些方面,sql语句性能如何分析?

sql优化有鸟用,不如直接加索引。

9 如果模板是用smarty模板。怎样用section语句来显示一个名为$data的数组。比如:

$data = array(

[0] =>array( [id]=8 [name]=’name1′)

[1] =>array( [id]=10 [name]=’name2′)

[2] =>array( [id]=15 [name]=’name3′)

……

)

写出在模板页的代码? 若用foreach语句又要怎样显示呢?

{section name=loop loop=$data}

{$data[loop].id}

{$data[loop].name}

{/section}

{foreach from=$data item=id key=k}

{$k} – {$id}

{/foreach}

10 写一个函数,能够遍历一个文件夹下的所有文件和子文件夹。(目录操作)

$d = dir(dirname(__file__));

//echo “Handle: ” . $d->handle . “n”;

//echo “path: ” . $d->path . “n”;

while ( false !== ($entry = $d->read ) ) {

echo $entry . “”;

}

$d->close ();

?>

11 两张表 city表和province表。分别为城市与省份的关系表。

city:

id City provinceid

1 广州 1

2 深圳 1

3 惠州 1

4 长沙 2

5 武汉 3

………. 广州

province:

id province

1 广东

2 湖南

3 湖北

……….

(1) 写一条sql语句关系两个表,实现:显示城市的基本信息。?

(2) 显示字段:城市id ,城市名, 所属省份 。

如:

Id(城市id) Cityname(城市名) privence(所属省份)

。。。。。。。。。

。。。。。。。。。

(2)如果要统计每个省份有多少个城市,请用group by 查询出来。?

显示字段:省份id ,省份名,包含多少个城市。

ANSWER:

1.select A.id,A.Cityname,B.province from city A,province B where A.provinceid=B.id

2.select B.id,B.province,count(*) as num from city A,province B where A.provinceid=B.id group by B.id

12. 按照你的经验请简述软件工程进行软件开发的步骤。以下工具Rational Rose、powerDesigner、project、VSS或CVS、TestDirector使用过那种,有缺点是什么?

公司用dbdesigner及cvs,测试管理工具用的是Mantis

13. 请简述操作系统的线程与进程的区别。列举LINUX下面你使用过的软件?

14. 请使用伪语言结合数据结构冒泡排序法对以下一组数据进行排序 10 2 36 14 10 25 23 85 99 45。

$a = array(10,2,36,14,10,25,23,85,99,45);

for($j=0 ; $j<9 ; $j++)

for($i=0 ; $i<9-$j ; $i++)

if($a[$i] >$a[$i+1]) {

$t = $a[$i] ;

$a[$i] = $a[$i+1] ;

$a[$i+1] = $t ; }

echo var_dump($a);

—————————————————————————–

—————————————————————————–

—————————————————————————–

新浪php工程师面试题 收藏

1、COOKIE、SESSION的联系和区别,多台web服务器如何共享SESSION?

2、HTTp协议中的pOST和GET有何区别?

3、一段php代码,写出输出结果:

/**** 这个程序****/

$a=0;

$b=0;

if(($a=3)>0||($b=3)>0){

$a++;

$b++;

echo $a ;

echo $b; //输出b的值 ($a=4 ,$b=1) $b=3没有执行

}

4、reqiure的include都可包含文件,二者的区别何在?

5、php中WEB上传文件的原理是什么,如何限制上传文件的大小?

is_uploaded_file() 和 move_uploaded_file()

6、写一个函数,可以遍历文件夹下的所有文件和文件夹.

7、8、中间有几个unix shell的题目(好像是两个),因为不懂,不记得这些题目了

9、有mail.log的一个文档,内容为若干邮件地址,其中用’n’将邮件地址分隔。要求从中挑选出sina.com的邮件地址(包括从文件读取、过滤到列印出来)。

mail.log内容如下:

james@sina.com.cn

jack@163.com

zhansan@sohu.com

lisi@hotmail.com

wangwu@gmail.com

10、js中网页前进和后退的代码 ( 前进: history.forward();=history.go(1); 后退: history.back();=history.go(-1); )

11、window(A)中用window.open()打开了window(B),如何从窗口B调用窗口A中的内容?A、B仅仅是窗口的代号,不是窗口名字

12、了解ajax吗?用过吗?……

13、什么是MVC?用过吗?使用时遇到了什么问题,怎么解决的?

14.写出 访问 www.sina.com.cn 所需的报文头,嘿嘿,这是超级猪自己想起来地。md5_file()

—————————————————————————–

—————————————————————————–

—————————————————————————–

最新的新浪pHp面试题(.3)

1. echo count(“abc”); 输出什么?

答案:1

2. 用pHp写出显示客户端Ip与服务器Ip的代码

答案:客户端 getenv(‘REMOTE_ADDR’);

服务器端 getenv(‘SERVER_ADDR’); // gethostbyname(“www.baidu.com”);

3. error_reporting(2047)什么作用?

答案:相当于 error_reporting(‘E_ALL’); 输出所有的错误

4.如何实现pHp、JSp交互?

题目有点含糊不清,SOAp,XML_RpC,Socket function,CURL都可以实现这些,如果是考pHp和Java的整合,pHp内置了这种机制(如果考pHp和.NET的整合,也可以这么回答), 例如$foo = new Java(‘java.lang.System’);

5. 打开php.ini中的Safe_mode,会影响哪些参数?至少说出6个。

答案:此模块打开时,php将检查当前脚本的拥有者是否和被操作文件的拥有者相同,因此,将影响文件操作类函数,程序执行函数(program Execution Functions)。这些函数有.pathinfo,basename,fopen,system,exec,proc_open 等函数;

7. 请写一个函数验证电子邮件的格式是否正确(要求使用正则)

function checkEmail($mail){

$reg = ‘/^w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*$/’;

$rst = preg_match($reg , $mail);

if($rst){

return TRUE;

}else {

return FALSE;

}

}

11. 写个函数用来对二维数组排序。

array_multisort()

12. 写5个不同的自己的函数,来截取一个全路径的文件的扩展名,允许封装php库中已有的函数。

13. 一群猴子排成一圈,按1,2,…,n依次编号。然后从第1只开始数,数到第m只,把它踢出圈,从它后面再开始数,再数到第m只,在把它踢出去…,如此不停的进行下去,直到最后只剩下一只猴子为止,那只猴子就叫做大王。要求编程模拟此过程,输入m、n, 输出最后那个大王的编号

7、优化MYSQL数据库的方法。

(1).数据库设计方面,这是DBA和Architect的责任,设计结构良好的数据库,必要的时候,去正规化(英文是这个:denormalize,中文翻译成啥我不知道),允许部分数据冗余,避免JOIN操作,以提高查询效率

(2).系统架构设计方面,表散列,把海量数据散列到几个不同的表里面.快慢表,快表只留最新数据,慢表是历史存档.集群,主服务器Read & write,从服务器read only,或者N台服务器,各机器互为Master

(3).(1)和(2)超越pHp programmer的要求了,会更好,不会没关系.检查有没有少加索引

(4).写高效的SQL语句,看看有没有写低效的SQL语句,比如生成笛卡尔积的全连接啊,大量的Group By和order by,没有limit等等.必要的时候,把数据库逻辑封装到DBMS端的存储过程里面.缓存查询结果,explain每一个sql语句

(5).所得皆必须,只从数据库取必需的数据,比如查询某篇文章的评论数,select count(*) … where article_id = ? 就可以了,不要先select * … where article_id = ?然后msql_num_rows.

只传送必须的SQL语句,比如修改文章的时候,如果用户只修改了标题,那就… set title = ? where article_id = ?不要set content = ?(大文本)

(6).必要的时候用不同的存储引擎.比如InnoDB可以减少死锁.HEAp可以提高一个数量级的查询速度

————————————————————————

$s = ‘abc’;

if ($s==0)

echo ‘is zero’;

else

echo ‘is not zero’;

?>

好多人答错了,认为答案是输出字符串“is not zero”。其实正确答案应该是输出字符串“is zero”。

原因其实简单,因为 pHp 是一门弱类型的语言,它对变量没有“必须先定义再使用”的强制要求,变量的类型也是根据赋值的类型来灵活变化的。这一“灵活性”看似灵活,实际上埋下了错误的隐患。虽然 $s = ‘abc’; 语句定义了变量 $s 为字符串类型,但因为 if ($s==0)语句中,$s 是和数字型常量比较,所以 $s 这时被隐含的转换成了数字型变量,其值是 0,所以 $s==0 比较的结果就为真。

犯这一类型错误的人一般是从 Java、C 等语言转到 pHp 开发的程序员,因为 Java、C 等语言是强类型语言,是不允许不同类型的变量和常量相互比较的,在这种情况下会报告语法错误。

其实 pHp 语言的开发者并不是没有注意到这类问题,在 pHp 语言里还有一个严格比较的运算符“===”,要求比较的双方必须类型一致,把上述 if ($s==0) 语句写为 if ($s===0) 就会避免前述错误的发生。

———————————————————————————–

$str=”cd”;

$$str=”hotdog”; //$cd

$$str.=”ok”;

echo $cd; //hotdogok

?>

————————————————————————————–

9、apache+mysql+php实现最大负载的方法

主要是配置文件的优化了,另外用linux跑要比用windows跑效果好一点。

mkdir创建目录 touch创建文件夹 修改权限chmod之类

51、请写出pHp5权限控制修饰符(3分)

private protected public

13、对于大流量的网站,您采用什么样的方法来解决访问量问题?(4分)

首先,确认服务器硬件是否足够支持当前的流量

其次,优化数据库访问。

第三,禁止外部的盗链。

第四,控制大文件的下载。

第五,使用不同主机分流主要流量

第六,使用流量分析统计软件。

htmlspecialchars() 函数把一些预定义的字符转换为 HTML 实体。

htmlentities() 函数把字符转换为 HTML 实体。(htmlentities( )的转义更为彻底。)

SQL注入是很容易避免的。正如第一章所提及的,你必须坚持 过滤输入和转义输出。———

microtime 返回当前时间戳, mktime()取得指定的时间戳

//本页地址,当前脚本的名称.

echo $_SERVER[pHp_SELF].””;

//链接到当前页面的前一页面的 URL 地址:

echo $_SERVER[HTTp_REFERER].””;

3.在HTTp 1.0中,状态码 401 的含义是(4);如果返回“找不到文件”的提示,则可用 header 函数,

其语句为(5)。

(4)未授权 (5) header(“HTTp/1.0 404 Not Found”);———找不到文件

header(“HTTp/1.1 403 Forbidden”);———不允许访问

7.以Apache模块的方式安装pHp,在文件http.conf中首先要用语句(10)动态装载pHp模块,

然后再用语句(11)使得Apache把所有扩展名为php的文件都作为pHp脚本处理。

(10) LoadModule php5_module “c:/php/php5apache2.dll”

(11) AddType application/x-httpd-php-source .phps

AddType application/x-httpd-php .php .php5 .php4 .php3 .phtml

9.类的属性可以序列化后保存到 session 中,从而以后可以恢复整个类,这要用到的函数是(14)。

serialize() /unserialize()

10.一个函数的参数不能是对变量的引用,除非在php.ini中把(15)设为on.

allow_call_time_pass_reference

问题:请用最简单的语言告诉我PHP是什么?

回答:PHP全称:Hypertext Preprocessor,是一种用来开发动态网站的服务器脚本语言。

问题:什么是MVC?

回答:MVC由Model(模型), View(视图)和Controller(控制器)组成,PHP MVC可以更高效地管理好3个不同层的PHP代码。

Model:数据信息存取层。

View:view层负责将应用的数据以特定的方式展现在界面上。

Controller:通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。

问题:在页面中引用CSS有几种方式?

回答:在页面中使用CSS有3中方式:

引用外部CSS文件

内部定义Style样式

内联样式

问题:PHP支持多继承吗?

回答:不可以。PHP类只能继承一个父类,并用关键字“extended”标识。

问题:请问PHP中echo和print有什么区别?

这两个看起来很相似,因为它们都是将一些值打印在屏幕上。但是echo和print的本质区别在于:echo用来输出字符串,显示多个值的时候可以用逗号隔开。只支持基本类型,print不仅可以打印字符串值,而且可以打印函数的返回值。

问题:请问GET和POST方法有什么区别?

答:我们再网页上填写的表单信息都可以通过这两个方法将数据传递到服务器上,当我们使用GET方法是,所有的信息都会出现在URL地址中,并且使用GET

方法最多只能传递1024个字符,所以如果在传输量小或者安全性不那么重要的情况下可以使用GET方法。说到POST方法,最多可以传输2MB字节的数

据,而且可以根据需要调节。

问题:PHP中获取图像尺寸大小的方法是什么?

回答:getimagesize () 获取图片的尺寸

Imagesx () 获取图片的宽度

Imagesy () 获取图片的高度

问题:PHP中的PEAR是什么?

回答:PEAR也就是为PHP扩展与应用库(PHP Extension and Application Repository),它是一个PHP扩展及应用的一个代码仓库。

问题:如何用PHP和MySQL上传视频?

回答:我们可以在数据库中存放视频的地址,而不需要将真正的视频数据存在数据库中。可以将视频数据存放在服务器的指定文件夹下,上传的默认大小是2MB,但是我们也可以在php.ini文件中修改max_file size选项来改变。

问题:PHP中的错误类型有哪些?

回答:PHP中遇到的错误类型大致有3类。

提示:这都是一些非常正常的信息,而非重大的错误,有些甚至不会展示给用户。比如访问不存在的变量。

警告:这是有点严重的错误,将会把警告信息展示给用户,但不会影响代码的输出,比如包含一些不存在的文件。

错误:这是真正的严重错误,比如访问不存在的PHP类。

问题:如何在PHP中定义常量?

回答:PHP中使用Define () 来定义常量。

define (“Newconstant”, 30);

问题:如何不使用submit按钮来提交表单?

如果我们不想用submit按钮来提交表单,我们也可以用超链接来提交,我们可以这样写代码:

Submit Me

扎实的基础知识、高质量的代码、清晰的思路、优化代码的能力、优秀的综合能力是编程技术面试的五大要点。

找工作一直是一个热门话题。要想找到心仪的工作,难免需要经过多轮面试。编程面试是程序员面试过程中最为重要的一个环节。如果能在编程面试的环节充分展示自己的能力,那么拿到中意的Offer就是水到渠成的事情。

我先后在欧特克、微软和思科等公司任软件工程师,多次接受他人的面试,同时也面试过很多人。总结面试与被面试的经验,我发现尽管面试官的背景、性格各不相同,但都关注应聘者五种素质:扎实的基础知识;能写高质量的代码;分析问题时思路清晰;能优化时间效率和空间效率;具备包括学习能力、沟通能力、发散思维能力等在内的综合能力。

扎实的基础知识

扎实的基本功是成为优秀程序员的前提条件,因此面试官首要关注应聘者的素质即是否具备扎实的基础。通常基本功在编程面试环节体现在两个方面:一是编程语言,二是数据结构和算法。

每个程序员至少要熟练掌握1~2门编程语言。面试官从应聘者在面试过程中写的代码以及跟进的提问中,能看出他编程语言掌握的熟练程度。以大部分公司面试要求的C++为例,如果函数需要传入一个指针,面试官可能会问是否需要为该指针加上const,把const加在指针不同的位置有什么区别;如果写的函数需要传入的参数是一个复杂类型的实例,面试官可能会问传入值参数或者引用参数有什么区别,什么时候需要为传入的引用参数加上const。

数据结构通常是编程面试过程中考查的重点。在参加面试之前,应聘者需要熟练掌握链表、树、栈、队列以及哈希表等数据结构以及它们的操作。如果我们留心各大公司的面试题,就会发现链表和二叉树相关的问题是很多面试官喜欢问的问题。这方面的问题看似简单,但真正掌握也很不容易,特别适合在短短几十分钟的面试时间内检验应聘者的基本功。如果应聘者事先对链表的插入和删除结点了如指掌,对二叉树的各种遍历方法的循环和递归写法都烂熟于胸,那么真正到了面试时也就游刃有余了。

大部分公司对算法的要求都只是考查查找和排序。应聘者可以在了解各种查找和排序算法的基础上,重点掌握二分查找、归并排序和快速排序,因为很多面试题都只是这些算法的变体而已。比如把排序好的数组的前面若干个数字移到数组的后面,然后问怎样在这个数组之中找到最小的数字。这道题其本质就是考查二分查找。少数对算法很重视的公司比如谷歌或者百度,还会要求应聘者熟练掌握动态规划和贪婪算法。如果对这种类型的公司感兴趣,那么应聘者在参加面试之前就应该加强对相关算法题目的练习。

高质量的代码

只有注重质量的程序员,才能写出鲁棒稳定的大型软件。在面试过程中,面试官总会格外关注边界条件、特殊输入等看似细枝末节但实质至关重要的地方,以此来分析应聘者是否注重代码质量。很多时候,面试官发现应聘者写出来的代码只能完成最基本的功能,一旦输入特殊的边界条件参数就会错误百出甚至程序崩溃。

举个很多应聘者都被问过的一个问题:写一个函数,把字符串转化成整数。这道题看似很简单,绝大部分计算机专业的毕业生都能用十行以内的代码实现最基本的功能。可是在实际面试过程中,十个应聘者中只有一个人能通过这道题的面试,因为绝大部分应聘者不能全面考虑到各种特殊输入,比如输入的字符串含中有非数字的符号、在字符串的开头有正负号、字符串中有正负号但其位置不是在字符串的开头。

除此之外,面试官还希望应聘者能考虑的边界条件包括2147483647(0x7FFFFFFF,int能表示的最大正整数)和-2147483648(0×80000000,int能表示的最小负整数)。

除了边界条件和特殊输入考虑不足之外,面试官还有一个不能容忍的错误就是程序崩溃。面试时很多应聘者都会忘记对空指针做特殊处理而导致程序崩溃。如果面试时遇到链表、二叉树相关的题目,应聘者一定要特别小心。因为这两种题目对应的代码里通常会有大量的指针操作,如果考虑不周到,就有可能对空指针进行操作而使程序崩溃。

比如这样一道题:输入一个链表的头指针和一个无符号整数k,输出该链表的倒数第k个结点。这个题目很多人都能想到用两个指针来解决:第一个指针先在链表上移动k-1步,同时让第一个指针和第二个指针在链表上移动。当第一个指针移动到尾指针时,第二个指针指向的就是倒数第k个结点。然而不是每个应聘者都能根据正确思路写出完整的代码。不少应聘者会忽略两种可能:一是输入的链表头指针有可能是空指针;二是链表上结点的数目有可能少于k个。忽略这两点的代码都存在崩溃的可能,从而很难获得面试官的青睐。

要想写出鲁棒的高质量代码,需要在动手写代码之前想好测试用例。在写代码之前,先要想好各种边界条件和特殊输入作为测试用例。当代码写好之后,自己在心里用之前想好的测试用例来检验自己写出的代码,这样就能在面试官之前发现并解决问题。以求链表的倒数第k个结点为例,如果事先想到了输入头指针为空指针和链表上的结点总数少于k这两个测试用例,并且在写好代码之后在心里模拟代码的运行过程,确保能够通过这两个测试用例的测试,那么这轮面试必然是能够通过的。

清晰的思路

只有思路清晰,应聘者才有可能在面试过程中解决复杂的问题。有时面试官会有意出一些比较复杂的问题,以考查能否在短时间内形成清晰的思路并解决问题。对于确实很复杂的问题,面试官甚至不期待应聘者能在面试不到一个小时的时间里给出完整的答案,他更看重的可能还是应聘者是否有清晰的思路。面试官通常不会喜欢应聘者在没有形成清晰思路之前就草率地开始写代码,结果写出来的代码容易逻辑混乱、错误百出。

应聘者可以用几个简单的方法帮助自己形成清晰的思路。

首先是举几个简单的具体例子让自己理解问题。当一眼看不出问题中隐藏的规律时,可以试着用1~2个具体的例子模拟操作的过程,这样说不定就能通过具体的例子找到抽象的规律。

其次可以试着用图形表示抽象的数据结构。像分析与链表、二叉树相关的题目时,可以画出它们的结构图来简化题目。

最后可以试着把复杂的问题分解成若干个简单的子问题,再一一解决。很多基于递归的思路,包括分治法和动态规划法,都是把复杂的问题分解成一个或者多个简单的子问题。

比如把二叉搜索树转化排序的双向链表这个问题就很复杂。碰到这个问题,不妨先画出1~2个具体的二叉搜索树及其对应的排序双向链表,直观地感受二叉搜索树和排序的双向链表有哪些联系。如果一下子找不出转换的规律,可以把整个二叉树看出三部分:根结点、左子树和右子树。当递归地把转换左右子树这两个子问题解决之后,再把转换左右子树得到的链表和根结点链接起来,整个问题也就解决了。

优化代码的能力

优秀的程序员对时间和空间的消耗锱铢必较,他们很有激情不断优化自己的代码。当面试官出的题目有多种解法时,通常他会期待应聘者最终能够找到最优解。这就要求应聘者在面试官提示还有更好的解法时,不能放弃思考,而应该努力寻找在时间消耗或者空间消耗上可以优化的地方。

要想优化时间或者空间效率,首先要知道如何分析效率。即使是同一个算法,用不同方法实现的效率可能也会大不相同,要能够分析出算法及其代码实现的效率。例如求斐波那契数列,很多人喜欢用递归公式f(n)=f(n-1)+f(n-2)求解。如果分析它的递归调用树,就会发现有大量的计算是重复的,时间效率是以n的指数增加。但如果先求f(1)、f(2),再根据f(1)和f(2)求出f(3),接下来根据f(2)、f(3)求出f(4),并以此类推用一个循环求出f(n),这种计算方法的时间效率就只有O(n),比前面递归的方法要好很多。

要想优化代码的效率,还要熟知各种数据结构的优缺点,并能选择合适的数据结构解决问题。我们在数组中根据下标可以用O(1)完成查找。数组的这个特征可以用来实现简单的哈希表解决很多面试题,比如在字符串中找到第一个只出现一次的字符。再比如为了找出n个数字中最小的k个数,需要一个数据容器来存储k个数字。在这个数据容器中,我们希望能够快速地找到最大值并且能快速地替换其中的数字。经过权衡,我们发现二叉树比如最大堆或者红黑树都是实现这个数据容器的理想选择。

要想优化代码的效率,也要熟练掌握常用的算法。面试中最常用的算法是查找和排序。如果从头到尾顺序扫描一个数组,需要O(n)时间才能完成查找操作。但如果数组是排序的,应用二分查找算法就能把时间复杂度降低到O(logn)。排序算法除了能够给数组排序之外,还能用来解决其他问题。比如快速排序算法中的Partition函数能够用来在n个数里查找第k大的数字,从而可以用O(n)的时间在数组中找到出现次数超过数组长度一半的数字。如果面试题是一个求最大值或者最小值的题目,则可以尝试用动态规划法或者贪婪算法,比如用动态规划法求出数组中连续子数组的最大和。

优秀的综合能力

在面试过程中,应聘者除了展示自己的编程能力和技术功底之外,还需要展示自己的软技能,诸如沟通能力和学习能力。随着软件系统的规模越来越大,软件开发已经告别了单打独斗的年代,程序员与他人的沟通变得越来越重要。在面试过程中,面试官会观察应聘者在介绍项目经验或者算法思路时是否观点明确、逻辑清晰,并以此判断他沟通能力的强弱。另外,面试官也会从应聘者说话的神态和语气来判断他是否有团队合作的意识。通常面试官不会喜欢高傲或者轻视合作者的人。

IT行业知识更新很快,因此程序员只有具备很好的学习能力才能跟上知识更替的步伐。通常面试官有两种办法考查应聘者的学习能力。第一种方法是询问应聘者最近在看什么书、从中学到了哪些新技术。面试官可以用这个问题了解应聘者的学习愿望和学习能力。第二种方法是抛出一个新概念,接下来他会观察应聘者能不能在较短时间内理解这个新概念并解决相关的问题。比如面试官要求应聘者计算第1500个丑数。很多人都没有听说过丑数这个概念。这时面试官就会观察应聘者面对丑数这个新概念,能不能经过提问、思考、再提问的过程,最终找出丑数的规律从而找到解决方案。

知识迁移能力是一种特殊的学习能力。如果我们能够把已经掌握的知识迁移到其他领域,那么学习新技术或者解决新问题就会变得容易。面试官经常会先问一个简单的问题,再问一个很复杂但和前面的简单问题相关的问题。这时面试官期待应聘者能够从简单问题中得到启示,从而找到解决复杂问题的窍门。比如面试官先要求应聘者写一个函数求斐波那契数列,再问一个青蛙跳台阶的问题:一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶,请问这只青蛙跳上n级的台阶总共有多少种跳法?应聘者如果具有较强的知识迁移能力,就能分析出青蛙跳台阶问题实质上只是斐波那契数列的一个应用。

上一篇:归园田居诗词原文下一篇:刘楼小学“防震防火防踩踏”疏散演练 应急预案