博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【前端面试】字节跳动2019校招面经 - 前端开发岗(三)
阅读量:5912 次
发布时间:2019-06-19

本文共 2099 字,大约阅读时间需要 6 分钟。

【前端面试】字节跳动 2019 校招面经 - 前端开发岗(三)

之前的一篇主要是 jQuery 和网络模型的知识点,这一篇则是侧重于编程实现,也是我二面所问的一些内容。

一、JS 的 new 操作符具体做了什么

描述

function A() {  this.name = "a";  this.getName = function() {    return this.name;  };}var a = new A();
  1. 编程实现 new 操作符。
  2. 考察继承实现 function inherit(Father, Son)

解析

/** * 编程实现new操作符 */var a = {};a.__proto__ = A.prototype;A.call(a);console.log(a.name); //a

二、实现简易的模板函数

描述

function template(tmpl, data) {  // TODO}template("我的名字是(name),我的工作是(work)", {  name: "xxx",  work: "yy"});// 函数的输出是 '我的名字是xxx,我的工作是yy'

解析

// 简易模版函数function template(tmpl, data) {  var result = tmpl;  for (var key in data) {    result = result.replace(new RegExp("\\(" + key + "\\)", "g"), data[key]);  }  return result;}let me = template("我的名字是(name),我的工作是(work),(name) Love (work)", {  name: "xxx",  work: "yy"});console.log(me);

三、使用 JS 实现一个 repeat 方法,

描述

function repeat(func, times, wait) {  // TODO}const repeatFunc = repeat(alert, 4, 3000);repeatFunc("hellworld");//会alert4次 helloworld,每次间隔3秒

解析

function repeat(func, times, wait) {  return message => {    let timer = setInterval(() => {      times-- > 0 ? func(message) : clearInterval(timer);    }, wait);  };}const repeatFunc = repeat(console.log, 4, 3000);repeatFunc("hellworld");

四、算法——扑克牌问题

描述

我手中有一堆扑克牌, 但是观众不知道它的顺序。

第一步, 我从牌顶拿出一张牌, 放到桌子上。
第二步, 我从牌顶再拿一张牌, 放在手上牌的底部。
第三步, 重复第一步、第二步的操作, 直到我手中所有的牌都放到了桌子上。
最后, 观众可以看到桌子上牌的顺序是:(牌底部)1,2,3,4,5,6,7,8,9,10,11,12,13(牌顶部)
请问, 我刚开始拿在手里的牌的顺序是什么?
请编程实现。

解析

/** * Input 拿出牌的顺序 1,2,3,4,5,6,7,8,9,10,11,12,13 * Output 牌堆原来的顺序 */function getCardsOrder(input, cards) {  //Swap  if (cards.length) {    let popCard = cards.pop();    cards.unshift(popCard);  }  //Push  let popItem = input.pop();  cards.unshift(popItem);  console.log(`Popitem: ${popItem}`);  console.log(`inputAfterPop: ${input}`);  console.log(`Cards ${cards}`);  console.log("");  if (input.length == 0) {    return cards;  } else {    return getCardsOrder(input, cards);  }}let input = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13];let test = [1, 3, 5, 4, 2]; //1,2,3,4,5let test2 = [1, 3, 2]; //1,2,3let callback = getCardsOrder(input, []);console.log(callback);

转载地址:http://mvmpx.baihongyu.com/

你可能感兴趣的文章
卷积核与特征提取
查看>>
共轭分布
查看>>
使用burp进行brute force破解
查看>>
SoapUI Pro Project Solution Collection-DataSource(jdbc,excel)
查看>>
maven及阿里云镜像
查看>>
ssh项目将搜索条件进行联动
查看>>
[CF494C]Helping People
查看>>
POJ 2594 Treasure Exploration(最小可相交路径覆盖)题解
查看>>
使用Promise链式调用解决多个异步回调的问题
查看>>
Windows2008 R2服务器配置TLS1.2方法
查看>>
制作mac U盘启动
查看>>
JS基础学习
查看>>
mysql启动不起来了!
查看>>
apache绑定多个域名
查看>>
bzoj3295: [Cqoi2011]动态逆序对
查看>>
【转载】怎样理解阻塞非阻塞与同步异步的区别?
查看>>
String不得不说的那些事
查看>>
Jenkins+Jmeter持续集成笔记(三:集成到Jenkins)
查看>>
DOS命令大全
查看>>
[转]升级Flash Builder 4.6中的Flash Player版本
查看>>