年收200万+的Facebook前端工程师(E5)都要求些啥能力?
前提: 虽然国情消费啥的都不一样,不具有完全可比性,本文仅仅就数字来探讨一下。
Facebook全球office薪资收入不一,这里仅仅看湾区情况
Facebook E5工程师平均收入: 人民币250万
www.levels.fyi 上可以看到硅谷公司的收入统计,比如Facebook E5的平均收入为37万刀,人民币250万左右。
其中基本工资20万刀,股票15万刀,奖金3万刀。
这包含了所有工种的工程师,具体到前端工程师的话,实际上可以看出前端工程师和其他工种平台工程师收入是一样的,并没有比较明显的“歧视”。
Facebook E5 前端工程师要求些什么?
信息来源: quora.com
- 高级工程师,开始可以尝试做manager
- 了解业务逻辑。知道基本的业务数据和趋势
- 能够制定plan解决问题
- 架构
- 需要的时候可以带队
先不说manager相关的要求,单纯从技术上看,要求的就是宏观解决问题的能力。
我自己作为前端工程师工作超过了7年,也发现如果想要往上爬,被期待的并不是具体写代码有多好,而是能够在宏观层面对项目需求进行评估,值不值得做,做的话需要多少人多久,怎么执行能够加快开发速度并降低风险。
具体架构上面,需要的是设计一个方案允许不同能力级别的成员的代码能够共存,大项目是不可能做到所有代码都是完美的,必须允许瑕疵的存在。我们只需要核心,影响范围广的代码是完美的,其他局部的地方的代码只要能用就可以了,毕竟大多数非核心代码会在不远的将来都被重写。
简单的说,初级engineer考虑的是自己的代码的风险,高级engineer考虑的系统的风险和业务的风险。
具体面试考些什么
进入Facebook面试环节过后,recruiter会对面试进行指导,包括如何准备,以下是简单的总结。
- coding 筛选: 45分钟两道题。通过了会进行如下的onsite
- onsite: 连续5轮面试,中间有少许休息时间
- 代码题: 45分钟1~2题
- 代码题: 45分钟1~2题
- 系统设计: 45分钟设计个搜索建议之类的
- 产品设计: 45分钟 设计个instagram之类的
- 行为面试: 看下你的过往和性格之类的
虽然Facebook做的React,但是面试不会要求你了解React,因为面试不会问这些。相反的,基础的JavaScript/CSS/HTML才是最重要的。
代码题考些什么
这里有总结一些网上公开Facebook的代码题: bfe.dev/problem?tag… 。可以看出:
- 题目本身并不难,比如手写
Array.prototype.flat()
之类的 - 但是要在45分钟(除去寒暄也就30分钟左右)内完成两道题目,并且要解释清楚不出大差错,还是很难的。
代码题中JavaScript是关键,需要掌握好基础。这里我推荐 javascript.info 讲解的非常不错。
另外就是算法。前端工程师并不要求太高深的算法,树相关的算法熟练掌握就ok了。LeetCode中的easy-medium即可。 面试过程中需要对自己写的代码做复杂度分析,基础中的基础。
设计题目考些什么
个人觉得,这是更难的考察。系统设计是局部的设计,产品设计是整体宏观的设计。
系统设计因为针对的是局部,需要对性能优化有足够的理解,才能在和面试管的聊天中掌握话题的走向。最好回顾一下自己的项目中用到的开源库,如果不用开源库而是自己来写,需要考虑哪些因素。
产品设计对于前端工程师来说稍微有些难度,因为这不是完全考验的前端开发能力,而是系统整体的设计,更多是对数据流向的理解。
准备这些面试,最好假设自己是一个后端工程师来设计,平时最好也知道一些基本的服务器知识,了解一下常见的服务器瓶颈和优化方式。
行为面试
这个就更开放了,如果你让面试官觉得你很有趣,聊天很开心,就基本没问题了。
需要回顾自己的项目经历,拿具体例子说话。也就是说Facebook希望通过你的过去来判断你未来能和Facebook的氛围产生火花。
另外就是英语的练习了,虽然并不要求多好的英语,至少聊天不能太磕磕绊绊,不能让面试官重复问题太多次。
说了这么多,有啥用呢?
前端工程师起点低,上限却很高。国内的大厂能去的话,实际上国外的大厂咱们依然能去,要有自信!
趁着年轻,去Facebook这些国外公司体验几年也不是坏事。
加油!
- 基础野:细说无符号整数
- Ubuntu12.04安装QQ for Linux
- 树莓派:最好的安排
- idea 高级调试技巧
- JS魔法堂:彻底理解0.1 + 0.2 === 0.30000000000000004的背后
- mybatis: 利用多数据源实现分库存储
- 树莓派:文本编辑器与文件
- Java常用类(三)之StringBuffer与StringBuidler
- 使用监听器:定时清除map缓存
- 树莓派:光阴的故事
- lombok在IntelliJ IDEA下的使用
- 基础野:细说浮点数
- 微信开发如何保证access_token/jsapi_ticket长期有效
- struts2(五)之struts2拦截器与自定义拦截器
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- [ 物联网篇 ] 26 -ALSA Plug 中 multi 的应用
- LeetCode 1546. Maximum Number of Non-Overlapping Subarrays With Sum Equals Target(动态规划)
- HTML加载顺序
- 基于飞桨PaddleClas实现轧钢带表面缺陷分类,top1准确率可达100%
- 01Python的基本的数据结构之List
- 02Python数据结构之再谈List的常用操作
- 03Python List不得不知的操作之改、查
- 04Python基础之字符串Str
- 05Python元组tuple的个性
- Tkinter Canvas
- Python实现最小二乘法
- 一个简单的例子学明白用Python插值
- python 类class基础简明笔记
- 数据离散化及其KMeans算法实现的理解
- [tensorflow损失函数系列]sparse_softmax_cross_entropy_with_logits