一、选择题
1.关于随机测试,以下哪一项说明是正确的?
随机测试是根据测试的经验在无测试用例的情况下进行的测试。
随机测试也是需要写一定的测试用例,但可以用例中没有的测试点。
随机测试不会产生测试冗余。
随机测试是程序员自已开发时候进行的测试。
2. 在对某支持语音聊天的SDK进行利用并二次开发后,关于语音功能的测试用例下列哪项是错误的?
语音聊天功能的测试用例里,应该考虑语音请求发送的测试
发送音频功能的测试用例里,应考虑语音是否能正常被播放的测试
语音聊天功能的测试用例里,应考虑不能正常被接通时,对话框内出现的提示信息的测试
发送音频功能的测试用例里,不需要测试音频未加载成功的测试。
3. 如何将当前目录下所有pdf文件内容转换成txt文件内容?
for *.pdf to *.txt
for f in `ls *.pdf`; do pdftotext “$f”; done
do `ls *.pdf` pdftotext `*.txt`
pdftotext *.pdf *.txt
4. 如何从有数字规律的网址抓取网页并保存在当前目录?假设网址为http://test/0.xml,其中这个数字可以递增到100。
for(int i=0; i<100;++i)
wget http://test/$i.xml;
wget http://test/{$0-$100}.xml
wget http://test/`[0-100]`.xml
for((i=0;i<100;++i));
do
wget http://test/$i.xml;
done
5.统计当前目录和里面递归目录的.cpp文件和.h文件行数
wc -l $(find ./ -name"*.cpp" "*.h")
wc -l $(find ./ -name"*.cpp";find ./ -name"*.h")
find ./ -name "*.cpp" "*.h" | wc -l
wc -l $(find ./ -name"*.cpp" && "*.h")
6.在Linux系统中,可以用来查找可执行文件的是?
(1)whereis
(2)locate
(3)which
(4)type
(5)find
(1)(2)(3)
(1)(2)(5)
(1)(2)(3)(5)
(1)(2)(3)(4)(5)
7. 对于以下关键字{55,26,33,80,70,90,6,30,40,20},增量取5的希尔排序的第一趟的结果是
55,33,30,6,80,70,40,20,26,90
55,6,30,40,20,90,26,33,80,70
55,6,33,30,40,70,20,26,80,90
55, 26,6,40,30,90,33,70,80,20
8. 设二叉排序树中关键字由1到999的整数构成,现要查找关键字为321的节点,下面关键字序列中,不可能出现在二叉排序树上的查找序列是
2、252、400 、398、300、344、310、321
888、231、911、244、898、256、362、366
888、200、666、240、312、330、321
2、398、387、219、266、283、298、321
(二叉排序树(Binary Sort Tree),又称二叉查找树(Binary Search Tree),亦称二叉搜索树。
二叉排序树或者是一棵空树,或者是具有下列性质的二叉树:
(1)若左子树不空,则左子树上所有结点的值均小于或等于它的根节点
的值;
(2)若右子树不空,则右子树上所有结点的值均大于或等于它的根结点的值;
(3)左、右子树也分别为二叉排序树;)
9. 若对如下无向图进行遍历,则下列序列中,不是广度优先遍历序列的是()
e,a,f,g,b,c,d
a,b,e,c,d,f,g
d,b,c,a,e,f,g
f,e,a,d,a,d,g
10. 假设某分时系统采用时间片轮转法,进程A,B,C,D需要运行的时间分别为20ms,10ms,15ms,5ms,时间片选用5ms,则平均周转时间是
20ms
35ms
35.25ms
36.25ms
11. 想实现用装饰器来计时,空白处应填的代码是?
# -*- coding: utf-8 -*-
import time, functools
def metric(fn):
# 空白处
def wrapper(*args, **kw):
startTime = time.time()
tmp = fn(*args, **kw)
endTime = time.time()
print('%s executed in %s s' % (fn.__name__, endTime - startTime ))
return tmp
return wrapper
无需填写
@functools
@time(fn)
@functools.wraps(fn)
12. python是用C语言写成的,根据名字空间特性,以下代码经过python编译器编译后,一共得到()个PyCodeObject对象。
lass A:
pass
def Fun():
pass
a = A()
Fun()
= A()
Fun()
1
2
3
4
13. 下列关于UDP通信的说法错误的是()
发送数据之前不需要建立连接
没有拥塞控制
传输数据的时候对报文长度没有要求
一般用在数据传输要求不高的场合
14. 关于HTTP1.0和HTTP1.1错误的是()
HTTP1.0只能短连接,而HTTP1.1只能长连接
HTTP1.0通信的时候会占用大量内存,而HTTP1.1可以避免这样的情况
状态码100只适用于HTTP1.1版本
HTTP1.1 在 Request 消息头里多了一个 Host 域,HTTP1.0 则没有这个域
15. 下面关于进程和线程说法错误的是()
进程是系统进行资源分配和调度的基本单位,而线程是CPU调度和分配的基本单位
线程也拥有自己的系统资源
一个线程可以创建和撤销另一个线程
一个进程中的多个线程共享资源
进程有独立的地址空间,线程没有。线程是共享进程的地址空间。所以B错。
进程是 操作系统进行资源分配和调度的一个
独立单位,而线程只是CPU调度和分派的基本单位
进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,是操作系统进行资源分配和调度的一个独立单位;
线程是进程的一个实体,
一个进程中包含多个线程。是CPU调度和分派的基本单位,是比进程更小的能独立运行的基本单位
主线程CreateThread创建新线程
16. 下面关于死锁的说法错误的是()
死锁是指多个进程因抢占资源而发生的一种阻塞且相互等待的现象
死锁的产生源于系统资源不足和进程推进顺序不当
可以通过终止和撤销进程来解除死锁
银行家算法用在预防死锁策略中
银行家算法通过控制资源分配避免死锁(避免死锁并不是预防死锁)
17. 用1*3的瓷砖密铺3*20的地板有几种方式?
1278
872
595
406
分两种情况:
如果第i个位置,是竖着放的,那么个数就是a[i-1];
如果第i个位置是横着放的,那么个数就是a[i-3]。
所以相加就是总数。
18. 一个完全二叉树节点数为200,则其叶子结点个数为?
98
99
100
101
19. 基于哈希算法在信息安全中主要应用在?
(1) 文件校验
(2) 数字签名
(3) 鉴权协议
(1)(2)
(1)(3)
(2)(3)
(1)(2)(3)
20. 下列选项中,不可能是快速排序第2趟排序结果的是 ()
4 14 10 12 8 6 18
4 6 10 8 12 14 18
6 4 10 8 14 12 18
8 4 6 10 12 14 18
二、编程题
21. 小Q得到一个神奇的数列: 1, 12, 123,...12345678910,1234567891011...。
并且小Q对于能否被3整除这个性质很感兴趣。
小Q现在希望你能帮他计算一下从数列的第l个到第r个(包含端点)有多少个数可以被3整除。
输入描述:
输入包括两个整数l和r(1 <= l <= r <= 1e9), 表示要求解的区间两端。
输出描述:
输出一个整数, 表示区间内能被3整除的数字个数。
示例1
输入
2 5
输出
3
说明
12, 123, 1234, 12345...
其中12, 123, 12345能被3整除。
l, r = [int(n) for n in input().split()]
n1 = 0
num= 0
if l % 3 == 1:
num += (r-l+1)//3
if (r-l+1) % 3 >= 1:
num += 1
elif l % 3 == 2:
num += (r-l+1)//3
else:
num += (r-l+1)//3
if (r-l+1) % 3 >= 2:
num += 1
print ((r-l+1) - num)
(说明:余数规律题,输入数对3取余只有0,1,2三种余数,分三种情况进行讨论)
22. 平面内有n个矩形, 第i个矩形的左下角坐标为(x1[i], y1[i]), 右上角坐标为(x2[i], y2[i])。
如果两个或者多个矩形有公共区域则认为它们是相互重叠的(不考虑边界和角落)。
请你计算出平面内重叠矩形数量最多的地方,有多少个矩形相互重叠。
输入描述:
输入包括五行。
第一行包括一个整数n(2 <= n <= 50), 表示矩形的个数。
第二行包括n个整数x1[i](-10^9 <= x1[i] <= 10^9),表示左下角的横坐标。
第三行包括n个整数y1[i](-10^9 <= y1[i] <= 10^9),表示左下角的纵坐标。
第四行包括n个整数x2[i](-10^9 <= x2[i] <= 10^9),表示右上角的横坐标。
第五行包括n个整数y2[i](-10^9 <= y2[i] <= 10^9),表示右上角的纵坐标。
输出描述:
输出一个正整数, 表示最多的地方有多少个矩形相互重叠,如果矩形都不互相重叠,输出1。
示例1
输入
2
0 90
0 90
100 200
100 200
输出
2
import sys
lines = sys.stdin.readlines()
n = int(lines[0])
x1 = list(map(int,lines[1].split()))
y1 = list(map(int,lines[2].split()))
x2 = list(map(int,lines[3].split()))
y2 = list(map(int,lines[4].split()))
res = 1
for x in x1+x2:
for y in y1+y2:
cnt = 0
for i in range(n):
if x > x1[i] and y > y1[i] and x <= x2[i] and y <= y2[i]:
cnt += 1
res = max(res,cnt)
print(res)
23. 牛牛总是睡过头,所以他定了很多闹钟,只有在闹钟响的时候他才会醒过来并且决定起不起床。从他起床算起他需要X分钟到达教室,上课时间为当天的A时B分,请问他最晚可以什么时间起床
输入描述:
每个输入包含一个测试用例。
每个测试用例的第一行包含一个正整数,表示闹钟的数量N(N<=100)。
接下来的N行每行包含两个整数,表示这个闹钟响起的时间为Hi(0<=A<24)时Mi(0<=B<60)分。
接下来的一行包含一个整数,表示从起床算起他需要X(0<=X<=100)分钟到达教室。
接下来的一行包含两个整数,表示上课时间为A(0<=A<24)时B(0<=B<60)分。
数据保证至少有一个闹钟可以让牛牛及时到达教室。
输出描述:
输出两个整数表示牛牛最晚起床时间。
示例1
输入
3
5 0
6 0
7 0
59
6 59
输出
6 0
#!-*-coding:utf-8-*-
N = int(input())
time_list = []
lines_list = []
for i in range(N):
lines = input().split()
lines_list.append(lines)
time_list.append(int(lines[0]) + int(lines[1])/60.)
time_cost = int(input()) / 60.
class_time = [int(n) for n in input().split()]
deadline = int(class_time[0]) + int(class_time[1]) / 60.
last_time = deadline - time_cost
index = 0
for j in range(N):
if time_list[j] <= last_time and time_list[j] > time_list[index]:
index = j
print (lines_list[index][0],lines_list[index][1])
三、问答题
24. 目前有一个商品表,包含商品id,商品名称,商品价格。请问:如何查询价格大于100,小于500的商品id以及名称?
25. 随着商品类型的增加,在第1题的基础上商品增加sku属性,新增一张sku表,包含商品id ,skuid,sku名字,sku价格
请问:如何查询最低价大于100的商品id以及名称?
SELECT id, product_name FROM Sku WHERE sku_price > 100;
26. 考拉的一个基本购物流程如下:
1、用户选择商品G1...GN(假设有N个商品)
2、判断N个商品是否参加活动A1(活动有时间周期),参加则按照活动价PAn购买,未参加则按照正常价Pn购买
请作答:
(1)请用熟悉的语言编写实现以上流程,数据库相关可简单设计
(2)针对编写的代码,设计测试用例覆盖测试点