总结:面试官很会引导问题,会深挖项目 这次面试学到很多,感觉很多问题都回答不上来,但是还是给过了。
自我介绍
聊项目 说了webRtc websokcet 心跳包
如何维持websocket登录 深入 如何维持websocket登录时间 用户无感知
微信小程序登录流程
微信小程序登录方式 cookie token
登录的安全问题 CSRF攻击 XSS攻击
CSRF攻击中文是什么 ,防范方式有哪些?
问webpack 的loader有哪些 你对loader的理解
说到了scss-loader 问scss-loader编译过程 (这个属实不知道)
模块问题 为什么会出现esmodule
esmodule与commonjs区别
esmodule在客户端js脚本能不能使用
esmodule import 与export的原理
说跨域是什么
跨域资源共享的方式
CORS的流程
复杂请求和简单请求的区别
CORS当服务端的允许访问的源没有该请求的url时,浏览器会报错嘛 (我回答是报错,不知道对不对)
手写题 深拷贝一个对象 需要考虑function array与object 深入 深拷贝有什么问题(循环引用 解决方案使用set)继续深入使用set会用什么问题 (可能会造成内存泄漏,使用weakSet)
function deepClone(obj, set = new WeakSet()) {
if (typeof obj === "function")
return new Function("return " + obj[key].toString())();
if (typeof obj !== "object") return obj;
let res = Object.prototype.toString.call(obj) === "[object Array]" ? [] : {};
for (let key in obj) {
let type = Object.prototype.toString.call(obj[key]);
let sb = obj[key];
if (type === "[object Array]" || "[object Object]") {
if (!set.has(sb)) {
set.add(sb);
obj[key] = deepClone(sb, set);
}
} else if (type === "[object Function]") {
res[key] = new Function("return " + sb.toString())();
} else {
res[key] = sb;
}
}
return res;
}
场景题:如果有这么一个搜索功能,需要将一个文本中的匹配的词高亮如何实现 (我就想到把匹配的文本用span标签包裹,然后设置样式) 深入 那如果我输入一段js代码呢? 会造成xss攻击 如何解决 (我就说了个转义 回答不上来)