大厂Flink面经及参考答案(拼多多小红书阅文集团等等面经汇总)

Flink 架构是怎样的?

Flink 的架构设计以分布式流处理为核心,能够在无界和有界数据流上实现高效计算。其核心组件包括 JobManagerTaskManager客户端,整体采用主从模型

  • JobManager:作为集群的“大脑”,负责协调任务调度、检查点管理(Checkpointing)和故障恢复。它包含 Dispatcher(接收作业提交)、ResourceManager(管理 TaskManager 的资源)和 JobMaster(监督单个作业的执行)。
  • TaskManager:实际执行任务的节点,每个 TaskManager 包含多个 Task Slot(资源单位),用于并行处理数据流。Slot 的数量决定了任务的并行度。
  • 客户端:提交作业到集群,并监控作业状态。客户端并非作业执行的一部分,提交完成后可断开连接。

Flink 的运行时模型基于数据流图(Dataflow Graph),将作业分解为 Source(数据源)、Transformation(转换操作)和 Sink(输出)。数据流图进一步转换为执行图(ExecutionGraph),通过并行子任务在 TaskManager 上运行。

关键特性包括:

  1. 容错机制:通过检查点(Checkpoint)和保存点(Savepoint)实现状态持久化,支持精确一次(Exactly-Once)语义。
  2. 事件时间处理:支持基于事件时间的窗口计算,处理乱序事件。
  3. 资源弹性:与 Kubernetes、YARN 等资源管理器集成,动态调整资源分配。
  4. 背压处理:通过本地队列和反压机制防止数据堆积。

Flink 的窗口有哪些类型?它们之间有什么区别?如何定义?

窗口是 Flink 处理无界流的核心机制,用于将无限数据切分为有限块。主要类型分为时间窗口计数窗口会话窗口,每类窗口又可细分为**滚动(Tumbling)滑动(Sliding)**形式。

  • 时间窗口滚动时间窗口:按固定时间间隔划分,窗口之间无重叠。例如,每 5 分钟统计一次数据。滑动时间窗口:窗口长度固定,但滑动步长小于窗口长度,允许重叠。例如,每 1 分钟统计过去 5 分钟的数据。
  • 计数窗口滚动计数窗口:按元素数量划分,例如每 100 个元素触发计算。滑动计数窗口:需定义窗口大小和滑动步长(如每 10 个元素滑动一次,统计最近 50 个元素)。
  • 会话窗口通过不活动间隙(Inactivity Gap)划分窗口。若两个事件的时间间隔超过阈值,则创建新窗口。

区别与适用场景

  • 时间窗口适合按固定时间统计指标(如每分钟交易额)。
  • 计数窗口适用于元素数量固定的场景(如每 1000 条日志聚合)。
  • 会话窗口用于分析用户行为会话(如网页点击序列)。

Flink 窗口函数及时间语义相关问题有哪些?

窗口函数决定如何对窗口内的数据进行计算,而时间语义定义了事件处理的时间基准。

时间语义类型

  1. 事件时间(Event Time):以数据自带的时间戳为准,需配合水位线(Watermark)处理乱序事件。
  2. 处理时间(Processing Time):以系统处理时间为准,延迟低但结果不确定。
  3. 摄取时间(Ingestion Time):数据进入 Flink 源算子时的时间,介于前两者之间。

窗口函数分类

  • 增量聚合函数(如 ReduceFunctionAggregateFunction):逐条处理数据,适合高效计算(如求和、最大值)。
  • 全量窗口函数(如 ProcessWindowFunction):窗口触发时一次性处理所有数据,可访问窗口元信息(如起止时间)。

常见问题

  1. 如何选择时间语义?需要结果准确性时用事件时间;追求低延迟用处理时间。
  2. 如何处理迟到数据?通过 allowedLateness 设置窗口延迟关闭时间,或使用侧输出(Side Output)捕获迟到数据。
  3. 水位线与窗口触发的关系?水位线达到窗口结束时间时触发计算,但允许延迟数据更新结果。

请介绍下 Flink 的 watermark(水位线),它需要实现哪个接口?在何处定义?有什么作用?有哪几种类型?

水位线(Watermark) 是 Flink 处理事件时间的核心机制,用于跟踪事件进展并解决乱序问题。

  • 作用:标识某个时间点之前的事件已到达,窗口可触发计算。控制数据处理的进度,平衡延迟和准确性。
  • 定义位置:在数据源或数据流转换后,通过 assignTimestampsAndWatermarks 方法分配时间戳和水位线。
  • 实现接口:周期性水位线:实现 WatermarkGenerator 接口,定期生成水位线。标点式水位线:根据特定事件(如特殊标记)触发水位线更新。

类型与示例

  1. 单调递增水位线:假设无乱序,水位线等于当前最大时间戳。
  2. 允许固定延迟的水位线:水位线 = 最大时间戳 - 延迟阈值。

水位线传播

  • 水位线由源算子生成,随数据流向下游传递。
  • 算子根据接收到的水位线更新自身的“事件时间时钟”,决定窗口触发时机。

Flink 的窗口实现机制是怎样的?

窗口实现机制围绕生命周期管理状态存储触发逻辑展开。

  1. 窗口生命周期:创建:根据窗口分配器(Window Assigner)决定数据属于哪些窗口。触发:当水位线超过窗口结束时间(事件时间)或系统时间达到阈值(处理时间)时触发计算。销毁:窗口计算结果后,根据 allowedLateness 决定保留时间,超时后清理状态。
  2. 窗口组件:窗口分配器(Window Assigner):定义数据如何分配到窗口(如时间/计数窗口)。触发器(Trigger):决定何时触发窗口计算(基于时间、元素数量或自定义条件)。驱逐器(Evictor):可选组件,用于在触发前/后移除部分数据(如保留最近 N 个元素)。
  3. 状态管理:窗口内的数据以状态形式存储,支持堆内存或 RocksDB 持久化。状态内容根据窗口函数类型不同而变化: 增量聚合函数仅存储聚合结果(如累加器)。全量窗口函数存储所有原始数据。
  4. 延迟数据处理:通过 allowedLateness 允许窗口在一段时间内接收迟到数据,并重新触发计算。最终结果通过侧输出流处理超时数据。

容错与一致性

  • 窗口状态被纳入检查点(Checkpoint),故障恢复时可还原。
  • 精确一次语义通过屏障对齐(Barrier Alignment)和状态快照保证。

优化策略

  • 合并窗口:会话窗口动态合并相邻窗口,减少状态开销。
  • 延迟触发:结合水位线和处理时间,避免过早触发导致结果不准确。

好的,我现在需要处理用户接下来的五个Flink相关的大数据面试题。这些问题分别是:

  1. Flink的CEP(复杂事件处理)
  2. Flink的Checkpoint机制,包括作用和流程
  3. Checkpoint底层实现,savepoint和checkpoint的区别
  4. ExactlyOnce语义如何保证,端到端ExactlyOnce是什么
  5. Flink相比其他流处理框架的优点

Flink 的 CEP(复杂事件处理)是什么?

Flink CEP 是用于检测复杂事件模式的库,专为从数据流中识别特定事件序列而设计。它的核心是通过定义模式规则(Pattern),在连续的事件流中匹配符合条件的事件组合,常用于风险监控、用户行为分析等场景。

核心概念与组件

  • Pattern 定义:通过 Pattern API 描述事件序列的逻辑,例如“连续登录失败 3 次后触发告警”。支持顺序循环时间约束等操作。
  • 状态管理:CEP 内部使用状态后端存储部分匹配的事件序列,支持处理乱序数据。
  • 检测机制:基于 NFA(非确定有限自动机) 实现高效模式匹配,通过状态跳转跟踪事件序列。
  • 超时处理:可通过 within 指定时间窗口,超时未匹配的事件通过侧输出流处理。

应用场景

  • 金融风控:检测异常交易链(如短时间内多次大额转账)。
  • 物联网:识别设备故障序列(如温度持续超限后触发停机信号)。
  • 用户行为分析:发现特定操作路径(如“浏览-加入购物车-支付失败”)。

优势与挑战

  • 优势:低延迟匹配、支持复杂逻辑、与 Flink 流处理无缝集成。
  • 挑战:状态管理需谨慎(避免内存膨胀)、模式复杂度影响性能。

Flink 的 Checkpoint 机制是什么?包括其作用、流程。

Checkpoint 是 Flink 实现容错的核心机制,通过定期保存状态快照,确保故障时作业能恢复到一致状态。

核心作用

  • 故障恢复:从最近一次快照重启任务,避免数据丢失或重复处理。
  • 精确一次语义:通过状态一致性保证,结果计算不丢不重。
  • 作业更新:结合 Savepoint 实现无停机升级或配置调整。

Checkpoint 流程

  1. 触发阶段:JobManager 向所有 TaskManager 发送检查点屏障(Checkpoint Barrier)。
  2. 屏障对齐:算子收到屏障后暂停处理新数据,等待所有输入流的屏障到达,确保状态一致性。
  3. 状态快照:算子将当前状态异步写入持久化存储(如 HDFS、S3)。
  4. 确认完成:所有算子上报快照完成后,JobManager 标记该检查点生效。

配置参数

  • 间隔时间:通常设置为分钟级(如 1 分钟),平衡故障恢复速度和系统开销。
  • 超时阈值:若检查点未在规定时间内完成,则终止并触发恢复。
  • 存储路径:支持文件系统、RocksDB 等,影响恢复速度和可靠性。

Flink 的 Checkpoint 底层是如何实现的?savepoint 和 checkpoint 有什么区别?

底层实现原理

  • 屏障传播:JobManager 生成屏障插入数据流,算子根据屏障划分检查点边界。
  • 状态快照: 同步阶段:暂停处理,将内存状态复制到临时存储。异步写入:将临时数据写入持久化存储(如 RocksDB 增量快照)。
  • 恢复机制:从持久化存储加载快照,重新构建算子状态。

Checkpoint vs Savepoint

触发方式

自动周期触发

手动触发

用途

故障恢复

作业升级、扩缩容、版本迁移

存储位置

分布式存储(如 HDFS)

外部存储(用户指定路径)

保留策略

自动清理(保留最新 N 个)

长期保留

性能影响

高频触发可能影响吞吐量

低频操作,影响较小

关键区别

  • Savepoint 是手动触动的 Checkpoint 超集,包含更多元数据(如作业拓扑)。
  • Checkpoint 为轻量级容错设计,Savepoint 用于作业生命周期管理

Flink 的 ExactlyOnce 语义怎么保证?什么是端到端 ExactlyOnce?

ExactlyOnce 语义保证

Flink 通过 Checkpoint 机制屏障对齐 实现算子级别的精确一次处理:

  1. 屏障对齐:确保所有算子在处理同一批次数据前完成状态快照。
  2. 状态恢复:故障时从快照恢复,重新处理未确认的数据。
  3. 幂等写入:部分 Sink 支持多次写入同一结果不重复(如数据库主键去重)。

端到端 ExactlyOnce

要求从数据源到外部存储的整个流程保证精确一次,需满足:

  • 可重放的数据源:如 Kafka(支持偏移量回滚)。
  • 事务性 Sink:通过两阶段提交协议(2PC)实现原子写入。 预提交阶段:写入数据但标记为未提交。提交阶段:Checkpoint 完成后提交事务。
  • 一致性协调:JobManager 协调 Source 和 Sink 的事务状态。

实现示例(Kafka 端到端)

  • Source:Kafka 消费者记录偏移量,快照中保存偏移状态。
  • Sink:Kafka Producer 使用事务提交数据,Checkpoint 完成时提交事务。

Flink 相比于其它流式处理框架的优点有哪些?

Flink 在流处理领域具备显著优势,对比 Storm、Spark Streaming 等框架:

核心优势

  • 真正的流处理逐事件处理(非微批次),延迟低至毫秒级(Storm 为亚秒级,Spark Streaming 秒级)。
  • 事件时间支持:内置水位线机制,可处理乱序数据,结果准确性高。
  • 状态管理:原生支持算子状态键控状态,状态数据可扩展至 TB 级。
  • 容错机制:基于 Checkpoint 的轻量级恢复,比 Storm 的 ACK 机制更高效。
  • 流批一体:同一 API 处理流和批数据,无需维护两套系统(如 Spark 需区分 Streaming 和 Batch)。

功能对比

Flink

逐事件

强大(堆/RocksDB)

Checkpoint

完整支持

Storm

逐事件

无(需外部存储)

Record ACK

有限支持

Spark Streaming

微批次

基于 RDD

批次重放

部分支持

扩展优势

  • 灵活窗口:支持滚动、滑动、会话窗口,且允许自定义窗口逻辑。
  • 复杂事件处理:集成 CEP 库,直接处理复杂模式检测需求。
  • 生态丰富:支持 Connectors(Kafka、HBase)、机器学习库(Flink ML)、SQL 查询。
  • 资源弹性:在 Kubernetes 上动态扩缩容,资源利用率高。

适用场景

  • 实时数仓:低延迟 ETL 处理。
  • 事件驱动应用:实时告警、动态定价。
  • 数据分析:实时仪表盘、用户行为统计。

Flink 和 Spark 的区别是什么?在什么情况下使用 Flink?使用 Flink 有什么优点?

Flink 和 Spark 是两种主流的大数据处理框架,但设计理念和适用场景存在显著差异。

核心区别

  • 处理模型: Flink 是真正的流处理引擎,采用逐事件(Event-by-Event)处理模式,延迟可低至毫秒级。Spark 基于微批次(Micro-Batch)模型,将数据切分为小批次处理,延迟通常在秒级以上。
  • 流批统一性: Flink 通过同一套 API 处理流和批数据(DataStream 和 DataSet API 已逐步统一为 Table API)。Spark 需分别使用 Spark Streaming(微批次)和 Spark SQL(批处理),生态分离。
  • 状态管理: Flink 原生支持键控状态(Keyed State)和算子状态(Operator State),状态规模可扩展至 TB 级。Spark Streaming 的状态管理依赖外部存储(如 HDFS),且功能有限。
  • 容错机制: Flink 通过 Checkpoint 机制实现轻量级故障恢复,支持精确一次语义。Spark Streaming 依赖批次重放,仅能保证至少一次(At-Least-Once)语义。

何时选择 Flink?

  • 低延迟需求:如实时风控、实时推荐等场景。
  • 复杂事件处理:需 CEP 库检测事件模式(如用户行为路径分析)。
  • 状态密集型作业:如实时聚合计算、窗口操作依赖大量中间状态。
  • 乱序数据处理:需基于事件时间和水位线机制保证结果准确性。

Flink 的核心优势

  • 低延迟高吞吐:逐事件处理模型兼顾实时性和吞吐量。
  • 精确一次语义:Checkpoint 和屏障对齐确保数据一致性。
  • 灵活的窗口机制:支持事件时间窗口、会话窗口等复杂逻辑。
  • 生态集成:与 Kafka、Hadoop、HBase 等系统无缝对接,支持 SQL 和机器学习库。

Flink BackPressure 反压机制是什么?如何进行指标监控?

反压机制用于解决上下游算子处理速度不匹配导致的数据堆积问题,防止系统崩溃。

工作原理

  • 本地反压:TaskManager 的每个子任务通过有限缓冲区接收数据。当缓冲区满时,通知上游停止发送数据。
  • 网络反压:基于 Credit-Based 流量控制,下游通过“信用值”告知上游可接收的数据量,信用值耗尽时暂停传输。
  • 级联反压:反压从 Sink 向 Source 逐级传递,最终降低 Source 的数据摄入速率。

监控手段

  • Web UI 反压指标: BackPressure Status:显示算子是否处于反压状态(High/Low)。Busy Time:算子处理数据的繁忙程度,高值可能预示反压。
  • Metrics 系统: outPoolUsage 和 inPoolUsage:输出/输入缓冲区的使用率,超过阈值触发告警。numRecordsOutPerSecond:每秒输出记录数,突降可能表示下游阻塞。
  • 日志分析:TaskManager 日志中搜索“backpressure”关键字,定位反压源头。

优化策略

  • 调整并行度:提升慢算子的并行度,分摊负载。
  • 资源分配:为瓶颈算子分配更多内存或 CPU。
  • 状态优化:使用 RocksDB 状态后端减少堆内存压力。

Flink 如何保证一致性?

Flink 的一致性保障分为算子级别端到端级别,核心依赖 Checkpoint 机制精确一次语义实现。

算子级别一致性

  • 屏障对齐(Barrier Alignment): JobManager 插入 Checkpoint Barrier 到数据流中,算子收到所有输入流的 Barrier 后触发状态快照。对齐期间缓冲后续数据,确保快照包含一致的数据状态。
  • 异步快照:状态写入持久化存储(如 HDFS)与数据处理并行,减少性能影响。
  • 状态恢复:故障时从最近成功的 Checkpoint 恢复,重新处理未确认的数据。

端到端一致性

  • 可重放的数据源:如 Kafka,支持按偏移量重新读取数据。
  • 事务性 Sink: 幂等写入:多次写入同一数据结果不变(如数据库主键去重)。两阶段提交(2PC): 预提交阶段:Sink 将数据写入临时存储(如 Kafka 事务)。提交阶段:Checkpoint 完成后提交事务,确保数据原子性。

一致性级别

  • 精确一次(Exactly-Once):数据不丢不重,需端到端配合。
  • 至少一次(At-Least-Once):数据可能重复,适用于可去重场景。

Flink 支持 JobMaster 的 HA(高可用性)吗?原理是怎样的?

Flink 支持 JobMaster 高可用性,通过 ZooKeeper 协调持久化元数据实现故障自动切换。

实现原理

  1. 领导者选举: 多个 JobManager 中,ZooKeeper 选举一个 Leader,其余作为 Standby。Leader 负责管理 Checkpoint 和任务调度。
  2. 元数据持久化: JobManager 的元数据(如作业图、Checkpoint 路径)存储到 分布式存储系统(如 HDFS)。
  3. 故障检测与恢复: ZooKeeper 监控 Leader 存活状态,若失联则触发重新选举。新 Leader 从持久化存储加载元数据,重启 TaskManager 任务并恢复 Checkpoint 状态。

配置要点

  • ZooKeeper 集群:至少 3 个节点,防止脑裂问题。
  • HA 存储路径:需配置高可用的文件系统路径(如 high-availability.storageDir: hdfs:///flink/ha)。
  • 心跳超时:调整 heartbeat.timeout 参数,避免误判故障。

优势与限制

  • 优势:分钟级故障恢复,作业无感知切换。
  • 限制:依赖外部协调服务(如 ZooKeeper),增加运维复杂度。

如何确定 Flink 任务的合理并行度?

合理并行度需平衡资源利用率吞吐量延迟,通常通过以下步骤确定:

  1. 评估数据源吞吐量: 若数据源为 Kafka,根据 Topic 的分区数设置初始并行度(如 Kafka 分区数为 8,则 Source 并行度设为 8)。
  2. 观察反压情况: 使用 Web UI 或 Metrics 检查算子是否反压,反压常表明下游处理能力不足,需提升并行度。
  3. 资源限制: 每个 Task Slot 的 CPU 和内存资源需满足算子需求,避免资源争抢导致性能下降。例如,若集群总 Slot 数为 20,单个作业最大并行度不宜超过 20。
  4. 关键算子优化: Window 算子:并行度与时间窗口大小和数据分布相关,可通过压测调整。KeyBy 算子:确保 Key 分布均匀,防止数据倾斜。若 Key 集中,需增加并行度或重分布数据。
  5. 动态调整: 开启 Dynamic Scaling(Kubernetes 或 YARN 环境),根据负载自动扩缩容。

实践经验

  • 初始值设定:从数据源分区数或集群 Slot 数的 50% 开始,逐步增加。
  • 压测验证:逐步提高并行度,观察吞吐量和延迟变化,找到性能拐点。
  • 监控指标:关注 numRecordsInPerSecondbusyTimeMsPerSecond 等指标,确保资源利用率在 70%~80%。

示例场景

  • 低吞吐作业(如每分钟处理千条数据):并行度设为 2~4,避免资源浪费。
  • 高吞吐作业(如电商大促实时统计):并行度与 Kafka 分区数对齐,逐步扩展至 50+。

Flink 和 Spark 的区别是什么?在什么情况下使用 Flink?使用 Flink 有什么优点?

Flink 和 Spark 是两种主流的大数据处理框架,但设计理念和适用场景存在显著差异。

核心区别

  • 处理模型: Flink 是真正的流处理引擎,采用逐事件(Event-by-Event)处理模式,延迟可低至毫秒级。Spark 基于微批次(Micro-Batch)模型,将数据切分为小批次处理,延迟通常在秒级以上。
  • 流批统一性: Flink 通过同一套 API 处理流和批数据(DataStream 和 DataSet API 已逐步统一为 Table API)。Spark 需分别使用 Spark Streaming(微批次)和 Spark SQL(批处理),生态分离。
  • 状态管理: Flink 原生支持键控状态(Keyed State)和算子状态(Operator State),状态规模可扩展至 TB 级。Spark Streaming 的状态管理依赖外部存储(如 HDFS),且功能有限。
  • 容错机制: Flink 通过 Checkpoint 机制实现轻量级故障恢复,支持精确一次语义。Spark Streaming 依赖批次重放,仅能保证至少一次(At-Least-Once)语义。

何时选择 Flink?

  • 低延迟需求:如实时风控、实时推荐等场景。
  • 复杂事件处理:需 CEP 库检测事件模式(如用户行为路径分析)。
  • 状态密集型作业:如实时聚合计算、窗口操作依赖大量中间状态。
  • 乱序数据处理:需基于事件时间和水位线机制保证结果准确性。

Flink 的核心优势

  • 低延迟高吞吐:逐事件处理模型兼顾实时性和吞吐量。
  • 精确一次语义:Checkpoint 和屏障对齐确保数据一致性。
  • 灵活的窗口机制:支持事件时间窗口、会话窗口等复杂逻辑。
  • 生态集成:与 Kafka、Hadoop、HBase 等系统无缝对接,支持 SQL 和机器学习库。

Flink BackPressure 反压机制是什么?如何进行指标监控?

反压机制用于解决上下游算子处理速度不匹配导致的数据堆积问题,防止系统崩溃。

工作原理

  • 本地反压:TaskManager 的每个子任务通过有限缓冲区接收数据。当缓冲区满时,通知上游停止发送数据。
  • 网络反压:基于 Credit-Based 流量控制,下游通过“信用值”告知上游可接收的数据量,信用值耗尽时暂停传输。
  • 级联反压:反压从 Sink 向 Source 逐级传递,最终降低 Source 的数据摄入速率。

监控手段

  • Web UI 反压指标: BackPressure Status:显示算子是否处于反压状态(High/Low)。Busy Time:算子处理数据的繁忙程度,高值可能预示反压。
  • Metrics 系统: outPoolUsage 和 inPoolUsage:输出/输入缓冲区的使用率,超过阈值触发告警。numRecordsOutPerSecond:每秒输出记录数,突降可能表示下游阻塞。
  • 日志分析:TaskManager 日志中搜索“backpressure”关键字,定位反压源头。

优化策略

  • 调整并行度:提升慢算子的并行度,分摊负载。

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

17年+码农经历了很多次面试,多次作为面试官面试别人,多次大数据面试和面试别人,深知哪些面试题是会被经常问到。 在多家企业从0到1开发过离线数仓实时数仓等多个大型项目,详细介绍项目架构等企业内部秘不外传的资料,介绍踩过的坑和开发干货,分享多个拿来即用的大数据ETL工具,让小白用户快速入门并精通,指导如何入职后快速上手。 计划更新内容100篇以上,包括一些企业内部秘不外宣的干货,欢迎订阅!

全部评论
请问在企业开发,流批一体化,用Flink SQL开发离线数仓的多吗?
点赞 回复 分享
发布于 03-02 13:38 广东

相关推荐

首先自我介绍,然后I.上来就是两道中等的sql题目:1.SELECT   CASE     WHEN name_count > 1 THEN CONCAT(d.name, s.name)    ELSE s.name  END AS display_nameFROM (  SELECT sp.*, COUNT(*) OVER (PARTITION BY sp.name) AS name_count  FROM student_profile sp) sJOIN department d ON s.department_id = d.id;唯一记录的一条sql,我感觉有小问题,但是感觉面试官很急。我想改他直接说赶紧下一个。为什么select里面用的别名不能直接用到同一个语句中,我回答sql执行顺序的问题,以及在hive中会报错,未找到相应的名字。他笑了,我的回答错了???whateverIII. 考了spark shuffle 的过程,非常的细节,怎么给partition分区?我的回答:spark.default.parallelism,通常等于集群的 CPU 核心数,默认值为 200。或者读取文件时指定分区数。然后这里他又笑了,内心os:这位大佬是微笑大使。IV. 他让我直接写ods 和 dwd 层建模的过程!这一考法我有点不理解要考什么,有木有大佬给我解答一下(感谢)。虽然我写了一部分,但是有的还是忘了。V. 考了我HTTP中reception的作用,不知道这里是不是我听错了,我说能再说一遍吗?他说没时间了,今天就这样吧。总结:自我介绍我太简略了?我想着他手上有我的简历,他好像对我的实习经历有点不感兴趣,因为他说我介绍的时候都是业务层面的?Interview time:One Hour中间还有一些,我就没写了。。。#如何判断面试是否凉了##大家都开始春招面试了吗##数据人的面试交流地##牛客AI配图神器#
点赞 评论 收藏
分享
评论
1
16
分享

创作者周榜

更多
牛客网
牛客企业服务