面试记录

66 阅读5分钟

3月提及的面试题

CommonJsES6模块的区别

  1. CommonJS是同步加载模块,ES6是异步加载模块。
  2. CommonJS模块输出的是一个值的拷贝,ES6模块输出的是值的引用。
  3. CommonJS模块是运行时加载,ES6模块是编译时输出接口。
  4. CommonJs模块的this在当前指向当前文件,ES6模块的thisundefined

vue-router的实现原理

Vue Router的实现原理主要包括两部分,一部分是浏览器地址的监听,将url改变监听到并存入vueRouter类中,另一部分是将vueRouter与vue连接起来,这部分主要是靠vue的插件机制实现的。

具体来说,Vue Router通过监听浏览器地址栏的变化,将url改变监听到并存入vueRouter类中。当url发生变化时,Vue Router会根据路由规则匹配到对应的组件,并将组件渲染到router-view中。Vue Router还可以通过动态路由、嵌套路由等方式实现更加复杂的路由功能。

可以分为以下几个方面

  1. Vue.use(Router)时,会调用router的install方法并把Vue类传入,混入beforeCreate方法,即在Vue实例化后挂载前在vue原型上挂个$router方法,然后调用router实例的init方法;
  2. 在init中把三件事情都干了,监听路由,解析路由(路由mapping匹配),定义组件;
  3. 存储当前路由的变量this.app.current非一般的变量,而是借用Vue的响应式定义的,所以当路由变化时只需要给这个this.app.current赋值,而router-view组件刚好引用到这个值,当其改变时所有的引用到的地方都会改变,则得到的要展示的组件也就响应式的变化了1.

xhrfetch的区别

  1. XHR基于事件机制实现请求成功与失败的回调,不符合关注分离(Separation of Concerns)的原则,配置和调用方式非常混乱。而Fetch通过Promise来实现回调,调用更加友好。
  2. 只能对XML和文本进行原生支持,而对于其他格式需要进行额外的处理。而Fetch支持更多的数据类型,包括JSON、Blob、FormData等。
  3. 可以通过setRequestHeader()方法设置请求头信息,而Fetch则需要使用Headers对象来设置请求头信息。
  4. 可以通过abort()方法取消请求,而Fetch则需要使用AbortController来取消请求。

常见的前端攻击以及如何解决

  1. XSS(Cross Site Scripting),跨站脚本攻击。攻击者在网页中嵌入脚本,用户浏览网页时触发恶意脚本,从而达到攻击目的。防御方法:对用户输入的数据进行过滤和转义,不信任任何用户输入的数据。
  2. CSRF(Cross Site Request Forgery),跨站请求伪造。攻击者通过伪造请求,让用户在不知情的情况下执行某些操作,如转账、发邮件等。防御方法:使用验证码、Referer检查、Token验证等方式。
  3. SQL注入。攻击者通过构造恶意SQL语句,从而获取敏感信息或者破坏数据库。防御方法:使用参数化查询、限制数据库用户权限、过滤特殊字符等方式。
  4. 点击劫持。攻击者通过将透明的iframe覆盖在网页上,诱导用户点击透明区域,从而达到攻击目的。防御方法:使用X-Frame-Options头部、JavaScript禁止页面被嵌套等方式。

vue3在vue2上做了哪些升级

  1. 更好的TypeScript支持:Vue3中的TypeScript支持更加完善,可以更好地支持TypeScript的类型推断和类型检查。
  2. 更好的性能:Vue3中对渲染性能进行了优化,使用了更加高效的虚拟DOM算法,同时还引入了静态提升和树摇等技术来进一步提升性能。
  3. 更好的组件复用:Vue3中引入了Composition API,可以更好地实现组件复用,同时还可以更好地支持TypeScript。
  4. 更好的开发体验:Vue3中对开发体验进行了优化,提供了更加友好的API和更加完善的文档。
  5. 更好的Tree-Shaking:Vue3中对Tree-Shaking进行了优化,可以更好地减少打包后的文件大小。
  6. 更好的响应式系统:Vue3中对响应式系统进行了重构,使得响应式系统更加高效、稳定和可靠。
  7. 更好的TS支持:Vue3中对TS支持进行了重构,使得TS支持更加完善、稳定和可靠。

你常用的node模块有哪些?

Node.js内置模块有很多,常用的有以下几个:

  1. fs模块:文件系统模块,提供了文件的读取、写入、更名、删除、遍历目录等功能。
  2. path模块:路径处理模块,提供了一些处理文件路径的方法。
  3. http模块:提供了创建HTTP服务器和客户端的功能。
  4. events模块:事件模块,提供了事件的绑定和触发功能。
  5. os模块:操作系统信息模块,提供了获取操作系统信息的功能。
  6. querystring模块:查询字符串处理模块,提供了一些处理查询字符串的方法。
  7. url模块:URL处理模块,提供了一些处理URL的方法。
  8. crypto模块:加密解密模块,提供了一些加密解密算法。

还有以下不常用的:

  1. buffer模块:二进制数据处理模块,提供了一些处理二进制数据的方法。
  2. child_process模块:子进程模块,提供了一些创建子进程的方法。
  3. cluster模块:集群模块,提供了一些创建多进程的方法。
  4. readline模块:逐行读取模块,提供了逐行读取文件的功能。

haizeiwang.jpg