前端基础(之三)

Q1:介绍一下盒模型

A1:盒模型是用于描述Html在页面总所占空间的方式,盒模型将每个html元素视为一个矩形框,该框主要由四个主要部分组成:内容区域、内边距、边框和外边距。

内容区域是Html元素实际包含内容的部分,如文本、图像或其他嵌套的元素,这是盒模型的核心,决定了元素显示的实际内容。

内边距是内容区域与元素边框之间的空白区域,它可以在css中使用属性padding-top等等。内边距用于控制元素内部内容与边框之间的距离。

边框是围绕内容和内边距的线或边界。边框可以在CSS中使用属性border-width、border-styleh和border-color来设置,它用于装饰和分隔元素的内容。

外边距使元素边框与周围元素之间的空白区域。它可以在CSS中使用属性如margin-top、margin-right、margin-bottom和margin-left来设置。外边距用于控制元素与其他元素之间的距离。

Q2:什么是事件委托?它有什么优势?

A2:事件委托是一种利用事件冒泡机制的编程技巧,它允许将事件处理程序绑定到父元素上,而不是每个子元素上。

优势:减少内存消耗和DOM操作,从而提高性能。通过事件委托,可以在不重新事件处理程序的情况下,动态地添加或删除子元素,同时,新添加的元素也会自动继承之前的事件处理程序。这种设计模式也被称为事件代理,它允许解耦事件处理逻辑,提高代码的可维护性和扩展性。

Q3:什么是闭包?闭包有什么作用?

A3:闭包是一个可以访问其外部词法环境的函数,即使在其外部函数已经执行完毕的情况下,也能保持对外部环境状态的引用。

作用:数据封装;保持状态;控制资源访问;解决变量污染问题;延长变量的声明周期。

Q4:如何实现数组去重? 请写出代码示例

// reduce
var arr = [1,2,3,4,5,6,4,3,8,1]
function newArrFn (arr) {
    let new Arr = []
    return arr.reduce((prev, next index, arr) =>{
        return newArr.includes(next) ? newArr : newArr.push(next)
    }, 0)
}
console.log(newArrFn(arr))
// Set
var arr = [1,2,3,4,5,6,4,3,8,1]
function  neewArrFn (arr) {
    return ([...new Set(arr)])
}
console.log(newArrFn(arr))

Q5:介绍一下浏览器的缓存机制

A5:浏览器的缓存机制就是把一个请求过的web资源(例如:htnl页面、图片、js、数据等)拷贝一份副本储存在浏览器中。

缓存会根据进来的请求保存输出内容的副本,当下一个请求到来的时候,如果是相同的URL,缓存会根据缓存机制决定是否直接使用副本响应访问请求,还是向源服务器再次发送请求。

Q6:什么是跨域请求?如何解决跨域问题?

A6:当前发起请求的域与该请求指向的资源所在的域不一样,凡是发送请求的url的协议、域名、端口号三者之间任意一者与当前页面地址不同的请求。这里的域指的是这样一个概念:我们认为若协议 + 域名 + 端口号均相同,那么就是同域。

解决:JSONP;代理; CORS

Q7:如何进行前端性能优化?列举一些常见的性能优化手段

A7:

1. HTML优化:

     压缩HTML;删除不必要的注释;删除不必要的属性;使用语义化标签;减少iframe数量;

     削减DOM数量和层级数量;减少HTP请求次数;减少重绘重排

2.Javascript优化:

     javascript脚本放到页面底部;将javascript和css从外部引入;删除重复的脚本;

     减少DOM访问;节流与防抖;合理的ajax请求;长列表虚拟滚动优化;

     代码结构的优化;

3. CSS优化:

     尽量少用@import;避免!important,可以选择其他选择器;

     不要在ID选择器前面进行嵌套其他选择器;CSS文件压缩;CSS层级嵌套最好不要超过3层;

      删除无用的css;慎用*通配符;删除不必要的单位和零;异步加载非首屏css;

     将样式表放到页面顶部;不使用IE的Filter;检测工具推荐;

4. 图片优化:

    根据实际需要选择色深压缩;小图片引入sprites;图片懒加载;缩小favicon.ico并缓存;

     img图片的alt属性要写,合理使用target="_blank";采用svg图片或者字体图标;Base64;

5.webpack构建优化:

    线程加载器;缓存加载器;Hot  update; exclude & include;缩小CSS代码;

    缩小Javascript代码;tree-shaking;source-map; BundleAnalyzer; 模块懒加载;

  压缩包; base64; 正确配置哈希;

6. 资源加载优化:

    使用Web Workers  ;  DNS预解析;预加载preload

7.浏览器缓存策略:

    缓存位置;缓存策略;缓存场景; 用户操作行为与缓存

8.服务器优化:

    静态资源使用CDN;添加Expires或者Cache-Control响应头;对组件使用Gzip压缩;

    配置ETag;提供来自相同协议的文件;开启http2(多路复用,并行加载);服务端渲染;

     分域存放资源;减少页面重定向

9. 性能测试网站推荐:

     WebPage Test;Web Page Analyzer; GTMatrix;Piingdom;36全球网站性能测试 

Q8:什么是Webpack?它的作用是什么?配置文件中常见的配置有哪些?

A8:Webpack是一个用于Javascript应用程序的静态模块打包工具。

作用:模块打包、资源打包、代码分割、使用加载器和处理非JavaScript文件、使用插件执行各种任务如代码压缩、生成HTML文件、拷贝静态文件等。能够识别、加载、转换和打包各种类型的模块,包括CommonJS、ES6模块、AMD等。它还可以处理各种其他类型的文件,如CSS、Sass、Less、图片、字体等,并将它们打包到输出目录。

配置文件:1.babelrc文件  2..editorconfig文件   3. .eslintrc.js文件   4..eslintignore文件   5..gitignore文件   6.package.json    7.build/build.js文件     8.build/check-versions.js文件

9.build/dev-client.js文件     10.build/dev-sesrver.js     11.build/util.js   

12.build/vue-loader.conf.js文件          13.build/webpack.base.conf.js文件

 14.build/webpack.dev.conf.js文件      15.build/webpack.prod.conf.js文件

 16.build/webpack.test.conf.js文件      17.config/dev.env.js文件   18.config/index.js文件

  19.config/prod.env.js文件      20.config/test.env.js文件

Q9:介绍一下前端项目中的CI/CD(持续集成/持续部署)流程。

A9:

CI流程: 1.选择一个适合前端开发的版本控制系统,例如Git

                2.创建一个代码仓库,并将代码推送到仓库中

                3.设置一个自动化构建和测试工具,例如Jenkins

                4.配置构建和测试工具,以便在每次提交代码时自动触发构建和测试过程

                5.开发人员在每次提交代码时,都需要触发构建和测试过程

                6.当构建和测试通过后,代码将被合并到主分支中

                 7.持续监控代码库,以便及时发现和修复错误

CD流程:1.选择一个适合前端开发的版本控制系统,例如git

                 2.创建一个代码仓库,并将代码推送到仓库中

                 3.设置一个自动化部署工具,例如Spinnaker

                 4.配置部署工具,以便在代码通过自动化构建和测试后自动将代码部署到生产环境

                 5.持续监控生产环境,以便及时发现和修复错误

Q10:什么是模块化开发?常见的模块化规范有哪些?

A10:模块化开发是指一个模块就是实现特定功能的文件,有了模块,我们就可以更方便地使用别人的代码,想要什么功能,就加载什么模块。模块开发需要遵循一定的规范,否则就都乱套了。根据AMD规范,我们可以使用define定义模块,使用require调用模块。

模块化规范:1.浏览器端模块化规范(AMD,CMD)

                      2.服务器端模块化规范(

                             模块分为单文件模块与包;

                             使用require引入其他模块或者包;

                             使用exports或者module.exports导出模块成员;

                             一个文件就是一个模块,都拥有独立的作用域)

                      3.ES6模块化(

                              每个js文件都是一个独立的模块;

                              导入模块成员使用import关键字;

                               暴露模块成员使用export关键字)

Q11:请实现一个简单的快速排序算法

A11:

//前后指针法
int PartSort3(int* a, int left, int right)
{
	int midi = GetMidIndex(a, left, right);
	Swap(&a[midi], &a[left]);
	//end找小,如果	a[end]<a[keyi],++begin(这时begin位置的值一定比keyi位置值大),再交换begin和end的位置	
	int keyi = left;
	int begin = left;
	int end = left+1;
	while (end <=right)
	{
		if (a[end] < a[keyi] )
		{
			++begin;
			Swap(&a[begin], &a[end]);
		}
		++end;
	}
	Swap(&a[begin], &a[keyi]);
	return begin;
}


//快排
void QuickSort(int* a, int left,int right)
{
	if (left >= right)
	{
		return ;
	}
	int keyi = PartSort3(a, left, right);
	//[left,keyi-1][keyi][keyi+1,right]
	QuickSort(a, left, keyi - 1);
	QuickSort(a, keyi + 1, right);
}
	

Q12:什么是栈和队列?它们有什么区别?

A12:栈和队列是两种基本的数据结构。

栈是一种后进先出的数据结构

队列是一种先进先出的数据结构

区别:1.操作方式不同,栈遵循后进先出的原则,这意味着最后一个进入栈的数据第一个被删除;队列遵循先进先出的原则,这意味着第一个进入队列的数据第一个被删除。

2.应用场景不同。栈在处理递归、表达式求值、内存管理等场合非常实用;队列则在处理任务调度、缓存管理、消息处理等需要按照顺序处理的场合中使用更多。

Q13:介绍一下二叉树及常见的操作。

二叉树:是指树中节点的度不大于2的有序树,它是一种最简单且最重要的树。二叉树的递归定义为:二叉树是一棵空树,或者是一棵由一个根节点和两棵互不相交的,分别称作根的左子树和右子树组成的非空树;左子树和右子树又同样都是二叉树。

常见操作:顺序存储;链式存储

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SOP8、SOP16、SOP24脚语音芯片在性能上有哪些不同

随着语音识别技术的不断发展&#xff0c;人们对语音芯片的需求也越来越高。其中&#xff0c;SOP8、SOP16和SOP24脚语音芯片是目前市面上应用比较广泛的芯片类型。这些芯片在性能上有什么区别&#xff1f;下面我们来具体分析一下。 &#xff0c;SOP8、SOP16、SOP24脚语音芯片在引…

Vscode | Python | launch.json配置gevent多进程断点失效问题处理

Vscode | Python | launch.json配置gevent多进程断点失效问题处理 文章目录 情况描述↓↓↓解决办法直接看这里↓↓↓ 情况描述 launch.json {// Use IntelliSense to learn about possible attributes.// Hover to view descriptions of existing attributes.// For more i…

Centos7.9(虚拟机) GNOM图形界面(安装 GParted) 磁盘分区 挂载 扩容

目录 安装分区软件GParted 新磁盘创建分区过程和必要性&#xff08;其实可以直接使用整个磁盘&#xff09; 挂载步骤 创建分区表并分区 然后去磁盘挂载 成功挂载 搜索关键词 Centos7.9&#xff08;虚拟机 linux&#xff09; GNOM图形界面&#xff08;安装 GParted&…

以时分秒为单位累计设备运行时间功能块(SMART PLC梯形图代码)

1、SMART PLC设备累计运行时间功能块 SMART PLC设备累计运行时间功能块_plc计算累计时间-CSDN博客文章浏览阅读765次。PLC FC 、FB、子程序、函数学习笔记_RXXW_Dor的博客-CSDN博客FC、 FB、 子程序&#xff0c;&#xff08;甚至包括一些指令&#xff09;这些称呼其实并没有本…

短视频评论ID批量采集提取工具|dy视频评论关键词下载软件

短视频评论ID批量采集提取工具&#xff1a;智能拓客&#xff0c;精准洞察用户声音 在当今数字化营销时代&#xff0c;了解用户的需求和反馈对于企业的发展至关重要。而作为流行的短视频平台&#xff0c;短视频评论蕴含了丰富的用户信息和市场洞察。为了帮助企业高效获取这些宝…

Mabtech:与结核病相关的肽库

Mabtech 新研发出了三个涵盖结核蛋白&#xff08;EspC、ESAT-6、CFP-10&#xff09;的肽库&#xff0c;可以区分潜伏性结核病和活动性结核病的区别。所有肽库都经过验证&#xff0c;都可用于ELISpot、FluoroSpot实验。 1. EspC scanning pool ● EspC scanning pool包含来自结…

监控系统Prometheus--与第三方框架集成

文章目录 Prometheus和Flink集成拷贝jar包修改Flink配置为了运行测试程序&#xff0c;启动netcat启动hdfs、yarn&#xff0c;提交flink任务到yarn上可以通过8088跳到flinkUI的job页面&#xff0c;查看指标统计刷新Prometheus页面&#xff0c;如果有flink指标&#xff0c;集成成…

大模型应用实践闭门研讨会即将召开|爱分析活动

随着人工智能领域大模型技术的快速发展&#xff0c;政府出具很多指导性意见&#xff0c;在最新的《2024年政府工作报告》中&#xff0c;明确提出了开展“人工智能”行动&#xff0c;显示出政府对AI大模型发展的高度重视和支持。金融行业在AI大模型领域的政策支持和工作进展都呈…

c++的学习之路:25、map与set

摘要 本文中说一下map与set的使用 目录 摘要 一、关联式容器 二、键值对 三、map 1、map的介绍 2、map的使用 1、map的模板参数说明&#xff1a; 2、map的构造 3、map的迭代器 4、map的容量与元素访问 5、map中元素的修改 6、代码使用 ​编辑 三、总结 四、se…

智慧煤矿/智慧矿区视频汇聚存储与安全风险智能分析平台建设思路

一、建设背景 目前我国非常重视煤矿安全生产&#xff0c;并投入大量资金用于煤矿安全综合远程监控系统的研发。视频监控系统作为实现煤矿智能化无人开采的关键系统与煤矿安全生产的多系统协同分析与处理的关键信息源&#xff0c;在智慧矿山管控平台的建设中发挥着重要的作用。…

【七 (1)FineBI FCP模拟试卷-股票收盘价分析】

目录 文章导航一、字段解释二、需求三、操作步骤1、添加计算字段&#xff08;每月最后一天的收盘价&#xff09;2、绘制折线图 文章导航 【一 简明数据分析进阶路径介绍&#xff08;文章导航&#xff09;】 一、字段解释 Company Name&#xff1a;公司名称 Date&#xff1a;…

8条指南教你设计奶油风客厅。福州中宅装饰,福州装修

作为一名专业的设计师&#xff0c;我将为您带来一些关于奶油风客厅设计的干货。奶油风是一种温馨、柔和的装修风格&#xff0c;以下是一些设计指南&#xff0c;帮助您打造一个舒适而美丽的奶油风客厅。 1. 色彩搭配 除了米色、浅黄色和淡粉色等基础色调&#xff0c;还可以尝试…

性能分析与调优

性能分析方法 自底向上&#xff1a;通过监控硬件及操作系统性能指标&#xff08;cpu、内存、磁盘、网络等硬件资源的性能指标&#xff09;来分析性能问题&#xff08;配置、程序问题&#xff09; 先检查&#xff0c;再下药 自顶向下&#xff1a;通过生成负载来观察被测试的系…

SEW减速机参数查询 2-2 实践

首先说说结论&#xff1a;在不和SEW官方取得沟通之前&#xff0c;你几乎无法直接通过查阅SEW官方文档得到相关减速机的所有技术参数&#xff1a;比如轴的模数和齿数&#xff0c;轴承的参数。我在周一耗费了一个上午&#xff0c;最终和SEW方面确认后才知晓相关技术参数需要凭借销…

claude不支持中国怎么办

Claude 3 是AnthropicAI 公司推出的大语言模型&#xff0c;直接对标GPT4。Claude 3 系列模型&#xff0c;包括Claude 3 Opus、Claude 3 Sonnet 和 Claude 3 Haiku。 我们完全可以依据自己的需求选用适合的模型&#xff0c;在在智能水平、处理速度和成本之间&#xff0c;找到最…

取模学习之Image2Lcd

使用软件Image2Lcd V0.4 1.&#xff1a;打开图片&#xff0c;图片格式可选如下图&#xff0c;本文使用的.jpg格式 转换后数组例子&#xff08;数组头数据占前8字节&#xff09;&#xff1a; 2.&#xff1a;扫描模式 由第1个字节低四位配置 &#xff08;1&#xff09;水平扫描 …

vue3 源码解析(7)— diff 算法源码的实现

前言 vue3 采用的 diff 算法名为快速 diff 算法&#xff0c;整个 diff 的过程分为以下5个阶段完成。 处理前置节点处理后置节点处理仅有新增节点处理仅有删除节点处理其他情况&#xff08;新增 / 卸载 / 移动&#xff09; 这里我们先定义新旧两个节点列表&#xff0c;接下来…

再生龙(Clonezilla)网络克隆linux系统实现迁移——筑梦之路

官方网站&#xff1a;Clonezilla - 簡介 环境说明 源端&#xff1a;CentOS 7 操作系统的虚拟机&#xff0c;硬盘大小为 40GiB&#xff0c;分为 1GiB 的 /boot&#xff08;启动&#xff09;分区、4GiB 的 swap&#xff08;交换&#xff09;分区和 35GiB 的 /&#xff08;根&…

K8S一 k8s基础知识及实战

一 K8S 概览 1.1 K8S 是什么&#xff1f; K8S官网文档&#xff1a;https://kubernetes.io/zh/docs/home/ K8S 是Kubernetes的全称&#xff0c;源于希腊语&#xff0c;意为“舵手”或“飞行员”&#xff0c;官方称其是&#xff1a;用于自动部署、扩展和管理“容器化&#xff08…

LeetCode in Python 509. Fibonacci Number (斐波那契数)

斐波那契数实现方式有多种方法&#xff0c;最容易理解的为递归法&#xff0c;也可使用动态规划降低时间复杂度&#xff0c;本文给出递归法和动态规划两种方法的代码实现。 示例&#xff1a; 图1 斐波那契数输入输出示例 方法一&#xff1a;递归法 代码&#xff1a; class …
最新文章