2019年腾讯实习正式批移动端开发笔试题
说明
- 题目分为不定项选择题与编程题。
- 不定项题20道,错选漏选均不得分。
- 编程有三道,通过10个case才算通过。
- 编程题可以跳出答题页面,在本地IDE写完调试完后,粘贴到网页答题页面制定处,不定项选择题不能跳出,跳出超过两次会被标记为有作弊嫌疑!,我就是360一次弹窗,浏览器一次弹窗,WPS一次弹窗导致我被判断为有作弊嫌疑。。。
不定项选择题
- 关于c语言内容,下面说法不正确的是?
- a) 堆,他们的释放编译器不去管,由我们的应用程序去控制,如果程序员没有释放掉,那么在程序结束后,操作系统会自动回收。
- b) 自由存储区,就是那些由new等分配的内存块,他和堆是十分相识的,不过他是用delete来结束自己的生命的。
- c) 全局/静态存储区,,全局变量和静态变量被分配到同一块内存中,在以前的C语言中,全局变量又分为初始化和未初始化的,在C++里面没有这个分区了,他们共同占用同一块内存区。
- d) 栈,在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。
- 关于C++编译过程,下面说法不正确的是?
- a) 编译过程其实是跟汇编可以合成一个阶段,完成目标代码。也就是二进制文件。
- b) 链接过程是将单个编译后的文件链接成一个可执行程序。
- c) 链接将所有关联到的编译后单元文件和应用的到库文件,进行一次链接处理,之前编译过的文件,如果有用到其它文件里面定义到的函数,全局变量,在这个过程中都会被解析。
- d) 汇编过程,就是把已经预编译的文件汇编成汇编代码的过程,整个过程会包含语法,词法的分析,和一些优化操作。包括读取C/C++源程序,对其中的伪指令(以#开头的指令)进行处理。
- 某系统有3个资源A,B,C,有四个a,b,c,d进程申请它们,其中,a进程需要B和C资源才能执行,b需要A和C资源才能执行,c需要A和B资源才能执行,d只需要C资源就能执行了,若此时的系统处于死锁状态,那么最少有几个进程处于死锁?
- a) 2
- b) 3
- c) 4
- d) 1
- 有一类二叉树用三叉链表来存储的时候除了带有指向左右孩子节点的两个指针,还有指向父节点的指针,那么这样一个二叉树有n个节点,那么有多少指针指向NULL(对于不存在的节点表示为空)?
- a) n+2
- b)2n+1
- c) 2n+2
- d)n+1
- e) n
- char *point指针指向字符串“Tencent”,则std::cout<<*point+3的输出结果可能是什么?
- a) 编译出错,无法输出
- b) Tencent
- c) T
- d) c
- e) cent
- 下面关于分页存储管理的说法错误的是()
- a) 分页地址结构由页号和位移量组成
- b) 逻辑地址到物理地址的转换借助于页表来实现
- c) 分段管理方式可以满足了动态增长及动态链接等多方面的需要
- d) 分段管理方式是从计算机的角度考虑的,目的是提高内存的利用率,提升计算机的性能
- e) 分页存储管理将进程的逻辑地址分为若干页,并将物理内存分成若干块
- 现假设有N个元素进栈序列是1,2,……,n,其出栈序列是C1,C2,C3,Cn,若C2=3,以下说法正确的是()
- a) C3可能是1
- b) C1一定是4
- c) C3不可能是4
- d) C3可能是2
- e) C1可能是1
UIview *aView = [[UIView alloc]initWithFrame CGRectMake(10,10,100,100)].
[self view addSubview aView].
UIView *bView = [[UIView alloc]initWithFrame CGRectMake(10,10,50,50)].
[aView addSubview bView].
UIView *cView = [[UIView alloc]initWithFrame CGRectMake(10,10,25,25)].
[bView addSubview cView].
CGRect rect = [cView convertRect bView.frame fromView aView].
以上代码段中rect的值为:
- a) (x:20 y:20 width:25 height:25)
- b) (x:-10 y:-10 width:50 height:50)
- c) (x:-20 y:-20 width:25 height:25)
- d) (x:10 y:10 width:50 height:50)
- 假设腾讯大学选课表的表结构如下所示,现在小Q老师希望在课程成绩不小于60分的学生中,找出选修课4门及4门以上的学生,并且按照总成绩的降序排列出来,那么下面正确的sql语句是
CREATE TABLE 'test'{
'id' int(11) NOT NULL AUTO_INCREMENT.
'sid' int(11) DEFAULT NULL COMMENT '学号'.
'cid' int(11) DEFAULT NULL COMMENT '课程号码'.
'score' int(11) DEFAULT NULL COMMENT '课程成绩'.
PRIMARY KEY ('id').
UNIQUE KEY 'sid' ('sid','cid')
}ENGINE=innoDB.
- a)
SELECT sid,SUM(score) FROM test
WHERE score >= 60
GROUP BY sid
HAVING COUNT(*) >= 4
ORDER BY SUM(score) DESC
- b)
SELECT sid,SUM(score) FROM test
WHERE score >= 60
HAVING COUNT(*) >= 4
GROUP BY sid
ORDER BY SUM(score) DESC
- c)
SELECT sid,SUM(score) FROM test
WHERE sid in (SELECT distinct(sid) FROM test where score >= 60)
GROUP BY sid HAVING COUNT(*) >= 4 ORDER BY sum(score) DESC
- d)
SELECT sid,SUM(score) FROM test
WHERE score >= 60
GROUP BY sid
ORDER BY SUM(score) DESC
HAVING COUNT(*) >= 4
#include <iostream>
class Parent{
public:
Parent(){std::cout<<"x";}
Parent(const Parent &p){std::cout << "y";}
const Parent &operator=(const Parent &p){
std::cout << "z";
return *this;
}
};
int main(){
Parent p;
Parent p1(p);
Parent p2 = p;
p2 = p1;
}
根据C++11标准,以上代码的输出为:
- a) xyzz
- b) xzyy
- c) xzzy
- d) xyyz
- e) xxyz
- 一个小根堆的序列为[2,9,4,15,28,10,6],删除根节点2之后,小根堆会自动调整重新变为小根堆,那么在这个调整过程中,关键字的比较次数为多少?
- a) 4
- b) 5
- c) 6
- d) 3
- e) 2
- constexpr是C++1的一种用来表示常量的新用法,作用类似于#define定义常量,那么下面哪些式子可能是错的?
#include <iostream>
int main()
{
int var1 = 0,var2 = 1;
const int *a1 = &var1;
a1 = &var2;//1
const int a2 = var1;
constexpr int b = a2;//2
constexpr int c = 1;//3
int arr[c];//4
return 0;
}
- a) 3
- b) 4
- c) 全对,没有错误
- d) 2
- e) 1
- 有一个日志文件tencent. log,其中每行的内容是服务器的ip地址,下面哪个命令可以找到次数最多的前五个ip和出现的次数
- a) sort tencent.log | uniq –c | sort –rn | head –n 5
- b) cat tencent.log | sort | uniq –c | sort – rn | head –n 5
- c) uniq –c tencent.log | sort –nr | top –n 5
- d) cat tencent.log | count –n | sort –rn | head –n 5
- 如果存储结构由数组变为链表,那么下列哪些算法的时间复杂度星级会升高
- a) 希尔排序
- b) 堆序列
- c) 插入排序
- d) 选择排序
- e) 冒泡排序
- 下列选项中对TCP与UDP论述正确的是?
- a) TCP支持一对一,多对一和多对多的交互通信
- b) TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流
- c) UDP是无连接的,即发送数据之前不需要建立连接
- d) TCP是面向连接的,如打电话要先拨号建立连接
- 关于java深拷贝,浅拷贝,值传递,引用传递,说法错误的是
- a) 如果希望将对象A内的所有属性全部copy到对象s内,且当A内的属性发生变化后,s对象内的属性并不会随之改变,这种情况一般就需要对应的类实现Cloneable接口来完成深拷贝的复制。
- b) 可以通过序列化的方式来快捷的实现深拷贝
- c) 浅拷贝的对象可能会由于内存空间不足等问题而被系统随时释放掉。
- d) 对于基本数据类型,一般赋值都使用值传递,而对于引用数据类型,一般都使用引用传递
- 在一个p*q的网格中,小q要从左上角走到右下角,但是只能向右或向下走,countWays是计算有多少种做法的,请问横线处的代码应该是?
public int countWays(int p,int q){
if(p == 1 || q == 1)
return 1;
return _____;
}
- a)
countWays(p-1,q-1) * 2
- b)
countWays(p-1,q) + countWays(p,q-1)
- c)
countWays(p-1,q) + countWays(p,q-1) + countWays(p-1,q-1)
- d)
m * n / 2
- e)
(m + n) / 2
- 假设身份证表中含有100万条数据,其中身份证字段card_num上创建了唯一索引,且我们假设身份证全部由数字组成,要统计开头为100的身份证号码的数量,下面写法执行速度最慢的是…
- a)
select count(*) from card where card_num like ‘100%’’
- b)
select count(*) from card where substr(card_num,1,3) = ‘100’
- c)
都一样快
- d)
select count(*) from card where card_num>=’100’ and card_num < ‘100a’
- 以下代码输出多少?
#include <iostream>
int main()
{
int n = 2019;
int count = 0;
while(n) {
count++;
n = n&(n-1);
}
std::count << count << std::endl;
}
- a) 8
- b) 10
- c) 无限循环
- d) 9
- e) 7
- f) 6
- 假设公司网络中产生了一个IP数据包,头部长度为20字节,数据部分长度为3200字节,需要经过2个网络才能到达目的地A,其中这两个网络的最大传输单位MTU分别为1500字节和600字节,那么当报文到达目的地A的时候,被分成了几个小的IP报文?
- a) 6
- b) 7
- c) 8
- d) 5
- e) 4
编程题
1、小Q与橙汁
题目描述
小Q非常喜欢喝橙汁,在他生日的时候他的父亲送了他n瓶橙汁,第i瓶橙汁的体积是Vi毫升。小Q像先喝一部分,剩下的后面慢慢喝。他想先倒出s(注意不是5)毫升,同时为了获得双倍的快乐,他想让剩下的橙汁中体积最少的尽可能大。请你帮助他计算出当他倒了s毫升果汁并且获得了双倍的快乐后,剩下的橙汁中体积最小的是多少。
注意从每瓶橙汁中取走的橙汁的体积只能是整数。
我怎么感觉纯属闲的蛋疼。。。
输入描述
第一行两个整数n,s,用一个空格分隔;
第二行n个整数vi,表示每瓶果汁的体积,每两个正整数之间用一个空格分隔。
满足1 <= n <= 1000,1 <= s <= 109。
输出描述
一个整数,表示最小的橙汁的体积,如果无法倒出s毫升的橙汁,则输出-1。
示例1
输入
3 5
1 1 1
输出
-1
示例2
输入
2 9
5 10
输出
3
2、打怪兽
题目描述
小Q打算穿越怪兽谷,他不会打怪,但是他有钱,他知道,只要给怪兽一定的金币,怪兽就会一直护送着他出谷。
在谷中,他会依次遇见N只怪兽,每只怪兽都有自己的武力值和要“贿赂”它所需的金币数,如果小Q没有“贿赂”某只怪兽,而这只怪兽“武力值”又大于护送他的怪兽武力之和,这只怪兽就会攻击他。
小Q想知道,要想成功穿越怪兽而不被攻击,他最少要准备多少金币。
输入描述
第一行输入一个整数N,代表怪兽的只数。
第二行输入N的整数d1,d2,。。。,dn,代表武力值
第三行输入N个整数p1,p2,。。。,pn,代表收买第N只怪兽所需的金币数
(1 <= N <= 50,1 <= d1,d2,…,dn <= 1012,1 <= p1,p2,…,pn <= 2)
输出描述
输出一个整数,代表所需最小金币数
示例1
输入
3
8 5 10
1 1 2
输出
2
示例2
输入
4
1 2 4 8
1 2 1 2
输出
6
3、小Q分数
题目描述
小Q有一天突发奇想,把1到2*n的数分为相同大小的两组A和B(即长度都是n)。
然后按照从小到大排序之后,对于1 <= i <= n,均满足abs(A[i] - B[i]) >= k。其中abs表示绝对值。
小Q觉得这个问题对于他来说没有挑战,所以想考考你,让你计算出所有满足条件的分配方案数。
输入描述
输入两个整数n(1 <= n <= 50),k(1 <= k <= 10)。
输出描述
输出一个整数
示例1
输入
2 2
输出
2
说明
A = {1,2} B = {3,4}
A = {3,4} B = {1,2}
后语
在递出腾讯实习的简历时,我还在迷茫是考研还是出来工作,也想看看腾讯的笔试题到底是怎样的,我没想到这么难。我明明报的是移动端开发,但却又考数据库,C语言,C++,Object-C,数据结构,这套题估计是为软件工程那边的人准备的吧。
我现在想清楚了,与其实习还不如参加“国赛”,尽管要考研,但是我真的想挑战一下自己,“国赛”只有在大学阶段才能参加!!!
文章到底了,不点个赞再走嘛?