superopengl 发表于 14-1-2015 11:59:59

今天面了一个"Smart Guy"

本帖最后由 superopengl 于 14-1-2015 11:01 编辑

这个家伙的resume可谓光辉灿烂:Master of computer science,Senior Software Engineer@Bank of America 4年工作经验,各种buzz words(AngularJS, MEAN, MongoDB, MVC, Dependency Injection, jQuery, blah, blah)。有自己Git Repository,说是参与了很多OpenSource的项目。还有自己的Tech Blog,有15000个读者,其Blog文章的内容还被几本书引用。

Question
给他一个C#上机编程题,找出一个Integer Array里重复的数字(实在run不过,写pseudo code也行,可以Linq, 可以Google, 可以上网)
var items = new List<int>{1, 2, 2, 3, 4, 4, 4, 5};
// Should return an array containing 2 and 4.
这家伙自己没写出来,而且思路很奇葩。沿着他的思路,经过若干提示最终,最终的代码是
var result = new List<int>();
for(var i = 0; i < items.Length; i++){
    var tmp = input;
    items.RemoveAt(i);
    if(items.BinarySearch(tmp) >= 0) {
      result.Add(tmp);
    }
    items.Insert(i, tmp);
}
return result;没用Linq、HashSet、Dictionary、HashTable也就算了,这种先删除在插回去思路我头一次见到,这家伙Master是咋毕业的:o?!

5轮面试后,大家开会讨论一致认为他就不应该申请Tech类的职位,应该去当Salesman。我的评语就是“Can talk, but cannot programme.”

周星星1832 发表于 14-1-2015 12:07:45

C#真不靠谱阿。。。。。。。。。。

这么简单的东西还要自己写fucntion。。。。。。。。。。。:lol。

周星星1832 发表于 14-1-2015 12:07:55

array_count_values

DDD888 发表于 14-1-2015 12:11:32

我写了一个

using System;
using System.Collections.Generic;
using System.Linq;

namespace DuplicateNumber {
    internal class Program {
      private static void Main(string[] args) {
            var items = new List<int> {1, 2, 2, 3, 4, 4, 4, 5};
            var dictionary = new Dictionary<int, bool>();
            var resultDictionary = new Dictionary<int, bool>();
            foreach (var item in items) {
                if (dictionary.ContainsKey(item)) {
                  if (!resultDictionary.ContainsKey(item)) {
                        resultDictionary.Add(item, true);
                  }
                }
                else {
                  dictionary.Add(item, true);
                }
            }

            var result = resultDictionary.Select(b => b.Key).ToList();
            foreach (var b in result) {
                Console.WriteLine(b);
            }

            Console.ReadKey();
      }
    }
}

superopengl 发表于 14-1-2015 12:33:10

return items.GroupBy().Where(g => g.Count() > 1).Select(g => g.Key);

艾瑞克 发表于 14-1-2015 12:33:22

本帖最后由 艾瑞克 于 14-1-2015 11:51 编辑

这不就是一句话的事么,我这样写对吗?
return items.Where( i => items.Count(i1 => i == i1) > 1 ).Distinct();

艾瑞克 发表于 14-1-2015 12:36:16

本帖最后由 艾瑞克 于 14-1-2015 11:39 编辑

superopengl 发表于 14-1-2015 11:33


你的GroupBy没有key
GroupBy(i=>i)

艾瑞克 发表于 14-1-2015 12:40:38

DDD888 发表于 14-1-2015 11:11
我写了一个

using System;


:L

DDD888 发表于 14-1-2015 12:41:55

楼上两位的代码为何都编译出错啊?

艾瑞克 发表于 14-1-2015 12:44:14

本帖最后由 艾瑞克 于 14-1-2015 12:00 编辑

DDD888 发表于 14-1-2015 11:41
楼上两位的代码为何都编译出错啊?

我没拿VS编译,用LinqPad跑跑就行啦
莫非你还在用.net 2.0?

艾瑞克 发表于 14-1-2015 12:56:27

我最近也在找工作,lz把你们的面试题拿来给我操练操练啊:lol

DDD888 发表于 14-1-2015 13:15:30

看来我要好好学习linq啦

superopengl 发表于 14-1-2015 13:29:12

艾瑞克 发表于 14-1-2015 11:36
你的GroupBy没有key
GroupBy(i=>i)

You are right.

qingyi2002 发表于 14-1-2015 13:35:15

当场写出来这句Linq有点不记得语法,但是能用google就简单多了: http://stackoverflow.com/questions/18547354/c-sharp-linq-find-duplicates-in-list

楼主澳洲面试都能用Google查询的吗?

感觉国内这种题目的测试一般考查的是能否用自己算法来解答,利用各种语言特性的答案反而会被pass掉。。。

superopengl 发表于 14-1-2015 13:50:18

能用Google,会用Google也是技能呀。就比如这位Smart Guy,能用Google都没搞出来。自己写算法的能力固然重要,然如果Candidate能用Lib解决掉,也算他的本事的一部分。其实实际工作中99%都不用自己写算法,都是用Lib。自己写就是重复造轮子。会用Lib的人大都了解那些Lib的算法原理和特点,所以我不倾向于写algorithm in plain language。

DDD888 发表于 14-1-2015 14:05:39

superopengl 发表于 14-1-2015 14:50
能用Google,会用Google也是技能呀。就比如这位Smart Guy,能用Google都没搞出来。自己写算法的能力固然重 ...

最新科技往往是没有先例可循,例如google无人驾驶汽车,说近一点的,牵涉到async的许多代码,也要自己造轮子啦:),或者编写apple iphone/ipad 用swift语言也都是不能用google来得到结果啦,毕竟太新了

艾瑞克 发表于 14-1-2015 14:06:23

qingyi2002 发表于 14-1-2015 12:35
当场写出来这句Linq有点不记得语法,但是能用google就简单多了: http://stackoverflow.com/questions/1854 ...

如果面试的时候,有IDE可以用,哪怕是支持autocomplete的linqpad可以用,不用google也可以写得出来,如果真的要考算法,这道题也未免太简单了。

艾瑞克 发表于 14-1-2015 14:08:16

这个smart guy当salesman也不称职,因为他并没有把自己推销出去啊,顶多做做marketing ;P

superopengl 发表于 14-1-2015 14:10:05

艾瑞克 发表于 14-1-2015 13:06
如果面试的时候,有IDE可以用,哪怕是支持autocomplete的linqpad可以用,不用google也可以写得出来,如果 ...

面试时提供VS2013还装了Resharper的呦:$

Mr.Q 发表于 14-1-2015 14:10:12

C#俺不懂,但就凭插入再删除这种方法,必然有多线程问题。

艾瑞克 发表于 14-1-2015 14:12:22

superopengl 发表于 14-1-2015 13:10
面试时提供VS2013还装了Resharper的呦

那可真好,你们公司在哪儿?我能去么:lol

DDD888 发表于 14-1-2015 14:12:49

其实应聘的人挺辛苦的,要正经的在大热天穿着西装,努力思考如何回答问题,还要面临被嘲笑

superopengl 发表于 14-1-2015 14:13:24

总结会上Director说他观察了这个Candidate使用的关键词和所有的搜索,发现这个Candidate的Google Skill不好。其实Google Skill就是我们发现问题寻找答案的思路,换句话说就是这个Candidate的思维方式没有另Interviewer信服。

容容 发表于 14-1-2015 14:16:21

superopengl 发表于 14-1-2015 14:18:40

Mr.Q 发表于 14-1-2015 13:10
C#俺不懂,但就凭插入再删除这种方法,必然有多线程问题。

这只是一个查询问题,最差算法O(n2)也应该出来了。可搞出个修改input array的做法就是在是无法接受

艾瑞克 发表于 14-1-2015 14:19:38

DDD888 发表于 14-1-2015 13:05
最新科技往往是没有先例可循,例如google无人驾驶汽车,说近一点的,牵涉到async的许多代码,也要自己造 ...

任何一个新的技术出来,只要它够好,自然会有人去造轮子,造轮子本身就是一种商机,而且造轮子的人越多,造的轮子越多,就说明它越成熟,从product owner的角度来看,我一般不会去用连轮子都找不到的技术,风险太大,但是从technical角度来看,当然接触新事物越早越好。

艾瑞克 发表于 14-1-2015 14:23:50

superopengl 发表于 14-1-2015 13:18
这只是一个查询问题,最差算法O(n2)也应该出来了。可搞出个修改input array的做法就是在是无法接受

这位老大还用了 “BinarySearch”,他是想展示自己的算法水平么;P

superopengl 发表于 14-1-2015 14:24:57

DDD888 发表于 14-1-2015 13:12
其实应聘的人挺辛苦的,要正经的在大热天穿着西装,努力思考如何回答问题,还要面临被嘲笑

没有嘲笑啦,只不过这个Candidate太奇葩了,简历和Blog吹的太邪乎了。一般敢post tech blog和跟技术书籍有关的都是大牛。这位Candidate真的只是一张吹起来的牛皮,太奇葩了。

superopengl 发表于 14-1-2015 14:30:29

艾瑞克 发表于 14-1-2015 13:23
这位老大还用了 “BinarySearch”,他是想展示自己的算法水平么

是啊,说实话我都没用过。要不是以前review别人code时查了一下BinarySearch的用法,我还真不知道它的返回值是-N ~ N

艾瑞克 发表于 14-1-2015 14:32:40

superopengl 发表于 14-1-2015 13:30
是啊,说实话我都没用过。要不是以前review别人code时查了一下BinarySearch的用法,我还真不知道它的返回 ...

我用过几次,以前在面试的时候也碰到过;P
页: [1] 2
查看完整版本: 今天面了一个"Smart Guy"