【前端面经】云智慧一面

news2025/6/4 9:50:27

写在前面:面经只是记录博主遇到的题目。每题的答案在编写文档的时候已经有问过deepseek,它只是一种比较普世的答案,要学得深入还是靠自己

Q:手撕代码,两个有序数组排序
A:

function mysort(arr1, arr2) {
    let i = 0;
    let j = 0;
    let res = [];
    while (i < arr1.length && j < arr2.length) {
        if (arr1[i] <= arr2[j]) {
            res.push(arr1[i])
            i++
        } else {
            res.push(arr2[j])
            j++
        }
    }
    return [...res, ...arr1.slice(i), ...arr2.slice(j)];
}

Q:Vue里emit和on如何实现“发起然后更新”这样一个过程
A:

  • $emit: 用于触发/发起一个自定义事件
  • $on: 用于监听/订阅一个自定义事件

父子组件之间:子组件发起(emit),父组件监听(on)并更新

<!-- 子组件 Child.vue -->
<template>
  <button @click="sendMessage">发送消息</button>
</template>

<script>
export default {
  methods: {
    sendMessage() {
      // 发起/触发一个名为'message-sent'的事件,并附带数据
      this.$emit('message-sent', { text: 'Hello from child!' });
    }
  }
}
</script>
<!-- 父组件 Parent.vue -->
<template>
  <div>
    <child @message-sent="handleMessage"></child>
    <p>收到的消息: {{ receivedMessage }}</p>
  </div>
</template>

<script>
import Child from './Child.vue';

export default {
  components: { Child },
  data() {
    return {
      receivedMessage: ''
    };
  },
  methods: {
    // 监听/处理子组件发出的事件
    handleMessage(payload) {
      this.receivedMessage = payload.text; // 更新数据
      console.log('收到消息:', payload.text);
    }
  }
}
</script>

Q:一个平铺数组如何变成树
A:

const flatArray = [
    { id: 1, pid: 0, children: [{ id: 2, pid: 1, children: null }] },
    { id: 3, pid: 0, children: null }
];

function normalizeTree(node) {
    if (node.children === null) {
        node.children = [];
    } else if (Array.isArray(node.children)) {
        node.children.forEach(normalizeTree);
    }
    return node;
}

const tree = flatArray.map(normalizeTree);
console.log(tree);

Q:Nuxt.js有了解吗
A:一个基于Vue.js的SSR服务端渲染和静态站点生成的SSG框架,用于构建高性能、SEO友好的现代web应用,它简化了Vue.js的开发流程。
核心:多种渲染模式,服务端渲染,静态站点生成,单页应用,混合渲染。
无需手动vue-router,内置代码分割,预加载,支持HMR。
适合博客、电商、后台管理系统、全栈应用。

Q:代码分割是为了什么,在什么场景下用
A:

  • ESM代码分割:() => import(组件),实现动态引入。
  • WebPack代码分割:需要性能优化的场景下使用,减少包体积,给浏览器缓存,包分得多了,如果只改一部分js代码,就不需要整个js重新加载。
    WebPack分割配置:
// webpack.config.js
module.exports = {
    // ...
    optimization: {
        splitChunks: {
            chunks: 'all', // 对所有模块进行优化(包括同步和异步)
            minSize: 20000, // 生成 chunk 的最小体积(20KB)
            minRemainingSize: 0,
            minChunks: 1, // 被引用次数 >=1 才会被拆分
            maxAsyncRequests: 30, // 最大异步请求数(默认 30)
            maxInitialRequests: 30, // 入口点的最大并行请求数(默认 30)
            enforceSizeThreshold: 50000, // 强制拆分阈值(50KB)
            cacheGroups: {
                // 拆分第三方库(node_modules)
                vendors: {
                    test: /[\\/]node_modules[\\/]/,
                    priority: -10, // 优先级
                    reuseExistingChunk: true,
                    name: 'vendors', // 输出文件名(如 vendors.js)
                },
                // 拆分公共代码(被多个入口引用)
                common: {
                    minChunks: 2, // 至少被 2 个入口引用
                    priority: -20,
                    reuseExistingChunk: true,
                    name: 'common', // 输出文件名(如 common.js)
                },
            },
        },
    },
};

Q:v-model如何实现的
A:它实现了表单输入和应用状态之间的双向数据绑定。本质上是语法糖,结合了数据绑定和事件监听。

<custom-input v-model="message"></custom-input>
// 相当于是 v-bind + v-on 的语法糖
<custom-input 
  :value="message"  // 将 value 属性绑定到 Vue 实例的 message 数据
  @input="message = $event.target.value" // 监听 input 事件,当输入值变化时更新 message
></custom-input>

// 组件内部需要:
// 接收 value 这个prop
// 在值变化时触发 input 事件
Vue.component('custom-input', {
    props: ['value'],
    template: `
      <input
        :value="value"
        @input="$emit('input', $event.target.value)"
      >
    `
  })

底层实现机制:
模板编译:Vue 编译器将模板中的 v-model 转换为 v-bind:value 和 v-on:input
AST 转换:生成抽象语法树时处理 v-model 指令
数据绑定:通过 Object.defineProperty 或 Proxy 实现响应式
事件监听:建立事件监听器,在事件触发时更新数据

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2396390.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ESP8285乐鑫SOCwifi芯片32bit MCU和2.4 GHz Wi-Fi

简介 ESP8285 拥有完整的且⾃成体系的 Wi-Fi ⽹络功能&#xff0c;既能够独⽴应⽤&#xff0c;也可以作为从机搭载于其他主机 MCU 运⾏。当 ESP8285 独⽴应⽤时&#xff0c;能够直接从外接 flash 中启动。内置的⾼速缓冲存储器有利于提⾼系统性能&#xff0c;并且优化存储系统。…

DL00916-基于深度学习的金枪鱼各类别目标检测含完整数据集

文末有获取方式 &#x1f680; 基于深度学习的金枪鱼目标检测——开创智能识别新领域&#xff01; 在计算机视觉和深度学习的快速发展中&#xff0c;目标检测 技术已成为提升行业效率的核心利器。而对于海洋生物领域&#xff0c;尤其是金枪鱼的 目标检测&#xff0c;更是填补了…

不可变集合类型转换异常

记录一个异常&#xff1a;class java.util.ImmutableCollections$ListN cannot be cast to class java.util.ArrayList (java.util.ImmutableCollections$ListN and java.util.ArrayList 文章目录 1、原因2、解决方式一3、解决方式二4、关于不可变集合的补充4.1 JDK8和9的对比4…

【PyQt5】从零开始的PyQt5 - QLabel篇

从零开始的PyQt5 - QLabel篇 引言一、简述二、例程2.1 显示到QWidget窗口上2.2 重新设置Label大小和对齐方式2.3 添加内容&#xff0c;设置边框2.4 显示富文本 三、参考 引言 QLabel主要用于显示文本或图像&#xff0c;不提供用户交互功能。本文主要简述PyQt5中的QLabel以及展…

多模态AI的企业应用场景:视觉+语言模型的商业价值挖掘

关键词&#xff1a;多模态AI | 视觉语言模型 | 企业应用 | 商业价值 | 人工智能 &#x1f4da; 文章目录 一、引言&#xff1a;多模态AI时代的到来二、多模态AI技术架构深度解析三、客服场景&#xff1a;智能化服务体验革命四、营销场景&#xff1a;精准投放与创意生成五、研…

数据结构(7)树-二叉树-堆

一、树 1.树的概述 现实生活中可以说处处有树。 在计算机里&#xff0c;有一种数据结构就是像现实中的树一样&#xff0c;有根&#xff0c;有分支&#xff0c;有叶子&#xff1b;一大片树就叫做森林。 这些性质抽象到计算机里也叫树&#xff0c;大致长这个样子&#xff1a; …

怎么快速判断一款MCU能否跑RTOS系统

最近有朋友在后台中私信我&#xff0c;说现在做项目的时候有时候总是会考虑要不要用RTOS&#xff0c;或者怎么考量什么时候该用RTOS比较好、 关于这个问题&#xff0c;我个人也是深有感触的&#xff0c;做开发这么久了&#xff0c;大大小小的产品都做过不少了。有用RTOS开发的…

使用原生前端技术封装一个组件

封装导航栏 navbar-template.html <header><nav><ul><li><a href"index.html"><i class"fas fa-home"></i> 主页</a></li><li><a href"#"><i class"fas fa-theate…

lesson04-简单回归案例实战(理论+代码)

理解线性回归及梯度下降优化 引言 在机器学习的基础课程中&#xff0c;我们经常遇到的一个重要概念就是线性回归。今天&#xff0c;我们将深入探讨这一主题&#xff0c;并通过具体的例子来了解如何利用梯度下降方法对模型进行优化。 线性回归简介 线性回归是一种统计方法&a…

Java 面试中的数据库设计深度解析

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点睡觉 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 文章目录 Java 面试中的数据库设计深度解析一、数据库…

国内首发!具有GPU算力的AI扫描仪

奥普思凯重磅推出的具有GPU算力的扫描仪&#xff0c;是一款真正意义上的AI扫描仪&#xff0c;奥普思凯将嵌有OCR发票识别核心的高性能NPU算力棒与高速扫描仪相结合&#xff0c;实现软件硬件相结合&#xff0c;采用一体化外观设计&#xff0c;实现高速扫描、快速识别表单&#x…

【开发技巧指北】IDEA修改默认绑定Maven的仓库地址

【开发技巧指北】IDEA修改默认绑定Maven的仓库地址 Microsoft Windows 11 家庭中文版 IIntelliJ IDEA 2025.1.1.1 默认的IDEA是有自己捆绑的Maven的&#xff08;这是修改完毕的截图&#xff09; 修改默认的Maven配置&#xff0c;路径是IDEA安装路径下的plugins D:\Softwares\I…

【2025最新】Java图书借阅管理系统:从课程作业到实战应用的完整解决方案

【2025最新】Java图书借阅管理系统&#xff1a;从课程作业到实战应用的完整解决方案 目录 【2025最新】Java图书借阅管理系统&#xff1a;从课程作业到实战应用的完整解决方案**系统概述** **核心功能模块详解****1. 系统登录与权限控制****2. 借阅管理模块****3. 用户角色管理…

springcloud openfeign 请求报错 java.net.UnknownHostException:

现象 背景 项目内部服务之间使用openfeign通过eureka注册中心进行服务间调用&#xff0c;与外部通过http直接调用。外部调用某个业务方提供的接口需要证书校验&#xff0c;因对方未提供证书故设置了忽略证书校验代码如下 Configuration public class IgnoreHttpsSSLClient {B…

【harbor】--配置https

使用自建的 CA 证书来自签署和启用 HTTPS 通信。 &#xff08;1&#xff09;生成 CA认证 使用 OpenSSL 生成一个 2048位的私钥这是 自建 CA&#xff08;证书颁发机构&#xff09; 的私钥&#xff0c;后续会用它来签发证书。 # 1创建CA认证 cd 到harbor [rootlocalhost harbo…

OptiStruct实例:消声器前盖ERP分析(2)RADSND基础理论

13.2 Radiated Sound Output Analysis( RADSND ) RADSND 方法通过瑞利积分来求解结构对外的辐射噪声。其基本思路是分为两个阶段&#xff0c;如图 13-12 所示。 图13-12 结构辐射噪声计算示意图 第一阶段采用有限元方法&#xff0c;通过频响分析(模态叠加法、直接法)工况计算结…

barker-OFDM模糊函数原理及仿真

文章目录 前言一、巴克码序列二、barker-OFDM 信号1、OFDM 信号表达式2、模糊函数表达式 三、MATLAB 仿真1、MATLAB 核心源码2、仿真结果①、barker-OFDM 模糊函数②、barker-OFDM 距离分辨率③、barker-OFDM 速度分辨率④、barker-OFDM 等高线图 四、资源自取 前言 本文进行 …

3.RV1126-OPENCV 图像叠加

一.功能介绍 图像叠加&#xff1a;就是在一张图片上放上自己想要的图片&#xff0c;如LOGO&#xff0c;时间等。有点像之前提到的OSD原理一样。例如&#xff1a;下图一张图片&#xff0c;在左上角增加其他图片。 二.OPENCV中图像叠加常用的API 1. copyTo方法进行图像叠加 原理…

使用 HTML + JavaScript 实现一个日历任务管理系统

在现代快节奏的生活中&#xff0c;有效的时间管理变得越来越重要。本项目是一个基于 HTML 和 JavaScript 开发的日历任务管理系统&#xff0c;旨在为用户提供一个直观、便捷的时间管理工具。系统不仅能够清晰地展示当月日期&#xff0c;还支持事件的添加、编辑和删除操作&#…

车载诊断架构SOVD --- 车辆发现与建连

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 钝感力的“钝”,不是木讷、迟钝,而是直面困境的韧劲和耐力,是面对外界噪音的通透淡然。 生活中有两种人,一种人格外在意别人的眼光;另一种人无论…