简历复习

LiveCoding

xxxxxxxxx

面试准备

2023.8.17

  • Spark RDD宽窄依赖
    在Spark中,对RDD的转换操作可以分为两种依赖:宽依赖和窄依赖。窄依赖指的是每个父RDD的分区只被子RDD的单个分区使用,例如map()、filter()等操作。宽依赖则表示多个子RDD的分区可能依赖于同一个父RDD的分区,例如groupByKey()、reduceByKey()等操作。宽依赖可能导致数据的重新分区和网络传输。

  • MySQL与HBase比较:
    MySQL是一个关系型数据库,适用于小到中等规模的数据,并支持复杂的SQL查询。HBase是一个非关系型的分布式数据库,适用于大规模数据存储,主要针对读写操作进行优化,不支持复杂的查询。
    HBase行列存储: HBase是一个列式数据库,数据按列存储,这使得读取特定列的数据非常快。HBase表由行组成,每行都有一个唯一的行键,并由多个列族组成。每个列族中可以有任意数量的列。

  • MySQL能否直接查数据中某一列的特定数据,HBase能不能:?
    MySQL可以直接查询某一列的特定数据,例如SELECT column FROM table WHERE column = value。HBase也可以做到,可以使用行键列标识符获取特定的数据。

  • MySQL两种表引擎:
    MySQL主要有两种表引擎:InnoDB和MyISAM。InnoDB: 支持事务处理,也支持外键,对数据库恢复等需求提供了强大的支持。MyISAM: 不支持事务处理等高级处理,但是在大量读取的应用环境下速度快于InnoDB。

  • 怎样设计数据分层?
    原始数据层 ODS:此层包含从各种数据源获取的未处理的原始数据。这些数据可能来自于业务系统、日志文件、外部数据提供商等。数据在这一层通常以最原始的形式存储,没有进行任何加工处理。
    数据处理层 DWD:在此层,原始数据经过清洗、验证、转换等处理,以适应后续的数据分析需求。处理过程可能包括数据的格式化、空值处理、错误数据剔除、数据类型转换、数据编码等。
    数据聚合层 ADS:在此层,处理后的数据根据业务需求进行聚合。这可能包括事实表的创建、维度的建立、计算指标的生成等。数据在这一层通常以数据仓库模型(如星型模型或雪花模型)的形式组织。
    数据服务层 :此层为最终用户提供数据访问服务。这可能包括创建数据视图、数据集市、数据立方体等,以满足不同的数据分析和报表需求。数据在这一层通常以对用户友好的形式提供,如图表、仪表盘、报表等。

  • 了解的大数据组件有哪些?
    Hadoop:Apache Hadoop 是一个开源的分布式计算框架,主要包括 HDFS(Hadoop Distributed File System)和 MapReduce 两个组件。HDFS 用于在大规模集群上存储大数据,而 MapReduce 提供了一种编程模型,用于在 HDFS 上进行分布式数据处理。
    Spark:Apache Spark 是一个快速的、通用的、大规模数据处理引擎,它提供了一个高级 API,支持 Java, Scala, Python 和 R,以及一个优化的运行时引擎,可以在大规模集群上进行高性能的数据处理。
    Hive:Apache Hive 是一种建立在 Hadoop 上的数据仓库工具,它提供了一种类 SQL 的查询语言(HiveQL),用于查询、汇总和分析存储在 Hadoop 文件系统中的大规模数据。
    HBase:Apache HBase 是一个建立在 Hadoop 上的分布式、列式数据库,它用于存储非结构化和半结构化的大规模数据,并提供了实时的数据访问能力。
    Flink:Apache Flink 是一个针对批处理和流处理的大规模数据处理框架,它提供了一种高效的、分布式的、通用的流处理引擎。
    Kafka:Apache Kafka 是一个分布式的流处理平台,主要用于构建实时的数据管道和流应用。
    ZooKeeper:Apache ZooKeeper 是一个分布式的服务协调系统,提供了一种为分布式应用提供一致性服务的机制。

  • spark底层计算原理?
    RDD:RDD 是 Spark 中的基本数据结构,它是一个分布式的元素集合。每个 RDD 都被分割成多个分区,每个分区都会在集群中的不同节点上进行处理。
    懒加载:Spark 使用懒加载(lazy evaluation)的方式进行计算。这意味着,当用户对 RDD 执行转换操作(如 map、filter 等)时,这些操作并不会立即执行,而是记录下来,形成一个 "操作图"(或称为 "血缘图")。只有当需要返回结果给驱动程序或将数据写出到文件系统时,这些操作才会真正执行。这种方式可以让 Spark 更有效地优化计算过程。
    转换和动作:RDD 支持两种类型的操作:转换(transformation)和动作(action)。转换操作会生成一个新的 RDD,如 map、filter 等。动作操作会触发计算并返回结果给驱动程序,如 count、collect 等。
    持久化:用户可以通过持久化(persist)或缓存(cache)操作来将 RDD 保存在内存中,以便于多次访问。这对于迭代算法或共享数据集等场景非常有用。
    容错:RDD 通过记录转换操作的 "血缘关系"(lineage)来实现容错。如果某个分区的数据丢失,Spark 可以通过血缘关系重新计算丢失的数据,而不需要进行复杂的数据恢复。
    调度:Spark 使用一个 DAG(Directed Acyclic Graph)调度器来管理计算任务。Spark 会将操作图划分为多个阶段(stage),每个阶段包含多个任务(task),每个任务对应 RDD 的一个分区的计算。Spark 调度器会尽可能地将需要进行 shuffle 操作的任务放在同一阶段,以减少数据传输的开销。
    Spark SQL, DataFrame and Dataset:除了基本的 RDD API,Spark 还提供了 Spark SQL 和 DataFrame/Dataset API,这些 API 提供了更高级的数据操作方式,如 SQL 查询和列式操作等。同时,它们还能享受到 Catalyst 优化器的优化,提高计算效率。

  • Join底层逻辑
    嵌套循环连接(Nested Loop Join):这是最基本的 JOIN 实现方式。对于每一行 R 在表 A 中,扫描整个表 B 查找匹配的行。这种方法简单直观,但如果两个表的大小都很大,那么这种方法的效率会非常低。
    排序合并连接(Sort Merge Join):在这种方法中,数据库首先将两个表按照连接键进行排序,然后同时扫描两个表进行连接。这种方法的优点是不需要索引,并且在两个表的大小差不多时效率很高。但如果两个表的大小差别很大,那么这种方法的效率就不是很高。
    散列连接(Hash Join):散列连接是一种在内存中通过散列技术处理连接操作的方法。这种方法中,数据库首先选取两个表中的一个(通常是较小的那个),然后根据连接键创建一个散列表。然后,数据库扫描另一个表,并使用相同的散列函数处理连接键,找到在散列表中的匹配行。散列连接在处理大规模数据时效率很高,但它要求至少有一个表(或两个表的一部分)能够放进内存。

  • 举例A(3) join B (5) 有几条数据
    在 SQL 中,JOIN 操作是根据给定的连接条件,将两个表中的行组合在一起。如果你没有给出具体的连接条件,我将假设你是在问一个简单的交叉连接(CROSS JOIN),也称为笛卡尔积。
    对于表 A 有 3 条记录,表 B 有 5 条记录,做 CROSS JOIN,结果将会有 3 * 5 = 15 条记录。这是因为每一条来自 A 的记录都会与 B 中的每一条记录配对,所以总的配对数就是 A 和 B 中记录数的乘积。
    然而,如果你是在问其他类型的 JOIN(例如 INNER JOIN,LEFT JOIN,RIGHT JOIN 或 FULL JOIN),那么结果将取决于给定的连接条件以及满足这些条件的行的数量。

8.18

  • 关系型数据库(RDBMS)
    关系型数据库基于关系模型,数据以表格的形式存储,每个表有其唯一的键(key)来标识每一行数据。具有一系列的操作符来操纵这些表格,可以在多个表之间进行联接操作以获取数据。
    特点:
    数据之间存在预定义的关系,例如一对一,一对多,多对多等。
    数据以表格形式存储,每个表有多个列,每个列对应一个属性。
    支持复杂的查询语句,如SQL。
    强调数据的一致性和完整性,支持ACID(原子性、一致性、隔离性、持久性)事务。
    例子:
    MySQL
    PostgreSQL
    Oracle Database
    MS SQL Server

  • 非关系型数据库(NoSQL)
    非关系型数据库不依赖于传统的行列式结构,而是使用更灵活的数据模型,如键值对、文档、列存储、图形数据库等。这些数据库设计用于处理大规模数据分布在多个服务器上。
    特点:
    没有预定义的数据模式,对数据的组织和格式更加灵活。
    横向可扩展,适合大数据和实时应用程序。
    不保证ACID,但一般会提供最终一致性。
    支持简单查询,对复杂查询支持不如RDBMS。
    例子:
    键值存储:Redis, DynamoDB
    文档存储:MongoDB, CouchDB
    列存储:Cassandra, HBase
    图形数据库:Neo4j, Amazon Neptune

  • 介绍hadoop,hadoop与hdfs的关系
    Hadoop和HDFS的关系可以看作是整体与部分的关系,HDFS是Hadoop的一个重要组成部分。
    Hadoop是一个开源的大数据处理框架,其主要目标是处理和存储大规模数据。Hadoop的核心是由两个主要组件构成的:
    Hadoop Distributed File System (HDFS):HDFS是Hadoop的分布式文件系统,它负责数据的存储。HDFS提供了一个高度容错的方式来存储大量数据,并能够在成千上万的服务器之间进行分布式处理。HDFS也设计用于在廉价的(相对于企业级硬件)硬件上运行,这使得Hadoop能够有效地存储和处理PB级别的数据。
    Hadoop MapReduce:MapReduce是Hadoop的数据处理模块。它是一个编程模型,用于处理和生成大数据集。用户可以编写MapReduce程序来处理在HDFS中存储的数据。

  • spark的RDD的几个特点
    弹性(Resilience):RDD能够通过所谓的线性转换(lineage,即数据的生命周期)信息在节点故障后自动恢复。如果RDD的某个分区数据丢失,Spark可以通过原始数据和转换操作的日志来重新计算丢失的分区数据。
    分布式(Distributed):RDD的数据自动分布在集群的所有节点上,每个节点处理数据集的一部分。这使得Spark可以进行并行处理,大大提高了处理大数据的速度。
    不可变性(Immutability):一旦创建,RDD就不能被修改。这种不可变性使得系统更容易维护,并且可以在多个节点上安全地并行处理数据。
    转换和行动操作(Transformations and Actions):RDD支持两种类型的操作:转换(transformation)和行动(action)。转换操作如map、filter和reduce会生成新的RDD,而行动操作如count、collect和save会触发实际的计算并返回一个结果到驱动程序,或者将数据存储到外部系统。

  • RDD相对于mapreduce的优点缺点

    • 优点:
  1. 易用性: Spark的API设计得更加简洁,提供了更高级的操作,比如map、filter、join等,这使得用户能更容易地编写并行计算代码。

  2. 性能: Spark能够在内存中存储中间结果(而不是像MapReduce那样写入磁盘),这使得Spark在迭代和交互式查询操作上比MapReduce要快很多。对于机器学习和数据挖掘等需要重复操作数据的任务,Spark的这个优点尤其突出。

  3. 灵活性: RDD支持多种数据源,并且可以进行更复杂的操作。例如,它不仅仅支持map和reduce操作,还支持SQL查询、流处理和机器学习等。

  4. 容错性: RDD通过lineage(血统)信息实现容错。当某个分区的数据丢失时,Spark可以通过lineage信息自动、有效地重新生成丢失的数据。

    缺点:
    内存使用: Spark使用内存来存储中间计算结果,这意味着它可能会用尽内存,尤其是在处理大规模数据时。虽然Spark有溢写到磁盘的机制,但这会影响性能。

  • hive join的几个方式,说明其原理

    1. Hive的Map-side JOIN:
      Map-side join是在Map阶段进行的,并且不需要Reduce过程。这种join方式在一张表(小表)可以装入内存的情况下效果最佳。Hive会将小表分发到各个节点,然后在Map过程中与大表的数据进行比对和连接。这种方式避免了数据在网络中的大规模传输,因此效率较高。
    2. Hive的Reduce-side JOIN:
      Reduce-side join是在Reduce阶段进行的。在Map阶段,Hive会按照join key将数据发送到同一个reducer。然后在Reduce阶段,数据被聚合并进行实际的join操作。这种方式的优点是不受内存限制,可以处理大型数据集,但缺点是会产生大量的网络数据传输,因此性能较低。
    3. Hive的Bucketed Map Join:
      Bucketed map join是针对bucketed table(已经进行过预分桶的表)的优化。如果两张表都是按照相同的列进行了预分桶,并且分桶的数量相同,那么Hive可以在Map阶段直接进行join操作,大大提高了效率。
    4. Hive的Skew Join:
      Skew join是针对数据倾斜(某些key的数据量远远大于其他key)的情况进行优化的。Hive会将数据量大的key单独处理,避免了由于数据倾斜造成的资源浪费。
  • 排序有哪些算法,具体一个说明
    冒泡排序
    插入排序
    选择排序
    快速排序
    归并排序
    堆排序
    希尔排序
    计数排序
    桶排序
    基数排序
    下面我们来详细介绍一下快速排序(Quick Sort)算法:
    快速排序是一种高效的排序算法,它的基本思想是使用分治法。快速排序的步骤如下:
    选定一个基准值(Pivot):从数组中选取一个元素作为基准值。
    分区(Partition):将数组分为两个子数组,一个包含所有比基准值小的元素,另一个包含所有比基准值大的元素。这个步骤完成后,基准值就位于数组的中间位置。
    递归排序子数组:对两个子数组递归执行上述两步。

  • kafka简单介绍
    Apache Kafka基于发布订阅模型,核心组件包括:
    Producer:生产者,向Kafka发送数据流的实体。
    Consumer:消费者,从Kafka读取数据流的实体。
    Broker:Kafka集群中的服务器,负责数据的存储和传输。
    Topic:Kafka中数据流的类别或者分区,Producer向其发布数据,Consumer从其订阅数据。
    Partition:Topic的分片,用于提高数据处理能力。

  • 讲一下 JVM 的垃圾回收的相关概念?
    Java虚拟机(JVM)的垃圾回收(Garbage Collection,GC)是Java内存管理的一个重要部分,它负责自动化地管理Java程序的内存,通过识别和回收不再使用的对象来释放内存。垃圾回收器在程序运行时进行,尽管开发者无法直接控制其精确的运行时间,但可以通过编写“内存友好”的代码以及调整JVM配置参数来影响其行为。
    以下是关于JVM垃圾回收的一些基本概念:
    对象的生命周期:Java对象的生命周期开始于创建(当使用new关键字时)并在不再有引用指向它们时结束。如果一个对象不再被引用,那么它就可能被垃圾回收。
    堆(Heap)内存:Java对象存储在堆内存中。堆在JVM启动时创建,可以通过JVM参数调整其大小。
    垃圾回收算法:垃圾回收器使用特定的算法来确定哪些对象可以被视为"垃圾"并进行回收。常见的垃圾回收算法有标记-清除(Mark-and-Sweep)、标记-压缩(Mark-and-Compact)、复制(Copying)、以及分代回收(Generational Collection)等。
    停顿时间(Stop-the-world):垃圾回收器在运行时,通常会导致Java应用程序的执行暂停,这种现象被称为“停顿时间”。减少停顿时间是垃圾回收器优化的一个重要目标。
    分代回收:Java的垃圾回收器通常采用分代回收策略,将堆内存分为新生代(Young Generation)和老年代(Old Generation)。这种策略基于这样一个观察:大多数对象的生命周期都很短。
    新生代(Young Generation):新创建的对象首先放在新生代。新生代通常分为一个Eden区和两个Survivor区(S0和S1)。大部分对象在Eden区被垃圾回收。
    老年代(Old Generation):如果对象在新生代中存活了足够长的时间,它们会被移动到老年代。老年代的空间通常比新生代大,并且其垃圾回收频率较低。
    垃圾回收器(GC Collectors):Java提供了多种垃圾回收器,包括Serial、Parallel、CMS(Concurrent Mark Sweep)、G1(Garbage-First)以及ZGC(Z Garbage Collector)等。每种垃圾回收器都有其特定的使用场景和优劣,选择哪种垃圾回收器取决于具体的应用需求。

  • JVM 常见调优方法有哪些?
    内存分配:扩大JVM堆的大小可以提供更多的空间给对象,减少垃圾回收(GC)的次数。使用-Xms和-Xmx参数可以分别设置堆的初始大小和最大大小。然而,分配过多的内存可能会导致更长的GC停顿时间,并可能影响其他进程的性能。
    选择垃圾回收器:根据应用的需求和特性选择合适的垃圾回收器。例如,对于需要低延迟的实时系统,选择并发垃圾回收器(如CMS或G1)可能是个好选择。对于可以容忍更长GC停顿时间的批处理任务,使用并行垃圾回收器(Parallel GC)可能更为合适。
    调整新生代和老年代的比例:JVM的堆内存被划分为新生代和老年代,其中新生代通常分为Eden区和两个Survivor区(S0和S1)。这些区域的大小可以通过参数-XX:NewRatio,-XX:SurvivorRatio进行调整。这种调整可以根据应用的对象生命周期进行,以减少GC的次数。
    调整线程堆栈大小:使用-Xss参数可以设置每个线程的堆栈大小。如果应用创建了大量的线程,减小线程堆栈大小可能会帮助减少内存消耗。
    启用类数据共享:类数据共享(Class Data Sharing, CDS)可以加快JVM启动速度并减少内存消耗。可以通过-XX:+UseSharedSpaces参数启用CDS。
    使用JVM内建工具进行监控和故障排查:JVM提供了一些内建工具,如JConsole, VisualVM, jstat等,可以用于监控JVM的性能和资源使用情况,帮助定位和解决性能问题。

  • 讲一下 ElasticSearch 的基本结构、索引和分片
    Elasticsearch 结构
    Elasticsearch 是一个开源的搜索引擎,基于 Apache Lucene 构建,它可以提供全文搜索功能,具有 HTTP web 接口和无模式 JSON 文档。Elasticsearch 能够处理大量数据,并且能在实时条件下提供搜索和分析功能。它的体系结构主要包括以下几个层次:

    • 集群 (Cluster):Elasticsearch 能够将多个服务器组织在一起,形成一个集群。集群能共享负载,提供冗余,从而提供高可靠性。
      节点 (Node):节点是集群中的一个服务器,负责存储数据,参与集群的索引和搜索功能。

    • 索引 (Index):索引是一种类似于数据库的数据结构,用于存储在 Elasticsearch 中的文档。

    • 文档 (Document):文档是 Elasticsearch 中存储的基本信息单位,类似于数据库中的一行数据。

    • 分片 (Shard):每个索引都会分成多个分片,每个分片是一个独立的 "索引",可以被分配到集群中的任何节点。

    • 副本 (Replica):为了提高系统的容错性,Elasticsearch 会创建分片的副本。

    • Elasticsearch 索引
      索引是 Elasticsearch 中用于存储类似类型文档的地方。比如说,你可以有一个客户的索引 (customer),另一个订单的索引 (order)。一个索引由一个或多个称为 shards 的物理分区组成。每个分片都是一个自包含的索引,可以在 Elasticsearch 集群中的任何节点上托管。

    • Elasticsearch 集群和分片
      在 Elasticsearch 中,集群是由一个或多个节点组成的,能够共同执行数据索引、搜索和分析的服务器组。每个节点都知道所有其他节点的存在,并且可以直接与任何其他节点通信。
      分片是 Elasticsearch 进行数据分片的方式,每个索引可以被分割成多个分片。每个分片都是一个完全独立的索引,可以在集群中的任何节点上托管。分片的主要优点是,它们允许你水平地拆分和扩展你的数据量,并且分片可以在多个节点之间分配,这有助于提高性能和吞吐量。

  • redis 的数据结构有哪些 ?

    • 字符串(String):字符串是 Redis 最基本的数据类型,你可以理解成与 Memcached 一样的功能,一个 key 对应一个 value。这个字符串类型是二进制安全的。意思是 Redis 的 string 可以包含任何数据,比如 jpg 图片或者序列化的对象。
    • 哈希(Hash):这是一个键值对集,Hash 是一个 string 类型的 field 和 value 的映射表,特别适合用于存储对象。
    • 列表(List):Redis 列表是简单的字符串列表,按插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。
    • 集合(Set):Set 是 string 类型的无序集合。和列表一样,你也可以添加、删除单个元素。但是,它保证存储的每个 string 都是唯一的。
    • 有序集合(Sorted Set):有序集合和普通集合一样也是 string 的集合, 同时又是每个元素都会关联一个 double 类型的分数。Redis 通过分数来为集合中的成员进行从小到大的排序。有序集合的成员是唯一的, 但分数(score)却可以重复。
    • 位图(Bitmaps):实际上是字符串的一种特殊类型。通过特殊的命令,你可以设置字符串中的某个位(bit),或者获取该位的值。
    • HyperLogLogs:这是一种用来统计唯一值(如一个网站的每日独立访客数)的数据结构。尽管它只使用了极小的内存,但是它可以统计几亿个对象。
    • 地理空间索引(Geo):你可以将地理位置(如经纬度)添加到这种数据结构中,然后在此基础上进行各种地理空间相关的操作。
  • MySQL MVCC 的原理
    在 MySQL 中,MVCC 是一种多版本并发控制(Multi-Version Concurrency Control)的机制。MVCC 主要用于实现数据库的事务(Transaction)、并发控制(Concurrency Control),以及读一致性(Read Consistency)。
    MVCC 主要在 InnoDB 存储引擎中实现,通过在每行记录后面保存两个隐藏的列来实现。这两个隐藏的列分别是:

    • 创建版本号(CREATION)
    • 删除版本号(DELETION)
      当开始一个新的事务时,事务版本号会自动递增。这两个隐藏列的值会被设置为当前的事务版本号。这意味着在同一时间可以有多个版本的行存在,每个版本都对应一个或多个指定的事务。
      对于任何特定的 SQL 查询,MVCC 会返回所有满足下列条件的行:
    • 行的创建版本号小于或等于事务版本号。
    • 行的删除版本号要么未定义,要么大于事务版本号。
      这就意味着,每个事务会看到一个它开始时的数据库快照,因此可以实现非锁定读(Non-Locking Reads),也就是读一致性。
      MVCC 的主要优点是它允许数据库进行更高的并发操作。因为读操作和写操作不会互相阻塞,所以可以大大提高数据库的性能。然而,MVCC 也有其缺点,例如它需要更多的磁盘空间来存储多个版本的行,并且对于大量的更新操作,可能需要更多的 CPU 和 I/O 资源来清理旧的行版本。
  • 2022年面经
    1.自我介绍
    2.个人信息和实习时长进一步沟通
    3.问项目,进一步阐明下项目细节
    4.HDFS备份文件数量
    5.HDFS读文件底层原理
    6.HDFS写文件底层原理
    7.追问是写完一个文件就返回还是所有备份写完才返回
    8.问MapReduce原理
    9.问Hive内部表和外部表的区别
    10.问Hivesql咋转换到MapReduce的
    11.问Hive可以用啥作为元数据库
    12.Hive和HDFS的底层架构的关系,什么地方用到HDFS
    13.问了对资源调度了解多少(提了yarn,没深入学习过)
    14.问Mysql索引用啥,为啥用B+树
    15.问各种连接方式的区别
    16.问平时用到的集群是用现成的还是自己搭建(虚拟机里面搭建集群)
    SQL出了两道题,最开始出了道一个city列中数据格式是(南京,北京,深圳)这样的,求内连接的结果。。想了一会说不会,city列改成了(南京)这样只有一个城市名称的数据格式,直接内连接就行。
    算法,问一个排序数组有一个数重复了,求重复次数。时间紧先写了循环遍历,然后说了二分查找的思路。

  • 同上二面
    1.自我介绍
    2.解释数据库,表,索引
    3.问索引为什么能加快查找速度
    4.解释第三范式
    4.出了七八道走不走索引的判断题,解释理由(有个范围查找的走没走索引答错了,呜呜呜呜)
    5.解释二叉树
    6.问二叉树的几种遍历方式
    7.算法题,问二叉树存不存在根节点到叶子结点路径上的数据和为一个target。
    反问,问了部门业务场景,还稍微聊了一点数仓的东西。

  • 已过
    首先做了三道SQL题,主要涉及分组聚合、窗口函数。

    • 3.3 一面 28min:
      1.自我介绍
      2.为什么要做这个项目
      3.介绍DataX
      4.项目问题
      5.介绍HDFS
      6.Hadoop hive hdfs spark关系
      7.职业规划
      8.数仓分层
      9.窗口函数
    • 3.6 二面 45min:
      1.自我介绍
      2.项目介绍
      3.维度模型
      4.一道数仓场景题
      5.数仓分层
      6.SQL常用函数
      7.rank dense_rank row_number区别
      8.SQL优化常用手段
      9.数据倾斜问题
      10.职业规划
      3.6 oc
      3.8 offer ✅
打赏作者

1 个评论

  1. 问到的问题:
    TCP与UDP区别
    线程和进程区别
    这个链接好多都问到了,https://zhuanlan.zhihu.com/p/359664288
    ACID,是指数据库管理系统(DBMS)在写入或更新资料的过程中,为保证事务(transaction)是正确可靠的,所必须具备的四个特性:原子性(atomicity,或称不可分割性)、一致性(consistency)、隔离性(isolation,又称独立性)、持久性(durability)
    Python的Metaclass
    Python的装饰器
    Hadoop的map reduce流程详细说一下
    Spark的工作流程
    RDD宽窄依赖
    Hive说一些
    数据仓库接触过吗
    数据结构有哪些
    有哪些排序算法,O(N^2),O(N)的有哪些?
    Python有哪些数据结构,list和set的区别,深拷贝和浅拷贝的区别
    Spark还问了几个我都没听说过的概念,没记住,废柴@@
    RDD宽窄依赖

    头像 cng

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

CAPTCHA