面试问的问题

145 阅读4分钟

webpack打包项目

1.Grunt和Gulp的工作方式是:在一个配置文件中,指明对某些文件进行类似编译,组合,压缩等任务的具体步骤,这个工具之后可以自动替你完成这些任务。

Webpack的工作方式是:把你的项目当做一个整体,通过一个给定的主文件(如:index.js),Webpack将从这个文件开始找到你的项目的所有依赖文件,使用loaders处理它们,最后打包为一个浏览器可识别的JavaScript文件。

1.安装好npm,这个不再复述,然后在一个目录下执行 npm init,这样就会初始化一个项目包,
里面就有了一个package.json的文件,这个文件想必大家都有所了解
2.然后安装一下webpack,既然我们想打包,就要把webpack这个工具安装好,安装方式有两种,
一个是全局安装一个是安装在项目中,在项目的package.json目录下执行的命令分别是
npm install -g webpack 和 npm install --save-dev webpack,在这里我们安装在项目里面,使用第二种安装方式
3.安装完成之后我们能看到项目目录下有一个node_module的文件夹,然后我们就可以写自己的项目了,
我们首先建立一个app和public的文件夹,在app中新建两个文件,分别是test.js和main.js,
在pulic中新建一个index.html文件,这样我们的基本项目雏形就产生了
-----如果我们想把css样式也一起打包,就npm install --save-dev style-loader css-loader,然后在webpack.config.js进行相应的配置就行了,这样是把js和css打包成一个文件,也可以把他们分开打包,这样后面再介绍吧
  • 完整版: 同时包含编译器和运行时的版本。

  • 编译器:主要用于将模板字符串编译成 Javascript 渲染函数。

  • 运行时: 负责创建 vue 实例、渲染并处理虚拟 DOM 等的代码。基本上就是除去编译器的其它一切。

  • UMD:UMD 版本可以通过标签直接用在浏览器中。jsDelivr CDN 的 cdn.jsdelivr.net/npm/vue 默认文件就是运行时 + 编译器的 UMD 版本 (vue.js)。

  • CommonJS:CommonJS 版本用来配合老的打包工具比如 Browserifywebpack 1。这些打包工具的默认文件 (pkg.main) 是只包含运行时的 CommonJS 版本 (vue.runtime.common.js)。

  • ES Module:从 2.6 开始 Vue 会提供两个 ES Modules (ESM) 构建文件

3.H5的离线缓存技术

1.离线缓存可以将站点的一些文件存在本地,浏览器的一种机制,将需要的文件缓存起来。
优点:-没网,可以访问到缓存的对应的站点页面,包括html,css,js,img
-资源缓存可以带来更好的用户体验,当使用自己的流量上网时,本地缓存不仅可以提高用户访问速度,而且大大节约用户的使用流量
-没网,浏览器会优先使用离线存储的文件,返回一个200头

mainfest清单是一个简单的文本文件
--HTML5的离线存储是**基于**一个新建的 **.appcache文件的缓存机制(** 不是存储技术),通过这个文件上的解析清单离线存储资源;把需要离线存储在本地的文件列在一个manifest配置文件中

4.React和vue的区别

共同点:
数据驱动视图--采用数据驱动视图方式,隐藏操作DOM
组件化
都使用Virtual DOM
不同点:
vue:渐进式框架,进行数据拦截/代理,它对侦测数据的变化更敏感、更精确.更易上手。Vuex
React:函数式编程(组件),核心思想不同,写法的差异,源码差异。redux

1.1 微任务/宏任务

异步队列中包括:微任务(micro-task) 和 宏任务(macro-task)

微任务包括: process.nextTickPromiseprocess.nextTick 为 Node 独有)

宏任务包括: scriptsetTimeoutsetIntervalsetImmediateI/OUI rendering

Tips:

  • 微任务优先级高于宏任务的前提是:同步代码已经执行完成。因为 script 属于宏任务,程序开始后会首先执行同步脚本,也就是script
  • Promise 里边的代码属于同步代码,.then() 中执行的代码才属于异步代码。

###HTML和HTML5的区别 文档类型的声明、结构语义区别、绘图区别、音频和视频的支持、语法的处理

1.冒泡排序的方式对数组进行由大到小的排序

1.重复的访问要排序的元素列,依次比较相邻的元素
   function Bubblesort(arr){
   const len=arr.length
   for(let i=0;i<len;i++){
       for(ley j=1;j<len-i;j++){
       if(arr[j-1]>arr[j]){
        [arr[j-1],arr[j]]=[arr[j],arr[j-1]]
       }
      }
   }
   return arr
   }

2.数组去重

eg:es6新增数据类型set,set最大的特点就是数据不重复
  function unique(arr){
  if(!Array.isArray(arr)){
  console.log('type error!')
  return
  }
  return [...new set(arr)]
  }

3.有语句块:setTimeout(()=>{console.log('异步')},1000); console.log('同步'); 请将语句的执行顺序变为同步,达到打印结果输出的先后顺序为异步,同步

 let p =new promise((resolve,reject)=>{
  setTimeout(()=>{
  console.log('异步');
  resolve()},1000);
  
 const fun=async()=>{
  await p;
  console.log('同步');
  fun()})