记一次圈内小伙伴的面试题

160 阅读3分钟

笔试题

  1. null和undefined的区别?
答:  null 默认转成 0
     undefined 默认转成 NaN
  1. ==,===,Object.is的区别
答:  +0不等于-0
     NaN等于自身
  1. web安全问题有哪些,如何解决
答: 这个要回答的就有点广了,大概说两个就可以,免得说多了给自己挖坑。
1.常见的XSS攻击,常见解决方案:过滤、输入输出编码,用户安全加固
2.XSRF,解决方法:检查HTTP头部Refer信息,使用一次性令牌,使用验证图片,判断HTTP请求类型
3.文件上传,解决方法:过滤文件格式
  1. 长渲染列表优化
两种,一个是懒加载,一个是分页
  1. 如何判断数据类型
/**
 * 类型检测
 * @param obj 检测对象
 * @return string/nunber....
 */
 function typeof(obj) {
	return Object.prototype.toString.call(obj).slice(1, -1).split(' ')[1].toLowerCase();
 }
  1. 说一下深拷贝和浅拷贝,深拷贝可能会出现什么问题
简单点来说,就是假设B复制了A,当修改A时,看B是否会发生变化,如果B也跟着变了,说明这是浅拷贝,
拿人手短,如果B没变,那就是深拷贝,自食其力
深拷贝的问题,拷贝函数比较麻烦
  1. setTimeout,setInterval,requestAnimationFrame区别
setTimeout(code, millseconds) 用于延时执行参数指定的代码,如果在指定的延迟时间之前,你想取消这个执行,那么直接用clearTimeout(timeoutId)来清除任务,timeoutID 是 setTimeout 时返回的;
setInterval(code, millseconds)用于每隔一段时间执行指定的代码,永无停歇,除非你反悔了,想清除它,可以使用 clearInterval(intervalId),这样从调用 clearInterval 开始,就不会在有重复执行的任务,intervalId 是 setInterval 时返回的;
requestAnimationFrame(code),一般用于动画,与 setTimeout 方法类似,区别是 setTimeout 是用户指定的,而 requestAnimationFrame 是浏览器刷新频率决定的,一般遵循 W3C 标准,它在浏览器每次刷新页面之前执行。
原文 https://blog.csdn.net/qingyafan/article/details/52335753
  1. Ajax原理
    // 1. 安装浏览器(用户代理)
    //  xhr 就类似于浏览器的作用(发送请求接收响应)
    var xhr = new XMLHttpRequest()
    // 2. 打开浏览器 输入网址
    xhr.open('GET', 'http://xxx/xxx.php') // 这里的 url 路径写你需要请求的地址
    // 3. 敲回车键 开始请求
    xhr.send()
  1. 说一下微任务,宏任务
这道题送分题,就是优先级,大小级的事,可以理解成国和家的概念,先有国后有家。
而宏任务一般是:包括整体代码script,setTimeout,setInterval。
微任务:Promise,process.nextTick。
  1. 写一个'let's my family' 返回's'tel ym ylimaf,每个字符反转函数
这个也是很常见的一个老题了js反转字符串,就是123反转321,方法有三种:
1. var name = "My city is WH";
var nameArr = name.split('');
var result=[];
var resultStr = '';
for (var i = 0, l = nameArr.length; i < l; i++) {
    result.unshift(nameArr[i]);

}
for (var i = 0, l = result.length; i < l; i++) {
    resultStr += result[i];
}
console.log(resultStr);  // HW si ytic yM
2. var name = "My city is WH";
var resultStr = name.split('').reverse().join(''); 
console.log(resultStr);  // HW si ytic yM
3. var name = "My city is WuHan";
var nameArr = name.split('');
var resultStr = '';
for (var i = nameArr.length-1; i >= 0; i--) {
    resultStr += name.charAt(i);
}
console.log(resultStr); // naHuW si ytic yM

  1. 写一个函数实现a(1)打印1,a(1)(2)打印3 ,a(1)(2)(3)打印6等等
ES5写法
function add (...args) {
    return args.reduce((prev, val) => {
        return prev + val
    })
}
 
let rs = add(1, 2, 3, 4, 5, 6)
console.log(rs)  // 21
ES6写法
function add (a) {
    function sum(b) { // 使用闭包
        a = a + b; // 累加
        return sum;
    }
    sum.toString = function() { // 重写toSting() 方法
        return a;
    }
    return sum; // 返回一个函数
}
 
console.log(add(1)(3)) // 4
console.log(add(1)(3)(5)) // 9

好了写完这个也关电脑放假了,预祝大家新年快乐,新的一年升职加薪,跳槽顺利。