3月提及的面试题
CommonJs和ES6模块的区别
- CommonJS是同步加载模块,ES6是异步加载模块。
- CommonJS模块输出的是一个值的拷贝,ES6模块输出的是值的引用。
- CommonJS模块是运行时加载,ES6模块是编译时输出接口。
- CommonJs模块的
this在当前指向当前文件,ES6模块的this是undefined
vue-router的实现原理
Vue Router的实现原理主要包括两部分,一部分是浏览器地址的监听,将url改变监听到并存入vueRouter类中,另一部分是将vueRouter与vue连接起来,这部分主要是靠vue的插件机制实现的。
具体来说,Vue Router通过监听浏览器地址栏的变化,将url改变监听到并存入vueRouter类中。当url发生变化时,Vue Router会根据路由规则匹配到对应的组件,并将组件渲染到router-view中。Vue Router还可以通过动态路由、嵌套路由等方式实现更加复杂的路由功能。
可以分为以下几个方面
- Vue.use(Router)时,会调用router的install方法并把Vue类传入,混入beforeCreate方法,即在Vue实例化后挂载前在vue原型上挂个$router方法,然后调用router实例的init方法;
- 在init中把三件事情都干了,监听路由,解析路由(路由mapping匹配),定义组件;
- 存储当前路由的变量this.app.current非一般的变量,而是借用Vue的响应式定义的,所以当路由变化时只需要给这个this.app.current赋值,而router-view组件刚好引用到这个值,当其改变时所有的引用到的地方都会改变,则得到的要展示的组件也就响应式的变化了1.
xhr与fetch的区别
- XHR基于事件机制实现请求成功与失败的回调,不符合关注分离(Separation of Concerns)的原则,配置和调用方式非常混乱。而Fetch通过Promise来实现回调,调用更加友好。
- 只能对XML和文本进行原生支持,而对于其他格式需要进行额外的处理。而Fetch支持更多的数据类型,包括JSON、Blob、FormData等。
- 可以通过setRequestHeader()方法设置请求头信息,而Fetch则需要使用Headers对象来设置请求头信息。
- 可以通过abort()方法取消请求,而Fetch则需要使用AbortController来取消请求。
常见的前端攻击以及如何解决
- XSS(Cross Site Scripting),跨站脚本攻击。攻击者在网页中嵌入脚本,用户浏览网页时触发恶意脚本,从而达到攻击目的。防御方法:对用户输入的数据进行过滤和转义,不信任任何用户输入的数据。
- CSRF(Cross Site Request Forgery),跨站请求伪造。攻击者通过伪造请求,让用户在不知情的情况下执行某些操作,如转账、发邮件等。防御方法:使用验证码、Referer检查、Token验证等方式。
- SQL注入。攻击者通过构造恶意SQL语句,从而获取敏感信息或者破坏数据库。防御方法:使用参数化查询、限制数据库用户权限、过滤特殊字符等方式。
- 点击劫持。攻击者通过将透明的iframe覆盖在网页上,诱导用户点击透明区域,从而达到攻击目的。防御方法:使用X-Frame-Options头部、JavaScript禁止页面被嵌套等方式。
vue3在vue2上做了哪些升级
- 更好的TypeScript支持:Vue3中的TypeScript支持更加完善,可以更好地支持TypeScript的类型推断和类型检查。
- 更好的性能:Vue3中对渲染性能进行了优化,使用了更加高效的虚拟DOM算法,同时还引入了静态提升和树摇等技术来进一步提升性能。
- 更好的组件复用:Vue3中引入了Composition API,可以更好地实现组件复用,同时还可以更好地支持TypeScript。
- 更好的开发体验:Vue3中对开发体验进行了优化,提供了更加友好的API和更加完善的文档。
- 更好的Tree-Shaking:Vue3中对Tree-Shaking进行了优化,可以更好地减少打包后的文件大小。
- 更好的响应式系统:Vue3中对响应式系统进行了重构,使得响应式系统更加高效、稳定和可靠。
- 更好的TS支持:Vue3中对TS支持进行了重构,使得TS支持更加完善、稳定和可靠。
你常用的node模块有哪些?
Node.js内置模块有很多,常用的有以下几个:
- fs模块:文件系统模块,提供了文件的读取、写入、更名、删除、遍历目录等功能。
- path模块:路径处理模块,提供了一些处理文件路径的方法。
- http模块:提供了创建HTTP服务器和客户端的功能。
- events模块:事件模块,提供了事件的绑定和触发功能。
- os模块:操作系统信息模块,提供了获取操作系统信息的功能。
- querystring模块:查询字符串处理模块,提供了一些处理查询字符串的方法。
- url模块:URL处理模块,提供了一些处理URL的方法。
- crypto模块:加密解密模块,提供了一些加密解密算法。
还有以下不常用的:
- buffer模块:二进制数据处理模块,提供了一些处理二进制数据的方法。
- child_process模块:子进程模块,提供了一些创建子进程的方法。
- cluster模块:集群模块,提供了一些创建多进程的方法。
- readline模块:逐行读取模块,提供了逐行读取文件的功能。