面试要准备的内容要围绕 简历 展开,简历主要分为三个部分,项目经历、技术栈、自我介绍;而技术栈和自我介绍也是由项目经历展开和精炼而成。

项目经历
主要介绍四部分内容
项目背景
项目背景主要介绍 为了解决什么问题?一般我们所做的项目都是围绕线上问题、指标优化、架构演进 展开的。
项目过程
这部分主要介绍 项目是怎么做的? 比如在项目的人员安排、自己扮演的角色、主要负责的模块、技术选型(为什么,对比) 、模块设计、遇到的问题以及是如何解决的?最后一点可以单拎出来分析,也是面试官比较看重的,是分析面试者解决问题能力的参考。
难点
这部分主要介绍是如何解决难点问题,这部分的目的一是印证这个模块面试者的参与度,二是考察面试者遇到问题解决问题的能力,是面试官比较看重的。
所以回答这部分一定要思路清晰,可以围绕 参考了哪个数学模型的特性、模拟了开源社区的哪个项目的思路、亦或是以往经验的运用、分析线上指标和日志发现了出问题规律,加以总结和归纳解决。
但从参考借鉴的方向看,举一反三是一个经验丰富的程序员能够快速解决问题的关键,这也是为什么小公司更看重以往项目经验的原因之一。
总结
这部分主要分析通过对所做项目的总结和反思,分析出项目中哪些做的好,哪些做的不好,当然在面试中面试官主要看重的是哪些做的不好,因为没有人会在面试中大篇幅的说自己项目哪里做的不好。所以要侧重分析多种方案的对比,其他方案的代价、以及后续的优化方向。
技术栈
技术栈主要是对项目经验中所用到的技术和知识点的归纳总结,所以一定要围绕项目经验展开。当然像语言基础、算法、数据结构的特点、网络编程(协议)、音视频基础、平台特性,这些都是必备技能,不管做不做上述项目都得了解和掌握,因为这是入这行的门槛儿,这也是为什么一面主要考察语言算法等基础能力的原因之一。

语言基础:数据结构、算法、C/C++/Java/OC、多线程
平台特性:领域内Android/IOS等平台所涉及到的特性,就音视频来讲,主要包括 采集方式、渲染组件、样本格式的特殊处理、生命周期管理。也有些可以跨平台的项目,比如OpenSL采集渲染音频、OpenGL渲染视频等。
网络编程基础:TCP/IP、UDP、RTP/RTCP(包括音视频打包解包方式)、RTSP等协议,Socket编程、各种套件。
音视频基础:样本格式、H264/H265编解码、封装格式
开源项目:OpenGL、FFMpeg、IJKPlayer、WebRTC、MediaSoup
自我介绍
主要介绍自己的履历、技术栈、通过项目简要的介绍自己所擅长的领域和方向,给后续的提问环节确定一个方向,也是让面试官对面试者有一个简单的了解,为后续的面试做铺垫。这部分是比较容易出彩,也是比较容易忽略的部分,如果铺垫的好,后面可以引导面试官提问自己所擅长的东西。
所以一定要思路清晰,不能想到哪说到哪,固定一个格式和顺序,按照既定的介绍;不至于被面试官打断的时候接不上,也会给面试官留下一个好的印象。