阿里面试个别问题记录。有的不记得了。

一.cdn以及原理

先理解

使用A记录和CNAME进行域名解析的区别

   A记录就是把一个域名解析到一个IP地址(Address,特制数字IP地址),而CNAME记录就是把域名解析到另外一个域名。其功能是差不多,CNAME将几个主机名指向一个别名,其实跟指向IP地址是一样的,因为这个别名也要做一个A记录的。但是使用CNAME记录可以很方便地变更IP地址。如果一台服务器有100个网站,他们都做了别名,该台服务器变更IP时,只需要变更别名的A记录就可以了。
image.png

基本情况就是存在多个缓存服务器。 有的东西会被cdn缓存 有的不会 图片和静态js html文件会 接口有的会 有的不会 要看配置

如果需要获取用户ip地址的话 cdn会出问题

二.ajax、fetch区别

ajax本质使用的是 XmlRequestHttp

fetch 则直接是 浏览器的对象

其特点

1、fetch()返回的promise将不会拒绝http的错误状态,即使响应是一个HTTP 404或者500

2、在默认情况下 fetch不会接受或者发送cookies

3.fetch无法监听数据传输的过程进度

开发人员需要注意的地方

1、所有的IE浏览器都不会支持 fetch()方法

2、服务器端返回 状态码 400 500的时候 不会reject

but why use fetch

因为原生的 XmlRequestHttp 不注重分离原则 首先直观的看

使用 XHR 发送一个 JSON 请求一般是这样:

var xhr = new XMLHttpRequest();

xhr.open('GET', url);

xhr.responseType = 'json';

xhr.onload = function() {

console.log(xhr.response);

};

xhr.onerror = function() {

console.log("Oops, error");

};

xhr.send();

使用 Fetch 后,顿时看起来好一点·

//code from http://caibaojian.com/fetch-ajax.html

fetch(url).then(function(response) {

return response.json();

}).then(function(data) {

console.log(data);

}).catch(function(e) {

console.log("Oops, error");

});

其次 xhr 不支持 generator 和 async await写法 因为他们需要的是 promise 风格 而fetch 就是 基于 promise 设计的:

try {

let response = await fetch(url);

let data = await response.json();

console.log(data);

} catch(e) {

console.log("Oops, error", e);

}

// 注:这段代码如果想运行,外面需要包一个 async function

优雅而完美 不是吗?

是说axios还是基于AJAX的,能防止CRSF攻击,但是不支持jsonp格式,提供 了并发请求的接口 fetch更注重底层,脱离了XHR对象,能直接通过mode指定请求是否跨域,只对网络请求报错,不支持abort、不支持超时控制,就算使用了settimeout和Promise.reject还是不能阻止请求过程继续在后台运行,造成流量的浪费,也没有progress

三.装饰者模式以及用途

首先装饰者是一个函数,对于被装饰者而言,会成为一个参数传入,对其进行一些统一的设置 可以 修改属性、添加log、设置只读、做行为限定等

动态将职责附加到对象上,若要扩展功能,装饰者提供了比继承更具弹性的代替方案。

了解aop模式

Function.prototype.before = function(beforeFunc){

var that = this;

return function(){

    beforeFunc.apply(this, arguments);

    return that.apply(this, arguments);

}

}

Function.prototype.after = function(afterFunc){

var that = this;

return function(){

    var ret = that.apply(this, arguments);

    afterFunc.apply(this, arguments);

    return ret;

}

}

总之就是做功能扩展。

来看es6装饰者的写法

@before( function )

class Dog{}

function before (beforeFunc){

return function(originFunc){

    return function(){

        before.apply(this, arguments);

        return originFunc.apply(this, arguments);

    }

}

}

优雅而美 不是吗

四.IE和普通的浏览器W3C的事件模型区别

姚冉告诉我 ie 不支持 冒泡行为 二者 写法不一样 addAttachment 和 addEventListner

首先IE浏览器本身只支持Bubbling不支持Capturing;

最后一点,在别的浏览器中,它显然是无法工作的。

1、 当我们需要阻止浏览器某DOM元素的默认行为的时候在W3C下调用e.preventDefault(),而在IE下则通过window.event.returnValue=false来实现。

2、当我们要阻止事件冒泡的时候,在W3C标准里调用e.stopPropagation(),而在IE下通过设置window.event.cancelBubble=true来实现。

3.而且在事件处理的function内部this关键字也无法使用,因为this永远都只想window object这个全局对象。要想得到event对象必须通过window.event方式。

兼容写法 傻而笨

window.onload=function(){…}

obj.onmouseover=function(e){…}

obj.onclick=function(){…}

5.绝对居中 写出几种 可以让弹框 绝对居中的方式

position absolute

flex

table-cell

.wrap{

height:500px;

width: 1000px;

background:#ccc;

display:table-cell;/*IE8以上及Chrome、Firefox*/

vertical-align:middle;/*IE8以上及Chrome、Firefox*/

text-align: center;

}

.container{

display: inline-block;

margin: auto;

background: red;

min-width: 300px;

min-height: 50px;

padding: 20px;

}

.wrap{

height:500px;

width: 1000px;

background:#ccc;

display:table-cell;/*IE8以上及Chrome、Firefox*/

vertical-align:middle;/*IE8以上及Chrome、Firefox*/

text-align: center;

}

.container{

display: inline-block;

margin: auto;

background: red;

min-width: 300px;

min-height: 50px;

padding: 20px;

}

缺点很明显 如果 wrap 设置 fixed 或 absolute 就会被破坏 居中

因为

vertical-align only applies to inline/table-cell elements.

not in position: absolute; display: table-cell; equals display: block; position: fixed;

定宽定高写法

.element {

width: 300px;

height: 300px;

position: absolute;

left: 0;

right: 0;

top: 0;

bottom: 0;

margin: auto;

background: red;

}

他会自动分配给 margin 因为 margin auto的原因

需要明白一件事情 空间 margin border padding content

因为空间已经被撑开 而margin 的auto 让 其余空间给了 margin

我个人最爱的居中

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF-8">

<meta name="viewport" content="width=device-width, initial-scale=1.0">

<meta http-equiv="X-UA-Compatible" content="ie=edge">

<title>Document</title>

<style>

/*方法一*/

.outer {

display: table;

position: absolute;

top: 0;

right: 0;

left: 0;

bottom: 0;

height: 100%;

width: 100%;

}

.middle {

display: table-cell;

vertical-align: middle;

text-align: center;

}

.inner {

display: inline-block;

background: red;

padding: 30px 50px;

}

</style>

</head>

<body>

<div class="outer">

<div class="middle">

<div class="inner">

fdjsfkld

</div>

</div>

</div>

</body>

</html>

六.生命周期

这个答得还不错,不说了

七.promise机制和怎么实现

主要是 为了 指定 异步操作后的 执行顺序

存在三种状态 pending fullfilled reject

有几种方法 race all try resolve reject then catch等等 。。。
然后使用的是 宏任务 还不知道微任务怎么去写。

8.redux单数据流程和异步操作
主要说说异步操作,thunk 和 saga, 尤其是saga的控制流。
9.contentType有几种类型
我说了四种。

1.text/xml 2.application/json 3.application/x-www-form-urlencoded 4.multipart/form-data

10.npm包和所有的打包工具

DllPlugin 缓存 第三方包 增加 webpack 编译速度。。

Happypack——将 loader 由单进程转为多进程

Gzip 做法 是 抽离重复的代码 替换为 短的key

减少体积 ignorePlugin commonChunck babel-plugin-import

11.key
直接说vue的 patch函数。。

12 前端优化手段

1.预解析DNS

2.CDN

3.按需加载

4.gip 压缩

13.开发 webpack plugin的固定格式

class FileListPlugin { constructor(options) {} apply(compiler) { // 在 compiler 的 emit hook 中注册一个方法,当 webpack 执行到该阶段时会调用这个方法compiler.hooks.emit.tap('FileListPlugin', (compilation) => { // 给生成的 markdown 文件创建一个简单标题 var filelist = 'In this build:\n\n'// 遍历所有编译后的资源,每一个文件添加一行说明 for (var filename in compilation.assets) { filelist += ('- '+ filename +'\n') }// 将列表作为一个新的文件资源插入到 webpack 构建结果中 compilation.assets['filelist.md'] = { source: function() { return filelist }, size: function(){ return filelist.length }, } }) } }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,029评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,395评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,570评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,535评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,650评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,850评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,006评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,747评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,207评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,536评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,683评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,342评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,964评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,772评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,004评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,401评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,566评论 2 349