已经过去半个多月啦,发现这篇文章还在草稿箱里,发出来供自己以后回顾学习
----------------分割线------------------------
三面真的是快把我打趴下了...压力太足了,全是底层原理+优化
这个问题在网上也找不到答案....评论区有懂哥讲讲吗
我自己的分析是本质是XSS攻击,用防御XSS攻击的方式。
vite可以类比成webpack+webpack-dev-server,特点是:
vite会直接启动开发服务器,而webpack需要构建依赖图等等,将所有代码打包到一起,再放到开发服务器上运行。
主要区别在开发阶段,生产阶段的区别主要是Rollup和Webpack的区别
从来没写过webpack plugin,被问到直接蒙b。
下来自己学习了很多相关的概念和知识,从0到1写一个webpack plugin还挺有意思的,也加深了对plugin的认识。
自己写一个plugin,首先要满足一个框架:
class ObjectAssignPlugin { apply(compiler) { compiler.hooks.compilation.tap('ObjectAssignPlugin', (compilation) => { compilation.hooks.buildModule.tap('ObjectAssignPlugin', (module) => { // console.log(module) module.parser.hooks.call.for('Object.assign').tap('ObjectAssignPlugin', () => { throw new Error(`Error: Object.assign is not allowed!`); }); }); }); } } module.exports = ObjectAssignPlugin
其中使用compilation的buildModule钩子,以此介入编译过程,在parser遇到Object.assign方法时抛出错误。
区别于传统Web的单线程模型,小程序中的渲染层和逻辑层分别由两个线程管理。渲染层-Webview,逻辑层-JSCore。所有的通信都要经过Native,包括网络请求。
逻辑层和视图层通过setData和Event通信:
逻辑层数据变更setData驱动渲染层的视图更新,渲染层交互触发事件,触发逻辑层的事件响应函数。
小程序中的JSBridge没有完整的浏览器环境,依赖客户端提供的环境
其他在网上真找不到答案...评论区各位大哥可以给点思路吗
磕磕绊绊说了,但面试官不知道为啥一直要说mousemove,再加上他之前问的问题真的很难,所以整个人都很紧张也很疲劳。
下来整理思路之后,我的做法是在mousedown触发时记录起始坐标和时间,mouseup触发时记录结束坐标和时间,并计算起始-结束距离和时间差。给距离和时间分别设定一个阈值,判断计算出的距离和时间差是否都小于对应阈值,若是则判断用户意图为点击,否则判断是拖动。(只看距离可能会出现用户拖了又回到原处,但仍会触发点击)