阿里巴巴笔试
1
typeof (new Array).__proto__.constructor() 输出值为object
这一题我的理解是:Array是object的一种,它的__proto__指针都指向Object()的原型对象,所以那么它的构造函数constructor()返回的就是一个对象,typeof自然输出object。
2
box-sizing:border-box
关于box-sizing的取值:content-box是宽高只包含内容区,不包含padding和border;border-box是宽高包含整个盒子即包含padding和border。
3
属于AMD规范的是:RequireJS
属于CMD规范的是:SeaJS
4
<div id="outer"> <div id="inner" style="width: 100px;"></div> </div>
什么情况下document.querySelecotr("#inner").offsetWidth === 0 成立
答:
#inner {display: none}
#outer {display: none}
offsetWidth是元素的真实宽度,当#inner或者它的父元素#outer都display:none的时候,它的真实宽度为0。
5
关于CSRF 以下哪些说法是正确的
A CSRF是跨站脚本攻击的一种手段
B CSRF攻击可能会导致用户信息的丢失 √
C CSRF会让攻击者盗取到用户的Cookie信息
D CSRF会向被攻击者页面注入恶意脚本
E 使用Token校验可以有效防止CSRF攻击
F 使用GET请求可以有效防止CSRF攻击
关于CSRF:
CSRF通过伪装来自受信任用户的请求来利用受信任的网站,用我自己的话来说,首先这个攻击需要满足两个条件:1.用户在受信用网站产生了cookie 2.用户无意中点击了危险操作的链接(比如提交表单、删除重要数据的请求)
get型的CSRF攻击:危险链接是一个get请求,比方说 www.xxxbank.com/index.php?from=zhangsan&to=lisi&money=400 ,这个链接简单来说就是在某个银行的网站用户张三转账400给用户李四,如果张三正好登陆了这个网站并产生了cookie,那么他在其他地方无意中点击了这个链接,就会触发这个请求。
post型的CSRF攻击:在自己的网站中伪造一个form表单,提交到原来的form表单指向的服务器,然后诱导用户来到我们伪造的form表单(前提要他先登陆到原来的form表单,产生cookie)
防范:
- 验证码(用户体验不好)
- 请求的Referer头:记录了每次请求都是从哪个页面发送的,服务器可以根据请求的来源来判断是否受到CSRF攻击(但有时候请求不会带上这个Referer头)
- 防伪标志:服务器将一个随机生成的防伪标志发送给客户端,客户端将这个防伪标志放在隐藏表单中,客户端提交表单的时候将防伪标志一起提交,服务器收到提交后会对比防伪标志和自己一开始发送给客户端的是否相同。
6
关于npm命令和包管理策略描述正确的
A npm install babel@^6.5 命令会安装最新6.5.x版本的babel (应该是6.x.x的最新版,^这个符号是不会改变最左边的数字)
B npm install babel@>=5.6 命令可以安装最新5.x.x版本的babel (应该是>=5.6的最新版)
C npm publish 命令可以覆盖之前发布过的版本 (似乎不能覆盖发布的版本,只能发布一个新版本)
D 安装完A包然后安装B包,如果B依赖A,则A不会被多次安装 √
E require的时候优先查当前目录 (优先查node_module目录?)
F npm run build会执行当前目录的build.sh (不懂这个…)
7
Object.prototype._____.call(null) === "[object ____]"
答:toString Null
8
function add (x, y) {
if (!x || x<0) return 0;
if (!x || y<0) return 0;
return this.a+this.b+x+y;
}
var obj = {
a:1,
b:2,
}
var res = add.__(___,____);
答:
var res = add.apply(obj, [3,4]);
9
function add(num1) {
return function (num2) {
return function (num3) {
return function (num4) {
return num1+num2+num3+num4;
}
}
}
}
console.log(add(100)(200)(300)(400));
10
怎样设计一个弹窗组件