您现在的位置:首页 >> 前端 >> 内容

前端开发面试题大全

时间:2017/9/27 10:22:00 点击:

  核心提示:JQuery的一些兼容性问题① 在IE8里,对一些自闭合标签,使用非自闭和input、img,用JQ选择器无法获取到node节点;② 在IE8里,对一些id、class命名为大小写不区分的名字,用JQ...

JQuery的一些兼容性问题

① 在IE8里,对一些自闭合标签,使用非自闭和input、img,用JQ选择器无法获取到node节点;

② 在IE8里,对一些id、class命名为大小写不区分的名字,用JQ选择器无法获取到node节点;

③ 在IE8及以下的浏览器,ajax不能使用ip,应该采用域名的方式。

Webpack和Gulp的区别?

Gulp、Grunt:在一个配置文件中指明某些文件需要自动地进行编译、组合、压缩;

Gulp的4个常用的方法:

① src( ):获取流

② dest( ): 写文件

③ task( ): 用来定义任务

④ watch( ): 用来监听事件

Webpack:在Webpack.config.js文件中,entry指定入口文件。会从入口文件开始,找出所有依赖的文件,然后用对应的loaders去处理它们,最后打包成为一个浏览器可识别的js文件;

Webpack的打包指令:

进入到项目的根目录下,执行:node_modules/.bin/webpack 入口文件.js 打包后的文件.js

做啥Node相关的?

① 快速搭建开发环境;

② npm包管理工具

什么是Koa

Koa是使用了ES6规范的generator和异步编程的一款前端框架,它不捆绑任何中间件,拓展性更强,所以它可以让中间件的开发变得更加有趣。

什么是中间件?

所谓的“中间件”,也就是中间过程中可以变的步骤 例如“把大象放进冰箱”,分为三个步骤: ① 打开冰箱门 ② 放大象进去 ③ 关闭冰箱门 其中② 是可变的步骤,成为中间件

js如何实现异步编程?

① 回调函数

② 事件监听

③ 发布/订阅

④ Promise对象

Nodejs的事件机制

Node.js使用事件驱动模型(事件源、监听器、事件处理程序) events是Node.js最重要的模块,它只提供一个对象EventEmitter。 EventEmitter的核心是事件发射和事件监听; 与Dom树上的事件不同,因为它不存在事件冒泡、捕获行为。

EventEmitter有以下方法:

① on(“事件名”, 监听的变量即回调函数)

② emit(“事件名”, 所传参数)

③ once(“事件名”, 监听);//一次性监听,触发完解除

④ removeListener(“事件名”,监听的变量);//移除某一指定事件名的监听

⑤ removeAllListeners();//移除所有事件的所有监听

⑥ listeners(“事件名”);//返回一个数组,这个数组是这个事件的所有监听集合

⑦ setMaxListeners(15);//设定一个事件最多可以设置多少个监听数(太多会造成内存泄漏)

v-if和v-show的区别

v-if:是真正的条件渲染,因为它会确保在 切换过程中,条件块里的事件监听器、子组件能够是当地被摧毁或重建;而且也是惰性的,直到第一次为true的时候,才会开始渲染。

v-show:不管初始条件是什么,元素总是会被渲染,并且只是简单地基于CSS进行切换

组件化 和 模块化

组件:

① 强调的是复用;

② 侧重于UI;

③ 像一个黑盒子(样式、结构、逻辑不用管),要用的时候直接拿,就可以盖房子

模块:

① 强调的是规则;

② 侧重于功能的实现和数据的封装;

③ 由一个或多个组件构成的,具有一定功能的房子、床

模块化开发AMD、CMD和Common.js

相同: 都是js模块化开发的规范

① 【针对对象】

AMD、CMD:客户端;

Common.js:服务端;

② 【加载方式】

AMD、CMD:异步加载

Common.js:同步加载

③【预加载、懒加载】

虽然AMD、CMD都是异步加载,但是都需要一个预处理:提前将所需的模块文件并行加载好。

AMD:属于预加载。它会在并行加载JS文件的同时,还会并行解析执行该模块。

CMD:属于懒加载。虽然会一开始并行加载JS文件,但是不会执行,而是在需要的时候才去解析执行

④【优缺点】

AMD:

优点:加载快速,尤其是遇到多个大文件。因为并行解析,所以能在同一时间段里解析多个文件;

缺点:并行加载,异步处理,加载顺序不一定。

CMD:

优点:只有使用的时候才加载,所以顺序可控

缺点:因为是同步解析执行,所以时间比较长

⑤【引入方式】

AMD:用

<script> 引入Require.js
CMD:用<script>引入Sea.js
Common.js:用node就行了

SVG、Canvas、CSS3

SVG:基于XML,它的代码结构和兼容性都很好;(一般用于展示数据)
Canvas:和JS紧密结合,它的逻辑操作很方便,渲染效率也很高(一般用于应用、游戏、图表);
CSS3:更多是扩展样式的表现
优点:① 可以像SVG一样结合DOM节点;
② 渲染效率、旋转一些功能比Canvas更好;
缺点:① 在Dom节点很多的情况下,渲染速率会大大下降;

JSX是什么?

JSX是一种JavaScript的语法扩展。
它允许在javascript代码里出现HTML、CSS语法,它们终将被转换成原生的javascript,去创建DOM

React是什么?

React是一套可以用简洁的语法高效绘制DOM的框架。
“高效”
① 因为React拥有Virtual Dom机制。Virtual Dom是一个存在于内存中的javascript对象,它与Dom是一一对应的关系,也就是说只要有Virtual Dom,我们就能渲染出DOM;
② 当页面发生变化时,得益于高效的DOM diff算法,我们能够知道Virtual Dom的变化,从而高效的改动DOM,避免重新绘制DOM。

React Native是什么?

一个基于javascript,具备动态配置能力的移动端开发框架。
Native版本的React

Node.js是什么?

① javascript是一门编程语言;Node.js是一款基于javascript和GoogleV8 引擎的开源Web服务器项目;
② Node.js借助了javascript的事件驱动机制、V8的高性能引擎
(javascript是单线程执行,根本不能同步IO操作)
② javascript需要浏览器的解释器去解释执行;Node.js是对Google V8引擎进行封装了的运行环境;

npm

npm是Node.js的包管理工具
① 【直接用】大家都把自己开发的模块打包好后,放到npm官网。直接通过npm安装就可以直接用;
② 【依赖关系】npm可以根据依赖关系,把所有依赖的包都下载。

手写事件委托

//事件委托,利用的是事件冒泡的原理。
//利用事件委托,只需在DOM树中尽量最高的层次上添加一个事件处理程序。
var oBox = document.getElementById("box");
oBox.onclick = function(ev){
    var ev = ev || window.event;//为了火狐的兼容性。因为IE都支持window.event,但火狐只能够使用传递的事件对象;
    //上面那句相当于: var ev = ev ? ev:window.event;//ev为false时,即undefined
    var target = ev.target || ev.srcElement;//火狐只支持ev.target,而IE只支持ev.srcElement;
    //这个target,就是鼠标所点击的那个Node节点了。
}

性能优化(图片)

可以使用CSS Sprite进行图片的压缩与合并,减少请求数。
但是也要考虑!多图合成一张图然后压缩过后,图片大小,清晰度的问题

问题一:图片的压缩

图片的分辨率单位是:位/像素
① 图片压缩的原理就是,降低每个像素的位数;
② 对图片的压缩,图片的质量降低在所难免;
③ 但是有个非常重要的原则:在保持图片能够正常显示的情况下,尽可能压缩分辨率,从而降低图片的体积

问题二:图片的格式

当图片的颜色较复杂,用JPG;
当图片的颜色较单一,用GIF;

问题三:图片的切割

对大尺寸的图片进行切割;

浏览器缓存的优点

对于客户端:极大地提高网页性能,优化用户体验;
对于服务器:减少接收的请求次数,缓解服务端的压力;

强缓存和协商缓存

首先, 在第一次请求成功后,再次请求同一个网页:
① 浏览器会获取该资源第一次请求成功后缓存下来的Header信息,查看Expires(绝对时间)、Cache-control(相对时间,并且优先考虑)这两个属性;
若命中强缓存,则直接从本地磁盘获取资源(本次请求不会与服务端进行通信);(200)
若不命中强缓存,则进行②:
② 浏览器会拿着该资源第一次请求成功后缓存下来的Header信息,查看Last-Modified、ETag,将它作为请求头向服务器发送请求。由服务器来判断是否命中协商缓存:
若命中协商缓存,浏览器会响应新的Header信息给客户端,但是不会返回资源内容,会告诉浏览器直接从自己本地获取就行;(304)
若没命中协商缓存,则会响应全新的资源内容给客户端

本地存储

WebStorage 和 Cookie。
和浏览器缓存的区别:本地缓存可不联网,浏览器缓存不行

WebSocket

Socket:英文意思是孔、插座。是套接字
在JAVA里面,客户端创建连接套接字,发送请求给服务器端;
服务器端监听Socket,监听到了,则建立双向连接,发送数据;
关闭时,用close;

WebSocket也一样,
有2个方法:
send():向远程服务器发送数据
close():关闭该websocket链接
有4个属性:
onopen:当网络连接建立时,触发该事件
onerror:当网络出现错误时,触发该事件
onmessage:当websocket接受到服务器发来的消息时触发的事件,也是通信中最重要的一个监听事件
onclose:当websocket被关闭时,触发该事件
还有readyState属性,返回websocket所处的状态

源码">Ajax(源码)

① 创建xhr对象
② 通过xhr对象发送请求
③ 接受响应

//创建xhr对象
var xhr;
if(window.XMLHttpRequest){
    xhr = new XMLHttpRequest();
} else {
    xhr = new ActiveXObject('Microsoft.XMLHTTP');
}
//通过xhr对象发送请求
xhr.open('get',url,true);
xhr.send();

//处理响应
if(xhr.readyState == 4){
    if(xhr.status == 200){
        //对DOM的实际操作
    }
}

Ajax(JQuery)

$.ajax({
    type: "GET",//请求方式
    url: "https://dev.contoso.corp.com/123",//请求url
    dataType: ,//规定预期的,服务器响应的数据类型:“xml”、“html”、“script”、“json”、“jsonp”、“text”

})

JSONP

首先,Ajax直接请求普通文件存在跨域权限的访问问题;
然后,聪明的程序猿发现,拥有“src”的标签可以从外部域名下载js文件;
之后,有一种简洁的数据交换格式——JSON,可以被原生js支持,所以客户端可以随心所欲地处理这种格式;
后来,客户端可以通过和“调用脚本”一模一样的方式,来调用跨域服务器上动态生成的js文件(一般以JSON为后缀),获得自己所需的数据;
最后,为了更方便客户端使用数据,逐渐形成了一种非正式传输协议——JSONP。客户端可以传递一个callback参数给服务端来自定义回调函数的名字。(JQ通过定义jsonpCallback参数)

</script>

作者:网络 来源:ak47bo88的博