你有提桶跑路的勇气吗?

开发 前端
又是一天夜深人静,老故里照常掏出电脑,给自己充一下电,刚好就看到了一个关于面试的课程,因为动了提桶的心思就看一下,感觉很有用,就结合自己的想法记录下来。

[[425793]]

本文转载自微信公众号「故里学Java」,作者故里。转载本文请联系故里学Java公众号。

又是一天夜深人静,老故里照常掏出电脑,给自己充一下电,刚好就看到了一个关于面试的课程,因为动了提桶的心思就看一下,感觉很有用,就结合自己的想法记录下来。

(图片来源:极客时间 每日一课《如何全面、高效地准备技术面试》)

接下来,分三部分:面试前、面试中、面试后。

面试前

1、编程能力

编程能力是最重要的,对于开发人员来说,这是核心竞争力,也是面试官最看重的部分之一。如何更快速的提高自己的编程能力?

每个人有各自的方式,比如:刷算法题,报训练营、自己看源码等等。先说说刷算法题,很多人喜欢刷力扣,保持着不错的刷题数量,如果站在更高的层面上思考,这个题想考什么知识点?我对这些知识点的掌握程度?这个知识点还可以怎么来考?相信在坚持刷题一段时间之后效果是很显著的。

专栏中作者自己的刷题经验,我们也可以借鉴,当没有头绪的时候,可以尝试二叉树相关的题目,二叉树也是面试中非常高频的考点,而二叉树题目中通常涉及递归和遍历,这些也是后面解决更复杂问题的基础。

举例:力扣226题“翻转二叉树”:

二叉树问题往往是通过递归方法解决的,而递归的要点就在于不需要关注整体完成了什么任务,只需要把任务细化为每次递归的子任务,剩下的交给递归就可以了。对于这个题来说,我们只要把二叉树每个节点的左右节点进行交换,自上而下完成这个子任务,整个二叉树就完成了翻转。可以先写出子任务:

  1. def invertTree(root: TreeNode) -> TreeNode: 
  2.     # 将二叉树的左右子节点进行交换 
  3.     tmp_node = root.left 
  4.     root.left = root.right 
  5.     root.right = tmp_node 
  6.     return root 

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

  1. def invertTree(root: TreeNode) -> TreeNode: 
  2.     # 将二叉树的左右子节点进行交换 
  3.     tmp_node = root.left 
  4.     root.left = root.right 
  5.     root.right = tmp_node 
  6.     # 添加递归任务 
  7.     invertTree(root.left
  8.     invertTree(root.right
  9.     return root 

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

  1. def invertTree(root: TreeNode) -> TreeNode: 
  2.     # 处理 basecase,遇到叶子节点停止 
  3.     if root == None: 
  4.             return None 
  5.     # 将二叉树的左右子节点进行交换 
  6.     tmp_node = root.left 
  7.     root.left = root.right 
  8.     root.right = tmp_node 
  9.     # 添加递归任务 
  10.     invertTree(root.left
  11.     invertTree(root.right
  12.     return root 

在完成题目后,我们也应该对自己进行题问,明确自己是否掌握了这道题的知识点,即二叉树的遍历与递归思想的拆解,并且是否可以举一反三,如果觉得自己掌握的不够可以刷一些相似的题目。

以上这些是看到的别人的经验,我自己一般喜欢玩自己平时工作中的代码,闲的时候看看自己写的代码,很多时间就会有新的想法,可能当时写的时候想的比较狭隘,隔了一段时间,结合模块的整体情况重新设计,重构一下代码,这个过程也是很有趣的,也可以发现一些影响性能的点,不断优化,让自己的程序更加顺滑。自己写的代码自己是最了解的,结合平时自己学的系统设计、性能优化等方面的知识,现学现卖,这个实践的过程是我认为效率最高的。

2、专业领域知识

编程能力只是面试过程中的一部分,专业领域的知识也是非常重要的,比如你特别熟悉电商业务、供应链业务、全渠道业务等等,通常也是因人而异,因岗位而异。两方面准备:

准备自己当前或者之前做过的另外的专业知识,这对于找同领域岗位是非常有帮助的,很多公司都希望招一个技术ok又懂业务的伙伴,可以更好的融入团队。

针对性领域知识,针对想投的岗位,进行一些特殊准备,这样扩展投递岗位的范围,也可以提高面试的成功率。

3、建立相关内容

以上的准备可能需要提前准备,那么简历很多人就会忽略其重要性,在面试前匆匆准备。面试官在跟我们面对面之前,都是只能通过简历来了解我们的过往经历,来进行题问。

在准备面试简历的时候也有很多技巧,社招简历,一些长期、规模较大的、较为重要的项目经历可以详述,一些简单的项目就可以忽略不写。对写在简历上的内容充分准备,在面试的时候侃侃而谈,适当地延申,这些都可以是加分项。

面试中

状态

面试过程中与面试官交流的过程,转不停是一个非常重要的关键点。精神状态就是我们的精神面貌,可以从说话的声音、表情、举止等方面反映出来,好的精神状态可以提高面试管与你交流的意愿,也有助于你更好的展示自己,提升面试官的印象分。思维状态就是要保持思维敏捷,快速解决面试官抛出的问题,心理状态对于面试的影响可能是比较大的,很多人在面试的时候很容易因为过度紧张手脚冰凉大脑一片空白,在面试的时候适度紧张,然后再逐渐放松,让你感到些许躁动,思维活动迅速,这就是最好的心理状态。

态度

态度主要就诚实、诚恳。搞技术的人一般都比较简单,如果在面试过程中不诚实或不诚信的情况,印象分可能就直接没有了,面试官也不愿意招这样的人。诚恳是在面试过程中,与面试官出现意见不一致,可以态度诚恳的交流交换意见,不一定要争论个高下。

沟通

面试过程中的最后一个关键点就是沟通,主要是三个原则:沟通主动、回答明确、沉着应对。面试过程中,面试官也会根据面试沟通情况综合考量你在日常工作中的沟通能力,这些也是工作中非常重要的。举例,如果在面试中突然忘记了某个点,不要突然就安静下来,可以先从相关的内容说起,有助于快速回忆,哪怕真的想不起来,也可以展示出你真的了解这一块,只是偶尔忘记了。

面试后

面试结束,在收到offer之前都不能放松,还是要复盘、总结,一方面对自己的技术查漏补缺,也可以对面试过程中发挥不好的地方进行总结,下次面试过程中多注意。

面试结束后,也可以主动和面试官确认后续情况,也不能太着急,最好是在面试结束后3-5天后确认,这样也可以体现我们对于这个机会的看重,如果有后续的面试还可以提前着手准备。

最后

“金九银十”马上金九就要过去了,还有想法的兄弟们可以抓住后边的机会,近期没有跑路的兄弟,也可以思考一下,一些平时需要准备的东西,等面试的时候再去准备就有点迟了,日常中不断提高自己,让自己在未来有更多选择。“

 

参考了:https://time.geekbang.org/dailylesson/detail/100056887#previewimg

 

责任编辑:武晓燕 来源: 故里学Java
相关推荐

2021-08-04 10:34:00

MySQL主键int32

2013-06-09 10:37:14

架构框架

2024-06-07 08:26:10

2012-11-22 11:35:15

打印机

2018-02-25 22:37:21

应用开关Java

2010-12-21 11:31:09

2019-11-05 09:21:10

程序员技能开发者

2018-03-13 11:44:55

金融云银行上云

2021-03-14 15:05:22

大数据程序员游戏

2023-04-26 10:21:04

2021-07-12 07:59:05

对象接口编程

2018-08-29 18:53:44

2020-07-14 07:48:19

Java对象JVM

2024-09-14 10:59:11

2024-05-31 08:58:12

2022-01-05 12:03:48

MySQL索引数据

2021-03-11 07:26:52

垃圾回收器单线程

2010-04-16 14:51:05

网络流量

2023-10-16 23:12:02

Redis数据结构

2022-05-11 09:04:50

Go函数数组
点赞
收藏

51CTO技术栈公众号