头条日常实习生面经2018.11.28

第一次大公司面试的面经

此次面试说来也有点匆忙,本没想过自己会那么快就想去面试大公司,并且把自己第一次面大公司的各种不足展现得一览无余。当时11月20号左右身边一位朋友给了一位人超nice的师兄的内推,并且鼓励我去投简历。最终战胜了自己的胆怯,投了一份简历给内推的师兄。一两天后hr就打电话安排面试了。

没想到面试是要连续着面的,当时面花了一个多小时过了一面,再花一个小时面二面,最终也止于二面。接下来就是本文的主题了。我把当时面试官通过牛课网在线面试平台中写给我做的题记录了下来,其实从面试前就打算把面试学到的东西积累下来。接下来就进入本文的主题了,我也尽量把每一道题都写上我的解题思路,希望能得到大家更多更好的意见。

一面

一、请问运行这段代码会输出什么。
    let obj = {
        name: 'bytedance',
        getName() {
            return this.name
        }
    }
    let fb = obj.getName;
    fb();

A:我当时好像是答undefined。但我知道这不会是输出”bytedance“,因为当obj.getName赋给fb的时候它的this也改变了,具体可以看我之前总结了一篇JavaScript中的this的文章。然后我后来我在浏览器中运行了一下代码发现是输出"" 。。。

二、设计一个简单的任务队列,要求分别在1,3,4秒后打印出”1“,”2“,”3“
    new Quene()
        .task(1000, () => {
            console.log(1)
        })
        .task(2000, () => {
            console.log(2)
        })
        .task(1000, () => {
            console.log(3)
        })
        .start()

    function Quene() { ... }

A:讲真,看到这道题的时候我第一时间感到自己完了,虽然也只写了一点,没有全部做出来,然后就跳过这道题了。面试完就努力着把这道题写出来

    function Quene() {

        this.task = (time, callback) => {

            setTimeout(callback, time);
            // console.log(this)
            return this;
        };
        this.start = () => {
            return this;
        };

    }

虽然这样即使最后面不用写.start()也能打印出来。。。希望能得到指点Q_Q

三、给定一个升序整数数组[0,1,2,4,5,7,13,15,16],找出其中连续出现的数字区间如下:

["0->2",”4->5“,"7","13","15->16"]
A:

    function Arr(arr) {
        var len = arr.length,
            j,
            newArr = [],
            str = '';
        for (var i = 0; i < len; i++) {
            j = i;
            if (arr[i] + 1 === arr[j + 1]) {
                while (arr[j] + 1 === arr[j + 1]) {
                    str = '->' + arr[j + 1];
                    j++;
                }
                str = arr[i] + str;
                newArr.push(str)
                i = j
            } else {
                newArr.push(arr[i].toString())
            }
        }
        return newArr;
    }

还算比较简单的算法题吧,还好当时做出来了,不然可能就止步于此。。也希望大家能谈点自己对这道题的解法

四、TCP协议建立连接的过程、进程间通信的方式有哪些

TCP建立连接的过程即为三次握手,三次握手可以参考我之前发的文章,网上也有很多资料,这里就不细讲。

至于进程间的通信方式,当时没能打出来(这就涉及到我的知识盲区了【哭丧脸】),后来网上查了一下,有:

  1. 管道pipe:管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。
  2. 命名管道FIFO:有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。
  3. 消息队列MessageQueue:消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。
  4. 共享存储SharedMemory:共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号两,配合使用,来实现进程间的同步和通信。
  5. 信号量Semaphore:信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。
  6. 套接字Socket:套解口也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同及其间的进程通信。
  7. 信号 ( sinal ) : 信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。

这里有个题外话,如果面试官问浏览器窗口间的通信,那么有以下几种:
1.localStore

localStorage.setItem("name", name); 

2.cookie + setInterval
在页面A设置一个使用 setInterval定时器不断刷新,检查cookie的值是否发生变化,如果变化就进行刷新的操作。
由于 cookie 是在同域可读的,所以在页面B 改变 cookie的值,页面 A是可以拿到的。

五、用纯CSS创建一个三角形的原理是什么?如何实现?

A:用CSS创建一个三角形的原理是分别设置上下左右的border属性,中间内容为0面积。实现:

#box {
      width: 0;
      height: 0;
      border-left: 50px transparent solid;
      border-right: 50px transparent solid;
      border-top: 50px transparent solid;
      border-bottom: 50px black solid;
}
六、0.1 + 0.2 > 0.3 返回什么?

A:true。分别转成2进制。

七、类数组对象是什么?

刚开始还对这个类数组感到懵逼,后来面试官一提醒函数的参数马上领悟到就是伪数组。
A:只包含使用从零开始,且自然递增的整数做键名,并且定义了length表示元素个数的对象。

  • function内部的arguments对象就是一个类数组对象
  • DOM方法document.getElementsByTagName()...也是返回一个类数组对象
八、什么是同源策略,为什么会有这种策略

源包括三个部分:协议、域名、端口(HTTP协议的默认端口是80)。如果其中有任何一个部分不同,则源不同。即为跨域。
限制一个源加载的文档或脚本与来自另一个源的资源进行交互。这是一个用于隔离潜在恶意文件的关键的安全机制。(来自MDN的解释)

九、什么CORS

A:受同源策略的限制,支持跨域;一种新的通信协议标准。可以理解成同时支持同源和跨域的Ajax
MDN解释:跨域资源共享(CORS) 是一种机制,它使用额外的 HTTP头来告诉浏览器 让运行在一个 origin (domain) 上的Web应用被准许访问来自不同源服务器上的指定的资源。当一个资源从与该资源本身所在的服务器不同的域、协议或端口请求一个资源时,资源会发起一个跨域HTTP 请求。

十、什么是OPTIONS请求

A:OPTIONS请求是HTTP请求的一种方法,返回服务器针对特定资源所支持的HTTP请求方法,也可以利用向web服务器发送‘*’的请求来测试服务器的功能性

然后一面就这样结束了,面试官也直接跟我说我通过了一面,我也问了一些问题后就结束面试了。我赶紧把平台上的面试记录记下来,过了几分钟,当我还沉浸在通过一面的愉悦和全身心已经放松了的情况下,发现手机有几个未接电话,然后又再打进了一个,接通电话后对方是头条hr小姐姐,问我说现在可以二面了,二面的面试官已经在平台上等着了。。。好吧,这太突然了,我马上赶赴战场。


二面

一、fetch

A:Fetch API 提供了一个获取资源的接口(包括跨域请求)。无论请求成功与否,它都返回一个 Promise 对象;

二、用Promise实现延迟3秒后输出 delay(3000).then(f,e)

A:

    function delay(timer) {
        return new Promise(function(resolve, reject) {
            setTimeout(function() {
                resolve();
            }, timer)
        })
    }
三、XSS/CSRF

XSS:跨站脚本(Cross-site scripting
通过提交或其他方式例如发布评论,其中含有HTMLJavaScript的代码,如果服务器没有过滤掉这些脚本,这些脚本在一些情况下就可能会运行。

  1. 避免XSS的方法之一就是过滤用户提供的内容,如<,>,script;
  2. cookie设置HttpOnly属性

CSRF:跨站请求伪造(Cross-site request forgery
是一种劫持受信任用户向服务器发送非预期请求的攻击方式,即在用户登陆某个平台化拿到用户的登陆凭证后发送伪造请求

  1. 防范CSRF的方法之一就是通过验证码
  2. Referer Check,根据 HTTP 协议,在HTTP头中有一个字段叫 Referer,它记录了该 HTTP 请求的来源地址。通过 Referer Check,可以检查请求是否来自合法的”源”。
  3. 添加token验证,可以在 HTTP请求中以参数的形式加入一个随机产生的token,该token不存在与cookie中,并在服务器端建立一个拦截器来验证这个 token,如果请求中没有 token或者 token 内容不正确,则认为可能是 CSRF攻击而拒绝该请求。
四、图片懒加载原理 (lazy image)

A:给每张图片添加一个data-xxx的属性用于存放图片的src,检测到图片进入视野中的时候把data-xxx的属性赋给src
如何检测图片进入视野:
a.document.documentElement.clientHeight获取屏幕可视窗口高度
b.element.offsetTop获取元素相对于文档顶部的距离
c.document.documentElement.scrollTop获取滚动被卷去的高度
如果b-c<a成立则元素进入可视区域
这里我还提到一个函数节流提高性能:

var canRun = true;
document.getElementById("throttle").onscroll = function(){
    if(!canRun){
        // 判断是否已空闲,如果在执行中,则直接return
        return;
    }

    canRun = false;
    setTimeout(function(){
        // 这里加载图片
        console.log("函数节流");
        canRun = true;
    }, 500);
};
五、上传图片
  1. 表单上传
    (1). 提供form表单,method必须是post
    (2). form表单的enctype必须是multipart/form-data
  2. ajax上传
  • ajaxFormData可实现页面无刷新的文件上传效果
六、将一些ES6的新特性

可以参考之前写的文章,不过当时到了后面真是精疲力竭,连letconst都没有说出来。。。

七、jsbridge

问到这个概念的时候我不清楚,记得当前前一两天掘金刚发一篇相关的文章给我,然而当时没去看。。
JSBridge简单来讲,主要是 给 JavaScript 提供调用 Native 功能的接口,让混合开发中的“前端部分”可以方便地使用地址位置、摄像头甚至支付等Native 功能。是Native 和非 Native之间的桥梁,它的核心是构建 Native和非Native 间消息通信的通道,而且是双向通信的通道。

二面其中也包含一些IQ题,还有后面问我如果实习能实习多久我说3个月。之后第二天就收到把我简历”丢进“公司人才库的邮件了。

当然这只是其中一部分题目,一些面试官口头问的我当时面试完真是超级累也忘了记录下来。总之,感觉头条还是会比较重视算法和新技术。

希望这一两个月能够好好把握,春招再战!!

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

推荐阅读更多精彩内容

  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,216评论 11 349
  • 前端开发面试题 <a name='preface'>前言</a> 只看问题点这里 看全部问题和答案点这里 本文由我...
    自you是敏感词阅读 757评论 0 3
  • 前端开发面试题 面试题目: 根据你的等级和职位的变化,入门级到专家级,广度和深度都会有所增加。 题目类型: 理论知...
    怡宝丶阅读 2,574评论 0 7
  • 2017-05-23 什么是黄金? 金,又称黄金,化学元素是Au,它存在于地壳的金属层。其具有良好的物理属性、稳定...
    pcxpt阅读 410评论 0 0
  • 总是说在工作中要少说多做,但是我们依然还是会踩雷。 周五下午开过学习会,我去老一办公室等着签字,老一突然抬头问我,...
    乐简家阅读 262评论 0 0