Cbdy
V2EX  ›  Java

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

  •  
  •   Cbdy · May 8, 2018 · 9059 views
    This topic created in 3101 days ago, the information mentioned may be changed or developed.

    第一问

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


    答案

    46 replies  •  2018-05-11 19:24:36 +08:00
    vjnjc
    vjnjc
    May 9, 2018 via Android❤️1
    1
    Java 选手看不懂。。。这是 Java10 么?
    huhu3312
    huhu3312
    May 9, 2018
    2
    看到 var 类型的类型推断,果断是 java10 没错了
    Citrus
    Citrus
    May 9, 2018 via iPhone
    3
    没太懂,为啥是语法题?感觉这是数学题啊。。。
    Bryan0Z
    Bryan0Z
    May 9, 2018 via Android
    4
    第一个简单

    private int value;

    public F(int i){
    this.value = i;
    }

    public F apply(int i){
    return new F(i^2+value)
    }

    手机码字,就不发全了
    glacer
    glacer
    May 9, 2018 via iPhone
    5
    如果使用 Java 成员的话,不是很懂第一问和第二问在实现上有什么区别。。
    不使用类成员的话,用内部类实现闭包?
    88250
    88250
    May 9, 2018
    6
    Bryan0Z
    Bryan0Z
    May 9, 2018 via Android
    7
    @88250 中间插了个链接为啥不报错
    ayanamist
    ayanamist
    May 9, 2018 via Android
    10
    这和语法有啥关系,明明是打着编程笔试题的智力小测验。在国内最大的 java workshop 表示要是有团队出这种题,你们还是别去了,去了估摸着也要去猜产品的心思。
    hsuan
    hsuan
    May 9, 2018 via Android
    11
    第一问和第二问难道不是一样的吗
    lihongming
    lihongming
    May 9, 2018 via Android
    12
    Java 已经过了炫技的时代了
    Cbdy
    Cbdy
    OP
    May 9, 2018
    13
    @glacer @hsuan 第二问比第一问条件更强一点,第一问每个类的实例保持一个状态,第二问每次调用 apply 产生一次新的状态。能通过第一问测试的用例不一定能通过第二问。这两问都是为第三问做铺垫

    @ayanamist 考 Java 闭包的语法,怎么变智力小测验了呢?链式调用求平方和谁都能看出来吧
    cout2013mr
    cout2013mr
    May 9, 2018 via Android
    14
    看来我是第一个不认识断言关键字的
    sagaxu
    sagaxu
    May 9, 2018 via Android
    15
    考语法跟考打字速度效果差不多
    wenzhoou
    wenzhoou
    May 9, 2018 via Android❤️2
    16
    完全通过测试 注:非完整代码
    if ( i= 1 ) return 1;
    if ( i= 2 ) return 5;
    if ( i= 3 ) return 14;
    好了。
    wenzhoou
    wenzhoou
    May 9, 2018 via Android
    17
    别批判我。我是来搞个笑的。
    darklowly
    darklowly
    May 9, 2018
    18
    其实一个闭包可以搞定全部
    另外算法是 平方和
    moximo
    moximo
    May 9, 2018
    19
    class f{
    88250
    88250
    May 9, 2018
    20
    @Bryan0Z label
    micean
    micean
    May 9, 2018
    21
    第三题
    不用成员变量,我用 System.setProperty 可以吧
    dychenyi
    dychenyi
    May 9, 2018
    22
    不懂 java。
    c++的 apply ()里面肯定要有 return *this;这种写法就符合 lz 语法了。
    zhazi
    zhazi
    May 9, 2018 via Android
    23
    笔试题?
    DRcoding
    DRcoding
    May 9, 2018
    24
    然而 java 10 的语法有何意义,就问贵司敢不敢在生产环境上 jdk10 吧,哈哈哈哈
    Tiakon
    Tiakon
    May 9, 2018
    25
    怎么感觉更像 scala
    Cbdy
    Cbdy
    OP
    May 9, 2018
    26
    @cout2013mr assert 是 Java1.4 加进来的特性
    @darklowly 对的,闭包。题目条件是递次增强的,做出第三问,前两问的用例也能通过
    @micean 很机智啊,也是一种方法😄
    @dychenyi 我也不是很懂 C++,不过 C++似乎没有词法闭包
    Cbdy
    Cbdy
    OP
    May 9, 2018
    27
    @DRcoding 我只是测试用例用了 Java10 的语法,题目可以用任何版本 Java 语法做
    yuyueMJ
    yuyueMJ
    May 9, 2018 via iPhone
    28
    js 题?
    yuchting
    yuchting
    May 9, 2018
    29
    @wenzhoou 正解
    smdbh
    smdbh
    May 9, 2018
    30
    py 里有 yield,java 里不知道
    scmod
    scmod
    May 9, 2018
    31
    ```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
    holmesabc
    May 9, 2018
    32
    国考 智力题吧
    oswuhan
    oswuhan
    May 9, 2018
    33
    6 楼是大佬,鉴定完毕。

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

    应届生也许很会做这种题,招应届生去吧
    wdlth
    wdlth
    May 9, 2018
    38
    这一定是 clojure 的阴谋
    kiddult
    kiddult
    May 10, 2018
    39
    @Cbdy 版本上实际上还是限定了只能用 invokedynamic 来实现;内部匿名类不能用,底层会引入 final Field
    Cbdy
    Cbdy
    OP
    May 10, 2018
    40
    @kiddult 不需要 invokedynamic,我给出了参考答案,你可以在用早期 java 平台试试
    unlimitedsola
    unlimitedsola
    May 10, 2018
    41
    爱招谁招谁去+1
    CRVV
    CRVV
    May 10, 2018
    42
    真看不出来是求平方和

    满足 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;
    ____}
    }
    hubin0203
    hubin0203
    May 10, 2018
    43
    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 的哦==
    kiddult
    kiddult
    May 10, 2018
    44
    @Cbdy 你答案也是用了内部匿名类,只不过变量 v 没有显式放到 Field 而已
    Cbdy
    Cbdy
    OP
    May 11, 2018 via Android
    45
    @kiddult 对呀😄
    kiddult
    kiddult
    May 11, 2018
    46
    @Cbdy 内部匿名类在实现的时候,是吧局部变量当构造器的参数传进去了,然后在里面维护了一套 Field,本质上只是少写了一些字
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   3105 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 95ms · UTC 04:37 · PVG 12:37 · LAX 20:37 · JFK 23:37
    ♥ Do have faith in what you're doing.