Magic-beans笔试题及答案分享

下面XX公司的笔试题,以及我个人的答案和分析,如有理解错误,或者欠缺的地方还望大家指出来,一起学习进步

1 标准CSS盒子模型?与低版本IE盒子模型有什么不同
  • 标准:margin-border-padding-content (width = content)
  • IE: margin-border-padding-content(width = border+padding+contetn)

2 position有那些值?各相对于什么定位?

position
TBLR:top bottom left right
  • static
不脱离标准流,无TBLR属性
  • relative
脱离标准流,但是仍占据位置,以父元素content左上角定位,padding会影响TBLR,border不会影响
  • absolute
脱离标准流,不占据位置,以第一个非stati的position定位,原点为padding左上角位置,如无position,则以浏览器窗口左上角
  • fixed
固定定位,以浏览器左上角为原点

3 不考虑兼容性,如何上下居中一个大小不定的元素(HTML+CSS)

  • 定位
top:50%
transform:translatedY(-50%)
  • Flex布局
display:flex
align-items:center//单行
align-content:center//多行

4-7程序题

  • 4
var a = 10;
function print() {
   console.log(a);
   var a = 100;
   console.log(a);
} 
print(); // undefined 100
//变量提升 局部作用域覆盖全局作用域
  • 5
var a =1;
function addA(a){//因为这里传入的参数为a,相当于局部声明了var a
    a++;//var a = a++
}
 addA(a);//函数调用后,局部变量被销毁
 console.log(a)//1,调用全局的a
var b = {b:1};
function addB(b){
   b.b++;//全局中的b={b:2}
   b={};//新建一个对象,这里的b指向堆内存中的一块新的区域
   b.b=3;//给其赋值
}
 addB(b);//调用
console.log(b.b);/2这里输出的是全局中所指向的那个堆内存中的b.b
  • 6
var o = {
    a:1,
    get:function(){
     console.log(this.a)
    }
};
o.get();//1 这里的this指向o
 var get = o.get;
get();//这里相当于Window.get(),全局中无a属于所以undefined
  • 7
var arr = [1,2,3,4,5]
var arr1 = arr.forEach(function(a){
   setTimeout(function(){
     console.log(a);
   },1000);
 });
// console.log(arr1)//1,2,3,4,5--因为,setTimeout会将其放入事件队列来执行,遍历的值不会改变
for(var i = 0; i<arr.length;i++){
    setTimeout(function(){
    console.log(arr[i])//5个undefined ,主线程运行完,再执行异步(即事件队列),此时i=5,arr[5]为undefined
    },1000)
}
 console.log(i)//5
console.log(i)//5
console.log(i)//5
console.log(i)//5
console.log(i)//5
8 编写一个函数count 每执行一次返回比上一次+1的数,如:1,2,3,4,5(除count外,不可有全局变量)

function count(){
var num = 0;
//运用闭包
return function test(){
num += 1;
console.log(num)
}
}
var obj = new count()//调用count返回一个函数,所以得实例化
obj()//1
obj()//2
obj()//3
obj()//4


#### 9 实现深度拷贝
>```
function deepCopy(data){
   if(data instanceof Array){
      var newArr = data.concat();
      return newArr
   }else if(data instanceof Object){
      var newObj = {};
      for(var key in data){
        newObj[key] = typeof data[key] === 'object'?deepCopy(data[key]):data[key];
        return newObj;
      }
   }else{
       return newData = data;
    }
 }

10 New操作符具体干了些什么

  • 1、创建了一个新的实例对象,并将this指向他
  • 2、实例对象的proto指向他的构造函数的原型,因此继承了构造函数的属性方法等
11 绑定DOM事件有几种方式?各自优缺点?解释事件代理及其好处?

function say(){
console.log('hi')

* 内联式

<button id='btn' onclick="say()">Hello</button>

* 属性式

<button id='btn'>Hello</button>
var btn = document.getElementById('btn')
btn.onclick = say()

* 监听事件(事件代理)

<button id='btn'>Hello</button>
var btn = document.getElementById('btn')
btn.addEventListener('clcik',say,false)

***
###### 优缺点分析
> * 内联式:DOM中绑定两个‘onclick’事件只会执行第一个;
* 属性式:!匿名函数!绑定时只会执行最后一个事件
* 事件监听:可以减少DOM操作(效率低,解析满,内存占用量过高),提高性能

#### 12 解决跨域问题?
> * 服务器添加请求头
* iframe
* window.postMessage
* AJAX解决跨域问题方法
* jsop--动态插入一个《script》
* websocket
* cors

####13 减少页面加载时间
> * AJAX请求时用get代替post(发送两次请求)
* 压缩代码,空格,换行不利于传输
* 减少DOM操作(如事件代理,div代理冗余的table)
* JS脚本执行效率低,文件末尾放置JS文件
* CSS、js文件较大时,从外部引用,因为浏览器本身会对其缓存
* 减少HTTP请求

#### 14 一个页面从输入URL到页面加载显示完成,这个过程都发生了什么?
>此题解析来自知乎: https://zhuanlan.zhihu.com/p/23155051
还有史上最详细解释:http://fex.baidu.com/blog/2014/05/what-happen/
***
#### 简述
* 根据域名找出对应IP地址
* 根据IP地址与服务器建立起socket链接
* 连接好了:浏览器发送请求,服务器响应请求
* 浏览器与服务器断开连接
***
**概念解释**
* **IP 地址**: IP 协议为互联网上的每一个网络和每一台主机分配的一个逻辑地址。IP 地址如同门牌号码,通过 IP 地址才能确定一台主机位置。服务器本质也是一台主机,想要访问某个服务器,必须先知道它的 IP 地址;
* **域名( DN )**:IP 地址由四个数字组成,中间用点号连接,在使用过程中难记忆且易输入错误,所以用我们熟悉的字母和数字组合来代替纯数字的 IP 地址,比如我们只会记住 [www.baidu.com**](http://link.zhihu.com/?target=http%3A//www.baidu.com/)(百度域名) 而不是 220.181.112.244(百度的其中一个 IP 地址);
* **DNS**: 每个域名都对应一个或多个提供相同服务服务器的 IP 地址,只有知道服务器 IP 地址才能建立连接,所以需要通过 DNS 把域名解析成一个 IP 地址。
知道了上面的概念,大概就知道了想要获得服务器的门牌号码,需要先将域名转换成 IP 地址。转换过程如下(以查询 [www.baidu.com**](http://link.zhihu.com/?target=http%3A//www.baidu.com/) 的 IP 地址为例,其中2、3、4步均在上一步未查询成功的情况下进行):
查找过程
浏览器搜索自己的 DNS 缓存(维护一张域名与 IP 地址的对应表);
搜索操作系统中的 DNS 缓存(维护一张域名与 IP 地址的对应表);
搜索操作系统的 hosts 文件( Windows 环境下,维护一张域名与 IP 地址的对应表);
操作系统将域名发送至 LDNS(本地区域名服务器,如果你在学校接入互联网,则 LDNS 服务器就在学校,如果通过电信接入互联网,则 LDNS 服务器就在你当地的电信那里。)LDNS 查询自己的 DNS 缓存(一般查找成功率在 80% 左右),查找成功则返回结果,失败则发起一个迭代 DNS 解析请求;
LDNS 向 Root Name Server (根域名服务器,其虽然没有每个域名的的具体信息,但存储了负责每个域,如 com、net、org等的解析的顶级域名服务器的地址)发起请求,此处,Root Name Server 返回 com 域的顶级域名服务器的地址;
LDNS 向 com 域的顶级域名服务器发起请求,返回 [baidu.com**](http://link.zhihu.com/?target=https%3A//www.baidu.com) 域名服务器地址;
LDNS 向 [baidu.com**](http://link.zhihu.com/?target=https%3A//www.baidu.com) 域名服务器发起请求,得到 [www.baidu.com**](http://link.zhihu.com/?target=http%3A//www.baidu.com/) 的 IP 地址;
LDNS 将得到的 IP 地址返回给操作系统,同时自己也将 IP 地址缓存起来;
操作系统将 IP 地址返回给浏览器,同时自己也将 IP 地址缓存起来;
至此,浏览器已经得到了域名对应的 IP 地址。
***
**补充说明1**
域名与 URL 是两个概念:域名是一台或一组服务器的名称,用来确定服务器在 Internet 上的位置;URL 是统一资源定位符,用来确定某一个文件的具体位置,例如,[zhihu.com](https://www.zhihu.com/) 是 知乎的域名,根据这个域名可以找到知乎的服务器,[zhihu.com/people/CompileYouth](https://www.zhihu.com/people/CompileYouth) 是 URL ,可以根据这个 URL 定位我的知乎主页;
IP 地址与域名不是一一对应的关系:可以把多个提供相同服务的服务器 IP 设置为同一个域名,但在同一时刻一个域名只能解析出一个 IP地址;同时,一个 IP 地址可以绑定多个域名,数量不限;
#####建立连接--三次握手
知道了服务器的 IP 地址,下面便开始与服务器建立连接了。
通俗地讲,通信连接的建立需要经历以下三个过程:
主机向服务器发送一个建立连接的请求(您好,我想认识您);
服务器接到请求后发送同意连接的信号(好的,很高兴认识您);
主机接到同意连接的信号后,再次向服务器发送了确认信号(我也很高兴认识您),自此,主机与服务器两者建立了连接。
**补充说明2**
TCP 协议:三次握手的过程采用 TCP 协议,其可以保证信息传输的可靠性,三次握手过程中,若一方收不到确认信号,协议会要求重新发送信号。
网页请求与显示
当服务器与主机建立了连接之后,下面主机便与服务器进行通信。网页请求是一个单向请求的过程,即是一个主机向服务器请求数据,服务器返回相应的数据的过程。
浏览器根据 URL 内容生成 HTTP 请求,请求中包含请求文件的位置、请求文件的方式等等;
服务器接到请求后,会根据 HTTP 请求中的内容来决定如何获取相应的 HTML 文件;
服务器将得到的 HTML 文件发送给浏览器;
在浏览器还没有完全接收 HTML 文件时便开始渲染、显示网页;
在执行 HTML 中代码时,根据需要,浏览器会继续请求图片、CSS、JavsScript等文件,过程同请求 HTML ;
####断开连接--四次挥手
主机向服务器发送一个断开连接的请求(不早了,我该走了);
服务器接到请求后发送确认收到请求的信号(知道了);
服务器向主机发送断开通知(我也该走了);
主机接到断开通知后断开连接并反馈一个确认信号(嗯,好的),服务器收到确认信号后断开连接;
**补充说明**
为什么服务器在接到断开请求时不立即同意断开:当服务器收到断开连接的请求时,可能仍然有数据未发送完毕,所以服务器先发送确认信号,等所有数据发送完毕后再同意断开。
第四次握手后,主机发送确认信号后并没有立即断开连接,而是等待了 2 个报文传送周期,原因是:如果第四次握手的确认信息丢失,服务器将会重新发送第三次握手的断开连接的信号,而服务器发觉丢包与重新发送的断开连接到达主机的时间正好为 2 个报文传输周期。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 195,980评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,422评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,130评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,553评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,408评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,326评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,720评论 3 386
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,373评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,678评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,722评论 2 312
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,486评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,335评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,738评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,009评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,283评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,692评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,893评论 2 335

推荐阅读更多精彩内容