06 如何准备一线互联网公司面试? 本课时我们来讲讲如何准备一线互联网公司面试。

互联网技术面试的特点

互联网公司的技术面试有一些侧重点,国内互联网公司和外企的侧重点又有不同。BAT 互联网公司看重项目能力,重点考察语言深度和项目能力,国外 IT 公司更看重计算机基础,比如微软和 Amazon 的面试,每轮面试都是算法题的在线测评,针对社招还会有 System Design 题目。

一般来说,一线互联网公司面试都有下面的特点:

image

1. 看重数据结构和算法等计算机基础知识

一线互联网公司在面试中更加关注计算机基础知识的考察,比如数据结构和算法,操作系统、网络原理,目前,很多国内公司在招聘上也看齐 Google、Facebook 等海外企业,面试重点考察算法,如果没有 ACM 经验,不刷题很难通过。

2. 深入技术栈,考察对原理和源码的掌握程度

深入底层实现,考察对相关组件的原理掌握程度,以及是否读过源码等。因为互联网用户基数比较大,一个细微的优化可能会带来很大的收益,同样,一个很小的问题可能会对线上业务造成毁灭性的影响,所以要知其然还要知其所以然,对技术栈的掌握要求比较深入。

3. 偏向实际问题,考察业务中的应用

面试中通常会结合实际业务场景来提问,其考察的是在真实业务中如何设计。我们知道,条条大路通罗马,一个功能点,技术方案可能有很多,但是从落地到代码实现,就要限制于整体方案、上下游约束等,典型的比如秒杀系统、微博会员关注关系设计等。

4. 重视分布式系统、高可用等设计方向

大型互联网公司,特别是 C 端的业务,面对的是海量的用户和请求,牵一发而动全身,对系统可用性、分布式高可用等有极高的要求,所以在面试中会重点考察分布式系统设计,如何构建高并发高可用的系统。

如何高效准备面试

分析了互联网公司的面试特点,接下来就是有针对性的准备面试。如何快速了解一个公司的招聘要求?答案就是去各大招聘网站,从招聘启事入手,这也是最快、最有效的方式。

我们总结了招聘网站上十几家互联网大厂的招聘启事,从中寻找共性,以 Java 语言为代表,把一线互联网公司后端工程师通用的招聘要求列在了下面:

  • 计算机以及相关专业,本科或以上学历;
  • 扎实的数据结构与算法基础,熟悉计算机及网络相关知识;
  • 熟悉 Java 开发,掌握面向对象思想,具备扎实的抽象能力、设计能力;
  • 熟练使用 Spring 或其他 Web 框架,了解其原理;
  • 熟练使用 MySQL、Redis、 MongoDB 或者 ElasticSearch 等存储技术;
  • 了解 JVM 内存管理,掌握 JVM 调优技能;
  • 熟悉分布式系统常见技术,掌握 RPC 框架和微服务架构;
  • 良好的沟通交流能力,具备较强的学习能力和责任心,可以编写良好的代码文档。

感兴趣的可以去招聘网站上看一下,对后端开发的要求,基本就是在这个范围里,从这个通用招聘要求上,我们可以逐条拆解,总结如何高效准备面试。

image

1. 对学历和专业的要求,硬性标准

对学历和专业的要求,这一条一般都会注明,不过计算机行业比较包容,不拘一格,非科班以及转专业的技术大牛也有很多,这里不展开。

2. 加强计算机基础,提高算法和数据结构、操作系统等底层能力

计算机基础能力是面试的重点,在校招中更是着重考察。

数据结构方面,基本的数组、栈和队列、字符串、二叉树等结构,比如二叉树是面试中的重点,手写红黑树有点夸张,不过基本的遍历、二叉树重建、二叉树深度等必须掌握,需要在白纸上写写代码,考的是白板编程能力。

算法方面,基本的排序和查找、递归、分治、动态规划之类都会考察,这方面可以多看看《剑指 offer》《编程珠玑》,国内推荐牛客网,国外就是 LeetCode 的高频题。

操作系统和网络原理,比如基本的调度算法、文件系统,还有各种网络协议,比如 TCP/IP 协议、拥塞控制等。操作系统推荐机械工业出版社的华章系列教材,网络原理也有一些经典书籍,如果觉得《TCP/IP 详解》太厚,可以看《图解 HTTP 协议》和《图解 TCP/IP 协议》。

3. 深入一门编程语言,了解底层实现,各种语法糖和特性

后端工程师不管学习多少语言,都要有一门自己的主编程语言,什么是主编程语言,就是对这个编程语言你可以达到精通的程度,不是只会用,要从代码编译开始就知道程序是怎么运行的。典型的主语言有 Java、C++、PHP 及 Python 等。

针对 Java 语言,要了解 Java 语言的底层机制,字节码怎么用,为什么 Java 是平台无关型语言,这些都要搞明白,应用层面,对集合框架、网络 IO、并发编程、泛型、异常、反射等技术都要有比较深入的了解,一些常见的组件,还要学习源码,优化层面,Java 虚拟机调优、常见 JVM 问题的处理,这些都是面试经常考察的,也是一定要掌握的。

4. 加强数据库和缓存应用,掌握 NoSQL 技术

数据存储是业务的基石,从关系型数据库 MySQL 到 NoSQL,从 Memcached 到 Redis 的各种缓存,这些都是面试的必考题,从应用到底层逻辑都必须了解,数据库本身这块的知识点更是重要,Redis 也是面试的重点,作为应用最多的缓存,Redis 在开发中已经和 MySQL 一样重要。

5. 学习高并发和高可用的分布式系统设计

高并发是技术人一直追求的,为什么我们说双十一是对系统架构的挑战,就是天量的 QPS 请求,在这种情况下,如何保障系统的高可用,保证业务正常,是每个工程师都要思考的。分布式系统架构,以及高并发和高可用知识,则需要在工作中注意积累,如果工作中没有类似的上手锻炼机会,也可以通过各种书籍和专栏等渠道来学习。

6. 增强软性指标,包括快速学习,良好的沟通能力

除了技术实力,软性指标也很重要,在平时的工作中,要注意梳理文档,养成良好的文档能力,和同事的沟通中,多学习下《金字塔原理》等沟通技巧,在面试中就可以更好的表现自己。

另外,要注意工作上业务的连续性,技术为业务服务,更好地了解业务,也可以帮助你拿到心仪的 Offer。

参考资料

https://learn.lianglianglee.com/%e4%b8%93%e6%a0%8f/%e5%88%86%e5%b8%83%e5%bc%8f%e6%8a%80%e6%9c%af%e5%8e%9f%e7%90%86%e4%b8%8e%e5%ae%9e%e6%88%9845%e8%ae%b2-%e5%ae%8c/06%20%e5%a6%82%e4%bd%95%e5%87%86%e5%a4%87%e4%b8%80%e7%ba%bf%e4%ba%92%e8%81%94%e7%bd%91%e5%85%ac%e5%8f%b8%e9%9d%a2%e8%af%95%ef%bc%9f.md