A. 精选程序员面试常问的逻辑题
精选程序员面试常问的逻辑题1. 红白帽子推理题目描述:一群人开舞会,每人头上都戴着一顶帽子。帽子只有黑白两种,黑的至少有一顶。每个人都能看到其他人帽子的颜色,却看不到自己的。主持人先让大家看看别人头上戴的是什么帽子,然后关灯,如果有人认为自己戴的是黑帽子,就打自己一个耳光。第一次关灯,没有声音。于是再开灯,大家再看一遍,关灯时仍然鸦雀无声。一直到第三次关灯,才有劈劈啪啪打耳光的声音响起。问有多少人戴着黑帽子?
答案:三个人。
若是两个人,设A、B是黑帽子,第二次关灯就会有人打耳光。因为A看到B第一次没打耳光,就知道B也一定看到了有带黑帽子的人,可A除了知道B带黑帽子外,其他人都是白帽子,就可推出他自己是带黑帽子的人。同理B也是这么想的,这样第二次熄灯会有两个耳光的声音。
如果是三个人,A、B、C。A第一次没打耳光,因为他看到B、C都是带黑帽子的;而且假设自己带的是白帽子,这样只有BC戴的是黑帽子;按照只有两个人带黑帽子的推论,第二次应该有人打耳光;可第二次却没有,于是他知道B和C一定看到了除BC之外的其他人带了黑帽子,于是他知道BC看到的那个人一定是他,所以第三次有三个人打了自己一个耳光。
拓展:N个人是黑帽子,就会在第N天,有N个人打自己一个耳光。
2. 吃药片题目描述:有两种药片,每种有两个,一个人需要早上吃两种药片各一个,现在这四个药片混在一起了,这个人有什么方法吃?
答案:把所有的4颗药丸都切开成相等的两半,然后早上和晚上,分别吃掉每颗药丸的一半。
3. 得到指定容量的水题目描述:一个5L,一个6L的瓶子,要得到3L的水,问什么方法?
答案:6-5=1,1L水放在5L那个瓶里面,然后再装6L水,往5L(里面已经有1L)里面倒,这样就会剩下2L水在6L里面,再把2L水放在5L里面,再装一次,不就可以6L那里到处3L水到5L里面,自己就剩下3L了。
4. 老鼠/犯人喝酒试毒题目描述:一共1000瓶酒,其中一瓶有毒。如果一只老鼠喝了有毒的酒,会在一天之后死亡,那么如果给你一天时间,让你判定哪瓶酒有毒,至少需要几只老鼠?
答案:10只。这个需要使用二进制编码来解决,1000瓶酒至少需要10位二进制数来进行编码。然后取十只杯子分别代表这十个二进制数的十个位,分别将1000瓶酒倒入其编码为1的对应的杯子中。取十个老鼠分别喝十个杯子中的酒,一天之后,就可以根据喝哪些杯子的老鼠死掉来确定出有毒的那瓶酒的编码,从而确定哪瓶酒有毒。
拓展:
如果是常规利用二进制解题的话,那就需要14个犯人,2^14=16384>10000,但是这样一来死亡时间这个条件就用不到,也不是最优解。
应该利用酒死的时间是固定的,一个罪犯像上面那样可以表示成25种状态,三个罪犯就可以表示25×25×25种状态,超过10000了,所以只需要三个罪犯。
题目描述:有8个小球,其中七个的重量是相同的,有一个较轻。给你一个天平,问秤几次能找出那个较轻的小球,若天平只能秤两次,又该怎么秤?
答案:第一次两边各放随机三个,如果平了,则另外一个是轻的,若不平,还有第二次,拿出那三个轻的,在两边随机放一个,就能测出哪个最轻了。
6. 飞机加油题目描述:已知:每个飞机只有一个油箱,飞机之间可以相互加油(注意是相互,没有单独的加油机),一箱油可供一架飞机绕地球飞半圈。问题:为使至少一架飞机绕地球一圈回到起飞时的飞机场,至少需要出动几架飞机?(所有飞机从同一机场起飞,而且必须安全返回机场,不允许中途降落,中间没有飞机场)
答案:分为3架飞机5架次和3架飞机6架次。
3架飞机6架次:
(图解参考链接中的图片)
ABC 3架同时起飞。
1/8处,C给AB加满油,C返航。此时飞机的油量分别是:A: 3/4, B: 3/4, C: 3/4(返回时)。C分别给A和B加满油后,三架飞机当前油量分别是:A: 1, B: 1, C: 1/4(剩余)。C返回机场。A、B继续向前飞行。
1/4处,B给A加满油,B返航,A到达1/2处,此时C已经返回机场。三家飞机此时油量分别是:A: 3/4, B: 3/4(返回时), C: 0。B给A加满油后,C加满油,此时三架飞机的油量分别是:A: 1, B: 1/2, C: 1。然后B返回机场,A继续向前飞行。
当A飞行至半圈位置时,B已经返回机场并且加满了油(假设加油时间为0),此时,B和C沿逆时针方向飞行,三架飞机当前油量分别是:A: 1/2, B: 1, C: 1。A继续向前飞行。
当A飞行至另外半圈的1/4位置时,三架飞机剩余油量分别是:A: 1/4, B: 3/4, C: 3/4。此时,C给B加满油。此时三架飞机油量分别是:A: 1/4, B: 1, C: 1/2。C返回机场,B和A继续向前飞行。
当A飞行至另外半圈的1/2位置时,C已经返回机场,A和B相遇,此时三架飞机剩余油量分别是:A: 0, B: 3/4, C: 0。B给A加1/4的油,三架飞机剩余油量:A: 1/4, B: 1/2, C: 1。C加满油从机场逆时针飞出,B返回机场,A继续向前飞行。
当A飞行至另外半圈的3/4位置时,A和C相遇。此时三架飞机的油量分别是:A: 0, B: 1/4(在机场准备起飞), C: 3/4。C给A加1/4的油,此时三架飞机的油量分别是:A: 1/4, B: 1/4(未起飞), C: 1/2。C掉头返回机场,A和B继续向前飞行。
三架飞机顺利回到机场。
3飞机5架次:
(图解参考链接中的图片)
3 架飞机同时从机场出发,飞行八分之一周(A点),各耗油四分之一。此时某架飞机给其余两架补满油,自己返回基地。
另一架飞机和目标机结伴,飞至四分之一周(B点),给目标机补满油,自己返回。
目标机独自飞行半周(C点)。
与从基地反向出发的一架飞机相遇,2 机将油平分,飞至最后八分之一处(D点)。
与从基地反向出发的另一机相遇,各分四分之一油,返回。
以上即为精选的程序员面试常问的逻辑题及其解答,希望能够帮助到大家。
B. 如何看待程序员面试让上机做编程题,这样的公司多吗
从事软件开发多年,上机写代码这种考查模式在国外用的比较多,很多国内的公司也在学习这种方式,这种方式能直接看出写代码的能力,但对上机做编程题目这种事情很多成熟的程序员觉得是一种侮辱,有一些程序员看到有笔试直接就选择走人了,这些东西在面试之前应该有沟通,事情不会变得这么被动,因为对于很多有能力的程序员,能够请到面试已经非常不容易了,能力越强脾气越大。
直接上机做编程测试能力的公司不是很多,从事软件开发十几年主要经历了四家公司,面试的时候主要靠面谈为主,因为编程行业能力的高低通过交谈就能了解差不多,只需要根据简历上写的项目进行细节沟通,如果真的做过几句话就能看出大概的水平,所以很多公司压根不搞什么笔试或者上机写代码的事情,编程这个职业主要靠时间的积累,并且在积累中不断完善自己的知识体系,慢慢提高自己的认知。
一个程序员如何提升自己的能力水平,对于初学者来讲首先是学习好一门编程语言,开始学习阶段觉得编程语言就是天了,好像是学会了编程语言就能做任何的东西了,随着编程语法的学习完毕就开始尝试做一些题目,结果发现距离语法真的非常遥远,所以有很多的初学者有一种感概明明在课堂什么都明白了,结果到真正自己实践的时候什么都想不起来,这是初学者必然的经历,编程本身就是一种不断磨练编程思想的过程,编程语言属于在辅助类基础技能,没有辅助就不会写代码,编程设计思想再牛也不可能实现,两者是相辅相成的作用,编程思想里面包含着仙姑经验的积累。
很多人觉得很奇怪有些公司也不进行面试也不让上机写代码,就是通过不到一个小时的闲聊就能把一个人的水平能力和工资水平给定位下来,通过面试就能检测出编程思想以及编程基础,编程基础类的考察只需要问几个简单的语法问题就能做个大概的检测,编程思想就是完全的编程意识以及编程经验的积累,所以一些企业在招聘的时候明确写着就相关开发经验的人优先,企业招聘的目的就是希望要的人在短时间内能够上岗直接切入到项目开发中去,整体来看是不是需要上机写代码测试完全看每个公司的技术文化了。
有些技术类的公司对于程序员的基本功要求特别严格,有个同事在第一家技术公司的时候,部门技术经理特别关注程序员的基本语法,只要是简单的代码语法错误,就能到部门的黑板通报,开始实施阶段很多人上了黑板,后来随着时间的推移上去的人越来越少了,同事说到自己上了两次黑板都是因为在使用指针的时候没有初始化导致,到今天还是记忆尤新,如果在技术生涯的初期能够经历过这种企业是一个技术人的幸运了,越是严格要求的领导或者公司越是有利于技术人员 的成长,至于在面试的时候要不要上机这个就看每个公司的技术文化了,一般注重代码基础的领导会引领这个事情,希望能帮到你。
这是一个正常的流程,我觉得有时候还是有必要的考验一下面试者的。
以前这种面试实际上是很平常的,但是发展到现在越来越多的人对这样的面试很反感,大概率的原因是因为很多人更多的是在搬代码,并且搬的很成功,而真正注意写代码的人反而越来越少。
笔试和上机编程好不好?
我觉得挺好的,这样可以刷下去很多划水的人,有的人,写代码的能力并不强,但是搬代码的技术一流,随着技术越来越晚上,一些解决各种bug的网站越来越流行,现在更多的毕业生为了高工资,变成了搬代码的人,他们能解决问题吗?能,但是是他们自己的解决的吗?不是,更多的是他们通过搜索的手段,问度娘,问谷歌,渐渐的形成了一个可以解决问题的方案,虽然问题解决了,但是等遇到一个需要创新开发的时候,他们就完了,基本上没有了自我的思维。
笔试和上机可以有效的防止这类人进入公司,实际上也是一种不错的手段。
这样的公司多不多?
据我所致,目前来讲上机编程的公司不是很多,毕竟,每个公司所使用的编程软件不同,有的公司制作的软件也比较具有保密性,没办法直接考程序员的实际能力,只能通过一些算法测试,或者是什么测试,来简单的排除掉那些搬运的人。
所以上机测试的效果并不是特别好,一般的公司都会选择用笔试的方式。
我遇到过不少笔试的,上机的从来没有遇到过。
我一个同事之前换工作的时候倒是遇到过,按他所说,这样的测试并没有什么效果,毕竟测试题出得很浅,太难的问题,基本上短时间内很难解决,也不会有那么长的面试时间。
其实,在我看来,这个上机面试并没有那么大的用途,毕竟测试不到太多的东西,还不如看他自己写过的代码来的更快。至于这样的公司多不多,真没办法说,毕竟没有统计过,根据我的经验,我觉得不会太多。
笔试的我见过,但是上机的没有过。
1.笔试可以有
这么说嘛,其实简单的笔试的话肯定是可以的。因为笔试的话可以让招聘者知道你大概的能力定位在什么位置?一些逻辑编程可以测试你的逻辑能力。尤其是在it这个行业,逻辑能力是非常重要的。
如果说你是一个已经有工作经验的人。其实笔试就没有那么重要了。这时候看中的一般差不多就是你曾经的项目经历。
如果说让你做一些项目上的,比如说项目架构了这种的,你可以拒绝回答。因为我之前就有听到过说招聘产品经理,让他去设计一个产品的。结果这个公司就是通过一直招聘产品经理。然后让产品经理去设计产品相关的功能,最后再把这些所有求职者的产品相关的思维组合到一起。
虽然说这总公司是很少的,但是也不排除是有只通过这种方式来满足产品需要的。
所以解释的时候可以大概的写一个思路代码的流程,但是可以不用全部都写。
2.上机测试
我觉得这个确切的来说是有一点过分的。像这种上机考试的话,肯定他是需要一个比较完整的项目。但是这种项目谁都不知道是他们公司需要,还是让他仅仅是为了做测试。所以像这种事情完全可以直接拒绝。
在这里大概说明一下。 找工作是一个双向的过程 ,如果说是你无法接受这个公司相关的制度,或者说是相关的流程。其实你可以趁早放弃这种公司的,不然的话即使是你笔试面试都过啦,你到公司之后也会因为你自己的价值观跟企业的文化匹配不到一起。迟早还是要辞职的,所以你要慎重考虑。
其实面试的时候笔试和机试都是it的正常流程,但是在国内被玩烂了,面试和机试过程中,会有公司内遇到的问题做为面试内容的,也许是个人也许是公司,让你解决这样那样的问题,这样子的都是垃圾
作为一个老程序员,关于程序员面试的话题,非常有意思,特别有的聊。其实在 IT 界面,有两个不算公开的秘密,也就是两个不成文的习惯或者规定吧,关于面试的。
让老程序员做笔试题是一种侮辱
很多程序员,尤其是有经验的程序员,去面试的时候,尤其是去小公司面试的时候,如果对方给你出了一套笔试题,很多程序员会说: 我转头就走,这是对我经验水平的侮辱 。
你们是不是感觉很吃惊,还有这种道理?确实是,我有一次去一个创业公司面试,对方给我出了一套笔试题,我做完了,面试完回去跟一些同事聊笔试题的事,他们会惊讶的说:你竟然把笔试题做了?你是有经验的程序员,不应该经过笔试的,直接面试就行,笔试是一种侮辱。那是我才发现,好多程序员都这么认为的。
但是,我感觉这是一种病态思维,你既然去面试,其实笔试也是面试的一种,你去大公司比如 BAT 这样的公司的时候,也会有笔试,而且层层面试好几轮,你都能忍,一些小公司给你出笔试题,你竟然受不了?公司用什么方式来面试你,是公司的选择和考量,当然了,面试是一种双向选择,如果你感觉是侮辱,当然可以选择不面了,这是双方面试的权利。
但是,我感觉笔试是一种正常的流程,跟有没有经验没有关系。有经验了,你笔试你确定能过么?
很多程序员都不会选择上机测试
还有一种就是面对上机做题的面试,很多程序员都不喜欢,其实我也不喜欢的,大部分程序员好像遇到上机面试的情况,也是选择扭头就走。
其实,我感觉上机测试是可以接受的,但是是有条件的,那就是上机做题,可以做算法题,这种方式我能接受。
有一次我去面试,他让我上机做题,竟然跟我说用 Android 写个什么功能,什么模块,简直了,这种题怎么做?直接去实现功能模块,写其中的一个点,我都不熟悉需求,也不熟悉功能模块,上来就写,怎么做?没法弄。我直接就走了。
算法题属于比较明确的东西,上机做两道应该是可以接受的。
你问上机做题的这样面试的公司多吗?可以明确地告诉你,不多,我工作这么多年,面试了很多公司,只遇到过两家。
我是负责我们公司技术面试的,机试环节必不可少。题目不会很难主要是考核程序员的感觉,只有有感觉的程序员才能写好大程序,这很关键。
这主要看做什么了,我最头疼的是拿一个构架来靠你函数命令。我都是自己写数学模型和函数。我哪知道这个构架的函数名?
务实啊,说明人要的是能实干的程序猿,没什么奇怪。面试需求很明确,要会干的。找领导才找会说的。刚毕业面试的时候遇见过这种机试,程序猿这行算是工科,靠技术吃饭,面试动手实战是正常的。
支持,不然很多水逼,划水货太多了
这样的公司会存在
基于以下4个原因:
1 面试的人很多,不想花过多的时间去筛选。这样做题,可以快速过滤一些滥竽充数的人
2 通过合理的上机操作,有针对性地找合适的人,匹配的人也能快速完成上机操作
3 标准,对面试者统一对待,以免主观原因造成误判
4 面试者的配合度,一般看到机试,有人就会直接退出。(我遇到这种情况,就会直接走)
以上4个原因,都是较为正式的原因,还有一个主要原因就是能力不行,面试官无法正确筛选简历,面试官无法从面试中获取想要的信息并加以判断。
基于最后一个原因就是我会选择直接走的原因,面试官能力不行,表示公司对此招聘的用功不足,该公司没有能力或没有意愿重视此次招聘。即使入职,收到的待遇不会重视,没有必要把自己的前景压在一个不会重视你成果的公司上。