计算机科学(Computer Science)是一门研究各种与计算和信息处理相关主题的系统学科,从抽象的算法分析和形式化语法,到具体的编程语言、程序设计、软硬件开发、人工智能等领域,都是计算机科学研究和学习的重要内容。
图片来源 剑桥大学官网
计算机科学作为是英国留学的热门专业之一,每年的申请竞争都异常激烈,而入学面试作为冲刺牛津剑桥申请过程中的压轴环节,不仅能够与教授面对面交流,更是近距离展示自己的学术实力以及学术热情的绝佳机会,其重要性自然不言而喻。
为帮助大家更好地备战牛津剑桥申请,本期分享我们特带来牛津剑桥计算机科学专业面试样题解析,梳理这些题目背后的解答思路与考察重点
图片来源 牛津大学官网
01、牛津大学计算机科学专业面试样题解析
牛津大学计算机科学专业的面试时长通常为30分钟,通常会从general questions开始讨论,也可能会从申请者所写的PS文书内容作为切入点,以便面试官更好地了解申请者的学术热情与申请动机。
图片来源 牛津大学官网
以下是我们整理的牛津大学计算机科学专业的面试Sample Questions:
Q1、海盗是如何瓜分宝藏的?
图片来源 牛津大学官网
7名海盗拥有100枚金币。他们必须自己决定如何分配这些宝藏,但必须遵守海盗规则:
◆级别最高的海盗提议如何分配
◆所有海盗(包括级别最高的海盗在内)对分配方案进行投票。如果半数或超过半数以上的海盗投票支持该分配方式,则方案通过。如果少于半数的海盗投票支持该分配方式,则把级别最高的海盗扔下船,然后重新开始。
假设海盗是完全合乎逻辑的,并且完全冷酷无情(只关心最大化自己的金币份额)。那么,级别最高的海盗应该如何分配金币呢?
图片来源 牛津大学官网
解决该问题的方法包括但不限于考虑只有两名海盗的情况,并且可以从这种情况开始分析。首先将级别最高的海盗假设为字母A,其他人则为B、C、D......以此类推。
图片源自 牛津大学官网
两名海盗的情况下,海盗A提议自己得到所有金币并投赞成票,方案成立,结果为海盗A得到100金币,海盗B得到0金币。
图片源自 牛津大学官网
三名海盗的情况下,海盗A知道如果自己被扔下船,海盗C会一无所获(因为会回到只有两名海盗的情况),所以如果海盗A支付1枚硬币给海盗C,海盗C将投赞成票,结果为海盗A得到99金币,海盗B得到0金币,海盗C得到1金币。
图片源自 牛津大学官网
四名海盗的情况下,海盗A知道如果自己被扔下船,那么海盗C就什么也得不到(将变成3名海盗的情况),所以他同样需要1个金币给海盗C,结果为海盗A得到99金币,海盗B得到0金币,海盗C得到1金币,海盗D得到0金币。
图片源自 牛津大学官网
五名海盗的情况下,海盗A需要3票,所以他必须支付金币给每名在他出局时毫无收获的海盗。最后结果为海盗A得到98金币,海盗B得到0金币,海盗C得到1金币,海盗D得到0金币,海盗E得到1金币。
图片源自 牛津大学官网
六名海盗的情况下,同样支付金币给海盗C和海盗E。结果为海盗A得到98个金币,海盗B得到0金币,海盗C得到1金币,海盗D得到0金币,海盗E得到1金币,海盗F得到0金币。
图片源自 牛津大学官网
七名海盗的情况下,在这最后阶段(尽管可以继续无限下去)海盗A需要4票,所以必须支付金币给3名海盗(即海盗C, E和G)。结果为海盗A获得97金币,海盗C, E和G得到1金币,其他人0金币。
图片源自 牛津大学官网
这是一道标准的逻辑分析题,也是在面试中常见的典型题目。面试官通过题目重点考察申请者者如何把握问题的方向,是否能将问题分解成更小的子集,以及能否以算法的方式来处理复杂概念。
图片来源 牛津大学官网
Q2、寻找函数最大值
图片来源 牛津大学官网
有一个函数f(x),定义域是[0,1]之间,当x=m时,函数取最大值,假设0≤u<v≤m,则函数f(u)<f(v),反之当m≤u<v≤ 1,则函数f(u)> f(v)。除此之外,没有更多的信息,但申请者可以任取x的值,并从面试官那里得到函数f(x)的值,请问如何在10次内(包含10次)找到最接近真实m的值(函数的最大值)?
由于申请者只能通过询问面试官来得到函数值并进行比较且次数有限,所以可以先考虑从已知条件入手,比如申请者可以先从定义域作为切入点,尝试取定义域的中间值(x=0.5),以及比中间值稍大一点的数值(比如:x=0.5+ε,ε=10^(-6))来确定函数是呈增长还是下降趋势。
如果呈增长趋势,则第二次尝试取定义域[0.5, 1]的中间值(x=0.75);反之则尝试取定义域[0, 0.5]的中间值(x=0.25)。如此反复,在新的区间内有了边界值后,再重复同样的思路,逐渐逼近准确值,从而得出最接近值。
在代码中可以表示为:
(1)设定l=0和r=1
(2)重复以下步骤10次:
•计算中点x=(l+r)/2
•查询f(x)和f(x+ε),其中ε是一个非常小的正数,比如: 10^(-6)。
•如果f(x)<f(x+ε),则更新l=x
•如果f(x)>f(x+ε),则更新r=x
(3)在第10次查询后, x会非常接近于m的真实值。
这种方法利用了函数的单调性和二分搜索的特性,使得只需10次查询就可以在[0, 1]的区间内逼近函数的最大值所在的位置m。
02、剑桥大学计算机科学专业面试样题解析
剑桥大学计算机科学专业的面试时长通常为25-45分钟左右,面试问题通常会涉及学习计算机科学所必备的能力与相关技能,旨在评估申请者的逻辑思维、分析并解决问题的能力以及学习计算机科学的热情。
图片来源 剑桥大学官网
剑桥计算机科学专业的面试侧重考察申请者的数学知识和逻辑思维能力。以下是我们整理的Sample Questions:
Q1
这里有一个方程:cos²(α)+sin² (β)=1,请问α和β需要怎样关联,才能使这个方程式成立?
图片来源 剑桥大学官网
这道题需要从三角函数的基本恒等式进行考虑。对于任意角度θ,有cos²(θ)+sin²(θ)=1。因此,可以将β和α关联起来,使得:sin²(β)=1-cos²(α),这意味着:sin(β)=|sin(α)|。
于是 β=α+2kπ 或 π/2-α+2kπ 或 α+π+2kπ 或 3π/2-α+2kπ。也就是说当β=±α±2kπ (k取整数)时,cos²(α)+sin² (β)=1恒成立。换句话说,α 和β必须是互补的、相等的或相差π的整数倍,这种关系可以确保方程成立。
这道题目主要考察申请者对数学知识的掌握程度,主要是对三角函数恒等式的理解,要求能推导出角度的关系。
Q2
现在有许多货运公司的货车需要渡河,但是渡轮每次只能承载一辆货车,你需要设计一套摆渡系统,如何才能尽可能公平地对待所有货运公司?
图片来源 剑桥大学官网
为了确保每个货运公司得到公平的服务,可以设计一个轮询调度机制:按照每个货运公司的顺序依次让它们的货车优先上船。具体操作步骤如下:
(1)记录各公司货车数量:首先记录每家货运公司排队等候的货车数。
(2)设置轮询顺序:依次从每家公司队列中选出一辆货车轮流上船。可以先假设有三家公司 A、B、C,然后按顺序先选A的一辆货车,再选B的一辆货车,然后选C的一辆货车,依次轮询。
(3)动态调整:如果某家公司的货车数量减少或为空,则跳过该公司,直到它有新的货车加入为止。
通过这样的轮询机制,可以保证各公司获得较为公平的渡河机会,不会因为某家公司的货车数量多就长时间占用摆渡资源。
之后面试官可能会提升难度,进一步提问,比如:在某些紧急或特殊情况下,有些公司的货车需要优先渡河。这时该如何设计一个优先级调度功能允许紧急任务的货车插队?或者在考虑货车数量的基础上,还要同时考虑货车货物的重量,这时该如何改进摆渡系统的公平性?
这道面试题目主要考察申请者是否具备一定的编程思维、系统设计、数据结构和算法的实际应用能力,所涉及的知识点包括以下几个方面:
◆队列与调度算法:需要了解队列的基本概念和调度机制,特别是轮询调度(Round Robin)算法。轮询调度是一种公平的分配资源的方式,能够确保每个货运公司轮流得到服务。
◆公平性与资源分配:这是计算机系统中资源公平分配的典型场景。考察如何在多方竞争资源时,设计出尽可能公平的资源分配方案。这在操作系统、网络调度和数据库锁机制中都有广泛应用。
◆系统设计:需要考虑如何设计摆渡系统的架构,使其可以动态地加入和移除货车队列。尤其是系统如何处理不同公司货车数量不均、动态增减等情况。
◆数据结构:在实现这种轮询调度时,可能会用到数据结构如循环队列(Circular Queue)、优先队列(Priority Queue)等,以便在需要时处理插队或优先级调度。
◆动态编程或面向对象设计(视实现方式而定):如果要编写一个模拟程序,这可以涉及如何动态维护货车队列、如何实时更新渡河轮次等,更深入的设计可能需要面向对象编程思想。
在看完上述面试案例及思路后,我们不难发现牛津剑桥面试考察的并不是面试者是否能在规定时间内回答出正确答案,而是聚焦于面试者的思考过程,面试官想要了解面试者是否具备足够的学术热情与学术能力,是否适合大学的教学体系与模式,是否能在导师的引导下完成探究与学习。
所以大家在面试中,需要做的是努力尝试思考,与面试官保持交流并清晰地表达出自己的思路。如今距离面试越来越近,建议大家一定要提前熟悉面试流程,多进行面试前的练习与准备,祝愿大家都能够在面试中充分展示自己的学术硬实力!