📌  相关文章
📜  沃尔玛实验室面试经历|第 17 集(经验丰富的Java开发堆栈)

📅  最后修改于: 2021-09-23 05:43:09             🧑  作者: Mango

我通过员工推荐申请了 Walmart Labs,第二天接到 HR 的电话,让我简要介绍我的工作以及我对搬迁班加罗尔的兴趣。他通知他们将在下周安排面试(电话)。整个面试过程用了一周时间完成——2 次电话,然后是 5 次 F2F 讨论。

2 电话技术讨论

第 1 轮:第一次 Webex/电话讨论(DS 问题)

  1. 找到一个三元组,使得索引按递增顺序排列,以便作为索引处的值。
    大小为 3 的排序子序列
    使用一个数组继续优化问题,因为我们只需要找到一个三元组,而不是全部。
  2. 找到与目标节点距离为 k 的所有节点。

第 2 轮:第二次 Webex/电话讨论(DS 和设计问题)

  1. 设计一个堆栈,使其提供 push()、pop() 和 min() 在 O(1) 中。仅使用堆栈而不使用任何其他数据结构。
  2. 为“餐厅餐桌预订”设计一个应用程序:
    – 数据库设计(涉及各种表)以及它们之间的关系(UML/ER 图)-
    – 需要在高层公开哪些 API
    – 申请流程
    – 更加注重高效预订
    – 处理各种场景,例如如何保持空位和空位,以实现带桌酒店的多存储建筑。

第二天收到反馈,并被要求参加 F2F 讨论。
他们提供机票。这是一日活动。早上 6:00 从海得拉巴出发,晚上 11:30 返回海得拉巴。我在班加罗尔的沃尔玛实验室办公室进行了 5 次 F2F 技术讨论。

5 F2F 技术讨论

第 3 轮:第一次 F2F 讨论(Java/DS/Projects)

  1. 项目详细讨论——深入讨论我正在做的项目和我的贡献。
    – 为什么这个那个?
    – 其他方法?
  2. Java Wrapper Class 相关问题。 Java中 Wrapper 类的重要性是什么?
  3. Java的不可变类及其在Java的意义是什么?
  4. 单例类讨论和示例代码。
    – 单例的延迟和早期初始化
    – 双重检查锁定示例代码。
    – 创建单例实例的持有者模式
  5. 多行文件 – 作为输入传递的两个词。找到它们之间的最小距离
  6. 基于二叉树水平距离的问题 – 按 hd 的排序顺序打印所有节点。即:水平距离的节点:-3 -2 -1 0 1 2 3(使用 TreeHashmap 而不是 HashMap)

第 4 轮:第二次 F2F 讨论(DS/简历扫描)

  1. 编写示例代码以生成给定字符串的所有排列。
    – 想法是对所有递归进行迭代,并确保没有被破坏。
  2. 找出字符串最长的回文——DP 解的蛮力解。
  3. 恢复扫描了解我在哪里使用了哪些技术

第 5 轮:第 3 次 F2F 讨论(Java/DS)

  1. 我正在从事的项目的简要概述以及与之相关的一些问题。我提到过,我已经使用 javacc 为 SQL Server 编写了解析器,它使用 Tree DS 进行节点迭代。 DS 的下一个问题。
  2. 在给定的二叉树中找到给定级别的最大和。 (层序遍历)
  3. 查找给定水平距离处所有节点的总和。按降序显示(高清:4 3 2 1 0 -1 -2 …)
  4. 正则表达式实现——匹配测试或 te*t 或 t?*t
  5. 元空间概念- Java内存模型用Java 8改变。它有什么好处?
  6. 什么是弱参考——我不擅长回答这个问题。
  7. 我工作过的其他技术是什么以及在哪里工作。
    – Spring AOP – 鸭子给我。不适用于 Spring
  8. 我使用过的设计模式以及在哪里使用。还有我知道的DP是什么。
  9. 努力完成的项目或类似的情况。
  10. Java提供了一些安全机制来防止通过反射进行攻击 – 我无法正确回答。他指的是我的博客,因为我已经写了如何使用反射打破单例。

第 6 轮:第 4 次 F2F 讨论(设计/问题解决)

  1. 项目讨论和我对它的贡献。
  2. 设计一个库存系统。
    – 考虑可扩展性和性能的高级系统设计。
    – 讨论分布式缓存及其使用方式。
    – 负载均衡器及其用法的意义。
    – 数据库设计,
    – 如何实现数据库抽象(今天是关系型DB,明天可能是NOSQL)。
  3. 如何处理大流量请求?
  4. 一些与线程转储和分析相关的问题。
  5. 一个需要解决的问题——一个带有订单节点的 XML。根据 id 和订单名称显示排序节点。 – 我给出了蛮力解决方案。
    强加限制:不使用集合 API 进行排序和无比较器。

第 7 轮:第 5 次 F2F 讨论(设计/分布式系统轮/抽象问题)

  1. 您工作过的项目让您感到自豪并跟进有关工作量和代码行的问题。
  2. 设计一个处理失败请求的多线程系统,失败请求在数据库中更新。
    – 我的解决方案是找到记录时间戳的哈希码并将失败的记录分发给多个线程,为指定数量的线程维护一个线程池。
  3. 下一个问题,如果有多个服务器,如何发送请求由多个服务器线程池处理。
    – 我建议使用负载均衡器并执行拉取请求 – 从数据库读取记录并发送到多个服务器,因此发送到两个服务器的记录不会相同。
  4. 什么是隐式和显式锁定。线程如何手动工作?用于实现显式锁定的接口和类。
  5. 分布式锁的设计。
    – 我建议基于文件的锁定机制,jvm 到 jvm 通信。
    – 他问基于数据库的锁定怎么样。无法正确解释。
  6. 如何设计一个系统,使得 – 一种类型(种类/某种PK)的数据总是按顺序更新,没有脏更新。
    – 我建议使用 map-reduce 方法。
    – 基于时间戳的方法。

啊啊啊!!!最后,是时候离开了。累。
最后,我加入了沃尔玛。

-作者
尼基尔·兰詹
http://www.devinline.com/