回复: 25
跳转到指定楼层
上一主题 下一主题
收起左侧

Uber神仙操作电面

全局:

2018(10-12月) 码农类General 硕士 全职@uber - 内推 - 技术电面  | | Other | 应届毕业生

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
发一个Uber奇葩电面

白人小哥,一上来就说,我们的电面不一样,我们就是考察你是不是会学习,不是像别的公司一样做题。我以为会是阅读理解外衣包裹下的算法,结果看到题目的时候一头雾水。下面开始上题目:

给一个已知class,里面有很多的函数,每个函数的名称,参数数目,参数类型, 返回值都不同。
让你写一个class,叫做测试函数,输入的参数是(上面的已知class , 各种类型的参数不限 pts,被检测的类
您好!
本帖隐藏的内容需要积分高于 188 才可浏览
您当前积分为 0。
使用VIP即刻解锁阅读权限或查看其他获取积分的方式
游客,您好!
本帖隐藏的内容需要积分高于 188 才可浏览
您当前积分为 0。
VIP即刻解锁阅读权限 或 查看其他获取积分的方式
Unlock interview details and practice with AI
Curated Interview Questions from Top Companies
个解决办法,我也是真的很懵啊,那我怎么可能会???

补充内容 (2018-11-30 07:06):
最后补个Hint: 面试官说了,不是数据结构的设计,而是要用Method Class,运用里面的function进行参数匹配之类的~

评分

参与人数 3大米 +11 收起 理由
滚动的西瓜 + 5 加米安慰.......
lantian_bihai + 3 给你点个赞!
litt12 + 3 只能加米安慰你了

查看全部评分


上一篇:臉家店面
下一篇:巨婴OTS 11月
 楼主| 想远眺的金蓝鸟 2018-12-5 05:13:37 | 只看该作者
全局:
具体操作和答案我有截图,实在感兴趣的同学,我可以分享截图哈~希望大家一切顺利,Offer多多!!!
回复

使用道具 举报

推荐
lantian_bihai 2018-11-30 05:51:08 | 只看该作者
全局:
。。。闻所未闻。。。。
真的奇葩
我以为系统设计上火星已经够可以的了
给Uber点赞
回复

使用道具 举报

推荐
magicsets 2018-11-30 14:27:16 | 只看该作者
全局:
您好!
本帖隐藏的内容需要积分高于 100 才可浏览
您当前积分为 0。
使用VIP即刻解锁阅读权限或查看其他获取积分的方式
游客,您好!
本帖隐藏的内容需要积分高于 100 才可浏览
您当前积分为 0。
VIP即刻解锁阅读权限 或 查看其他获取积分的方式
Unlock interview details and practice with AI
Curated Interview Questions from Top Companies
回复

使用道具 举报

推荐
magicsets 2018-11-30 06:52:54 | 只看该作者
全局:
这个题目出得很不严谨,因为认真考虑的话要处理的情况是非常多的(例如隐式类型转换、变长参数等等),面试小哥估计也是半桶水晃荡..

相关知识点本质上是与编译器前端中的function (overload) resolution有关,看起来楼主面试语言应该是Java,那么是要用Java reflection的一些技术

写了一份参考代码:
  1. import java.lang.reflect.Method;
  2. import java.util.HashMap;

  3. class Solution {
  4.   private static final HashMap<Class<?>, Class<?>> primitiveTypes =
  5.       new HashMap<Class<?>, Class<?>>() {{
  6.           put(boolean.class, Boolean.class);
  7.           put(byte.class, Byte.class);
  8.           put(char.class, Character.class);
  9.           put(double.class, Double.class);
  10.           put(float.class, Float.class);
  11.           put(int.class, Integer.class);
  12.           put(long.class, Long.class);
  13.           put(short.class, Short.class);
  14.           put(void.class, Void.class);
  15.       }};

  16.   public boolean testFunction(final Class<?> target,
  17.                               final Class<?> expected,
  18.                               final Object... args) {
  19.     // 实参类型
  20.     Class<?>[] actualTypes = new Class[args.length];
  21.     for (int i = 0; i < args.length; ++i) {
  22.       actualTypes[i] = args[i].getClass();
  23.     }

  24.     // 遍历所有method,匹配参数类型以及结果类型
  25.     for (Method method : target.getMethods()) {
  26.       if (checkEquivalence(method.getParameterTypes(), actualTypes) &&
  27.           checkEquivalence(method.getReturnType(), expected, false)) {
  28.         return true;
  29.       }
  30.     }
  31.     return false;
  32.   }

  33.   private boolean checkEquivalence(final Class<?>[] formalTypes,
  34.                                    final Class<?>[] actualTypes) {
  35.     // 如果要支持对变长参数(varargs)的检测,这里要写得更复杂一些
  36.     if (actualTypes.length != formalTypes.length) {
  37.       return false;
  38.     }
  39.     for (int i = 0; i < formalTypes.length; ++i) {
  40.       if (!checkEquivalence(formalTypes[i], actualTypes[i], true)) {
  41.         return false;
  42.       }
  43.     }
  44.     return true;
  45.   }

  46.   private boolean checkEquivalence(Class<?> formalType,
  47.                                    Class<?> actualType,
  48.                                    final boolean allowImplicitTypeCast) {
  49.     if (primitiveTypes.containsKey(formalType)) {
  50.       formalType = primitiveTypes.get(formalType);
  51.     }
  52.     // 这种简单写法可以支持隐式upcast,例如String -> Object
  53.     // 但是不支持隐式primitive类型转换,例如int -> float
  54.     // 如果要支持后者需要更大的代码量
  55.     return allowImplicitTypeCast ? formalType.isAssignableFrom(actualType)
  56.                                  : formalType.equals(actualType);
  57.   }
  58. }

  59. // 用于测试的class
  60. class TestCase {
  61.   public int f(int x, int y) {
  62.     return x + y;
  63.   }

  64.   public double g(String x, double y) {
  65.     return x.length() * y;
  66.   }

  67.   public String h(long id, String[] values) {
  68.     return "[" + id + "] " + String.join(" ", values);
  69.   }
  70. }

  71. public class Main {
  72.   public static void main(String[] args) {
  73.     Solution solution = new Solution();
  74.     // 测试 Solution.f
  75.     // true
  76.     System.out.println(solution.testFunction(TestCase.class, Integer.class, 1, 2));
  77.     // false, 参数数量不匹配
  78.     System.out.println(solution.testFunction(TestCase.class, Integer.class, 1, 2, 3));
  79.     // false, 第一个参数类型不匹配
  80.     System.out.println(solution.testFunction(TestCase.class, Integer.class, 1.5, 2));

  81.     // 测试 Solution.g
  82.     // true
  83.     System.out.println(solution.testFunction(TestCase.class, Double.class, "Hello", 1.5));
  84.     // false,返回值类型不匹配
  85.     System.out.println(solution.testFunction(TestCase.class, String.class, "Hello", 1.5));

  86.     // 测试 Solution.h
  87.     // true
  88.     System.out.println(solution.testFunction(TestCase.class, String.class, 1L, new String[] {"a", "b"}));
  89.     // false, 参数类型不匹配
  90.     System.out.println(solution.testFunction(TestCase.class, String.class, "Hello", new String[] {"a", "b"}));
  91.     // false, Solution里面的代码不支持隐式基础类型转换
  92.     System.out.println(solution.testFunction(TestCase.class, String.class, 1, new String[] {"a", "b"}));
  93.   }
  94. }
复制代码

评分

参与人数 1大米 +5 收起 理由
高渐离击筑高歌 + 5 很有用的信息!

查看全部评分

回复

使用道具 举报

全局:
神奇了… 抱抱楼主
回复

使用道具 举报

全局:
这面试官有毒吧……
回复

使用道具 举报

🔗
sirumcz 2018-11-30 01:28:49 来自APP | 只看该作者
全局:
面试官有毒。。函数传参像是functional programming一样。。。
回复

使用道具 举报

全局:
这公司感觉真的不理解自己招聘困难在哪……
回复

使用道具 举报

🔗
kingdom12316 2018-11-30 02:57:12 | 只看该作者
全局:
额,没太看懂,什么意思?Type checking 吗,如果符合成功,不符合失败?传的参数是function?请问楼主面的什么职位啊,这考的什么东西,太奇葩了
回复

使用道具 举报

🔗
 楼主| 想远眺的金蓝鸟 2018-11-30 03:08:01 | 只看该作者
全局:
您好!
本帖隐藏的内容需要积分高于 100 才可浏览
您当前积分为 0。
使用VIP即刻解锁阅读权限或查看其他获取积分的方式
游客,您好!
本帖隐藏的内容需要积分高于 100 才可浏览
您当前积分为 0。
VIP即刻解锁阅读权限 或 查看其他获取积分的方式
Unlock interview details and practice with AI
Curated Interview Questions from Top Companies
回复

使用道具 举报

🔗
 楼主| 想远眺的金蓝鸟 2018-11-30 03:09:03 | 只看该作者
全局:
desperatelife 发表于 2018-11-30 02:31
这公司感觉真的不理解自己招聘困难在哪……

唉,可以回邮件举报面试官吗?我真的想argue一下了
回复

使用道具 举报

🔗
 楼主| 想远眺的金蓝鸟 2018-11-30 03:12:51 | 只看该作者
全局:
sirumcz 发表于 2018-11-30 01:28
面试官有毒。。函数传参像是functional programming一样。。。

差不多是这种,然后我就让面试官给我讲怎么做,还看到了正确答案,发现自己真的不会啊,给了答案也看不懂。。。
回复

使用道具 举报

🔗
fluu 2018-11-30 03:19:27 | 只看该作者
全局:
这种自以为新颖的题目实际上屁都考查不出来
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表