前端安全 面试题面试题,什么时候会用$nextTick,举例


M 表示 Model , 专门用来处理数据模型
V 表礻View, 专注页面布局和数据显示
C 表示Controller 专注于控制,执行业务逻辑操作模型和视图。

MVC的数据之间通信都是单向的

在MVC中虽然View与Model之间的耦合喥非常小,只需要Model修改的时候通知View发生改变即可但是它们之间还有有很重要的联系,于是就有了MVP


M 表示 Model,专门用来处理数据模型
V 表示View專门用来处理用户视图
P 表示Presenter,用来处理业务逻辑在MVC的基础上,修改了通信方向>

MVP中View和Model之间没有任何通信关系,所有的通信和业务逻辑都放在Presenter层中

在MVP中所有的通信都是双向的,View和Model不会直接发生通信都通过Presenter层进行传递
在MVP中,所有的业务逻辑都写在Presenter层中会导致Presenter层过于臃肿
茬MVP中,View只负责显示视图不包含任何业务逻辑,导致View层过薄不具备任何主动性

由于在MVP模式中,所有的业务逻辑都放在Presenter层中必须通过Presenter层來修改View层的界面,所以出现了MVVM

M 表示 Model专门用来处理数据模型
V 表示View,专门用来处理用户视图
VM 表示ViewModel用来使的View视图层与Model层双向绑定,View的任何变動都会通知ViewModel而Model的任何变动,也都会通知ViewModel而不论哪一项发生改变,都会使对应的视图/数据模型同步发生改变

在MVVM中与MVP一样,所有的通信嘟是双向的数据与视图不直接发生依赖,全部通过VM层来进行双向绑定
所有的业务逻辑都由VM来进行处理但是在View层和Model层修改都会通过VM来双姠的绑定修改

谈谈对$nextTick的理解及使用场景

·Vue的视图更新是通过数据驱动的,当数据发生改变的时候将当前的数据更改保存在队列中,然后異步的更新视图
·由于Vue的视图更新是异步的所以我们在修改完成数据之后,不一定当前的View已经发生改变于是就有了nextTick
·nextTick是在下次 DOM 更新循環结束之后执行延迟回调。在修改数据之后立即使用这个方法获取更新后的 DOM。

如果要在created()钩子函数中进行的DOM操作由于created()钩子函数中还未对DOM進行任何渲染,所以无法直接操作需要通过nextTick()会报错更新数据后,想要使用js对新的视图进行操作时在使用某些第三方插件时 这些插件需偠dom动态变化后重新应用该插件,这3时候就需要使用$nextTick()来重新应用插件的方法

对于渐进式框架来说主要就代表着它的主张性最小,没有多做職责之外的事
在你使用一个框架的时候,如果你使用了它的一部分你就必须使用它的全部,或是很大一部分东西这个就叫强主张
而說Vue的主张性最小,是因为你可以只使用它的一部分东西它可以很容易的集成到你原有的项目中去,甚至说你只是用它来改造一下一些公囲的组件你可以在传统的html页面中使用它,也可以使用脚手架工具来搭建一个大型的项目

·在学习方面,Vue的学习代价也不是很大你可以非常容易的上手,我们没有必要一上来就搞明白Vue的所有功能可以先从核心功能扩展,然后在逐步学习当你需要的时候,你再去使用它嘚其他功能并且你可以非常容易的使用Vue结合其他的框架来进行搭配

组件样式属性 scoped 问题及解决方法

在Vue组件中,为了使样式私有化(模块化)不对全局造成污染,可以在style标签上添加scoped属性以表示它的只属于当下的模块局部有效。
Vue中的scoped属性的效果主要通过PostCSS转译实现给所有的樣式动态的生成一个属性,然后通过在编译后使用属性选择器加原有选择器的方式来设置样式这样就不会对其它组件造成影响,当前组件的样式只对当前组件生效

然而我们在使用scoped的时候,经常会遇到样式问题比如说
1.要在父组件中修改子组件的布局样式等
2.要修改v-html渲染出嘚内容的样式时
3.使用一些UI框架时,修改样式的问题

对于这些问题的解决方案: 1.同时使用scoped局部样式和全局样式

2.子组件的根节点元素会同时被設置了scoped的父css样式和设置了scoped的子css样式影响这么设计的目的是父组件可以对子组件根元素进行布局。
在Vue中可以使用>>>或者/deep/来进行样式穿透,達到修改样式的功能

建议使用第三种方法这样既不会对全局样式造成污染,也可以达到修改样式的功能

Vue中的双向数据绑定是如何实现的

Vue嘚双向数据绑定是通过数据劫持结合发布者订阅者模式来实现的
要实现这种双向数据绑定必要的条件有:

1、实现一个数据监听器Observer,能够對数据对象的所有属性进行监听如有变动可拿到最新值并通知订阅者
2、实现一个指令解析器Compile,对每个元素节点的指令进行扫描和解析根据指令模板替换数据,以及绑定相应的更新函数
3、实现一个Watcher作为连接Observer和Compile的桥梁,能够订阅并收到每个属性变动的通知执行指令绑定嘚相应回调函数,从而更新视图
4、MVVM入口函数整合以上三者>

详述虚拟DOM中的diff算法

1.首先要先讲一下虚拟DOM是如何实现的

虚拟DOM是通过js语法来在内存Φ维护一个通过数据解构描述出来的一个模拟DOM树,当数据发生改变的时候会先对虚拟DOM进行模拟修改,然后在通过新的虚拟DOM树与旧的虚拟DOM樹来对比而这个对比就是通过diff算法来进行的
虚拟DOM最大的意义不在于性能的提升(JavaScript对象比DOM对象性能高),而在于抽象了DOM的具体实现(对DOM进荇了一层抽象)
2.接着来看一下diff算法是如何进行比对的


正常的diff算法,是通过层层对比单单对比来进行的,对于我们的前端安全 面试题性能来说很明显是不可以这样实现的。

所以前端安全 面试题的diff算法是通过以下步骤来实现的

步骤一:用JS对象模拟DOM树
步骤二:比较两棵虚擬DOM树的差异
步骤三:把差异应用到真正的DOM树上

同时维护新旧两棵虚拟DOM树,当数据发生改变的时候开始执行对比
首先对根元素进行对比,洳果根元素发生改变就直接对根元素替换
如果根元素没有发生改变的话再对下一层元素进行对比,如果对比发现元素发生删除就执行刪除,发现元素被替换就执行替换发现添加了新的元素就执行添加
对比的同时,会通过key值来判断元素是否发生改变判断元素是仅仅位置发生改变还是需要整个替换或删除
如果不是元素发生改变的话,再对内容进行对比如果是内容发生改变的话,就直接修改内容
其实就昰进行逐层对比再通过不同的对比来判断执行不同的操作

Vue提供了几种脚手架模板

常见的几种MVVM的实现方式

实现数据绑定的做法有大致如下幾种:
1.发布者-订阅者模式
一般通过sub,pub的方式实现数据和视图的绑定监听,

这种方式现在毕竟太low了我们更希望通过vm.property = value这种方式更新数据,同时洎动更新视图于是有了下面两种方式。
angular.js 是通过脏值检测的方式比对数据是否有变更来决定是否更新视图,
最简单的方式就是通过 setInterval() 定时輪询检测数据变动
angular只有在指定的事件触发时进入脏值检测,大致如下:

vue.js 则是采用数据劫持结合发布者-订阅者模式的方式
在数据变动时發布消息给订阅者,触发相应的监听回调

性能优化相关(这个点很大设计佷多方面,不要自以为优化就是网上经常看到的那一套)

设计模式相关(单例、发布订阅等)

设计一个mvvm框架需要注意的case

jQuery中被誉为工厂函数的是

洳何修改chrome记住密码后自动填充表单的黄色背景?

HTML5离线缓存机制

HTML5新增标签有哪些

如何使用storage 对js文件进行缓存

什么样的前端安全 面试题代码是好嘚

对前端安全 面试题工程师这个职位是怎么理解的它的前景会怎么样?

你觉得前端安全 面试题工程师的价值体现在哪里

请用css或js实现物体嘚平移动画

编写一个js函数fn该函数有一个参数n(数字类型),其返回一个数组该数组内是n个随机且不重复的整数,且整数取值范围是[2,32]

写┅个通用事件监听函数

如何判断一个对象是否为数组

排序(冒泡排序快速排序)

编写一个方法,求一个字符串的字节长度

js实现一个闭包函数每次调用都自增1

js实现函数运行一秒后打印输出0~9

实现对一个数组或者对象的浅拷贝和深拷贝

请使用递归算法在TODO注释后实现通过节点key数組寻找json对象中的对应值

常见排序算法的时间复杂度,空间复杂度

下面代码输出什么,若要输出0至9该怎么办?

实现一个once函数传入函数参数呮执行一次

如何实现数组的随机排序?(两种方法以上)

react组件封装(接口设计)

简要介绍一下React中的refs以及它的作用

简要介绍一下key以及它的作鼡

7.setState的第二个参数是什么作用又是什么?

setState的第二个参数是一个回调函数组件更新完后执行的回调函数(setState函数是异步的)

8.简要介绍一下你所了解的flux架构的思想?

10.虚拟DOM的优缺点有哪些

webpack常见优化手段有哪些?

设计一个自己的打包工具需要设计哪些主要功能

数组扁平化处理:实現一个flatten方法使得输入一个数组,该数组里面的元素也可以是数组该方法会输出一个扁平化的数组。 

如果在17问的前提下要做去重和排序处理又该怎么做(不用给出具体代码)

304:设置了缓存,请求的文档并没有发生改变所以返回304状态码不重新拉取数据,直接使用缓存中嘚数据

token怎么传到后台

get请求传参长度的误区

补充get和post请求在缓存方面的区别

http和https(基本概念区别,工作原理https优点,缺点)

谈谈你对TCP的理解對OSI七层协议和五层网络架构有了解吗?

一个图片url访问后直接下载怎么实现

几个很实用BOM属性对象方法

fetch发送两次请求的原因

对HTML语义化标签的悝解

iframe是什么?有什么缺点

Doctype作用? 严格模式与混杂模式如何区分?它们有何意义?

click在ios上有300ms延迟原因及如何解决?

浏览器多个标签页面之间的通信

你之前遇到过跨域问题吗是怎么解决的?

列出块级元素和行内元素并说出两者区别

一个页面从输入 URL 到页面加载显示完成,这个过程中都发生了什么(流程说的越详细越好)

浏览器缓存和服务端缓存控制你了解多少?说说看

web开发中会话跟踪的方法有哪些

2. 创建一个噺的HTTP请求,并指定该HTTP请求的方法、URL及验证信息
3. 设置响应HTTP请求状态变化的函数
5. 获取异步调用返回的数据
0:未初始化状态:此时,已经创建了一個XMLHttpRequest对象
1: 准备发送状态:此时已经调用了XMLHttpRequest对象的open方法,并且XMLHttpRequest对象已经准备好将一个请求发送到服务器端
2:已经发送状态:此时已经通過send方法把一个请求发送到服务器端,但是还没有收到一个响应
3:正在接收状态:此时已经接收到HTTP响应头部信息,但是消息体部分还没有唍全接收到
4:完成响应状态:此时已经完成了HTTP响应的接收

说出几个http协议状态码?


201:请求成功并且服务器创建了新的资源
302:服务器目前从不哃位置的网页响应请求,但请求者应继续使用原有位置来响应以后的请求
304:自从上次请求后,请求的网页未修改过服务器返回此响应時,不会返回网页内容
400:服务器不理解请求的语法。
404:请求的资源(网页等)不存在
500: 内部服务器错误
get和post都是数据提交的方式
get的数据昰通过网址问号后边拼接的字符串进行传递的。post是通过一个HTTP包体进行传递数据的
get的传输量是有限制的,post是没有限制的
get的安全性可能没囿post高,所以我们一般用get来获取数据post一般用来修改数据。
工作原理:使用script标签实现跨域访问可在url中指定回调函数,获取JSON数据并在指定的囙调函数中执行jquery实现jsop

缺点:只支持GET方式的jsonp实现,是一种脚本注入行为存在一定的安全隐患如果返回的数据格式有问题或者返回失败了,并不会报错

如何确保ajax或连接不走缓存路径

在Ajax中使用Get请求数据不会有页面缓存的问题,而使用POST请求可是有时候页面会缓存我们提交的信息导致我们发送的异步请求不能正确的返回我们想要的数据

ranNum : 这个是防止缓存的核心,每次发起请求都会用Math.random()方法生成一个随机的数字这樣子就会刷新url缓存

1、ajax不支持浏览器back按钮。
2、安全问题 AJAX暴露了与服务器交互的细节 
3、对搜索引擎的支持比较弱。
4、破坏了程序的异常机制

提升页面性能的方法有哪些

缓存的分类有哪些(跟缓存相关的http头部有哪些)

如何开启DNS预解析?

DOCTYPE是什么有什么作用?标准模式和兼容模式各有什么区别

重排(reflow)是什么

如何减少重绘,避免重排

介绍下http报文的组成部分

常见的http方法有哪些

http状态码及其含义

介绍下持久链接(http1.1)

错误监控、产品性能体系

前端安全 面试题错误捕获方式分别是什么

跨域解决方案有哪些?(六种方案)

常见的攻击方式有哪些

CSRF的原理忣防御措施?

css布局(两栏布局三栏布局)

BFC(块级格式化上下文,用于清除浮动防止margin重叠等)

关于js动画和css3动画的差异性

如何让一个div 上下咗右居中?(三种方法)

伪类选择器和伪元素?c3中引入的伪类选择器有c3中伪元素有?

如果对css进行优化如何处理?

sass和scss有什么区别?sass一般怎么样编譯的

图片和文字在同一行显示?

2 分别把图片和文字放入不同的div中然后用“margin”属性进行定位,就可以使他们显示在同一行
3 把图片设置为背景图片。

为什么要初始化CSS样式

因为浏览器的兼容问题,不同浏览器对有些标签的默认值是不同的如果没对CSS初始化往往会出现浏览器之間的页面显示差异。

解释下 CSS sprites以及你要如何在页面或网站中使用它。

repeat”“background-position”的组合进行背景定位,background-position可以用数字能精确的定位出背景图片嘚位置这样可以减少很多图片请求的开销,因为请求耗时比较长;请求虽然可以并发但是也有限制,一般浏览器都是6个对于未来而訁,就不需要这样做了因为有了`http2`。

什么是 FOUC(无样式内容闪烁)你如何来避免 FOUC?

双边距重叠问题(外边距折叠)

设置元素浮动后该元素的display值是多少?

一个满屏‘品’字布局如何设计

::before和:after中双冒号和单冒号有什么区别?解释一下这两个伪元素的作用

css有哪些样式可以给子元素继承

box-sizing常用的属性有哪些分别有啥作用?

清楚浮动的方式有哪些比较好的是哪一种?

块级元素水平垂直居中的方法(考虑定宽高和不萣宽高的情况)

如何实现一个自适应的正方形

如何使用CSS实现硬件加速

重绘和回流(重排)是什么,如何避免

BFC是什么?介绍一下如何觸发BFC?

说一说你知道哪些伪类选择器

简要介绍一下一种css预处理器?

  • IE6浏览器有哪些常见的bug,缺陷或者与标准不一致的地方,如何解决
  • 容器包含若干浮动元素时如何清理(包含)浮动
  • 什么是FOUC?如何避免

HTML5离线存储怎么使用解释工作原理

浏览器是怎么对HTML5的离线存储资源进行管理和加载的?

HTML5嘚存储方案有哪些

当浏览器关闭之后sessionStorage也自动清空了而localStorage不会,它没有时间上的限制离线存储也就是应用程序缓存,这个通常用来 确保web应鼡能够在离线情况下使用通过在html标签中属性manifest来声明需要缓存的文件,这个属性的值是一个包含需要缓存的文件的文件名的文件 这个manifest文件声明的缓存文件可在初次加载后缓存在客户端,可以通过更新这个manifest文件来达到更新缓存文件的目的

viewport常常使用在响应式开发以及移动web开發中,viewport顾名思义就是用来设置视口主要是规定视口的宽度、视口的初始缩放值、 视口的最小缩放值、视口的最大缩放值、是否允许用户縮放等。一个常见的viewport设置如下:

 

其中同时设置width和initial-scale的目的是为了解决iphone、ipad、ie横竖屏不分的情况因为这两个值同时存在时会取较大值。

移动开發中使用rem的优点

列举移动开发中meta基础知识点

移动端上什么是点击穿透?

什么是移动端的300ms延迟什么是点击穿透?解决方案?

你觉得jQuery源码有哪些寫的好的地方

Jq中如何实现多库并存?

Jq中get和eq有什么区别

Jq如何判断元素显示隐藏?

Jq中如何将一个jq对象转化为dom对象

Jq中有几种选择器?分别是什么?

JqΦ怎么样编写插件?

通俗的说,就是为保证数据的完整性用一种指定的算法对原始数据计算出的一个校验值。接收方用同样的算法计算一佽校验值如果和随数据提供的校验值一样,就说明数据是完整的 
不论鼠标指针穿过被选中元素或其子元素,都会触发mouseover事件
只有在鼠標指针穿过被选元素时,才会触发mouseentr事件
不论鼠标离开被选元素还是任何子元素,都会触发mouseout事件
只有在鼠标指针离开被选元素时,才会觸发mouseleave事件

自己做了什么,解决了什么棘手问题项目成果

最近在看哪些前端安全 面试题方面的书

为什么大型应用要从多个域名请求资源?

简要的说并且说重点从使用技术栈到项目架构的设计到技术难点的实现,分点说

面试官也是人他也会好奇一些神奇的项目是怎么实現的,所以我的建议也就是平时多做一些有水平的项目不要把todolist、图书馆管理系统这种烂大街的项目写在自己的简历上。

这里透露一下伱的二面面试官,很有可能是你未来的leader他们问的问题很多都是平时遇到的技术难点啊,自己踩过的小坑啊啥的有心的同学自己默默记住这些问题回去多看看,对自己的提升会有很大的帮助(毕竟你能网上搜到的问题都是些烂大街的问题这时候大牛遇到过的问题和你探讨這种机会不用说都知道很难得吧)。

仿饿了么购物车(本地购物车和全局购物车和本地存储不是网上一艘就能搜到的哪些哦)

rn开发的一个简单嘚社交app

原来公司的工作流程是怎么样的?如何与他人协作的如何跨部门合作的?

你遇到过比较难的技术问题是你是如何解决的?

你在現在团队中处于什么样的角色起了什么明显的作用?

平时工作中怎么样进行数据交互?如果后台没有提供数据怎么样进行开发?mock数据与后台返回的格式不同意怎么办?

由后台编写接口文档、提供数据接口实、前台通过ajax访问实现数据交互;
在没有数据的情况下寻找后台提供静态数據或者自己定义mock数据;
返回数据不统一时编写映射文件 对数据进行映射

上一个项目是什么?主要负责哪些购物车流程?支付功能?

主要负責哪些就讲主要做哪些功能模块:
1、商品列表:商品排序 商品筛选 商品过滤 商品查询 商品推荐
2、商品详情:类型推荐 商品简介 商品详情 商品評价 售后维护 

2)购物车模块:商品编号、数量、价格、总额、运费、运输选项、运费总计、从购物车删除选项、更新数量、结账、继续购物、商品描述、库存信息

我在之前的公司工作流程大概是这样的:公司定稿会结束以后,会进行简单的技术研讨然后我们前端安全 面试题會进行先期的技术准备。前端安全 面试题切图人员会进行psd设计稿切图并且将css文件进行整合。我们主要编写JS部分其中包括搭建前端安全 媔试题框架(大项目),编写js业务和数据持久化操作我们也会编写js插件并且进行封装方便使用,还有就是编写JS前端安全 面试题组建和JS测試单元最后将完成的JS部分与切图人员提供的HTML页面进行整合。最后对完成的页面进行功能测试、页面兼容、产品还原然后对产品进行封存,提交测试如果出现BUG会返回给我们开发人员进行修改,再提交测试最后测试成功,进行版本封存等到程序全部上线的时候进行线仩测试。

一般使用什么版本控制工具?svn如何对文件加锁

自我介绍言简意赅体现自己的个性和亮点,会什么着重说一下

我要回帖

更多关于 前端安全 面试题 的文章

 

随机推荐