【华为OD技术面试真题 - 技术面】- Java面试题(12)

本文汇总了华为OD技术面试中的Java和数据库相关问题,涵盖MySQL存储引擎对比、事务处理、字符串操作及Redis持久化策略。通过这些真题,帮助应聘者准备面试,提升技术实力。

华为OD面试真题题库

专栏:华为OD面试真题题库
目录: 最新华为OD面试手撕代码真题目录以及八股文真题目录

封面

1. MySQL存储引擎之间的区别

以下是一些常见MySQL存储引擎之间的区别:

  1. InnoDB:

    • 支持事务处理,具备提交、回滚和崩溃恢复能力的事务安全(ACID兼容)。
    • 支持外键,以确保数据的完整性和一致性。
    • 默认使用行级锁定,较好地支持并发处理。
    • 提供了缓冲池功能,可以缓存数据和索引在内存中,提高处理效率。
    • 是MySQL的默认存储引擎(从MySQL 5.5版本开始)。
  2. MyISAM:

    • 不支持事务处理。
    • 不支持外键。
    • 默认使用表级锁定,可能在高并发情况下成为瓶颈。
    • 通常具有比InnoDB更快的读取速度,适合于读密集型的应用。
    • 支持全文索引,适合全文搜索。
  3. MEMORY:

    • 将所有数据存储在内存中,因此访问速度非常快。
    • 适用于临时表和存储非关键性数据的场景。
    • 支持表级锁定。
    • 重启数据库后数据会丢失,因为数据只是暂时存储在内存中。
  4. CSV:

    • 以纯文本形式存储数据,每一行一个记录,每个字段之间用逗号分隔。
    • 可以直接用文本编辑器查看或编辑。
    • 不支持索引,因此查询性能可能不是很好。
  5. ARCHIVE:

    • 专为存储大量的归档数据设计,如日志数据。
    • 支持高压缩比,节省存储空间。
    • 只支持INSERT和SELECT操作。
    • 使用行级锁定。

2. MySQL union和union all的区别

在MySQL中,UNIONUNION ALL都是用来合并两个或多个SELECT语句的结果集的操作符,但它们之间有重要的区别,这些区别影响到结果集的内容以及查询的性能:

  1. 结果集中的重复行:

    • UNION操作会自动去除合并结果集中的重复行,只保留唯一的记录。为了确保结果集中的记录是唯一的,MySQL需要进行额外的工作,如排序或使用临时表,这可能会影响查询性能。
    • UNION ALL操作不会去除结果集中的重复行,所有的记录都会被包含在最终的结果集中。由于不需要去重,UNION ALL通常比UNION更快,尤其是在处理大量数据时。
  2. 使用场景:

    • 当需要从多个SELECT语句中获取一个不包含重复记录的结果集时,应该使用UNION
    • 如果你需要包含所有的记录,包括重复的记录,或者你知道合并的结果集不会有重复记录,那么使用UNION ALL会更高效。
  3. 性能考虑:

    • UNION由于需要去重,可能会消耗更多的CPU和内存资源,尤其是在处理大型数据集时。如果对结果集的唯一性没有要求,考虑使用UNION ALL来优化性能。
    • UNION ALL直接将多个SELECT语句的结果集合并起来,不进行任何额外的处理,因此在大多数情况下,它的执行速度要快于UNION

简而言之,UNIONUNION ALL的主要区别在于是否去除结果集中的重复行。选择哪一个操作符取决于你的具体需求:如果需要一个去重的结果集,使用UNION;如果需要包含所有记录或追求更快的查询速度,使用UNION ALL

3. StringBuilder和StringBuffer

在Java中,StringBuilderStringBuffer都是用来处理可变字符串的,但它们之间存在一些关键的区别,主要体现在性能和线程安全方面。了解这些区别对于Java开发者来说很重要,尤其是在需要优化性能或处理多线程环境下的字符串操作时。

主要区别

  1. 线程安全:

    • StringBuffer是线程安全的,它的大多数公有方法都是通过synchronized关键字同步的,这意味着在多线程环境下是安全的,多个线程可以同时访问一个StringBuffer对象而不会引发数据不一致的问题。
    • StringBuilder不是线程安全的,它没有对方法进行同步处理,因此它的性能比StringBuffer要高。在单线程环境下或不共享StringBuilder实例的场景中,推荐使用StringBuilder
  2. 性能

### 华为OD技术面试真实题目及答案 #### 技术常见问题与解答 #### 跨域请求解决方案 在前端开发中,跨域请求问题是常见的挑战之一。以下是几种常用的解决跨域问题的方法: - **CORS(跨源资源共享)** CORS是一种基于HTTP头的机制,允许服务器声明哪些资源可以被其他域名下的页访问。通过设置`Access-Control-Allow-Origin`响应头来指定允许访问该资源的外部域名[^2]。 ```javascript // 浏览器发起跨域请求的例子 fetch('https://api.example.com/data', { method: 'GET', mode: 'cors' }) .then(response => response.json()) .then(data => console.log(data)); ``` #### Java基础知识问答 关于Java的基础知识也是华为OD技术面试中的一个重要部分。下是一些典型的问题及其解答: - **Java堆栈的概念** Java程序运行时会创建两种类型的内存区域:堆和栈。其中,**栈(Stack)**用于存储局部变量、方法参数以及返回地址等短期存在的数据;而**堆(Heap)**则用来保存对象实例和其他动态分配的数据结构。两者的主要区别在于生命周期管理和垃圾回收机制的不同[^3]。 - **线程安全的Map实现类** 在多线程环境中使用的线程安全映射表主要有以下几种: - `ConcurrentHashMap`: 提供高效的并发读写操作支持; - `Hashtable`: 是较早版本中提供的同步化哈希表容器; - `Collections.synchronizedMap()`: 可以将任意Map转换成具有基本同步特性的新Map实例。 - **常用的数据结构** 对于日常工作或算法练习来说,经常接触到的一些重要Java集合框架成员包括但不限于: - List接口下实现了数组列表(`ArrayList`)、链表(`LinkedList`); - Set接口提供了不可重复元素集合的功能, 如HashSet; - Map接口定义了键值对关联关系, 上述提到过的ConcurrentHashMap就是其一种具体形式. - **ArrayList特性** ArrayList内部采用连续空间存储元素,默认情况下按照插入顺序保持稳定排列,因此它是**有序**的序列容器. ```java List<String> list = new ArrayList<>(); list.add("first"); list.add("second"); System.out.println(list); // 输出:[first, second] ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

算法大师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值