前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【前端面试】字节跳动2019校招面经 - 前端开发岗(三)

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

作者头像
CloudCat
发布2019-05-26 20:05:02
1.1K0
发布2019-05-26 20:05:02
举报
文章被收录于专栏:一只想做全栈的猫

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

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

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

描述

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

解析

代码语言:javascript
复制
/**
 * 编程实现new操作符
 */
var a = {};
a.__proto__ = A.prototype;
A.call(a);
console.log(a.name); //a

二、实现简易的模板函数

描述

代码语言:javascript
复制
function template(tmpl, data) {
  // TODO
}
template("我的名字是(name),我的工作是(work)", {
  name: "xxx",
  work: "yy"
});

// 函数的输出是 '我的名字是xxx,我的工作是yy'

解析

代码语言:javascript
复制
// 简易模版函数
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 方法,

描述

代码语言:javascript
复制
function repeat(func, times, wait) {
  // TODO
}
const repeatFunc = repeat(alert, 4, 3000);
repeatFunc("hellworld");
//会alert4次 helloworld,每次间隔3秒

解析

代码语言:javascript
复制
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(牌顶部) 请问, 我刚开始拿在手里的牌的顺序是什么? 请编程实现。

解析

代码语言:javascript
复制
/**
 * 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,5
let test2 = [1, 3, 2]; //1,2,3
let callback = getCardsOrder(input, []);
console.log(callback);
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 【前端面试】字节跳动 2019 校招面经 - 前端开发岗(三)
    • 一、JS 的 new 操作符具体做了什么
      • 描述
      • 解析
    • 二、实现简易的模板函数
      • 描述
      • 解析
    • 三、使用 JS 实现一个 repeat 方法,
      • 描述
      • 解析
    • 四、算法——扑克牌问题
      • 描述
      • 解析
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档