瞎扯淡 # 抵制浪费时间的编码面试 # 用一个开源的方式来说明

mvj3 · 2015年04月18日 · 最后由 emanon 回复于 2015年04月18日 · 4685 次阅读

项目地址:https://github.com/mvj3/oracle_interview_calculation

简单来说,我想通过这个作品来向社区呼吁,雇主应该少让弱势应聘者浪费时间去做这些无聊的面试题,因为每个人的时间都很宝贵。

为什么我要无偿做 Oracle 的这个编码面试?

首先感谢 Oracle 给正在找工作的 Ruby 程序员提供了机会,但是我看到了我认为的不尊重应聘者的一条招聘说明 --- 做一个编码测试。以下是我对这一做法的反对声明:

从这个招聘描述 (见下方我从招聘贴里拷贝过来的,我去掉了邮箱地址) 的薪资待遇中一条"高于行业的薪资水平,15-25K"说明看来,TA 们要招的应该是一个中高级的 Ruby 工程师。

我相信,对于一个中高级的 Ruby 工程师来说,应该有一个善于活用开源软件库的能力,所以怎么说至少得有个 Github 账户等一些可以显露技术能力的互联网上的公开证明吧, 如果对方已经有一些开源作品 (当然没开源的也可以了),做这个"投递简历前请确保你能给出如下问题的一个优雅的解决方案"恰恰是对应聘者的一个 不尊重

我建议是可以让应聘者发一个 TA 得意的编码作品,从这个作品里,应聘者应该可以确保雇主得到如下信息:

  1. 作品是应聘者主导参与的,这个是人品问题。
  2. 作品应该可以让雇主基本判断出综合技能是符合职位要求的。
  3. 代码文档解释性
  4. 代码结构设计
  5. 代码迭代 (重构) 的能力
  6. 编程基本素质,包括但不限于 命名,测试,等。
  7. 其他我上面没提到的

如果非要应聘者做编码面试的话,那么请考虑这个编码是对应聘者是有损失的,TA 不需要靠这个测试来证明或提升自己 (真正优秀的工程师都会善于在日常工作中发现和解决问题,TA 会发现自己在哪些方面应该去提高),所以建议付给用心完成任务的工程师 TA 当前待遇标准下的时薪。

请尊重相对弱势的应聘者,因为每个人的时间都很宝贵。

[北京] 甲骨文社交云平台团队招聘 Ruby 软件开发工程师

问: 神马???我有没有看错? Oracle也开始用Ruby了,那Java兄肿么办?
答: 是的!这世界变化快,哦也没有办法 :-1 谁让那些创业公司都用ruby呢?甲骨文云社交平台是通过收购美国本土成功的创业公司(如Vitrue, Involver, Collective Intellect, BlueKai)来组建的,所以抹油办法了,只好用Ruby喽!!(不过话说Ruby还挺好用的说。。。)

问: 甲骨文。。。大公司。。。很沉闷死板了喽?
答: 错!说实在话,俺们现在很纠结的啦,500强的名头,创业公司的文化(但不是加班文化哦)。俺们团队平均年龄相当低,俺30出头,已经是“老当益壮”, “老奸巨猾”,“发挥余热”了。。。。(另,由于团队太活跃,已然被其他组投诉好多次了。。。)

问: 产品干嘛的?
答: 官方的那些销售语言俺就不说了。简单来讲: Oracle的社交云平台(SRM,社交关系管理)目的要整合地球(注意,是地球)上主流的社交关系网络,来实现商业公司与消费者社交关系通道的统一配置与管理。Oracle社交关系管理(SRM)平台是业内第一个统一的集成平台,它为客户提供了从内容创建,协作化管理,消息响应到语义分析的整体解决方案。目前SRM已在全球和众多知名社交网站及应用展开战略合作,包括Facebook, Twitter, Google+, Instagram, Weibo等等,未来Oracle会继续加大对亚洲区市场的扩展和投入。此外,利用Oracle强大的背书,SRM正在和多个Oracle CRM系统开展对接,无疑SRM将成为众多企业参与下一代互联网竞争所必不可少的决定性工具。
产品官网看这里:http://www.oracle.com/cn/solutions/social/overview/index.html

问: 那你们的优势捏?
答: 俺们不逗比,不画饼。那些该有的(比如神马弹性工作制啊,优越办公环境啊,双休啊,无限量零食啊,聚餐啊)必须有! 还有神马美女帅哥啊,那也不是事,关键是俺们的美女帅哥都是神马耶鲁啊,MIT啊,宾大啊,清华啊,北大的。。。还有还有,俺们有安全感,俺们不加班(真的不加那种)。。。

问: 你们会不会跟“啊倒闭”那家公司一样,搞几年中国team就over了呢?
答: 不好意思,俺们老大中国人。。。

好了,言归正传!

基本要求
1. 三年以上互联网应用开发经验,优秀毕业生亦可(但目前不接受实习)
2. 熟练掌握Ruby语言,熟悉Rails,有ROR项目开发经验
3. 熟悉基本的Linux命令,熟练操作Linux,有Linux下开发经验
4. 熟悉流行数据库(SQL Server/MySQL/Oracle)
5. 有一定算法基础,良好的面向对象思维
6. 优秀的学习能力,优秀的沟通能力,勇于承担责任,易于合作并帮助团队成功

加分项
1. 熟悉HTML/CSS或熟练掌握Javascript
2. 熟悉Shell脚本编写
3. 熟悉流行前端框架,如:Backbone, AngularJS
4. 熟悉TDD/BDD,熟悉RSpec,Jasmine等测试框架
5. 有数据库设计或优化经验
6. 熟悉社交网络集成开发
7. 良好的英语读写听说能力

薪资待遇
1. 高于行业的薪资水平,15-25K
2. 年终奖金
3. 弹性工作制
4. 优厚福利,如:公司级及团队TB活动,无限量供应的零食,TEDTalk分享会,加班餐,网费报销
5. 硅谷出差机会

工作地点
海淀区西二旗中关村软件园

我们的优势
1. 保持快速增长的崭新团队
2. 打造引领行业并帮助世界最顶尖公司走向成功的社交产品
3. 与世界领先的Rails技术团队零距离沟通
4. 轻松高效的团队氛围
5. 工作与生活的平衡

又有新的HC放出来,欢迎投递简历。
*******补充要求********
投递简历前请确保你能给出如下问题的一个优雅的解决方案:
http://www.codewars.com/kata/525f3eda17c7cd9f9e000b39
# encoding: UTF-8

# Run tests
# ruby oracle_interview_calculation.rb

REQUIREMENTS=<<REQUIREMENTS
References:
[1] https://ruby-china.org/topics/25179 [北京] 甲骨文社交云平台团队招聘 Ruby 软件开发工程师 - 继续招聘
[2] http://www.codewars.com/kata/calculating-with-functions/ruby

Description:

This time we want to write calculations using functions and get the results. Let's have a look at some examples:

seven(times(five())); // must return 35
four(plus(nine())); // must return 13
eight(minus(three())); // must return 5
six(dividedBy(two())); // must return 3
Requirements:

There must be a function for each number from 0 ("zero") to 9 ("nine")
There must be a function for each of the following mathematical operations: plus, minus, times, dividedBy (divided_by in Ruby)
Each calculation consist of exactly one operation and two numbers
The most outer function represents the left operand, the most inner function represents the right operand
REQUIREMENTS



module Calculation
    # We use `method_missing` and `define_method` to define number and operator methods lazily, and with cached.

    class NumberValue < Struct.new(:number)
        alias to_ary  number
        alias inspect number
    end
    class OperationValue < Struct.new(:operation)
        alias to_ary  operation
        alias inspect operation
    end
    class MiddleRightExpression < Struct.new(:operation, :number)
    end


    Numbers        = "zero one two three four five six seven eight nine".split(" ").map(&:to_sym)
    NumMap         = Hash[Numbers.map.with_index {|num, idx| [num.to_sym, NumberValue.new(idx)] }]

    OperationsMap  = {
                      plus:        OperationValue.new(:+),
                      minus:       OperationValue.new(:-),
                      times:       OperationValue.new(:*),
                      divided_by:  OperationValue.new(:/),
                     }


    def method_missing(name, *args, &block)
        #0. Check name is valid
        if not NumMap.include?(name) and not OperationsMap.include?(name)
            raise "Can't find `#{name}` method in current scope."
        end

        #1. Define a number method lazily
        expression_num = NumMap.fetch(name, false)
        if expression_num.is_a?(NumberValue)
            Kernel.send(:define_method, name) do |arg=nil|
                if arg
                    if arg.is_a?(MiddleRightExpression)
                        return expression_num.number.__send__(arg.operation, arg.number)
                    else
                        raise "`#{arg}` should be a MiddleRightExpression"
                    end
                else
                  return expression_num.number
                end
            end
        end

        #2. Define a operation method lazily
        expression_opr = OperationsMap.fetch(name, false)
        if expression_opr.is_a?(OperationValue)
            Kernel.send(:define_method, name) do |number|
              return MiddleRightExpression.new(expression_opr.operation, number)
            end
        end

        return self.__send__(name, *args, &block)
    end
end


require "test/unit"

class TestCalculation < Test::Unit::TestCase
    include Calculation

    puts "Welcome to do some calculations!"
    puts "Avaiable numbers   are: #{Calculation::Numbers.join(", ")}."
    puts "Avaiable operators are: #{Calculation::OperationsMap.keys().join(", ")}."
    puts
    puts "Usage:"
    puts "    seven(times(five())) # => 35"
    puts
    puts "Note:"
    puts "This DSL is limited, can't support operator precedence, it's done by single nested parentheses."
    puts
    puts "*"*100
    puts
    puts REQUIREMENTS
    puts

    def test_simple
        #1. some test cases from requirement
        assert_equal(5,  five())
        assert_equal(35, seven(times(five())))
        assert_equal(13, four(plus(nine())))
        assert_equal(5,  eight(minus(three())))
        assert_equal(3,  six(divided_by(two())))

        #2. more complex test cases
        assert_equal(6,  one(plus(two(plus(three)))))
        assert_equal(6,  one(times(two(times(three)))))
        assert_equal(7,  one(plus(two(times(three)))))
    end

end

要不你说个更好的筛选人才的方法?

#1 楼 @MrPasserby 请看"我建议是可以让应聘者发一个 TA 得意的编码作品" 部分。

另外,我想反对的只是 #抵制浪费时间的编码面试# 而已,没有反对其他。


在微博 http://weibo.com/1798217197/CdR5YxdR8 上也有些讨论,里面我的观点摘录如下:

主要是涉及到代做和抄袭的问题

  1. 这个应该是涉及到人品的问题,这个雇主应该有能力察觉,然后本身劳务合同里也是得规定是否属实的。
  2. 好的代码应该是有 commit history 的,所以这个如果让 TA 说下开发历程,没有一定能力是做不到的。
  3. 如果是团队里相关人作品,这个首先还是回到人品问题,再次是这个人能解释清楚,也说明其水平了。
  4. 是可以让 TA 提供多份作品,毕竟每个人都是有一些风格(编码和文档)的。
  5. 最后,比起 TA 平时的作品,这个编码测试是不是更容易找别人代做呢。

比起让我写一个得意的作品,我觉得还不如在家写写 codewar 题目节约时间。平常加班都忙不过来,还写作品。

这个是个很快的题,我觉得不需要弄得这么复杂,有些 over engineering 的感觉。你的元编程太元了,其实不太好懂,后续维护不那么容易。而且 Codewar 貌似是不能写 class, module 的,这个答案本地可以过,网上过不了。

我想出题目不仅是考察你写代码的能力,更多的是看你的思路,看你的代码风格能否融入团队。如果一个简单问题需要很 fancy 的方法来解决,可能这个答案也不是出题的人所喜的。

#4 楼 @billy 我很尊重你的观点,你说的也没错,所以只是文化问题而已:)

但是我觉得这个问题其实是应该我这样做的,在真实的复杂的项目里,和招聘里说的“一个优雅的解决方案”,否则够 Ruby 吗?否则 Rails 如何诞生?

#3 楼 @MrPasserby 好吧,我们价值观不一样。

在我的价值观里,加班其实是工作效率低下,远远没有发挥一个 Ruby 工程师应该有的效率。我相信这个也是你用的包括 Rails 作者在内的众多开源软件作者的价值观。

#6 楼 @mvj3 我不在那个帖子里回你了 https://ruby-china.org/topics/25179#reply3

如果你觉得你的答案更有技巧和扩展性请先通过测试再说,你现在代码绝对通不过测试,原因我想请你先自己找一下。

#4 楼 @billy 是可以写 class, module 的,他的代码测试结果是

21 Passed
3 Failed
0 Errors
9 楼 已删除

我觉得面试就是用来过滤掉不合适的人的,没什么好抵制的。

还没开始面试就能过滤掉人是最好的,用面试来过滤掉一分部也是很不错的,最怕进了公司之后发现这里不爽那里不行,工作得不开心,效率又不高,真的是浪费 双方 的时间和精力。

我个人作为程序员,希望这样招聘的公司多一点,简历再华丽、工作年限再长、名气再高、公司美女再多、JD 再煽情,也比不上用几段代码互相沟通能够说明问题。

再说,公司面试不是学校考试,非得拿满分才能通过。我觉得即使面试者提交的代码不能让公司满意,公司应该也要安排一个互相就这段代码来交流、表达应聘者和招聘方各自想法的环节,互相探讨问题, 就像将来在工作中一样 。而要做到这一点,公司就必须得认真阅读面试者提交的每份代码。我不觉得这里边有任何的不尊重。

要是最后的交流中实在无法达成共识,也只能算是不合适罢了……因为你看代码再烂的团队也能赚钱,不是谁谁谁差,仅仅是不合适,有相当部分人习惯了在代码泥团中打滚,拿着大把的工资开心着呢(我说这些没有任何鄙视的意思)。就像你说的,价值观不一样而已。

再回来说开源作品,一个稍微有点功能的作品,代码量都比编码测试题多得多。而且实现的功能又各不一样,招聘方首先得弄清楚你的代码结构,弄清楚哪些模块实现了哪些功能,然后再挨个看代码,挑出有疑问的、值得探讨的地方。假如招聘方已经关注某个程序员很久了,主动的这样仔细去看他的作品才有可能。可是多数情况下,招聘方和应聘者的关系是一对多,这样面试成本似乎也太大了点。而测试题是招聘方出的,需求单一,他们也很了解,而且功能应该也都比较单一,这样可以直接就开始看代码,而不是先花功夫把需求、代码结构、功能模块弄清楚,比起看开源作品高效得多。

我只是觉得,真有公司愿意用交流代码的方式来招聘,程序员应该很开心的。

手痒我也贴个解法,顺便支持下楼主

data = {
  one: 1,
  two: 2,
  three: 3,
  four: 4,
  five: 5,
  six: 6,
  seven: 7,
  eight: 8,
  nine: 9,
  times: '*',
  plus: '+',
  minus: '-',
  divided_by: '/'
}

data.each  do |k, v|
  define_method(k) do |arr = []|
    res = [v].concat(arr)
    if res.size == 3
      ln, op, rn = res
      ln.send(op, rn)
    else
      res
    end
  end
end

反对做 boring 的题,题目有趣的话当作消遣和练手。

#7 楼 @lolychee 抱歉我没有理解你的意思,“21 Passed, 3 Failed, 0 Errors",我的代码里总共有 8 个测试,何来 21+3=24 个测试?

#9 楼 @billy 非常感谢做了这么长的 Review。下面是一一回复:

有问题部分:


1. method_missing 缺乏对应 respond_to? --- 这个确实是的,不过我之前做了 5 年多的 Ruby,还从来没有听过这个约定,搜索了一下,发现社区里确实有人提到,感谢提醒。说句题外话,我觉得这是 Ruby 语言本身的机制问题,没有提醒使用者去注意。 
2. method_missing 方法主体太长,无法单元测试。 --- 里面已经分步骤一二三了,方法长度不是为短而短,而是为了清晰的这个目标。我随便给你挑了一个代码 https://github.com/rails/rails/blob/master/actionpack/lib/action_dispatch/http/cache.rb#L141 我建议你先挑一下我代码的优点,而不是缺点。面试的时候主要考虑优点,其次看缺点是不是在容忍度内,做人何尝不是这样呢:) 
3. send 调用私有方法有问题。 --- 有问题就不要说”有问题“,把错误栈或原因说出来,让对方马上明白,这个道理好像一般提问智慧里都有吧。 
4. 最大问题:assert_equal(7, one(plus(two(times(three))))) 这个是新增加的 API,原需求不需要这个方法,你自己增加了,这个带来不必要的成本。
 --- 本身就是兼容的,而且是逻辑内含的,这不是画蛇添足。

  1. method_missing 里面条件不符直接报错不太合适,应该考虑往上甩的可能性,不然别人就没法用 method_missing 了。 --- 这个代码首先不是一个公共库,我能做成一个 module 再加点测试已经很是良心代码了。

意见性部分:


1. method_missing 是很强烈的元编程方法,而且增加调试困难。不到走投无路最好不用。如果一定要元编程,我建议用 define_method 等比较温和的方法。
 --- 如果对方需求里要求支持 一万一个数字呢:)我这里本身用的就是 define_method,如果你的能力再好点,应该可以明白我这是最佳的 cache 做法。

  1. 新增的几个 constant,除了 Numbers 和 OperationMap 我觉得有些意义外,其余都属多余。 --- 分步骤,数据流程清晰。 
3. method_missing 主体很长,里面的逻辑难懂。 --- 建议你说出难懂的原因来。 
4. 既然你注重扩展性,测试应该覆盖扩展的逻辑部分,而不仅是直接的需求。--- 请详细说出我扩展的逻辑的部分。这个代码主要目的就是为了需求里的几个数字和算数规则,没有太多复杂的东西。

话糙理不糙,我喜欢你论证的条理性。现在我的代码在主要的 Ruby 版本上都通过了,见 https://travis-ci.org/mvj3/oracle_interview_calculation , - 1.8.7 - 1.9.3 - 2.0.0 - 2.1.0 - 2.2.0,我本地的 Ruby 是 1.9.3, 刚才我兼容了一下 1.8.7 和 2.2.0,详情见我的 commits为这个面试实在是没必要这么干的。

#10 楼 @emanon 你说的比较诚恳。编码测试是可以用来过滤,但主要还是降低公司的成本,而不是应聘者的成本。如果这个员工真的重要,为什么不拿出点诚意来好好了解应聘者的 Github 开源项目呢?五分钟就大概能了解这个人水平了,其余都是细节。如果五分钟都拿不出来,我真的不能明白什么是求贤若渴。

#11 楼 @kayakjiang 比起其他人的,你的代码应该是创业公司最推崇的(最好还是加点测试吧。。。),要速度快的话我也会这么干。可是这个面试题又没限制时间,做的简单了,对方还会以为你水平也就这样呢,这是个非常仁者见仁的问题。"一个优雅的解决方案"里的这个“优雅”还是很有主观性的:)

#7 楼 @lolychee

哈哈,我注册试用了一下 codewars,真牛逼,这个提示做的。。。

点击 Run tests

Run options: --seed 1918

# Running:

.

Finished in 0.002305s, 433.9223 runs/s, 4339.2231 assertions/s.

1 runs, 10 assertions, 0 failures, 0 errors, 0 skips
Test didn't pass: Unknown error
Process took 135ms to complete

点击 Submit

static example calculations
 `block in 
': undefined local variable or method `five' for main:Object (NameError)
    from `block in describe'
    from  `measure'
    from  `describe'
    from  `describe'
    from  `
'
0 Passed
0 Failed
0 Errors
Process took 66ms to complete
  1. 编码测试是一种有效的筛选方法。不负责招聘的人也许难以理解。
  2. 设计得比较好的题目,它的范围应该是有限的。以这个题目来讲,如果你花费的时间超过两三个小时,可能你对 Ruby 不够熟悉。
  3. 经营一个开源作品或博客所花费的时间肯定超过做测试题目的时间。如 MrPasserby 所说。
  4. 不愿意花两三个小时完成一个测试题目,应聘者的诚意何在?
  5. 讨厌这种方式的话,用脚投票就好了。

#15 楼 @yanhao

  1. 对,这是相互选择的过程。但是听一听不同的声音总是好的。
  2. 那得看如何实现。我建议你对我的设计代码里涉及到的各种东西做一个深入考察并说出各种优劣后再说我熟不熟悉 Ruby 也不迟,或者你示范写一个更优雅的。
  3. 这个是平时的,如果每个人都是像为了应付高考一样去对待技术面试,那么中国的开源事业如何发展?
  4. 我上面说了,可以换用 其他对等的方式,比如平时写的作品。本来测试的目标主要就是为了考察水平,而不是主要为了考察诚意,对吧?!而且如果多花点时间写一个把对方招聘里的内在需求和自身技能清晰地匹配起来的简历,是否更有利于双方的选择呢?而不是几十行代码就看出一个人的水平。
  5. 对,但是得尊重少数人的选择,要知道开源作品主要还是少部分人做的。

从上面反馈看来,"斯德哥尔摩综合症"患的比例还是有点严重的。好吧,以我个人经历来看,应聘者强势也没有好结果,但是我总是觉得缺了点什么。

从之前的招聘贴 https://ruby-china.org/topics/24608 的回复来看,回复的人给出代码的,招聘方都给出了请发简历的邀请,我真的对"优雅"一词产生了怀疑。。。

各种低级代码:

  1. OPEATOR.keys.include? -- 太明显的重复计算,明显是对对象内存占用没概念
  2. Fixnum.module_eval -- Monkey patch ...
  3. eval 还是少点用吧。。。
  4. 没有认识到 Ruby 里 Method 对象的威力
  5. 看上去都是没有写过中大型软件的,好像水平就停留在加个 lib 目录的阶段,也许可以尝试一下升级到 gem 的阶段。我知道我说的太严厉了。。。

还是说两句吧。 从一个面试官的角度来讲,他需要的是高于某一个标准的面试者。这个标准包含多方面的因素,有的可以量化,有的不可以。在我们这个行业,能量化的同时也是最重要的是编码水平。所以我们倾向于通过编码在面试初期就能发现符合/高于我们标准的面试者。 什么是编码水平?我个人角度认为有如下几点: 1- 思维能力。也是解决问题的能力,有时候我并不期待于你能完全解答出这个问题,而是你思维方式是否有亮点和逻辑性,正所谓条条大路通罗马。 2- 语言的掌握程度。针对这个问题,如果你了解 Ruby 的语言特性,会发现你的方案就是自然的优雅。如果用 java,你怎么也优雅不起来。我认为,这个题能很准确的测试这方面的能力。 3- 其他的一些能力,比如算法能力,设计能力。这些跟你的背景有相当大的关系,比如你是否涉及大型项目的设计和实现,是否关注过某些性能要求苛刻的计算。这些方面突出的人才其实可遇不可求,但同时也看企业需求(是不是需要你这样的人)。

当然同时出这个题目的原因也有想测试一下面试者的态度,我们需要的是这样的一种人:看到这个题目就觉得很有意思,就想去尝试,正所谓“激情”是也。同时我们也想节约大家的时间,我们遇到的情况是,我们发了帖子,很多人投简历。但一到现场笔试环节,要么答题不理想,要么看不懂英文。相信我,这个帖子满满的都是善意,为你为我而已。

必须要说的是:对于你这个帖子,我心情很复杂。为你的热切关注感到高兴,但也为你的思维方式感到担忧。不知道你是否会想到:你这样指名道姓的发这个帖子,是否会影响到其他个人/企业的形象和利益?

对你这个帖子,一句话作答:我不同意你的观点,但我誓死捍卫你说话的权利。

#17 楼 @still0007 很赞同你说的关于面试官的方法和原则。

#16 楼 @mvj3 在任何面试场景中,你不是受害人,其他人也不是,所以我不认同你说的 弱势应聘者斯德哥尔摩综合症 这个提法。

关于 雇主应该少让弱势应聘者浪费时间去做这些无聊的面试题 这件事,我想说事情可能看起来并不像表面那么简单,用编码测试去了解一个人,去验证 culture 是否 matching,不一定是最理想的做法,但是对有经验的面试官来说是一个很有效的方式,去年一个偶然的机会跟 ThoughtWorks 的两个面试官聊了技术面试这回事,推荐给你 http://teahour.fm/2014/05/09/job-interview-at-thoughtworks.html

最后,我不同意你的观点,但我誓死捍卫你说话的权利。

#17 楼 @still0007

首先我想说的是我非常高兴地感受到了你的诚意和善意,对于你说的编码水平衡量标准我没有异议,我唯一介意的是,根据我的面试体验,和面试官的水平有很大关系,而且讨论有些较深问题的时候,照顾面试官(一般是未来的上司和同事)的情绪是一件很重要的事情(因为这个这个事情我真的挂了好多面试),对于能力好有想法的人只能拼人品和机缘了,对于能力差点(比如以前刚出道一两年的我)只能先委曲求全能通过就最好了。

这个帖子,首先可以看出的事,我其实没有在应聘,我只是在发表企业这种做法在我的实际体验(在我看来这就是传统招聘的痛点)看来有点不舒服,因为我通过编码面试后,对方基本也不会就这个题目讲什么内容,说的全都是旁枝末节(比如方法名,或者一个不涉及性能问题的语言 API 等),真的是仁者见仁而已,太少去关注首先是能及时完成项目,其次是把项目做正确(设计和测试),再是整体软件设计能力,等等。

是有点指名道姓,但其实我并没有针对 Oracle,我只是在抱怨一个行业现状(被一部分企业采用的编码面试)而已。Oracle 是家国际公司,我觉得还是相对而言比在一个还在生存线上的创业公司的帖子下回复的好吧,即使这样,你说了你也会捍卫我说话的权利对吧。我的这个意见,就相当于有人抱怨国营单位的工作人员态度比较差一样,没有别的意思。

最后,我真的真的建议,如果应聘者针对招聘需求去做简历和介绍,表示对对方公司职位和文化的兴趣,并自己的一些未来发展等,而雇主也应该对这认真评阅(现场我知道一般人都会答复,但是 email 就不是了),作出相对应的回复,这样会更佳人性一点,遗憾的是,有些公司的礼节做的太差了,好像应聘者是在求 TA 一样爱理不理。简单来说,对于群发的简历可以忽略不回,对于有诚意的应聘,只要职位匹配上的偏离不是太夸张,建议还是好好回复一个,哪怕一句话也好,虽然我知道这个已经是行业的潜规则了。我只是觉得我曾经受到了一些委屈,表达出来,看看有没有其他人有相似的经历并获得一些赞同。

话说回来,即使我这样表达,你照样也收到了很多简历(好多回复对吧),所以假使我真的无理,那么其他应聘者不用在意我的话就好了,毕竟我说的只是一个流程问题而已。

#18 楼 @lgn21st 首先非常感谢吕大哥去年邮件对我说的一些贴心的话,做人确实得磨练一些每个人都应该学会的技巧。你推荐的这期 Teahour Podcast 我听过(现在忘了内容了,有空我会再听一遍),我也经历过 Thoughtworks 公司的面试,简单来说,面试其实是个远比流程本身更复杂的事,任何一点因素都是可能导致双方最终没有对上的。我只想说一句,人活得稍微理想一点,是可以增强幸福感的:)

关注 & 喜欢

不做编码的面试我才觉得是浪费时间啊。。。

而且这个没要求你真去编码……只是要求你有自信能够解决这样一个问题……

换言之……这个只是一个自评的门槛……可以拦住水平不够的人……同时让有机会的人能够了解到自己是有机会的……

需要 登录 后方可回复, 如果你还没有账号请 注册新账号