近来口试碰到的一些口试题纪录分享下。
公司A:
问题一:
不必jquery等框架/库,查找一个页面上有若干种标签,每种标签的个数,伪代码完成亦可
代码:
var map = {};
function dfs(node) {
if(node.nodeType === 1) {
var tagName = node.tagName;
map[tagName] = map.hasOwnProperty(tagName) ? map[tagName] + 1 : 1;
var children = node.childNodes;
for(var i = 0, len = children.length; i < len; i++) {
dfs(children[i]);
}
}
}
dfs(document.body);
console.log(map);
这里预计也就是考核递归搜刮吧,当时写的没有这么完整,思绪一样,这里没有考虑到有iframe的状况。
公司B:
问题一:
typeof []
答案:object
一开始我的回复是object,口试官问的时刻特地问了下肯定吗,然后就有点犹疑了,然后口试官又问了下javascript的数据范例有哪些,string,number,null,undefined,object当时忘记了boolean
问题二:
你晓得的http的状况码有哪些,代表什么意义
https://segmentfault.com/a/1190000004356…
写出经常运用的一些状况码就能够了,我也就写了200 304 403 404 500 502 这几个
引伸:304是什么意义,是依据什么推断的?
这个还真不太清晰,缓存逾期时候?文件内容?待我搞清晰以后再补充…
问题三:
cookie跟session的区分?
1、cookie数据寄存在客户的浏览器上,session数据放在服务器上。
2、cookie不是很平安,他人能够剖析寄存在当地的COOKIE并举行COOKIE诳骗
考虑到平安应该运用session。
3、session会在肯定时候内保存在服务器上。当接见增加,会比较占用你服务器的机能
考虑到减轻服务器机能方面,应该运用COOKIE。
4、单个cookie保存的数据不能超过4K,许多浏览器都限定一个站点最多保存20个cookie。
5、所以个人发起:
将上岸信息等重要信息寄存为SESSION
其他信息假如须要保存,能够放在COOKIE中
出处:https://segmentfault.com/a/1190000004071…
问题四:
有一个数组比如有十个数字,一秒钟打印一个怎样完成?
代码:
var num = [1, 2, 3, 4, 5, 6],
len = num.length,
index = 0;
var timer = setInterval(function () {
if(index >= len) {
clearInterval(timer);
} else {
console.log(num[index]);
}
index++;
}, 1000);
问题五:
position有哪些值?absolute相对于什么定位?
position 属性值的寄义:
static
元素框一般天生。块级元素天生一个矩形框,作为文档流的一部分,行内元素则会建立一个或多个行框,置于其父元素中。
relative
元素框偏移某个间隔。元素仍坚持其未定位前的外形,它底本所占的空间仍保存。
absolute
元素框从文档流完整删除,并相对于其包括块定位。包括块多是文档中的另一个元素或者是初始包括块。元素原先在一般文档流中所占的空间会封闭,就好像元素本来不存在一样。元素定位后天生一个块级框,而不管本来它在一般流中天生何种范例的框。
fixed
元素框的表现类似于将 position 设置为 absolute,不过其包括块是视窗自身。
材料:http://www.w3school.com.cn/css/css_posit…
相对定位的元素的位置相对于近来的已定位先人元素,假如元素没有已定位的先人元素,那末它的位置相对于最初的包括块。
材料:http://www.w3school.com.cn/css/css_posit…
问题六:
一个数组,求出内里一连和最大的一段的肇端下标,比如[1, 3, -4, 4, 2]最大一连和为6 下表为3, 4
var arr = [1, 3, -5, 4, 2, -9, 3, 6],
sum = arr[0],
sumIndex = {l: 0, r: 0};
max = [],
retIndex = {l: 0, r: 0};
max[0] = arr[0];
for(var i = 1, len = arr.length; i < len; i++) {
max[i] = Math.max(sum + arr[i], max[i-1], arr[i]);
if(max[i] === sum + arr[i]) {
retIndex.l = sumIndex.l;
retIndex.r = sumIndex.r = i;
} else if(max[i] === arr[i]) {
retIndex.l = i;
retIndex.r = i;
} else {
retIndex.l = sumIndex.l;
retIndex.r = sumIndex.r;
}
if(sum + arr[i] >= 0) {
sum = sum + arr[i];
sumIndex.r = i;
} else {
sum = arr[i];
sumIndex.l = i;
sumIndex.r = i;
}
}
console.log(max[len - 1] + ' ' + retIndex.l + ' ' + retIndex.r);
问题七:
完成一个once函数 参数是一个函数 返回值也是个函数 只能实行一次 下次实行就是undefined 比方:
var foo = once(function() { console.log(123); });
foo();//123
foo();//undefined
foo();//undefined
完成:
function once(cb) {
var flag = 1;
return function() {
if(flag) {
cb.apply(cb.caller, arguments);
flag = 0;
}
}
}
问题八:
一个由整数组成的有序数组(有可能有反复的),给一个数,找出它在数组内里涌现的位置
剖析:
这个就是一个二分查找,因为可能有反复的一向要找到它的前一个元素不等于当前找到的元素为止。
代码就不写了
问题九:
挪动端的手势事宜有哪些?
因为挪动端做的少,当时只记得touchstart touchmove touchend这几个,没有处置惩罚这些事宜的履历
问题十:
写一个兼容各浏览器的事宜监听函数
function addListener(ele, eventName, handler) {
if(ele.addEventListener) {
ele.addEventListener(eventName, handler);
} else if (ele.attachEvent) {
ele.attachEvent('on' + eventName, handler);
}
}
重要考虑到兼容IE
引伸:
addEventListener 第三个参数有啥用
第三个参数为true在捕捉阶段实行处置惩罚函数,为false在冒泡阶段实行处置惩罚函数默以为false
另有事宜模子 IE支撑哪一种事宜模子
事宜模子: 捕捉->目的->冒泡
IE的事宜模子: 冒泡