Vue 面试题
1.Vue 双向绑定原理
2.描述下 vue 从初始化页面–修改数据–刷新页面 UI 的过程?
3.你是如何理解 Vue 的响应式系统的?
4.虚拟 DOM 实现原理
5.既然 Vue 通过数据劫持可以精准探测数据变化,为什么还需要虚拟 DOM 进行 diff 检测差异?
6.Vue 中 key 值的作用?
7.Vue 的生命周期
8.Vue 组件间通信有哪些方式?
9.watch、methods 和 computed 的区别?
10.vue 中怎么重置 data?
11.组件中写 name 选项有什么作用?
12.vue-router 有哪些钩子函数?
13.route 和 router 的区别是什么?
14.说一下 Vue 和 React 的认识,做一个简单的对比
15.Vue 的 nextTick 的原理是什么?
16.Vuex 有哪几种属性?
17.vue 首屏加载优化
18.Vue 3.0 有没有过了解?
19.vue-cli 替我们做了哪些工作?
…
算法
开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
- 冒泡排序
- 选择排序
- 快速排序
- 二叉树查找: 最大值、最小值、固定值
- 二叉树遍历
- 二叉树的最大深度
- 给予链表中的任一节点,把它删除掉
- 链表倒叙
- 如何判断一个单链表有环
- 给定一个有序数组,找出两个数相加为一个目标数
…
由于篇幅限制小编,pdf文档的详解资料太全面,细节内容实在太多啦,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!有需要的程序猿(媛)可以帮忙点赞+评论666
Output
配置 output
选项可以控制 webpack 如何向硬盘写入编译文件。注意,即使可以存在多个入口起点,但只指定一个输出
配置。这里指定输出的路径为 ‘dist’:
module.exports = {
/* … */
output: {
path: path.resolve(__dirname, ‘./dist’),
filename: ‘[name].bundle.js’,
},
}
现在,我们具有构建捆绑包所需的最低配置。 在package.json
中,我们可以创建一个运行webpack
命令的构建脚本。
“scripts”: {
“build”: “webpack”
}
现在可以运行它了:
npm run build
现在在 dist 目录会生成一个 main.bundle.js
文件
webpack有一个插件接口,这使得它更加灵活。内部webpack代码和第三方扩展使用插件,有一些主要的方法几乎每个webpack项目都会用到。
目前,我们有一个随机的bundle文件,但它对我们还不是很有用。如果需要使用main.bundle.js
,就要借助 HTML页面来加载这个 JS 包作为脚本。我们希望HTML文件自动引入这个生成 js
文件,所以我们将使用html-webpack-plugin
创建一个HTML模板。
安装一下:
npm i -D html-webpack-plugin
在src
文件夹中创建一个template.html
文件,这里,我们自定义一个title
,内容如下:
src/template.html
创建配置的plugins
属性,然后将插件,文件名添加到输出(index.html
),并链接到将基于该模板的模板文件。
const path = require(‘path’)
const HtmlWebpackPlugin = require(‘html-webpack-plugin’)
module.exports = {
/* … */
plugins: [
new HtmlWebpackPlugin({
title: ‘webpack Boilerplate’,
template: path.resolve(__dirname, ‘./src/template.html’), // template file
filename: ‘index.html’, // output file
}),
],
}
现在再次运行构建,会看到dist
文件夹现在包含一个index.html
,里面也自动引入了我们打包好的 js 文件。用浏览器打开 index.html
,会在控制台看到 Interesting!
。
接着,在index.js
中我们动态插入一些 dom 元素到页面中,内容如下:
// Create heading node
const heading = document.createElement(‘h1’)
heading.textContent = ‘Interesting!’
// Append heading node to the DOM
const app = document.querySelector(‘#root’)
app.append(heading)
重新构建,在进入 dist 目录下面,用 http-server
运行 html 文件。
http-server
可以在页面上看到,我们注入的 "Interesting!"
,还会注意到捆绑文件已缩小。
注意:在安装
HtmlWebpackPlugin
后,你会看到一个DeprecationWarning
,因为插件在升级到webpack 5后还没有完全摆脱deprecation
警告。
我们还需要设置clean-webpack-plugin
,在每次构建后清除dist
文件夹中的所有内容。 这对于确保不遗留任何旧数据很重要。
clean-webpack-plugin
-删除/清理构建文件夹
const path = require(‘path’)
const HtmlWebpackPlugin = require(‘html-webpack-plugin’)
const {CleanWebpackPlugin} = require(‘clean-webpack-plugin’)
module.exports = {
/* … */
plugins: [
/* … */
new CleanWebpackPlugin(),
],
}
webpack 使用 loader
预处理一些加载的文件,如 js 文件、静态资源(如图像和CSS样式)和编译器(如TypeScript
和Babel
)。webpack 5也有一些内置的资产加载器。
在我们的项目中,有一个HTML文件,该文件可以加载并引入一些 JS ,但实际上并没有执行任何操作。 那么这个webpack
配置要做的主要事情是什么?
-
将 JS 编译为浏览器可以理解的版本
-
导入样式并将
SCSS
编译为CSS
-
导入图像和字体
-
(可选)设置React或Vue
Babel
是一个工具,可让使用最新的 JS 语法。
建立一个规则来检查项目中(node_modules
之外)的任何.js
文件,并使用babel-loader
进行转换。 Babel 还有一些其他的依赖项:
-
babel-loader
-使用 Babel 和 webpack 传输文件。 -
@babel/core
-将ES2015+ 转换为向后兼容的 JavaScript -
@babel/preset-env
-Babel 的智能默认设置 -
@babel/plugin-proposal-class-properties
-自定义 Babel 配置的示例(直接在类上使用属性)
npm i -D babel-loader @babel/core @babel/preset-env @babel/preset-env @babel/plugin-proposal-class-properties
webpack.config.js
module.exports = {
/* … */
module: {
rules: [
// JavaScript
{
test: /.js$/,
exclude: /node_modules/,
use: [‘babel-loader’],
},
],
},
}
如果是 TypeScript 项目,使用的是
typescript-loader
而不是babel-loader
。
现在Babel已经设置好了,但是我们的Babel
插件还没有。可以在index.js
中添加一些新的语法来证明它还不能正常工作。
// 创建没有构造函数的类属性
class Game {
name = ‘Violin Charades’
}
const myGame = new Game()
// 创建 p 节点
const p = document.createElement(‘p’)
p.textContent = I like ${myGame.name}.
const heading = document.createElement(‘h1’)
heading.textContent = ‘Interesting!’
const app = document.querySelector(‘#root’)
app.append(heading, p)
要解决这个问题,只需在项目的根目录中创建一个.babelrc
文件。可以使用preset-env
和plugin-proposal-class-properties
添加更多默认值。
{
“presets”: [“@babel/preset-env”],
“plugins”: [“@babel/plugin-proposal-class-properties”]
}
现在运行npm run build
一切准备就绪。
假设我们需要引用一张图片并直接导入到 JS 文件中,这样是无法正常工作的。 为了演示,创建 src/ images
并向其中添加图像,然后尝试将其导入到index.js
文件中。
src/index.js
import example from ‘./images/example.png’
/* … */
运行构建时,再次看到错误:
webpack
有一些内置的asset modules ,可用于静态资源。 对于图像类型,我们将使用asset/resource
,注意,这里是一个type
,而不是loader
。
webpack.config.js
module.exports = {
/* … */
module: {
rules: [
// Images
{
test: /.(?:ico|gif|png|jpg|jpeg)$/i,
type: ‘asset/resource’,
},
],
},
}
构建后,可以在dist
文件夹查看。
webpack 还有一个asset module
,可以使用asset/inline
内联某些数据,例如svgs
和字体。
src/index.js
import example from ‘./images/example.svg’
/* … */
webpack.config.js
module.exports = {
/* … */
module: {
rules: [
// Fonts and SVGs
{
test: /.(woff(2)?|eot|ttf|otf|svg|)$/,
type: ‘asset/inline’,
},
],
},
}
同样的需要使用 style loader
才能在脚本中执行类似import 'file.css'
的操作。
现在很多人都在使用CSS-in-JS、styled-components和其他工具来将样式引入到他们的 JS 应用程序中。
当网站只有一个 CSS 文件,仅能够加载一个CSS文件就足够了。但如果想使用PostCSS,为了能在任何浏览器中使用所有最新的CSS特性。或者想使用Sass, CSS预处理器,那就需要使用其它的 loader 处理。
我想使用这三种方法——在Sass中编写,在PostCSS
中处理,以及编译到CSS。这需要引入一些加载器和依赖项。
-
sass-loader
— 加载 SCSS 并编译为CSS -
node-sass
— Node Sass -
postcss-loader
— 使用 PostCSS 处理 CSS -
css-loader
— 解析 css import -
style-loader
—— 将CSS注入到DOM中
npm i -D sass-loader postcss-loader css-loader style-loader postcss-preset-env node-sass
算法
-
冒泡排序
-
选择排序
-
快速排序
-
二叉树查找: 最大值、最小值、固定值
-
二叉树遍历
-
二叉树的最大深度
-
给予链表中的任一节点,把它删除掉
-
链表倒叙
-
如何判断一个单链表有环
由于篇幅限制小编,pdf文档的详解资料太全面,细节内容实在太多啦,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!
如果你觉得对你有帮助,可以戳这里获取:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
`中处理,以及编译到CSS。这需要引入一些加载器和依赖项。
-
sass-loader
— 加载 SCSS 并编译为CSS -
node-sass
— Node Sass -
postcss-loader
— 使用 PostCSS 处理 CSS -
css-loader
— 解析 css import -
style-loader
—— 将CSS注入到DOM中
npm i -D sass-loader postcss-loader css-loader style-loader postcss-preset-env node-sass
算法
-
冒泡排序
-
选择排序
-
快速排序
-
二叉树查找: 最大值、最小值、固定值
-
二叉树遍历
-
二叉树的最大深度
-
给予链表中的任一节点,把它删除掉
-
链表倒叙
-
如何判断一个单链表有环
[外链图片转存中…(img-Fj27IZrU-1715872468683)]
由于篇幅限制小编,pdf文档的详解资料太全面,细节内容实在太多啦,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!