写点什么

程序员面试指北:如何更高效的准备面试

用户头像
邴越
关注
发布于: 2021 年 04 月 02 日

金三银四,今天从一个大厂面试官的角度,来聊聊技术面试那些事儿,帮助大家更好的准备面试,拿到心仪的 Offer,关注我的公众号「越哥聊 IT」,有最新的产品技术文章,

大厂都是怎么面试的

 

知己知彼,才能百战不殆,我从两个方面对互联网行业的面试进行拆解,一个是面试流程,另外一个是结构化面试。

 

面试流程

 

大部分公司的招聘流程可以分为简历投递、简历筛选、面试环节、沟通 Offer 几个步骤。

校园招聘比较特殊,是企业在统一时间到学校去进行宣讲,大批量的简历收集和筛选,其他的面试流程都是一致的。

 

  • 简历投递

 

除了猎头等第三方渠道,求职的第一步就是简历投递。

 

你可能会说,简历投递就是去招聘网站上选择岗位,然后投递就好了,这个有什么特别的。

 

其实投递简历也有一些技巧,比如简历的文件名,可以使用“名字—求职岗位—教育背景—工作背景”这样的格式命名,突出自己的优势,方便 HR 快速评估。

 

选择合适的招聘网站投递,相比前程无忧等综合类网站,Boss 直聘等垂直招聘网站更适合 IT 类求职。

 

另外一个非常有效的简历投递渠道,就是内推,找到合适的人来内推,可以大大提高面试成功率。

 

多联系自己的师兄师姐,前同事等,或者去 V2EX,北邮人等 IT 人活跃的社区,都可以找到类似的内推机会。


  • 简历筛选

 

简历筛选环节,就是如何在简历中突出自己的优势。

 

有些朋友明明项目很出彩,可落到简历上就一笔带过,要记住,除非你是业界大佬或者知名人士,对于大部分候选人来说,面试官了解你的最直接材料就是简历。

 

所以一定要认真对待简历的制作,特别是专业技能、项目经验等的描写。对于技术类岗位,一个坚持更新的博客、开源项目的代码贡献,都可以作为你的亮点。

 

  • 面试环节

 

Talk is cheap,show me the code,面试环节直接决定面试结果,技术和业务实力始终是最重要的。

 

作为选拔性环节,互联网大厂一直有“面试造火箭,入职拧螺丝”的特点,毕竟内卷就是当下的国情,各位老铁们一路做题家过来也都清楚,能做的就是有针对性的不断提高和积累。

 


另外,一些公司比较看重企业文化和价值观等,会有对应的价值观和性格测评,像阿里巴巴,HR 有一票否决权,所以非技术的面试环节同样重要。

 

  • 沟通 Offer

 

面试通过以后就是 Offer 沟通和背调环节,Offer 沟通说白了就是谈钱谈职级,这一点还是要多和身边有经验的朋友请教下。



从猎头、朋友、网络了解这个岗位的薪酬范围,根据自己的当前薪酬和跳槽期望综合考虑,自己有一个心理区间。


在和 HR 沟通的环节中,Hr 希望帮公司节省成本,你希望多涨点工资,信息不对称,求职者始终是缺乏信息的一方,不要相信太多的大饼,你的核心价值是你的业务能力和职业素养,而不是薪资的谈判能力。


最后一步 Offer 发放和入职,到这里整个面试流程就结束了。

 

结构化面试

 

各大互联网公司对面试官都是有要求的,毕竟在和候选人沟通的过程中,面试官就代表了公司的对外形象,所以一般都会有针对面试官的培训。

 

以阿里、字节跳动等为例,一般会采取「结构化面试」的方式。

 

结构化面试,指的是将各种知识技能做好划分,例如编程语言,操作系统,数据库,网络,算法,工程/架构设计,并通过几个面试官之间的多轮交叉面试来考查掌握程度。

 

这样的面试方法,可以避免某个面试官考察太偏,并充分挖掘候选人的亮点。

 

人力部门也会特别关注候选人的面试体验,每轮面试过后,都会通过调查问卷的形式来取得求职者对本轮面试的一些体验。

 

如何考察技术能力

 

程序员面试,当然技术是最重要的,不同公司对技术能力的考察会有一些侧重点。

 

一般来说,国内互联网公司更看重项目能力,国外公司更看重计算机基础。阿里的面试更看重你的项目经验,Google 和 Facebook 等北美公司的面试,每轮面试都需要手写算法,针对社招还会有 System Design 题目。



  • 考察计算机基础,如操作系统、网络原理等

 

一线互联网公司在面试中更加关注计算机基础知识的考察,比如数据结构和算法,操作系统、网络原理。

 

国内公司在招聘上也越来越看齐 Google、Facebook 等海外企业,这方面比较典型的公司是今日头条,面试重点考察算法,不提前刷题很难通过。

 

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

 

深入底层实现,考察对相关组件的原理掌握程度,以及是否读过源码等。

 

互联网用户基数比较大,一个细微的优化可能会带来很大的收益,同样,一个很小的问题可能会对线上业务造成毁灭性的影响,所以要知其然还要知其所以然,对技术栈的掌握要求比较深入。

 

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

 

面试中通常会结合实际业务场景来提问,其考察的是在真实业务中解决问题的能力。

 

条条大路通罗马,一个功能点,技术方案可能有很多,但是从落地到代码实现,就要限制于整体方案、上下游约束等,典型的比如秒杀系统、微博会员关注关系设计等。

 

  • 重视分布式系统,稳定性等方向

 

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

 

  • 考察业务积累,岗位匹配度

对于一些比较高级的技术岗位,会特别关注对业务的熟悉程度,比如支付行业,广告行业。

 

关注哪些软素质


除了技术能力的考察,面试官会关注候选人的一些软素质,比如沟通能力,抗压能力,自主学习能力等。



想继续深入的老铁可以了解下「行为面试法」和「STAR 法则」,这里我就不再展开了。



沟通能力

  • 沟通是否顺畅

  • 表达是否有条例

  • 能否清楚表达自己负责做的事情

  • 能否抓重点,系统的技术要点

 

学习能力

  • 有没有良好的学习习惯

  • 在工作之外是否有持续的积累

  • 能否快速深入某个技术栈,业务领域

 

发展潜力

  • 通过是否有良好的习惯

  • 是否一直在学习来判断

  • 是否热爱计算机,对编程有激情

 

自驱能力

  • 有梦想,有较高的个人追求

  • 是否敢做有困难的事情

  • 是否敢做没把握的事情

 

抗压能力

  • 是否有负责多件事情,多件事情如何并行处理

  • 如果让你接手一个历史悠久的模块,你会怎么做

  • 你说的 XXX 跟开源的 YYY 很像,是不是抄袭的


如何高效准备面试


聊完了互联网技术面试的特点,接下来聊聊如何高效的准备面试。


建议在面试之前,都去招聘网站上看一下,总结一些岗位要求,下面我从技术面试出发,总结下面几点。

 

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

 

计算机基础能力是校招的重点,社招也会着重考察。

 

操作系统和网络原理,比如基本的调度算法、文件系统,还有各种网络协议,比如 TCP/IP 协议也是必备的,操作系统推荐机械工业出版社的华章系列教材,网络原理也有几本大部头,可以看《图解 HTTP 协议》和《图解 TCP/IP 协议》。



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

 

算法方面,基本的排序和查找算法就不用提了,递归、分治、BFS、DFS、动态规划算法都在题目范围中。如果算法基础不太好,就刷刷《剑指 offer》《编程珠玑》、LeetCode 的高频题。

 

刷刷 LeetCode,对于大部分面试来说足够了,除非你在简历上介绍自己是 ACM,NOI 获奖选手,不会在算法上特别刁难。

 

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

 

工程师不管学习多少语言,都要有一门熟悉的主编程语言。


什么是主编程语言,就是对这个编程语言你可以达到深入的程度,不是只会用,要从代码编译开始就知道程序是怎么运行的。典型的主语言有 Java、C++、Golang 、PHP 及 Python 等。



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

 

  • 加强数据库和缓存应用,掌握各种 NoSQL 技术

 

数据存储是业务的基石,从关系型数据库 MySQL 到 NoSQL,从 Memcached 到 Redis 的各种缓存,这些都是面试的必考题,从应用到底层逻辑都必须了解。


数据库本身这块的知识点更是重要,Redis 也是面试的重点,作为应用最多的缓存,Redis 在开发中已经和 MySQL 一样重要。

 

  • 学习高并发,高可用,分布式系统设计

 

高并发是技术人一直追求的,为什么我们说阿里的双十一是对系统架构的挑战?


就是天量的 QPS 请求,在这种情况下,一个很小的问题都会被放大,导致巨大的业务损失。如何保障系统的高可用,保证业务正常,是每个工程师都要思考的。要在工作中注意积累分布式系统架构,以及高并发和高可用知识。

 

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

 

除了技术实力,软性指标也很重要,平时的工作中,要注意结构化和体系化的思考,学习下《金字塔原理》等表达技巧,养成良好的文档能力,在面试中就可以更好的表现自己。


发布于: 2021 年 04 月 02 日阅读数: 113
用户头像

邴越

关注

关注产品和技术 2018.08.13 加入

阿里云MVP,多年一线互联网研发经验

评论

发布
暂无评论
程序员面试指北:如何更高效的准备面试