我的答案:使用父组件传值 和 状态管理传值
事件总线(Event Bus)
:创建一个空的 Vue 实例作为事件总线,在其中定义事件和对应的处理函数,然后在需要传值的组件中使用 $emit
触发事件,并在接收值的组件中使用 $on
监听事件来获取传递的值。这种方式适用于任意组件之间的通信,但是需要手动管理事件的注册和销毁,否则可能会造成内存泄漏³⁴。mapState
,mapGetters
,mapActions
,mapMutations
等辅助函数来访问或修改全局状态,从而实现组件之间的数据传递。这种方式可以方便地管理应用的状态,但是也会增加应用的复杂度,不适合小型项目⁵。参考链接:
(1) vue兄弟组件传值的3种方法_mrsun_web的博客-CSDN博客
(2) Vue组件传值——兄弟组件传值_vue页面传值如何接收值放到表单上-CSDN博客
(3) vue兄弟组件之间传值和方法调用_vue调用兄弟组件中的方法,并传参-CSDN博客
(4)vue组件(父子,兄弟,爷孙,)之间传值 - 掘金 (juejin.cn)
(5) 【Vue3】20-兄弟组件传值 - 掘金 (juejin.cn)
我的回答:直接监听size大小变化,再次调用
Echarts 随着浏览器大小变化,有一个简单的方法可以实现图表的自适应,就是使用resize
方法。这个方法可以在浏览器窗口大小改变时,自动调整图表的宽度和高度,以适应新的尺寸。具体的操作步骤如下:
autoResize
选项,设置为 true
,表示开启自适应功能。width
和 height
为 100%
,表示占满父元素的宽度和高度。window
对象上,添加 resize
事件监听器,当窗口大小改变时,调用图表实例的 resize
方法,重新渲染图表。下面是一个简单的示例代码:
// 获取图表容器
var chartContainer = document.getElementById('chart');
// 创建图表实例,开启自适应功能
var chart = echarts.init(chartContainer, null, {autoResize: true});
// 设置图表的配置项和数据
var option = {
// 省略...
};
// 设置图表的配置项和数据
chart.setOption(option);
// 在窗口大小改变时,调用图表的 resize 方法
window.addEventListener('resize', function () {
chart.resize();
});
参考链接:
(1) Apache ECharts
(2) Echarts实现随容器大小改变实时更新大小及采坑记录 - 掘金 (juejin.cn)
(3) 特性 - Apache ECharts
(4) 【精选】ECharts实现数据可视化入门教程(超详细)_牛哄哄的柯南的博客-CSDN博客
(5) ECharts 教程 | 菜鸟教程 (runoob.com).
我的答案:两种,hash模式和history模式
Vue-Router 有两种模式:哈希模式
和历史模式
哈希模式
:不会包含在 HTTP 请求中,不会重新加载页面,历史模式
:需要和后端配合,前端的 URL 和后端发起请求的 URL 需要一致window.history
对象上的方法来实现页面的无刷新跳转参考链接:
(1) vue-router路由模式有几种?_vuerouter路由有几种-CSDN博客
(2) vue-router路由有几种模式?说说它们的区别?_smouns_的博客-CSDN博客
(3) Vue Router | Vue.js 的官方路由 (vuejs.org)
(4) vue路由的三种模式 - 掘金 (juejin.cn)
我的回答:我们的解决方法是通过配置nginx完成
使用 history 模式时候,刷新 404 问题是一个常见的 Vue 路由问题。
它的原因是在 history 模式下,URL 是正常的,没有哈希值,当用户直接访问某个子路径时,浏览器会向服务器发送请求,如果服务器没有配置相应的路由规则,就会返回 404 错误。为了解决这个问题,有以下几种方法:
在服务器端配置一个覆盖所有情况的候选资源
,即如果 URL 匹配不到任何静态资源,就返回同一个 index.html 页面,这个页面就是 Vue 应用的入口页面。这样,无论用户访问什么路径,都会返回 index.html,然后由 Vue 路由来处理。不同的服务器有不同的配置方式,可以参考官方文档中的示例¹。
在 Vue 应用中定义一个通配符路由,即匹配所有路径的路由,用来显示一个 404 页面,提示用户访问的路径不存在。这样,当用户访问一个不存在的路径时,不会看到服务器返回的 404 错误,而是看到 Vue 应用自定义的 404 页面。例如,可以在路由配置中添加如下代码²:
const router = new VueRouter({
mode: 'history',
routes: [
{ path: '*', component: NotFoundComponent }
]
})
如果使用 Node.js 服务器,可以使用服务端路由匹配到来的 URL,并在没有匹配到路由的时候返回 404,以实现回退。这样,当用户访问一个不存在的路径时,会看到服务器返回的 404 错误,而不是 Vue 应用的入口页面。这种方法需要在服务端定义和 Vue 应用一致的路由规则,以避免不一致的情况³。
参考链接
(1) 一文搞懂Vue history模式打包刷新页面404问题 - 掘金 (juejin.cn)
(2) 新来的前端小姐姐问:Vue路由history模式刷新页面出现404问题 - 知乎 (zhihu.com)
(3) vue路由history模式刷新页面出现404问题 - UCloud云社区
(4) 解决Vue中使用history路由模式出现404的问题_vue history 404_NetRookieX的博客-CSDN博客
(5) history模式下页面刷新404问题 - Lencamo - 博客园 (cnblogs.com)
(6) 不同的历史模式 | Vue Router (vuejs.org)
我的答案:localStore和sessionstore
本地存储是一种在用户浏览器中保存数据的技术,它可以让网页应用在不依赖服务器的情况下,实现数据的持久化和共享。本地存储有以下几个特点:
本地存储主要有两种方式,分别是 localStorage 和 sessionStorage。它们的区别在于:
没有过期时间
,可以长期保存在浏览器中,除非用户或者网页主动删除。本地存储的使用方法很简单,可以通过以下的代码来实现:
// 存储数据
localStorage.setItem('name', 'Alice');
sessionStorage.setItem('age', '18');
// 获取数据
var name = localStorage.getItem('name');
var age = sessionStorage.getItem('age');
// 删除数据
localStorage.removeItem('name');
sessionStorage.removeItem('age');
// 清空数据
localStorage.clear();
sessionStorage.clear();
参考链接
(1) HTML 本地存储 (w3school.com.cn)
(2) Window.localStorage - Web API 接口参考 | MDN (mozilla.org)
(3)前端本地存储之LocalStorage - 掘金 (juejin.cn)
我扯了一下动态路由
增量部署是一种部署方式,它的目的是在每次部署过程中,只更新和发布变化的部分,而不是整个项目,从而提高部署的效率和稳定性。增量部署的优点有:
Vue 项目的增量部署,一般需要以下几个步骤:
参考链接:
(1) Vue配置自动打包并增量更新 - 掘金 (juejin.cn)
(2) 部署 | Vue CLI (vuejs.org)
(3) 增量部署和全量部署 - datang6777 - 博客园 (cnblogs.com)
(4) 基于vue_cli配置多页面实现增量打包 - 腾讯云开发者社区-腾讯云 (tencent.com)
(5) 大家都是,怎么做前端项目的 增量部署 的? - 知乎 (zhihu.com)
我的答案:通过路由传值
两个单页面应用之间怎么做传值通信?这是一个关于前端开发的问题,我根据我搜索到的结果,尝试给你一个简单的回答。
单页面应用(Single Page Application,SPA)是一种只有一个 HTML 页面的网页应用,它可以通过动态更新页面的部分内容,而不需要重新加载整个页面,从而提高用户体验和性能。单页面应用之间的传值通信,是指在不同的单页面应用中,如何实现数据的交换和共享。单页面应用之间的传值通信,有以下几种常见的方法:
URL 参数
:这种方法是在跳转到另一个单页面应用时,通过 URL 的查询字符串(?)或者哈希值(#)来传递数据,然后在目标页面中通过解析 URL 来获取数据。这种方法简单易用,但是只能传递字符串类型的数据,而且数据会暴露在 URL 中,不够安全¹²。localStorage
或者 sessionStorage
:这种方法是利用浏览器提供的本地存储功能,将数据保存在 localStorage 或者 sessionStorage 中,然后在另一个单页面应用中通过读取本地存储来获取数据。这种方法可以传递任意类型的数据,而且数据不会随着浏览器的关闭而消失,但是需要注意本地存储的容量限制和跨域问题¹⁵。参考链接:
(1) 四种方式实现不同页面之间的通信——前端 - 掘金 (juejin.cn)
(2) 面试官:前端跨页面通信,你知道哪些方法? - 掘金 (juejin.cn)
(3) Vue 多个平行页面间传值,非组件间传递,简单易懂_前端多页面工程非兄弟组件传值-CSDN博客
开始我回答的是图片共享,但是后面强调的是列表类型的,不是图片
如果你需要传输的数据是列表形式的,比如 100 条、1000 条之类的,你可以使用以下几种方法:
JSON 格式
:JSON 是一种用于表示数据的轻量级格式,它可以将数据转换为字符串,然后通过 URL 参数,localStorage,sessionStorage,postMessage,BroadcastChannel 等方式进行传输。在目标页面中,可以使用 JSON.parse() 方法将字符串转换为原始的数据类型。使用 JSON 格式进行跨页面通信的示例代码如下: // 在页面 A 中,将数据转换为 JSON 字符串
const data = [{name: 'Alice', age: 18}, {name: 'Bob', age: 20}];
const json = JSON.stringify(data);
// 在页面 A 中,使用 localStorage 存储 JSON 字符串
localStorage.setItem('data', json);
// 在页面 B 中,读取 localStorage 中的 JSON 字符串
const json = localStorage.getItem('data');
// 在页面 B 中,将 JSON 字符串转换为原始的数据类型
const data = JSON.parse(json);
console.log(data); // 输出 [{name: 'Alice', age: 18}, {name: 'Bob', age: 20}]
IndexedDB
:IndexedDB 是浏览器提供的一种用于存储大量结构化数据的数据库,可以在不同页面之间存储和读取数据。IndexedDB 可以直接存储和读取数组,对象等复杂的数据类型,无需转换为字符串。使用 IndexedDB 进行跨页面通信的示例代码如下: // 在页面 A 中,打开或创建一个 IndexedDB 数据库
const request = indexedDB.open('myDB', 1);
// 监听 onupgradeneeded 事件,创建一个对象仓库(object store)
request.onupgradeneeded = (event) => {
const db = event.target.result;
const objectStore = db.createObjectStore('myData', {keyPath: 'id'});
};
// 监听 onsuccess 事件,获取数据库实例
request.onsuccess = (event) => {
const db = event.target.result;
// 创建一个事务,指定对象仓库和模式
const transaction = db.transaction(['myData'], 'readwrite');
// 获取对象仓库
const objectStore = transaction.objectStore('myData');
// 存储数据到对象仓库
const data = [{name: 'Alice', age: 18}, {name: 'Bob', age: 20}];
objectStore.add({id: 1, data: data});
};
// 在页面 B 中,打开或创建一个 IndexedDB 数据库
const request = indexedDB.open('myDB', 1);
// 监听 onsuccess 事件,获取数据库实例
request.onsuccess = (event) => {
const db = event.target.result;
// 创建一个事务,指定对象仓库和模式
const transaction = db.transaction(['myData'], 'readonly');
// 获取对象仓库
const objectStore = transaction.objectStore('myData');
// 读取对象仓库中的数据
const request = objectStore.get(1);
// 监听 onsuccess 事件,获取读取的结果
request.onsuccess = (event) => {
const data = event.target.result.data;
console.log(data); // 输出 [{name: 'Alice', age: 18}, {name: 'Bob', age: 20}]
};
};
我希望这些方法能够帮助你解决跨页面传输列表数据的问题。如果你还有其他问题,欢迎继续提问。
非对称加密是一种密码学的算法,它使用了两个不同的密钥,一个是公钥,一个是私钥。公钥可以公开给任何人,用于加密数据或者验证签名;私钥则必须保密,用于解密数据或者生成签名。
非对称加密的优点是可以解决密钥配送问题,即 不需要事先在通信双方之间安全地共享密钥 ;非对称加密的缺点是计算速度较慢,不适合加密大量的数据。非对称加密的常见应用有:
公钥加密对称密钥
,实现混合加密。例如,HTTPS 协议就是使用 RSA 算法加密对称密钥,然后使用对称密钥加密网页内容,从而保证了网页的安全传输¹。私钥加密数据
,生成数字签名。数字签名可以证明数据的来源和完整性,防止伪造和篡改。例如,软件开发者可以使用私钥对软件进行签名,用户可以使用公钥验证软件的合法性²。公钥加密数据
,实现安全的信息交换。例如,电子邮件可以使用公钥加密敏感内容,只有持有私钥的收件人才能解密查看³。非对称加密的常见算法有 RSA、ElGamal、ECC 等,它们都基于一些数学难题,如大数分解、离散对数、椭圆曲线等,使得破解非对称加密非常困难。但是,非对称加密也有一些潜在的风险,如中间人攻击、随机数生成器的安全性、量子计算机的威胁等,因此需要不断地更新和完善非对称加密的技术和标准⁴。
参考链接:
(1) 图文彻底搞懂非对称加密(公钥密钥) - 知乎 (zhihu.com)
(2) 公开密钥加密 - 维基百科,自由的百科全书 (wikipedia.org)
(3) 对称加密和非对称加密的区别-CSDN博客
(4) 对称加密和非对称的加密 的优缺点和理解 - 知乎 (zhihu.com)
(5) 【计算机网络】对称加密、非对称加密和Hash加密的介绍和区别_hash是对称还是非对称-CSDN博客
我的答案:通过env.development切换
环境变量是一种用于存储和传递不同环境中的配置信息的变量,它们可以影响程序的运行行为和结果。环境变量之间的替换,是指在不同的环境中,使用不同的环境变量的值,以适应不同的需求和场景。环境变量之间的替换,有以下几种常见的方法:
配置文件
:这种方法是将不同环境中的环境变量的值,保存在不同的配置文件中,例如 dev.env,test.env,prod.env 等。然后在程序中,根据当前的环境,选择加载对应的配置文件,从而获取环境变量的值。这种方法可以方便地管理和维护不同环境的配置,但是也需要注意配置文件的安全性和版本控制¹²。命令行参数
:这种方法是在运行程序时,通过命令行参数来传递不同环境中的环境变量的值,例如 node app.js --env=dev,node app.js --env=test,node app.js --env=prod 等。然后在程序中,根据命令行参数,设置或覆盖环境变量的值。这种方法可以灵活地控制不同环境的运行,但是也需要注意命令行参数的格式和规范³ 。环境变量管理工具
:这种方法是使用一些专门的工具或库,来帮助管理和替换不同环境中的环境变量的值,例如 dotenv,cross-env,env-cmd 等。这些工具或库可以根据不同的规则和方式,来自动或手动地加载和设置环境变量的值,从而简化开发和部署的流程 。我询问的问题:
- 实习相关问题
- 实习工资(行政)
- 负责什么开发,前端还是后端
- 使用什么框架
推荐问题:
询问技术面试官的问题,是一种展示你对职位和公司的兴趣和热情的好方法,也是一种了解你未来可能工作的环境和文化的机会。你想询问技术面试官的问题,应该根据你自己的情况和目标来选择,但是一般来说,有以下几个方面的问题是比较常见和有用的:
关于技术栈和工具的问题:你可以询问技术面试官,他们使用的技术栈和工具是什么,为什么选择这些技术栈和工具,以及他们对这些技术栈和工具的评价和建议。这样可以让你了解他们的技术水平和偏好,以及你是否能够适应和学习他们的技术栈和工具。例如,你可以问:
关于项目和任务的问题:你可以询问技术面试官,他们目前或者未来的主要项目和任务是什么,以及他们的项目和任务的难点和挑战是什么。这样可以让你了解他们的工作内容和目标,以及你是否能够为他们的项目和任务做出贡献和创新。例如,你可以问:
关于团队和文化的问题:你可以询问技术面试官,他们的团队的规模和结构是什么,以及他们的团队的文化和氛围是什么。这样可以让你了解他们的团队的合作和沟通方式,以及你是否能够融入和享受他们的团队的文化和氛围。例如,你可以问: