单选题

Q1

  1. 关于以下C++代码,输出正确的是()
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    #include <iostream>
    using namespace std;
    int compute(int x,int y);
    int main(void)
    {
    float a = 2.6, b = 3.4;
    int p;
    p = compute((int)a, (int)b);
    cout << p;
    return 0;
    }
    int compute(int x,int y)
    {
    int i, p = 1;
    for (i = y; i > 0; i--)
    p *= x
    return p;
    }
  • A. 81
  • B. 27
  • C. 9
  • D. 8

Q2

  1. 下面哪一项不属于HTTP2和HTTP1.1的区别()
  • A. 采用多路复用
  • B. 支持头部压缩
  • C. 采用长连接
  • D. 采用二进制格式

Q3

  1. 在SQL中有以下数据表定义以及表的数据,要检索订单表中”所有订单量小于等于3的订单id及商品id”,SQL语句正确的是()
    1
    2
    3
    4
    5
    6
    CREATE TABLE order_table(
    id bigint auto_increment primary key,
    order_id bigint comment '订单id',
    sku_id int comment '购买的商品sku_id',
    buy_num int comment '购买该sku个数'
    );
  • A. SELECT order_id,sku_id FROM order_table WHERE buy_num != 3;
  • B. SELECT order_id,sku_id FROM order_table WHERE buy_num <= 3;
  • C. SELECT order_id,sku_id From oder_table;
  • D. SELECT * FROM order_table WHERE buy_num <= 3;

Q4

设哈希表长m=18, 哈希函数H(key)=key%18, 表中已有10个结点,其存放地址分别是1,3,5,7,9,11,13,15,17(其余地址为空),如使用二次探测再散列法处理冲突,现插入关键字为45的结点地址应是()

  • A. 12
  • B. 10
  • C. 2
  • D. 0

Q5

设无向图G=(V,E),顶点集V={A,B,C,D,E,F,G,H}, 边集E={(A,C), (A,B), (B,D), (B,E), (C,D), (E,F), (E,G),(F,H), (G, H)},则下列选项中,属于BFS序列的是()

  • A. A,B,D,C,E,G,F,H
  • B. A,C,B,E,D,F,G,H
  • C. A,B,D,E,C,F,G,H
  • D. A,B,C,D,E,F,G,H

Q6

现采用KMP算法,对模式串S=”abcabcabc”和主串T=”abccbcabcabcabc”进行匹配,设匹配成功过程中进行的字符间比较的次数为x,规定x与主串长度之比称为匹配效率α,求这次KMP匹配算法的α()

  • A. 17/15
  • B. 16/15
  • C. 15/15
  • D. 13/15

Q7

下面Java代码的运行结果为()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public static void main(String[] args){
List<String> list = Arrays.asList("A", "B", "C");
List<String> resultList = new ArrayList<>();

list.stream()
.filter(item -> {
System.out.print(item);
return true;
})
.forEach(item -> {
if (item.equals("B")) {
resultList.add(item);
return;
}
resultList.add(item.toUpperCase());
});
System.out.println("\n" + resultList);
}
  • A. 运行错误
  • B. 编译错误
  • C. ABC [A,B,C]
  • D. ABC [A,B]

Q8

执行以下这段SQL会得到什么结果()

1
2
3
4
SELECT * FROM ClassA
WHERE age NOT IN (
SELECT age FROM ClassB
WHERE city = '长沙');
  • A. 得到与ClassA中city为长沙的学生且不在ClassB中的学生信息
  • B. 得到与ClassB中city为长沙的学生age相同的ClassA中的学生信息
  • C. 得到与ClassB中city为长沙的学生age不同的ClassA中的学生信息
  • D. 得到居住城市city在长沙的学生信息

Q9【漏拍了】

Q10

已知一作业P:主程序是一个独立的段,程序大小为30KB,它调用子程序1和2,子程序1大小为8KB,子程序2大小为10KB,且子程序1和2是互斥调用的两个程序段,子程序1执行的过程中调用子程序11,子程序11大小为15KB,程序2执行的过程中调用子程序21和22,子程序21大小为20KB,子程序22大小为25KB,且子程序21和22是互斥调用的两个程序段,为作业P建立覆盖结构:主程序段是常驻内存,其余部分组成覆盖段,如下图,为了实现真正的覆盖,相应的覆盖区(1)、(2)的大小应该分别为()

内存区 (1) (2) 主程序(30KB)
  • A. 10KB, 8KB
  • B. 8KB, 10KB
  • C. 10KB, 10KB
  • D. 25KB, 10KB

不定项选择

Q1

下列有关系统安全状态的说话正确的是()?
A. 系统进入不安全状态后可能进入死锁状态
B. 系统进入不安全状态后一定进入死锁状态
C. 系统处于安全状态时系统可能不会进入死锁状态
D. 系统处于安全状态时系统一定不会进入死锁状态

Q2

下列哪些应用层协议使用了TCP传输()
A. HTTP
B. SSH
C. TFTP
D. DNS

Q3

下面关于Linux内存管理的说法正确的是()
A. Linux通过系统调用malloc分配物理内存
B. Linux内核支持内存映射技术,将磁盘上的文件映射到进程的虚拟内存空间中
C. Linux内核使用页面置换技术,将不常用的内存页面交换到磁盘上的交换分区或交换文件中,以释放内存空间
D. Linux内核使用快存储器(slab)分配器来管理内存

Q4【漏拍了】

Q5

下面关于Java中this和super的说法正确的是()
A. this()可以在static方法中使用,super()不能在static方法中使用
B. this()主要是在同一类的不同构造函数中的使用,super()主要是在继承了父类的子类的构造函数中使用
C. super()主要是对父类构造函数的调用,this()是对本类构造函数的调用
D. this()和super()都必须在构造函数的第一行进行调用,否则会报错

Q6

以下排序算法中,最坏情况下时间复杂度为O(n^2)的是()
A. 快速排序
B. 冒泡排序
C. 基数排序
D. 归并排序

Q7

下面关于C++中命名空间的说话正确的是()
A. 命名空间可以定义在函数的内部
B. 命名空间可以定义在类的内部
C. 命名空间可以定义在全局作用域
D. 命名空间可以嵌套

Q8

MySQL的select查询中以like模糊查询,以下是like模糊查询通配符的是()
A. “
B. ?
C. _
D. %s

Q9

在128个元素组成的有序表中,采用二分查找算法查找一个不存在的元素,可能的比较次数为()
A. 10
B. 9
C. 8
D. 7

Q10

下列是作业在CPU上运行的一些描述,说法正确的是()
A. 在作业编译或执行时,要对有关的地址部分加以相应的修改,即将作业的逻辑地址变为物理地址
B. 在作业装入或执行时,要对有关的地址部分加以相应的修改,即将作业的逻辑地址变为物理地址
C. 在一般情况下,一个作业在装入时分配到的内存空间和它的地址空间是一致的
D. 在一般情况下,作业在CPU上运行时,当需要访问指令时,其所要访问指令的物理地址和逻辑地址是不同的

编程题

Q1 相加异或

题目描述

对于一个数组c,定义f(c)为c数组所有元素的总和

现在给定两个长度为n的数组a,b,请你恰好删除一个数组a的元素或者一个数组b的元素,使得f(a)异或f(b)最大.

输入

第一行输入一个整数n
第二行输入n个整数ai
第三行输入n个整数bi
1 <= n,ai,bi <= 10^5

输入

输出最大的异或和

示例

输入:

1
2
3
3
1 2 3
3 2 1

输出:

1
5

说明:
删除a数组的3

代码: AC 100%

相加异或view raw
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import sys
n = int(input())
list_a = [int(i) for i in input().split(' ')]
list_b = [int(i) for i in input().split(' ')]


def max_xor_difference(a, b):
sum_a = sum(a)
sum_b = sum(b)

max_xor_result = 0
for i in a:
max_xor_result = max(max_xor_result, (sum_a - i) ^ sum_b)
for i in b:
max_xor_result = max(max_xor_result, (sum_b - i) ^ sum_a)

return max_xor_result


result = max_xor_difference(list_a, list_b)
print(result)

Q2 米小游与魔法少女-奇运

题目描述

米小游都快保底了还没抽到希儿,好生气哦!只能打会儿活动再拿点水晶了.

米小游和世界第一可爱的魔法美少女TeRiRi正在打BOSS,BOSS的血量为h,当BOSS的血量小于等于0时,BOSS死亡.TeRiRi有一套牌,在一轮中,她会按照顺序一张一张将卡牌打出,套牌中有两种卡牌:

  1. 时来运转:获得x个幸运币
  2. 幸运一掷:造成x点伤害,并投掷所有幸运币,造成等于所有幸运币掷出的点数之和的伤害.

幸运币可以等概率的投掷出1-6之间的点数.(所以为什么不叫骰子呢?)
米小游想知道,TeRiRi的套牌在一轮内击杀BOSS的概率.

输入

第一行输入两个整数n(1<= n <= 100), h(1 <= h <= 10^9),分别表示卡牌张数和BOSS血量
接下来n行,每行首先输入两个整数t(1 <= t <= 2),x(1 <= x <= 10),t为1表示卡牌为时来运转,t为2表示卡牌为幸运一掷.

输入

输出一个实数表示答案,你的答案与标准答案的误差不超过10^-4都被认为时正确答案

示例

输入:

1
2
3
2 5
1 1
2 1

输出:

1
0 5

说明:
幸运币掷出4及以上的概率为0.5,再加上1点固定伤害,即可击杀BOSS.

输入:

1
2
3
4
3 1145
1 4
1 9
1 9

输出:

1
0

说明:
无论如何都无法击杀BOSS.

代码: AC 5%

米小游与魔法少女-奇运view raw
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import sys
from itertools import product

[n, h] = [int(i) for i in input().split(' ')]


def roll_dice(x):
outcomes = list(product(range(1, 7), repeat=x))
return outcomes


def calculate_probabilities(x):
outcomes = roll_dice(x)
total_outcomes = len(outcomes)
probabilities = {}
for outcome in outcomes:
sum_outcome = sum(outcome)
if sum_outcome in probabilities:
probabilities[sum_outcome] += 1
else:
probabilities[sum_outcome] = 1
return probabilities, total_outcomes


coins = 0
for line in sys.stdin:
[t, x] = [int(i) for i in line.split(' ')]
if t == 1:
coins += 1
else:
probabilities, total_outcomes = calculate_probabilities(coins)
possible_probabilities = [
v for k, v in probabilities.items() if k + x >= h]
print(sum(possible_probabilities) / total_outcomes)
exit(0)
print(0)
exit(0)

Q3 米小游的极差之和

题目描述

米小游拿到了一个数组a,她用这个数组构造一个新数组b,其中ai代表b数组中有ai个i.

例如, 若a=[2,3,1],那么b=[1,1,2,2,2,3],因为a1=2,代表b数组中有2个1;a2=3,代表b数组中有3个2;a3=1,代表b数组中有1个3.
现在给定a数组,你需要帮助米哈游求出b数组中所有连续子数组的极差之和.由于答案可能过大,请对10^9+7取模.
数组的极差指最大值减去最小值.

输入

第一行输入一个正整数n,代表a数组的元素数量
第二行输入n个正整数ai, 代表a数组的元素
1 <= n <= 10^5
1 <= ai <= 10^9

输入

一个整数,代表b数组中所有区间的极差之和,对10^9+7取模的值

示例

输入:

1
2
2
2 1

输出:

1
2

说明:
a=[2,1]时,b数组为[1,1,2]
此时b数组共有6个连续子数组
[1]的极差为0
[1]的极差为0
[2]的极差为0
[1,1]的极差为0
[1,2]的极差为1
[1,1,1]的极差为1
因此答案是0+0+0+1+1=2.

代码: 双指针,AC 20%【内存超限】

米小游的极差之和view raw
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import sys

n = int(input())
list_a = [int(i) for i in input().split(" ")]
list_b = []
for index, num in enumerate(list_a):
list_b += [index + 1] * num

# def find_subarrays(arr):
# result = 0
# for l in range(1, len(arr) + 1):
# for start in range(0, len(arr)):
# if start+1 <= len(arr):
# tp = tuple(arr[start:start+l])
# result += (max(tp) - min(tp))
# return result
# print(find_subarrays(list_b))


def f2(arr):
result = 0
for p1 in range(0, len(arr)):
for p2 in range(p1, len(arr)):
if arr[p1] == arr[p2]:
continue
else:
result += arr[p2] - arr[p1]
return result
print(f2(list_b))