写一个 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 ),满足第二问条件
1
vjnjc 2018-05-09 00:10:42 +08:00 via Android 1
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 2018-05-09 02:44:34 +08:00
|
8
shiyidi 2018-05-09 05:44:05 +08:00
|
9
shiyidi 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 2
完全通过测试 注:非完整代码
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{
|
21
micean 2018-05-09 09:00:30 +08:00
第三题
不用成员变量,我用 System.setProperty 可以吧 |
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 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,本质上只是少写了一些字
|