牛客刷题(4)

1.以下哪一项不属于浏览器Response Headers字段:

  • Referer

附:解析:

说一说常见的请求头和相应头都有什么呢?

1)请求(客户端->服务端[request]) 
    GET(请求的方式) /newcoder/hello.html(请求的目标资源) HTTP/1.1(请求采用的协议和版本号) 
    Accept: */*(客户端能接收的资源类型) 
    Accept-Language: en-us(客户端接收的语言类型) 
    Connection: Keep-Alive(维护客户端和服务端的连接关系) 
    Host: localhost:8080(连接的目标主机和端口号) 
    Referer: http://localhost/links.asp(告诉服务器我来自于哪里) 
    User-Agent: Mozilla/4.0(客户端版本号的名字) 
    Accept-Encoding: gzip, deflate(客户端能接收的压缩数据的类型) 
    If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT(缓存时间)  
    Cookie(客户端暂存服务端的信息) 

    Date: Tue, 11 Jul 2000 18:23:51 GMT(客户端请求服务端的时间)

 

2)响应(服务端->客户端[response])
    HTTP/1.1(响应采用的协议和版本号) 200(状态码) OK(描述信息)
    Location: http://www.baidu.com(服务端需要客户端访问的页面路径) 
    Server:apache tomcat(服务端的Web服务端名)
    Content-Encoding: gzip(服务端能够发送压缩编码类型) 
    Content-Length: 80(服务端发送的压缩数据的长度) 
    Content-Language: zh-cn(服务端发送的语言类型) 
    Content-Type: text/html; charset=GB2312(服务端发送的类型及采用的编码方式)
    Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT(服务端对该资源最后修改的时间)
    Refresh: 1;url=http://www.it315.org(服务端要求客户端1秒钟后,刷新,然后访问指定的页面路径)
    Content-Disposition: attachment; filename=aaa.zip(服务端要求客户端以下载文件的方式打开该文件)
    Transfer-Encoding: chunked(分块传递数据到客户端)  
    Set-Cookie:SS=Q0=5Lb_nQ; path=/search(服务端发送到客户端的暂存数据)
    Expires: -1//3种(服务端禁止客户端缓存页面数据)
    Cache-Control: no-cache(服务端禁止客户端缓存页面数据)  
    Pragma: no-cache(服务端禁止客户端缓存页面数据)   
    Connection: close(1.0)/(1.1)Keep-Alive(维护客户端和服务端的连接关系)  

    Date: Tue, 11 Jul 2000 18:23:51 GMT(服务端响应客户端的时间)

在服务器响应客户端的时候,带上Access-Control-Allow-Origin头信息,解决跨域的一种方法。

2.关于 javascript 模块化,下列描述错误的是

  • 模块化有利于管理模块间的依赖,更依赖模块的维护
  • 主流的模块化包括CommonJS,AMD,CMD等
  • Sea.js遵循AMD规范,RequireJS遵循CMD规范(这是错误的)
  • AMD推崇依赖前置,CMD推崇依赖就近

附:AMD是"Asynchronous Module Definition"的缩写,意思就是"异步模块定义"。它采用异步方式加载模块,模块的加载不影响它后面语句的运行。所有依赖这个模块的语句,都定义在一个回调函数中,等到加载完成之后,这个回调函数才会运行。
AMD也采用require()语句加载模块,但是不同于CommonJS。
主要有两个Javascript库实现了AMD规范:require.jscurl.js
AMD 是 RequireJS 在推广过程中对模块定义的规范化产出。
CMD 是 SeaJS 在推广过程中对模块定义的规范化产出。
区别:
1. 对于依赖的模块,AMD 是提前执行,CMD 是延迟执行
2. CMD 推崇依赖就近,AMD 推崇依赖前置

3.在jquery中,如果想要获取当前窗口的宽度值,下面哪个是实现该功能的?

  • width()

附:alert($(window).height()); //浏览器当前窗口可视区域高度

alert($(document).height()); //浏览器当前窗口文档的高度 
alert($(document.body).height());//浏览器当前窗口文档body的高度 
alert($(document.body).outerHeight(true));//浏览器当前窗口文档body的总高度 包括border padding margin 
alert($(window).width()); //浏览器当前窗口可视区域宽度 
alert($(document).width());//浏览器当前窗口文档对象宽度 
alert($(document.body).width());//浏览器当前窗口文档body的高度 
alert($(document.body).outerWidth(true));//浏览器当前窗口文档body的总宽度 包括border padding margin 

4.请给出这段代码的运行结果( )

1

2

3

4

5

6

7

8

9

<SCRIPT LANGUAGE="JavaScript">

var bb = 1;

function aa(bb) {

    bb = 2;

    alert(bb);

};

aa(bb);

alert(bb);

</SCRIPT>

 

  • 2 1

附:这道题考察是局部变量和参数传递的问题。

1

function aa(bb) {     bb = 2;     alert(bb); };

在aa函数中,bb是以传值的方式传入的,在函数中,会重新定义一个bb变量,并将其值覆为2,并不影响函数体外的bb变量,所以其值仍然为1.

5.假设 output 是一个函数,输出一行文本。下面的语句输出结果是什么?

output(typeof (function() {output(“Hello World!”)})());

  • Hello World! undefined

附:1.先立即执行匿名函数,输出Hello World!

2.函数执行后无返回值(return),则输出未定义

6.以下代码的输出结果是

1

2

3

4

var f = function g() {

        return 23;

    };

typeof g();

 

  • Error

附:在 JS 里,声明函数只有 2 种方法:
第 1 种: function foo(){...} (函数声明)
第 2 种: var foo = function(){...} (等号后面必须是匿名函数,这句实质是函数表达式)

除此之外,类似于 var foo = function bar(){...} 这样的东西统一按 2 方法处理,即在函数外部无法通过 bar 访问到函数,因为这已经变成了一个表达式。

但为什么不是 "undefined"?
这里如果求 typeof g ,会返回 undefined,但求的是 g(),所以会去先去调用函数 g,这里就会直接抛出异常,所以是 Error。

7.

typeof Symbol()    //"symbol"(es6新增)

typeof Number()    //"number"

typeof String()    //"string"

typeof Function()    //"function"

typeof Object()    //"object"

typeof Boolean()    //"boolean"

typeof null    //"object"

typeof undefined    //"undefined"

8.下列关于比较Ajax与Flash的优缺点,相关描述正确的是?

  • Ajax的优势在意在于开放性,易用性及易于开发
  • Flash的优势在于多媒体处理,可以更容易的调用浏览器以外的外部资源
  • Ajax最主要的批评就是它可能破坏浏览器的后退功能
  • flash 文件经常会很大,用户第一次使用的时候需要忍耐较长的等待时间

附:Ajax的优势

可搜索性 
普通的文本网页会更有利于SEO。文本内容是搜索引擎容易检索的,而繁琐的swf字节码却是搜索引擎不愿触及的。虽然Google等一些大型的搜索引擎可以检索SWF内部的内容,但是仍然有很多麻烦存在。

开放性 
Flash常年以来被Macromedia看的很死。包括Flex、FMS等辅佐技术一直都需要昂贵的安装、维护费用。而JS则没有这样的麻烦。没有人愿意承担法律和版权的风险。

费用 
Flash开发是很昂贵的,因为FlashIDE等环境都是要收费的.而Ajax则不同.虽然有一些便宜的生成swf的工具,但是他们的工能实在无法满足复杂需求。

易用性 
Ajax程序有更好的易用性。由于中间有一层Flashplayer代理层,因此许多辅助功能无法被Flash灵活利用。而且Flash在一些方面有着不好的口碑。比如弹出广告、比如恶意代码。
(awflasher.com个人认为这八成是乱上xx网站造成的)

易于开发 
人们开发复杂的Ajax和Flash应用程序时,都会借助一些高级的开发工具。普遍来说,Ajax的开发包比Flash简便、容易。

Flash的优势 
多媒体处理 
Flash在音频、视频等多媒体领域相比HTML有绝对的优势。现在几乎所有的网站都包含有Flash内容。

兼容性 
兼容性好:由于通过了唯一的FlashPlayer“代理”。人们不必像调试JS那样,在不同的浏览器中调试程序。

矢量图型 
这是Flash最大的优势,同样处在这一领域的SVG、Canvas element以及Direct完全不能与Flash相比。

客户端资源调度 
Flash能够更容易的调用浏览器以外的外部资源。比如摄像头、麦克风等。然而这是普通的HTML无法完成的。但是这也许是一个缺点

9.下面关于DNS说法正确的是()

  • DNS的作用是域名和IP地址的相互映射
  • DNS协议大多数运行在UDP协议之上
  • DNS协议端口号为53
  • DNS的默认缓存时间为1小时

附:A:DNS就是将域名翻译成IP地址。

B:主要用UDP,但是当请求字节过长超过512字节时用TCP协议,将其分割成多个片段传输。

C:DNS协议默认端口号是53。

D:操作系统的DNS缓存:windows DNS缓存的默认值是 MaxCacheTTL,它的默认值是86400s,也就是一天。macOS 严格遵循DNS协议中的TTL。

游览器的DNS缓存:chrome对每个域名会默认缓存60s;IE将DNS缓存30min;Firefox默认缓存时间只有1分钟;Safari约为10S。

10.你想通过 XMLHttpRequest更新以下元素,即通过div显示状态,哪个是正确的做法?

1

<div id="statusCode"></div>

 

  • var myDiv = document.getElementById ("statusCode"); myDiv.innerHTML = req.status;

附:ajax 里并没有statusCode;

ajax响应:

    responseText:作为响应主体被返回的文本

    responseXML:如果响应的内容类型是"text/xml"或者"application/xml", 这个属性中将保存包含着响应数据XML DOM文档

    status:响应的HTTP状态

    statusText:HTTP状态的说明

11.NOSCRIPT标签是做什么用的?

  • 用来定义在脚本未被执行时的替代内容

12.js的内置对象:

13.

var myObject = {

    foo: "bar",

    func: function() {

        var self = this;

        console.log(this.foo);  

        console.log(self.foo);  

        (function() {

            console.log(this.foo);  

            console.log(self.foo);  

        }());

    }

};

myObject.func();

程序的输出是什么?

  • bar
    bar
    undefined
    bar

附:1.第一个this.foo输出bar,因为当前this指向对象myObject。

2.第二个self.foo输出bar,因为self是this的副本,同指向myObject对象。

3.第三个this.foo输出undefined,因为这个IIFE(立即执行函数表达式)中的this指向window。

4.第四个self.foo输出bar,因为这个匿名函数所处的上下文中没有self,所以通过作用域链向上查找,从包含它的父函数中找到了指向myObject对象的self。

14.下面程序得到的结果分别是什么?()

console.log(([])?true:false);

console.log(([]==false?true:false));

console.log(({}==false)?true:false)

A.false true true      B.true true true        C.true false true            D.true true false

解析:

Boolean([]); //true             Number([]); //0              Number({}); // NaN             Number(false); //0

因此:

console.log(([])?true:fasle);// => console.log((true)?true:false);      //true

console.log([]==false?true:false); // => console.log(0==0?true:false);        //true

console.log(({}==false)?true:false); // => console.log((NaN==0)?true:false);       //false

选D选项

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值