概述
工作了几年,当我有了面试官的经验之后,我发现认真准备简历和面试是非常重要的,因为毫无准备就来面试的求职者真的太多了。这篇文章我把这几年作为面试者和面试官身份的的经验給大家,希望大家可以从中学到一些面试的技巧,找到心仪的工作。大家也可以使用 求职课程 进行简历 Review 和模拟面试,这样既能节省请假面试的时间,也能根据我们的反馈改善自己面试的表现。在真实面试的时候就会更有把握。
分析阶段
不同的公司乃至部门,面试的流程和着重点都有颇大的差别。国内以腾讯为例,微信部门与深圳总部的面试流程和着重点就不一样。微信一面的时候需要五十分钟内手写 4 道偏简单的算法题,但是在深圳总部面试的时候一面却是没有算法题,两小时的考卷。更多的是与面试官聊技术与项目经验。国外的话,甲骨文五轮的面试可能四轮是系统设计,一轮是算法。亚马逊虽然注重算法,但是非技术问题在面试中占比非常高。你首先需要知道面试中考察什么内容之后才去开始准备,国内可以通过我们整理的高频题库,牛客网,看准网着手复习。国外可以通过一亩三分地,Blind,Leetcode discuss 等网站找到这些信息。
准备阶段
设定限期
面试准备不能无休止地进行下去,因为计算机知识永远都学习不完。可以给自己设立一个时间点,在时间点之后就开始投简历进行面试。例如你可以设立一个月的面试准备时间,然后再根据求职的岗位以及自己的实际情况去分配时间,把时间主要分给面试主要考察的地方。
技术准备
基础知识主要包括:编程语言基础,第三方工具基础(框架,中间件等),算法与数据结构,计算机网络,操作系统,数据库。我在程序员面试推荐书籍这篇文章中列出了面试常见的问题以及对应的解答书籍供大家参考,这里我列举一些面试常见的问题:
1. 编程语言基础
- 数据结构的实现细节以及比较:数组,链表,哈希表是如何实现的,底层内存分配是怎样的?插入与查找的时间复杂度是多少,分别有什么优缺点。
- 编程语言特性: Java 的字符串池是怎么实现的,垃圾回收的流程以及原理。
- 关键字特性:包括 Java 中的 static,final,Python 中的 __init__ 关键字的含义以及使用场景。面向对象的细节:类的封装,函数与变量继承,抽象类和接口有什么区别等。
- 多线程与多进程:线程如何同步,进程如何同步,wait() 函数使用场景以及常用的并发编程模式。
2. 第三方工具
- 整体架构:这个工具整体的架构是怎样的?主要由哪几个部分组成,它们之间是如何通信以及合作的。
- 实现原理:核心功能是如何实现的?对比另外一款工具做了哪些优化以及改进。
3. 算法基础
- 算法题ÿ