本文转载自微信公众号「故里学Java」,作者故里。转载本文请联系故里学Java公众号。
又是一天夜深人静,老故里照常掏出电脑,给自己充一下电,刚好就看到了一个关于面试的课程,因为动了提桶的心思就看一下,感觉很有用,就结合自己的想法记录下来。
(图片来源:极客时间 每日一课《如何全面、高效地准备技术面试》)
接下来,分三部分:面试前、面试中、面试后。
面试前
1、编程能力
编程能力是最重要的,对于开发人员来说,这是核心竞争力,也是面试官最看重的部分之一。如何更快速的提高自己的编程能力?
每个人有各自的方式,比如:刷算法题,报训练营、自己看源码等等。先说说刷算法题,很多人喜欢刷力扣,保持着不错的刷题数量,如果站在更高的层面上思考,这个题想考什么知识点?我对这些知识点的掌握程度?这个知识点还可以怎么来考?相信在坚持刷题一段时间之后效果是很显著的。
专栏中作者自己的刷题经验,我们也可以借鉴,当没有头绪的时候,可以尝试二叉树相关的题目,二叉树也是面试中非常高频的考点,而二叉树题目中通常涉及递归和遍历,这些也是后面解决更复杂问题的基础。
举例:力扣226题“翻转二叉树”:
二叉树问题往往是通过递归方法解决的,而递归的要点就在于不需要关注整体完成了什么任务,只需要把任务细化为每次递归的子任务,剩下的交给递归就可以了。对于这个题来说,我们只要把二叉树每个节点的左右节点进行交换,自上而下完成这个子任务,整个二叉树就完成了翻转。可以先写出子任务:
- def invertTree(root: TreeNode) -> TreeNode:
- # 将二叉树的左右子节点进行交换
- tmp_node = root.left
- root.left = root.right
- root.right = tmp_node
- return root
根据子任务代码可以看出,针对输入的一个根节点,我们已经可以把它的左右节点进行翻转,那怎么让这个任务递归进行呢?我们需要在完成当前任务的后边添加递归任务就可以:
- def invertTree(root: TreeNode) -> TreeNode:
- # 将二叉树的左右子节点进行交换
- tmp_node = root.left
- root.left = root.right
- root.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.left
- root.left = root.right
- root.right = tmp_node
- # 添加递归任务
- invertTree(root.left)
- invertTree(root.right)
- return root
在完成题目后,我们也应该对自己进行题问,明确自己是否掌握了这道题的知识点,即二叉树的遍历与递归思想的拆解,并且是否可以举一反三,如果觉得自己掌握的不够可以刷一些相似的题目。
以上这些是看到的别人的经验,我自己一般喜欢玩自己平时工作中的代码,闲的时候看看自己写的代码,很多时间就会有新的想法,可能当时写的时候想的比较狭隘,隔了一段时间,结合模块的整体情况重新设计,重构一下代码,这个过程也是很有趣的,也可以发现一些影响性能的点,不断优化,让自己的程序更加顺滑。自己写的代码自己是最了解的,结合平时自己学的系统设计、性能优化等方面的知识,现学现卖,这个实践的过程是我认为效率最高的。
2、专业领域知识
编程能力只是面试过程中的一部分,专业领域的知识也是非常重要的,比如你特别熟悉电商业务、供应链业务、全渠道业务等等,通常也是因人而异,因岗位而异。两方面准备:
准备自己当前或者之前做过的另外的专业知识,这对于找同领域岗位是非常有帮助的,很多公司都希望招一个技术ok又懂业务的伙伴,可以更好的融入团队。
针对性领域知识,针对想投的岗位,进行一些特殊准备,这样扩展投递岗位的范围,也可以提高面试的成功率。
3、建立相关内容
以上的准备可能需要提前准备,那么简历很多人就会忽略其重要性,在面试前匆匆准备。面试官在跟我们面对面之前,都是只能通过简历来了解我们的过往经历,来进行题问。
在准备面试简历的时候也有很多技巧,社招简历,一些长期、规模较大的、较为重要的项目经历可以详述,一些简单的项目就可以忽略不写。对写在简历上的内容充分准备,在面试的时候侃侃而谈,适当地延申,这些都可以是加分项。
面试中
状态
面试过程中与面试官交流的过程,转不停是一个非常重要的关键点。精神状态就是我们的精神面貌,可以从说话的声音、表情、举止等方面反映出来,好的精神状态可以提高面试管与你交流的意愿,也有助于你更好的展示自己,提升面试官的印象分。思维状态就是要保持思维敏捷,快速解决面试官抛出的问题,心理状态对于面试的影响可能是比较大的,很多人在面试的时候很容易因为过度紧张手脚冰凉大脑一片空白,在面试的时候适度紧张,然后再逐渐放松,让你感到些许躁动,思维活动迅速,这就是最好的心理状态。
态度
态度主要就诚实、诚恳。搞技术的人一般都比较简单,如果在面试过程中不诚实或不诚信的情况,印象分可能就直接没有了,面试官也不愿意招这样的人。诚恳是在面试过程中,与面试官出现意见不一致,可以态度诚恳的交流交换意见,不一定要争论个高下。
沟通
面试过程中的最后一个关键点就是沟通,主要是三个原则:沟通主动、回答明确、沉着应对。面试过程中,面试官也会根据面试沟通情况综合考量你在日常工作中的沟通能力,这些也是工作中非常重要的。举例,如果在面试中突然忘记了某个点,不要突然就安静下来,可以先从相关的内容说起,有助于快速回忆,哪怕真的想不起来,也可以展示出你真的了解这一块,只是偶尔忘记了。
面试后
面试结束,在收到offer之前都不能放松,还是要复盘、总结,一方面对自己的技术查漏补缺,也可以对面试过程中发挥不好的地方进行总结,下次面试过程中多注意。
面试结束后,也可以主动和面试官确认后续情况,也不能太着急,最好是在面试结束后3-5天后确认,这样也可以体现我们对于这个机会的看重,如果有后续的面试还可以提前着手准备。
最后
“金九银十”马上金九就要过去了,还有想法的兄弟们可以抓住后边的机会,近期没有跑路的兄弟,也可以思考一下,一些平时需要准备的东西,等面试的时候再去准备就有点迟了,日常中不断提高自己,让自己在未来有更多选择。“
参考了:https://time.geekbang.org/dailylesson/detail/100056887#previewimg