凡科面试总结

凡科是我第一次实习面试,很久没有看“红宝书”,很多基础的知识都忘了,在收到面试通知的时候有点手忙脚乱,开始投入准备,我的准备工作主要是一下几个方面

  • 看高级程序设计,不愧是红宝书,几乎包含所有的内容,不过也有一个缺点,就是内容太多,时间太短,反而不知道从哪里下手
  • 看别人总结的面经,自己没有面试过,所以看别人总结的面经是一个最能够模拟面试的过程,并猜想面试官会从哪些问题去问自己
  • 看前端经常问到的问题,由于时间关系,所以选择“捷径”,捷径有风险
  • 问大神,取经!毕竟自己太多不足,所以还是有必要向大佬取经

25号中午收到的面试通知,27号中午要面试,中间短短两天的时间,把能够复习的地方都看了一遍,不过真的很多知识点并没有深入,也有的知识点没有复习全,之类需要后续补上

面试前

  • 这里我指的是要了解自己去的这家公司,了解它的文化理念,了解它的团队,了解它的产品等等,毕竟知此知彼百战不殆!而且,你不小心成功的话还是要去那里学习工作的,公司对你的影响务必考虑
  • 还有了解你所要面试的情况,是直接面试?还是直接笔试?还是笔试后+面试?这些最好能够在对方通知你去面试的时候问清楚,不清楚的话,最好打电话问清楚,因为这个对准备面试很重要

笔试

五道题目,都很经典,自己做得不怎样,而且其实不算难,关键要细心、细心、细心!而且要陷阱!

  • 给出一段代码,写处输出结果
    这道题主要考察的知识点有,for循环、作用域链的解析、变量的声明。重点应该是考察作用域链,面试官问从作用域链的方面解析这段代码。

自己的解答,一开始以为是闭包,后来发现不是,然后发现就是一个函数调用,只是全局变量中和函数中都有i的值,其中函数中的i没有使用var声明(这就是第一个坑,自己在这就掉进去了)然后其他的就是作用域链的解析了,这个需要接下来好好总结下了。

  • 考察闭包,就是“红宝书”P181的案例模式
    自己是理解的,结果还是栽在数组越界上(这是第二个坑),在for循环中导致数组越界,所以后来输出的结果是undefined
    面试官追问:用什么方法,可以使结果和预期一致?
    我说了“红宝书”中的一种,描述得不好(自己理解不够)。然后面试官自己给我举了其他的解决方法???(啊啊啊,脑子短路,记不起了,自己百度了)

如果是之前的写法,每个函数的作用域链中都保存的是createFunction()函数的活动对象,所以他们引用的是同一个变量i。当createFunction()函数返回后,变量i的值是10,此时每个函数都引用着保存着变量i的同一个变量对象,所以每个函数内部i的值都是10.

我们可以创建另外一个匿名函数强制让闭包的行为符合预期。如下所示:

function createFunctions(){
    var result = new Array();
    for(var i=0;i<10i++){
        result[i] = function(num){
            return function(){
                  return num;
              }
        }(i)
    }
    return result;
}

这个时候我们不是直接将闭包的值返回赋值给数组,而是定义了一个匿名函数,将立即执行该匿名函数的结果赋值给result.这里匿名函数接受一个参数num,也就是最后返回给数组的值。在调用每个匿名函数的时候,我们都传入一个变量i。由于函数的参数是按值传递的,所以变量i的值就被赋值给了num.而在这个函数的内部,又创建了一个访问num的闭包,这样就可以解决那个问题啦~

  • 考察CSS
    这道题相对简单
  • 数组重组
    自己写的程序少了sort()方法,还有效率不高,百度又很有关于js数组重组的内容,务必深入探讨一下
    第一种方法总结:(最简单的方法)
function removeRepeat(arr){
   var lastArr = [];
   for(var i=0;i

第二种方法总结:(数组下标判定法)

function removeRepeat(arr){
    var lastArr = [];
    for(var i=0;i

第三种方法:(排序后再相邻比较法)

function removeRepeat(arr){
    var lastArr = [];
    arr.sort();
    console.log(arr);
    for(var i=0;i

第四种方法:(推荐用法)对象键值对法

function removeRepeat(arr){
    var lastArr = [];
    var lastObj = {};
    for(var i=0;i

面试官举了一种效率比较高的查询,好像是哈希查找的,可以少个for循环

  • 最后一道题,他说不做要求的,不过我写了他也就跟我聊
    涉及到的知识点有:with(用得比较少),eval方法

笔试小总结

  • 陷阱很多,所以看代码要仔细,要认真
  • 关于一些常见的笔试题要有所准备,像重组就应该有所准备(要每天去牛客网刷下题目)
  • 面试官还是很看重更深的知识、更全的知识,后面的面试更是有这种体会(所以知识点不是了解就好)

面试

笔试后接着就是面试,面试面试官先从笔试题这部分开始,然后就是简历上的了,(可能是发觉我太渣了,没有问项目相关的问题,这是个悲伤的故事)

  • canvas实现画笔的时候,画笔点击画布会触发一系列怎样的事件???(移动端)
    自己挖的canvas坑,哭着填完,我只答出一个click,药丸!其实是有touchStart,toucuEnd,mouseover,mousedown等等(自己事件这一块没来得及复习,问得我**)
  • 怎么获得坐标
    就是经常自己要百度那几个东东,所以要将自己经常要百度的东西记录一下
  • 垂直居中知道哪些方法?
    我就答了两种:line-height==height,以及position布局来处理的方法,还有一个vertical-align:middle(又给自己挖了一个坑)事后深入了解吧,面试官也给自己讲了一下
  • 清除浮动的方法
    这个自己答得还不错,面试官深入问overflow:hidden原理的时候,自己就说BFC(感觉打了一次擦边球)
  • 关于BFC的深入?怎么作用的你了解么
    回答的不好
  • 关于性能优化
    自己有些准备,答道引用外部文件的时候,他问了为什么?我也是简单靠自己的理解,不过js那块有更深入的理解
  • 阻止事件

面试总结

  • JavaScript比较少问,可能是从笔试上有所体现了吧
  • 知识点不全,不够深入
  • 回答问题之前可以整理一下思路,回答的时候做到表达清晰

总结

  • 凡科,这家公司给我的感觉好好,前台的服务很nice,面试官很nice,环境很nice,给了我很大的动力望这种公司努力,这是面试的其中一个收获
  • 了解了自己好多不足,不过也有好的一点,就是再次看起“红宝书”,感觉脉络好像清晰很多,很多可以比较快的掌握
  • 对一些经常面试到的知识的总结还是太少,多刷面经多刷题目

其他:

  • 面试要准时,自己早到40分钟吧,我觉得这方面做得还好,面试的过程注意尽量放轻松,举止自如一点(其实面试也就是跟别人交流经验)。尊重面试官,等面试官说完自己再讲话,给人留下好印象。

注:上面很多并没有整理答案,还要进一步的整理。

参考资料:
纯CSS实现垂直居中的几种方法
Flex 布局教程:语法篇
Flex 布局教程:实例篇----包含一些布局介绍
前端面试题精讲系列 说说JavaScript的事件绑定方法并举例
clientX,screenX,pageX,offsetX的异同
js数组去重的5种算法实现

你可能感兴趣的:(凡科面试总结)