google2017校园招聘笔试题
100M以太网的速率就是100Mbps;
卡车拉硬盘,1000x1000x8/3600=2222Mbps,这个应该是最快的;
MP3在256kbps码率下也平均只有1分钟2MB,所以不会超过0.3Mbps,所以一定是最慢的。
1.2 D
这道题大家走出考场后争议非常大。咱啥也不说,直接进mingw跑一下gcc:
gcc提示的错误是“赋值号的左边操作数需要一个左值”。其原因是调用宏的那句被预处理器替换成了:
*&array-4 =6;
由于减号比赋值优先级高,因此先处理减号;由于减号返回一个数而不是合法的左值,所以编译报错。
1.3 C
这道题我是蒙对的-.- 标准做法是先画出y=1-x的线,上侧阴影部分就是y>1-x,其所占比例为9/32:
1.4 B
这道题我从A开始凑胜负表,直到B凑出结果就OK了。
1.5 B
这道题需要对abcd进行Huffman编码。首先根据权值建立Huffman树,得到最优编码:
a=0, b=10, c=110, d=111
然后数一下就行了。
1.6 D
这道题我是穷举的orz……一共这么几种情况:
118,127,136,145;
226,235,244;
334;
然后有数字重复的算3种排列,不重复的算6种排列,共计4×3+4×6=36种。
1.7 D
这题很基本了。
1.8 D
一般学过操作系统这门课的都会吧,而且个人觉得D这个选项的出现不符合Google风格。
1.9 D
这题其实很好做,因为D肯定是对的,而且ABC的言论太绝对。但如果一定要给出解释的话……
A选项的优化只能针对代码本身,纯系统调用什么的是不会性能提升的(当然也不会下降),
B选项我觉得是在并行优化方面,好的编译器可以从循环中发掘并行性,展开之后就不行了,
C选项有点说不清。消除数据依赖主要有两个方法,一种是SSA,即静态单赋值,这是通过对变量进行重命名实现的,严格的说应该叫“寄存器重命名”而不是“寄存器分配”;另外一种是调换指令顺序,这种只要不是真相关(写后读,RAW)的话都可以消除掉,也不属于寄存器分配。所以感觉不应该选这个。
1.10 B
求最大公约数用的是辗转相除法(欧几里得算法),所以是O(logn)。
2.1
这题比较基本,而且很多企业的笔试都爱考类似的。主要就是对尝试对数a进行质因数分解,最容易写的就是从2开始一直除到sqrt(a),性能提升一点就从2,3然后除奇数一直到sqrt(a)。当然还可以优化一下,建立一个动态质数链表,将之前取到的所有质数加入表进行加速。
2.2
这题我觉得除了重载一下swap函数然后用传统排序法之外也想不出什么高效的做法了。而且要代码实现,时间紧迫也不由得你多想。
2.3
这题个人觉得是这场笔试唯一拉分的题了,基于动态规划算法。事实上就是写出LD算法的伪代码。
【小编推荐笔试题目】
Google笔试题目推荐
Google计算机类笔试题
微软亚洲技术中心笔试题
微软笔试题精解
腾讯笔试题目,绝对有用