新西兰天维网社区

标题: 有知道EROAD公司的吗? Java 第二轮failed了 唉 [打印本页]

作者: flying3615    时间: 2016-10-20 20:18:28     标题: 有知道EROAD公司的吗? Java 第二轮failed了 唉

本人Wintec 在读GD,IT 之前看到这家公司在网上招人,说是给办工签,索性就投个简历过去,经过了第一轮,纯概念性的技术面试,第二轮Java程序题之后,接到的消息就是unfortunately, 基于第二轮结果他们不打算再面我了
第二轮的题目就是用Java写一个UTC时间根据给定坐标转localtime的程序题,对于我最不能接受的是我不光用Java实现了一版,还用groovy写了一版更简单的,莫名其妙的就给我拒了,鉴于java代码太多我就不贴了, 想请问坛子里Java的大神们,NZ软件公司技术要求都这么屌吗?  还是我的代码太low了....

  1. def baseUrl = 'https://maps.googleapis.com/maps/api/timezone/json'
  2. def forecastApi = new RESTClient(baseUrl)

  3. new File("./input.csv").splitEachLine(",") {fields ->
  4.     def queryString = [location: "${fields[1]},${fields[2]}", timestamp: 0, key: apiKey]
  5.     def response = forecastApi.get(query: queryString)
  6.     String zoneID = response.data.timeZoneId
  7.     DateFormat utcFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  8.     utcFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
  9.     Date date = utcFormat.parse(fields[0]);
  10.     DateFormat pstFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
  11.     pstFormat.setTimeZone(TimeZone.getTimeZone(zoneID));
  12.     println "${fields[0]},${fields[1]},${fields[2]},${zoneID},${pstFormat.format(date)}";
  13. }
复制代码



作者: MSSA    时间: 2016-10-20 20:42:11

本帖最后由 MSSA 于 2016-10-20 20:45 编辑

有时候你被拒不一定是跟你的代码有关,跟你面试的表现和是否有竞争者都有关系。我不太了解你具体面试的情况,不过从你描述看,我给你如下几个建议:
1.你用groovy写这个版本,以我个人看来完全多余,人家如果要求你用Java,你为何要用groovy?developer永远要follow requirement。这个公司是用Java的,对于用Java的公司你groovy写的再好也等于0. 你可能因为喜欢简洁的代码所以这么干,但是这么做会给人show off和不follow requirement的印象

2.你的代码如果是当场短时间写出来的我觉得可以说的过去,当然是看什么职位,Junior/Graduate,我觉得写成这样是可以的,如果是intermediate往上的职位,可能还需要点work。 Groovy不太了解,不过你里面调用的Java API可以在refine一下。例如对于时间这东西,可以用Joda time,或者新的Java 8的date API。 而且你这个程序没有基本的error handling,还有代码都挤到一块没有line break. date pattern可以extract到一个constant等等之类的。 当然这些我个人觉得都是比较minor的东西。

主要原因可能还是你偏离主题,也或许你的Java的版本有什么他们在意的问题。面试被拒有很多原因,有时候不一定因为你自己的原因而是因为可能还有比你更合适的candidate。





作者: wentan    时间: 2016-10-20 21:00:47

那个。。。作为一个不合格的java程序员。
我居然不知道啥是“UTC时间”。。。
感觉自己好low。。。
作者: flying3615    时间: 2016-10-20 21:03:17

MSSA 发表于 2016-10-20 20:42
有时候你被拒不一定是跟你的代码有关,跟你面试的表现和是否有竞争者都有关系。我不太了解你具体面试的情况 ...

恩  多谢回复, 因为是限时写code所以有些细节没有考虑,不过确实回想下如果这个公司能提供工签的话,应聘者估计要比那种不给工签的水平高些吧,毕竟是面向全球的了, Java 8 的新API也有看过,不过时间太紧就没想起用。 呵呵,也许被挫习惯就好了,只不过没想到在这边困难还是很大的。 好多公司一看你是学生签 直接连面试机会都不给, 真是想找家公司实习下,能拿个最低工资也好。 感觉要没出路了
作者: flying3615    时间: 2016-10-20 21:08:36

wentan 发表于 2016-10-20 21:00
那个。。。作为一个不合格的java程序员。
我居然不知道啥是“UTC时间”。。。
感觉自己好low。。。 ...

呵呵,能有工作就是合格的java程序员
作者: Venox10111    时间: 2016-10-20 21:24:26

代码本身应该run 起来是可以得,但是有几个小点
1.没有handle 错误
2. Date date 是什么鬼
3. response.data.timeZoneId, 确定每次loop 都要重新拿一遍?
作者: MSSA    时间: 2016-10-20 21:29:35

Venox10111 发表于 2016-10-20 21:24
代码本身应该run 起来是可以得,但是有几个小点
1.没有handle 错误
2. Date date 是什么鬼

zone id应该是他根据坐标field 0,1算出来的需要在loop里面,不过那两个date format可以提到loop外面去(不用多线程的前提下)。
作者: flying3615    时间: 2016-10-20 21:33:50

Venox10111 发表于 2016-10-20 21:24
代码本身应该run 起来是可以得,但是有几个小点
1.没有handle 错误
2. Date date 是什么鬼

因为input是每行都是一个新的经纬度坐标 需要到google api请求新的timezone,所以就放到loop里了
作者: Venox10111    时间: 2016-10-20 21:34:23

MSSA 发表于 2016-10-20 22:29
zone id应该是他根据坐标field 0,1算出来的需要在loop里面,不过那两个date format可以提到loop外面去(不 ...

哦,对,不过总感觉每次query 一下耗费apikey, 估计google api 是可以一次query 多个的吧,嘿嘿

不过考试能写出来这个不容易了
作者: flying3615    时间: 2016-10-20 21:35:45

MSSA 发表于 2016-10-20 21:29
zone id应该是他根据坐标field 0,1算出来的需要在loop里面,不过那两个date format可以提到loop外面去(不 ...

恩 老的Date API多线程下有问题
作者: MSSA    时间: 2016-10-20 21:37:41

Venox10111 发表于 2016-10-20 21:34
哦,对,不过总感觉每次query 一下耗费apikey, 估计google api 是可以一次query 多个的吧,嘿嘿

不过考 ...

是的,我上学的时候可没这个本事。。。。。那时候天天魔兽呢。
作者: flying3615    时间: 2016-10-20 21:55:26

MSSA 发表于 2016-10-20 21:37
是的,我上学的时候可没这个本事。。。。。那时候天天魔兽呢。

来NZ读GD IT的一般都是有些经验的吧,也不是想说code写的怎么样,就是觉得这边的机会实在太少了,而且我还在Hamilton,用Java的公司更少, 之前也试过打印简历挨家挨户去递, 最怕的不是你技术不行,而是人家连机会都不给你, 还有半个学期,到时候转成open working visa 不知道能不能好些
作者: qing_song    时间: 2016-10-20 21:58:47

有没有想过为什么题这么简单,还有时间让你写2个版本?这么简单的题怎么筛选面试者呢?
时间这么充裕,功能又简单,所以我认为这道题应该体现的是程序设计的基本功。
1. 你这个不是个完整的程序。完整的程序不是说能跑就行了,你还要告诉别人怎么用,没有readme,至少也得有注释。
2. 没有考虑可扩展性,简单的说要是input换一个格式你怎么处理,要是别人要求用另一个service来查timezone咋办。不知道我说什么的话看看工厂模式好了。
3. 时间允许的话还应该考虑模块化,封装具体实现。这里至少就可以分出一个io模块和查询模块。
4. 上面的兄弟说了,没有handle exception。

作者: flying3615    时间: 2016-10-20 22:06:33

qing_song 发表于 2016-10-20 21:58
有没有想过为什么题这么简单,还有时间让你写2个版本?这么简单的题怎么筛选面试者呢?
时间这么充裕,功能 ...

呵呵,本人技艺不精,请您在一小时时间内写出java版的 带有IO模块查询模块 readme完整API 注释的project出来。 本来也不是技术论坛,也没贴代码的必要,只是说面试来说用Groovy脚本来写代码要简洁很多,我是为了比较Java的啰嗦,所以尽量把Groovy写的很简单, 当让我也可以贴Java的将近200多行的代码,各种try catch final,不过我觉得没必要
作者: qing_song    时间: 2016-10-20 22:10:52

flying3615 发表于 2016-10-20 22:06
呵呵,本人技艺不精,请您在一小时时间内写出java版的 带有IO模块查询模块 readme完整API 注释的project ...

呵呵,我这么说是因为我知道这题,不过不是90分钟的吗,怎么变1小时了呢。
作者: kisswd    时间: 2016-10-20 22:12:30

1. Eroad是用Java的,所以你还是用Java来写,Groovy在很多人眼里只是作为Script用的,你这个代码感觉就是Groovy+Java混搭
2. 他们公司主要是车载系统交互的(听说的),所以对性能要求很高,你的代码里面重复太多
3. 你的Groovy写出来就像是Script,如果真是这样的要求,估计那边会不限语言,你就还不如用Nodejs或是Ruby写,效率会更高(个人感觉)
4. 代码里面没有任何的error handler, groovy里面的 cond?.doThing {} 是最基本用法防止NPE
5. 就算是Groovy,也尽量不要用def, 太多runtime error, 而不是 compile error,如果要用def 就都用,除了constant
6. 建议有空的时候看看Clean code规范代码格式,也可以把你自己的Java和Groovy的代码用sonar扫一下,再说其他的问题
作者: flying3615    时间: 2016-10-20 22:19:15

qing_song 发表于 2016-10-20 22:10
呵呵,我这么说是因为我知道这题,不过不是90分钟的吗,怎么变1小时了呢。 ...

因为另外半小时用来写groovy
作者: qing_song    时间: 2016-10-20 22:22:43

flying3615 发表于 2016-10-20 22:19
因为另外半小时用来写groovy

咋感觉你是被groovy害的呢。。。
作者: flying3615    时间: 2016-10-20 22:28:13

kisswd 发表于 2016-10-20 22:12
1. Eroad是用Java的,所以你还是用Java来写,Groovy在很多人眼里只是作为Script用的,你这个代码感觉就是Gr ...

牛人,意见中肯  赞一个
作者: 枯藤老树    时间: 2016-10-21 11:20:00

wentan 发表于 2016-10-20 21:00
那个。。。作为一个不合格的java程序员。
我居然不知道啥是“UTC时间”。。。
感觉自己好low。。。 ...

0时区格林威治时间。。
作者: ztswyz    时间: 2016-10-21 13:47:07

引用一下昨天跟我聊天的某team lead的话

我找你来咱提前说好,我跟上面老板还有下面团队推荐了半年用某种库,做某种架构。你来了不能给我改成什么什么架构。

楼主你这明显是撞枪口上了。 也可以说是喧宾夺主。人家招你来是干活的没问你哪个好,哪个坏。你这样面试说好听了是展示技术,用groovy多写一遍。难听了叫不听从指挥。写完第一遍你为什么不交? 也许还有第二题呢?老板让你用第二种方法写了? 再说了,如果JAVA版里面有错呢?~

其实你这种情况,不考虑写groovy 只考虑时间。 只要有写的比你快的,java代码整洁的就肯定把你刷下去了啊。 而且万一你不好说话呢?来上班第一天说我要用groovy。。。老板就直接踩雷上了。。。

其实毕业生面试有个技巧。就是展示自己的可塑性。 让你干啥就干啥,不要太钻,或者挑。 就算是真挑,也得入职之后。



作者: flying3615    时间: 2016-10-21 14:15:36

本帖最后由 flying3615 于 2016-10-21 14:18 编辑
ztswyz 发表于 2016-10-21 13:47
引用一下昨天跟我聊天的某team lead的话

我找你来咱提前说好,我跟上面老板还有下面团队推荐了半年用某种 ...

conduct code here?
Programmer's time is much more valuable, compared to Java, Groovy is more consice and intuitive, even if my code is imperfect, so I took a shot to choose a better way.
Addtionally, I wrote in a Groovy way just want to advise I'm a qualified Java programmer who can bring more value than merely a Java coder, If they ask I can even re-write it in Scala or Clojure.

作者: couheyong    时间: 2016-10-21 16:32:01

flying3615 发表于 2016-10-21 14:15
conduct code here?
Programmer's time is much more valuable, compared to Java, Groovy is more consic ...

英语作文考试,你非得用法语写,不及格不是很正常吗,有啥莫名其妙的。
作者: NewLynnHse    时间: 2016-10-21 17:35:59

哈哈,是我也不会要你的。让你写Java,你写什么Groovy?这么简单的话都不会听。请了你以后,公司的code base就完蛋了。。。哈哈哈哈
作者: DDD888    时间: 2016-10-27 09:33:58

I don't know about grovvy. I think groovy is very interesting.

For your code, if I wrote in javascript or other languange, I will put following code in a function. By seperating the code into function, it is easy to read and of course you can unit test the function :-)

def queryString = [location: "${fields[1]},${fields[2]}", timestamp: 0, key: apiKey]
    def response = forecastApi.get(query: queryString)
    String zoneID = response.data.timeZoneId
    DateFormat utcFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    utcFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
    Date date = utcFormat.parse(fields[0]);
    DateFormat pstFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
    pstFormat.setTimeZone(TimeZone.getTimeZone(zoneID));
    println "${fields[0]},${fields[1]},${fields[2]},${zoneID},${pstFormat.format(date)}";
作者: DDD888    时间: 2016-10-27 09:35:40

NewLynnHse 发表于 2016-10-21 17:35
哈哈,是我也不会要你的。让你写Java,你写什么Groovy?这么简单的话都不会听。请了你以后,公司的code bas ...

The issue is the interviewer may not know about groovy and cannot make judgement about the skill of the candidate
作者: DDD888    时间: 2016-10-27 09:37:13

kisswd 发表于 2016-10-20 22:12
1. Eroad是用Java的,所以你还是用Java来写,Groovy在很多人眼里只是作为Script用的,你这个代码感觉就是Gr ...

I talked to their developers before and they use C# too.
作者: DDD888    时间: 2016-10-27 09:41:54

Frankly speaking, I have no interest to taking interviews anymore. They just give you some test and I hate test :-)

I have 22 years programming experience and including 16 years auckland, nz programming experience. :-)
作者: flying3615    时间: 2016-10-27 13:15:21

DDD888 发表于 2016-10-27 09:35
The issue is the interviewer may not know about groovy and cannot make judgement about the skill o ...

Maybe, In my opinion, even thought my code is not perfect Groovy-style, if you are a qualified Java programmer, not only do you need to know Java, but also other JVM derived languages, like Groovy,Scala,Clojure or Kotlin.  Anyway, pretty bad experience Eroad interview for me.
作者: DDD888    时间: 2016-10-27 14:05:25

flying3615 发表于 2016-10-27 13:15
Maybe, In my opinion, even thought my code is not perfect Groovy-style, if you are a qualified Jav ...

I am not sure how many times eroad inteviewed you. If only once, maybe not too much time wasted.

I once took four interviews with a company and in the end, the hr lady told me that I do not fit the team. That was around 4 x 4 hours =16hours wasted.

The reason I took the interview was that job was for an intermediate c# developer and have a chance to program sap api which I was fancy about.
作者: liu_yu_1980    时间: 2016-11-1 10:44:30

提示: 作者被禁止或删除 内容自动屏蔽
作者: 927630    时间: 2016-11-4 17:15:52

这公司的BI是用的什么数据库





欢迎光临 新西兰天维网社区 (http://bbs.skykiwi.com/) Powered by Discuz! X2