javascript技巧

关注公众号 jb51net

关闭
首页 > 网络编程 > JavaScript > javascript技巧 > JS前端面试经历

JS一次前端面试经历记录

作者:ChessZhang

这篇文章主要介绍了JS一次前端面试经历,结合具体案例形式分析了JS前端面试过程中遇到的问题以及响应的注意事项,需要的朋友可以参考下

本文实例讲述了JS一次前端面试经历。分享给大家供大家参考,具体如下:

最近公司在做一些战略调整,部门有不少老员工前辈们都陆陆续续的离职或者被离职了。而我所在的团队——网易菠萝,也被归并到游戏运营中心了。因为产品策划还没有出来、暂时没什么需求做,闲得有点e-g-g疼的,每天从早到晚都是待在公司看看书、刷刷知乎等。我真是命途多舛啊,还没有真正步入社会,就见证了一个上百人的事业部说没落就没落。甚至已看破红尘,连参加省公务员考试的计划都做好了。这可不是开玩笑的哈,已经在报名费和复习资料上花了两三百块啦,只是因为思想觉悟比较低,始终还是对政治没有兴趣,那几本复习资料到现在还没翻过一页。几天前,一哥们儿说他们公司(CVTE)有个春季校园招聘,叫我可以去试试。这里先补脑一下CVTE是个怎么样的公司哈,它在广东这边也算是小有名气的,主要原因是它的薪酬比BAT还要高出不少,传说毕业生月薪已经15K左右,而且一年还有16-17薪。加上它的校招宣传非常给力,广东高校计算机专业的同学应该对它都有耳闻过,其他省份的同学可能就比较陌生,不过外界对这个公司的评价并不怎么好,有兴趣的可以自行到知乎看。因为CVTE的薪酬确实很吸引人,所以我也有点儿心动哈。不过当时已经过了笔试时间,而且还不能霸面。幸好我那哥们儿和HR姐姐还算熟,而且我的简历写着有NAT实习经历,也就顺利的获得了面试机会。


昨天(2月8号),我还是按照平时的时间8:00起床(因为公司9:30上班)。一打开手机,就看到了推荐我去CVTE的哥们儿在微信发了好多条信息,他说已经和HR说好了,让我8:30之前赶到黄村地铁站坐CVTE面试班车过去面试。我的天呐,我本来只是开玩笑啊,想不到这哥们儿是认真的。毕竟他也是好不容易才帮我争取到了面试机会,放他飞机可不太好啊啊。所以,七手八脚的穿上衣服、鞋子,没来得及刷牙洗脸就骑上ofo直奔地铁站去了。这几天的广州下着冷冷的春雨,早/上的气温也就10度左右。我当时只穿件衬衣,真是冷得发抖啊。
还好,8:25就到了黄村地铁站,然后从C出口一出去就看到了白色的CVTE班车。当时车上已经有10来个人。但是,后来因为要等一个睡过头的家伙,到了8:50老司机才开车。CVTE给我的感觉是挺人性化的,竟然愿意为了一个迟到的考生等待了20分钟。
大概坐了40分钟的车程,就到了广州罗岗CVTE园区了。一下车,眼前就是金碧辉煌的传说 中的CVTE大厦。不知道是因为这里的纬度比学校高、还是因为这里山比较多,反正气温真的比学校要低了好多,我全身都在颤抖。下车大概等待2分钟,HR姐姐就下来带我们到楼上去面试了。等候区和面试区是同一个会议室。当时有2位HR姐姐、6位面试官(4个一面的、2个是二面的)。刚刚坐下来,HR姐姐就说先上4个同学到前面来面试。我当时第一个上去的。尴尬的事情这时候发生的,面试官哥哥问了我手机尾号4位数字,然后他输入了几遍都找不到我资料。于是叫来了HR姐姐问是怎么回事,这时候HR姐姐才恍然想起来我是没有笔试、直接来面试的,赶紧把我拉到一个角落,叫了另外一个同学上去面试。她问我带简历了没有,我说没有。然后面对面加了微信,并把很久以前做的一份电子简历发给了她。然后就叫我回到座位去等待。


一面

大约过了30分钟,HR姐姐叫我上去第一轮面试。这时候因为太冷,我全身都在发抖啊。面试官好像看到我在发抖,然后就说不用紧张哈、放松点儿。大哥啊,我这是冷啊不是紧张 啊、没有看到我才穿一件衬衫吗。然后,他先让我做了简短的自我介绍。然后就开始进入正题了,下面是当时被问到的一些问题:

  1. JS有哪些手段可以实现继承?
  2. 说说JS的闭包?
  3. 用纯JS实现,点击一个列表时,输出对应的索引(不能用JQuery哦)
  4. CSS实现矩形按钮右边缘的中间有个往里凹的小半圆,如图:button
  5. 为什么用vue而不用NG或者React?
<body>
  <ul>
    <li>test1</li>
    <li>test2</li>
    <li>test3</li>
    <li>test4</li>
    <li>test5</li>
    <li>test6</li>
    <li>test7</li>
    <li>test8</li>
    <li>test9</li>
    <li>test10</li>
  </ul>
  <script>
    var lis = document.querySelectorAll('ul li');
    for(var i = 0, len = lis.length; i < len; i++) {
      lis[i].addEventListener('click', function () {
        console.log(i);
      }, false);
    }
  </script>
</body>

你运行一下代码会发现,无论你点击哪个列表,控制台都是输出10。这是因为var声明的变量是函数作用域的,而不是块级作用域的。也就是说,for循环10次,每次都是改变同一个i,所以它的值会从0一直加到10。还有个问题是闭包导致的,闭包保存的是外部变量的引用,而不是值。也就是说,循环10次监听器创建了10 个闭包,它们里面的i引用的是同一个啊。所以全部都指向了10.
要解决这个问题有两种方法。一种是使用ES6的let来替代 var i = 0 里面的var, 因为let支持块级作用域。改成如下就正常了。

    for(let i = 0, len = lis.length; i < len; i++) {
      lis[i].addEventListener('click', function () {
        console.log(i);
      }, false);
    }

还有一种方法,就是很多经典书本都提到的,使用立即执行函数来切断闭包对外部变量i的引用:

    for(var i = 0, len = lis.length; i < len; i++) {
      (function (i) {
        lis[i].addEventListener('click', function () {
          console.log(i);
        }, false);
      })(i)
    }

当然啦,如果对闭包不是很熟练,还可以通过事件委托来避开这个陷阱哈,代码如下:

    var ul = document.querySelector('ul');
    var lis = document.querySelectorAll('ul li');
    ul.addEventListener('click', function (e) {
      var target = e.target;
      if(target.nodeName.toLowerCase() === 'li') {
        console.log([].indexOf.call(lis, target));
      }
    }, false);

使用了事件委托,减少了监听器的绑定(只对列表的父亲元素监听),这种方法说不定还会加分呢。哈哈,我当时就是用这种方法来实现的,面试官可能觉得我的解法有点不寻常、顿时一脸蒙B,甚至还一度怀疑 console.log([].indexOf.call(lis, target)) 这段代码是不是有问题。直到后来我直接在他的笔记本跑了一遍,他才相信是正确的。


二面

然后,等待了一个多小时,轮到了二面。面试官大概三十多岁,可能是前端组长或者技术总监之类的职位吧。
他主要是问到了下面的这些问题:

  1. 说说JS的内存机制及垃圾回收机制
  2. 下面的代码有内存泄漏吗
var user = {name: 'tom', age: 20, gender: 'male'}
var test = document.getElementByid('test')
test.onclick = function() {
 test.innerHTML = user.name;
}
// ...后面还有很多其他操作,最后把user对象释放掉
user = null; // 释放对象
  1. 实现一个算法,寻找字符串中出现次数最少的、并且首次出现位置最前的字符
    如"cbaacfdeaebb",符合要求的是"f",因为他只出现了一次(次数最少)。并且比其他只出现一次的字符(如"d")首次出现的位置最靠前。
  2. http和tpc的关系,以及什么是https
  3. Node的特点(优点和缺点)
  4. 你在腾讯和网易实习期间学到的东西?
  5. 未来三年的职业规划

至于二面的问题都不是很难,下面简单的来看一下:

var user = {name: 'tom', age: 20, gender: 'male'}
var test = document.getElementByid('test')
(function (name) {
  test.onclick = function() {
    test.innerHTML = name;
  }
})(user.name);
user = null;

因为当时已经是饭点时间,面试官也有点急着去吃饭,就没有再问我问题了。


二面面完,已经是中午12点多了。我那哥们儿鹏哥已经在门口等着我一起去饭堂。CVTE的饭菜不错,自助餐,但是,那个碗有点小,没打多少就装满了。饭堂里,公司的人挺热情的,因为背着书包大家都知道我是来面试的,就会问我一些问题,或曰“你来面试什么岗位啦”,或曰“你是本科生还是研究生啦”。。。反正就是挺热情的嘛。打好饭菜刚刚坐下来,还没有吃几口饭,鹏哥说刚刚接到HR消息,班车马上就要开走了,要我快点吃。我下午还要回来公司上班,在这鸟不拉屎的地方如果错过了班车,后果有多严重可想而知的。于是我就干脆不吃了,直接把饭菜倒掉,直跑楼下坐班车。刚刚上车,司机就开车了,驶向香雪地铁站。再见了,CVTE!


后记

首先说一下这次面试的水平吧,其实,从去年9月到现在,我已经有大半年没有参加过任何面试了,很多基础和面经宝典也忘记得差不多了。另外,本来并没有打算来面试的,只是和鹏哥开了个玩笑而已,结果弄假成真,他都已经帮我去找HR安排好了。所以也不好放人飞机嘛!如果不去这不是在搞人家吗?这是第一次面试CVTE,以前听人说CVTE对算法要求比较高、面试相对是比较难的。这次自己反而没有怎么被问到算法题目。面试题目还算正常、难度还可以接受。关于对CVTE的评价,就不好下结论,因为毕竟就只是去面了一个上午试而已,不够了解这是个什么样的公司。不过,总的来说,从有班车接送、到面试时有水果饮料、再到面完试带考生去饭堂吃饭,我觉得CVTE是个还不错的公司呢!至于面试结果,现在还没有出来哈。也许过了,也许挂了,谁又知道呢?

感兴趣的朋友可以使用在线HTML/CSS/JavaScript代码运行工具http://tools.jb51.net/code/HtmlJsRun测试上述代码运行效果。

更多关于JavaScript相关内容可查看本站专题:《JavaScript数学运算用法总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript数组操作技巧总结》、《JavaScript排序算法总结》、《JavaScript遍历算法与技巧总结》、《JavaScript查找算法技巧总结》及《JavaScript错误与调试技巧总结

希望本文所述对大家JavaScript程序设计有所帮助。

您可能感兴趣的文章:
阅读全文