基本类型、引用类型、typeof vs instanceof、类型转换、this、== vs ===、作用域、闭包、深浅拷贝、防抖、节流、原型

1.电话初探

1.说一下你了解CSS盒模型。

盒模型的组成大家肯定都懂,由里向外content,padding,border,margin.

盒模型是有两种标准的,一个是标准模型,一个是IE模型。

我就说了一下IE的怪异盒模型和标注浏览器的盒模型,然后可以通过box-sizing属性控制两种盒模型的变换。
W3C模型中:
      CSS中的宽(width)=内容(content)的宽
      CSS中的高(height)=内容(content)的高
IE模型中:
      CSS中的宽(width)=内容(content)的宽+(border+padding)2
      CSS中的高(height)=内容(content)的高+(border+padding)
2

2.说一下box-sizing的应用场景。

box-sizing属性可以指定盒子模型种类,content-box指定盒子模型为W3C,后者为IE盒子模型。
一个盒子的 margin 为 20px,border 为 1px,padding 为 10px,content 的宽为 200px、高为 50px,假如用标准 w3c 盒子模型解释,那么这个盒子需要占据的位置为:宽 202+12+102+200=262px、高 202+12102+50=112px,盒子的实际大小为:宽 12+102+200=222px、高 12+102+50=72px;假如用ie 盒子模型,那么这个盒子需要占据的位置为:宽 202+200=240px、高 20*2+50=70px,盒子的实际大小为:宽 200px、高 50px

3.说一下你了解的弹性FLEX布局.

这个我也比较了解,各种概念和属性能想到的说了一大堆,也扯到了Grid布局,基本这个也没啥问题。

4.说一下一个未知宽高元素怎么上下左右垂直居中。

说了一下flex弹性布局的实现,说了一下兼容性,扯到了postcss的一些东西,然后说了一下常规的兼容性比较好的实现。

5.说一下原型链,对象,构造函数之间的一些联系。

这个我之前写过相关的文章,自己也有比较深入的理解,所以这个也不在话下,噼里啪啦说了一大堆,也不知道面试官听得咋样。

6.DOM事件的绑定的几种方式

说了三种,然后说了一些冒泡,默认事件,以及DOM2,DOM3级的一些标准。

7.说一下你项目中用到的技术栈,以及觉得得意和出色的点,以及让你头疼的点,怎么解决的。

这个因人而异,开放性问题,主要考察平时项目的一些积累吧,这个我回答感觉也比较ok。

8.有没有了解http2.0,websocket,https,说一下你的理解以及你所了解的特性。

这个我看过一些文章,但是没有什么印象,扯了一些概念,但是回答的不是很深。

第一轮电话初探,大约面了50分钟,就记起来这么多,还有一些细节问题可能淡忘了,总体来说,面的都是以基础为主,然后boss说把我简历推荐给内部,进行正式的社招流程。

一轮技术面

然后当天晚上一个女的面试官就给我打电话了,说八点半进行下一轮技术面试,没想到效率这么快,我都没怎么准备。
这次就直接省略自我介绍了。

1.webpack的入口文件怎么配置,多个入口怎么分割啥的,我也没太听清楚。

这个自己就说了一下自己的理解,以及自己用node写的多入口怎么配置,然后面试官说不是多入口配置,然后我又说了一下自己的理解,然后这题就过了。

2.我看到你的项目用到了Babel的一个插件:transform-runtime以及stage-2,你说一下他们的作用。

这个我也还算比较了解,就说了一下ES的一些API,比如generator啥的默认不转换,只转换语法,需要这个来转换,然后说profill啥的,扯了一下stage-1,stage-2,stage-3,这个问题回答还算清楚。

3.我看到你的webpack配置用到webpack.optimize.UglifyJsPlugin这个插件,有没有觉得压缩速度很慢,有什么办法提升速度。

这个我主要回答了一下,我之前也没怎么了解,一个想到是缓存原理,压缩只重新压缩改变的,还有就是减少冗余的代码,压缩只用于生产阶段,然后面试官问还有呢?我就说,还可以从硬件上提升,可以得到质的飞跃,比如换台I9处理器的电脑。。。。

4.简历上看见你了解http协议。说一下200和304的理解和区别

这个噼里啪啦说了一堆,协商缓存和强制缓存的区别,流程,还有一些细节,提到了expires,Cache-Control,If-none-match,Etag,last-Modified的匹配和特征,这一块之前有过比较详细的了解,所以还是应答如流。

5.DOM事件中target和currentTarget的区别

8.说一下项目中觉得可以改进的地方以及做的很优秀的地方?

这个也是因人而异,开放性问题,大致扯了一下自己的经历,也还OK。

最后问了有什么需要问的地方,面试到这里基本就结束了,大约面了一个多钟头,还是蛮累的。总体来说,回答的广度和深度以及细节都还算OK,觉得这轮面试基本没什么悬念。

二轮技术面

过了几天,接到阿里另一个面试官的电话,上一轮面试通过了,这次是二轮技术面,说估计一个钟头。这次依然跳过自我介绍之类的,直奔主题。

1.有没有自己写过webpack的loader,他的原理以及啥的,记得也不太清楚。

这个我就说了一下,然后loader配置啥的,也还ok。

2.有没有去研究webpack的一些原理和机制,怎么实现的。

这个我简单说了一下我自己了解的,因为这一块我也没深入去研究,所以说的应该比较浅。

3.babel把ES6转成ES5或者ES3之类的原理是什么,有没有去研究。

这一块我说了一下自己的思路,大致也还OK,我也没去深入研究怎么转换的,之前好像看过类似的文章,自己也只观察过转换之后的代码是啥样的,至于怎么转换的规则,真的没去深入观察。

4.git大型项目的团队合作,以及持续集成啥的。

这里我就说了一下自己了解的git flow方面的东西,因为没有实战经验,所以我就选择性说明了这一块的不熟练,然后面试官也没细问。

5.什么是函数柯里化?以及说一下JS的API有哪些应用到了函数柯里化的实现?

这个我就说了一下函数柯里化一些了解,以及在函数式编程的应用,最后说了一下JS中bind函数和数组的reduce方法用到了函数柯里化。

6.ES6的箭头函数this问题,以及拓展运算符。

这一块主要是API和概念的问题,扯了一些规范以及严格模式下其他情况this只想问题。

7.JS模块化Commonjs,UMD,CMD规范的了解,以及ES6的模块化跟其他几种的区别,以及出现的意义。

这个也是说了一下自己的理解和认知,自己对模块化历史以及一些规范都有所涉猎,这一块也还凑合。

8.说一下Vue实现双向数据绑定的原理,以及vue.js和react.js异同点,如果让你选框架,你怎么怎么权衡这两个框架,分析一下。

主要是发布订阅的设计模式,还有就是ES5的Object.defineProperty的getter和setter机制,然后顺便扯了一下Angular的脏检测,以及alvon.js最先用到这种方式。然后扯了一下vue.js和react.js异同点,权衡框架选择,调研分析之类,噼里啪啦说了一大堆。

9.我看你也写博客,说一下草稿的交互细节以及实现原理。

这一款就按照自己用过简书或者掘金,SG这类草稿的体验,详细说了一下,这个开放性问题,说到点基本就OK。

最后面试官问我有什么想问的吗,面试到这里基本就结束了,差不多面了一个小时,说过几天就会给答复,如果过了就会去阿里园区进行下一轮的技术面。

1.先自我介绍一下,说一下项目的技术栈,以及项目中遇到的一些问题啥的。

这个问题就是个开场白,简要说明一下,问题都不大,这个面试官就是第一次打电话给我面试的那个boss,所以技术那块boss心里也有个底细,所以没再问技术问题。

2.一个业务场景,面对产品不断迭代,以及需求的变动该怎么应对,具体技术方案实现。

具体业务场景,我就不一一描述,Boss在白板上画了一个大致的模块图,然后做了一些需求描述。
然后需求一层一层的改变,然后往下挖,主要是考察应对产品能力,以及对代码的可维护性和可拓展性这些考察,开放性问题,我觉得还考察一些沟通交流方面的能力,因为有些地方面试官故意说得很含糊,反正就是一个综合能力,以及对产品的理解,中间谈到怎么实现,也问到了一些具体的点,记得问到的有一下几个。

① 怎么获取一个元素到视图顶部的距离。
② getBoundingClientRect获取的top和offsetTop获取的top区别
③事件委托
第二个面试官

1.业务场景:比如说百度的一个服务不想让阿里使用,如果识别到是阿里的请求,然后跳转到404或者拒绝服务之类的?

主要是考察http协议头Referer,然后怎么判断是阿里的ip或者啥的,我也不太清楚。

2.二分查找的时间复杂度怎么求,是多少

。。。排序的还算清楚一点,查找真的不知所措,没回答上来,也没猜,意义不大,不会就是不会。

3.XSS是什么,攻击原理,怎么预防。

这个很简单,跨站脚本攻击XSS(cross site scripting),攻击类型主要有两种:反射型和存储型,简单说了一下如何防御:

①转义
②DOM解析白名单
③第三方库
④CSP
自己对web安全这块系统学习过,前前后后大约了解了很多,对于XSS,CSRF,点击劫持,Cookie安全,HTTP窃听篡改,密码安全,SQL注入,社会工程学都有一定了解,所以这个自然也不在话下。

XSS攻击是Web攻击中最常见的攻击方法之一,它是通过对网页注入可执行代码且成功地被浏览器
执行,达到攻击的目的,形成了一次有效XSS攻击,一旦攻击成功,它可以获取用户的联系人列
表,然后向联系人发送虚假诈骗信息,可以删除用户的日志等等,有时候还和其他攻击方式同时实
施比如SQL注入攻击服务器和数据库、Click劫持、相对链接劫持等实施钓鱼,它带来的危害是巨
大的,是web安全的头号大敌。

HttpOnly

  1. 输入检查
    CSRF(Cross-site request forgery)跨站请求伪造,也被称为“One Click Attack”或者Session Riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用
    Q:什么是CSRF攻击?举例?如何防御CSRF?
    A:CSRF 即:跨站点请求伪造

网站A :为恶意网站。
网站B :用户已登录的网站。
当用户访问 A站 时,A站 私自访问 B站 的操作链接,模拟用户操作。

假设B站有一个删除评论的链接:http://b.com/comment/?type=delete&id=81723
A站 直接访问该链接,就能删除用户在 B站 的评论。

4.线性顺序存储结构和链式存储结构有什么区别?以及优缺点。

我是类比JS数组和对象来回答的,反正还算凑合吧,自己都数据结构这块多少还是有些印象,所以入了前端,对数据结构和算法确实一直淡忘了。

5.分析一下移动端日历,PC端日历以及桌面日历的一些不同和需要注意的地方。

这个我能想到的大致都说了一遍,不同的场景交互和细节以及功能都有所偏差,以及功能的侧重都可能不同。

6.白板写代码,用最简洁的代码实现数组去重。

我写了两种实现方式:
ES6实现:

[…new Set([1,2,3,1,’a’,1,’a’])]
ES5实现:

[1,2,3,1,’a’,1,’a’].filter(function(ele,index,array){
return index===array.indexOf(ele)
})

闭包
Q:谈谈闭包
A:闭包指的是有权访问另一个函数作用域中变量的函数,创建闭包的常见方式,就是在一个函数内部创建另一个函数。要理解闭包,首先必须理解Javascript特殊的变量作用域。变量的作用域无非就是两种:全局变量和局部变量。函数内部可以直接读取全局变量,但在函数外部无法读取函数内的局部变量。如果我们有时候需要得到函数内的局部变量。
Q:那闭包的用处有什么?
A:闭包可以用在许多地方。它的最大用处有两个,一个是前面提到的可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中。
Q:使用闭包的问题?
A:由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露。解决方法是,在退出函数之前,将不使用的局部变量全部删除。
由于IE9 之前的版本对JScript 对象和COM 对象使用不同的垃圾收集。因此闭包在IE 的这些版本中会导致一些特殊的问题。具体来说,如果闭包的作用域链中保存着一个HTML 元素,那么就意味着该元素将无法被销毁。

转载请保持原始链接

原始链接: https://ru23.com/note/42f0994d.html