两个月30场面试--互联网大厂后端开发面试总结

2023-07-16 14:52:45 浏览数 (2)

今年业务调整,终于下定决心走出目前的环境,准备面试换工作。面试进行了2个月,一共30多场面试,最终拿到字节、小红书、蚂蚁、拼多多、SelectDB 5个offer。面试的过程有坎坷也有些感触,总结一下,希望能帮助到寒冬下也在找工作的小伙伴吧。

首先简单介绍下自己的背景,方便看文章的小伙伴对标自己的经历。本人交大本硕,2018年毕业,毕业后就一直在腾讯工作,工作年限刚过5年,编程语言主要是C 和go,做ToB业务后台开发,业务方向在腾讯里个人感觉中等偏下吧,但领导蛮好、对我也还不错,所以绩效在团队里能排到前30%,2021年升T9。业务方向上做过IM和大数据相关的一些业务。

去年也做过一些面试,面了20多场,2023年和2022年相比:从市场行情上看,2022年有很多量化公司和新能源车企(蔚小理)的招聘,2023年这些企业明显缩招;互联网大厂招聘感觉有所回暖,但总体变化不大。

互联网大厂面试的形式基本类似,1个小时的视频面试,内容主要包括以下5个方面:项目经历、后台基础组件“八股文”、系统设计题、算法题、软性问题。下面就针对这5个方面分别介绍下都考察什么,以及如何准备。

项目经历

在我所有的面试中,这个部分都是时间占比最高的部分,基本上要占到30分钟左右,如果有些投递的岗位不是很匹配的情况,这部分时间可能会缩短,但基本也要20分钟以上。面试官基本上会针对你的简历聊,比如让你介绍下简历上写的某某事情,我总结下来,在这个部分中,面试官会关注3点:

  1. 简历上的内容是不是真的是你做的,所以会问到很多技术细节,比如库表设计、前后端如何交互、有没有对比其他设计方案等。
  2. 你有没有项目推动的能力(任务拆解、团队协作、进度管理)。
  3. 思考的深度(你的方案在哪些点还有优化的空间)和广度(你有没有了解你负责的项目和模块在整个系统中的位置,和其他部分如何配合和交互)。

所以,一定要做到简历上写的内容,自己要非常熟。这个熟不光是指它技术上是怎么实现的,还要熟当时做这个事情的完整过程,项目中遇到了哪些问题和挑战,你是如何解决的;项目上线后的运维、监控、告警情况;有哪些点可以做的更好。

比如我在一次面试中被问到一个具体接口的请求量的情况,当时很久没看就忘记了,当时就感觉很尴尬,面试也不出意外的挂了。

面试前期还是要找一些不太想去的公司练手,多说几次项目,也通过对方的提问找找自己有没有回顾不到位的点(自己回顾准备总有些遗漏,通过面试交流和复盘能准备的更细致)。或者也可以找熟悉的同学、同事帮自己做下模拟面试,或者私信联系我也行,我也很愿意帮助各位找工作的小伙伴。

项目熟悉是一方面,也要注意介绍表达的技巧,要能让面试官感兴趣,跟着你的介绍思考,甚至问出你提前准备好答案的问题。项目介绍可以参考STAR法则,我一般会先只讲S(项目背景,为啥要做这个事)、T(任务,我们是做了一个什么事)和R(最后效果是啥),非常简略或者基本不说A(具体采取了哪些行动)。在5分钟左右讲完STR之后,面试官一般会主动问这里具体做了什么事情,这样和面试官的互动感比较强。最后再聊聊整个项目里遇到的痛点和难点,以及自身的一些复盘(如果再做一次,哪里可以做的更好)。

八股文

这一部分算是面试里的基础考试,如果刚工作2-3年的同学这部分会问的多一些,5年及以上的同学基本上是在项目中穿插着问一些组件的问题,有的甚至不直接问这种问题。这部分虽然在面试中占比时间不多,但作为基础还是要好好准备一下的,主要在面试中体现你的专业度和对面试的重视。在面试中这部分问题有些确实不知道就回答不知道,不要乱猜,这部分偶尔有不会的也正常,面试不太会因为这部分挂掉。

社招面试常见的就是Mysql、Redis、Kafka这三个组件,以及RPC框架相关的问题。其他针对个人经历和面试岗位的特点会有所不同,比如我有些大数据方面的经验就会问spark和flink的一些概念和知识;一些特定使用C 的岗位会问C 的知识。准备的时候,如果是完全没用过,最好还是找本书系统的看看;如果工作中经常用,那就网上直接搜一搜“xxx面试题100道”,针对问题复习一下。

以下是我最近面试中遇到的“八股”问题,供大家参考。

Mysql

  1. 聚簇索引、覆盖索引、回表
  2. 4种事务隔离级别,分别解决什么问题
  3. 给了一个表和一些SQL语句,考察Mysql什么时候加读锁、写锁;间隙锁、临键锁如何生效
  4. Mysql binlog有哪几种模式,区别是什么
  5. Mysql 3大日志、作用分别是什么

Redis

  1. Redis常用数据结构
  2. Redis主从同步原理,主从模式和集群模式区别、优缺点
  3. ZSET底层实现原理
  4. Redis对1-99做了什么特殊优化
  5. Redis哈希表什么时候用数组遍历实现?原因是什么?
  6. Redis AOF日志记录什么内容

Kafka

  1. Kafka生产消费过程中哪些情况可能丢数据
  2. Kafka rebalance过程

大数据

  1. Flink数据处理一致性实现原理
  2. Flink如何保证分布式节点checkpoint同步
  3. Flink任务运行机制
  4. Spark任务运行机制
  5. Spark RDD怎么理解
  6. Clickhouse执行快的原因

C

  1. C 编译有哪些阶段
  2. C 宏定义和inline函数区别
  3. C 智能指针
  4. C 构造函数和析构函数能否抛出异常
  5. C 智能指针,shared_ptr引用计数是否线程安全
  6. C atomic作用和原理

算法题

现在基本上所有的互联网技术面试都会考察算法题,基本上都要求写出可执行的代码,在面试中占的时间大概在20分钟左右。面试之前还是要多刷刷题,即使之前刷过题,面试前也最好再刷一刷找找手感。以我的经验,基本刷leetcode前200道题里面的easy和medium就可以了,一些比较高频的hard也可以刷一下(比如接雨水和K个一组翻转链表),其中一些题干很长的、考细节实现的题目就不用刷了(比如字符串转换整数)。

算法题这部分很重要,基本上是写不出来必挂。这里说的写出来并不是一定要求实现的是最优解,写出最优解当然是最好的,但有些时候写出一个次优解也是有机会过的。如果面试时遇到没什么思路的问题,可以先尝试实现一个比较简单直接的算法,一方面可以和面试官沟通题目理解是不是正确,另一方面也给自己一些缓冲的时间,思考有没有更好的解法。不管思路是否最优,一定要注意程序要可执行、代码的风格规范(必要的时候可以一边写代码,一边写一点注释)、一些简单的边界要考虑清楚、主动写一些自测用例运行下,这些都是能提升面试印象的方法。

系统设计问题

对于工作2-3年的同学,基本上面试不会遇到系统设计问题;工作在5年左右,如果是要争取阿里P7或字节2-2的岗位的话,基本上在最后一轮面试中都会遇到系统设计题。系统设计题在面试中是置换算法题的时间,所以基本也在20分钟左右,一般有系统设计题就不用写算法题了。

系统设计问题的形式是给定一个常见的功能场景,设计功能的交互、数据存储、数据读写。在这个过程里考察你对存储系统的了解、缓存怎么做、如何保证可靠性和实时性、如何做高可用、如何支持高并发。比如我面试中遇到过下面几个系统设计问题:

  1. IM系统中,如果发送视频、图片需要转码的场景,整个流程怎么设计。
  2. 城市中公交站牌上要展示最近要到的一些车辆信息,系统如何设计。
  3. 设计一个评论系统。
  4. 直播答题系统如何实现的。

其他常见的系统设计场景还有商品秒杀、服务限频、延时消息系统等。系统设计问题我这次准备的时候是看了九章算法里的一个课程,然后B站上也找了一些视频看看,但总体上光靠学提升效果不大,因为1. 课程不可能覆盖所有系统设计问题;2. 课程上给的方案没有实操,也并不会有实际实现下来会遇到什么问题的经验。

所以我还做了另一件事,就是去看我现在工作的业务系统中,其他同事负责的模块是怎么设计的,看他们的文档、代码、监控数据,甚至多问问他们实际遇到过哪些问题,然后举一反三,自己去想生活中常用的一些系统是怎么实现的:比如头条怎么给你推你喜欢的内容、骑小黄车扫码开锁为啥提示你开蓝牙。

不过总体来讲我目前对于系统设计问题也不是特别有经验,有的面试中还是能明显感觉到回答的不太好。后面打算另写文章记录下自己回答系统设计问题的经历,看有没有同学想看吧,想看的人多(可以留言评论)我就快点写^_^。

软性问题

软性问题一般在第三轮面试和HR面试中经常出现。在技术面试中,它置换的是一些项目经历问题的时间,主要是考察作为一个开发在工作中的团队协作能力、领导力、抗压能力。这种问题准备的时候可以回顾下过去几年自己做的比较好的,但没有写在简历上的项目经历,回顾一下当时在哪些方面做的好、哪些方面可以提升。在回答问题的时候,把这些事情和思考当做故事讲出来,一般效果就不会差。

下面是我最近面试中遇到的偏技术的软性问题:

  1. 你在带人过程中做的比较好的地方有哪些?
  2. 你认为要成为一个团队leader,哪些方面比较重要?或者你距离一个leader,有哪些能力需要补足。
  3. 工作中你和你的leader在技术方案上有分歧,你会怎么处理?
  4. 有没有过去某一段工作你认为是不满意的?如果能重来,你会做哪些改进?
  5. 你对后台业务系统服务质量建设有没有什么思考?
  6. 你在某某项目中遇到的最困难的问题是什么,你是如何处理的?

HR面试中,基本全部时间都是软性问题,主要考察的是沟通能力、性格积极向上等方面,这部分回答基本上言之有理即可,想准备的话,可以网上搜搜常见HR面试问题,尝试用自己的经历套一下。

下面是我最近HR面试中遇到的一些软性问题:

  1. 你以后的职业规划是什么?
  2. 如果遇到和别的团队协作,但你现在要做的事情在对方团队优先级不高,你会怎么做?
  3. 你觉得你有哪些优点,有哪些不足?
  4. 你觉得你应聘这个岗位有什么优势?
  5. 你觉得你过去几年的工作里自己有哪些成长?或者可以分为哪几个阶段?

每次面试遇到回答的不好的软性问题,可以总结记录下,想想有没有更好的回答方式,这里没有标准答案,主要是要言之有理,逻辑自洽,如果回答能成体系就更好了(比如总分总形式、递进形式)。

面试最后还有一个反问环节,这个我一般会每轮面试前准备1-2个问题,一般都是关于工作内容、团队发展情况、业务发展情况。如果没啥想问的,也可以一个岗位的每一轮面试都问同样的问题就好了。如果面试官会很耐心的跟你介绍,那面试基本就稳了,如果面试官表现的特别不耐烦,基本就挂了(这种比较少,一般即使要挂你,也会正常跟你沟通完,但还是遇到过)。

总之,面试也是一个不断尝试、复盘、提升的过程,每次面试之后自己哪里回答的好、哪里回答的不好,都在小本本上记录一下,不断复盘、不断提升,下次面试就会比这次面的更好。以上就是我对自己两个月面试经历的回顾和总结,没有面面俱到,但把我认为面试中关键的点都分享了出来,小伙伴们有什么更多想了解的欢迎留言联系。希望大家都能在这个互联网寒冬里工作顺利,拿到满意的offer。

0 人点赞