今天出了一个 Java 笔试题(语法题),有兴趣的同学来做做😄

2018 年 5 月 8 日
 Cbdy

第一问

写一个 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 类,满足以下条件

var 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 ),满足第二问条件


答案

8367 次点击
所在节点    Java
46 条回复
micean
2018 年 5 月 9 日
第三题
不用成员变量,我用 System.setProperty 可以吧
dychenyi
2018 年 5 月 9 日
不懂 java。
c++的 apply ()里面肯定要有 return *this;这种写法就符合 lz 语法了。
zhazi
2018 年 5 月 9 日
笔试题?
DRcoding
2018 年 5 月 9 日
然而 java 10 的语法有何意义,就问贵司敢不敢在生产环境上 jdk10 吧,哈哈哈哈
Tiakon
2018 年 5 月 9 日
怎么感觉更像 scala
Cbdy
2018 年 5 月 9 日
@cout2013mr assert 是 Java1.4 加进来的特性
@darklowly 对的,闭包。题目条件是递次增强的,做出第三问,前两问的用例也能通过
@micean 很机智啊,也是一种方法😄
@dychenyi 我也不是很懂 C++,不过 C++似乎没有词法闭包
Cbdy
2018 年 5 月 9 日
@DRcoding 我只是测试用例用了 Java10 的语法,题目可以用任何版本 Java 语法做
yuyueMJ
2018 年 5 月 9 日
js 题?
yuchting
2018 年 5 月 9 日
@wenzhoou 正解
smdbh
2018 年 5 月 9 日
py 里有 yield,java 里不知道
scmod
2018 年 5 月 9 日
```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 不是没闭包么..
holmesabc
2018 年 5 月 9 日
国考 智力题吧
oswuhan
2018 年 5 月 9 日
6 楼是大佬,鉴定完毕。

https://hacpai.com/member/88250
alamaya
2018 年 5 月 9 日
@scmod java 有闭包,不过是残疾的那种,要求变量是 final or effective final
sonicthedgehog
2018 年 5 月 9 日
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;
}
}
已测试,通过
sonicthedgehog
2018 年 5 月 9 日
@sonicthedgehog 不过这不是惰性计算,难受
Terry05
2018 年 5 月 9 日
这年头要是找工作还让我做笔试,尤其是这种没事找事的题目,就给老子滚粗,爱招谁招谁去

应届生也许很会做这种题,招应届生去吧
wdlth
2018 年 5 月 9 日
这一定是 clojure 的阴谋
kiddult
2018 年 5 月 10 日
@Cbdy 版本上实际上还是限定了只能用 invokedynamic 来实现;内部匿名类不能用,底层会引入 final Field
Cbdy
2018 年 5 月 10 日
@kiddult 不需要 invokedynamic,我给出了参考答案,你可以在用早期 java 平台试试

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://study.congcong.us/t/453263

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX