如何全面、高效地准备大厂的技术面试?

如何面试大厂系列

序号内容链接地址
1大厂面试时,面试官会考查哪些能力?https://blog.csdn.net/belongtocode/article/details/117810750
2如何在国内互联网大厂面试中游刃有余?https://blog.csdn.net/belongtocode/article/details/117810951
3如何全面、高效地准备大厂的技术面试?https://blog.csdn.net/belongtocode/article/details/117811162
4在大厂面试中,如何应对算法能力考察?https://blog.csdn.net/belongtocode/article/details/117811339
5大厂技术面试中的开放类问题该怎么答?https://blog.csdn.net/belongtocode/article/details/117811446

你好,我是张云柯。

今天我们来聊一聊如何全面、高效地准备技术面试。

我们知道面试流程可以分为面试前、面试中、面试后三个阶段,接下来,我就分阶段给你讲解如何准备技术面试,希望能给你提供一些参考价值。

面试前

我们首先梳理一下技术面试前需要重点关注的三大内容,分别是编程能力、专业领域知识、简历相关内容。

img

编程能力

编程能力方面自然不必说,能写一手好代码是一个技术人的基础能力,也是面试官最看重的部分之一。你可能会问,那怎么有效提升编程能力呢?

通常情况下,锻炼编程能力最好的办法就是刷算法题。但是,在面试中,你并不一定能以刷题的数量取胜,因为相比于你有没有成功解题,面试官更看重你有没有真正理解面试题中的思想。所以,在前期刷题准备的过程中,你还应该站在更高的层面思考:这道题涉及什么知识点?我了解这些知识点吗?与该知识点相关的类似问题还有哪些?如果你能在刷题时多思考这些问题,效果一定是翻倍的。

这里我也给你分享一些我的刷题经验,如果刚开始刷题的时候毫无头绪,你可以优先尝试二叉树相关的题目。这是因为二叉树相关的题目是面试中的常客,而且二叉树题目中通常涉及递归和遍历,它们实际上是解决后面一些更复杂问题的基础。

举例来说,假设我们遇到 LeetCode 上面的 226 题“翻转二叉树”:

img

面对这道题,可能我们刚开始会没有头绪,如何将一整棵二叉树全部翻转呢?不过,我们知道,二叉树问题往往都是通过递归方法解决的,而递归的要点就在于不需要关注整体完成了什么任务,只需要把任务细化为每次递归的子任务,剩下的交给递归就可以。那么,对于这道题,我们只要把二叉树每个节点的左右节点进行交换,自上而下完成这个子任务,整个二叉树就可以完成翻转。根据上面的思路,我们可以先写出子任务代码:

def invertTree(root: TreeNode) -> TreeNode:
    # 将二叉树的左右子节点进行交换
    tmp_node = root.leftroot.left = root.rightroot.right = tmp_node
    return root

根据子任务代码可以看出,针对输入的一个根节点,我们已经可以把它的左右子节点进行翻转。那怎么让这个任务递归进行呢?我们只需要在完成当前任务后添加递归任务即可:

def invertTree(root: TreeNode) -> TreeNode:
    # 将二叉树的左右子节点进行交换
    tmp_node = root.leftroot.left = root.rightroot.right = tmp_node
    # 添加递归任务
    invertTree(root.left)
    invertTree(root.right)
    return root

在添加了递归任务后,我们还容易忽略一个问题,就是整个递归任务的最简单情况是什么?根据题意,当递归到整个二叉树的叶子节点后,应该停止递归:

def invertTree(root: TreeNode) -> TreeNode:
    # 处理 basecase,遇到叶子节点停止
    if root == None:return None
    # 将二叉树的左右子节点进行交换
    tmp_node = root.leftroot.left = root.rightroot.right = tmp_node
    # 添加递归任务
    invertTree(root.left)
    invertTree(root.right)
    return root

在完成题目后,我们也应该对自己进行提问,明确自己是否掌握了这道题的知识点,即二叉树的遍历与递归思想的拆解,并且是否可以做到举一反三。如果觉得自己掌握得不够好,可以继续刷一些相似的题目,比如 LeetCode116 题“填充二叉树的右侧指针”等,强化对这个知识点的理解。

专业领域知识

除了编程能力之外,面试前我们还要关注的重点就是专业领域的知识,这通常因人而异或因岗位而异,比如你是算法工程师,你需要去充分准备的专业领域知识就是机器学习相关的内容。

我认为专业领域知识可以分为两个重要方面:

  • 通用基础概念:这是必须准备的内容,通常可以选定一到两本参考书,结合自己已有的一些笔记或文档进行高效准备;
  • 针对性领域知识:针对不同公司的不同岗位,我们需要对这些领域知识进行额外准备。此时最高效的做法就是根据即将应聘的职位描述,对该职位所需要的内容进行针对性准备。

img

简历相关内容

除此之外,面试前我们还需要重点关注简历相关的内容,因为面试官往往只能通过简历来了解你的过往经验,并进行提问。

我们在准备简历的过程中,应该做到详略得当。以社会招聘简历为例,一些长期的、规模较大的、较为重要的项目经历可以详述,而一些较为简单的项目经历可以略写甚至不写。一个判断过往项目重要性的简单原则即为:项目产生的营收越大,那么该项目大概率是越重要的。

除此之外,如果你能对简历上的内容侃侃而谈,并对项目中涉及的知识进行适当延伸,相信这会是你的加分项。

面试中

相比于需要充分准备的面试前阶段,面试中最重要的就是临场表现与发挥,这里我也把面试中你需要注意的问题归纳为三个方面,状态、态度和沟通。

img

状态

面试过程是一个与人交流的过程,因此面试中第一个关键点就是状态,包括精神状态、思维状态和心理状态三个方面。

精神状态也就是我们通常说的精神面貌,可以从一个人的声音、表情、举止等多方面反映出来,一个好的精神状态可以提升面试官与你交流的意愿,提升面试官对你的印象分。而思维状态就是思维保持敏锐、活跃,能快速解决遇到的问题。另外,心理状态对于面试的影响也不容小觑。根据我的经验,面试时最好的心理状态是从面试开始时的适度紧张,然后逐渐放松并进入佳境。什么是适度紧张呢?如果你感到有些许的躁动,思维活动迅速,但又不至于手脚冰凉或大脑一片空白,那么恭喜你,达到了适度紧张的状态。

态度

第二个关键点是态度,主要可以用两个词形容:诚实和诚恳。诚实这个问题其实是老生常谈了,如果在面试时出现不诚实、不诚信的情况,那么相关的技术问题答得再好,恐怕面试官也不愿意把你招致麾下。同时我们也要诚恳,在面试中遇到问题,或者和面试官出现意见分歧的情况下,我们应该抱着诚恳的态度向面试官寻求一些提示,而不是“卡壳”沉默或一定要争论出个高下。

沟通

最后一个关键点是沟通,这里有三个原则:沟通主动,回答明确,沉着应对。举例来说,如果你在面试中突然想不起来某个模型的损失函数,先不要慌,尽可能把除了损失函数之外的模型相关内容详细描述,这有助于你快速进行回忆。如果你确实忘记了,也可以让面试官知道你对模型其实有足够的了解,只是偶然忘记了损失函数,这样可以有效化解问题回答不上来的危机。

面试后

面试后往往很多候选人会长舒一口气,感觉万事大吉,但实际上我们要做的事情还有很多,比如反思与主动。

img

大多数情况下,我们刚刚结束的面试应该不会是这次求职的最后一场面试,这也就意味着我们后续可能还要经历其他面试。所以,我们一定要进行回顾和反思,一方面对自己的技术问题查漏补缺,另一方面,反思上一次面试过程中有哪些不得体的地方,争取在下次改进。

除此之外,在面试结束后,你还可以主动和 HR 确认后续情况,但不要过于频繁和着急,最好在面试结束 3-5 天后去确认,这样既表现了自己对于这份机会的看重与关注,也为自己的下一步计划与安排抢占了先机。

总结

以上就是这节课的全部内容,你可以根据这张思维导图回忆一下面试中需要注意的具体细节:

img

实际上,关于面试的方法论可能会有很多种,而我今天给出的方法是我比较推荐,也是我在面试中的一些准备原则与方法,不一定适用于 100% 的场景,但是可以在绝大多数面试中助你一臂之力。

参考文章:极客时间每日一课
https://time.geekbang.org/dailylesson/detail/100056887

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Apple_Web

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值