公司面试题总结(五)

25.谈一谈箭头函数与普通函数的区别,箭头函数主要解决什么问题?

箭头函数与普通函数的区别

语法简洁性:

箭头函数使用=>符号定义,省略了 function 关键字,使得语法更为紧凑。
对于单行函数体,可以进一步简化,省略花括号和 return 语句。

词法作用域内的 this:

主要区别:箭头函数不绑定自己的 this 值,它会捕获其所在上下文的 this 值作为
自己的 this,这解决了长期以来关于函数内部 this 指向不确定的问题。
在普通函数中,this 的值取决于函数如何被调用(例如,作为对象方法、构造函数
或者简单函数调用)。

没有自己的 arguments:

箭头函数没有自己的 arguments 对象,但可以通过扩展运算符...或其他方法间接访
问外部作用域的 arguments。
普通函数有自己的 arguments 对象来访问传入的参数。

不能作为构造函数:

箭头函数不能用作构造函数,即不能使用 new 关键字实例化。
普通函数可以作为构造函数创建新对象。

不能改变 this 的绑定:

使用 call、apply 或 bind 方法不能改变箭头函数内部的 this 指向。
普通函数的 this 可以通过这些方法动态改变。

箭头函数主要解决的问题:

明确的 this 绑定:

箭头函数最显著的优势在于它消除了 this 的不确定性,使得在回调函数、事件处理器等场景下,this 能保持预期的行为,避免了手动绑定 this 的繁琐。

代码简洁性:

它的简洁语法减少了代码量,提高了代码的可读性和维护性,特别是在使用高阶函数和函数式编程风格时更为明显。

减少作用域链查找:

由于箭头函数没有自己的 this、a rguments 等,这可能轻微提升执行效率,尤其是在大量嵌套函数调用时。

26.JS 数组和对象的遍历方式,以及几种方式的比较

数组的遍历方式:

for 循环

基本用法,适用于所有版本的 JavaScript。
可以获取索引和值。

forEach()

ECMAScript 5 引入的方法,直接在数组上操作,无需索引。
不支持 break,continue 语句。

for...of

ECMAScript 6 引入,迭代数组的元素值。
直观简洁,同样不支持 break,continue(除非配合 label)。

map()

生成新数组,原数组每个元素经过处理后的结果组成新数组返回。
侧重于转换数据。

filter()

创建一个包含通过测试的所有元素的新数组。
侧重于筛选数据。

对象的遍历方式:

for...in

遍历对象的所有可枚举属性(包括原型链上的)。
通常需要检查属性是否属于对象本身(hasOwnProperty)。
for(let key in obj) {
if(obj.hasOwnProperty(key)) {
console.log(key + ": " + obj[key]);
}
}

Object.keys()结合 for...of

获取对象自身可枚举属性的数组,然后遍历。
更安全,不涉及原型链。
for(let key of Object.keys(obj)) {
console.log(key + ": " + obj[key]);
}

Object.entries()结合 for...of

获取键值对数组,适合同时需要键和值的场景。
for(let [key, value] of Object.entries(obj)) {
console.log(key + ": " + value);
}

ES2022 的 for...in 改进

ES2022 引入了可选的 enumerable 标志,可以更精确地控制哪些属性可遍历。

比较:

性能:

基础的 for 循环通常性能最好,因为它是直接基于索引访问。
forEach()等方法由于涉及到函数调用,性能略低。不过,在大多数应用场景中,这
种差异微乎其微,可忽略。

可读性:

for...of、forEach()等现代遍历方法更易于阅读和理解,特别是对于不熟悉传统循环的新手。

功能

map()、filter()等方法不仅遍历,还能直接对数据进行转换或筛选,适合处理数据流。

兼容性:

for...of、Object.entries()等 ES6 及以上特性的方法需要考虑浏览器或环境的兼容性。

27.什么是跨域,如何解决跨域的问题,具体说说

跨域本质是浏览器基于同源策略的一种安全手段
同源策略 (Sameoriginpolicy),是一种约定,它是浏览器最核心也最基本的安全功能
协议相同(protocol)、主机相同(host)、端口相同(port)
非同源请求,也就是协议、端口、主机其中一项不相同的时候,这时候就会产生跨域

使用代理服务器(Proxy Server)

在开发环境中,可以配置一个代理服务器来转发 API 请求,从而绕过浏览器的同
源策略。这种方法通常使用 webpack-dev-server 或 Vite 的内置代理功能。
Vue CLI 项目 vue.config.js 文件中进行配置:

 对于 Vite 项目 vite.config.js 文件中进行配置:

设置 CORS(跨来源资源共享)

CORS 是一种 W3C 规范,定义了一种浏览器和服务器交互的方式来确定是否允
许跨源请求。这需要在服务器端进行配置。
服务器端需要设置响应头来允许来自不同源的请求。例如,在 Node.js 的 Express
框架中,可以使用 cors 中间件来设置 CORS。

JSONP

原理是利用<script>标签没有跨域限制的特点
通过动态插入<script>标签来加载其他域的 JavaScript 资源。
JSONP 只支持 GET 请求,并且存在安全风险(如 XSS 攻击)。

反向代理服务器(如 Nginx)

在 Nginx 中配置代理转发,并将 CORS 响应头添加到代理的响应中。

28.说说你对单点登录的理解,如何实现单点登录?

单点登录 Single Sign On,简称 SSO

多个应用系统,用户只需要登录一次就可以访问所有相互信任的应用系统
SSO 需要一个独立的认证中心 passport,子系统登录均得通过 passport,子系统不参与
登录
当一个系统成功登录以后,passport 将会颁发一个令牌给各个子系统,子系统可以拿着
令牌会获取各自的受保护资源,为了减少频繁认证,各个子系统在被 passport 授权以
后,会建立一个局部会话,在一定时间内可以无需再次向 passport 发起认证

如何实现

同域名下的单点登录

cookie 的 domain 属性设置为当前域的父域,
父域的 cookie 会被子域所共享。
path 属性为根路径

不同域名下的单点登录(一)

如果是不同域的情况下,Cookie 是不共享的用户统一
在认证中心进行登录,登录成功后,认证中心记录用户的登录状态,并将 token 写
入 Cookie(Cookie 是认证中心的,应用系统访问不到)
应用系统检查当前请求有没有 Token,如果没有,说明用户在当前系统中尚未登录,
那么就将页面跳转至认证中心
由于这个操作会将认证中心的 Cookie 自动带过去,因此,认证中心能够根
据 Cookie 知道用户是否已经登录过了
如果认证中心发现用户尚未登录,则返回登录页面,等待用户登录
如果发现用户已经登录过了,就不会让用户再次登录了,而是会跳转回目标 URL,
并在跳转前生成一个 Token,拼接在目标 URL 的后面,回传给目标应用系统
应用系统拿到 Token 之后,还需要向认证中心确认下 Token 的合法性,
此种实现方式相对复杂,支持跨域,扩展性好,是单点登录的标准做法

不同域名下的单点登录(二)

将 Session ID/Token 保存到浏览器的 LocalStorage 中,让前端在每次向后端发送
请求时,主动将 LocalStorage 的数据传递给服务端
这些都是由前端来控制的,后端需要做的仅仅是在用户登录成功后,将 Session ID
(或 Token)放在响应体中传递给前端

30.谈谈你对 webpack 的看法

webpack 是一个用于现代 JavaScript 应用程序的静态模块打包工具
静态模块指的是开发阶段
可以被 webpack 直接引用的资源(可以直接被获取打包进 bundle.js 的资源)
当 webpack 处理应用程序时,会在内部构建一个依赖图
依赖图对应映射到项目所需的每个模块(不再局限 js 文件),并生成一个或多个 bundle
webpack 的能力:
编译代码能力(es6 es5) ,提高效率,解决浏览器兼容问题
模块整合能力 ,提高性能,可维护性,解决浏览器频繁请求文件的问题 万物皆可模块能力 ,项目维护性增强,支持不同种类的前端模块类型,统一的模块化方
案,所有资源文件的加载都可以通过代码控制。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

事件、方法实现 on_radioGreen_clicked ,on_chkBoxUnder_clicked,Qfont,QPalette

Vertical Layout 、Horizontal Layout 实验窗体自适应布局 接上篇界面布局&#xff0c; 实验checkBox、radioBox 的事件槽&#xff0c; 使用Qfont组件变更纯文本框QPlainTextEdit中字体的下划线、加粗、斜体效果 使用调色板组QPalette变更纯文本框QPlainTextEdit中文本颜色 UI…

三、网络服务协议

目录 一、FTP&#xff1a;文件传输协议 二、Telnet&#xff1a;远程登录协议 三、AAA认证 四、DHCP 五、DNS 六、PPP协议 七、ISIS协议 一、FTP&#xff1a;文件传输协议 C/S架构&#xff0c;现多用于企业内部的资料共享和网络设备的文件传输&#xff0c;企业内部搭建一…

element table 点击某一行中按钮加载

在Element UI中&#xff0c;实现表格&#xff08;element-table&#xff09;中的这种功能通常涉及到数据处理和状态管理。当你点击某一行的按钮时&#xff0c;其他行的按钮需要动态地切换为加载状态&#xff0c;这可以通过以下步骤实现&#xff1a; 1.表格组件&#xff1a;使用…

手机流畅运行470亿参数大模型,上交大发布PowerInfer-2推理框架,性能提升29倍

苹果一出手&#xff0c;在手机等移动设备上部署大模型迅速成为行业焦点。 目前&#xff0c;移动设备上运行的模型相对较小&#xff08;苹果的是3B&#xff0c;谷歌的是2B&#xff09;&#xff0c;并且消耗大量内存&#xff0c;这在很大程度上限制了其应用场景。 即使是苹果&…

【西瓜书】9.聚类

聚类任务是无监督学习的一种用于分类等其他任务的前驱过程&#xff0c;作为数据清洗&#xff0c;基于聚类结果训练分类模型 1.聚类性能度量&#xff08;有效性指标&#xff09; 分类任务的性能度量有错误率、精度、准确率P、召回率R、F1度量(P-R的调和平均)、TPR、FPR、AUC回归…

20240613解决飞凌的OK3588-C的核心板的USB3.0接口不读U盘的问题

20240613解决飞凌的OK3588-C的核心板的USB3.0接口不读U盘的问题 2024/6/13 15:21 缘起&#xff0c;由于USB3.0的CC芯片在飞凌的OK3588-C的开发板的底板上&#xff0c;一切正常。 如果你单独使用核心板&#xff0c;很容易出现这个问题【省成本没有使用CC芯片】&#xff1a;不读U…

LabVIEW开发CAN通讯协议

在LabVIEW中开发CAN&#xff08;Controller Area Network&#xff09;通讯协议时&#xff0c;需要全面考虑硬件选择、驱动安装、通信配置、错误处理、数据解析和实时性等多个方面。本文详细介绍了在LabVIEW中实现CAN通讯时的关键点和最佳实践&#xff0c;确保系统的稳定性、可靠…

JFrame.setDefaultLookAndFeelDecorated

在java Swing编程中,作为窗体,我们经常编写类继承JFrame,在main方法中进行加载,如下 有一种方法,不用继承JFrame也可以弹窗,代码如下 但是这个跟我们今天的setDefaultLookAndFeelDecorated有什么关系呢,这个设置,必须在new 对象前进行调用,才有装饰效果,如下 说白了…

Java中Transactional在不同方法间的穿透性,rollbackFor参数含义

哈喽&#xff0c;大家好&#xff0c;我是木头左&#xff01; 在Java开发中&#xff0c;经常会遇到需要在一个事务中执行多个操作的场景。为了确保这些操作的原子性&#xff0c;可以使用Spring框架提供的Transactional注解来实现事务管理。然而&#xff0c;在实际开发过程中&…

【Intel CVPR 2024】通过图像扩散模型生成高质量360度场景,只需要一个语言模型

在当前人工智能取得突破性进展的时代&#xff0c;从单一输入图像生成全景场景仍是一项关键挑战。大多数现有方法都使用基于扩散的迭代或同步多视角内绘。然而&#xff0c;由于缺乏全局场景布局先验&#xff0c;导致输出结果存在重复对象&#xff08;如卧室中的多张床&#xff0…

JVM性能优化案例:减少对象频繁创建

JVM性能优化案例&#xff1a;减少对象频繁创建 案例背景 某金融应用系统在处理大量并发交易时&#xff0c;响应时间过长&#xff0c;并且有时出现内存溢出&#xff08;OutOfMemoryError&#xff09;的问题。经过分析&#xff0c;发现问题主要出在频繁的对象创建和较差的内存管…

如何降低pcdn的延迟?

要降低P2P CDN的延迟&#xff0c;可以采取以下操作&#xff1a; 一&#xff0e;优化网络连接&#xff1a; 1、使用有线网络连接替代无线连接&#xff0c;因为有线连接通常提供更稳定的数据传输。 2、升级家庭或企业路由器&#xff0c;选择性能更好的路由器以提高网络传输速度…

【后端开发】服务开发场景之高可用(冗余设计,服务限流,降级熔断,超时重试,性能测试)

【后端开发】服务开发场景之高可用&#xff08;冗余设计&#xff0c;服务限流&#xff0c;降级熔断&#xff0c;超时重试&#xff0c;性能测试&#xff09; 文章目录 序&#xff1a;如何设计一个高可用的系统&#xff1f;可用性的判断指标是什么&#xff1f;哪些情况会导致系统…

SJ902安全网贯穿测试仪

产品内容 安全网耐贯穿试验机是根据GB 5725-2009 《安全网》用于检测安全网的耐贯穿性能。 技术指标 1、贯穿物&#xff1a;直径50mm&#xff0c;质量5kg的2圆棒 2、贯穿试验架与水平面夹角&#xff1a;30 3、贯穿试验高度&#xff1a;距离被贯穿网中心1米 4、电动提升、…

怎么防止源代码泄露?9种方法教会你!

怎么防止源代码泄露&#xff1f;首先要了解员工可以通过哪些方式将源代码传输出去&#xff01; 物理方法&#xff1a; — 网线直连&#xff0c;即把网线从墙上插头拔下来&#xff0c;然后和一个非受控电脑直连; — winPE启动&#xff0c;通过光盘或U盘的winPE启动&#xff0c;甚…

操作系统——信号

将信号分为以上四个阶段 1.信号注册&#xff1a;是针对信号处理方式的规定&#xff0c;进程收到信号时有三种处理方式&#xff1a;默认动作&#xff0c;忽略&#xff0c;自定义动作。如果不是自定义动作&#xff0c;这一步可以忽略。这个步骤要使用到signal/sigaction接口 2.…

最新有钱还系统源码 人人还众筹还钱模式还贷系统源码

本文来自&#xff1a;最新有钱还系统源码 人人还众筹还钱模式还贷系统源码 - 源码1688 应用介绍 简介&#xff1a; 最新有钱还系统源码 | 人人还众筹还钱模式还贷系统源码 转载未测试 盈利模式&#xff1a; 1.系统里直推400 2.间推得200 3.升级是隔代匹配200 4.漏单直接…

借助Historian Connector + TDengine,打造工业创新底座

在工业自动化的领域中&#xff0c;数据的采集、存储和分析是实现高效决策和操作的基石。AVEVA Historian (原 Wonderware Historian) 作为领先的工业实时数据库&#xff0c;专注于收集和存储高保真度的历史工艺数据。与此同时&#xff0c;TDengine 作为一款专为时序数据打造的高…

SpringBoot的Mybatis-plus实战之基础知识

文章目录 MybatisPlus 介绍一、MyBatisPlus 集成步骤第一步、引入依赖第二步、定义mapper 二、注解TableNameTableldTableField 三、配置文件四、加解密实现步骤 在SpringBoot项目中使用Mybatis-plus&#xff0c;记录下来&#xff0c;方便备查。 MybatisPlus 介绍 为简化开发而…

项目文章 | Cell ReportsChIP-seq和RNA-seq联合鉴定伯克霍尔德氏菌毒性的重要调节因子

发表单位&#xff1a;中山大学深圳校区制药科学学院 发表日期&#xff1a;2024年5月14日 研究期刊&#xff1a;Cell Reports&#xff08;IF: 8.8&#xff09; 研究材料&#xff1a;伯克霍尔德氏菌 主要技术&#xff1a;ChIP-seq&#xff0c;EMSA&#xff0c;微尺度热泳分析…