华为 OD 面试流程
- 机试:三道算法题,关于机试,橡皮擦已经准备好了各语言专栏,可以直接订阅。
- 性格测试:机试
- 技术一面(本专栏核心)
- 技术二面(本专栏核心)
- 主管面试
- 定级定薪发 offer
- 体检入职
本专栏的所有博客,将为大家整理技术一面二面中【面试官问到的真题】,并提供大家答案。
⭐️ 华为 OD 机考 Python https://blog.csdn.net/hihell/category_12199275.html
⭐️ 华为 OD 机考 C++ https://blog.csdn.net/hihell/category_12199283.html
⭐️ 华为 OD 机考真 C 语言 https://blog.csdn.net/hihell/category_12225286.html
⭐️ 华为 OD 机考 JAVA https://blog.csdn.net/hihell/category_12201821.html
⭐️ 华为 OD 机考 JS https://blog.csdn.net/hihell/category_12201825.html
⭐️ 华为 OD 机考 Golang https://blog.csdn.net/hihell/category_12231589.html
所有问题都来自通过华为 OD 机考通过人员反馈信息。
每篇博客会涉及 7 个面试题,题目和答案仅供参考~
1. mysql 数据库建了两个字段,且设置了联合索引,如果其中有一个字段为空会出现什么问题?
如果在 MySQL 数据库中建立了两个字段并设置了联合索引,但其中一个字段为空,可能会出现以下问题:
- 索引效率降低:如果其中一个字段为空,那么联合索引的效率可能会降低,因为 MySQL 会忽略空值。这将导致索引无法完全覆盖表格的数据,影响查询的效率。 🐌
- 查询结果错误:如果查询语句中使用了空值的字段作为查询条件,可能会导致查询结果出现错误或者没有任何结果。这是因为 MySQL 无法确定空值的具体取值,从而无法确定查询结果。🔍
- 数据插入问题:如果其中一个字段为空,插入数据时可能会出现问题,例如插入重复数据或者无法插入数据。这将导致数据的完整性和一致性受到影响。🤕
2. 谈谈 springIOC 的理解,有什么好处,解决了什么问题
在传统的 Java 应用程序中,通常是由程序员编写代码来创建和管理对象之间的关系。
但是,这种方式存在一些问题,例如代码耦合度高、代码可读性差、难以维护等问题。
Spring IOC 就是为了解决这些问题而出现的。
Spring IOC 的实现方式是将对象的创建和依赖关系的管理委托给 Spring 框架。在 Spring 中,通过使用配置文件或者注解来描述对象之间的依赖关系,然后由 Spring 框架负责创建和管理这些对象。这样,就可以将应用程序的各个组件解耦,提高代码的可维护性和可读性。
Spring IOC 的好处包括:
- 降低代码耦合度:通过将对象之间的依赖关系从代码中分离出来,可以降低代码之间的耦合度,从而使应用程序更加灵活和易于维护。 🌟
- 提高代码可读性:通过将对象之间的依赖关系配置到外部文件或注解中,可以使代码更加简洁、易于理解和阅读。💻
- 方便测试:由于对象之间的依赖关系被外部配置文件或注解所管理,所以在测试时可以轻松地模拟和替换对象之间的依赖关系,从而使测试更加简单和灵活。🧪
- 提高代码复用性:通过将对象的创建和依赖关系的管理集中到 Spring 框架中,可以方便地在不同的应用程序中重用这些对象。🚀
3. 谈谈 springAOP 的理解,切面编程有没有实际应用,有哪些注解,作用是什么,有那些应用场景?
通过使用 Spring AOP,我们可以将一些通用的功能(例如事务处理、日志记录等)从业务逻辑中分离出来,并统一管理和配置这些通用功能,从而提高代码的可维护性和可重用性。
Spring AOP 是通过在运行时动态地为对象添加一些额外的行为,以实现切面的功能。这些额外的行为被称为“切面”,可以被理解为横切关注点(cross-cutting concern)。
Spring AOP 的实现方式是基于代理模式,通过代理对象来实现切面的功能。
Spring AOP 中常用的注解包括:
- @Aspect:用于定义一个切面。
- @Pointcut:用于定义一个切入点,表示在哪些方法或类中应用切面。
- @Before:用于定义一个前置通知,表示在目标方法执行之前执行切面。
- @After:用于定义一个后置通知,表示在目标方法执行之后执行切面。
- @AfterReturning:用于定义一个返回通知,表示在目标方法返回结果之后执行切面。
- @AfterThrowing:用于定义一个异常通知,表示在目标方法抛出异常之后执行切面。
Spring AOP 的应用场景包括:
-
日志记录:通过在切面中添加日志记录功能,可以方便地记录方法的调用信息和执行结果。
-
安全控制:通过在切面中添加安全控制功能,可以对访问方法进行权限控制和身份验证。
-
性能监控:通过在切面中添加性能监控功能,可以对方法的执行时间和资源消耗进行监控和统计。
-
事务管理:通过在切面中添加事务管理功能,可以对数据库事务进行管理和控制。
4. Erika 和 zookeeper 有了解过吗,作用是什么,主要解决了什么问题
Erika 是一个实时操作系统内核,专门为嵌入式系统设计。它的目标是提供可靠的实时性能和资源管理。Erika 的设计注重小型化和高效性,可以在资源受限的系统上运行,例如微控制器。
而 ZooKeeper 是一个分布式应用程序协调服务,旨在解决分布式系统中的一些问题,例如数据一致性、分布式锁、配置管理等。ZooKeeper 提供了一个具有高可用性的分布式环境,允许应用程序在其中注册、发现和协调服务。
在嵌入式系统中,Erika 通常用于处理实时任务,而 ZooKeeper 则可以在分布式系统中用于解决数据管理和协调问题。虽然这两个技术的应用场景不同,但它们都旨在提高系统的可靠性和效率。
5. 谈谈 JDK、JRE、JVM 的理解,区别是什么
👉 JDK 是 Java 开发工具包的缩写,它提供了 Java 开发所需的所有工具和资源,包括编译器、调试器、JRE、类库等。JDK 通常用于开发 Java 应用程序。
👉JRE 是 Java 运行环境,用于在计算机上运行 Java 应用程序和 Applet。
👉JVM 是 Java 虚拟机,是 Java 语言的核心组成部分,负责将 Java 代码转换为计算机可执行的字节码并执行。
JDK 包含了 JRE,因此 JDK 可以用于开发和运行 Java 应用程序。而 JRE 只包含了运行 Java 应用程序所必需的组件,而没有用于开发 Java 应用程序的工具。
JVM 负责解释并执行 Java 代码,这意味着无论是开发还是运行 Java 应用程序都需要 JVM。JVM 运行在操作系统之上,允许 Java 应用程序在不同的操作系统和硬件架构上运行,实现了 Java 语言的“一次编写,到处运行”的特性。
JDK 是用于开发 Java 应用程序的工具包,JRE 是用于在计算机上运行 Java 应用程序的组件,而 JVM 则是将 Java 代码转换为可执行代码并执行的虚拟机。
6. 谈谈对泛型的理解
泛型是 Java 语言中的一种重要特性,允许程序员编写可重用的代码,提高了代码的安全性和可读性。
泛型是一种参数化类型的概念,允许程序员在定义类、接口、方法时使用类型参数,这些类型参数可以在使用时被具体的类型替代。泛型可以将代码中的数据类型从代码中分离出来,从而使代码更加灵活和可维护。
Java 中的泛型有两种形式:
-
类型参数化类:定义一个类时,可以通过类型参数来表示该类中的属性、方法的数据类型,例如
ArrayList<T>
,其中 T 表示一个类型参数。 -
泛型方法:定义一个方法时,可以通过类型参数来表示方法的参数类型、返回值类型等,例如
public <T> void printArray(T[] array)
,其中<T>
表示一个类型参数。
使用泛型可以带来许多好处,包括:
安全性:通过泛型,可以在编译时检查类型安全,避免在运行时出现类型转换错误。
可读性:泛型可以提高代码的可读性,使代码更易于理解和维护。文章来源:https://www.toymoban.com/news/detail-413122.html
可重用性:通过泛型,可以编写可重用的代码,避免重复编写相同或类似的代码。文章来源地址https://www.toymoban.com/news/detail-413122.html
7.JVM 的组成
- Class Loader (类加载器):负责将编译好的 Java 类加载到 JVM 中,以便被执行。类加载器将类文件读入内存,并将其转换为 JVM 内部使用的数据结构。
- Runtime Data Area (运行时数据区):是 JVM 中用于存储数据的区域。它包括以下几个部分:
- Method Area (方法区):用于存储类信息、常量、静态变量和即时编译后的代码等数据。
- Heap (堆):用于存储 Java 对象。在 Java 程序运行时,动态创建的对象都被分配在堆中。
- Java Stack (Java 栈):用于存储方法的局部变量、操作数栈、动态链接、方法出口等信息。
- Native Method Stack (本地方法栈):与 Java 栈类似,但用于存储本地方法的信息。
- Execution Engine (执行引擎):负责执行编译好的 Java 代码。它包括解释器和 JIT (即时编译器) 两部分。解释器将字节码解释为机器码并执行,而 JIT 则将频繁执行的代码编译为本地机器码,以提高代码的执行效率。
- Native Interface (本地接口):提供了 Java 与本地代码交互的能力。通过本地接口,Java 程序可以调用 C/C++ 等本地代码。
到了这里,关于【华为OD技术面试 | 真八股 】MySQL联合索引,谈springIOC的理解,谈springAOP的理解,Erika和zookeeper等问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!