仔仔细细做面试题---google2013校园招聘笔试题

2024-01-09 14:10

本文主要是介绍仔仔细细做面试题---google2013校园招聘笔试题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.单项选择题

1.1    使用C语言将一个1G字节的字符数组从头到尾全部设置为字符'A',在一台典型的当代PC上,需要花费的CPU时间的数量级最接近:

     A. 0.001秒      B. 1秒         C. 100秒     D. 2小时

解答:现在机器cpu都是GHz,每次需要若干个指令,大约在1秒。


1.2    在某些极端要求性能的场合,我们需要对程序进行优化,关于优化,以下说明正确的是:

A.  将程序整个用汇编语言改写会大大提高程序性能。

B.  在优化前,可以先确定哪部分代码最为耗时,然后对这部分代码使用汇编语言改写,使用的汇编语句数目越少,程序就运行越快。

C.  使用汇编语言虽然可能提高程序性能,但是降低了程序的可移植性和可维护性,所以应该绝对避免。

D. 适当调整汇编指令的顺序,可以缩短程序运行的时间。

解答:A中,不应该将程序整个改写,应该只改写关键部分,整个改写降低了程序的可移植性和可维护性,B,汇编语句不是数目越少越快,循环等
C。不应该绝对避免

1.3  对如下c语言程序在普通的x86 pc上面运行时候的输出叙述正确的是:

char *f()
{
char X[512];
sprintf(X, "hello world");

return X+6; 
}

void main()
{
printf("%s",f());
}

A.程序可能崩溃,也可能输出hello world

B.程序可能崩溃,也可能输出world

C.程序可能崩溃,也可能输出hello

D.程序一定会崩溃
解答:
 
这个程序是想返回一个数组的值,X是一个数组,是函数f()中的一个局部变量,在这个函数结束的时候,将会释放掉这个数组,

而X+6只是一个指向world的一个地址,f()返回的就是这个地址,但是地址中的内容没有了。

这里主要是讨论的数组返回的问题参考地址: http://www.cnblogs.com/yangxi/archive/2011/09/18/2180759.html


1.4   方程x1+x2+x3+x4 =30有多少满足x1>=2,x2>=0,x3>=-5, x4>=8的整数解?

A.3276      B. 3654   C.2925     D.17550 

解答:整数划分问题;y1 = x1 - 2 >= 0,y2 = x2 >= 0,y3 = x3 + 5 >= 0,y4 = x4 - 8 >= 0;故y1 + y2 + y3 + y4 = 25,Num = 28 * 27 * 26/6 = 3276

1.5   一个袋子里装了100个苹果,100个香蕉,100个桔子,100个梨,如果每分钟从里面随机抽取一个水果,那么最多过多少分钟时间能肯定至少拿到一打相同种类的水果?(1打=12个)

A. 40  B. 12  C.24  D.45

解答:4中水果都取了11个,用时间4*11=44分钟,再取一个。45分钟

1.6      双败淘汰赛与淘汰赛相仿,也是负者出局,但负一场后并未被淘汰,只是跌入负者组,在负者组再负者(即总共已负两场)才被淘汰。现在有10个人参加双败淘汰赛,假设我们取消最后的胜者组冠军VS负者组冠军的比赛,那么一个需要举行多少场比赛?

A. 16  B.17  C.18 D.19 E.20

解答:10个人需要进行9场产生9个第一次失败的人,在失败者的9个人需要8场比赛,淘汰8个人,所以需要9+8=17


1.7     n个节点的二叉树,最多可以有多少层?
A. n/2    B. log(n) C. n-1 D.n

解答:每层一个节点的二叉树

1.8 .
面哪 个序列不是上图的拓扑排序?
A. ebfgadch B.adbdgfch C.adchebfg D.aedbfgch

解答:
拓扑排序方法如下:
(1)从有向图中选择一个没有前驱(即入度为0)的顶点并且输出它.
(2)从网中删去该顶点,并且删去从该顶点发出的全部有向边.
(3)重复上述两步,直到剩余的网中不再存在没有前趋的顶点为止.
在C中h应是的g后面的。

1.9假设某主机安装了2G内存,在其上运行的某支持MMU的32位Linux发行版中,一共运行了X,Y,Z三个进程,下面关于三个程序使用内存的方式,哪个是可行的?
A.X,Y, Z 的虚拟地址空间都映射到0~4G的虚拟地址上
B.X在堆上分配总大小为1GB的空间,Y在堆上分配200MB,Z在堆上分配500MB,并且内存映射访问一共1GB的磁盘文件。
C. X 在堆上分配1GB,Y在堆上分配800MB,Z在堆上分配400MB
D.以上访问方式都是可行的
解答:MMU是内存管理单位,A是对的。其它未知,欢迎补充。
1.10 当使用TCP协议编程是,下列问题哪个是必须由程序员考虑和处理的?
A. 乱序数据包的重传
B.数据传输过程中的纠错
C.网络拥塞处理
D.发生数据的格式和应用层协议

解答:TCP协议功能--- 主要功能是完成对数据报的确认、流量控制和网络拥塞;自动检测数据报,并提供错误重发的功能;将多条路径传送的数据报按照原来的顺序进行排列,并对重复数据进行择取;控制超时重发,自动调整超时值;提供自动恢复丢失数据的功能。

2.程序设计和算法

(2.1,2.2为编程题,需要写出程序实现;2.3为算法设计题,只需要写出算法设计思路及关键步骤的伪代码即可。)

2.1 给定三个整数a,b,c,实现函数int median(int a, int b, int c),返回三个数的中位数。不可以使用sort,要求整数操作(比较,位运行,加减乘除等)次数尽量少。 并分析说明程序最坏和平均情况下使用的次数。

解答:用了三次比较,一次运算。
代码实现:
[cpp]  view plain copy
  1. #include <iostream>  
  2.   
  3. using namespace std;  
[cpp]  view plain copy
  1. int median(int a,int b,int c)  
  2. {  
  3.     int min=a;  
  4.     int max=b;  
  5.   
  6.     if (b<min)  
  7.     {  
  8.         min=b;  
  9.     }  
  10.     else  
  11.     {  
  12.         max=b;  
  13.     }  
  14.   
  15.     if (c<min)  
  16.     {  
  17.         min=c;  
  18.     }  
  19.     else if (c>max)  
  20.     {  
  21.         max=c;  
  22.     }  
  23.   
  24.     return a+b+c-min-max;     
  25.   
  26. }  
  27.   
  28. int main()  
  29. {  
  30.     cout<<median(2,1,3);  
  31. }  


2.2 给定一个key(只含有ASCII编码的小写英文字母),例如kof,然后对input的string(只含有ASCII编码的小写英文字符)利用这个key排序。顺序是:先按照key中的字符排序,然后对key中不包含的字符,按a-z排序;

解答:
思路:(1)用hash表的思想,先对key字和a~z重新排序,可以定义一个26个字符的数组,char hash[26];   对不同的字母对应的给与排序的值,
例如key中为kof,得到的hash['k'-97]=0;  hash['o'-97]=1;hash['f'-97]=2;hash['a'-97]=3;..................

     (2)用快速排序(已可以是其他算法)算法进行排序


代码实现:
[cpp]  view plain copy
  1. #include <iostream>  
  2. #include <string.h>  
  3.   
  4. using namespace std;  
  5.   
  6.   
  7. void swap(char* a,char* b)  
  8. {  
  9.     char temp=*a;  
  10.     *a=*b;  
  11.     *b=temp;  
  12. }  
  13.   
  14. void create_hash(char* hashtable,char* key)  
  15. {  
  16.     int iKeyLength=strlen(key);  
  17.   
  18.     int iValue=0;  
  19.   
  20.     for (int i=0;i<26;i++)  
  21.     {  
  22.         hashtable[i]='#';  
  23.     }  
  24.   
  25.     //先对关键字符排在前面  
  26.     for (int i=0;i<iKeyLength;i++)  
  27.     {  
  28.         hashtable[*(key+i)-97]=iValue;  
  29.         iValue++;  
  30.     }  
  31.   
  32.   
  33.     //对剩余的字符进行排列  
  34.     for (int i=0;i<26;i++)  
  35.     {  
  36.         if (hashtable[i]=='#')               //其中的hashtable[i]==hashtable['a'+i-97]  
  37.         {  
  38.             hashtable[i]=iValue;  
  39.             iValue++;  
  40.         }  
  41.     }  
  42.       
  43. }  
  44.   
  45. //快速排序  
  46. void quick_sort(char* str,int iStart,int iEnd,char* hashtable)  
  47. {  
  48.   
  49.     if (iStart>=iEnd)  
  50.     {  
  51.         return ;  
  52.     }  
  53.     char* pSign=str+iStart;    //将第一个作为划分标志  
  54.     char* pMove=str+iEnd;      //需要比较移动的点  
  55.   
  56.     char* pTemp;  
  57.   
  58.     while(pSign!=pMove)  
  59.     {  
  60.         if (pMove>pSign)  
  61.         {  
  62.             if (hashtable[*pSign-97]>hashtable[*pMove-97])  
  63.             {  
  64.                 swap(pSign,pMove);  //交换值  
  65.                 pTemp=pMove;        //交换指针  
  66.                 pMove=pSign;  
  67.                 pSign=pTemp;  
  68.   
  69.                 pMove++;  
  70.             }  
  71.             else  
  72.             {  
  73.                 pMove--;  
  74.             }  
  75.   
  76.               
  77.         }  
  78.           
  79.         else  
  80.         {  
  81.             if (hashtable[*pSign-97]<hashtable[*pMove-97])  
  82.             {  
  83.                 swap(pSign,pMove);  //交换值  
  84.                 pTemp=pMove;        //交换指针  
  85.                 pMove=pSign;  
  86.                 pSign=pTemp;  
  87.   
  88.                 pMove--;  
  89.             }  
  90.             else  
  91.             {  
  92.                 pMove++;  
  93.             }  
  94.         }  
  95.   
  96.     }  
  97.   
  98.     quick_sort(str,iStart,pSign-1-str,hashtable);  
  99.   
  100.     quick_sort(str,pSign+1-str,iEnd,hashtable);  
  101. }  
  102.   
  103. void sort(char* str,char* key)  
  104. {  
  105.     char hashTable[26];  
  106.     create_hash(hashTable,key);  
  107.   
  108.     quick_sort(str,0,strlen(str)-1,hashTable);  
  109.   
  110. }  
  111.   
  112. int main()  
  113. {  
  114.     char str[]="helloworld";  
  115.     char key[]="kol";  
  116.   
  117.     sort(str,key);  
  118.   
  119.     cout<<str<<endl;  
  120. }  


2.3 一个平行于坐标轴的n*n的网格,左下角(0,0)右上角(n,n),n为非负整数,有n个平行于坐标轴的矩形,每个矩形用左下角(x1,y1)右上角(x2,y2)来表示,x1,y1,x2,y2都是非负整数,现在有非常多个query,每个query会询问一个网格(x,y)(x+1,y+1)一个被几个矩形覆盖。现在要求设计一个算法,使得出来每个query的时间复杂度尽可能低,在这个前提下,预处理的时间复杂度尽可能低。
(1<=n<=1000)






这篇关于仔仔细细做面试题---google2013校园招聘笔试题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/587393

相关文章

荣耀嵌入式面试题及参考答案

在项目中是否有使用过实时操作系统? 在我参与的项目中,有使用过实时操作系统。实时操作系统(RTOS)在对时间要求严格的应用场景中具有重要作用。我曾参与的一个工业自动化控制项目就采用了实时操作系统。在这个项目中,需要对多个传感器的数据进行实时采集和处理,并根据采集到的数据及时控制执行机构的动作。实时操作系统能够提供确定性的响应时间,确保关键任务在规定的时间内完成。 使用实时操作系统的

一些其他面试题

阿里二面:那你来说说定时任务?单机、分布式、调度框架下的定时任务实现是怎么完成的?懵了。。_哔哩哔哩_bilibili 1.定时算法 累加,第二层每一个格子是第一层的总时间400 ms= 20 * 20ms 2.MQ消息丢失 阿里二面:高并发场景下引进消息队列有什么问题?如何保证消息只被消费一次?真是捏了一把汗。。_哔哩哔哩_bilibili 发送消息失败

zookeeper相关面试题

zk的数据同步原理?zk的集群会出现脑裂的问题吗?zk的watch机制实现原理?zk是如何保证一致性的?zk的快速选举leader原理?zk的典型应用场景zk中一个客户端修改了数据之后,其他客户端能够马上获取到最新的数据吗?zk对事物的支持? 1. zk的数据同步原理? zk的数据同步过程中,通过以下三个参数来选择对应的数据同步方式 peerLastZxid:Learner服务器(Follo

java常用面试题-基础知识分享

什么是Java? Java是一种高级编程语言,旨在提供跨平台的解决方案。它是一种面向对象的语言,具有简单、结构化、可移植、可靠、安全等特点。 Java的主要特点是什么? Java的主要特点包括: 简单性:Java的语法相对简单,易于学习和使用。面向对象:Java是一种完全面向对象的语言,支持封装、继承和多态。跨平台性:Java的程序可以在不同的操作系统上运行,称为"Write once,

【秋招笔试】9.07米哈游秋招改编题-三语言题解

🍭 大家好这里是 春秋招笔试突围,一起备战大厂笔试 💻 ACM金牌团队🏅️ | 多次AK大厂笔试 | 大厂实习经历 ✨ 本系列打算持续跟新 春秋招笔试题 👏 感谢大家的订阅➕ 和 喜欢💗 和 手里的小花花🌸 ✨ 笔试合集传送们 -> 🧷春秋招笔试合集 🍒 本专栏已收集 100+ 套笔试题,笔试真题 会在第一时间跟新 🍄 题面描述等均已改编,如果和你笔试题看到的题面描述

【Kubernetes】常见面试题汇总(三)

目录 9.简述 Kubernetes 的缺点或当前的不足之处? 10.简述 Kubernetes 相关基础概念? 9.简述 Kubernetes 的缺点或当前的不足之处? Kubernetes 当前存在的缺点(不足)如下: ① 安装过程和配置相对困难复杂; ② 管理服务相对繁琐; ③ 运行和编译需要很多时间; ④ 它比其他替代品更昂贵; ⑤ 对于简单的应用程序来说,可能不

【附答案】C/C++ 最常见50道面试题

文章目录 面试题 1:深入探讨变量的声明与定义的区别面试题 2:编写比较“零值”的`if`语句面试题 3:深入理解`sizeof`与`strlen`的差异面试题 4:解析C与C++中`static`关键字的不同用途面试题 5:比较C语言的`malloc`与C++的`new`面试题 6:实现一个“标准”的`MIN`宏面试题 7:指针是否可以是`volatile`面试题 8:探讨`a`和`&a`

Laravel 面试题

PHP模块 PHP7 和 PHP5 的区别,具体多了哪些新特性? 性能提升了两倍 结合比较运算符 (<=>) 标量类型声明 返回类型声明 try…catch 增加多条件判断,更多 Error 错误可以进行异常处理 匿名类,现在支持通过new class 来实例化一个匿名类,这可以用来替代一些“用后即焚”的完整类定义 …… 了解更多查看文章底部链接 PHP7 新特性 为什么 PHP

【吊打面试官系列-Redis面试题】说说 Redis 哈希槽的概念?

大家好,我是锋哥。今天分享关于 【说说 Redis 哈希槽的概念?】面试题,希望对大家有帮助; 说说 Redis 哈希槽的概念? Redis 集群没有使用一致性 hash,而是引入了哈希槽的概念,Redis 集群有 16384 个哈希槽,每个 key 通过 CRC16 校验后对 16384 取模来决定放置哪个槽, 集群的每个节点负责一部分 hash 槽。

【Kubernetes】常见面试题汇总(一)

目录 1.简述 etcd 及其特点? 2.简述 etcd 适应的场景? 3.简述什么是Kubernetes? 4.简述 Kubernetes和 Docker的关系? 1.简述 etcd 及其特点? (1)etcd 是Core0s 团队发起的开源项目,是一个管理配置信息和服务发现(service discovery)的项目,它的目标是构建一个高可用的分布式键值(keyvalue)数据