代码改变世界

2017做的某某测试答案,仅供参考

2018-04-26 22:07  @疯狂的迈步  阅读(999)  评论(2编辑  收藏  举报

一、基础知识

1、项目中使用过哪些优化方法

请求资源优化,比如数据和请求文件压缩,CDN加速
数据加载优化,比如合并请求,减小http请求消耗
页面加载优化,比如数据加载之后应用性能分析,避免或最小化JavaScript和CSS的使用阻塞渲染

2、写代码使用正则表达式验证邮箱格式 。

/^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+/ 

3、如何判断某变量是否为数组数据类型。

Array.isArray(value)
或者
Object.prototype.toString.call(value)==='[object Array]'

4、简述常见的http状态码,列举5种。

200 OK请求成功
304 Not Modified文档内容没有修改
403 Forbidden服务器请求拒绝
404 Not Found请求失败
502 Bad Gateway请求服务器无响应

5、简述一下src与href的区别。

src是引入,指向物件的来源地址
href是引用,指向需要连结的地方

6、挑出其中块级元素

a、b、span、dl、dt、img、input、strong、h1-h6、blockquote、select、label、em、button、textarea
dl h1-h6 blockquote

7、请编写一段JavaScript脚本生成下面这段DOM结构。要求:使用标准的DOM方法或属性。

<div id=”name”>  
    <p class=”slogan”>真传X</p>
</div>
```javascript
	var _div=document.createElement('div');
	var _p=document.createElement('p');
	_div.appendChild(_p);
	_p.className="slogan";
	var _text=document.createTextNode('真传X');
	_p.appendChild(_text);
	_div.setAttribute('id','name');
	document.body.appendChild(_div);
```

8、为什么会有跨域?解决方式?

跨域是指一个域下的文档或脚本试图去请求另一个域下的资源,是由浏览器同源策略限制的一类请求场景,通过跨域的解决方式有很多,其中常用的是通过jsonp跨域、跨域资源共享(CORS)和nginx代理跨域,其它还有nodejs中间件代理跨域,WebSocket协议跨域,postMessage跨域,iframe跨域。

9、CSS中margin和padding的区别

margin是外边距
padding是内填充
详细点:margin是指从自身边框到另一个容器边框之间的距离,就是容器外距离;padding是指自身边框到自身内部另一个容器边框之间的距离,就是容器内距离。

二、 基础算法

1、写代码消除 数组 【6 8 9 9 12 13 14 1 3】中重复的元素。

```javascript
var _array=[6,8,9,9,12,13,14,1,3];
var _temp=[];
var _obj={};
for(var i=0;i<_array.length;i++){
	if(!_obj[_array[i]]){
		_temp.push(_array[i]);
		_obj[_array[i]]=true;
	}
}
console.log(_temp);
//或者
var _array=[6,8,9,9,12,13,14,1,3];
console.log(new Set(_array));
```

2、二分查找的时间复杂度是多少,请写出推导过程。

时间复杂度log2(n),二分算法的思想是将n个元素分成大致相等的两部分,去a[n/2]与x做比较,如果x=a[n/2],则找到x,算法中止;如果x<a[n/2],则只要在数组a的左半部分继续搜索x,如果x>a[n/2],则只要在数组a的右半部搜索x.总共有n个元素,渐渐跟下去就是n,n/2,n/4,....n/2^k,其中k就是循环的次数,由于你n/2^k取整后>=1,即令n/2^k=1,可得k=log2n,(是以2为底,n的对数)所以时间复杂度可以表示O(logn)

3、如果要构建一个树形结构(dom树),那么基本节点应该如何定义,写出伪码即可。

构建dom树可以参考虚拟dom的构建,比如react中的html结构的写法。```React.createElement('h1', {className: 'title'}, 'Hello world')```

三、基础设计模式

1、平时工作中用到哪些设计模式?

单例模式,适配器模式,代理模式,观察者模式

2、简述mvc mvvm 设计模式?

这个可以由我的一篇博文来叙述:https://juejin.im/entry/598ddfe7f265da3e301e9512

四、工作思考

1、工作中使用过哪些框架(angular/vue/react)?简述其中一个框架的特点

vue,特点是轻量,双向绑定,基于虚拟dom的MVVM,写法类传统开发模式

2、目前自己在工作中的瓶颈是什么?

进步比较慢,平时基本对接于业务,其它很少接触,现在也希望接触多点,多学习。