记录在面试过程中被问到的一些问题,ps:面试真心是一个很好的学习机会,能看到好多自己的不足~~
浅拷贝&&深拷贝
浅拷贝会使的两个对象指向同一个内存地址,深拷贝则会开辟一块新的内存空间,然后将被复制对象的属性逐个复制,复制对象不会对被复制对象产生影响。浅拷贝
1
2
3
4
5
6
7
8
9
10
11
12
13
14function clone(obj){
var F = function() {};
F.prototype = obj;
return new F();
}
function clone(obj){
var newObj={};
for(attr in obj){
newObj[attr]=obj[attr];
}
return newObj;
}深拷贝
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20/*最简单的实现
* 抛弃对象的constructor,RegExp等对象无法复制
*/
var newObj = JSON.parse(JSON.stringify(obj));
/*
*这个函数可以实现数组等的深拷贝,不过还是有一些bug
*/
function extendDeeply(superObj, subObj) {
var subObj = subObj || {};
for(prop in superObj){
if(typeof superObj[prop] == "object") {
superObj[prop] = (superObj[prop].construtor === Arrar) ? [] : {};
extendDeeply(superObj[prop], superObj[prop]);
}else{
subObj[prop] = superObj[prop];
}
}
return subObj;
}实现比较完整的深拷贝,可以参考http://jerryzou.com/posts/dive-into-deep-clone-in-javascript/
get/post
GET一般用于获取/查询资源信息,而POST一般用于更新资源信息,根据HTTP规范,GET用于信息获取,而且应该是安全的和幂等的- Get请求的数据限制(2KB):URL不存在参数上限的问题,HTTP协议规范没有对URL长度进行限制。这个限制是特定的浏览器及服务器对它的限制。
- 理论上讲,POST是没有大小限制的,HTTP协议规范也没有进行大小限制,起限制作用的是服务器的处理程序的处理能力
- 在客户端, Get 方式在通过 URL 提交数据,数据 在URL中可以看到;POST方式,数据放置在HTML HEADER内提交。
- 浏览器中GET 请求可被缓存。GET 请求保留在浏览器历史记录中
- 对资源的增,删,改,查操作,其实都可以通过GET/POST完成
浏览器渲染流程
渲染了解webkit吗(如实的回答了,没看过源码,内部机制不是很了解)
该看看这本书了《webkit技术内幕》数组去重
1
2
3
4
5
6
7
8
9
10
11
12
13
14
function unique(arr){
var newArr = arr.filter(function(item,index,arr){
return arr.indexOf(item) === index;
});
return newArr;
}
/* ES6 */
function unique(arr) {
return Array.from(new Set(arr));
}CDN(问了全称,还好记得~)
CDN的全称是Content Delivery Network,即内容分发网络。其通过在用户和服务器之间增加Cache层,将网站的内容发布到最接近用户的网络的节点,使用户可以就近取得所需的内容,提高用户访问网站的响应速度
CDN简单的来说就是存储一些静态文件的一台或多台服务器,通过复制,缓存等方式,将文件保存其中。
CDN主要是通过接管DNS实现,将用户的请求引导到Cache上获得源服务器的数据。(智能调度DNS是CDN服务中的关键系统.当用户访问加入CDN服务的网站时,域名解析请求将最终由 智能调度DNS 负责处理.)
对于普通的Internet用户,每个CDN节点就相当于一个放置在它周围的网站服务器.
通过对dns的接管,用户的请求被透明地指向离他最近的节点,节点中CDN服务器会像网站的原始服务器一样,响应用户的请求.
参考:http://cndefu.blog.163.com/blog/static/593931882011422115513240/类型转换
举例说明js强制类型转换、隐式类型转换(PS:当时有点蒙,没反应过来强制类型转换指的啥,还好后面反应过来是Number()之类的)
先列几个类型转换中的常用技巧:
x+’’ 等价于 String(x)
+x 等价于 Number(x)
!!x 等价于 Boolean(x)- 强制类型转换
指使用Number、String和Boolean三个构造函数,手动将各种类型的值,转换成数字、字符串或者布尔值。 隐式类型转换
以 * - + 来说,会对非数值应用Number()转型函数转换- Boolean true-1 false-0
- null-0
- undefined NaN
- 字符串
数字转换为十进制数值
十六进制转换为相同大小的十进制
空字符串转换为0
剩下的转换为NaN - 对象 调用valueOf()方法,在依照上述规则,如果转为结果为NaN则调用对象的toString()方法
以==操作符来说:
- String == Boolean,需要两个操作数同时转为Number
- String/Boolean == Number,需要String/Boolean转为Number
- Object == Primitive,需要Object转为Primitive(具体通过valueOf和toString方法
- undefined == null
- 强制类型转换
ajax
问了jquery的ajax实现,还有对json的处理,跨域
输入框只读
readonly数组相关问题
这个问题每次都会被问到,特别是数组去重,还有注意ES5的兼容
布局(左定宽,右自动)
这个自己做过很多,所以答得还比较全类型判断
- 后端修改数据,浏览器实时更新
一天面了3面,前两轮都是技术面,第二轮要求手写代码,第三轮是hr面,最后还有一个Boss面
- angularJS
路由原理,指令的执行过程,依赖注入的目的,与angularJS2的对比,它的MVVM之间的通信、与别的的框架VueJS/ReactJS对比,什么情况下不用双向数据绑定 - restful API
- 闭包
- ES6
- 写代码(排序、迭代Fabonacci)
- hr面有会问一些逻辑题
最后的Boss面,问了一些逻辑题,还有喜欢看的书,感觉公司比较注重员工的学习习惯还有学习态度
一面非常细,面了一个多小时、js、Html5 、css都有问到,比较基础
二面 主要问了项目
三面 综合面,面试官人很好 ps:声音好好听啊,很年轻~
等待13号的笔试,求保佑~~
等结果中~