写一个 Java 类,满足以下条件
assert new F().apply(1).get() == 1; assert new F().apply(1).apply(2).get() == 5; assert new F().apply(1).apply(2).apply(3).get() == 14;
写一个 Java 类,满足以下条件
ar f = new F(); assert f.apply(1).get() == 1; var c = f.apply(1); assert c.apply(2).get() == 5; assert c.apply(2).apply(3).get() == 14;
写一个 Java 类,不使用 Java 类的成员变量( Field ),满足第二问条件
![]() | 1 vjnjc 2018-05-09 00:10:42 +08:00 via Android ![]() Java 选手看不懂。。。这是 Java10 么? |
2 huhu3312 2018-05-09 00:12:34 +08:00 看到 var 类型的类型推断,果断是 java10 没错了 |
![]() | 3 Citrus 2018-05-09 01:01:28 +08:00 via iPhone 没太懂,为啥是语法题?感觉这是数学题啊。。。 |
![]() | 4 Bryan0Z 2018-05-09 01:03:12 +08:00 via Android 第一个简单 private int value; public F(int i){ this.value = i; } public F apply(int i){ return new F(i^2+value) } 手机码字,就不发全了 |
5 glacer 2018-05-09 02:34:34 +08:00 via iPhone 如果使用 Java 成员的话,不是很懂第一问和第二问在实现上有什么区别。。 不使用类成员的话,用内部类实现闭包? |
![]() | 6 88250 |
8 119 2018-05-09 05:44:05 +08:00 |
9 119 2018-05-09 05:50:55 +08:00 |
![]() | 10 ayanamist 2018-05-09 07:22:51 +08:00 via Android 这和语法有啥关系,明明是打着编程笔试题的智力小测验。在国内最大的 java workshop 表示要是有团队出这种题,你们还是别去了,去了估摸着也要去猜产品的心思。 |
![]() | 11 hsuan 2018-05-09 07:25:51 +08:00 via Android 第一问和第二问难道不是一样的吗 |
![]() | 12 lihongming 2018-05-09 07:32:08 +08:00 via Android Java 已经过了炫技的时代了 |
13 Cbdy OP |
![]() | 14 cout2013mr 2018-05-09 08:11:05 +08:00 via Android 看来我是第一个不认识断言关键字的 |
![]() | 15 sagaxu 2018-05-09 08:15:59 +08:00 via Android 考语法跟考打字速度效果差不多 |
16 wenzhoou 2018-05-09 08:32:09 +08:00 via Android ![]() 完全通过测试 注:非完整代码 if ( i= 1 ) return 1; if ( i= 2 ) return 5; if ( i= 3 ) return 14; 好了。 |
17 wenzhoou 2018-05-09 08:33:23 +08:00 via Android 别批判我。我是来搞个笑的。 |
![]() | 18 darklowly 2018-05-09 08:38:05 +08:00 其实一个闭包可以搞定全部 另外算法是 平方和 |
19 moximo 2018-05-09 08:46:28 +08:00 class f{ |
22 dychenyi 2018-05-09 09:12:33 +08:00 不懂 java。 c++的 apply ()里面肯定要有 return *this;这种写法就符合 lz 语法了。 |
![]() | 23 zhazi 2018-05-09 09:17:46 +08:00 via Android 笔试题? |
![]() | 24 DRcoding 2018-05-09 09:21:23 +08:00 然而 java 10 的语法有何意义,就问贵司敢不敢在生产环境上 jdk10 吧,哈哈哈哈 |
![]() | 25 Tiakon 2018-05-09 09:22:36 +08:00 怎么感觉更像 scala |
26 Cbdy OP @cout2013mr assert 是 Java1.4 加进来的特性 @darklowly 对的,闭包。题目条件是递次增强的,做出第三问,前两问的用例也能通过 @micean 很机智啊,也是一种方法 @dychenyi 我也不是很懂 C++,不过 C++似乎没有词法闭包 |
![]() | 28 yuyueMJ/a> 2018-05-09 09:45:56 +08:00 via iPhone js 题? |
30 smdbh 2018-05-09 12:00:52 +08:00 py 里有 yield,java 里不知道 |
31 scmod 2018-05-09 14:27:06 +08:00 ```java public class F { public F apply(final int i) { return new F() { public int get() { return i * (i + 1) * (2 * i + 1) / 6; } }; } public int get() { return 0; } } ``` 重载?闭包怎么写...java 不是没闭包么.. |
![]() | 32 holmesabc 2018-05-09 14:44:07 +08:00 国考 智力题吧 |
![]() | 33 oswuhan 2018-05-09 16:21:51 +08:00 |
34 alamaya 2018-05-09 16:32:48 +08:00 via Android @scmod java 有闭包,不过是残疾的那种,要求变量是 final or effective final |
35 sonicthedgehog 2018-05-09 16:46:43 +08:00 class F { public F() { } public F apply(int i) { return new F() { @Override public int get() { return F.this.get() + i * i; } }; } public int get() { return 0; } } 已测试,通过 |
36 sonicthedgehog 2018-05-09 16:59:10 +08:00 via Android @sonicthedgehog 不过这不是惰性计算,难受 |
![]() | 37 Terry05 2018-05-09 17:00:02 +08:00 这年头要是找工作还让我做笔试,尤其是这种没事找事的题目,就给老子滚粗,爱招谁招谁去 应届生也许很会做这种题,招应届生去吧 |
![]() | 38 wdlth 2018-05-09 22:16:42 +08:00 这一定是 clojure 的阴谋 |
![]() | 39 kiddult 2018-05-10 00:16:22 +08:00 @Cbdy 版本上实际上还是限定了只能用 invokedynamic 来实现;内部匿名类不能用,底层会引入 final Field |
![]() | 41 unlimitedsola 2018-05-10 07:24:45 +08:00 爱招谁招谁去+1 |
42 CRVV 2018-05-10 12:29:58 +08:00 真看不出来是求平方和 满足 0 0 1->1, 0 1 2 -> 5, 1 2 3 -> 14 的还可以是 5 * x1 + 3 * x2 + x3 3 * x1 + x2 + x3 ** 2 -7 * x1 - 3 * x2 + x3 ** 3 看到这种题目,我的第一反应都是 public_class_F_{ ____private_int_v; ____public_F_apply(int_x)_{ ________if_(x_==_1)_{ ____________v_=_1; ________} ________if_(x_==_2)_{ ____________v_=_5; ________} ________if_(x_==_3)_{ ____________v_=_14; ________} ________return_this; ____} ____public_int_get()_{ ________return_v; ____} } |
43 hubin0203 2018-05-10 16:18:55 +08:00 public class F { int result; static int preResult; class InnerClass{ int temp; public InnerClass(int temp) { this.temp = temp; } InnerClass apply(int a){ result = a * a; return new InnerClass(result); } int get(){ result += preResult; preResult = result; return result; } } InnerClass apply(int a){ result = a * a; return new InnerClass(result); } } 这些题是招几年 JAVA 的哦== |
![]() | 46 kiddult 2018-05-11 19:24:36 +08:00 @Cbdy 内部匿名类在实现的时候,是吧局部变量当构造器的参数传进去了,然后在里面维护了一套 Field,本质上只是少写了一些字 |