A. 方向画像与考察重点
计算机科学英才班是杭州电子科技大学卓越学院(Zhuoyue Honors College)面向计算机科学拔尖创新人才设立的重点方向,依托学校雄厚的电子信息与计算机学科基础,致力于培养兼具系统能力与理论创新潜力的复合型英才。卓越学院秉持"笃学力行、守正求新"的校训精神,自 2012 年创办以来,以"一制三化"——即全员全程导师制,叠加小班化、个性化、国际化培养模式——为办学内核,为英才班学生提供贴近科研一线的成长通道。该方向区别于普通计科专业,更强调对"计算机系统能力"的锻造,鼓励学生下沉到操作系统、编译原理、体系结构等底层领域,直面并努力化解关键软件领域的"卡脖子"瓶颈问题。
在二次选拔面试中,考官并不会苛求新生已掌握全部专业课,而是重点考察三件事:一是数理与逻辑基本功是否扎实,能否清晰表达算法思想与复杂度分析;二是对计算机系统的整体认知,是否理解"程序如何真正在机器上运行"这一贯穿软硬件的脉络;三是学习潜力与科研志趣,能否在导师制引导下持续深入。面试官常由具有系统软件、体系结构、编译与操作系统研究背景的导师组成,因此问题往往从一道基础算法出发,逐步延伸到数据结构、操作系统、编译原理乃至计算机组成原理的交叉地带,以此观察考生的思维深度与知识迁移能力。
备考上,建议考生不必堆砌艰深术语,而应把"数据结构—算法—操作系统—编译与系统"这条主线理清。能流畅手推时间复杂度、讲清栈/堆/进程/线程/虚拟内存等核心概念,并结合一段自己写过的代码或一个做过的小项目来说明理解,是最稳妥的得分方式。同时,主动表达希望在本硕贯通式精英培养与导师制科研训练中深耕系统能力的意愿,能显著提升导师的认可度。
关键词 计算机科学英才班 · 面试常考维度
- 数据结构:数组、链表、栈、队列、树、图、哈希表
- 算法基础:复杂度分析、排序、查找、递归、动态规划
- 操作系统:进程/线程、调度、虚拟内存、死锁、系统调用
- 编译原理:词法/语法/语义分析、中间表示、代码生成
- 计算机系统:冯·诺依曼体系、存储层次、Cache 与局部性
- 离散数学:命题逻辑、集合与关系、图论、计数
- 编程能力:语言特性、内存模型、调试与工程规范
- 科研志趣:项目/竞赛经历、系统能力、本硕贯通培养意愿
B. 核心概念速查
速查表 8 条关键概念 / 模型(一句话解释)
- 渐进复杂度(Big-O):用 O(f(n)) 描述算法运行时间或空间随输入规模 n 增长的上界,是评价算法效率的第一语言。
- 数据结构(Data Structure):有组织地存储与访问数据的方案,如栈(LIFO)、队列(FIFO)、树(层次)、图(关系网),决定算法可行性与效率。
- 进程与线程(Process/Thread):进程是资源分配的基本单位,线程是 CPU 调度的基本单位;同进程内线程共享内存,切换开销更小。
- 虚拟内存(Virtual Memory):通过分页把逻辑地址映射到物理内存,配合缺页中断实现内存隔离、扩容与共享,是操作系统核心机制。
- 编译器流程(Compiler Pipeline):源程序依次经过词法分析、语法分析、语义分析、中间代码生成与优化、目标代码生成,完成高级语言到机器码的翻译。
- 动态规划(Dynamic Programming):把原问题拆为重叠子问题并保存子解(记忆化),用最优子结构递推求得全局最优,常用于最优化问题。
- 存储层次与局部性(Memory Hierarchy & Locality):CPU Cache 利用时间/空间局部性缓存热点数据,弥合处理器与内存间的速度鸿沟。
- 图论基础(Graph Theory):以顶点与边建模关系,支撑最短路径、连通性、拓扑排序等问题,是离散数学与算法的交汇点。
C. 面试真题(Q1–Q20)
Q1请解释时间复杂度与空间复杂度的含义,并说明为什么用渐进记号 O 来衡量算法效率。专业重点
EN: Explain time and space complexity and why we use asymptotic Big-O notation to measure algorithm efficiency.
参考回答(中文)
时间复杂度描述算法运行时间随输入规模 n 增长的趋势,空间复杂度描述额外占用内存随 n 增长的趋势,二者都用渐进记号 O(f(n)) 表示上界。之所以用 O 而非精确步数,是因为不同机器、编译器、常数因子会让绝对时间差异巨大,而"当 n 足够大时,主导项决定增长形态"这一规律才是评判算法优劣的关键。O 忽略低阶项与常数系数,只保留增长最快的项,例如 O(n²) 的算法在大规模数据下必然劣于 O(n log n)。分析时通常看最坏情况,也可补充平均情况与最好情况。掌握复杂度是计算机科学英才班的基本功,也是后续评价一切系统性能的起点。
Reference Answer (EN)
Time complexity describes how runtime grows with input size n; space complexity does the same for memory. We use Big-O because absolute steps vary with hardware/compiler, while the dominant growth term decides efficiency at large n. Big-O drops constants and low-order terms, keeping only the fastest-growing term (e.g. O(n²) worse than O(n log n) for large n). Usually analyze worst-case, sometimes average. It is the foundation for evaluating any system's performance.
备考提示:开口题高频。务必说清"忽略常数、看增长趋势",并能举 O(1)、O(log n)、O(n)、O(n log n)、O(n²) 的典型例子(如二分、快排、双重循环)。
Q2常见排序算法有哪些?请比较它们的时间复杂度与稳定性。专业重点
EN: What are common sorting algorithms? Compare their time complexity and stability.
参考回答(中文)
常见算法包括:冒泡排序、插入排序(平均与最坏 O(n²),稳定);选择排序(O(n²),不稳定);归并排序(稳定,始终 O(n log n),需额外空间);快速排序(平均 O(n log n),最坏 O(n²),不稳定,原地);堆排序(O(n log n),不稳定);以及线性时间的计数/桶/基数排序(特定条件下 O(n))。稳定性指"相等元素排序后相对次序不变",归并与插入稳定,快排与堆排不稳定。工程上通常根据数据规模与特征选择:小规模用插入,通用用快排或内省排序(introsort),需要稳定时用归并。英才班面试常借此延伸到"为何平均快于归并但仍被广泛使用"——快排常数小、缓存友好。
Reference Answer (EN)
Bubble/insertion O(n²) stable; selection O(n²) unstable; merge O(n log n) stable, extra space; quick avg O(n log n), worst O(n²), unstable, in-place; heap O(n log n) unstable; counting/bucket/radix O(n) under conditions. Stability = equal keys keep relative order. Practice: insertion for small, quicksort/introsort generally, merge when stability needed. Quicksort wins by small constant and cache-friendliness.
备考提示:建议背一张"算法—平均/最坏复杂度—稳定性"对照表;被追问"为何快排不稳定"时,用"相同值因基准划分可能跨过彼此"解释。
Q3快速排序的基本思想是什么?它的最坏情况何时出现,如何避免?
EN: What is the idea of quicksort? When does its worst case occur and how to avoid it?
参考回答(中文)
快排采用分治:选一个基准(pivot),将数组划分为"小于基准"和"大于基准"两部分,再递归排序两子区间。平均时间复杂度 O(n log n)。最坏情况发生在每次划分都极不平衡时,例如数组已有序且总是选首尾元素作基准,递归退化为 O(n²)。避免手段有三:一是随机选基准或"三数取中"(首、中、尾取中位数);二是改用尾递归或迭代实现防止栈过深;三是当子区间规模小到一定程度改用插入排序(工程实践)。现代标准库多用"内省排序",在递归深度超限时切换为堆排序,从而保证最坏 O(n log n)。这体现了算法设计需兼顾理论与工程鲁棒性。
Reference Answer (EN)
Quicksort is divide-and-conquer: pick a pivot, partition into <pivot and >pivot, recurse. Avg O(n log n). Worst case O(n²) when partitions are always unbalanced—e.g. already-sorted input with endpoint pivot. Avoid via random pivot or median-of-three, iterative/ tail-recursion, and switching to insertion sort for small ranges. Introsort switches to heapsort when recursion too deep, guaranteeing O(n log n).
备考提示:"三数取中""内省排序"是体现工程视野的关键词,能说出它们就明显区别于只背课本的考生。
Q4二叉树、二叉搜索树、平衡二叉树(如 AVL、红黑树)之间是什么关系?为什么需要平衡?专业重点
EN: What is the relationship among binary tree, BST, and balanced trees (AVL, red-black)? Why do we need balancing?
参考回答(中文)
二叉树是每个结点至多两个子结点的树;二叉搜索树(BST)在此基础上要求左子树所有值小于根、右子树大于根,从而支持 O(h) 的查找/插入/删除。但 BST 在有序插入时可能退化为链表,高度 h 退化为 n,操作退化为 O(n)。平衡二叉树通过约束左右子树高度差来维持 h = O(log n),保证操作稳定高效:AVL 树要求任意结点左右子树高度差不超过 1,查询极快但旋转频繁;红黑树用"红色/黑色"着色与五条性质近似平衡,插入删除旋转更少,工程中更常用(如 C++ std::map、Linux 调度)。平衡的本质是"以少量旋转代价换取操作复杂度的稳定下界"。
Reference Answer (EN)
Binary tree: ≤2 children. BST adds left<root<right for O(h) ops, but degrades to O(n) on sorted input. Balanced trees bound h=O(log n): AVL keeps height difference ≤1 (fast lookup, many rotations); red-black uses color invariants for approximate balance (fewer rotations, used in std::map, Linux scheduler). Balancing trades a few rotations for a guaranteed O(log n) bound.
备考提示:能区分 AVL(严格、查快)与红黑树(宽松、改快)的取舍,并举一两个实际应用场景,会被视为系统底子扎实。
Q5哈希表(Hash Table)是如何工作的?常见的冲突解决方法有哪些?专业重点
EN: How does a hash table work? What are common collision-resolution methods?
参考回答(中文)
哈希表通过哈希函数 h(key) 把关键字映射到桶数组下标,理想情况下读写为 O(1)。当不同关键字映射到同一位置即发生冲突。常见解决方法:开放定址法(线性探测、二次探测、双重哈希),冲突时在桶数组内按规则向后探查空位,缓存友好但易聚簇;链地址法(separate chaining),每个桶挂一条链表/红黑树(如 Java HashMap 在桶过大时转树),实现简单、删除方便。此外好的哈希函数应尽量均匀、确定且计算快,并常结合负载因子(元素数/桶数)动态扩容 rehash。哈希表是"用空间换时间"的典范,也是数据库索引、缓存、语言运行时字典的底层支柱。
Reference Answer (EN)
A hash table maps keys to bucket indices via h(key), aiming O(1) access. Collisions occur when keys share a bucket. Resolution: open addressing (linear/quadratic/double hashing) probes within the array—cache-friendly but clusters; separate chaining attaches a linked list/red-black tree per bucket—simple, easy deletion. A good hash is uniform, deterministic, fast; load factor triggers rehash. It is the space-for-time foundation of dictionaries, caches, DB indexes.
备考提示:"负载因子与扩容 rehash"是常被追问的工程细节;能对比开放定址与链地址的优劣即可脱颖而出。
Q6请描述 Dijkstra 最短路径算法的基本思想、前提条件与复杂度。专业重点
EN: Describe Dijkstra's shortest-path algorithm: idea, preconditions, complexity.
参考回答(中文)
Dijkstra 在带权图中求单源最短路径,核心思想是贪心:维护一个已确定最短距离的集合,每次从未确定结点中选取距离最小的结点"固化"其距离,并用它松弛相邻结点(若 dist[u]+w < dist[v] 则更新)。前提是所有边权非负,否则贪心选择失效(可用 Bellman-Ford 处理负权)。朴素实现用数组扫描最小点,复杂度 O(V²);用优先队列(二叉堆)则为 O((V+E) log V),稀疏图更优。它是路由协议、地图导航、网络流量调度的理论基石,也是理解"贪心 + 优先队列"范式的经典案例。
Reference Answer (EN)
Dijkstra finds single-source shortest paths greedily: repeatedly pick the un-finalized node with smallest distance, finalize it, and relax neighbors (if dist[u]+w<dist[v], update). Requires non-negative edge weights (use Bellman-Ford for negative). Naive O(V²); with a priority queue O((V+E) log V). Foundation of routing, navigation, traffic scheduling; a classic greedy + PQ pattern.
备考提示:必说"非负权"前提与"贪心 + 松弛";被追问负权时用 Bellman-Ford 接话,体现知识完整性。
Q7动态规划与分治法有什么区别?什么条件下适合用动态规划?专业重点
EN: How does dynamic programming differ from divide-and-conquer? When is DP suitable?
参考回答(中文)
两者都"分而治之",但关键差异在子问题是否重叠:分治法(如归并排序)的子问题相互独立、不重复计算;动态规划面对的是重叠子问题,若递归求解会大量重复,故用记忆化(自顶向下)或填表(自底向上)保存子解,避免重复。适用 DP 的两大要素是"最优子结构"(全局最优包含局部最优)与"重叠子问题"。典型例子:斐波那契(朴素递归指数级,DP 线性)、最长公共子序列(LCS)、0-1 背包。状态定义与转移方程是 DP 的核心,写对状态即成功一半。英才班面试常以"能否把暴力递归改为 DP"来考察抽象建模能力。
Reference Answer (EN)
Both divide problems, but DP exploits overlapping subproblems—divide-and-conquer (e.g. merge sort) has independent subproblems. DP memoizes (top-down) or tabulates (bottom-up) to avoid recomputation. Two requirements: optimal substructure and overlapping subproblems. Examples: Fibonacci, LCS, 0-1 knapsack. Defining state + transition is the crux; interviewers often ask to convert brute-force recursion into DP.
备考提示:"最优子结构 + 重叠子问题"是 DP 的判据口诀;准备 1–2 个能现场写状态转移的例子(如 LCS、背包)。
Q8进程与线程的区别是什么?多线程编程为什么要关注同步与互斥?专业重点
EN: What is the difference between processes and threads? Why do we need synchronization and mutual exclusion in multithreading?
参考回答(中文)
进程是操作系统资源分配的基本单位,拥有独立的地址空间、文件描述符等,彼此隔离、切换代价大;线程是 CPU 调度的基本单位,同一进程内的多个线程共享地址空间与资源,通信方便但需谨慎。多线程并发时,若多个线程同时读写共享变量,会因执行交错产生竞态条件(race condition),导致结果不确定。因此需要同步(协调执行顺序)与互斥(同一时刻仅一个线程进入临界区),常用手段有互斥锁(mutex)、信号量(semaphore)、条件变量,以及无锁数据结构。英才班重视系统能力,理解"共享内存带来的并发陷阱"是操作系统与并行编程的入门关。
Reference Answer (EN)
A process is the OS resource-allocation unit with its own address space; a thread is the CPU-scheduling unit. Threads within a process share memory (easy communication, but risky). Concurrent threads reading/writing shared variables cause race conditions with nondeterministic results. Hence we need synchronization (ordering) and mutual exclusion (one thread in critical section at a time) via mutex, semaphore, condition variable, or lock-free structures. Understanding shared-memory hazards is the entry to OS and parallel programming.
备考提示:能讲清"进程隔离 vs 线程共享"并自然引出互斥锁/信号量,是操作系统面试题的合格线;可补一句"死锁"作延伸。
Q9什么是死锁?产生死锁的四个必要条件是什么,如何预防和避免?
EN: What is deadlock? What are the four necessary conditions, and how to prevent/avoid it?
参考回答(中文)
死锁指两个或以上进程因互相等待对方持有的资源而永久阻塞。Coffman 四条件是:互斥(资源不可共享)、占有并等待(持有一资源同时等别的)、不可抢占(资源只能自愿释放)、循环等待(形成环形等待链)。预防即破坏四条件之一,例如一次性申请全部资源(破坏占有等待)、资源可抢占、对资源统一编号按顺序申请(破坏循环等待)。避免则采用银行家算法,在分配前判断系统是否仍处安全状态。检测与恢复则是允许死锁发生再检测环路并剥夺资源。工程上更常用"按序加锁"与超时回退来规避。
Reference Answer (EN)
Deadlock: processes permanently block waiting cyclically for each other's resources. Coffman's four conditions: mutual exclusion, hold-and-wait, no preemption, circular wait. Prevention breaks one condition, e.g. request all resources at once, preemptible resources, or ordered locking by resource numbering. Avoidance uses the Banker's algorithm to keep the system safe. Detection/recovery finds cycles then preempts. Practice favors ordered locking and timeout rollback.
备考提示:四条件必须能完整背出,并能对应"破坏哪一个"来预防;银行家算法是被追问时的加分项。
Q10请解释虚拟内存与分页机制,为什么需要它?专业重点
EN: Explain virtual memory and paging. Why do we need them?
参考回答(中文)
虚拟内存为每个进程提供独立的、连续的虚拟地址空间,由内存管理单元(MMU)通过页表把虚拟页号映射到物理页框,并按固定大小的"页"为单位进行分配(分页)。需要它的原因有:一是隔离——各进程地址空间彼此独立,一个进程越界不会影响其他;二是扩容——可用磁盘交换区(swap)扩展可用内存,让程序看似拥有比物理内存更大的空间;三是共享与保护——可把同一物理页映射给多个进程只读共享(如动态库),并按页设置读写权限;四是简化编程——程序员无需关心物理内存布局。访问未驻留的页会触发缺页中断,由操作系统调入。它是现代操作系统与系统能力的核心概念。
Reference Answer (EN)
Virtual memory gives each process an independent, contiguous virtual address space; the MMU maps virtual page numbers to physical frames via a page table, allocating in fixed-size pages. Reasons: isolation (processes don't corrupt each other), expansion (swap extends memory), sharing/protection (read-only shared libs, per-page permissions), and simpler programming (no physical-layout worries). A missing page triggers a page fault handled by the OS. It is central to modern OS and systems.
备考提示:"隔离、扩容、共享、简化"四点是虚拟内存价值的概括;能提及缺页中断与页表即可体现系统视角。
Q11一个编译器通常包含哪些主要阶段?请简述从源代码到可执行文件的流程。专业重点
EN: What are the main phases of a compiler? Briefly describe source-to-executable flow.
参考回答(中文)
编译器流程可分为前端与后端。前端:词法分析把字符流切成记号(token),语法分析按文法构建抽象语法树(AST),语义分析做类型检查与符号表管理,并生成中间表示(IR)。后端:中间代码优化(如常量折叠、死代码消除),再经指令选择、寄存器分配、指令调度生成目标机器码,最后由链接器把多个目标文件与库链接成可执行文件。现代编译多分层,如 LLVM 以统一 IR 衔接不同语言前端与不同架构后端,便于复用优化。英才班强调编译与系统能力,理解"翻译如何发生"是读懂程序运行本质的钥匙,也是突破底层软件瓶颈的基础。
Reference Answer (EN)
Compiler = front-end + back-end. Front-end: lexical analysis (chars→tokens), syntax analysis (AST), semantic analysis (type checking, symbol table), then intermediate representation (IR). Back-end: IR optimization (constant folding, dead-code elimination), instruction selection, register allocation, scheduling → machine code; linker combines objects/libs into an executable. Modern compilers like LLVM use a common IR to share optimizations across languages/architectures. Understanding translation is key to systems ability.
备考提示:按"词法→语法→语义→IR→优化→目标码→链接"顺序讲,并点出 LLVM 这类分层设计,契合英才班系统方向。
Q12程序运行时的栈(stack)与堆(heap)有什么区别?
EN: What is the difference between stack and heap at runtime?
参考回答(中文)
栈由编译器自动管理,用于存放函数局部变量、参数与返回地址,遵循 LIFO、分配释放极快,但大小有限、生命周期随函数调用结束而回收;堆由程序员手动申请与释放(如 C 的 malloc/free、C++ 的 new/delete,或靠垃圾回收),空间大、灵活,但分配较慢且可能产生碎片与内存泄漏。递归过深会栈溢出(stack overflow),而堆上悬空指针或忘记释放会导致泄漏。理解栈/堆差异是掌握内存模型与排查崩溃、性能问题的前提,也是系统编程与操作系统课程的基础。
Reference Answer (EN)
Stack is compiler-managed (locals, params, return addresses), LIFO, fast, size-limited, auto-reclaimed on function exit. Heap is manually allocated/freed (malloc/free, new/delete, or GC), large and flexible but slower, with fragmentation and leak risks. Deep recursion overflows the stack; dangling pointers or missed frees leak the heap. Knowing both is essential to memory models and debugging.
备考提示:栈溢出与内存泄漏是两个经典坑,能各举一个例子说明,面试官会认为你有真实编码经验。
Q13什么是系统调用(system call)?用户程序是如何从用户态切换到内核态的?
EN: What is a system call? How does a user program switch from user mode to kernel mode?
参考回答(中文)
系统调用是用户程序请求操作系统内核提供服务的受控接口,例如读写文件、创建进程、网络通信。为保护内核,CPU 分用户态与内核态,普通程序运行在用户态,权限受限。发起系统调用时,程序执行一条特殊的陷入指令(如 trap/INT 或 syscall 指令),触发软中断/异常,由硬件切换到内核态并跳转至内核预设的处理例程,内核完成服务后再返回用户态。整个过程开销主要来自特权级切换与上下文保存。理解系统调用是弄清楚"应用程序如何与硬件/OS 交互"的关键,也是系统能力培养的必经之路。
Reference Answer (EN)
A system call is the controlled interface by which user programs request kernel services (file I/O, process creation, networking). The CPU has user mode (restricted) and kernel mode. Invoking a syscall executes a trap/syscall instruction, raising a software interrupt/exception that hardware uses to switch to kernel mode and jump to the handler; after serving, it returns to user mode. Overhead comes from privilege switching and context saving. It is how apps interact with hardware/OS.
备考提示:"用户态/内核态 + trap 陷入"是操作系统的常考点;能说清切换开销来源即可。
Q14常见的 CPU 进程调度算法有哪些?各有什么优缺点?专业重点
EN: What are common CPU scheduling algorithms and their pros/cons?
参考回答(中文)
先来先服务(FCFS)简单公平但可能长作业阻塞短作业(护航效应);短作业优先(SJF)平均等待时间最优,但需预知时长、易饿死长作业;时间片轮转(RR)给每个进程固定时间片,响应快、公平,适合交互式系统,但时间片过大退化为 FCFS、过小则切换开销大;优先级调度按权重分配,需防低优先级饿死(可加老化机制);多级反馈队列综合上述,按行为动态调整优先级。调度目标通常在吞吐量、周转时间、响应时间与公平性之间权衡。英才班强调系统视角,理解调度有助于后续学习操作系统内核与并发编程。
Reference Answer (EN)
FCFS: simple/fair but convoy effect. SJF: optimal avg wait but needs burst estimate, may starve long jobs. RR: fixed time slice, responsive/fair for interactive use, but large slice→FCFS, small slice→overhead. Priority: risk of starvation (use aging). Multi-level feedback queue: adaptive. Scheduling trades throughput, turnaround, response time, fairness. Understanding it helps in OS kernels and concurrency.
备考提示:用"吞吐/周转/响应/公平"四维评价任意调度算法,是结构化作答的模板,建议熟记。
Q15什么是 Cache?为什么 CPU 需要它?局部性原理是什么?专业重点
EN: What is a cache? Why does the CPU need it? What is the principle of locality?
参考回答(中文)
Cache 是介于 CPU 与内存之间的高速小容量存储器。因处理器速度远快于主存,若每次都访问内存会形成瓶颈,故用更快但更贵的 SRAM 缓存近期/热点数据。其有效性建立在局部性原理上:时间局部性(刚访问的数据很可能再次访问)与空间局部性(访问某地址后,邻近地址很可能被访问)。Cache 通常以"缓存行"按块从内存预取,并利用这些局部性显著提升命中率。命中则极快,未命中(miss)需回内存取数并可能替换。理解 Cache 与存储层次,是英才班系统能力培养中"程序为何快/慢"的核心认知,也是性能优化的根基。
Reference Answer (EN)
Cache is a small fast SRAM between CPU and slower main memory. Because CPUs vastly outpace RAM, caching hot/recent data avoids the memory bottleneck. It works via locality: temporal (reused data) and spatial (nearby addresses). Cache fetches blocks (cache lines) and exploits locality for high hit rates; a miss goes to memory and may evict. Understanding cache and the memory hierarchy is core to why programs are fast/slow and to performance optimization.
备考提示:"时间局部性 + 空间局部性"务必成对出现;能联系"遍历二维数组时按行优先更快"的例子非常加分。
Q16TCP 与 UDP 的主要区别是什么?各自适合什么场景?专业重点
EN: What are the main differences between TCP and UDP? What scenarios suit each?
参考回答(中文)
TCP 是面向连接、可靠的字节流协议:通过三次握手建连、序号与确认、重传、流量控制与拥塞控制,保证数据按序、完整、不重复到达,但开销与延迟较大。UDP 是无连接、不可靠的数据报协议:不保证到达与顺序,头部小、延迟低、支持广播多播。因此 TCP 适合对正确性要求高的场景(网页 HTTP、文件传输、邮件);UDP 适合对实时性敏感、可容忍少量丢包的场景(音视频通话、游戏、DNS 查询)。英才班重视系统底层,理解传输层取舍,是后续网络编程与分布式系统学习的基础。
Reference Answer (EN)
TCP is connection-oriented and reliable: three-way handshake, sequencing/ACK, retransmission, flow & congestion control—ordered, complete, no duplicates, but heavier. UDP is connectionless, unreliable datagrams: no delivery/order guarantee, small header, low latency, supports broadcast/multicast. TCP suits correctness-critical use (HTTP, file transfer, email); UDP suits real-time, loss-tolerant use (voice/video, gaming, DNS). Understanding the tradeoff underpins networking and distributed systems.
备考提示:"可靠性 vs 实时性"是 TCP/UDP 权衡的精髓;能举 HTTP 与视频通话的对照例子即可。
Q17面向对象编程中"多态"是什么意思?它是如何实现的?
EN: What does polymorphism mean in OOP and how is it implemented?
参考回答(中文)
多态指"同一接口,多种实现",让程序以统一方式处理不同类型的对象。主要有两类:编译期多态(重载,同一函数名不同参数,由编译器在编译时决议)与运行期多态(重写,子类覆写父类虚函数,通过虚函数表 vtable 在运行时按对象实际类型动态绑定)。例如基类 Shape 有虚方法 draw(),Circle 与 Rectangle 各自实现,调用 shape.draw() 时实际执行对应子类逻辑。多态降低了模块耦合、提升可扩展性,是大型软件与系统框架(如操作系统驱动模型)常用范式。理解它能帮助写出更易维护、符合系统抽象层次的代码。
Reference Answer (EN)
Polymorphism = "one interface, many implementations", letting code handle objects uniformly. Two kinds: compile-time (overloading, resolved by the compiler) and runtime (overriding via virtual functions, dispatched through a vtable by actual object type). E.g. base Shape has virtual draw(); Circle/Rectangle override it, and shape.draw() runs the right one. Polymorphism reduces coupling and boosts extensibility—common in large systems and OS driver models.
备考提示:区分"重载(编译期)"与"重写+虚表(运行期)"是关键;能提 vtable 动态绑定显得理解深入。
Q18递归与迭代各有什么特点?相互之间如何转换?
EN: What are the characteristics of recursion vs iteration, and how do they convert?
参考回答(中文)
递归以函数自我调用表达问题,代码简洁、贴近数学归纳/分治定义,但每次调用有栈帧开销,过深会栈溢出。迭代用循环变量反复更新状态,空间通常为 O(1)、更省内存,但某些问题表达不如递归直观。二者在可计算性上等价:尾递归可被编译器优化为循环;一般递归可用"显式栈"模拟调用过程改写为迭代(如 DFS 用栈实现)。选择原则是:问题本身递归定义清晰且深度可控时用递归,追求性能与避免栈溢出的工程代码倾向迭代。英才班看重对程序执行模型的把握,能解释递归开销来源是加分项。
Reference Answer (EN)
Recursion calls itself, mirrors divide-and-conquer/induction, concise but has stack-frame overhead and overflow risk. Iteration uses loops, usually O(1) space, less intuitive for some problems. They are computationally equivalent: tail recursion optimizes to a loop; general recursion can be rewritten with an explicit stack (e.g. DFS via stack). Choose recursion when the definition is naturally recursive and shallow; prefer iteration for performance and safety. Explaining recursion's overhead shows grasp of execution models.
备考提示:"尾递归优化"与"显式栈改写"是递归转迭代的两把钥匙,能说出其一即可。
Q19为什么数据库索引常用 B+ 树而不是二叉搜索树或哈希表?专业重点
EN: Why do database indexes usually use B+ trees rather than BSTs or hash tables?
参考回答(中文)
数据库数据存储在磁盘,访问以"页/块"为单位,追求减少 I/O 次数。二叉搜索树在大数据下深度大、磁盘寻道多;B+ 树是平衡多路树,每个结点存多个关键字、扇出高,树高仅为 log_阶(n),大幅降低磁盘 I/O。且 B+ 树所有数据记录都在叶子结点,并以链表顺序串联,天然支持范围查询与有序遍历,而哈希表只能等值查询、不支持范围与排序。相比红黑树,B+ 树更适配"以页为单位、少树高、多分支"的存储特性。因此 B+ 树成为关系型数据库索引的主流结构,是数据结构与系统存储结合的典范。
Reference Answer (EN)
DB data lives on disk, accessed per page, so minimizing I/O matters. A BST is too deep (many seeks); B+ tree is a balanced multi-way tree with high fan-out, height only log_order(n), slashing I/O. All records sit in leaf nodes linked in order, so B+ tree naturally supports range queries and ordered scans—unlike hash tables (equality only, no range/order). Versus red-black trees, B+ fits page-based, low-height, high-branch storage. Hence B+ is the mainstream DB index structure.
备考提示:"磁盘 I/O 与树高"是选择 B+ 树的根本理由;对比"哈希只能等值、B+ 支持范围"直击考点。
Q20请介绍你做过的一个编程项目或参加过的竞赛,并说明其中用到的核心算法或系统设计。专业重点
EN: Introduce a programming project or competition you have done, and explain the core algorithm or system design involved.
参考回答(中文)
例如我曾用 C++ 实现一个简易键值存储引擎:底层用哈希表做索引、用跳表(skip list)维护有序数据以支持范围扫描,并引入写前日志(WAL)保证崩溃可恢复。核心设计包括:以内存映射文件管理数据页、用互斥锁保护并发写入、以布隆过滤器加速"键是否存在"的判断。这个项目让我体会到"数据结构决定性能上限、系统机制决定可靠性"——这正是英才班强调的系统能力。若是竞赛(如 ACM、蓝桥杯、服务外包大赛),则可讲述如何把问题抽象为图论/动态规划模型并优化复杂度。无论项目大小,能讲清"问题→模型→算法→取舍"的闭环,就足以证明你具备科研与工程潜质。
Reference Answer (EN)
E.g. I built a small key-value store in C++: a hash index plus a skip list for ordered range scans, with a write-ahead log (WAL) for crash recovery. Design: memory-mapped pages, mutex for concurrent writes, Bloom filter to speed "key exists?" checks. It taught me that data structures cap performance while system mechanisms ensure reliability—exactly the systems ability this class values. For contests (ACM, etc.), describe how you modeled the problem as graph/DP and optimized complexity. Closing the loop problem→model→algorithm→tradeoff proves research/engineering potential.
备考提示:这是几乎必问的"个人展示"题。用"问题→模型→算法→取舍"四步结构讲,并主动呼应英才班的系统能力培养,印象分最高。
D. 自我介绍模板(3 版 · 中英)
版本一 · 综合兴趣型
各位老师好,我是来自(高中/学院)的(姓名)。我对计算机科学的兴趣始于(一次经历/一门课),逐渐意识到程序背后是精妙的系统与算法世界。选择计算机科学英才班,是因为它"一制三化"的导师制与国际化培养,能让我在系统能力上走得更深。我基础扎实、好奇心强,希望在卓越学院"笃学力行、守正求新"的氛围中,从底层软件与算法出发,成长为能解决"卡脖子"问题的计算机人才。
Hello professors, I am (Name) from (school/college). My interest in computer science began with (an experience/a course), and I gradually realized that behind every program lies a fascinating world of systems and algorithms. I choose the CS Elite Class because its mentorship and internationalized "one-system-three-modernizations" training lets me go deeper in systems ability. With solid basics and strong curiosity, I hope to grow, under the spirit of "diligent learning, pragmatic action, uprightness and innovation", into a computer scientist who can tackle bottleneck software problems.
版本二 · 学术编程型
老师好,我是(姓名)。我系统学习过 C/C++ 与数据结构,能手推常见算法的时间复杂度,也理解进程/线程、虚拟内存与编译流程等系统概念。我曾在(课程/项目)中用动态规划与哈希表优化过(某问题),体会到"好的数据结构决定性能上限"。英才班的本硕贯通与导师制科研,正是我想深入系统底层、参与真实科研的路径。我自律、善钻研,渴望在卓越学院把理论基础转化为解决复杂系统问题的能力。
Hello, I am (Name). I have systematically studied C/C++ and data structures, can derive the time complexity of common algorithms by hand, and understand systems concepts such as processes/threads, virtual memory, and the compilation pipeline. In (a course/project) I optimized (a problem) with dynamic programming and hash tables, and learned that "good data structures cap performance". The class's integrated bachelor-master training and mentored research are exactly the path I want—to dive into systems and real research. I am self-disciplined and inquisitive, eager to turn theory into the ability to solve complex systems problems.
版本三 · 项目竞赛型
各位老师好,我是(姓名)。我热衷于把算法用于实战,曾参加(ACM/蓝桥杯/服务外包等)竞赛并(获奖/完成项目),在其中把问题抽象为图论/动态规划模型并优化复杂度。我也动手写过(如简易数据库/操作系统实验/编译器小项目),对"程序如何真正运行在机器上"充满好奇。计算机科学英才班强调系统能力与破解底层瓶颈,与我的志趣高度契合。我希望在导师制下持续打磨工程与科研能力,未来在计算机系统方向深耕。
Hello professors, I am (Name). I love applying algorithms in practice: I joined (ACM/Blue Bridge/IT service outsourcing etc.) and (won/awarded/completed a project), where I modeled problems as graphs/DP and optimized complexity. I also built (a mini database/OS lab/compiler project), curious about "how programs truly run on machines". The CS Elite Class emphasizes systems ability and breaking bottom-layer bottlenecks—closely matching my passion. I hope to keep sharpening engineering and research skills under mentorship and deepen my focus on computer systems.
E. 专业背景知识补充
杭州电子科技大学计算机科学英才班隶属于卓越学院,是面向计算机系统能力与拔尖创新人才培养的旗舰方向。学校地处杭州这一数字经济与互联网产业高地,计算机科学学科进入 ESI 全球前 1%,在嵌入式系统、网络空间安全、软件工程等领域积淀深厚。英才班并非简单地"学更多编程",而是把培养目标锚定在"计算机系统能力"——即学生能够贯通硬件、操作系统、编译与体系结构,理解并能够改造从高级语言到机器指令的完整链条,从而为破解关键软件"卡脖子"瓶颈储备力量。这正是它与普通计算机类专业在定位上的根本差异。
在培养模式上,英才班全面承接卓越学院"一制三化":全员全程导师制让每位学生从低年级起即进入导师科研团队,参与真实课题;小班化保障研讨式教学与充分互动;个性化允许学生根据兴趣在算法、系统、安全等方向定制成长路径;国际化则通过联合培养、海外访学与全英文课程拓宽视野。同时,英才班通常设有本硕连读或本硕博贯通的精英化通道,优秀学生可提前进入研究生阶段、接触前沿研究,形成"本科打基础、研究生做突破"的连贯培养。
核心课程体系围绕"厚基础、强系统"展开:除数据结构、离散数学、算法设计等基础课外,重点强化计算机组成原理、操作系统、编译原理、计算机网络、体系结构与并行计算等系统类课程,并辅以硬件综合实验、系统编程与编译/OS 课程设计,要求学生"动手造轮子"而非仅会调用接口。学校还依托各类重点实验室、工程研究中心与学生创新平台,提供从 FPGA、嵌入式到分布式系统的实践环境,鼓励学生以竞赛(如 ACM、操作系统挑战赛)与大学生创新项目锤炼工程能力。
从发展路径看,英才班毕业生既可在基础软件、芯片配套软件、云原生与系统安全等"硬科技"领域就业,也可在本校或国内外高水平大学继续攻读计算机相关研究生,向系统软件、体系结构、AI 系统等高精尖方向深造。对于二次选拔的考生而言,展示对"系统能力"这一培养理念的认同,以及愿意沉下心钻研底层、参与导师科研的态度,往往比罗列具体技术名词更能打动面试官。
说明:本资料为杭州电子科技大学卓越学院新生二次选拔面试备考参考,内容基于公开信息与通用计算机科学知识整理,具体选拔政策、培养方案与课程安排以学校官方发布为准。请勿将文中示例答案当作唯一标准,面试重在展现思维过程与个人特质。