前端面试题手册

梳理高频技术问题,帮助你按主题复习和查漏补缺。

前端阅读 972024年7月23日 22:18

SQL 中完全外部连接和交叉连接之间有什么区别?

完全外部连接(Full Outer Join)和交叉连接(Cross Join)在数据库管理系统中是两种不同的连接类型,主要区别如下:结果集的不同:完全外部连接:返回左表和右表中的所有记录。如果左表中的记录在右表中没有匹配项,则相应的右表中的字段会用NULL填充,反之亦然。这意味着完全外部连接会包含左连接和右连接的结果。交叉连接:返回左表和右表的笛卡尔积。如果左表有N行,右表有M行,那么结果集将有N*M行。交叉连接不考虑表间的任何关联条件,简单地将左表的每一行与右表的每一行组合。应用场景:完全外部连接:常用于需要查看两个表中全部数据,并找出在对方表中没有匹配的记录的场景。交叉连接:适用于需要生成基于两个表所有可能组合的场景,比如生成可能的产品组合或测试数据等。性能影响:完全外部连接:由于需要匹配左表和右表中的所有记录,可能会消耗较多的计算资源,尤其是表很大时。交叉连接:由于生成的是两个表的笛卡尔积,可能会产生庞大的结果集,这在大多数业务场景中可能不是必要的,也会显著增加查询处理时间和资源消耗。总结来说,完全外部连接用于合并两个表并找出无匹配项的记录,而交叉连接用于生成两个表所有可能的行组合。在实际应用中,选择适合具体需求的连接类型是很重要的。
前端阅读 02024年7月23日 22:17

抽象方法和虚拟方法有什么区别?

抽象方法和虚拟方法主要的区别在于它们的定义和使用目的:抽象方法(Abstract Method):抽象方法是在抽象类中声明的,但它没有任何实现(即没有方法体)。这要求任何继承该抽象类的子类必须提供该抽象方法的具体实现,除非该子类也是抽象类。抽象方法用于设定派生类应遵循的一种模板,确保所有派生类都具有相同的行为接口。虚拟方法(Virtual Method):虚拟方法是在类中使用 virtual 关键字声明的方法,它提供了一个基本的实现,这个实现可以被任何继承它的子类重写(Override)。虚拟方法允许子类在不改变接口规范的情况下,改变或扩展父类的方法行为。总结来说,抽象方法强制要求派生类实现特定的方法,而虚拟方法则提供了一个可以被派生类自由覆写的实现基础。
前端阅读 02024年7月23日 22:17

接口和抽象类有什么区别?

接口(Interface)和抽象类(Abstract Class)都是在面向对象编程中用于实现抽象概念的方法,但它们之间存在几个关键区别:目的不同:接口:提供了一种形式,强制实现类必须遵守的规则,主要用于定义对象间的协议。抽象类:主要用于为一组类提供通用的、预定义的状态(变量)或行为(方法),部分行为可以通过抽象方法来实现多态。实现继承与接口继承:接口:只能声明方法和常量,不能实现方法(Java 8之后,接口可以包含默认方法和静态方法)。抽象类:可以声明和实现方法,抽象类中可以包含非抽象方法(即已实现的方法)。构造函数:接口:不能包含构造函数。抽象类:可以包含构造函数,用于初始化类的一些基本状态。多重继承:接口:一个类可以实现多个接口,支持多重继承。抽象类:一个类只能继承一个抽象类,不支持多重继承。访问修饰符:接口:默认方法和变量是public的。抽象类:可以有public、protected和private方法和变量。综上,接口和抽象类都有其特定的使用场景,选择使用哪一个取决于具体需求。接口更适合定义不同类之间的协议,抽象类更适合为一组相关的类提供公共的代码和抽象的方法。
前端阅读 842024年7月23日 22:17

什么是数据库事务?

数据库事务是一个被视为单一的工作单元的操作序列。这些操作要么全部完成,要么全部不完成,以确保数据库的数据完整性和一致性。事务具有以下四个基本特性,通常用ACID模型来描述:原子性(Atomicity):事务中的所有操作要么全部成功,要么全部失败,不留下中间状态。一致性(Consistency):事务必须使数据库从一个一致性状态变换到另一个一致性状态。隔离性(Isolation):多个事务并发执行时,每个事务的执行不应该被其他事务干扰。持久性(Durability):事务一旦提交,其结果就是永久性的,即使系统发生故障也不会丢失。 事务处理是数据库管理系统中保证数据安全性和完整性的重要机制。
前端阅读 02024年7月23日 22:16

Serverless函数和Lambda函数有什么区别?

无服务器函数(Serverless Functions)和Lambda函数通常在讨论中被混用,但它们在严格意义上有区别:无服务器函数(Serverless Functions):这是一个广泛的概念,指的是运行在无服务器计算环境中的任何类型的函数。无服务器计算允许开发者编写和部署代码而不用管理服务器。无服务器架构中,开发者只关注业务逻辑层面的代码,而底层的运行环境、服务器的维护、扩展等由云服务提供商管理。常见的无服务器平台有 AWS Lambda、Azure Functions、Google Cloud Functions 等。Lambda函数:Lambda函数是Amazon Web Services(AWS)的一个特定服务产品,是无服务器计算服务的一种,但专指AWS平台上的实现。AWS Lambda 允许你运行代码响应事件,例如文件上传到AWS S3、更新DynamoDB表等,而无需考虑服务器的配置和管理。Lambda服务自动处理单个请求的扩展,并按功能运行时间的确切数量计费,无需预先购买服务器容量。总结来说,无服务器函数是一个涵盖所有无服务器平台上函数的通用术语,而Lambda函数特指AWS上的无服务器计算服务的实现。
前端阅读 02024年7月22日 09:47

如何从yarn.lock知道当前安装的软件包的版本

要从yarn.lock文件中确定当前安装的软件包版本,你可以按照以下步骤操作:打开yarn.lock文件:这个文件通常位于项目的根目录。查找特定的软件包:使用文本编辑器的查找功能,输入你想查找的软件包名称。查看版本信息:在yarn.lock文件中,每个软件包名称后面都会跟着一个版本号,可能还包括了依赖的版本规则。例如: package-name@^1.0.0: version "1.0.2"这里package-name@^1.0.0是你请求的版本规则,而version "1.0.2"则是实际安装的版本。确认依赖:如果软件包有依赖其它包,这些依赖也会在相同的条目中列出,包括它们的版本。通过以上步骤,你可以清楚地知道每个软件包的具体版本,以及它们的依赖情况。这对于调试、升级或是保证项目依赖的一致性非常有帮助。
前端阅读 702024年7月20日 16:03

HarmonyOS 是什么?

HarmonyOS(鸿蒙操作系统)是由华为开发的一种分布式操作系统,用于支持多种设备和平台,包括智能手机、平板、穿戴设备和更多智能设备。该系统最初于2019年推出,主要在中国市场推广,但逐渐扩展到全球市场。HarmonyOS 的核心特点是其“微内核”设计,这使得操作系统更加安全且具有高度的模块化。这种设计允许开发者更容易地为不同类型的硬件设备创建应用。另外,HarmonyOS 强调其 IoT(物联网)能力,旨在提供一个无缝连接各种设备的生态系统。例如,HarmonyOS 允许用户在智能手机和智能电视之间无缝地传输视频内容,或者在智能手表和健身设备之间同步数据。为了实现这些功能,华为开发了一个统一的分布式数据管理和任务调度框架,使不同设备间的通讯更加流畅和高效。此外,华为针对HarmonyOS开发了一套全新的应用生态,包括专门的应用商店,以鼓励开发者为这个平台开发更多应用。这在一定程度上帮助HarmonyOS 树立了自己独特的市场定位,尤其是在面对安卓和iOS这样的竞争对手时。总之,HarmonyOS 是华为为了适应未来多设备、跨平台的智能生活场景所设计的操作系统,其分布式架构和跨设备的协同能力是其最大的特点。
前端阅读 632024年7月20日 16:02

HarmonyOS 如何实现跨设备协同?

HarmonyOS(鸿蒙操作系统)是由华为开发的一个分布式操作系统,旨在提供全场景的智能体验。HarmonyOS 的核心特点之一就是其跨设备协同能力,这一能力主要通过以下几个技术实现:1. 分布式架构HarmonyOS 是基于分布式架构设计的,它支持多设备一体化协同处理和资源共享。在这个架构下,不同设备可以共享硬件能力、数据信息和用户交互,实现无缝协作。例子:设想一个场景,用户正在华为智能手机上观看视频,突然需要离开。用户可以直接将视频投放到华为智能屏上继续观看,而这一切几乎不需要用户进行复杂操作,实现了设备间的无缝切换。2. 虚拟总线技术HarmonyOS 利用了一种虚拟总线技术,这项技术可以动态发现设备并建立高效、安全的连接。通过虚拟总线,不同设备之间可以像节点一样协同工作,极大地简化了数据和服务的传递过程。例子:当用户的华为手机和华为手表处于同一网络环境下,手机可以自动将通知信息同步到手表上,即使手机放在包里,用户仍然可以通过手表及时获取重要信息。3. 统一的开发框架HarmonyOS 提供了一个统一的开发框架,使得开发者可以针对多种设备编写一次应用,然后部署到各种设备上运行,无需针对每一种设备单独开发。例子:开发者可以开发一个购物应用,这个应用可以在手机、平板、智能穿戴设备上运行,用户体验保持一致,数据同步,操作习惯无需改变。4. AI能力HarmonyOS 加强了AI的整合,利用AI技术实现更智能的设备协同。系统可以根据用户的使用习惯和上下文信息,自动进行设备间的任务分配和资源调度。例子:在智能家居场景中,用户通过语音对华为智音说“我要睡觉了”,智音可以自动调整家中的灯光、窗帘和空调,使得家居环境适合睡眠,所有设备协同工作,提供舒适体验。通过上述技术和例子,我们可以看到 HarmonyOS 在跨设备协同方面的独特优势和实际应用场景。这些技术不仅提升了用户体验,也推动了智能设备生态的发展。
前端阅读 532024年7月20日 16:02

HarmonyOS 如何保证系统的安全性?

HarmonyOS(鸿蒙操作系统)在保证系统安全性方面采取了多个措施,以下为几个关键点:微内核设计: HarmonyOS 采用了微内核设计,这意味着其最小化了内核的代码量,减少了潜在的安全漏洞。微内核只实现了最基本的功能如线程调度和消息传递,而其他服务如网络、文件系统等则运行在用户空间。通过这种方式,即使用户空间的服务出现问题,也不会影响到系统核心的运行,从而增强了系统的稳定性和安全性。形式化验证技术: HarmonyOS 采用了先进的形式化方法来验证微内核的安全性,这是一种通过数学方法证明系统属性的技术。形式化验证可以确保系统设计和实现的正确性,有效防止安全漏洞的产生。权限管理: HarmonyOS 强化了应用的权限管理,实施了基于角色的访问控制(RBAC),确保应用仅能访问其需要的资源。此外,系统对于敏感权限的使用进行了严格控制,并且用户可以直观地管理各个应用的权限设置。安全隔离: HarmonyOS 在应用之间实现了高效的安全隔离,每个应用都运行在独立的容器中,互不影响。这样即使一个应用被攻破,也无法影响到其他应用或系统本身的安全。加密技术: 系统广泛应用了加密技术来保护用户数据的安全。无论是数据的存储还是传输,都采用了强加密算法来防止数据泄露或被篡改。安全更新和补丁管理: HarmonyOS 有一套快速响应的系统更新机制,可以及时修补已知的安全漏洞。系统更新采用的是增量更新方式,可以在不影响用户使用的前提下快速推送安全补丁。通过这些综合性的安全设计和措施,HarmonyOS 力求为用户提供一个既安全又可靠的操作系统环境。
前端阅读 592024年7月20日 16:02

HarmonyOS 在性能上有哪些优化

HarmonyOS(鸿蒙操作系统)是华为开发的一个全新的操作系统,针对多种设备和应用场景设计,从多核处理、分布式架构、以及确定性延时等方面做了大量的性能优化。以下是一些关键的性能优化方面:多核调度优化:HarmonyOS 针对多核处理器进行了优化,可以实现更高效的任务分配和处理。例如,它采用了基于“组调度”技术,能够根据不同核心的特性(如大核和小核),将任务合理地分配到最适合的核心上执行,从而提高处理效率和节能。分布式架构:HarmonyOS 设计了一种独特的分布式架构,使得多个设备可以轻松协作,共享资源和功能。例如,一个应用可以在没有安装该应用的设备上运行,只需通过网络将任务分发到其他设备上。这种能力极大地提高了资源利用率和用户体验。确定性延时引擎:HarmonyOS 引入了确定性延时引擎,它优化系统调度算法,减少任务执行的延迟和波动。这种技术特别适合需要高实时性的场景,如工业控制、车载系统等。确保系统能够按时完成任务,提高了系统的可预测性和稳定性。资源预留机制:在HarmonyOS中,系统可以为关键任务预留必要的资源(如CPU时间、内存等),保证在高负载情况下这些任务的运行不会受到影响。这对于确保系统的稳定运行和响应速度非常关键。轻量级微内核:HarmonyOS 使用了一个轻量级的微内核设计,这使得整个系统更加模块化,降低了系统的复杂性。微内核只包含最基本的服务,如线程调度、消息通信等,其他服务如文件系统、网络协议等则运行在用户空间,这样可以提高系统的安全性和可维护性,同时也利于针对特定硬件进行优化。以上几点是HarmonyOS在性能优化方面的一些关键措施。这些优化不仅提高了系统的效率和响应速度,还增强了系统的可扩展性和适应不同设备和场景的能力。
前端阅读 682024年7月20日 16:02

HarmonyOS 如何实现设备的低时延性能?

HarmonyOS(鸿蒙操作系统)通过多种策略和技术实现设备间的低时延性能,以提供流畅、快速的用户体验。以下是一些关键的实现方式:分布式架构:HarmonyOS 利用其独特的分布式架构来实现设备间的无缝协作。这种架构允许多个设备共享资源和功能,如处理能力和存储,这样可以有效地分散负载,减少单一设备上的处理延迟。示例:在智能家居系统中,一个命令可以从智能手机发送到家中的智能灯具,通过分布式架构,命令处理可以在距离灯具最近的设备上进行,比如路由器,从而减少通信距离和时间,实现快速响应。实时内核:HarmonyOS 开发了自己的实时内核,这意味着系统可以优先处理高优先级的任务,并且能快速地响应外部事件。实时内核保证了系统操作的及时性,从而降低延迟。示例:在车载系统中,实时内核可以确保关键信息(如速度、导航指令)能够即时更新,为驾驶者提供实时反馈,确保安全和效率。任务调度优化:HarmonyOS 对任务调度进行了优化,支持任务间的优先级管理。系统可以根据任务的重要性和紧急程度智能调度,优先处理需要快速响应的任务。示例:在穿戴设备上,紧急的健康监测警告(如心率异常)会被系统优先处理和响应,相对于其他非紧急信息,如日程提醒,具有更高的处理优先级。通信优化:HarmonyOS 优化了设备间的通信协议,减少数据传输的延迟。通过使用更高效的数据包、压缩技术以及智能的数据传输路径选择,HarmonyOS 能够在设备间实现快速、稳定的数据交换。示例:在IoT设备网络中,HarmonyOS可以根据网络条件和设备间的实时通信需求,动态选择最佳的数据传输路径,从而减少通讯延迟,提升整体网络响应速度。通过上述技术和策略的综合应用,HarmonyOS 能够有效地提升多设备环境中的操作反应速度和用户体验。
前端阅读 552024年7月20日 14:50

Taro 中的 taro-cli 和 @tarojs/cli 有什么区别

在 Taro 框架中,taro-cli 和 @tarojs/cli 通常指的是同一个工具,即 Taro 的命令行接口。taro-cli 是在早期版本中使用的名字,而 @tarojs/cli 是后来为了与其他 @tarojs 命名空间下的包保持一致而采用的新命名方式。主要职责@tarojs/cli 的主要职责包括:项目创建:允许用户通过命令行快速生成新的 Taro 项目模板。项目编译:支持多端统一开发,可以编译代码到不同的目标平台,如微信小程序、百度小程序、Web、React Native 等。项目配置:通过修改 config/index.js 文件来配置项目的编译选项和其他设置。插件管理:可以通过 CLI 来添加或管理 Taro 项目中使用的插件。用法示例例如,如果您想要创建一个新的 Taro 项目,您可以使用以下命令:taro init myApp这个命令会引导您通过几个步骤来设置新项目的配置,例如选择模板、设置项目名称等。小结总的来说,虽然命名可能有所变化,但 taro-cli 和 @tarojs/cli 在功能上没有区别,它们都是为了帮助开发者更高效地使用 Taro 框架而设计的工具。随着 Taro 的更新和发展,建议使用最新的命名方式 @tarojs/cli 来保持与框架的其他部分一致性。
前端阅读 712024年7月20日 14:49

Taro 项目如何适配不同尺寸的屏幕

在 Taro 项目中适配不同的屏幕尺寸主要涉及以下几个步骤:1. 使用弹性布局(Flexbox)为了适应不同尺寸的屏幕,使用弹性布局是一种高效的方式。Flexbox 布局可以使元素能够动态地调整大小和位置,适应不同的显示设备。示例:.container { display: flex; flex-direction: row; justify-content: space-between;}.item { flex: 1; /* 每个 item 占据等量的空间 */}2. 使用百分比和视窗单位在样式中使用百分比(%)和视窗单位(vw, vh)作为尺寸单位,可以使布局在不同尺寸的屏幕上保持一致的相对大小。示例:.wrapper { width: 100%; /* 宽度占满整个屏幕宽度 */ height: 50vh; /* 高度为视窗高度的50% */}3. 媒体查询(Media Queries)通过媒体查询可以针对不同的屏幕尺寸应用不同的样式规则。这是响应式设计中常用的技术。示例:/* 默认样式 */.container { width: 100%;}/* 屏幕宽度小于600px时的样式 */@media (max-width: 600px) { .container { flex-direction: column; }}4. 利用 Taro 的API及组件Taro 提供了多种API和组件支持跨平台适配,例如通过Taro.getSystemInfo()可以获取系统信息,包括屏幕宽度和高度,然后根据这些信息动态设置样式。示例:Taro.getSystemInfo().then(info => { this.setState({ screenHeight: info.windowHeight, screenWidth: info.windowWidth });});5. 测试和调整在开发过程中,需要多设备和多尺寸测试你的应用界面。可以使用模拟器和实体设备进行测试,确保在各种尺寸和分辨率的屏幕上表现良好。通过以上方法,可以有效地确保 Taro 项目在不同屏幕尺寸上的兼容性和用户体验。这些技术的组合使用,可以使得应用界面在多种设备上表现自然和友好。
前端阅读 02024年7月20日 14:49

Yarn 如何安装Bower软件包?

要使用Yarn安装Bower包,您需要执行以下步骤:初始化新的或现有的项目:如果您的项目还没有package.json文件,您可以通过运行yarn init来创建一个,然后按照提示操作。添加Bower包:使用yarn add命令来添加Bower包到您的项目中。例如,如果您想安装jQuery,您可以运行: yarn add jquery查看依赖:安装后,您可以在package.json文件中的dependencies部分看到添加的包。使用包:接下来,您可以在项目中引用并使用这些包。例如,在JavaScript文件中,您可以通过import或require来引用jQuery: import $ from 'jquery';或者 const $ = require('jquery');以上步骤即为使用Yarn来安装和使用Bower软件包的基本流程。
前端阅读 02024年7月20日 14:49

如何在安卓版Ubuntu中设置Appium

要在安卓版Ubuntu上设置Appium,你可以按照以下步骤进行:安装Java:首先,确保已经安装了Java开发环境。可以通过在终端运行 java -version 来检查Java是否已安装。如果没有安装,可以使用以下命令安装Java: bash sudo apt update sudo apt install openjdk-11-jdk安装Node.js 和 npm:Appium需要Node.js,可以使用以下命令安装: bash sudo apt install nodejs sudo apt install npm安装Appium:通过npm全局安装Appium: bash npm install -g appium安装Android SDK:需要Android SDK来进行Android应用的自动化测试。下载并解压Android SDK,然后将其路径添加到环境变量中: bash export ANDROID_HOME=/path/to/android/sdk export PATH=$PATH:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools配置环境变量:设置正确的环境变量以确保所有工具都能正确找到。在你的.bashrc或.profile文件中添加上述ANDROID_HOME和PATH的导出命令,然后执行source ~/.bashrc来应用这些更改。启动Appium服务器:使用命令行启动Appium服务器: bash appium验证安装:为了确认一切设置正确,可以尝试运行一个简单的测试脚本来检查Appium是否能够连接到Android模拟器或真实设备。这些步骤大致涵盖了在安卓版Ubuntu上安装和配置Appium的过程。确保所有工具和依赖项都正确安装,并且环境变量正确设置,这样Appium就能正确地与Android SDK和Java进行通信。
前端阅读 02024年7月20日 14:48

当.git在不同的文件夹中时,如何配置husky?

要在项目中配置Husky(当.git文件夹位于一个不同的位置时),您需要确保Husky能正确找到.git目录。可以通过设置HUSKY_GIT_PARAMS环境变量来实现这一点,指向正确的.git目录的路径。以下是配置步骤:确定您的.git文件夹的实际位置。例如,假设.git文件夹位于上一级目录中,其路径可能是../.git。在您的项目根目录下,编辑或创建.huskyrc、.huskyrc.json、.huskyrc.js、husky.config.js中的任一文件,或者在package.json中添加husky字段。在这个配置文件中,您需要配置环境变量HUSKY_GIT_DIR,并指向.git文件夹的实际路径。示例配置如下:如果您使用的是JavaScript配置文件(如husky.config.js): module.exports = { hooks: { 'pre-commit': 'npm test', 'pre-push': 'npm run lint' }, environment: { HUSKY_GIT_DIR: '../.git' } };如果在package.json中配置: "husky": { "hooks": { "pre-commit": "npm test", "pre-push": "npm run lint" }, "environment": { "HUSKY_GIT_DIR": "../.git" } }确保Husky和Git钩子脚本具有执行权限。测试配置是否正确,可以尝试提交或推送,检查是否触发了相应的钩子。通过以上步骤,即使.git目录不在项目的根目录下,Husky也能正确工作。
前端阅读 412024年7月20日 14:48

如何将Git与Jenkins集成?

要将Git与Jenkins集成,可以按照以下步骤进行:安装必要的插件:在Jenkins中,确保已安装“Git plugin”。这个插件允许Jenkins使用Git仓库。可以在Jenkins的插件管理中搜索并安装。配置系统设置:在Jenkins的系统配置(或全局工具配置)中,设置Git的路径。这通常是在“Global Tool Configuration”下配置的。创建新的任务或项目:在Jenkins中创建一个新的Freestyle项目或者Pipeline项目。配置源代码管理:在项目配置中选择“源代码管理”,然后选择“Git”。输入你的Git仓库的URL。如果仓库是私有的,你还需要配置凭证(用户名和密码或者私钥)。配置构建触发器:设置如何触发构建。常用的触发方式包括:轮询SCM:Jenkins定时检查Git仓库中的变化。通过Webhook触发:在Git仓库中设置Webhook,每当有push操作时,Webhook会通知Jenkins进行构建。为此,你需要在Git hosting服务(如GitHub, GitLab等)中设置Webhook,并将其指向你的Jenkins服务器。配置构建脚本:根据项目需求,配置构建步骤。例如,在Freestyle项目中可以添加执行shell脚本的步骤,或者在Pipeline项目中编写Jenkinsfile。保存并测试配置:保存配置后,可以手动触发构建,或者通过Git操作触发,以测试集成是否成功。通过以上步骤,可以实现Git与Jenkins的有效集成,使得代码更新后能自动执行构建和测试,从而提高软件开发的效率和质量。