WEB前端面试题整顿(二)

WEB前端面试题的纪录(二)

1、一次完全的HTTP事宜是怎样的一个历程:
基础流程:

  1. 域名剖析

  2. 提议TCP的3次握手

  3. 竖立TCP衔接后提议http要求

  4. 服务器端响应http要求,浏览器获得html代码

  5. 浏览器剖析html代码,并要求html代码中的资本

  6. 浏览器对页面举行衬着显现给用户

2、JSONP是什么?它是怎样完成跨域的?为何它能够完成跨域?
JSONP(JSON with Padding)是一个非官方的协定,它许可在服务器端集成Script tags返回至客户端,经由过程javascript callback的情势完成跨域接见。
由于同源战略的限定,XmlHttpRequest只许可要求当前源(域名、协定、端口)的资本,为了完成跨域要求,能够经由过程script标签完成跨域要求(由于同源战略不阻挠动态剧本插进去,而且将剧本看做是从供应 Web 页面的域上加载的),然后在服务端输出JSON数据并实行回调函数,从而处置惩罚了跨域的数据要求。

3、闭包:函数能被外部挪用到,则该作用连上的一切变量都会被保留下来。
作用:①能够读取函数内部的变量;②相当于划出了一块私有作用域,防止数据污染;③让变量一向保留在内存中
运用全局变量被认为是不好的习气,而且轻易形成毛病而且保护本钱较高,所以js能够采纳闭包的体式格局读取函数的内部变量。然则假如大批运用闭包就会形成过量的变量一向保留在内存中,会形成内存走漏。

4、模块化编程
①AMD(异步模块定义) requirejs
defined(id,deps,factory)
require([dependency],function(){})
异步加载,浏览器不会落空响应
它指定的回调函数,只要前面的模块都加载完成后,才会运转,处置惩罚了依靠性题目
②CMD(通用模块定义) seajs
模块定义体式格局和模块加载机遇处置惩罚差别
defined(id,deps,factory)
function(require,exports,module)
module.exports = ______;
③区分:AMD依靠前置,在定义模块的时刻就要声明其依靠的模块;CMD就近依靠,只要在用到哪一个模块的时刻再去require;

5、JS继承与原型题目
Js一切的函数都有一个prototype属性,这个属性援用了一个对象,即原型对象,也简称原型。每个对象都有原型,在浏览器中它体现在一个隐蔽的 proto 属性上。
当一个对象须要挪用某个要领时,它归去近来的原型上查找该要领,假如没有找到,它会再次往下继承查找。如许逐级查找,一向找到了要找的要领。 这些查找的原型构成了该对象的原型链条。原型末了指向的是null。我们说的原型继承,就是将父对像的要领给子类的原型。子类的组织函数中不具有这些要领和属性。

6、一个页面从URL到加载显现完成,都发生了什么?
①经由过程DNS将该地点剖析成IP地点;
②提议网络衔接,举行http协定会话:客户端发送报头(要求报头),服务端回馈报头(响应报头)
③返回一个页面(依据页面上的外链的URL从新发送要求猎取)
④吸收文件终了,对加载到的资本举行语法剖析,以及响应的内部数据结构(网页衬着)

7、行列、堆、栈的区分?
行列是先进先出:就像一条路,有一个进口和一个出口,先进去的就能够先出去。而栈就像一个箱子,后放的在上边,所以后进先出。堆是在顺序运转时,而不是在顺序编译时,请求某个大小的内存空间。即动态分派内存,对其接见和对平常内存的接见没有区分。
栈(Stack)是操纵体系在竖立某个历程时或许线程为这个线程竖立的存储地区。在编程中,比方C/C++中,一切的局部变量都是从栈中分派内存空间,现实上也不是什么分派,只是从栈顶向上用就行,在退出函数的时刻,只是修正栈指针就能够把栈中的内容烧毁,所以速率最快。
堆(Heap)是应用顺序在运转的时刻要求操纵体系分派给本身内存,平常是请求/赋予的历程。由于从操纵体系管理的内存分派所以在分派和烧毁时都要占用时候,所以用堆的效力低的多!然则堆的长处是能够做的很大,C/C++对分派的Heap是不初始化的。
在Java中除了简朴范例(int,char等)都是在堆中分派内存,这也是顺序慢的一个重要原因。然则跟C/C++差别,Java中分派Heap内存是自动初始化的。在Java中一切的对象(包含int的wrapper Integer)都是在堆中分派的,然则这个对象的援用倒是在Stack中分派。也就是说在竖立一个对象时从两个处所都分派内存,在Heap中分派的内存现实竖立这个对象,而在Stack中分派的内存只是一个指向这个堆对象的指针(援用)罢了。

8、什么是线程?历程和线程的关联是什么?
线程可定义为历程内的一个实行单元,或许定义为历程内的一个可调理实体。 在具有多线程机制的操纵体系中,处置惩罚机调理的基础单元不是历程而是线程。一个历程能够有多个线程,而且至少有一个可实行线程。
线程和历程的关联:
(1)线程是历程的一个组成部分.
(2)历程的多个线程都在历程地点空间运动.
(3)体系资本是分派给历程的,线程须要资本时,体系从历程的资本里分派给线程.
(4)处置惩罚机调理的基础单元是线程.

9、CSS3中的transform属性和transition属性?
transform:
功用:使元素变形的属性,其合营rotate(扭转角度)、scale(缩放倍数)、skew(歪曲元素)等参数一同运用
语法:
transform:rotate(扭转角度);//正数为顺时针、负数为逆时针;
transform:rotate(30deg);//顺时针扭转30度
transform:rotate(-20deg);//逆时针扭转20度
transform:scale(缩放倍数);
transform:scale(1.20);//放大1.2倍
transition:
功用:设置元素由款式一变成款式二所须要的一些变化结果
语法:transition: property duration timing-function delay ;
值 形貌
transition-property 划定设置过渡结果的 CSS 属性的称号。
transition-duration 划定完成过渡结果须要若干秒或毫秒。
transition-timing-function 划定速率结果的速率曲线。
transition-delay 定义过渡结果什么时候最先。

10、什么是MVVM框架?
MVVM是Model-View-ViewModel的简写。
MVVM 是 Web 前端一种异常盛行的开辟形式,应用 MVVM 能够使我们的代码更专注于处置惩罚营业逻辑而不是去体贴 DOM 操纵。现在有名的 MVVM 框架有 vue, avalon, angular 等,这些框架各有所长,然则完成的头脑大致上是雷同的:数据绑定 + 视图革新。跟MVC一样,重要目标是星散视图(View)和模子(Model)。View能够自力于Model变化和修正,一个ViewModel能够绑定到差别的”View”上,当View变化的时刻Model能够稳定,当Model变化的时刻View也能够稳定。
在MVVM中,数据是中心,由于VIewModel与View之间的双向绑定,操纵了ViewModel中的数据(固然只能是监控属性),就会同步到DOM,我们透过DOM事宜监控用户对DOM的修改,也会同步到ViewModel。
MVVM框架的长处:
(1)轻易测试
在MVC下,Controller基础是没法测试的,内里混淆了个种种逻辑,而且疏散在差别的处所。有了MVVM我们就能够测试内里的viewModel,来考证我们的处置惩罚结果对不对。
(2)便于代码的移植
能够把一些视图逻辑放在一个ViewModel内里,让许多view重用这段视图逻辑。比方iOS内里有iPhone版本和iPad版本,除了交互展现不一样外,营业逻辑的model是一致的。如许,我们就能够以很小的价值去开辟另一个app。
(3)自力开辟
开辟职员能够专注于营业逻辑和数据的开辟(ViewModel),设想职员能够专注于页面设想,运用Expression Blend能够很轻易设想界面并天生xml代码。

    原文作者:studyrh
    原文地址: https://segmentfault.com/a/1190000008851372
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞