当前位置: 首页 > news >正文

2025前端面试题

Vue 3 比 Vue 2 更快的原因

  • Vue 3 使用 JavaScript 的 Proxy 替代了 Vue 2 中的 Object.defineProperty 来实现响应式系统。Proxy 可以拦截对象的所有操作,无需像 Object.defineProperty 那样单独定义每个属性的 getter 和 setter
  • Vue 3 还引入了静态树提升(Static Tree Hoisting)等技术,Vue 3 的编译器会对组件模板进行静态分析,识别出哪些部分是静态的(即在组件生命周期内不会改变的部分),例如纯文本节点或只依赖于常量的节点。这意味着静态节点在组件初始化时只会被创建一次,并在后续渲染中直接复用。

Vue 3 比 Vue 2 更小的原因

  • Tree-shaking自动移除未使用的代码
  • Vue 3 对源代码进行了优化,代码压缩等

git fetch和pull的区别

git fetch
  • 功能:git fetch 用于从远程仓库获取最新的数据,但它不会自动合并这些数据到当前分支。它只是将远程分支的最新状态下载到本地的远程分支引用中(例如 origin/master)。
  • 结果:本地的工作区和当前分支不会发生变化,只是更新了本地的远程分支引用。
  • 适用场景:当你只想查看远程仓库的最新状态,而不希望立即合并到当前分支时,git fetch 是一个很好的选择。它可以帮助你了解远程仓库的最新情况,而不会影响你的本地工作。
git pull
  • 功能:git pull 是 git fetch 和 git merge 的组合命令。它首先从远程仓库获取最新的数据,然后自动将这些数据合并到当前分支。
  • 结果:本地的工作区和当前分支会直接更新,包含远程仓库的最新更改。
  • 适用场景:当你希望直接将远程仓库的最新更改合并到当前分支时,git pull 是一个便捷的命令。它适合在你确定需要更新当前分支的情况下使用。

vue做管理系统,怎么管理权限路由

// src/router/index.js
const routes = [
  {
    path: '/',
    name: 'Home',
    component: () => import('@/views/Home.vue')
  },
  {
    path: '/login',
    name: 'Login',
    component: () => import('@/views/Login.vue')
  }
];

const router = createRouter({
  history: createWebHistory(process.env.BASE_URL),
  routes
});

router.beforeEach(async (to, from, next) => {
  if (!store.state.dynamicRoutes.length) {
    await store.dispatch('generateRoutes');// 获取该角色拥有权限的路由
    store.state.dynamicRoutes.forEach(route => {
      router.addRoute(route);
    });
    return next({ ...to, replace: true }); // 重定向以确保动态路由生效
  }
  next();
});

export default router;

canvas有哪些api

HTML5 Canvas 提供了丰富的 API,用于在网页上绘制图形、图像、文本等内容。以下是 Canvas 的主要 API 分类及其功能:

1. 基本操作

  • 创建 Canvas 元素:通过 <canvas> 标签定义一个绘图区域。
    <canvas id="myCanvas" width="200" height="100"></canvas>
    
  • 获取绘图上下文:通过 getContext 方法获取 2D 或 WebGL 上下文。
    const canvas = document.getElementById("myCanvas");
    const ctx = canvas.getContext("2d");
    

2. 绘制基本形状

  • 矩形
    • fillRect(x, y, width, height):绘制填充矩形。
    • strokeRect(x, y, width, height):绘制矩形边框。
    • clearRect(x, y, width, height):清除指定区域的内容。
  • 圆形
    • arc(x, y, radius, startAngle, endAngle, anticlockwise):绘制圆弧。
  • 路径
    • beginPath():开始一个新的路径。
    • moveTo(x, y):将路径的起点移动到指定位置。
    • lineTo(x, y):绘制一条直线到指定位置。
    • stroke():绘制路径的边框。
    • fill():填充路径。

3. 绘制文本

  • fillText(text, x, y):填充文本。
  • strokeText(text, x, y):绘制文本边框。
  • font:设置文本的字体样式。
ctx.font = "30px Arial";
ctx.fillStyle = "black";
ctx.fillText("Hello, Canvas!", 50, 50);

4. 绘制图像

  • drawImage(image, x, y):绘制图像。
  • drawImage(image, x, y, width, height):绘制并缩放图像。
const img = new Image();
img.src = "example.jpg";
img.onload = function() {
    ctx.drawImage(img, 50, 50, 200, 200);
};

5. 变换与动画

  • 变换
    • translate(x, y):平移画布。
    • rotate(angle):旋转画布。
    • scale(x, y):缩放画布。
  • 动画:通过 requestAnimationFrame 方法实现动画效果。
let x = 50;
function animate() {
    ctx.clearRect(0, 0, canvas.width, canvas.height);
    ctx.fillRect(x, 50, 50, 50);
    x += 1;
    requestAnimationFrame(animate);
}
animate();

6. 样式与颜色

  • fillStyle:设置填充颜色或渐变。
  • strokeStyle:设置边框颜色或渐变。
  • lineWidth:设置线条宽度。
  • lineCap:设置线条端点样式(buttroundsquare)。
  • lineJoin:设置线条连接点样式(bevelroundmiter)。

7. 渐变与阴影

  • 渐变
    • createLinearGradient(x0, y0, x1, y1):创建线性渐变。
    • createRadialGradient(x0, y0, r0, x1, y1, r1):创建径向渐变。
  • 阴影
    • shadowColor:设置阴影颜色。
    • shadowOffsetX:设置阴影水平偏移。
    • shadowOffsetY:设置阴影垂直偏移。
    • shadowBlur:设置阴影模糊程度。

http连接的工作原理

1.浏览器解析网址,提取出目标服务器的域名和端口号(默认端口为 80)。
2.浏览器通过 DNS 解析域名,获取服务器的 IP 地址。
3.浏览器建立一个 TCP 连接到服务器的指定端口。
4.一旦 TCP 连接建立,浏览器会发送一个 HTTP 请求(如GET / HTTP/1.1)。
5.服务器接收到请求后,处理并返回 HTTP 响应。
6.浏览器解析响应内容并展示给用户。

tcp和udp的区别

  • TCP连接的建立需要三次握手,释放连接需要四次挥手,这使得TCP在连接建立和释放时有一定的开销。
    由于没有连接建立和释放的过程,UDP的开销较小,适合对实时性要求较高的应用。
  • TCP保证数据按照发送的顺序到达接收端。
    UDP不保证数据包的顺序,接收端可能会收到乱序的数据包。
  • TCP适合传输大量数据,因为它能够保证数据的完整性和顺序性。
    UDP适合传输小数据量,因为它不需要进行复杂的可靠性控制。
  • UDP适合对实时性要求高的应用:如视频流(如在线视频、视频会议)、音频流(如网络电话)、在线游戏等。这些应用对数据的实时性要求较高,即使丢失少量数据包也不会对用户体验造成太大影响。
  • TCP:
    提供流量控制和拥塞控制:TCP通过滑动窗口机制进行流量控制,以避免发送方发送过多数据导致接收方缓冲区溢出。同时,TCP还通过拥塞控制算法(如慢启动、拥塞避免、拥塞窗口等)来避免网络拥塞。
    UDP:
    不提供流量控制和拥塞控制:UDP不进行流量控制和拥塞控制,因此在网络拥塞时可能会导致大量数据包丢失。

相关文章:

  • C++中std::move()的正确使用相关例子
  • C语言个人笔记
  • 前端面试总结3
  • Lumion 与 Enscape 怎么选?附川翔云电脑适配指南
  • 在3ds Max中视口显示为黑色或深灰色
  • leetcode68.左右文本对齐
  • 《DeepSeek RAG 增强检索知识库系统》Ollama RAG 知识库上传、解析和验证之四
  • mysql 禁止 读 某个 表
  • 第18章:基于Global Context Vision Transformers(GCTx_unet)网络实现的oct图像中的黄斑水肿和裂孔分割
  • 【Audio开发三】音频audio中帧frameSize ,周期大小periodsize,缓冲区buffer原理详解以及代码流程分析
  • 《嵌入式开发实战:基于Linux串口的LED屏显系统设计与实现》
  • Clickhouse试用单机版部署
  • 【完整可用】使用openhtmltopdf生成PDF(带SVG)
  • 策略模式结合模板方法模式
  • Go语言入门-反射4(动态构建类型)
  • PyCharm Community社区版链接WSL虚拟环境
  • 【笔记ing】AI大模型-01大模型基础综述
  • 医学科研工作者的AI助手:高效生成文献结构图和实验流程图
  • U9新开发webapi无授权
  • 使用Docker创建postgres
  • 朝阳做网站的公司/网络营销推广公司
  • 安装wordpress 空白/长沙网站优化推广方案
  • 陕西锦宇建设有限公司网站/百度提交网站的入口地址
  • 金州网站建设/站长之家工具查询
  • 做网站业务的怎么寻找客户/网站没有友情链接
  • 网站背景如何做/seo快速排名优化方法