【每日前端面经】2023-02-29

题目来源: 牛客

如何理解前端这个岗位

简单地说就是设计师做好网页效果图,前端将效果图转化成页面,之后交给后端程序员,中间的这段工作就是前端

浏览器如何渲染HTML

  • 将载入的HTML文件解析成DOM树,并且将各个标记标识解析成DOM树的各个节点
  • 将解析成的DOM树和CSS规则树进行关联生成渲染树
  • 进入布局阶段,为DOM树的每个节点分配在屏幕上出现的确切坐标
  • 进入绘制阶段,在这里渲染引擎的工作就结束了,接下来就交给后端对渲染树的每个节点进行绘制,呈现出页面效果

重绘会引起重排么

重绘是指某些元素的外观被改变,重拍是指重新生成布局排列元素。单单改变元素的外观,肯定不会引起网页重新生成布局,但当浏览器完成重拍之后,将会重新绘制受到此次重排影响的部分。也就是说:重绘不一定导致重排,但重排一定会导致重绘

使用scale属性会引起重绘还是重排

scale只能引起重绘而不是重排,transform的所有属性都不会引起重排

浏览器事件循环

  • 执行同步代码
  • 执行宏任务
  • 将微任务添加到任务队列
  • 宏任务执行完毕后,执行任务队列

图片懒加载

简单来说,就是如果可视区域里面看不到图片,就先不加载图片

js 复制代码
addEventListener("scroll", () => {
    const images = document.querySelectorAll('img');
    images.forEach(image => {
        const clientHeight = document.documentElement.clientHeight;
        const scrollTop = document.documentElement.scrollTop;
        if (image.offsetTop < clientHeight + scrollTop) {
            image.setAttribute('src', image.getAttribute('data-src'));
        }
    });
});

路由懒加载

当打包构建应用时,JS包会变得非常大,影响页面加载。如果把不同路由对应的组件分割成不同的代码块,然后当路由被访问的时候才加载对应组件,这样就更加高效了

  • Vue异步组件
  • ES6标准import()
  • webpack的require/ensure

路由鉴权

  • 路由拦截
  • 动态路由

请求拦截器

  • HandlerInterceptor: 拦截的目标为请求的地址
  • ClientHttpRequestInterceptor: 拦截的目标为请求的方法
  • RequestInterceptor: 对RestTemplate的请求进行拦截
  • AsyncClientHttpRequestInterceptor: Feign拦截器,也就是一个HTTP拦截器

堆栈和队列

  • 堆栈:最后一个放入堆栈中的物体总是最先被拿出来,这个特性通常被称为后进先出
  • 队列:先进入队列中的元素总是最先被拿出来,被称为先进先出

对链表的理解

链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链次序连接的,由一系列结点组成。分为单链表、循环链表、双向链表、双向循环链表等

数组和链表的存储结构

  • 数组的内存空间是连续的,可以通过索引快速访问任意位置的元素,适合于按照顺序存储和快速访问数据的场景
  • 链表的空间可以是不连续的,适合在中间位置插入或删除元素,适合与频繁变动数据集合的场景

数组的长度限制

根据ES5的规范,数组的最大长度由一个无符号32位整数绑定,因此最长的数组由 2 32 − 1 个 2^{32}-1个 232−1个元素

附件的上传和下载怎么实现

  • 上传: 先获取到文件对象然后利用表单FormData对象进行传输
  • 下载: 手动新建一个a标签然后自动触发下载

获得树中某个节点的层级

js 复制代码
class Node {
    value: string;
    lchild: Node;
    rchild: Node;
}

function getLevel(head, target, level=1) {
    if (head === null) return 0;
    if (head.value === target.value) {
        return level;
    } else {
        l = getLevel(head.lchild, target, level + 1);
        if (l !== 0) return l;
        return getLevel(head.rchild, target, level + 1);
    }
}

前端开发是做什么的?工作职责有哪些?
浏览器是如何解析和渲染HTML的🔥🔥🔥
重排(reflow)和重绘(repaint)
css zoom和scale的使用
浏览器事件循环看这一篇就够了
浅析图片懒加载(三种实现方法与两种优化方式)
vue-router路由懒加载以及三种实现方式
vue-鉴权的两种方法之路由拦截
几种常见的拦截器使用
数组与链表:数据存储结构的比较
面试官:说说你对链表的理解?常见的操作有哪些?
GuoXY
7-5 求二叉树中指定节点的层次
js数组有最大长度吗?

复制代码
新人发文,礼貌球馆❤️
相关推荐
丑陋小蚊子4 小时前
项目数据不能公开,就写清交付物
面试·求职招聘·大学生·简历·简历下载
2601_949950638 小时前
练题簿在线免费刷题 从资料整理到考前自测
面试·职场和发展·pdf·word·刷题
福兮说9 小时前
设计稿是 #4A7C6F,页面量出来是 #4B7C6F:HEX、HSL、透明度、canvas 来回转的七个坑
前端·javascript·css·canvas
时间的拾荒人9 小时前
Qt 多线程详解:从 QThread 到实战
开发语言·qt·面试
海绵宝宝转agent9 小时前
MySql高频面试八股开源笔记总结
mysql·面试·开源
郑州光合科技余经理10 小时前
海外版外卖加盟:总站与分站配送规则怎么分开管
java·开发语言·前端·后端·uni-app·php·ai编程
小呆呆66610 小时前
副业搞起来,小说,漫画,漫剧的成本优化思路
前端·后端·面试
Dovis(誓平步青云)10 小时前
浇水提醒刚弹出又消失,植物状态别只存一个百分比
开发语言·前端·javascript·pdf·ecmascript·电脑
lsc_blog11 小时前
远程和居家办公的经历,技术简历上怎么摆
面试·职场和发展·重构·pdf·求职招聘
码艺-Alimjan11 小时前
Vben Admin 新增维吾尔语 Vben-Modal的关键坑之一
前端·javascript·vue.js