2018年前端开发校招面试总结

Posted on 2018-12-27 |    

2018年人生中最重要的事情之一就是找工作啦,从6月份初断断续续开始复习,7月内推开始,9月大批量的笔试、面试,10月初拿到了自己比较满意的offer,也是历经了快4个月。
简历投的主要是杭州、上海的一些大厂们,分享一些面试的问题吧,考到烂的如输入url发生了什么、闭包是什么就不放出来了。

不过这些面试题虽然常见,但是还是要用心掌握,因为考到的频率确实蛮高的。由于当时并没怎么接触nodejs和react ,所以这方面的题目没有。

js相关

  • ajax和axios的不同(多益)
  • vue中在哪个阶段进行异步请求比较合适(阿里,百度)
  • 微信小程序底层实现的机制(jsbridge)(阿里)
  • vue中vuex的mapSetter是怎么实现的(bilibili)
  • 什么是尾递归(bilibili)
  • vue项目中使用到的优化手段(网易)
  • commonjs和ES6中的模块化有什么区别(网易)
    回答见阮一峰的博客
  • webstoreage如果存储满了会怎么样(报错)(网易)
  • application cache是怎么设置的(网易)
  • 如何获取一个div下所有的文本节点(网易)
  • 兼容浏览器的一些方法(网易)
  • 为什么不同浏览器渲染出来的东西会有差别,本质是什么(网易)
  • vue中写一个组件要注意哪些(58)
  • js如何实现多线程,webworker怎么通信(美团)
  • vue的异步更新考察:(美团)

vue中以下代码会出发几次update生命周期(1次)

1
2
3
this.a=1
//代码
this.a=3;

vue中以下代码会出发几次update生命周期(2次)

1
2
3
4
5
6
7
setTimout(()=>{
this.a=1

},0)

//代码
this.a=3;

那些红宝书里都有的知识点

红宝书(javascript高级程序设计一定要好好看呀~~~ )

  • BOM有哪些东西(网易)
  • requestAnimationFrame和setTimeout写动画的区别 (网易)
  • 如果得到今天是星期几(getDay()(网易)
    【我回答出来后,网易面试官说你怎么记得那么清楚 - -|||】

css相关

  • 如何实现小于12px的字体效果(大疆)
  • css匹配的算法(从右向左)(大疆)
  • animation和transition的区别(阿里)
  • 一个div从一个地方挪到另一个地方的动画如何实现,如果还要求鼠标放上去时,该div还要旋转怎么写(美团)
  • 浮动和清除浮动考察(58):
    如何5个div,其中第三个变成浮动的,会怎么样
    怎么让他变回去——清除浮动
  • 如何实现一个进度条(新浪)

手写代码

  • 数组去重怎么做,如果是数组是这样的[1,[2],[3]],该如何去重(bilibili)
  • 写一个函数 实现test(a)(b),如果b>0 返回a+b,如果b<0,返回a-b(柯里化考察)(bilibili)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function test(){
    var a= [...arguments][0];
    return function(){
    var b = [...arguments][0];
    if(b>0){
    return a+b;
    }else{
    return a-b
    }
    }
    }
  • 实现链式调用(百度)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    coder.sleep().print1().print2()

    class Coder{
    sleep(){
    console.log("sleep");
    return this;//链式调用的关键
    }
    print1(){
    console.log(1);
    return this;//链式调用的关键
    }
    print2(){
    console.log(2);
    return this;//链式调用的关键
    }
    }
  • 如果sleep函数要等待3秒钟再打印然后在执行之后的操作呢?

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    class Coder {
    sleep(){
    var date = new Date();
    while((new Date() - date) < 3000) {
    //通过这里进行阻塞sleep
    }
    console.log("sleep");
    return this;//链式调用的关键
    }
    print1(){
    console.log(1);
    return this;//链式调用的关键
    }
    print2(){
    console.log(2);
    return this;//链式调用的关键
    }
    }

    var b = new Coder()
    b.sleep().print1().print2()
  • 以下代码会输出什么(百度)

    1
    2
    3
    4
    5
    6
    7
    8
    var date = new Date();
    setTimeout(()=>{
    console.log(new Date()-date)
    },1000)
    while((new Date()-date)<3000){

    }
    //输出3000+的值
  • 事件代理考察:(百度)
    如果有一个页面,有许多a标签,在上面写点击事件的事件代理怎么写。
    如果a标签里面也有很多子节点,点击了这些子节点也要实现上面效果?
    思路:循环判断e.target.parentNode.tagName===”a”

  • 跳台阶算法(美团)

  • 火车运煤算法(美团)
  • [1,[2],[3,[4]]]这种无限嵌套数组 变成[1,2,3,4]怎么做(58)

数据库

  • 项目中为什么使用mongodb,数据库的三大范式(百度)
  • mongodb的aggregate介绍一下(阿里)
  • mysql的优化手段(美团)
  • mysql索引的原理(问的较多)

计算机网络

常见问题

  • get和post的区别
  • 状态码
  • http和https的区别

其他

  • dns请求过程
  • dns是基于什么协议(美团)
  • TCP和UDP的使用场景和区别(美团)
  • url除了http https之类的协议,可以有自己自定义么。(58)
    思路:可以,例如微信小程序底层Js Bridge原理就是利用url scheme拦截等

其他

  • 操作系统的功能(百度)
  • 页面置换的算法有哪些(bilibili)
  • 前端安全(xss,csrf)(几乎每个大厂都问到了)
  • AES和MD5的区别
  • git的stage,三个区是什么(工作区,暂存区,版本库)(阿里)
    如果要写实现一个抢红包页面,如何防止有人恶意一直玩抢红包或者发包模拟抢红包请求(网易)。
    个人思路:
    1、判断一段时间内同一个IP的请求数量
    2、设置验证码
    3、看页面访问顺序,一般有一个入口页面再是抢红包页面。恶意发包可能是直接的页面请求
    4、达到一定次数或者红包额度,直接丢包

  • js和c语言编译的差别

  • 有一个用户登录的表单,你会如何做使达到安全。(美团)
  • etag的原理(文件名时间hash)(美团)
  • 一个微博api,提供top10的数据,但是每次去请求并不一定更新,所以每次这样请求返回数据会浪费流量,希望有一个api可以返回是否更新,要怎么操作。(美团)
    思路:将数据进行hash,每次判断一下和上一次的hash值。
  • jquery和vue的区别(美团)

一些面试心得

  • 熟悉简历上写的任何东西
  • 回答问题时引到自己熟悉的东西上
    比如问你ES6掌握情况,挑自己熟悉的讲
    比如前端优化回答时,挑自己理解原理的讲,比如避免重排重绘,之后一般还会继续问哪些会引起重绘重排
  • 对方提不知道如何回答的问题时

    1
    2
    3
    4
    1、引到自己会的:比如问php的继承,讲将js的继承,问mysql的优化手段时,讲mongodb的优化手段
    2、讲大概思路
    3、请面试官给提示
    4、不会就跳过,不要耽搁太多
  • 展示自己的博客

  • 熟悉的问题可以回答的深入一些
  • 手写代码时考虑封装、数据类型判断等
  • 面试后总结
    面试时有些问题觉得面试官问的很奇怪,要好好想想人家问问题背后的动机、想考察的知识点。

祝大家都能拿到心仪的offer,哟呼~~