滴滴研发岗模拟卷(一)

模仿 2024 秋招研发岗笔试:19 道单选 + 1 道多选 + 2 道编程,限时 100 分钟。单选/多选来自专项练习题库,编程题为原创。(单选/多选答案取自专项题库(参考);编程题为原创,提供思路与参考代码。)

⏱ 剩余 100:00已答 0 / 20

一、单选题(第 1–19 题,每题 5 分)

第 1 题 · 单选

对于多关键字而言,哪种文件组织方便而又高效?

第 2 题 · 单选
void waitForSignal()
{
    Object obj = new Object();
    synchronized(Thread.currentThread())
    {
        obj.wait();
        obj.notify();
    }
}

Which statement is true?

第 3 题 · 单选

Linux中包括两种链接:硬链接(Hard Link)和软连接(Soft Link),下列说法正确的是()

第 4 题 · 单选

下述编码中哪一个不是前缀码()

第 5 题 · 单选

下面名词解释错误的是:

第 6 题 · 单选

递归函数最终会结束,那么这个函数一定?

第 7 题 · 单选

有如下算式成立,13*7=88,是采用()进制计算的。

第 8 题 · 单选

页面走向:4 3 2 1 4 3 5 4 3 2 1 5 4,当分配的内存物理快数4(开始为装入),采用LRU淘汰算法,产生多少次缺页?

第 9 题 · 单选

下述哪一条是顺序存储结构的优点?()

第 10 题 · 单选

以下关于函数调用的说法哪个是正确的?

第 11 题 · 单选

存储过程是存储在数据库中的代码,具有很多优点。下列陈述中不属于存储过程优点的是______。

第 12 题 · 单选

若有4个进程共享同一程序段,而且每次最多允许3个进程进入该程序段,则信号量的变化范围是()

第 13 题 · 单选

Java是从()语言改进重新设计

第 14 题 · 单选

关于异常处理机制的叙述正确的是()

第 15 题 · 单选

RSA、SHA、DES、BASE64哪个不可逆?

第 16 题 · 单选

采用二叉链表作为存储结构,树的前序遍历和其相应的二叉树的前序遍历的结果是一样的()

第 17 题 · 单选

下面有关buddy内存分配算法的描述,说法错误的是?

第 18 题 · 单选

关于 int a[10]; 问下面哪些不可以表示 a[1] 的地址()

第 19 题 · 单选

若有以下定义和语句:

int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, *p = a;

则不能表示a数组元素的表达式是

二、多选题(第 20 题,5 分)

第 20 题 · 多选

两个线程运行在双核机器上,每个线程主程序如下,线程1:x=1;r1=y;线程2:y=1;r2=x。x和y是两个全局变量,初始为0。以下哪一个是r1和r2的可能值?

三、编程题(第 21–22 题,自测后对照参考解法)

第 21 题 · 编程

给定一个长度为 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)
第 22 题 · 编程

给定一个只包含 ( ) [ ] { } 的字符串,判断括号是否匹配(必须按正确顺序闭合)。

输入:一行字符串。

输出:匹配输出 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