(7)轮询法 在设计每道面试笔试题时,往往会有一个载体,这个载体便是数据结构,例如数组、链 表、二叉树或图等,当载体确定后,可用的算法自然而然地就会暴露出来。可问题是很多时 候并不确定这个载体是什么。当无法确定这个载体时,一般也就很难想到合适的方法了。 编者建议,此时,求职者可以采用最原始的思考问题的方法——轮询法,在脑海中轮询 各种可能的数据结构与算法,常考的数据结构与算法一共就那么几种(见表 1),即使不完 全一样,也是由此衍生出来的或者相似的,总有一款适合考题的。
表 1 最常考的数据结构与算法知识点
数 据 结 构 算 法 概 念
链表 广度(深度)优先搜索 位操作
数组 递归 设计模式
二叉树 二分查找 内存管理(堆、栈等)
树 排序(归并排序、快速排序等)
堆(大顶堆、小顶堆) 树的插入/删除/查找/遍历等
栈 图论
队列 Hash 法
向量 分治法
Hash 表 动态规划
此种方法看似笨拙,其实实用,只要求职者对常见的数据结构与算法烂熟于心,一点都 没有问题。 为了更好地理解这些方法,求职者可以在平时的准备过程中,应用此类方法去答题,做 得多了,自然对各种方法也就熟能生巧了,面试的时候,再遇到此类问题,也就能够收放自 如了。当然,千万不要相信有着张无忌般的运气,能够在一夜之间练成乾坤大挪移这一绝世 神功,称霸武林,算法设计功力的练就是平时一点一滴的付出和思维的磨练。方法与技巧也 许只是给面试打了一针“鸡血”、喂一口“大补丸”,不会让自己变得从容自信,真正的功力 还是需要一个长期的积累过程的。
经验技巧 6 如何回答系统设计题?
应届生在面试的时候,偶尔也会遇到一些系统设计题,而这些题目往往只是测试一下求 职者的知识面,或者测试求职者对系统架构方面的了解,一般不会涉及具体的编码工作。虽 然如此,对于此类问题,很多人还是感觉难以应对,也不知道从何说起。
如何应对此类题目呢?在正式介绍基础知识之前,首先罗列几个常见的系统设计相关的 面试笔试题,如下所示: