前端面试每日三题 - Day 10

news2025/4/22 5:13:27

这是我为准备前端/全栈开发工程师面试整理的第十天每日三题练习,涵盖:

  • JavaScript 中 this 的指向详解与常见陷阱
  • Vue 生命周期钩子的执行顺序与场景实践(Vue2 vs Vue3)
  • 系统设计实战:内容推荐系统的核心架构设计

✅ 题目 1:JavaScript 中 this 的指向详解与常见陷阱

📘 解析:

this 是 JavaScript 中最容易误解的机制之一,它的指向取决于函数的调用方式,而不是定义方式。

📌 常见场景:

  1. 普通函数调用:
function sayName() {
  console.log(this.name);
}

const name = 'Global';
sayName(); // this -> window(严格模式下为 undefined)
  1. 对象方法调用:
const user = {
  name: 'Alice',
  sayName() {
    console.log(this.name);
  }
};
user.sayName(); // this -> user
  1. 构造函数调用:
function Person(name) {
  this.name = name;
}
const p = new Person('Tom'); // this -> 实例对象 p
  1. 箭头函数:不绑定自己的 this,继承外层作用域的 this
const obj = {
  name: 'Arrow',
  sayName: () => {
    console.log(this.name);
  }
};
obj.sayName(); // undefined(this -> window)
  1. 手动绑定:call、apply、bind
function show() {
  console.log(this.name);
}
const user = { name: 'Bob' };
show.call(user); // Bob

🧠 记忆脑图建议:

  • this 绑定优先级图谱:new > bind > call/apply > 对象方法 > 全局
  • 场景联想 + 函数调用方式分类

✅ 题目 2:Vue 生命周期钩子的执行顺序与场景实践(Vue2 vs Vue3)

📘 解析:

Vue 生命周期是组件开发的核心。Vue 2 和 Vue 3 的生命周期略有差异,Vue 3 引入了 Composition API 和 setup(),更适合逻辑复用。

📌 Vue 2 生命周期钩子:

beforeCreate → created → beforeMount → mounted → beforeUpdate → updated → beforeDestroy → destroyed
export default {
  data() {
    return { msg: "hello" };
  },
  created() {
    console.log("created");
  },
  mounted() {
    console.log("mounted");
  },
  destroyed() {
    console.log("destroyed");
  }
};

📌 Vue 3 生命周期对比:

Vue 3 使用 Composition API:

import { onMounted, onUpdated, onUnmounted } from "vue";

export default {
  setup() {
    onMounted(() => {
      console.log("mounted");
    });

    onUpdated(() => {
      console.log("updated");
    });

    onUnmounted(() => {
      console.log("unmounted");
    });
  }
}
生命周期阶段Vue 2 Options APIVue 3 Composition API
创建阶段createdsetup()
挂载阶段mountedonMounted
更新阶段updatedonUpdated
销毁阶段destroyedonUnmounted

🔍 使用场景实践:

  • 数据初始化:created/setup
  • DOM 依赖操作:mounted/onMounted
  • 清理定时器或监听器:beforeDestroy/destroyedonUnmounted

🧠 记忆脑图建议:

  • 对比图 + 适用场景
  • 生命周期流程图,标注 Composition API 对应钩子

✅ 题目 3:系统设计-内容推荐系统的核心架构设计

📘 解析:

内容推荐系统广泛用于新闻、视频、短内容类产品,核心目标是“个性化”和“实时性”。

🔧 架构核心模块:

  1. 用户行为采集层:

    • 点击、浏览、点赞、分享、停留时间
    • 使用前端埋点系统或 SDK 上传
  2. 日志流处理层(实时处理):

    • Kafka/Flume -> Spark/Flink 实时计算
    • 构建用户画像、行为标签、热度指标
  3. 推荐引擎服务层:

    • 协同过滤算法(基于用户/内容相似性)
    • 内容召回 + 精排模型(CTR、深度学习模型)
    • AB 测试平台支持多策略灰度上线
  4. 缓存与接口服务层:

    • Redis 存储用户推荐结果
    • Node.js/Go 实现高性能接口(GraphQL/REST)
  5. 前端展示层:

    • 按模块展示推荐内容(新闻流/短视频流)
    • 滚动加载、懒加载、智能曝光统计
用户点击行为
埋点数据采集
Kafka 日志流
实时处理引擎 Flink
用户画像系统
推荐服务 API
前端展示内容

示例:推荐结果缓存接口(Node.js)

app.get('/api/recommend', async (req, res) => {
  const userId = req.query.userId;
  const cached = await redis.get(`recommend:${userId}`);
  if (cached) return res.send(JSON.parse(cached));

  const result = await recommendService.getForUser(userId);
  await redis.set(`recommend:${userId}`, JSON.stringify(result), 'EX', 60);
  res.send(result);
});

🧠 记忆脑图建议:

  • 推荐系统五层架构图
  • 算法策略流程图 + 示例

🧾 今日总结

题目涉及知识点关键收获
this 指向机制JavaScript掌握不同调用方式下 this 的指向与绑定规则
Vue 生命周期对比Vue2 vs Vue3掌握生命周期钩子变化,结合场景实践
内容推荐系统设计系统设计理解推荐架构的五大模块及前端接口优化

📅 明日预告

  • JavaScript 模块化发展历程与 ES Modules
  • React 中的 Fiber 架构解析
  • 统设计实战:图片/视频 CDN 分发系统设计

💡 坚持每天进步一点点,面试成功自然水到渠成!加油,未来的前端大牛!

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

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

相关文章

elasticsearch中文分词器插件下载教程

一、下载原因: 我们的业务中通常使⽤的是中⽂分词,es的中⽂分词默认会将中⽂词每个字看成⼀个词⽐如:“我想吃⾁夹馍”会被分为”我”,”想”,”吃”,”⾁” ,”夹”,”馍” 这显然是…

门面模式与适配器模式

一、门面模式 门面模式:提供统一接口访问子系统接口 1、包含角色 外观系统对外的统一接口子系统类的集合;并不知道外观角色的存在,需要为了配合外观角色而做特殊处理或修改 2、举例 原本开关灯要分别操作各个房间的灯,现在设置总…

QSS【QT】

文章目录 QSSid选择器 & 类型选择器伪类选择器盒子模型 QSS 设置样式的时候,是可以指定某个控件来设置的。 指定控件之后,此时的样式就会针对这个指定的控件,也会针对子控件生效 ui->pushButton_2->setStyleSheet("QPushButt…

css 中float属性及clear的释疑

float属性可以让元素脱离文档流&#xff0c;父元素中的子元素设置为float,则会导致父元素的高度塌陷。 <style type"text/css"> .father{ /*没有给父元素定义高度*/background:#ccc; border:1px dashed #999; } .box01,.box02,.box0…

BH1750光照传感器---附代码

目录 BH1750简介BH1750指令集BH1750工作流程 BH1750简介 VCC-->电源正&#xff1b; ADDR-->地址端口&#xff1b; GND-->电源负&#xff1b; PA5-->SDA-->I2C数据线&#xff1b; PA3-->SCL-->I2C时钟线&#xff1b; DVI-->I2C端口参考电压&#xff1b…

蔡浩宇的AIGC游戏革命:从《原神》到《Whispers》的技术跨越

目录 引言&#xff1a;游戏行业的AI革命前夜 一、《Whispers》的技术突破与市场挑战 1.1 多模态AI技术的集成应用 1.2 与传统游戏的差异化体验 1.3 面临的商业化难题 二、从《原神》到《Whispers》的技术演进 2.1 《原神》成功的时代因素分析 2.2 蔡浩宇的技术路线转变 …

前端vue+typeScritp+elementPlus基础页面实现:

效果&#xff1a; 前端代码&#xff1a; index.vue: <template><el-container><el-main><el-card class"search-card" shadow"never"><transition :enter-active-class"proxy?.animate.searchAnimate.enter" :le…

leetcode第20题(有效的括号)

思路解析&#xff08;使用栈&#xff09;&#xff1a; 使用一个栈来保存左括号。 每当遇到一个右括号时&#xff0c;检查栈顶元素是否是匹配的左括号。 如果匹配&#xff0c;则弹出栈顶元素&#xff1b; 如果不匹配或者栈为空&#xff0c;则说明无效&#xff1b; 最后如果栈…

超简单的git学习教程

本博客仅用于记录学习和使用 前提声明全部内容全部来自下面廖雪峰网站&#xff0c;如果侵权联系我删除 0.前言 相信有不少人被推荐那个游戏学习git&#xff0c;一个不止我一个完全没学习过的进去后一脸懵&#xff0c;半天都通不过一关然后就放弃了&#xff0c;我个人觉得那个…

【DVWA File Upload 漏洞实战指南】(Low / Medium / High 全级别解析)

前言 文件上传功能是 Web 应用中非常常见的一种功能&#xff0c;用于上传头像、文档、图片等文件。但如果验证不当&#xff0c;攻击者可能上传恶意脚本&#xff0c;进而控制服务器。在 DVWA 中&#xff0c;File Upload 模块专门设计用于演练此类漏洞的不同防御等级。 一、Low …

iPhone 13P 换超容电池,一年实记的“电池循环次数-容量“柱状图

继上一篇 iPhone 13P 更换"移植电芯"和"超容电池"&#x1f50b;体验&#xff0c;详细记录了如何更换这两种电池&#xff0c;以及各自的优略势对比。 一晃一年过去&#xff0c;时间真快&#xff0c;这次分享下记录了使用超容电池的 “循环次数 - 容量(mAh)…

【集群IP管理分配技术_DHCP】一、DHCP技术概念与快速上手

在网络技术飞速发展的今天&#xff0c;动态主机配置协议&#xff08;DHCP&#xff09;作为网络中自动分配 IP 地址及相关配置参数的重要工具&#xff0c;极大地简化了网络管理流程。然而&#xff0c;随着网络规模的不断扩大和应用场景的日益复杂&#xff0c;传统 DHCP 在灵活性…

Tailwindcss 入门 v4.1

以 react 为例&#xff0c;步骤如下&#xff1a; npm create vitelatest my-app -- --template react 选择 React 和 JavaScript 根据上述命令的输出提示&#xff0c;运行以下命令 cd my-app npm install npm run dev 一个 React App 初始化完成。 安装 Tailwindcss theme …

【Linux】NAT、代理服务、内网穿透

NAT、代理服务、内网穿透 一. NAT1. NAT 技术2. NAT IP 转换过程3. NAPT 技术4. NAT 技术的缺陷 二. 代理服务器1. 正向代理2. 反向代理3. NAT 和代理服务器 内网穿透内网打洞 一. NAT NAT&#xff08;Network Address Translation&#xff0c;网络地址转换&#xff09;技术&a…

PCA——主成分分析数学原理及代码

主成分分析 PCA的目的是&#xff1a;对数据进行一个线性变换&#xff0c;在最大程度保留原始信息的前提下去除数据中彼此相关的信息。反映在变量上就是说&#xff0c;对所有的变量进行一个线性变换&#xff0c;使得变换后得到的变量彼此之间不相关&#xff0c;并且是所有可能的…

【技术派后端篇】Redis实现统计计数

在互联网项目中&#xff0c;计数器有着广泛的应用场景。以技术派项目为例&#xff0c;诸如文章点赞数、收藏数、评论数以及用户粉丝数等都离不开计数器的支持。在技术派源码中&#xff0c;提供了基于数据库操作记录实时更新和基于 Redis 的 incr 特性实现计数器这两种方案&…

JavaWeb 课堂笔记 —— 16 MyBatis 动态SQL

本系列为笔者学习JavaWeb的课堂笔记&#xff0c;视频资源为B站黑马程序员出品的《黑马程序员JavaWeb开发教程&#xff0c;实现javaweb企业开发全流程&#xff08;涵盖SpringMyBatisSpringMVCSpringBoot等&#xff09;》&#xff0c;章节分布参考视频教程&#xff0c;为同样学习…

Deepseek输出的内容如何直接转化为word文件?

我们有时候会直接利用deepseek翻译别人的文章或者想将deepseek输出的内容直接复制到word文档里。但是文本格式和word是不对应的。这时候需要输入如下命令&#xff1a; 以上翻译内容的格式和排版要求如下&#xff1a; 1、一级标题 字体为黑体&#xff08;三号&#xff09;&…

AI融合SEO关键词实战指南

内容概要 随着人工智能技术的迭代升级&#xff0c;SEO关键词策略正经历从人工经验驱动向数据智能驱动的范式转变。本指南聚焦AI技术在搜索引擎优化中的系统性应用&#xff0c;通过构建多层技术框架实现关键词全生命周期管理。核心方法论涵盖语义分析引擎的构建原理、基于NLP的…

快速入手-基于python和opencv的人脸检测

1、安装库 pip install opencv-python 如果下载比较卡的话&#xff0c;指向国内下载地址&#xff1a; pip3 install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple 2、下载源码 https://opencv.org/ windows11对应的版本下载&#xff1a; https://pan.baidu…