Logo
Section 1 / 2

课程概述

了解本课程的概览。

导入

课程概述

了解本课程的概览。

编程模式及其重要性

编程面试很难。你永远不知道会遇到什么问题,而且题目数量庞大!更糟糕的是,面试官期望你最终(甚至立即)找到最优解。

不过好消息是,存在一些“编程模式”可以帮助你。编程模式是一种可定制的代码蓝图,能够高效解决许多相关问题。

你不需要靠死记硬背来掌握所有编程面试题的解法。大多数编程问题都可以提炼为通用版本。掌握这些编程模式,就相当于拥有了应对这些问题的工具箱,能帮助你找到最优解决方案。实现这一点需要掌握两个关键点:

  1. 每种模式的工作原理。
  2. 如何判断在给定问题中应使用哪种模式。

本课程简介

本课程精选了215道最常见的编程面试题,按照26种编程模式进行组织。传统建议是刷100或200道难题来准备技术面试,但如果没有扎实的概念基础,这种做法本质上只是临时抱佛脚。将问题分类为编程模式的目的,正是为了帮助你建立起稳固的概念框架。这将使你能够对新问题进行批判性思考,并采用最合适的解题方法。

每节课都深入剖析编程问题的核心,展示推荐解法的逻辑思路与实现细节。我们还加入了多种互动元素,如谜题和图示,帮助你更好地理解问题本质。在此基础上,你可以识别出最适合的模式,并构建出优化的解决方案。

课程结构

本课程中的26种编程模式,每种都用于解决约5个问题,让你充分理解该技术的核心思想,并尝试将其应用于类似问题。

每个模式下的问题按以下方式组织:

  • A类问题:提供逐步构建解法的过程,帮助你理解何时、为何以及如何设计解法中的每一个逻辑模块。
  • B类问题:深入解析解法,详细说明每一步的思路。
  • C类问题:提供解法的简要概述及完整代码实现。在你已通过三到四个问题掌握了该模式的基础上,这里开始逐步放手,但仍提供足够的支持,帮助你分析和理解解法。
  • D类问题:旨在测试你将该模式应用于新问题的能力。仅提供提示和线索,以激发你的创造力。

最后,“挑战自我”章节包含一系列由顶级科技公司常问的高阶面试题。

课程中的每道题都以两节课的形式呈现:第一节课介绍题目描述,第二节课给出推荐解法。这一结构适用于所有题目,除了D类问题以及“挑战自我”章节中的题目。

本课程的优势

课程为每种模式提供了详细的介绍,包括模式工作原理的可视化图示、使用指南以及实际应用场景。这些内容有助于拓宽你对解题方法的理解,并赋予你识别问题特征的能力,从而准确判断其背后的模式。

在挑战课中,我们采用自下而上的方法,逐步建立对问题的理解。配色图示帮助你直观地观察输入参数与对应输出之间的关系。此外,小测验可帮助确认你是否正确理解了问题。当你清晰理解问题后,我们会提供解法的高层逻辑结构,并引导你按正确顺序排列这些模块。这是你在编写代码前构思基本解题策略的绝佳机会。

...
Figure out the algorithm

此外,课程还提供了一系列实用的代码模板,供你自由选用。这能让代码更加简洁,避免重复书写相同结构,让你专注于解法的核心逻辑。

在解法课中,我们首先描述一种朴素的解法,然后结合模式中讨论的技术逐步优化。通过可视化展示,你可以深入理解算法的执行过程,跟踪变量和数据结构的变化。代码实现配有详尽的注释,便于理解设计细节。最后,明确列出解法的时间复杂度和空间复杂度,为你提供在最坏情况下的性能参考。这有助于你有效比较多个解法,并在编写代码时始终关注时间和空间复杂度。

关于复杂度的一点说明

在本课程中,报告一个解法的空间复杂度时,不计入输入数据和输出数据所占用的内存空间。当比较两个正确的解法时,输入和输出数据所占空间完全相同。因此,计入这部分空间无法判断哪个解法更节省空间。

谁应该参加此课程