史上最难程序员的面试题!谷歌、百度、微软、阿里必答题

相信广大程序员们在生活中一定都碰到过这样的事情:

亲戚:小明,听你妈说你是计算机专业毕业的?现在XX公司做程序员?

程序员:嗯,阿姨,怎么了吗?

亲戚:你看,最近我家崽学什么DIY电脑,自己拆了电脑重装后就坏掉了,你能不能修修。

程序员:阿姨,我也不会修。

亲戚:不用马上修,你有时间来我们家看看就行了,阿姨下次介绍单位的小姑娘给你认识。

程序员:阿姨,我真不会修。

亲戚:程序员不就是专门处理电脑问题的吗?还装不会修,不愿意直接说嘛!(只见亲戚扬长而去,留下程序员在风中凌乱)
史上最难程序员的面试题!谷歌、百度、微软、阿里必答题_第1张图片

可能会有些网友认为上面这个事例有点过于夸张了,毕竟现在已经是21世纪了,相信大多数人应该对程序员都有一定的认知(tan90°)。

根据有关调查显示,大部分人都认为程序员很会修电脑。

史上最难程序员的面试题!谷歌、百度、微软、阿里必答题_第2张图片
外行之所以对程序员会产生如此大的误解,根本原因还是程序员解释少了。什么叫做解释少了呢?就是每当外行向程序员讨教行内业务的时候,程序员总是不能很好的诠释相关业务的定义。就好比”什么是数据库?“这个问题,完整的解释太长,不完整的解释不够全面,于是干脆就不解释了。

久而久之,外行对程序员的认知也就越来越少了,而向外行解释行内业务也成了众多程序员迈不过的一道坎。

最近小编在逛论坛的时候刚好看到了几篇相关的文章,在这里分享给大家:

Google, 百度,Microsoft,华为,Alibaba面试题

怎样用三句话向一个 8 岁小孩解释什么是数据库
备选答案:

数据库就是你装玩具的抽屉,一个抽屉装一类玩具,这就数据库嘛
就象一個智能的玩具箱,所有玩具都放在里面很整齐,当想玩哪个时只要喊一声它就会自己从箱里跑出来
孩子,你还小,大了就知道了
史上最难程序员的面试题!谷歌、百度、微软、阿里必答题_第3张图片
电脑里面存了好多好多数据。数据就像各种各样中药,在没有数据库之前,中药就是一包包这样杂乱无章地堆放着(unorganized data),找也不好找(inaccessible)。如果你是药店的掌柜,你怎么来管理这些药呢?

聪明的古人就想了办法:把所有的中药都放到柜子里面(data table),柜子里面都是大小一样的小盒子(organized data model),每个盒子(a row / record)都在外面标签上写上药名,按笔划排序帮助快速查找(index / primary key),比如你要找三七,那么一定是三笔的头几个——现在找东西是不是方便多了?

如果要找一味温热的药,按名字找可就不大灵了,除了打开抽屉一个一个舔过去,还有什么办法快速找到吗?对啦,就是在抽屉上涂上颜色,比如温热的用粉红色,凉性的用蓝色(secondary key),你还可以用不同大小的抽屉代表药的其他属性(another secondary key)

如果有的药卖空了没有货怎么办?把整个抽屉拿走(delete a row)!如果新增加一种药怎么办?找一个空抽屉放上新药贴个标签呗(add a row)!如果整柜子中药都过期了怎么最快处理?把柜子搬走(drop a table),换个新柜子(create a table),再往里面添加新鲜中药。

如果有一种药量特别大,放在另外一个抽屉大一点儿的柜子里怎么办呢(splitted table)?在这个抽屉里放一张纸条,写上“此药在后堂第三个柜子第二个抽屉”(Foreign key / linked table)。

最后再分享一道益智题(答案在文章末尾):
有10瓶药,每瓶里面有n颗药丸,其中有9瓶药每颗重1g,剩下1瓶药每颗重0.9g。用一个小秤,只称一次,如何找出0.9g的那瓶药?
史上最难程序员的面试题!谷歌、百度、微软、阿里必答题_第4张图片

我自己是一名大数据架构师,目前辞职在做线上教育大数据讲师,每天都会直播分享免费公开课,大家可以加群参加。以及我自己整理了一套最新的大数据学习系统教程,包括Hadoop,数据挖掘,数据分析。送给正在学习大数据的小伙伴!这里是大数据学习者聚集地,欢迎初学和进阶中的小伙伴!加QQ群:584900118(招募中)

答案:将10瓶药编号1至10,分别从每瓶药中取出与编号相同数量的药丸(即第n瓶取n颗)。将取出的所有药丸一起称重,若重量为54.8g,则第2瓶为我们要找的答案。
最终我们解决问题的方法其实就是计算机算法!

你可能感兴趣的:(史上最难程序员的面试题!谷歌、百度、微软、阿里必答题)