【前端面试】字节跳动2019校招面经 - 前端开发岗(三)
时间:2022-06-22
本文章向大家介绍【前端面试】字节跳动2019校招面经 - 前端开发岗(三),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
【前端面试】字节跳动 2019 校招面经 - 前端开发岗(三)
之前的一篇主要是 jQuery 和网络模型的知识点,这一篇则是侧重于编程实现,也是我二面所问的一些内容。
一、JS 的 new 操作符具体做了什么
描述
function A() {
this.name = "a";
this.getName = function() {
return this.name;
};
}
var a = new A();
- 编程实现 new 操作符。
- 考察继承实现 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,5
let test2 = [1, 3, 2]; //1,2,3
let callback = getCardsOrder(input, []);
console.log(callback);
- 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 数组属性和方法
- python中使用马尔可夫决策过程(MDP)动态编程来解决最短路径强化学习问题
- 《剑指 offer》刷题记录之:数组
- R语言中绘制箱形图的替代品:蜂群图和小提琴图
- 《剑指 offer》刷题记录之:字符串 & 链表
- python中使用马尔可夫决策过程(MDP)动态编程来解决最短路径强化学习问题
- 《剑指 offer》刷题记录之:树 & 栈和队列
- R语言自定义两种统计量度:平均值和中位数,何时去使用?
- 设计模式之适配器模式
- 自然语言处理中的预训练模型(上)
- numpy数组中冒号和负号的含义
- 基于R语言实现LASSO回归分析
- PHP预防XSS攻击,ajax跨域攻击的方法
- PHP中利用header设置content-type和常见文件类型的content-type
- 《剑指 offer》刷题记录之:递归和循环
- PHP缓存技术介绍