FreeOZ论坛

标题: 今天面了一个"Smart Guy" [打印本页]

作者: superopengl    时间: 14-1-2015 11: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, 可以上网)
  1. var items = new List<int>{1, 2, 2, 3, 4, 4, 4, 5};
  2. // Should return an array containing 2 and 4.
复制代码

这家伙自己没写出来,而且思路很奇葩。沿着他的思路,经过若干提示最终,最终的代码是
  1. var result = new List<int>();
  2. for(var i = 0; i < items.Length; i++){
  3.     var tmp = input[i];
  4.     items.RemoveAt(i);
  5.     if(items.BinarySearch(tmp) >= 0) {
  6.         result.Add(tmp);
  7.     }
  8.     items.Insert(i, tmp);
  9. }
  10. return result;
复制代码
没用Linq、HashSet、Dictionary、HashTable也就算了,这种先删除在插回去思路我头一次见到,这家伙Master是咋毕业的?!

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

作者: 周星星1832    时间: 14-1-2015 12:07
C#真不靠谱阿。。。。。。。。。。

这么简单的东西还要自己写fucntion。。。。。。。。。。。
作者: 周星星1832    时间: 14-1-2015 12:07
array_count_values
作者: DDD888    时间: 14-1-2015 12:11
我写了一个

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
  1. return items.GroupBy().Where(g => g.Count() > 1).Select(g => g.Key);
复制代码

作者: 艾瑞克    时间: 14-1-2015 12:33
本帖最后由 艾瑞克 于 14-1-2015 11:51 编辑

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

作者: 艾瑞克    时间: 14-1-2015 12:36
本帖最后由 艾瑞克 于 14-1-2015 11:39 编辑
superopengl 发表于 14-1-2015 11:33


你的GroupBy没有key
GroupBy(i=>i)
作者: 艾瑞克    时间: 14-1-2015 12:40
DDD888 发表于 14-1-2015 11:11
我写了一个

using System;


作者: DDD888    时间: 14-1-2015 12:41
楼上两位的代码为何都编译出错啊?
作者: 艾瑞克    时间: 14-1-2015 12:44
本帖最后由 艾瑞克 于 14-1-2015 12:00 编辑
DDD888 发表于 14-1-2015 11:41
楼上两位的代码为何都编译出错啊?


我没拿VS编译,用LinqPad跑跑就行啦
莫非你还在用.net 2.0?
作者: 艾瑞克    时间: 14-1-2015 12:56
我最近也在找工作,lz把你们的面试题拿来给我操练操练啊
作者: DDD888    时间: 14-1-2015 13:15
看来我要好好学习linq啦
作者: superopengl    时间: 14-1-2015 13:29
艾瑞克 发表于 14-1-2015 11:36
你的GroupBy没有key
GroupBy(i=>i)

You are right.
作者: qingyi2002    时间: 14-1-2015 13:35
当场写出来这句Linq有点不记得语法,但是能用google就简单多了: http://stackoverflow.com/questions/18547354/c-sharp-linq-find-duplicates-in-list

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

感觉国内这种题目的测试一般考查的是能否用自己算法来解答,利用各种语言特性的答案反而会被pass掉。。。
作者: superopengl    时间: 14-1-2015 13:50
能用Google,会用Google也是技能呀。就比如这位Smart Guy,能用Google都没搞出来。自己写算法的能力固然重要,然如果Candidate能用Lib解决掉,也算他的本事的一部分。其实实际工作中99%都不用自己写算法,都是用Lib。自己写就是重复造轮子。会用Lib的人大都了解那些Lib的算法原理和特点,所以我不倾向于写algorithm in plain language。
作者: DDD888    时间: 14-1-2015 14:05
superopengl 发表于 14-1-2015 14:50
能用Google,会用Google也是技能呀。就比如这位Smart Guy,能用Google都没搞出来。自己写算法的能力固然重 ...

最新科技往往是没有先例可循,例如google无人驾驶汽车,说近一点的,牵涉到async的许多代码,也要自己造轮子啦,或者编写apple iphone/ipad 用swift语言也都是不能用google来得到结果啦,毕竟太新了
作者: 艾瑞克    时间: 14-1-2015 14:06
qingyi2002 发表于 14-1-2015 12:35
当场写出来这句Linq有点不记得语法,但是能用google就简单多了: http://stackoverflow.com/questions/1854 ...

如果面试的时候,有IDE可以用,哪怕是支持autocomplete的linqpad可以用,不用google也可以写得出来,如果真的要考算法,这道题也未免太简单了。
作者: 艾瑞克    时间: 14-1-2015 14:08
这个smart guy当salesman也不称职,因为他并没有把自己推销出去啊,顶多做做marketing
作者: superopengl    时间: 14-1-2015 14:10
艾瑞克 发表于 14-1-2015 13:06
如果面试的时候,有IDE可以用,哪怕是支持autocomplete的linqpad可以用,不用google也可以写得出来,如果 ...

面试时提供VS2013还装了Resharper的呦
作者: Mr.Q    时间: 14-1-2015 14:10
C#俺不懂,但就凭插入再删除这种方法,必然有多线程问题。
作者: 艾瑞克    时间: 14-1-2015 14:12
superopengl 发表于 14-1-2015 13:10
面试时提供VS2013还装了Resharper的呦

那可真好,你们公司在哪儿?我能去么
作者: DDD888    时间: 14-1-2015 14:12
其实应聘的人挺辛苦的,要正经的在大热天穿着西装,努力思考如何回答问题,还要面临被嘲笑
作者: superopengl    时间: 14-1-2015 14:13
总结会上Director说他观察了这个Candidate使用的关键词和所有的搜索,发现这个Candidate的Google Skill不好。其实Google Skill就是我们发现问题寻找答案的思路,换句话说就是这个Candidate的思维方式没有另Interviewer信服。
作者: 容容    时间: 14-1-2015 14:16
提示: 作者被禁止或删除, 无法发言
DDD888 发表于 14-1-2015 13:11
我写了一个

using System;

对我是天书啊,不过不妨碍对你的佩服之情
作者: superopengl    时间: 14-1-2015 14:18
Mr.Q 发表于 14-1-2015 13:10
C#俺不懂,但就凭插入再删除这种方法,必然有多线程问题。

这只是一个查询问题,最差算法O(n2)也应该出来了。可搞出个修改input array的做法就是在是无法接受
作者: 艾瑞克    时间: 14-1-2015 14:19
DDD888 发表于 14-1-2015 13:05
最新科技往往是没有先例可循,例如google无人驾驶汽车,说近一点的,牵涉到async的许多代码,也要自己造 ...

任何一个新的技术出来,只要它够好,自然会有人去造轮子,造轮子本身就是一种商机,而且造轮子的人越多,造的轮子越多,就说明它越成熟,从product owner的角度来看,我一般不会去用连轮子都找不到的技术,风险太大,但是从technical角度来看,当然接触新事物越早越好。
作者: 艾瑞克    时间: 14-1-2015 14:23
superopengl 发表于 14-1-2015 13:18
这只是一个查询问题,最差算法O(n2)也应该出来了。可搞出个修改input array的做法就是在是无法接受

这位老大还用了 “BinarySearch”,他是想展示自己的算法水平么
作者: superopengl    时间: 14-1-2015 14:24
DDD888 发表于 14-1-2015 13:12
其实应聘的人挺辛苦的,要正经的在大热天穿着西装,努力思考如何回答问题,还要面临被嘲笑

没有嘲笑啦,只不过这个Candidate太奇葩了,简历和Blog吹的太邪乎了。一般敢post tech blog和跟技术书籍有关的都是大牛。这位Candidate真的只是一张吹起来的牛皮,太奇葩了。
作者: superopengl    时间: 14-1-2015 14:30
艾瑞克 发表于 14-1-2015 13:23
这位老大还用了 “BinarySearch”,他是想展示自己的算法水平么

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

我用过几次,以前在面试的时候也碰到过
作者: superopengl    时间: 14-1-2015 14:33
艾瑞克 发表于 14-1-2015 13:23
这位老大还用了 “BinarySearch”,他是想展示自己的算法水平么

对了,items没排序,用BinarySearch有bug呀
作者: 艾瑞克    时间: 14-1-2015 14:50
superopengl 发表于 14-1-2015 13:33
对了,items没排序,用BinarySearch有bug呀

对,搞不好就endless loop 了
作者: 艾瑞克    时间: 14-1-2015 14:57
DDD888 发表于 14-1-2015 12:15
看来我要好好学习linq啦

必须的,处理enumerable的时候linq可以事半功倍
作者: 语之玫瑰    时间: 14-1-2015 15:04
这样的题目给我网络我也能完成...
不禁很得意...果然不愧是IT女民工

作者: cyber    时间: 14-1-2015 15:53
既然是List<int>,用linq就一行代码搞掂啦。我一年前面试时做过一样的题,当时是要我在一块小白板上写实现代码。刚开始我想用传统方法的,可是白板太小,自己也不习惯在白板上写代码,最后就直接用Linq实现了。




欢迎光临 FreeOZ论坛 (https://www.freeoz.org/bbs/) Powered by Discuz! X3.2