面试题
一、你对前端安全有了解吗?请简述几个安全问题以及相关的解决方案
XSS 攻击
介绍
1. 反射型XSS
发请求时,XSS代码出现在URL中,提交给服务端。服务端返回的内容,也带上了这段XSS代码。最后浏览器执行XSS代码。
2. 存储型XSS
存储型和反射型的区别就是,提交的XSS代码会存储在服务器端。如果这个过程中没有经过任何转义,那么这段html就直接执行了。这样,所有访问你个人主页的用户,就都中招了。
3. DOM XSS
eval不安全的原因。
防御手段
1. 过滤转义输入输出
后端对于数据类型进行检查,比如数字必须为 number。
对于特殊符号进行转义,无论是前端还是后端都需要进行这个操作
避免使用eval,new Function等执行字符串的方法,除非确定字符串和用户输入无关
cookie 尽量开启 http only 属性
自动化检测 XSS 漏洞
Arachni、Mozilla HTTP Observatory、w3af 自动检测工具
CSRF
介绍
跨站请求伪造。通过 web 端的一些可以进行跨域请求的方式引导用户去发起请求,请求的同时会带上当前用户的cookie数据来实现伪造登录
iframe
第三方的 iframe 可以运行脚本,弹框等恶意行为
解决方法
使用 iframe 的 sandbox 属性
解决方案
检测http referer是否是同域名,通常来讲,用户提交的请求,referer应该是来来自站内地址,所以如果发现referer中地址异常,那么很可能是遭到了CSRF攻击。
避免登录的session长时间存储在客户端中。
关键请求使用验证码或者token机制
二、你了解 JS 的自定义事件是什么吗?它有哪些使用场景?
自定义事件相当于是观察者模式,可以把复杂逻辑解耦,代码可以写的很清晰,而且很容易复用。
请简述下数据库索引的实现方式
将大量的数据变成一块的一块的数据然后快速排除无关的数据,从而提高查询的速度
三、请简述下 debounce throttle 的实现原理
debounce
上一次被调用后,延迟 n 秒后调用 x 方法
throttle
在 n 秒内最多执行 fn 一次的函数。
四、同样作为继承的一种方式请 mixin extend 有什么区别?
mixin
优点:可以传递参数更灵活。
缺点:编译后不能产生 dry css 式的代码,也就是有重复代码。
extend
优点:编译后能产生 dry css 式的代码。
缺点:不够灵活,还会增加选择器之间的关系可能有副作用。
五、什么是 babel-helper ?
用于转移语法的函数集合,并提供相关操作方法。
六、请实现一个在线表格同步的功能
通讯
长连接
websocket
编辑冲突
编辑锁
同一块文档同时只能有一个人编辑,用户体验较差。
diff
加载页面以后获取一个文档副本,本地编辑时进行 diff 并将结果发送给服务器,服务器保存后再将结果返回给其他正在编辑的用户,在进行 diff 然后更新。
OT
通过 编辑距离
算法获取改变文本的步骤,然后通过 OT 算法将不同用户的步骤合并。
七、前端监控
性能
工具:lighthouse
埋点
手动买点
无埋点
错误上报
sentry
canvas 确定文字宽高
弹幕实现
spa 用户操作路径记录如何实现
ts es6 区别
怎么从一个 js 项目迁移到 ts
webpack loader plugin 区别
react 组件性能优化
基本类型 引用类型的内存分配方式
JSbridge 实现方式
秒杀系统实现方式
Last updated
Was this helpful?