滴滴研发岗模拟卷(一)
模仿 2024 秋招研发岗笔试:19 道单选 + 1 道多选 + 2 道编程,限时 100 分钟。单选/多选来自专项练习题库,编程题为原创。(单选/多选答案取自专项题库(参考);编程题为原创,提供思路与参考代码。)
一、单选题(第 1–19 题,每题 5 分)
对于多关键字而言,哪种文件组织方便而又高效?
void waitForSignal()
{
Object obj = new Object();
synchronized(Thread.currentThread())
{
obj.wait();
obj.notify();
}
}
Which statement is true?
Linux中包括两种链接:硬链接(Hard Link)和软连接(Soft Link),下列说法正确的是()
下述编码中哪一个不是前缀码()
下面名词解释错误的是:
递归函数最终会结束,那么这个函数一定?
有如下算式成立,13*7=88,是采用()进制计算的。
页面走向:4 3 2 1 4 3 5 4 3 2 1 5 4,当分配的内存物理快数4(开始为装入),采用LRU淘汰算法,产生多少次缺页?
下述哪一条是顺序存储结构的优点?()
以下关于函数调用的说法哪个是正确的?
存储过程是存储在数据库中的代码,具有很多优点。下列陈述中不属于存储过程优点的是______。
若有4个进程共享同一程序段,而且每次最多允许3个进程进入该程序段,则信号量的变化范围是()
Java是从()语言改进重新设计
关于异常处理机制的叙述正确的是()
RSA、SHA、DES、BASE64哪个不可逆?
采用二叉链表作为存储结构,树的前序遍历和其相应的二叉树的前序遍历的结果是一样的()
下面有关buddy内存分配算法的描述,说法错误的是?
关于 int a[10]; 问下面哪些不可以表示 a[1] 的地址()
若有以下定义和语句:
int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, *p = a;
则不能表示a数组元素的表达式是
二、多选题(第 20 题,5 分)
两个线程运行在双核机器上,每个线程主程序如下,线程1:x=1;r1=y;线程2:y=1;r2=x。x和y是两个全局变量,初始为0。以下哪一个是r1和r2的可能值?
三、编程题(第 21–22 题,自测后对照参考解法)
给定一个长度为 n 的整数数组(可含负数),数组首尾相接构成环形。求非空连续子数组的最大和(子数组可以跨越数组首尾)。
输入:第一行 n,第二行 n 个整数。
输出:最大子段和。
示例:
输入:
3
5 -3 5
输出:
10
(解释:取 5 和 5,跨越首尾,和为 10)
查看参考解法
环形数组最大子段和分两种情况:
1) 不跨越首尾:经典 Kadane 求最大子段和;
2) 跨越首尾:等于「数组总和 - 最小子段和」。
答案取两者较大。注意全为负数时退化为普通最大子段和。
def max_circular(nums):
def kadane(a):
cur = best = a[0]
for x in a[1:]:
cur = max(x, cur + x)
best = max(best, cur)
return best
n = len(nums)
if n == 1:
return nums[0]
max_no_cross = kadane(nums)
total = sum(nums)
min_sub = kadane([-x for x in nums])
return max(max_no_cross, total + min_sub)
给定一个只包含 ( ) [ ] { } 的字符串,判断括号是否匹配(必须按正确顺序闭合)。
输入:一行字符串。
输出:匹配输出 true,否则 false。
示例:
输入:([{}])()
输出:true
输入:([)]
输出:false
查看参考解法
用栈匹配:左括号入栈,右括号与栈顶匹配则弹栈,否则非法;最后栈为空则合法。
def is_valid(s):
st = []
m = {')': '(', ']': '[', '}': '{'}
for c in s:
if c in '([{':
st.append(c)
else:
if not st or st.pop() != m[c]:
return False
return not st