JS一次前端面试经历记录


Posted in Javascript onMarch 19, 2020

本文实例讲述了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实现矩形按钮右边缘的中间有个往里凹的小半圆,如图:JS一次前端面试经历记录
  5. 为什么用vue而不用NG或者React?
  • 第1题,这可简单啦,JS主要有借用构造函继承和原型继承以及两者的组合。不懂的可以看看《JS高教》
  • 第2题,不懂的自行补脑去
  • 第3题,可能面试官的意图也是想考察我们能否熟练掌握闭包吧。如果有刷过面试题的同学可能一下子就会做出来,但是,如果经验不足的同学可能会写出如下的代码:
<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)) 这段代码是不是有问题。直到后来我直接在他的笔记本跑了一遍,他才相信是正确的。

  • 第4题,因为面试官说要通过伪元素来实现,我的CSS本身就不咋滴,只知道好像用到了CSS3的border-radius,但是要使用伪未元素我还真心不会哇。所以当时就直接说不会做,现在也不会。请CSS大神在评论区发一下代码哈~

  • 第5题,主要谈框架相关的。因为目前的情况是,React才是主流,很多团队都在用React,CVTE也不例外。他似乎很关心我为什么要使用vue。我当时给出的理由是:NG1脏值检测性能太低并且相对过时,NG2目前又不够成熟,React的JSX语法个人不太喜欢,而vue比较轻量级、并且支持jade模板( 我们旧项目是使用jade模板写的,迁移会相对容易)。然而,接下来便遭到了面试官的连续挑衅,说我用vue不会是因为它的中文文档比较齐全吧(鄙视我英文差???)。还说vue是不适合做大型项目。最后一句更狠:你们使用vue真是最愚蠢的选择。(我当时心里真的有一万只草泥马在奔腾)
    其实,我个人觉得,框架并没有好坏之分的,每个框架必然有它存在的理由。React也好,NG也行,Vue也罢,萝卜、荷兰豆各有所爱嘛。反正,面试官说的那些话我真的听得挺反感的。
    话又说回来。问完了第5个问题之后 ,面试官说面试就此结束,让我回到座位休息。
    CVTE对于考生的招待真的挺周到的,桌面上有水果、零食、饮料等等。因为当时手机快没有电了,所以,就坐在那里边吃水果边看其他人面试。


二面

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

  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. 未来三年的职业规划

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

  • 第1题,基本类型(number, string, boolean, null, undefined, symbol)是在栈的,而其他的引用类型都是在堆的。垃圾回收是采用了计数引用法(如果两个对象之间存在循环引用时,会有内存泄漏,因为计数无法变为0 )这里写错了,误导了大家,不好意思哈。JS使用的是标记清除法。原理可以看看《JS高教》第三版的78页。

  • 第2题,有内存泄漏,这是闭包本身的问题。完全消除闭包的内存泄漏是不现实的,但是,如果采用下面的方法可以减少内存泄漏:
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;
  • 第3题算法题,也不很难,大家可以自己试试去实现 ,如果做不出来的再到评论求助啦,这里就不贴出代码了。

  • 第4题,考察了计算机网络的tcp三次握手以及http的请求头等。https是使用安全套接字进行加密的,可以说HTTPS = SSL + HTTP。

  • 第5题,Node的特点是异步非IO阻塞、适合高并发,但不适合密集型计算

  • 第6、7题都是主观题,可以随便吹一下水便好。

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


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


后记

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

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

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

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

Javascript 相关文章推荐
JScript的条件编译
May 29 Javascript
jQuery对象和DOM对象相互转化
Apr 24 Javascript
js 对小数加法精度处理示例说明
Dec 27 Javascript
js获取通过ajax返回的map型的JSONArray的方法
Jan 09 Javascript
javascript使用call调用微信API
Dec 15 Javascript
浅谈JS原型对象和原型链
Mar 02 Javascript
JS代码实现table数据分页效果
May 26 Javascript
BootStrap Fileinput的使用教程
Dec 30 Javascript
jQuery实现限制文本框的输入长度
Jan 11 Javascript
JS原生数据双向绑定实现代码
Aug 14 Javascript
JavaScript实现轮播图片完整代码
Mar 07 Javascript
Vue实现跑马灯样式文字横向滚动
Nov 23 Vue.js
jQuery实现点击滚动到指定元素上的方法分析
Mar 19 #jQuery
浅析TypeScript 命名空间
Mar 19 #Javascript
JavaScript计算出两个数的差值
Mar 19 #Javascript
JavaScript利用键盘码控制div移动
Mar 19 #Javascript
js实现百度登录窗口拖拽效果
Mar 19 #Javascript
js实现随机抽奖
Mar 19 #Javascript
js实现抽奖的两种方法
Mar 19 #Javascript
You might like
人大复印资料处理程序_查询篇
2006/10/09 PHP
PHP使用Session遇到的一个Permission denied Notice解决办法
2014/07/30 PHP
浅谈PHP5.6 与 PHP7.0 区别
2019/10/09 PHP
JavaScript 模拟用户单击事件
2009/12/31 Javascript
40款非常棒的jQuery 插件和制作教程(系列一)
2011/10/26 Javascript
eclipse如何忽略js文件报错(附图)
2013/10/30 Javascript
基于HTML+CSS,jQuery编写的简易计算器后续(添加了键盘监听)
2016/01/05 Javascript
jQuery+css实现非常漂亮的水平导航菜单效果
2016/07/27 Javascript
详解nodejs 文本操作模块-fs模块(三)
2016/12/22 NodeJs
详解jQuery获取特殊属性的值以及设置内容
2018/11/14 jQuery
cocos2dx+lua实现橡皮擦功能
2018/12/20 Javascript
详解vue-cli3多页应用改造
2019/06/04 Javascript
使用layui实现树形结构的方法
2019/09/20 Javascript
layui文件上传控件带更改后数据传值的方法
2019/09/23 Javascript
JS实现点击下拉列表文本框中出现对应的网址,点击跳转按钮实现跳转
2019/11/25 Javascript
[01:09:50]VP vs Pain 2018国际邀请赛小组赛BO2 第二场
2018/08/20 DOTA
Python中的闭包详细介绍和实例
2014/11/21 Python
python3+PyQt5使用数据库表视图
2018/04/24 Python
Python实现的读取电脑硬件信息功能示例
2018/05/30 Python
如何用Python实现简单的Markdown转换器
2018/07/16 Python
Python PyPDF2模块安装使用解析
2020/01/19 Python
python中urllib.request和requests的使用及区别详解
2020/05/05 Python
Python中关于logging模块的学习笔记
2020/06/03 Python
内衣营销方案
2014/03/15 职场文书
小学生国庆节演讲稿
2014/09/05 职场文书
专升本学生毕业自我鉴定
2014/10/04 职场文书
学生违反校规检讨书
2014/10/28 职场文书
财务会计实训报告
2014/11/05 职场文书
小学生优秀评语
2014/12/29 职场文书
党员廉洁自律个人总结
2015/02/13 职场文书
2015年新学期寄语
2015/02/26 职场文书
工会经费申请报告
2015/05/15 职场文书
项目验收申请报告
2015/05/15 职场文书
疾病证明书
2015/06/19 职场文书
angular4实现带搜索的下拉框
2022/03/25 Javascript
详解OpenCV曝光融合
2022/04/29 Python