CIFCOM跨境电商 CIFCOM跨境电商

当前位置: 首页 » 出海百科 »

facebook 面经

Facebook 面试题全解析

作者 | Joey Colon

译者 | 弯月,责编 | 屠敏

头图 | CSDN 下载自视觉中国

出品 | CSDN(ID:CSDNnews)

以下为译文:

尽管公众对于Facebook褒贬不一,但他们对开源社区做出的贡献却实实在在造福了许多开发者。在这篇文章中,我来介绍一下你在面试Facebook的前端工程师职位时可能会遇到的面试题。

问题陈述

重新实现Array.flat:具体功能是,接受一个输入数组,该数组可能包含任意层数的嵌套元素,返回一个新的数组,该数组将输入数组展平。本题中,展平”的数组指的是所有元素均为基本类型的数组。

示例

输入:[1, [2, [3], 4], [5]]

输出:[1, 2, 3, 4, 5]

理解问题

问题描述似乎很明确,就是要用输入数组的值创建一个新的数组,但新数组不包含嵌套数组。

在这个阶段,我会首先与面试官澄清我对于该问题的假设。我需要知道,输入是否保证为数组(没有非法输入或空输入)。面试官说,我们不能做这种假设。

另一个问题是:我们能否假设值一定为整数?尽管这个问题不太可能改变实现的细节,但在做出任何假设之前永远要先澄清。我们假设嵌套在数组中的基本类型只有整数。

在澄清了一些细节问题后,我在白板上给出我自己的输入示例,以及对应的输出。

在画出示例的时候,需要极其小心地注意你写下的东西,以及你怎样手工解决该问题。我喜欢先从简单的例子开始,然后考虑边界情况,逐步深入到复杂的问题。

匹配问题

如果只看第一个例子,那么很显然我们只需遍历整个数组,检查每个元素是否为整数值,然后将其值写入输出数组中。唯一不成立的条件就是当前检查的元素是一个数组。如果当前元素是数组,就应该找到下一个非数组的元素,写入到输出数组中。这个问题似乎非常适合用递归解决。

但是要注意的是,任何需要递归的问题,都会面临一个隐藏的限制:调用栈的深度限制。一定要向面试官清晰地表明这一点。面试官对我说不需要担心该问题,很好,我们继续。

计划解决方案

思考解决方案很需要技巧。在用递归方式思考问题时,我们要问自己一个问题:给定当前输入的调用栈的状态,我们要完成什么任务?

我认为,使用驱动函数”的技巧处理递归非常容易。使用这个技巧,我们需要创建一个壳”函数,设置好递归函数将要使用的初始值。例如下面的例子:

首先要把要完成的工作写到辅助函数中,该函数执行完毕后,newArr就拥有了需要的值。

现在思考一下这个辅助函数。前面说过,我们要遍历整个数组,如果当前元素不是数组,就直接放到新数组中;否则,就查看当前元素的其余元素,直到找到新的数组。

实现

前面已经完成了大部分工作,所以只需要翻译成代码即可:

const flatten = (arr) => {
if (arr === || arr.length === 0) return ;
const newArr = ;
flattenHelper(newArr, arr);
return newArr;
};

const flattenHelper = (newArr, currentArr) => {
for (let i = 0; i < currentArr.length; i++) {
if (Array.isArray(currentArr[i])) {
flattenHelper(newArr, currentArr[i]);
} else if (currentArr[i] !== ) {
newArr.push(currentArr[i]);
}
}
};

const arr = [1, [[2], 3, 4, ], [[5]]];
console.log(flatten(arr)); // 1,2,3,4,5

检查实现

编写完代码之后,需要花些时间验证1-2个例子,运行整个程序。即使你的面试过程要求运行程序,你也要通过目视的方式检查整个代码。

评价实现

在评价步骤中,你要给出算法的复杂度、可以改进的地方等。关于运行时间,我们达到了O(N),这里N是非数组元素的个数。空间复杂度也是O(N),因为我们创建了一个包含N个元素的数组。还有一点需要说明的是,空间是线性的。该算法无法再改进,因为我们需要访问输入数组中的每个元素至少一次。

此外,该问题中我们还可以使用reduce和concat。如果你习惯使用这些方法来编写伪代码,那就更好了,但我认为使用平直的代码概念上会更容易。

心得

解决代码问题没有唯一的正确答案。这就是算法问题之美。解决问题的思路和方式会让面试官对你另眼相看。

最后,需要注意的是,许多问题我们都要假设输入可以任意大,大到可能会达到调用栈的上限,这就是为什么要事先询问面试官调用栈上限的问题。如果面试官表明我们需要考虑调用栈上限的问题,就要把递归函数改编成迭代的方式,自己维护调用栈。我在面试另一家大公司的时候就遇到了这个问题。除了要学会编写迭代和递归代码之外,还要学会怎样将递归函数和迭代函数相互转换。

原文:

本文为 CSDN 翻译,转载请注明来源出处。

?朱广权李佳琦直播掉线,1.2 亿人在线等

?抗疫”新战术:世卫组织联合IBM、甲骨文、微软构建了一个开放数据的区块链项目!

?快速搭建对话机器人,就用这一招!

?没有监控和日志咋整?老程序员来支招

?抗疫”新战术:世卫组织联合IBM、甲骨文、微软构建了一个开放数据的区块链项目!

?万字干货:一步步教你如何在容器上构建持续部署!

?据说,这是当代极客们的【技术风向标】...

今日福利:评论区留言入选,可获得价值299元的「2024 AI开发者万人大会」在线直播门票一张。 快来动动手指,写下你想说的话吧。

扎克伯格喊你来Facebook AI上班,先搞定这 25 道面试题

雷锋网按:本文为雷锋字幕组编译的面试专题,原标题Facebook AI Interview Questions — Acing the AI Interview,作者Vimarsh Karbhari。

翻译 | Noodleslee 整理 | 凡江

Facebook已无需介绍。2004年成立之后,经过近十年积累大量数据,2013年Facebook工程师们开始尝试CNNs。随后,Facebook聘请其第一个认识到人工智能和深入学习对谷歌大脑重要性的工程师Marc’Aurelio Ranzato。不久后也聘请CNN发明人Yann LeCun。

Yann LeCun是Facebook人工智能实验室(FAIR)的人工智能研究方向负责人。Facebook试图复制谷歌模式,建立一个旨在发表出版物的研究机构和一个帮助研究人员了解Facebook AI的场所。大量出版物都围绕着计算机视觉和数据科学,因为Facebook拥有大量图像数据可以用来部署CNN完成图像识别。

在Facebook,一些团队使用数据来影响产品决策,而对于某些团队,数据是核心要素。取决于不同用途,有数据科学团队组成的独立组织,而一些团队有自己的科研人员和数据科学家。具备系统思考的强大编程能力对于Facebook AI研究是非常重要的。

面试流程

Facebook面试流程是业界通用的面试流程。该流程由Facebook的一位工程师详细解释。

重要阅读

Facebook视觉应用AI框架:Open Neural Network Exchange Format. (ONNX)。

下载他们项目/软件包的库:Downloads

Facebook研究博客

面试问题(Facebook AI/数据科学方向)

有一个100层的建筑物。 你有2个相同鸡蛋。如何使用2个鸡蛋来找到起始层,鸡蛋一定从N层以上的任何楼层下落,包括N层本身。

100个硬币中随机取一枚硬币--1枚不公平的硬币(两面都是头),99枚公平硬币(头部-尾部),然后重复10次上次过程。如果结果是10次都是头,粗在不公平硬币概率是多少?

用Python为数值数据集写排序算法。

Facebook想要估算用户生日,而不管用户是否直接提供这些信息。你会提出什么方法和什么数据达到该目的?

使用python内置包操作csv”数据。

您如何比较两个不同后端引擎的自动推荐朋友算法的表现?

给定KPI,选择正确的指标,执行ETL (使用SQL代码)

你即将坐飞机去西雅图。 你想知道是否需要带雨伞。你 随机给3个住在那里的朋友打电话,独立询问每个人是否要下雨。每个朋友都有2/3概率告诉你真相,1/3概率误导你给出错误信息。 这三位朋友都告诉你将”要下雨。 西雅图实际下雨的概率是多少?

考虑一个有2名玩家参与的游戏,A和B。玩家A有8个棋子,玩家B有6个。游戏过程如下。首先,A投掷一个公平的六面体模具,模具上的数字决定A从B获得多少棋子。接下来,B投掷相同模具, 模具上的数字决定B从A获得多少棋子。本轮结束。比赛结束时谁拥有更多棋子即赢得比赛,同时比赛结束。 如果玩家在比赛结束时获得相同数量的棋子,则形成平局且进行下一轮比赛。 B能够在1,2,...,n轮获胜的概率是多少?

如何得到一个句子中每个字母的计数?

通性别或身高,你如何证明男性平均身高比女性高?

什么是猴子补丁?

给定一个对象列表A和另一个与A相同列表B,除一个元素被删除,找到被删除的元素。

给定一个整数列表(包含正数和负数),编写一个算法查找是否至少存在一对总和为零的整数。如何提高算法性能?

制作2变量的直方图

用SQL建立一个帖子回复数的直方图(有x个回复多少人,x+1回复多少人等)。

构建一个表汇总每个用户每天的功能使用情况(跟踪用户最后的操作并每天积累)

你在一个只有两个骰子的赌场,如果掷出5点即获胜,并获得10美元的奖金。 你期望花费是多少?如果一直玩下去直到你赢得比赛(不管花多长时间)则游戏结束,你期望花费是多少?

如果想让厂家在Facebook投放广告,你会向他们展示什么指标呢?

给出发送好友申请的表格。

收到好友请求,找到拥有最多朋友的用户。

在一个平台上,点赞/用户数量和每分钟花费都在增加,但用户总数却在减少。根本原因是什么?

客户在档案中列出的高中有多少是真实的?我们如何发现并大规模部署寻找无效学校的方法?

如何将昵称(Pete,Andy,Nick,Rob等)映射到真实姓名?

Facebook发现点赞比去年增长了10%,原因是什么呢?

如果PM希望将新闻源广告的数量翻倍,如何判定这是不是一个好主意?

对这些问题的思考

在Facebook,我发现更喜欢考察基于场景概率问题。许多问题需要对Facebook产品有深刻理解和编程能力。Facebook拥有世界上最优秀的视觉研究人员,团队也包括Google学者。良好的编程能力和数据科学基础知识可以让你在这个世界上最大的社交网站找到一份工作。

问题参考:

往期面试题参考:

能不能进苹果做AI,就看这20道面试题了:

想去谷歌 AI 工作?请收下这20道面试题:

博客原址

更多文章,关注雷锋网,添加雷锋字幕组微信号(leiphonefansub)为好友

备注「我要加入」,To be an AI Volunteer !

雷锋网雷锋网

未经允许不得转载: CIFCOM跨境电商 » facebook 面经

相关文章

themebetter

contact