赞
踩
本部分内容大致分为以下几个方面: HTML, CSS, JavaScript, Node 和 HTTP。
答:DOCTYPE是用来声明文档类型和DTD规范的,一个主要的用途便是文件的合法性验证。 如果文件代码不合法,那么浏览器解析时便会出一些差错。为了能够很好地显示满足标准的页面,又能最大程度兼容不合法的HTML。 浏览器厂商一般会提供两种浏览器模式:
如何区分:浏览器解析时到底使用严格模式还是混杂模式,与网页中的 DTD 直接相关。
- 1、如果文档包含严格的 DOCTYPE ,那么它一般以严格模式呈现。(严格 DTD ——严格模式)
- 2、包含过渡 DTD 和 URI 的 DOCTYPE ,也以严格模式呈现,但有过渡 DTD 而没有 URI (统一资源标识符,就是声明最后的地址)会导致页面以混杂模式呈现。(有 URI 的过渡 DTD ——严格模式;没有 URI 的过渡 DTD ——混杂模式)
- 3、DOCTYPE 不存在或形式不正确会导致文档以混杂模式呈现。(DTD不存在或者格式不正确——混杂模式)
- 4、HTML5 没有 DTD ,因此也就没有严格模式与混杂模式的区别,HTML5 有相对宽松的语法,实现时,已经尽可能大的实现了向后兼容。( HTML5 没有严格和混杂之分)
答:
<!DOCTYPE html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
1 2 | <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> |
答:语义化的含义就是用正确的标签做正确的事情,html语义化就是让页面的内容结构化,便于对浏览器、搜索引擎解析。语义化的好处包含
答:
答:
答:Cookie, localStorage 和 sessionStorage.
以下为三者之间的区别:
特性 | Cookie | localStorage | sessionStorage |
---|---|---|---|
数据的生命期 | 一般由服务器生成,可设置失效时间。如果在浏览器端生成Cookie,默认是关闭浏览器后失效 | 除非被清除,否则永久保存 | 仅在当前会话下有效,关闭页面或浏览器后被清除 |
存放数据大小 | 4K左右 | 一般为5MB | |
与服务器端通信 | 每次都会携带在HTTP头中,如果使用cookie保存过多数据会带来性能问题 | 仅在客户端(即浏览器)中保存,不参与和服务器的通信 | |
易用性 | 需要程序员自己封装,源生的Cookie接口不友好 | 源生接口可以接受,亦可再次封装来对Object和Array有更好的支持 |
答:首先需要了解的是同源和跨源的概念。对于相同源,其定义为:如果协议、端口(如果指定了一个)和主机对于两个页面是相同的,则两个页面具有相同的源。只要三者之一任意一点有不同,那么就为不同源。当一个资源从与该资源本身所在的服务器的域或端口不同的域或不同的端口请求一个资源时,资源会发起一个跨域 HTTP 请求。
跨域不一定是浏览器限制了发起跨站请求,而也可能是跨站请求可以正常发起,但是返回结果被浏览器拦截了。
答:现主流的解决方案包括: document.domain, location.hash, window.name, window.postMessage, JSONP, WebSocket, CORS 等等。详细描述见 前端跨域请求解决方案汇总或者 Joe’s Blog.
答:
优点
缺点
答:
答:全局属性是所有HTML元素共有的属性; 它们可以用于所有元素,尽管属性可能对某些元素没有影响。
accesskey
:设置快捷键,提供快速访问元素如aaa在windows下的firefox中按alt + shift + a
可激活元素class
:为元素设置类标识,多个类名用空格分开,CSS和javascript可通过class属性获取元素contenteditable
: 指定元素内容是否可编辑contextmenu
: 自定义鼠标右键弹出菜单内容data-*
: 为元素增加自定义属性dir
: 设置元素文本方向draggable
: 设置元素是否可拖拽dropzone
: 设置元素拖放类型: copy, move, linkhidden
: 表示一个元素是否与文档。样式上会导致元素不显示,但是不能用这个属性实现样式效果id
: 元素id,文档内唯一lang
: 元素内容的的语言spellcheck
: 是否启动拼写和语法检查style
: 行内css样式tabindex
: 设置元素可以获得焦点,通过tab可以导航title
: 元素相关的建议信息translate
: 元素和子孙节点内容是否需要本地化浏览器内核又可以分成两部分:渲染引擎(layout engineer 或者 Rendering Engine)和 JS 引擎。常见的浏览器内核可以分这四种:Trident、Gecko、Blink、Webkit,此处指浏览器内核。
1. ECMAScript/JavaScript 中都有那些数据类型?
答:ECMAScript中5种简单数据类型(基本数据类型): Undefined、Null、Boolean、Number和String, 1种复杂数据类型: Object.
2. 把非数值转化为数值的函数都有哪些?
答:Number()、parseInt()和parseFloat(),第一个函数,即转型函数Number()可以用于任何数据类型,而另两个函数则专门用于把字符串转换成数值。
3. JavaScript 中的 new 关键词做了什么?
__proto__
)设置为构造器函数外在、可访问的 prototype 对象(每个函数对象都会自动拥有一个 prototype
属性);this
变量指向这个新生成的对象;this
的地方使用新生成的对象执行;4. JavaScript 的六种继承类型?
答:
简单原型链:这是实现继承最简单的方式了,核心在于用父类实例作为子类原型对象。优点是简单,缺点在于二 - 创建子类实例时,无法向父类构造函数传参;由于来自原型对象的引用属性是所有实例共享的,所以修改原型对象上的属性会在所有子类实例中体现出来;
1 2 3 4 5 6 7 8 | function Super(){ this.val = 1; } function Sub(){ // ... } Sub.prototype = new Super(); let sub1 = new Sub(); |
fun
函数,太多了就会影响性能; 1 2 3 4 5 6 7 8 9 10 | function Super(val){ this.val = val; this.fun = function(){ // ... } } function Sub(val){ Super.call(this, val); // 核心 } let sub1 = new Sub(1); |
1 2 3 4 5 6 7 8 9 10 11 12 | function Super(){ // 只在此处声明基本属性和引用属性 this.val = 1; } // 在此处声明函数 Super.prototype.fun1 = function(){}; function Sub(){ Super.call(this); // 核心 // ... } Sub.prototype = new Super(); // 核心 let sub1 = new Sub(1); |
1 2 3 4 5 6 7 8 9 10 11 12 13 | function beget(obj){ // 生孩子函数 beget let F = function(){}; F.prototype = obj; return new F(); } function Super(){ this.val = 1; this.arr = [1]; } // 拿到父类对象 let sup = new Super(); // 生孩子 let sub = beget(sup); |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | function beget(obj){ // 生孩子函数 let F = function(){}; F.prototype = obj; return new F(); } function Super(){ this.val = 1; this.arr = [1]; } function getSubObject(obj){ // 创建新对象 let clone = beget(obj); // 核心 // 增强 clone.attr1 = 1; clone.attr2 = 2; return clone; } var sub = getSubObject(new Super()); |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | function beget(obj){ // 生孩子函数 beget let F = function(){}; F.prototype = obj; return new F(); } function Super(){ // 只在此处声明基本属性和引用属性 this.val = 1; this.arr = [1]; } // 在此处声明函数 Super.prototype.fun1 = function(){}; Super.prototype.fun2 = function(){}; function Sub(){ Super.call(this); // 核心 // ... } let proto = beget(Super.prototype); // 核心 proto.constructor = Sub; // 核心 Sub.prototype = proto; // 核心 let sub = new Sub(); |
5. 箭头函数的适用规则?
答:
如果你有一个简短的,单语句内联函数表达式,它唯一的语句是某个计算后的值的return语句,并且 这个函数没有在它内部制造一个this引用,并且没有自引用(递归,事件绑定/解除),并且 你合理地预期这个函数绝不会变得需要this引用或自引用,那么你就可能安全地将它重构为一个=>箭头函数。
6. 为什么我们区别 LHS 和 RHS 那么重要?
答:因为在变量还没有被声明(在所有被查询的 作用域 中都没找到)的情况下,这两种类型的查询的行为不同。如果 RHS 查询在嵌套的作用域的任何地方都找不到一个值,这会导致引擎抛出一个 ReferenceError。相比之下,如果引擎在进行一个 LHS 查询,但到达了顶层(全局 作用域)都没有找到它,而且如果程序没有运行在“Strict模式”下,那么这个全局作用域将会在全局作用域中创建一个同名的新变量,并把它交还给引擎。而如果一个 RHS 查询的变量被找到了,但是你试着去做一些这个值不可能做到的事,比如将一个非函数的值作为函数运行,或者引用 null 或者 undefined 值的属性,那么引擎就会抛出一个不同种类的错误,称为 TypeError。
7. 如何区分声明和表达式?
答:区分声明与表达式的最简单的方法是,这个语句中(不仅仅是一行,而是一个独立的语句)“function”一词的位置。如果“function”是这个语句中的第一个东西,那么它就是一个函数声明。否则,它就是一个函数表达式。
8. IIFE 方式与变种?
答:
1 2 3 4 5 6 7 8 9 10 11 12 | // 1 (function foo(){ .. })() // 2 (function(){ .. }()) // 3,用于 UMD 项目 (function IIFE( def ){ def( window ); })(function def( global ){ let a = 3; console.log( a ); // 3 console.log( global.a ); // 2 }); |
9. 请解释如下代码执行的结果?
1 2 | [] + {}; // "[object Object]" {} + []; // 0 |
答:在第一行中,{}出现在+操作符的表达式中,因此被翻译为一个实际的值(一个空object)。而[]被强制转换为””因此{}也会被强制转换为一个string:”[object Object]”。但在第二行中,{}被翻译为一个独立的{}空代码块儿(它什么也不做)。块儿不需要分号来终结它们,所以这里缺少分号不是一个问题。最终,+ []是一个将[]明确强制转换 为number的表达式,而它的值是0。
10. 什么是事件委托?
答::事件委托,通俗地来讲,就是把一个元素响应事件(click、keydown……)的函数委托到另一个元素;一般来讲,会把一个或者一组元素的事件委托到它的父层或者更外层元素上,真正绑定事件的是外层元素,当事件响应到需要绑定的元素上时,会通过事件冒泡机制从而触发它的外层元素的绑定事件上,然后在外层元素上去执行函数。事件委托的好处包括:动态绑定事件与减少内存消耗。
11. JavaScript 与 HTML 之间交互的事件模型分为几个阶段?
答:
12. 触摸事件都有哪些?
答:三种在规范中列出并获得跨移动设备广泛实现的基本触摸事件
13. 事件对象的 clientX, offsetX, screenX, pageX 有什么区别?
答:
答:在网页中,一个元素占有空间的大小由几个部分构成,其中包括元素的内容(content),元素的内边距(padding),元素的边框(border),元素的外边距(margin)四个部分。这四个部分占有的空间中,有的部分可以显示相应的内容,而有的部分只用来分隔相邻的区域或区域。4个部分一起构成了css中元素的盒模型。
答:使用 CSS word-break
属性(CSS 属性 word-break 指定了怎样在单词内断行的规则)或者 CSS text-overflow
属性(text-overflow CSS 属性确定如何向用户发出未显示的溢出内容信号。它可以被剪切,显示一个省略号或显示一个自定义字符串)。
答:Data URI 是一种提供让外置资源的直接内嵌在页面中的方案。这种技术允许我们只需单次 HTTP 请求即可获取所有需要引用的图片与样式资源,并因无需多次请求资源而变的高效。
答:在 img 方式引用图片时,img标记的src属性指定了一个远程服务器上的资源。当网页加载到浏览器中时,浏览器会针对每个外部资源都向服务器发送一次拉取资源请求,占用网络资源。大多数的浏览器都有一个并发请求数不能超过4个的限制。这意味着,如果一个网页里嵌入了过多的外部资源,这些请求会导致整个页面的加载延迟。而使用Data URL技术,图片数据以base64字符串格式嵌入到了页面中,其中好处包括:
Data URL也有一些不适用的场合:
答:块级元素和内联元素对于CSS调用的不同效果 - 块级元素默认独占一行,默认宽度为父元素的100%,可以设置宽度、高度,外边距、内边距;内联元素默认不独占一行,宽度随着内容自动撑,无法设置宽度、高度、外边距。可以设置内边距。内联元素要设置宽高必须用css设置块显示。
答:
答:
position: static;
的元素不会被特殊的定位。一个 static 元素表示它不会被“positioned”,一个 position 属性被设置为其他值的元素表示它会被“positioned”。记住一个“positioned”元素是指 position 值不是 static 的元素。
答:块级元素默认值为 block,而行内元素为 inline。
其他 display 值,例如 inline-block, list-item, table 和 flex。
答:同步是阻塞模式,异步是非阻塞模式。 同步就是指一个进程在执行某个请求的时候,若该请求需要一段时间才能返回信息,那么这个进程将会一直等待下去,直到收到返回信息才继续执行下去; 异步是指进程不需要一直等下去,而是继续执行下面的操作,不管其他进程的状态。当有消息返回时系统会通知进程进行处理,这样可以提高执行的效率
"d3": "^3.9.0"
或者 "d3": "~3.9.0"
,请问 “^” 和 “~” 的含义分别是什么?答:根据 “npm install –save” No Longer Using Tildes 一文可知,形如波浪号的编号(例如:~1.2.3)会匹配对应软件所有的 1.2.x 版本,并最终使用最新的符合要求的版本;相比之下倒 V 型编号(例如:^1.2.3)有更松弛的规则,所有 1.x.x 版本均在匹配列表中,但匹配过程会在 2.0.0 停止并返回最新的符合要求的版本。
3. 如何识别网页是否正在iframe中加载或直接进入浏览器窗口?
答:由于same origin policy,浏览器可以阻止访问window.top。 IE也发生错误。以下是工作代码:
1 2 3 4 5 6 7 | function inIframe () { try { return window.self !== window.top; } catch (e) { return true; } } |
top 和 self 都是 window 对象(连同 parent ),所以能看到你的窗口是否是顶窗。
1. HTTP/0.9 只有一个命令 GET
, HTTP/1.0 引入了 POST
命令和 HEAD
命令,丰富了浏览器与服务器的互动手段。请问 HTTP/1.1 的请求方法有哪些?
答:HTTP/1.1 提供八种方法以不同的方式操作指定的资源。分别是
- OPTIONS:这个方法可使服务器传回该资源所支持的所有HTTP请求方法。用’*‘来代替资源名称,向Web服务器发送OPTIONS请求,可以测试服务器功能是否正常运作。
- HEAD:与GET方法一样,都是向服务器发出指定资源的请求。只不过服务器将不传回资源的本文部分。它的好处在于,使用这个方法可以在不必传输全部内容的情况下,就可以获取其中“关于该资源的信息”(元信息或称元数据)。
- GET:向指定的资源发出“显示”请求。使用GET方法应该只用在读取数据,而不应当被用于产生“副作用”的操作中,例如在Web Application中。其中一个原因是GET可能会被网络蜘蛛等随意访问。参见安全方法
- POST:向指定资源提交数据,请求服务器进行处理(例如提交表单或者上传文件)。数据被包含在请求本文中。这个请求可能会创建新的资源或修改现有资源,或二者皆有。
- PUT:向指定资源位置上传其最新内容。
- DELETE:请求服务器删除Request-URI所标识的资源。
- TRACE:回显服务器收到的请求,主要用于测试或诊断。
- CONNECT:HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。通常用于SSL加密服务器的链接(经由非加密的HTTP代理服务器)。
答:状态代码的第一个数字代表当前响应的类型,主要为五类
- 1xx消息——请求已被服务器接收,继续处理
- 2xx成功——请求已成功被服务器接收、理解、并接受
- 3xx重定向——需要后续操作才能完成这一请求
- 4xx请求错误——请求含有词法错误或者无法被执行
- 5xx服务器错误——服务器在处理某个正确请求时发生错误
详细情况见 维基百科。
答:因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,”你发的FIN报文我收到了”。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。
答:按照通信过程的收发端来划分,可以将整个过程分成四个部分-客户端请求、服务端回复、客户端回应以及服务器回应。
- 客户端发出握手请求 (Client Hello),包含以下信息:
- 支持的协议版本,比如TLS 1.0
- 一个客户端生成的随机数(random_1),这个随机数既需要客户端保存又需要发送给服务器
- 支持的加密方法,比如RSA公钥加密
- 支持的压缩方法
- 服务器回复 (Server Hello),包含以下信息:
- 确认使用的加密通信协议版本,比如TLS 1.0。如果浏览器与服务器支持的版本不一致,服务器关闭加密通信
- 一个服务器生成的随机数 (random_2)
- 确认使用的加密方法,比如RSA公钥加密
- 服务器证书(其中包含服务器放入公钥)
- 可选:如果服务器需要确认客户端的身份,就会再包含一项请求,要求客户端提供”客户端证书”。比如,金融机构往往只允许认证客户连入自己的网络,就会向正式客户提供USB密钥,里面就包含了一张客户端证书
- 客户端回应,包含以下步骤:
- 验证服务器证书的合法性,证书合法性包括:证书是否过期,发行服务器证书的 CA 是否可靠,发行者证书的公钥能否正确解开服务器证书的“发行者的数字签名”,服务器证书上的域名是否和服务器的实际域名相匹配。如果合法性验证没有通过,通讯将断开
- 客户端使用一些加密算法 (例如:RSA, Diffie-Hellman)产生一个48个字节的 key,这个 key 叫 PreMaster Secret。该 PreMaster Secret 用服务器发来的公钥加密后随同相关内容(如果前一步,服务器要求客户端证书,客户端会在这一步发送证书及相关信息,即客户的证书以及含有签名的随机数)传送回服务器端,防止被窃听
- 编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥发送
- 客户端握手结束通知,表示客户端的握手阶段已经结束。这一项同时也是前面发送的所有内容的hash值,用来供服务器校验
- 服务器回应,服务器接收到浏览器送过来的消息,用自己的私钥解密,获得 PreMaster Secret。再结合另外两个随机数 random_1 和 random_2,计算出本次会话的会话密钥 (session secret),然后向客户端发送下面信息:
- 编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥发送
- 服务器握手结束通知,表示服务器的握手阶段已经结束。这一项同时也是前面发送的所有内容的hash值,用来供客户端校验
在四个过程结束之后,握手阶段结束。接下来,客户端和服务端进入加密通信阶段,该阶段的通信采用普通的 HTTP 协议,只不过双方都采用相同的会话密钥对会话内容进行对称加密和解密。
需要注意的是非对称加解密算法的效率要比对称加解密要低的多。所以 SSL 在握手过程中使用非对称密码算法来协商密钥,实际使用对称加解密的方法对 HTTP 内容加密传输。
答:
- OSI分层 (7层):物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。
- TCP/IP分层(4层):网络接口层、 网际层、运输层、 应用层。
- 五层协议 (5层):物理层、数据链路层、网络层、运输层、 应用层。
- 每一层的协议如下:
- 物理层:RJ45、CLOCK、IEEE802.3 (中继器,集线器)
- 数据链路:PPP、FR、HDLC、VLAN、MAC (网桥,交换机)
- 网络层:IP、ICMP、ARP、RARP、OSPF、IPX、RIP、IGRP、 (路由器)
- 传输层:TCP、UDP、SPX
- 会话层:NFS、SQL、NETBIOS、RPC
- 表示层:JPEG、MPEG、ASII
- 应用层:FTP、DNS、Telnet、SMTP、HTTP、WWW、NFS
- 每一层的作用如下:
- 物理层:通过媒介传输比特,确定机械及电气规范(比特Bit)
- 数据链路层:将比特组装成帧和点到点的传递(帧Frame)
- 网络层:负责数据包从源到宿的传递和网际互连(包PackeT)
- 传输层:提供端到端的可靠报文传递和错误恢复(段Segment)
- 会话层:建立、管理和终止会话(会话协议数据单元SPDU)
- 表示层:对数据进行翻译、加密和压缩(表示协议数据单元PPDU)
- 应用层:允许访问OSI环境的手段(应用协议数据单元APDU)
答:A 类地址:以0开头, 第一个字节范围:0~126(1.0.0.0 - 126.255.255.255);B 类地址:以10开头, 第一个字节范围:128~191(128.0.0.0 - 191.255.255.255);C 类地址:以110开头, 第一个字节范围:192~223(192.0.0.0 - 223.255.255.255)。其中,10.0.0.0—10.255.255.255,172.16.0.0—172.31.255.255,192.168.0.0—
192.168.255.255 为 Internet 上保留地址用于内部。
答:
- ICMP协议: 因特网控制报文协议。它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。
- TFTP协议: 是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务。
- HTTP协议: 超文本传输协议,是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。
- DHCP协议: 动态主机配置协议,是一种让系统得以连接到网络上,并获取所需要的配置参数手段。
NAT协议:网络地址转换属接入广域网(WAN)技术,是一种将私有(保留)地址转化为合法IP地址的转换技术。- DHCP协议:一个局域网的网络协议,使用UDP协议工作,用途:给内部网络或网络服务供应商自动分配IP地址,给用户或者内部网络管理员作为对所有计算机作中央管理的手段。
答:TCP 提供面向连接的、可靠的数据流传输,而 UDP 提供的是非面向连接的、不可靠的数据流传输;TCP 传输单位称为 TCP 报文段,UDP 传输单位称为用户数据报;TCP 注重数据安全性,UDP 数据传输快,因为不需要连接等待,少了许多操作,但是其安全性却一般;TCP 对应的协议和 UDP 对应的协议如下:
1 2 3 4 5 6 7 8 9 10 | TCP 协议 (1) FTP:定义了文件传输协议,使用21端口。 (2) Telnet:一种用于远程登陆的端口,使用23端口,用户可以以自己的身份远程连接到计算机上,可提供基于DOS模式下的通信服务。 (3) SMTP:邮件传送协议,用于发送邮件。服务器开放的是25号端口。 (4) POP3:它是和SMTP对应,POP3用于接收邮件。POP3协议所用的是110端口。 (5)HTTP:是从Web服务器传输超文本到本地浏览器的传送协议。 UDP协议 (1) DNS:用于域名解析服务,将域名地址转换为IP地址。DNS用的是53号端口。 (2) SNMP:简单网络管理协议,使用161号端口,是用来管理网络设备的。由于网络设备很多,无连接的服务就体现出其优势。 (3) TFTP(Trival File Tran敏感词er Protocal),简单文件传输协议,该协议在熟知端口69上使用UDP服务。 |
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。