📜  甲骨文面试经历

📅  最后修改于: 2021-11-17 10:06:39             🧑  作者: Mango

第 1 轮(编码器垫和缩放):

面试官看了我的简历,问了我目前熟悉的项目和技术栈。之后,她让我解决一个编码问题。

问题1 :给定一个整数数组,它是二叉树的层序遍历,并让我找出它是否是二叉搜索树。

例子

Input : [8,5,11,null,null,10,12,7,null]
Output : False

Input : [8,5,13,null,null,10,16,9,14]
Output : False

Input : [8,5,13,null,null,10,16,9,11]
Output : True

在我开始编码之前,她对这种方法很感兴趣。我花了一些时间想出了一个方法,她对这个方法很满意,并让我编码。通过确保每个测试用例都通过,在一些测试用例上测试了我的代码,然后她转到下一个问题。

问题 2 :给定一个包含整数的字符串。找出可以将字符串解码为大写英文字母的方法数。假设 ‘A’ 代表 1,’B’ 代表 2 …..’Z’ 代表 26。

例子

Input : "226"
Output : 3
Possible combinations : BZ(2, 26), VF(22, 6), BBF(2,2,6)
Input : "100"
Output : 0
Input : "205"
Output : 1
Possible Combinations : TE

我已经使用递归和动态编程来实现(以避免重新计算相同的子问题)。她还用一些测试用例和边缘用例测试了代码,如果我没有使用过动态编程,她问我程序的复杂性。我回答为 O(2^n)。她说这是本轮的最后一个问题,并祝我在 15 分钟后开始的第二轮好运。

第 2 轮(编码器垫和缩放)

面试官问了我目前的项目和我正在使用的技术栈。然后他问了一些关于核心Java的问题,如下

  1. 为什么我们在微服务中使用网关
  2. volatile 关键字的意义

在我回答完这些问题后,他给了我一些编码问题,如下

问题 1 :给定一个数组,编写一个程序来检测重复项。

例子

Input : [1,2,37,56, 2]
Output : False
Input : [1,2,37,56, 87]
Output : True

提出了多种方法并使用散列集进行编码,然后他用一些测试用例测试了代码并移至第二个问题

问题 2 :假设 ATM 中有 100、500、1000 卢比的面额数量有限。编写一个程序,为每笔交易分配最少数量的钞票,每笔交易最多可以分配 40 张钞票。

例子

Input : [[100, 2], [500, 3], [1000, 4]], 4000
Output : 4
Input : [[100, 2], [500, 3], [1000, 5]], 10000
Output : "cannot dispense"

完成我的编码后,他用一些测试用例测试了代码,并将我提升到第三轮,这将在 10 分钟后开始。

第 3 轮(编码器垫和缩放)

面试官开始问我目前的项目,我找工作的原因,以及为什么是oracle。在我回答完这些问题后,他开始询问一些核心Java问题,如下所述

  1. volatile 关键字的意义
  2. 比较器和可比较之间的差异
  3. StringBuffer 和 StringBuilder 的区别,并问为什么Java从 JDK 1.5 开始使用 StringBuilder 而不是 StringBuffer
  4. 静态变量的意义
  5. Final 类的意义,final 变量。
  6. Synchronized 关键字的意义

在这些之后,他给了我一些编码问题,如下所示

问题 1 :编写一个函数,该函数应将 swagger 文件作为输入并打印所有带有参数的端点

示例

Input : org.json.JSONObject swagger
Output : 
"/v1/postFunction"
["body", "token", "object"]
"/v1/getFunction"
["parameter", "token"]
"/v1/putFunction"
["body", "token", "object"]

对于那些不熟悉“Swagger 文件”的人。在这里看一下(https://github.com/OAI/OpenAPI-Specification/blob/master/examples/v2.0/json/uber.json)我试过这个,但无法像以前那样编码有一些例外,面试官观察到我正在为此苦苦挣扎,并让我停下来。我们转到下一个问题

问题 2 :编写一个函数,该函数应将一个大字符串作为输入并打印前 k 个频繁字符。注意: ‘A’ 和 ‘a’ 被认为是不同的,可能有像 ‘@’ 和 ‘!’ 这样的特殊字符。等在作为输入提供的字符串。

示例

Input : "$geeksforGEEKs@", k=3
Output :
Character is e count is 2
Character is E count is 2
Character is s count is 2

使用HashMap存储字符及其频率,比较器进行降序排序,排序后打印前k。第三轮在晚上 8:00 结束,而第一轮在下午 2:00 开始。面试官说:“我觉得你累了,去休息一下吧。我们将评估您的个人资料,然后再与您联系”。

2 天后,我接到了第 4 轮的电话。

第 4 轮(编码器垫和缩放):

和往常一样,面试官翻了我的简历,问了我目前熟悉的项目和技术栈。问我现在的CTC,预期的CTC,为什么要换,为什么是Oracle?在我回答完所有这些问题后,他让我编写一个真实的业务用例,如下所示

问题 1 :有一家制造自行车、汽车、洗衣机、空调等的制造商。自行车包含发动机、油箱、座椅、手离合器、刹车杆、油箱、脚踏板、启动踏板、后轮、排气管、刹车线、大灯、车速表、喇叭、排气管、后视镜、牌照、尾灯,以上各部分都是一个复杂的结构例如发动机包含螺丝、螺母、进油管、进气管、油泵、气缸盖、排气柱、气缸盖、散热片、活塞等。汽车、洗衣机、空调等也是如此。

当他解释从自行车到空调的所有机器以及所有零件和子零件和子零件……时,我快疯了,笑了。之后他停止解释这些部分和子部分的内容,并要求我编写一个程序,该程序将两个组件作为输入,并返回第二个参数的多少个组件需要生成第一个组件。我知道当你读到这篇文章的时候你已经疯了,让我给你一个例子来解释我需要准确编码的内容。

示例

Input : Bike, Wheels
Output : 2
2 wheels are required in the process of manufacturing the Bike
Input : Bike, Nuts
Output : 500
500 nuts are required in the process of manufacturing the Bike
Input : Nuts, Bike
Output : 0
As no Bikes are required in the process of manufacturing the Nut.

注意:您的代码应该非常通用。因此,如果制造商在 10 年后生产新产品,比如说更酷的产品,他不应该回来找您对您的函数进行任何修改。

老实说,前 20 分钟我是空白的,然后突然一个想法被激发了,我开始使用树来实现它。我不确定如何以通用方式表示数据。首先,他问我关于我如何表示数据的数据结构。一旦我向他展示了我的组件类(见下文),他似乎被说服并要求我编写逻辑代码。一旦我完成了我的编码,他给出了一些测试用例并让我检查我的程序返回什么。附上下面代码的原始模板

Java
/*package whatever //do not write package name here */
  
import java.io.*;
  
class GFG {
  class Component {
        int number;
        String name;
        List components;
   }
  public int findComponents(Component input, Component output) {
         int count = 0;
         //if output can be made from input component
         if(input.name.equals(output.name)) {
             return input.number;
         }
         //if input is a leaf
         if(input.components == null) {
             return 0;
         }
         //iterate the list of components
         for(Component temp : input.components) {
             //see if how many output components can be made from temp
             count = count + findComponents(temp, output);
         }
         return count*(input.number);
     }
}


拼图

  1. 给定两个 5 升和 3 升的容器,然后用无限量的水龙头。 4L水是怎么量出来的?
  2. 在我回答完那个谜题后,他问我是否有任何问题要问他,我让他分享一些关于角色、团队的事情,还让他分享他在 Oracle 中最难忘的 Ahaa 时刻之一。
  3. 总体而言,这是一次不错的体验,第 1、3、4 轮对我来说具有挑战性,这可能因人而异。在第 3 轮(Swagger)和第 4 轮(制造)中提出了几个开箱即用的问题