记一次今日头条前端面试

最近公司部门被裁了,让我这个刚刚毕业一年不到的人情何以堪啊。硬着头皮出去面试吧!
在此记录一下今日头条面试中印象比较深刻的问题,问题顺序已打乱。

一、实现Bind函数

其实本来不是考查这个的,仅仅是考查bind的用法。后来题目做出来面试官又继续问如何实现bind。下面是参考MDN的polyfill写出来的代码:

if(!Function.prototype.bind){
  Function.prototype.bind = function(context){
    // 首先判断this是不是function
    if(typeof this !== 'function'){
      // 抛出错误
    }
    var _this = this,
          fNOP = function(){},    // 用于后面维护原型关系
          args = Array.prototype.slice.call(arguments, 1),    // 取出bind收到的参数,除去第一个作为上下文的参数并保存
          fBound = function(){
            _this.call(context, args.concat(Array.prototype.slice.call(arguments)))   // 将bind接收的的参数和实际接收到的参数相连接
          };
    // 维护原型关系
    if(this.prototype){
        fNOP.prototype = this.prototype;
        fBound.prototype = new fNOP;
    }
    return fBound;
  }
}

二、实现节流函数

有一个高频操作会让函数迅速执行很多次,需要按照下面的时间线图来实现一个节流函数。


节流函数示意图

图是word画的,微信截的图,凑合看吧...图中每一个断点都代码触发了一次函数,但是触发函数时只在奇数时执行,偶数时不执行,断点间的时间间隔为50ms。
根据题意需要的是一个节流函数。刚开始时我是这么实现的:

var throttle = function(fn){
  var timer = null;
  return function(){
    var args = arguments, context = this;
    clearTimeout(timer);
    timer = setTimeout(function(){
      fn.call(context, args)
    }, 100)
  }
}
这跟javascript高级程序设计中的实现方式差不多,其实严格来说这种实现方式并不叫节流函数,而是防抖函数:短时间内多次调用同一函数,只执行最后一次调用。
下面是改进:
var throttle = function(fn){
  var timer = null;
  return function(){
    var args = arguments, context = this;
    if(!timer){
      timer = setTimeout(function(){
        timer = null;
        fn.call(context, args)
      }, 100);
    }
  }
}
如此一来这个功能基本上就可以实现了,但是仍有一个问题,第一次调用的时候函数并没有执行,而是直接从第三次调用开始执行的,那么我们再改进一下,加一个第一次调用时的哨兵即可:
var throttle = function(fn){
  var timer = null, first = true;
  return function(){
    var args = arguments, context = this;
    if(first){
      first = false;
      fn.call(context, args)
    }
    if(!timer){
      timer = setTimeout(function(){
        timer = null;
        fn.call(context, args)
      }, 100);
    }
  }
}

三、穷举组合

实现一个函数,给三个参数,data是整形数组,m和sum都是一个整数,从data中取出n个整数,使它们的和为sum,求出一种组合即可。
我的思路是穷举data中的n个key的组合,假设data有6(n)个元素,从中取出3(m)个数,那么它key的组合就有:[0,1,2]、[0,1,3]、[0,1,4]、[0,1,5]、[0,2,3]、[0,2,4]、[0,2,5]、...、[3,4,5]
列出它的所有组合就好办了,直接用这些key去data里面取数,如果找到答案就退出程序。
下面仅给出穷举组合的算法,为了简单,相关参数写死并忽略全局污染:

// 数组a用于存放key的组合,data并没有出现,只给出data元素个数n
var a=[0,1,2], oldA = [],n = 6, len = a.length;
function listArr(key){
    let same = true
    for(let i = 0 ; i < len ; i++){
        if(a[i] !== oldA[i]){
            same = false
            break
        }
    }
    if(!same){
        console.log(a)
        oldA = Array.prototype.slice.call(a)
    }
}
function list(currentKey, initValue){
    if(currentKey >= len || initValue >= n){
        return
    }
    for(let v = initValue ; v <= n + currentKey - len ; v++){
        a[currentKey] = v
        arguments.callee(currentKey+1, v+1)
        listArr(currentKey);
    }
}
list(0,0)

当然不止这些题目,我这里只是列出了一些我答得不好和根本没有答出来的题目(逃),面试的结果应该是黄了。今天回头一想其实都还是可以做出来的,只是平时练得太少,心态也有点问题。多多复习,希望接下来的面试顺利吧!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,565评论 18 399
  • 大年初二下午,我们去太公家看望生病的太婆,顺便在那里吃晚饭。 太婆发了高烧,姨丈送她去医院。谁知看了医...
    潘仪宸阅读 258评论 0 0
  • 周未回家常坐的是长途客车,而回程有时不太方便,我们就会赶赴另一个集镇去乘短途客车。 我带着女儿,成人票是七元,小孩...
    zhuimengren阅读 386评论 0 2
  • 19 98年,米雪13岁,读初二。 如平时一样,米雪要凌晨五点起床,要到5公里外的学校读书,如果晚了,...
    米夜雪阅读 366评论 0 0
  • 是不轻易受一些东西诱惑了
    三自先生阅读 146评论 0 0