面试题整理

一、小程序知识点:
1.配置文件project.config.json
1)miniprogramRoot:指定小程序源码的目录(需为相对路径)
2)compileType:编译类型(miniprogram、plugin)
3)setting项目配置:
字段名 类型 说明
es6 是否启用 es6 转 es5
postcss 上传代码时样式是否自动补全
minified 上传代码时是否自动压缩
uglifyFileName 是否进行代码保护
babelSetting 增强编译下Babel的配置项
在这里插入图片描述

2. 请谈谈wxml与标准的html的异同?
都是用来描述页面的结构;
都由标签、属性等构成;
标签名字不一样,且小程序标签更少,单一标签更多;
多了一些 wx:if 这样的属性以及 {{ }} 这样的表达式
WXML仅能在微信小程序开发者工具中预览,而HTML可以在浏览器内预览
小程序运行在JS Core内,没有DOM树和window对象,小程序中无法使用window对象和document对象。

3. 你是怎么封装微信小程序的数据请求的?
将所有的接口放在统一的js文件中并导出
在app.js中创建封装请求数据的方法
在子页面中调用封装的请求数据

4.请谈谈小程序的双向绑定和vue的异同?
大体相同,但小程序直接this.data的属性是不可以同步到视图的,必须调用this.setData()方法!

1.双向绑定:vue默认支持双向绑定,微信小程序需要借助data。
2.取值:vue中,通过this.reason取值。小程序中,通过this.data.reason取值。

  1. 取变量的时候:
    • 小程序 wx:for = “lists”
    • Vue是 v-for = “item in lists”
  2. 调用data模型(赋值)的时候:
    • 小程序:this.data.item //调用 this.setData({item:1}) //赋值
    • vue: this.item //调用 this.item =1 //赋值

小程序的双向绑定实际上并不是双向绑定 如果在小程序.js文件中改变了某个变量的值 那么页面上的值并不会跟着改变 如果想要页面上的值也跟着改变的话 需要通过setData来操作 而Vue默认就是双向绑定 只改变了某个变量的值 页面上也会跟着改变

5. 简述微信小程序原理?
小程序本质就是一个单页面应用,所有的页面渲染和事件处理,都在一个页面内进行
它的架构,是数据驱动的架构模式,它的UI和数据是分离的,所有的页面更新,都需要通过对数据的更改来实现;
它从技术讲和现有的前端开发差不多,采用JavaScript、WXML、WXSS三种技术进行开发;
功能可分为webview和appService两个部分;webview用来展现UI,appService有来处理业务逻辑、数据及接口调用;
两个部分在两个进程中运行,通过系统层JSBridge实现通信,实现UI的渲染、事件的处理等。
(WebView是用于展示网络请求后的结果,也就是将url网络请求的结果展示在里面。WebView是一个基于webkit引擎、展现web页面的控件。可以将其视为一个浏览器)
(appService:逻辑层的功能就是将数据进行处理后发送给视图层,同时接受视图层的事件反馈)

6. 分析微信小程序的优劣势?
优势:
容易上手,基础组件库比较全,基本上不需要考虑兼容问题;
开发文档比较完善,开发社区比较活跃,支持插件式开发;
良好的用户体验:无需下载,通过搜索和扫一扫就可以打开,打开速度快
开发成本比APP要低;
为用户提供良好的安全保障(小程序发布 严格的审查流程)
劣势:
限制较多,页面大小不能超过2M;
样式单一,部分组件已经是成型了的,样式不可修改,例如:幻灯片、导航
真机测试有时候加载慢

7. 小程序关联微信公众号如何确定用户的唯一性?
使用wx.getUserInfo方法 withCredentials为true时,可获取encryptedData,里面有union_id.后端需要进行对称解密。

8. 使用webview直接加载要注意哪些事项?
必须要在小程序后台使用管理员添加业务域名;
微信分享只可以是小程序的主名称,如要自定义分享内容,需小程序版本在1.7.1以上;

9.小程序调用后台接口遇到哪些问题?
数据的大小限制,超过范围会直接导致整个小程序崩溃,除非重启小程序;

10. 微信小程序与H5的区别?
<–H5可以理解为移动端网页–>
运行环境不同(小程序在微信运行,h5在浏览器运行);
开发成本不同(h5需要兼容不同的浏览器);
应用在生产环境的运行流畅度(h5需不断对项目优化来提高用户体验);

11.那么微信支付的 流程是否可以简单说一下?
跟后端约定好参数,后端返回微信支付所需的5个参数;
然后调用微信支付的API,在成功回调中继续其他操作

12.登录流程
小程序调用wx.login接口获取code,并传送给后端
2 后端拿到code,结合code,appid,appsecret,获取session_key与openid
3 拿到session_key与openid后,自定义登入态,将自定义登入态返回给小程序,我们可以通过自定义状态找到openid和session_key
4 下次请求我们的后台业务的时候,可以通过自定义登入态,找到我们后台的session_key与openid

13.什么是openid
用户在当前小程序中唯一标识,但是同一用户在不同小程序中的openid不同。

扩展:
1.什么是babel
随着前端的发展,浏览器有时无法兼容我们的JS代码,babel就是将目标环境(浏览器)升级成支持最新javascript语法的环境的工具。

1.1在这里插入图片描述
1.2在这里插入图片描述

二、路由
1、什么是前端路由
前端路由不同于传统路由,它不需要服务器来进行解析,而是通过一个hash函数或者H5提供的history API来实现。在进行开发时,路由用来设定访问路径,并将路径与相应的组件映射起来,用户在访问相应的路径时,路由根据映射关系实现不同组件间的切换,整个过程都是在同一个页面中实现,不涉及页面间的跳转,也就是我们常说的单页应用。

2.vue-router
如果目的地和当前路由相同,只有参数发生了改变 (比如从一个用户资料到另一个 /users/1 -> /users/2),你需要使用 beforeRouteUpdate 来响应这个变化

3.导航守卫
路由导航守卫是为了路由跳转之前做的检查及操作
比如:用户没有登录 而是直接通过修改浏览器 url 来访问网页,这种操作无疑是不安全的。路由导航守卫可以让我们对用户要跳转的路由做一次检查,符合条件后放行,不符合条件则强制用户跳转登录页面。

4.问题:当使用路由参数时,例如从 /content?id=1 到 content?id=2,此时原来的组件实例会被复用。这也意味着组件的生命周期钩子不会再被调用,此时vue应该如何响应路由参数 的变化?
1)复用组件时,想对路由参数的变化作出响应的话, 可以watch (监测变化) KaTeX parse error: Expected '}', got 'EOF' at end of input: … watch: { 'route’ (to, from) {
// 对路由变化作出响应…
}
}
}
2)或者使用 2.2 中引入的 beforeRouteUpdate 守卫:
const User = {
template: ‘…’,
beforeRouteUpdate (to, from, next) {
// react to route changes…
// don’t forget to call next()
}
}

5.完整的 vue-router 导航解析流程
1、导航被触发。

2、在失活的组件里调用离开守卫。

3、调用全局的 beforeEach守卫。

4、在重用的组件里调用 beforeRouteUpdate守卫 (2.2+)。

5、在路由配置里调用beforeEnter。

6、解析异步路由组件。

7、在被激活的组件里调用beforeRouteEnter。

8、调用全局的 beforeResole 守卫 (2.5+)。

9、导航被确认。

10、调用全局的afterEach 钩子。

11、触发 DOM 更新。

12、用创建好的实例调用beforeRouteEnter 守卫中传给 next 的回调函数。

三、vue:
1.重中之重、Vue的双向数据绑定原理是什么?
答:vue.js 是采用数据劫持结合发布者-订阅者模式的方式,通过Object.defineProperty()来劫持各个属性的setter,getter,在数据变动时发布消息给订阅者,触发相应的监听回调。
具体步骤:
第一步:需要observe的数据对象进行递归遍历,包括子属性对象的属性,都加上 setter和getter
这样的话,给这个对象的某个值赋值,就会触发setter,那么就能监听到了数据变化
第二步:compile解析模板指令,将模板中的变量替换成数据,然后初始化渲染页面视图,并将每个指令对应的节点绑定更新函数,添加监听数据的订阅者,一旦数据有变动,收到通知,更新视图
第三步:Watcher订阅者是Observer和Compile之间通信的桥梁,主要做的事情是:
1、在自身实例化时往属性订阅器(dep)里面添加自己
2、自身必须有一个update()方法
3、待属性变动dep.notice()通知时,能调用自身的update()方法,并触发Compile中绑定的回调,则功成身退。
第四步:MVVM作为数据绑定的入口,整合Observer、Compile和Watcher三者,通过Observer来监听自己的model数据变化,通过Compile来解析编译模板指令,最终利用Watcher搭起Observer和Compile之间的通信桥梁,达到数据变化 -> 视图更新;视图交互变化(input) -> 数据model变更的双向绑定效果。

2.访问器属性:
数据有两种属性(必须是两者之一,不能同时是两者)
数据属性是一个拥有可写或不可写值的属性。 configurable,enumerable,value ,writable
访问器是由一对 getter-setter 函数功能来描述的属性。
不能直接定义,需要通过object.defineProperty()定义,

3.什么是MVVM?
MVVM是Model-View-ViewModel的缩写。MVVM是一种设计思想。Model 层代表数据模型,也可以在Model中定义数据修改和操作的业务逻辑;View 代表UI 组件,它负责将数据模型转化成UI 展现出来,ViewModel 是一个同步View 和 Model的对象。
在MVVM架构下,View 和 Model 之间并没有直接的联系,而是通过ViewModel进行交互,Model 和 ViewModel 之间的交互是双向的, 因此View 数据的变化会同步到Model中,而Model 数据的变化也会立即反应到View 上。
ViewModel 通过双向数据绑定把 View 层和 Model 层连接了起来,而View 和 Model 之间的同步工作完全是自动的,无需人为干涉,因此开发者只需关注业务逻辑,不需要手动操作DOM, 不需要关注数据状态的同步问题,复杂的数据状态维护完全由 MVVM 来统一管理。

4.mvvm和mvc区别?它和其它框架(jquery)的区别是什么?哪些场景适合?
mvc和mvvm其实区别并不大。都是一种设计思想。主要就是mvc中Controller演变成mvvm中的viewModel。mvvm主要解决了mvc中大量的DOM 操作使页面渲染性能降低,加载速度变慢,影响用户体验。
区别:vue数据驱动,通过数据来显示视图层而不是节点操作。
场景:数据操作比较多的场景,更加便捷

5.vue的优点是什么?
6.组件传值
7.vue如何实现按需加载配合webpack设置
webpack中提供了require.ensure()来实现按需加载。以前引入路由是通过import 这样的方式引入,改为const定义的方式进行引入。
不进行页面按需加载引入方式:import home from ‘…/…/common/home.vue’
进行页面按需加载的引入方式:
const home = r => require.ensure( [], () => r (require(’…/…/common/home.vue’)))jianro xing
8.指令v-el的作用是什么?
提供一个在页面上已存在的 DOM 元素作为 Vue 实例的挂载目标.可以是 CSS 选择器,也可以是一个 HTMLElement 实例
9.简单描述每个周期具体适合哪些场景
答:生命周期钩子的一些使用方法:
beforecreate : 可以在这加个loading事件,在加载实例时触发
created : 初始化完成时的事件写在这里,如在这结束loading事件,异步请求也适宜在这里调用
mounted : 挂载元素,获取到DOM节点
updated : 如果对数据统一处理,在这里写上相应函数
beforeDestroy : 可以做一个确认停止事件的确认框
nextTick : 更新数据后立即操作dom
10.vue-loader是什么?使用它的用途有哪些?
解析.vue文件的一个加载器。
将template/js/style转换成js模块
11.VNode是什么?虚拟 DOM是什么?
Vue在 页面上渲染的节点,及其子节点称为“虚拟节点 (Virtual Node)”,简写为“VNode”。“虚拟 DOM”是由 Vue 组件树建立起来的整个 VNode 树的称呼。
12.请说出vue.cli项目中src目录每个文件夹和文件的用法?
答:assets文件夹是放静态资源;components是放组件;router是定义路由相关的配置;view视图;app.vue是一个应用主组件;main.js是入口文件
13.聊聊你对Vue.js的template编译的理解?
简而言之,就是先转化成AST树,再得到的render函数返回VNode(Vue的虚拟DOM节点)
14.怎样创建全局的自定义指令,局部指令
全局定义指令:在vue对象的directive方法里面有两个参数,一个是指令名称,另外一个是对象。

组件内定义指令:directives
钩子函数:bind(绑定事件触发)、inserted(节点插入的时候触发)、update(组件内相关更新)

(在每个钩子函数中,第一个参数永远是 el ,表示 被绑定了指令的那个元素,这个 el 参数,是一个原生的JS对象)

四、html:
1.html5新增属性有哪些?
新增语义化标签,video标签,新增表单属性placeholder、min 、 max ,canvas绘图,svg标签
2.如何理解标签语义化?
选择合适的标签便于开发者阅读和编写代码,同时让浏览器更好好地解析
3.如何理解前端模块化
模块化就是把一段代码封装起来,便于重复使用,使代码更加简洁
4.如何看待前后端分离?
 “前端”通常指的是,相对来说更接近用户的一端,例如:APP,网页、桌面程序等,在现实开发中大部分情况可以理解为“客户端”;
 “后端”相对来说就更泛化了,可以理解为是为前端提供服务的一端。
 ”分离“顾名思义就是将”前端“和”后端进行分开“,但是这里的分开主要从下面几个纬度进行分离
    1:架构分离,前端不需要依赖后端架构同时后端也不需要知道前端使用何种架构
    2:人员分离,前端后端使用的技术相互之间根部不需要相互了解完全可以在做到透明(当然相互了解会更好)
    3:工作分离,基于项目或者产品的单个功能的横向进行工作分离,任务划分更细,前后端的工作同时进行吗,更加高效
5.你知道的行内元素、块级元素有哪些?
行内:span、a、Image、
块级:div p hr form

五、CSS:
1.为什么初始化样式
因为浏览器的兼容性,每个浏览器设计时都有自己的特性,因此在解析标签的时候就产生一些差异,因此显示页面的时候就会出现微小的差异
2.link和@import的区别?
两者都是外部引用CSS的方式,但是存在一定的区别:
link是XHTML标签,@import属于CSS范畴,只能加载CSS。
link引用CSS时,在页面载入时同时加载;@import需要页面网页完全载入以后加载。
link是XHTML标签,无兼容问题;@import是在CSS2.1提出的,低版本的浏览器不支持。
3.CSS优先级
!important>行业样式>内部样式>外联样式
后写的样式会覆盖前面写的
权重问题
4.盒模型
把所有的网页元素都看成一个盒子,它具有: content,padding,border,margin 四个属性,这就是盒子模型
盒子模型有两种形式:标准盒子模型,怪异盒子模型
两种模式可以利用box-sizing属性进行自行选择:
  标准模式:box-sizing:content-box;width = content
  怪异模式:box-sizing:border-box; width = border + padding + content
  
5.清除浮动
clear:both
伪元素:after(为了兼容服务器。要写content:’’,display:block)

6.高度塌陷
在这里插入图片描述
在这里插入图片描述
7.BFC
https://blog.csdn.net/sinat_36422236/article/details/88763187
是一个独立的渲染区域,浮动、绝对定位元素、块容器(例如flex、table-cells、and table-captions)以及溢出而非可视的元素(除非该值已经传播到了视口)都是建立 BFC(Block formatting contexts) 的条件。

在这里插入图片描述
六、JS
1.深拷贝、浅拷贝

深:
1.let a = {
name: ‘JJ’,
age: 18
}
b = JSON.parse(JSON.stringify(a))
b.age = 25;
console.log(a, b);
2.可以递归递归去复制所有层级属性
2.var let const区别
var存在变量提升

let 声明的变量具有块作用域的特征。
在同一个块级作用域,不能重复声明变量。
let 声明的变量不存在变量提升
const除了let的特性外,定义的变量一旦定义 不能修改

3.map forEach for区别
for遍历对象自身的和继承的可枚举的属性,也就是说会包括那些原型链上的属性。如果想要仅迭代自身的属性,那么在使用 for…in
forEach
只能遍历数组,不能中断,没有返回值(或认为返回值是undefined)
map
只能遍历数组,不能中断,返回值是修改后的数组
4. 防抖 节流
防抖 节流针对的是相应跟不上出发频率这类问题,
防抖:多次事件触发,只执行一次
节流:事件触发,固定时间内执行一次

一、v-for中为什么要用key
1.vue中列表循环需加:key=“唯一标识” 唯一标识尽量是item里面id等,因为vue组件高度复用增加Key可以标识组件的唯一性,为了更好地区别各个组件 key的作用主要是为了高效的更新虚拟DOM。

2.key主要用来做dom diff算法用的,diff算法是同级比较,比较当前标签上的key还有它当前的标签名,如果key和标签名都一样时只是做了一个移动的操作,不会重新创建元素和删除元素。

3.没有key的时候默认使用的是“就地复用”策略。如果数据项的顺序被改变,Vue不是移动Dom元素来匹配数据项的改变,而是简单复用原来位置的每个元素。如果删除第一个元素,在进行比较时发现标签一样值不一样时,就会复用之前的位置,将新值直接放到该位置,以此类推,最后多出一个就会把最后一个删除掉。

4.尽量不要使用索引值index作key值,一定要用唯一标识的值,如id等。因为若用数组索引index为key,当向数组中指定位置插入一个新元素后,因为这时候会重新更新index索引,对应着后面的虚拟DOM的key值全部更新了,这个时候还是会做不必要的更新,就像没有加key一样,因此index虽然能够解决key不冲突的问题,但是并不能解决复用的情况。如果是静态数据,用索引号index做key值是没有问题的。

5.标签名一样,key一样这时候就会就地复用,如果标签名不一样,key一样不会复用。

一、什么是虚拟DOM
虚拟 DOM (Virtual DOM )这个概念相信大家都不陌生,从 React 到 Vue ,虚拟 DOM 为这两个框架都带来了跨平台的能力(React-Native 和 Weex)

实际上它只是一层对真实DOM的抽象,以JavaScript 对象 (VNode 节点) 作为基础的树,用对象的属性来描述节点,最终可以通过一系列操作使这棵树映射到真实环境上

在Javascript对象中,虚拟DOM 表现为一个 Object对象。并且最少包含标签名 (tag)、属性 (attrs) 和子元素对象 (children) 三个属性,不同框架对这三个属性的名命可能会有差别

创建虚拟DOM就是为了更好将虚拟的节点渲染到页面视图中,所以虚拟DOM对象的节点与真实DOM的属性一一照应

在vue中同样使用到了虚拟DOM技术

什么是diff算法
DOM操作是昂贵的,因此尽量减少DOM操作
找出本次DOM必须更新的节点来更新,其他的不更新
这个‘找出’的过程,就需要diff算法

5.什么是闭包?
闭包是指有权访问另外一个函数作用域中的变量的函数.可以理解为(能够读取其他函数内部变量的函数)。
简单的说,Javascript允许使用内部函数—即函数定义和函数表达式位于另一个函数的函数体内。而且,这些内部函数可以访问它们所在的外部函数中声明的所有局部变量、参数和声明的其他内部函数。当其中一个这样的内部函数在包含它们的外部函数之外被调用时,就会形成闭包。

6.闭包的作用
闭包可以用在许多地方。它的最大用处有两个:一个是可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中。
正常函数执行完毕后,里面声明的变量被垃圾回收处理掉,但是闭包可以让作用域里的变量,在函数执行完之后依旧保持没有被垃圾回收处理掉。
2、闭包解决了什么?

1由于闭包可以缓存上级作用域,那么就使得函数外部打破了“函数作用域”的束缚,可以访问函数内部的变量。
2以平时使用的 AJAX 成功回调为例,这里其实就是个闭包,由于上述的特性,
3回调就拥有了整个上级作用域的访问和操作能力,提高了极大的便利。
4开发者不用去学钩子函数来操作上级函数作用域内部的变量了

闭包最大的用处有两个:

1) 一个是可以读取函数内部的变量;
2) 另一个就是让这些变量的值始终保存在内存中。

3、闭包有哪些应用场景

闭包随处可见,一个 Ajax 请求的成功回调,一个事件绑定的回调方法,一个 setTimeout 的延时回调,或者一个函数内部返回另一个匿名函数,这些都是闭包。简而言之,无论使用何种方式对函数类型的值进行传递,当函数在别处被调用时,都有闭包的身影

什么是ajax
ajax依赖是浏览器提供的XMLHttpRequest对象,是这个对象使得浏览器可以发出HTTP请求与接收HTTP响应。实现了在页面不刷新的情况下和服务器进行数据交互。
一、v-for中为什么要用key
1.vue中列表循环需加:key=“唯一标识” 唯一标识尽量是item里面id等,因为vue组件高度复用增加Key可以标识组件的唯一性,为了更好地区别各个组件 key的作用主要是为了高效的更新虚拟DOM。

2.key主要用来做dom diff算法用的,diff算法是同级比较,比较当前标签上的key还有它当前的标签名,如果key和标签名都一样时只是做了一个移动的操作,不会重新创建元素和删除元素。

3.没有key的时候默认使用的是“就地复用”策略。如果数据项的顺序被改变,Vue不是移动Dom元素来匹配数据项的改变,而是简单复用原来位置的每个元素。如果删除第一个元素,在进行比较时发现标签一样值不一样时,就会复用之前的位置,将新值直接放到该位置,以此类推,最后多出一个就会把最后一个删除掉。

4.尽量不要使用索引值index作key值,一定要用唯一标识的值,如id等。因为若用数组索引index为key,当向数组中指定位置插入一个新元素后,因为这时候会重新更新index索引,对应着后面的虚拟DOM的key值全部更新了,这个时候还是会做不必要的更新,就像没有加key一样,因此index虽然能够解决key不冲突的问题,但是并不能解决复用的情况。如果是静态数据,用索引号index做key值是没有问题的。

5.标签名一样,key一样这时候就会就地复用,如果标签名不一样,key一样不会复用。

超文本传输协议HTTP
HTTP协议定义了浏览器怎样向万维网服务器请求万维网文档,以及服务器怎样把文档传送给浏览器。从层次的角度看,HTTP是面向事务的应用层协议,规定了在浏览器与服务器之间的请求和响应的格式和规则,它是万维网上能够可靠地交换文件的重要基础。

HTTP的操作过程
每个万维网站点都有一个服务器进程,它不断地监听TCP的端口(默认80),当监听到连接请求后便与浏览器建立连接。TCP连接建立后,浏览器向服务器发送请求获取某一Web页面的HTTP请求。服务器受到HTTP请求后,将请求需要的Web信息通过HTTP响应给浏览器。浏览器再将信息解释展示给用户,最后释放TCP连接。
————————————————
版权声明:本文为CSDN博主「linovce」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_35524157/article/details/88542873

this指向
1.普通函数调用
this指向全局对象window
2.对象函数调用
谁调用this就指向谁
3.构造函数调用
this指向实例对象
4.箭头函数
箭头函数的this是在定义函数的时候绑定的,不是在执行过程中绑定
可以解决匿名函数和定时器的this指向问题,不用用变量that储存this
————————————————
版权声明:本文为CSDN博主「flyyy菜鸟」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_44771007/article/details/105537158
七、better-scrol
父容器有固定的高度。父容器第一个子元素的高度会随着内容的大小而撑高。当 子元素的高度不超过父容器的高度,是不能滚动的,而它一旦超过了父容器的高度,我们就可以滚动内容区了,这就是 better-scroll 的滚动原理。
https://blog.csdn.net/weixin_37719279/article/details/82084342?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522161648270616780255251036%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=161648270616780255251036&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduend~default-1-82084342.first_rank_v2_pc_rank_v29&utm_term=betterscroll%E6%98%AF%E4%BB%80%E4%B9%88

链接:https://www.jianshu.com/p/5231e7e125da
https://blog.csdn.net/wang1006008051/article/details/81805932
https://blog.csdn.net/lizidemao/article/details/83751690? utm_medium=distribute.pc_relevant.none-task-blog-baidujs_baidulandingword-4&spm=1001.2101.3001.4242
https://blog.csdn.net/wuxy720/article/details/80151610

	   vue面试题:https://blog.csdn.net/lizidemao/article/details/83751690
	   
	   vuex:https://blog.csdn.net/hrj970808/article/details/109739926
	   
	   vue-cli:https://blog.csdn.net/weixin_40408910/article/details/81279305?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522161613663016780261997345%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=161613663016780261997345&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-4-81279305.first_rank_v2_pc_rank_v29&utm_term=vue-cli
	  
	  Nginx: https://blog.csdn.net/forezp/article/details/87887507?ops_request_misc=&request_id=&biz_id=102&utm_term=Nginx&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-4-87887507.first_rank_v2_pc_rank_v29
	   
	   前端高频:https://blog.csdn.net/C05230/article/details/109477796?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.control&dist_request_id=1328666.18709.16160285521703889&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.control

https://www.kancloud.cn/lixianshengdezhanghao/interview/905876

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值