Javascript前端基础面试(十)

news2024/9/24 10:28:04

MVVM

Vue MVVM这一篇就够啦!_vue r mvvm-CSDN博客

点容器内的图标,图标边框变成border 1px solid red,点空白处重置
 

<div id="container">  
    <img src="icon.png" alt="Icon" class="icon">  
    <!-- 这里可以添加更多的图标或内容 -->  
</div>
-----------------------------------------------------------------------
css
.icon {  
    border: 1px solid transparent; /* 透明边框,用于确保图标始终有边框 */  
    /* 其他样式 */  
}
---------------------------------------------------------------------
js
// 获取容器和图标  
var container = document.getElementById('container');  
var icons = container.querySelectorAll('.icon');  
  
// 为每个图标添加点击事件  
icons.forEach(function(icon) {  
    icon.addEventListener('click', function(e) {  
        // 阻止事件冒泡到容器(可选,取决于你的具体需求)  
        // e.stopPropagation();  
  
        // 将图标的边框设置为红色  
        this.style.border = '1px solid red';  
    });  
});  
  
// 为容器添加点击事件,用于重置图标边框  
container.addEventListener('click', function(e) {  
    // 检查点击的目标是否不是图标  
    if (!e.target.matches('.icon')) {  
        // 重置所有图标的边框  
        icons.forEach(function(icon) {  
            icon.style.border = ''; // 或者设置为默认边框样式  
        });  
    }  
});  
  
// 注意:如果容器内还有其他非图标元素,并且你希望点击这些元素时也重置图标边框,  
// 那么你可能需要调整上述条件检查,或者为这些元素也添加点击事件监听器。

简单实现双向数据绑定MVVM

<input id= " input" / >
const data = {};
const input = document.getElementById( 'input ' );
0bject.defineProperty(data,'text', {
   set(value) {
      input.value = value ;
      this .value = value;
    }
  });
input.onChange = function(e) {data.text = e.target .value;}

实现Storage,使得该对象为单例,并对localStorage进行封装设置值setltem(key,value)和getltem(key,value)

class StorageSingleton {  
    // 静态私有变量,用于存储实例  
    static instance = null;  
  
    // 私有构造函数,防止外部直接实例化  
    private constructor() {}  
  
    // 静态方法,用于获取实例  
    static getInstance() {  
        if (!this.instance) {  
            this.instance = new StorageSingleton();  
        }  
        return this.instance;  
    }  
  
    // 封装setItem方法  
    setItem(key, value) {  
        try {  
            // 调用localStorage的setItem方法  
            localStorage.setItem(key, value);  
        } catch (error) {  
            console.error('Failed to set item in localStorage:', error);  
        }  
    }  
  
    // 封装getItem方法  
    getItem(key) {  
        try {  
            // 调用localStorage的getItem方法  
            return localStorage.getItem(key);  
        } catch (error) {  
            console.error('Failed to get item from localStorage:', error);  
            return null; // 或者根据需要返回特定的错误值  
        }  
    }  
  
    // (可选)可以添加其他localStorage操作方法  
}  
  
// 使用示例  
const storage = StorageSingleton.getInstance();  
storage.setItem('username', 'JohnDoe');  
console.log(storage.getItem('username')); // 输出: JohnDoe  
  
// 再次尝试获取实例,仍然是同一个实例  
const anotherStorage = StorageSingleton.getInstance();  
console.log(anotherStorage === storage); // 输出: true

事件循环

浏览器工作原理与Javascript高级(前后端异步)-CSDN博客

Javascript事件循环应用—nextTick()详解_js nexttick-CSDN博客

首先,js 是单线程的,主要的任务是处理用户的交互,而用户的交互无非就是响应DOM的增删改,使用事件队列的形式,一次事件循环只处理一个事件响应,使得脚本执行相对连续,所以有了事件队列,用来储存待执行的事件,那么事件队列的事件从哪里被push进来的呢。那就是另外一个线程叫事件触发线程做的事情了,他的作用主要是在定时触发器线程、异步 HTTP请求线程满足特定条件下的回调函数 push到事件队列中,等待js 引擎空闲的时候去执行,当然js引擎执行过程中有优先级之分,首先js引擎在一次事件循环中,会先执行js线程的主任务,然后会去查找是否有微任务
microtask ( promise),如果有那就优先执行微任务,如果没有,在去查找宏任务macrotask ( setTimeout、setInterval)进行执行

为什么canvas图片有跨域问题

JavaScript 中使用 Canvas 绘制图片时遇到的跨域问题(CORS, Cross-Origin Resource Sharing)主要是因为浏览器安全策略的限制。这些策略旨在保护用户的数据安全,防止恶意网站读取用户设备上存储的敏感信息,如图片等。

当你尝试在 Canvas 上绘制一个来自不同源(域名、协议或端口不同)的图片时,浏览器会首先检查这个图片是否允许跨域访问。这是因为 Canvas 的强大功能(如 toDataURL() 或 toBlob() 方法)可以将 Canvas 的内容转换为图像文件,这可能会涉及到用户隐私的泄露,特别是如果 Canvas 绘制了来自不同源的敏感图片。

 

说说从输入URL到看到页面发生的全过程

从在浏览器中输入URL到最终看到页面的全过程是一个复杂且多步骤的过程,涉及到了网络协议、浏览器解析、渲染引擎等多个组件的协同工作。下面我将尽量详细地描述这个过程:

1. URL解析

  • 输入URL:用户在浏览器的地址栏中输入一个URL并按下回车键。
  • URL解析:浏览器首先会对输入的URL进行解析,确定其协议(如HTTP或HTTPS)、域名(如www.example.com)、端口(如80或443,默认为80或443)、路径(如/index.html)以及查询参数(如?name=value)和锚点(如#section)。

2. DNS查询

  • 域名解析:由于浏览器无法直接通过域名与服务器通信,它需要将域名解析为IP地址。这个过程称为DNS解析。浏览器会向DNS服务器发送一个请求,DNS服务器返回对应的IP地址。

3. 建TCP连接立

  • TCP握手:拿到IP地址后,浏览器会向该IP地址的指定端口(HTTP默认为80,HTTPS为443)发起TCP连接请求,经过三次握手后,TCP连接建立成功。

4. 发送HTTP请求

  • 构建请求:浏览器构建HTTP请求,包括请求行(如GET /index.html HTTP/1.1)、请求头(如Accept、User-Agent等)以及请求体(对于GET请求,请求体为空)。
  • 发送请求:浏览器将HTTP请求通过TCP连接发送给服务器。

5. 服务器处理请求

  • 接收请求:服务器接收到请求后,根据请求的资源路径、查询参数等信息进行处理。
  • 处理请求:服务器可能会查询数据库、调用其他服务接口、执行文件操作等来生成响应内容。
  • 生成响应:服务器将处理结果封装成HTTP响应,包括状态码(如200 OK)、响应头(如Content-Type、Content-Length等)和响应体(如HTML文档)。

6. 浏览器接收响应

  • 接收响应:浏览器通过TCP连接接收服务器的响应。
  • 解析响应:浏览器解析HTTP响应,提取出HTML文档内容。

7. 渲染页面

  • 构建DOM树:浏览器解析HTML文档,构建出文档对象模型(DOM)树。
  • 构建CSSOM树:同时,浏览器会解析HTML中的CSS(包括内联样式、外部样式表和<style>标签中的样式),构建出CSS对象模型(CSSOM)树。
  • 生成渲染树:将DOM树和CSSOM树结合,生成渲染树(Render Tree),它决定了页面上每个节点的布局和样式。
  • 布局(Layout):浏览器根据渲染树进行布局计算,确定每个节点的位置和大小。
  • 绘制(Paint):将布局的结果绘制到屏幕上,这个过程可能涉及多个图层,浏览器会尽量合并图层以提高性能。
  • 合成(Compositing):如果页面使用了硬件加速,浏览器会将多个图层合成为一个图层,然后将其绘制到屏幕上。

8. 加载资源

  • 异步加载:在渲染页面的同时,浏览器会异步加载图片、CSS文件、JavaScript文件等资源。这些资源的加载和解析过程与上述HTML文档的解析和渲染过程类似,但它们是异步进行的,不会阻塞页面的渲染。

9. 页面加载完成

  • DOMContentLoaded事件:当DOM树构建完成,且所有脚本都加载并执行完毕后,会触发DOMContentLoaded事件。
  • load事件:当所有资源(包括依赖的样式表、脚本、图片等)都加载完毕后,会触发load事件。

以上就是从输入URL到看到页面发生的全过程。这个过程涉及了多个环节和组件的协同工作,每个环节都可能对页面的加载速度和渲染效果产生影响。

 【浏览器篇】4.渲染引擎执行原理_哔哩哔哩_bilibili

手写实现一个Promise

https://segmentfault.com/a/1190000013396601

平面上有若干个不特定的形状,如下图所示。请写程序求出物体的个数,以及每个不同物体的面积。
 

前端面试的一道算法题(使用canvas解答) - 简书

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

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

相关文章

SpringSecurity登录认证流程及源码分析

目录 一 作用 二 流程及源码分析 一 作用 spring security作为spring家族中的一员&#xff0c;它的主要作用有两个&#xff0c;分别是认证和授权。 我们以前在实现登录功能的时候&#xff0c;前端会传来用户名和密码&#xff0c;然后我们根据前端传来的数据从用户表中的数据进…

【AI大模型】分布式训练:深入探索与实践优化

欢迎来到 破晓的历程的 博客 ⛺️不负时光&#xff0c;不负己✈️ 文章目录 一、分布式训练的核心原理二、技术细节与实现框架1. 数据并行与模型并行2. 主流框架 三、面临的挑战与优化策略1. 通信开销2. 数据一致性3. 负载均衡 4.使用示例示例一&#xff1a;TensorFlow中的数据…

深入解析Kubernetes(K8s)的核心技术与应用

一、引言 在云计算和容器化技术迅猛发展的今天&#xff0c;Kubernetes&#xff08;简称K8s&#xff09;凭借其强大的容器编排和管理能力&#xff0c;成为了云原生时代不可或缺的基础设施。本文旨在深入探讨Kubernetes的核心技术、应用场景、优势与挑战&#xff0c;以及如何在实…

图创价值 Live——解锁能源新未来!能源行业图技术解决方案深度探索

随着全球能源结构的深刻变革&#xff0c;能源系统正面临着前所未有的挑战与机遇。新能源的迅猛发展、电力市场化的推进以及电网调度的复杂性不断升级&#xff0c;都对能源系统的智能化、高效化提出了更高要求。为此&#xff0c;我们特别邀请了到了悦数解决方案专家-鲍翰林&…

数据结构第1天作业 7月31日

2.3按位置操作 1&#xff09;按照位置插入数据 void Insert_seqlist_single(Seqlist* sq,int arr_sub,int num){if(sq->posN ){ //判断顺序列表是否为满printf("error");return;}else if(arr_sub<0||arr_sub>sq->pos){printf("error…

微信小程序【五】好玩的点击展开弹框功能

弹出效果 步骤一、index.js步骤二、index.json步骤三、index.wxml步骤四、index.wxss 效果简述&#xff1a;恶搞的好玩点击效果&#xff0c;点击后展开 步骤一、index.js Page({data: {isPlaying: true,animationClass: music-icon,show_menu: false, // 菜单是否激活show_p…

异构算力的调度策略解析与实现

随着云计算、大数据和人工智能技术的飞速发展&#xff0c;异构算力调度成为了一个日益重要的课题。异构算力调度是指针对不同类型的计算资源&#xff08;如CPU、GPU、FPGA等&#xff09;进行合理分配与调度&#xff0c;以提高计算资源的利用率、降低功耗并加速任务执行。本文将…

浮点数的二进制表示

浮点数的二进制表示 浮点数在C/C中对应 float 和 double 类型&#xff0c;我们有必要知道浮点数在计算机中实际存储方式。 IEEE754规定&#xff1a; 单精度浮点数字长32位&#xff0c;尾数长度23&#xff0c;指数长度8,指数偏移量127&#xff1b;双精度浮点数字长64位&#xf…

Yarn UI 时间问题,相差8小时

位置 $HADOOP_HOME/share/hadoop/yarn/hadoop-yarn-common-2.6.1.jar 查看 jar tf hadoop-yarn-common-2.6.1.jar |grep yarn.dt.plugins.js webapps/static/yarn.dt.plugins.js 解压 jar -xvf hadoop-yarn-common-2.6.1.jar webapps/static/yarn.dt.plugins.js inflated: we…

mybatis-plus中出现Field ‘id‘ doesn‘t have a default value问题解决方法

问题分析&#xff1a; 出现这个原因&#xff0c;主要是因为mybatis-plus自身查询的特性&#xff0c;因为查询都是它自己内部设定好的参数&#xff0c;一般为了简便&#xff0c;都会默认自己底层的数据库对应的主键id字段是自增的&#xff0c;也就是mybatis-plus认为不需要id,每…

【Git】.gitignore全局配置与忽略匹配规则详解

设置全局配置 1&#xff09;在C:/Users/用户名/目录下创建.gitignore文件&#xff0c;在里面添加忽略规则。 如何创建 .gitignore 文件&#xff1f; 新建一个.txt文件&#xff0c;重命名&#xff08;包括后缀.txt&#xff09;为 .gitignore 即可。 2&#xff09;将.gitignore设…

Eagle平替?免费超强的素材管理神器!支持多级标签,满足素材快速收集!

作为设计师&#xff0c;你是不是下载了很多类型的素材资源&#xff0c;然而要每次使用的时候&#xff0c;还要通过文件夹一级一级去翻找&#xff0c;非常麻烦&#xff01;还好我找到了一款好用的素材管家神器—千鹿设计助手&#xff0c;如果你之前有用过Eagle或者BillFish的话&…

华为od机试真题:求字符串所有整数最小和(Python)

2024华为OD机试&#xff08;C卷D卷&#xff09;最新题库【超值优惠】Java/Python/C合集 题目描述 1.输入字符串s输出s中包含所有整数的最小和&#xff0c;说明&#xff1a;1字符串s只包含a~z,A~Z,,-&#xff0c; 2.合法的整数包括正整数&#xff0c;一个或者多个0-9组成&…

归并排序 python C C++ 图解 代码 及解析

一&#xff0c;概念及其介绍 归并排序&#xff08;Merge sort&#xff09;是建立在归并操作上的一种有效、稳定的排序算法&#xff0c;该算法是采用分治法(Divide and Conquer&#xff09;的一个非常典型的应用。将已有序的子序列合并&#xff0c;得到完全有序的序列&#xff…

大厂linux面试题攻略三之Shell编程

一、Shell编程文本截取类 1.有一个b.txt文本(内容如下)&#xff0c;要求将所有域名截取出来&#xff0c;并统计重复域名出现的次数 http://www.baidu.com/index.html https://www.atguigu. com/index.html http://www.sina.com.cn/1024.html …

二百四十八、Linux——删除/etc/.sudoers文件进程或修改/etc/.sudoers文件内容

一、目的 安装国产化数据库OceanBase的时候&#xff0c;需要创建用户&#xff0c;并在/etc/.sudoers文件中赋予用户root权限 二、删除/etc/.sudoers文件进程 1 报错 W10: Warning: Changing a readonly file E325: ATTENTION Found a swap file by the name "/etc/.su…

二叉树的性质证明

文章目录 二叉树的概念二叉树的性质1. 若规定根结点的层数为1&#xff0c;则一棵非空二叉树的第i层上最多有 2 i − 1 2^{i-1} 2i−1 个结点.2. 若规定根结点的层数为1&#xff0c;则深度为h的二叉树的最大结点数是 2 h − 1 2^h-1 2h−1.3. 对任何一棵二叉树, 如果度为0其叶结…

C++:函数模板与类模板详解

1.函数模板 在构造函数的时候&#xff0c;我们常常会考虑传入的参数的数据类型&#xff0c;比如我们写一个大小比较的函数mycmp(class1 a,class1 b)&#xff0c;则可以写出class1为int,float,double,string等各个种类的mycmp函数&#xff0c;这样会很麻烦&#xff0c;且当我们…

hot100-7-链表1

160相交链表 206反转链表 234回文链表 可以反转后半部分链表或者反转全部链表&#xff0c;然后对比输出 141环形链表 142环形链表2