2022-01-13 06:29:38
招银提前批前端电面问题解答如下:
事件委托中如何阻止事件冒泡async:脚本下载完成后立即执行(不保证顺序),适合无依赖的独立脚本。
defer:脚本下载完成后延迟到DOM解析完成(DOMContentLoaded事件前)按顺序执行,适合需操作DOM或依赖其他脚本的场景。
<!-- async示例 --><script async src="script1.js"></script><script async src="script2.js"></script> <!-- 执行顺序不确定 --><!-- defer示例 --><script defer src="script1.js"></script><script defer src="script2.js"></script> <!-- 按顺序执行 -->同步任务直接进入调用栈(Call Stack)执行。
异步任务(如setTimeout、Promise)由Web API处理,完成后将回调函数推入任务队列(Task Queue或Microtask Queue)。
调用栈清空后,事件循环优先处理Microtask队列(如Promise.then),再处理Task队列(如setTimeout)。
useState:管理组件状态。
useEffect:处理副作用(如数据获取、订阅)。
useContext:共享全局状态。
XSS(跨站脚本攻击):通过注入恶意脚本窃取用户数据。防御:转义用户输入、使用CSP策略。
CSRF(跨站请求伪造):诱导用户发送非预期请求。防御:验证CSRF Token、检查Referer头。
点击劫持:通过透明层诱导用户点击恶意按钮。防御:设置X-Frame-Options头。
强缓存:通过Cache-Control(如max-age=3600)或Expires头控制,直接使用本地缓存。
协商缓存:通过Last-Modified/If-Modified-Since或ETag/If-None-Match头验证资源是否更新,决定是否重新请求。
客户端发送支持的加密套件列表。
服务器选择套件并返回证书(含公钥)。
客户端验证证书,生成会话密钥并用公钥加密发送。
双方使用会话密钥加密后续通信。