今天出了一个 Java 笔试题(语法题),有兴趣的同学来做做 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Cbdy
V2EX    Java

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

  •  
  •   Cbdy 2018-05-08 23:50:00 +08:00 7998 次点击
    这是一个创建于 2722 天前的主题,其中的信息可能已经有所发展或是发生改变。

    第一问

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


    答案

    46 条回复    2018-05-11 19:24:36 +08:00
    vjnjc
        1
    vjnjc  
       2018-05-09 00:10:42 +08:00 via Android   1
    Java 选手看不懂。。。这是 Java10 么?
    huhu3312
        2
    huhu3312  
       2018-05-09 00:12:34 +08:00
    看到 var 类型的类型推断,果断是 java10 没错了
    Citrus
        3
    Citrus  
       2018-05-09 01:01:28 +08:00 via iPhone
    没太懂,为啥是语法题?感觉这是数学题啊。。。
    Bryan0Z
        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)
    }

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

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

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

    应届生也许很会做这种题,招应届生去吧
    wdlth
        38
    wdlth  
       2018-05-09 22:16:42 +08:00
    这一定是 clojure 的阴谋
    kiddult
        39
    kiddult  
       2018-05-10 00:16:22 +08:00
    @Cbdy 版本上实际上还是限定了只能用 invokedynamic 来实现;内部匿名类不能用,底层会引入 final Field
    Cbdy
        40
    Cbdy  
    OP
       2018-05-10 01:53:21 +08:00
    @kiddult 不需要 invokedynamic,我给出了参考答案,你可以在用早期 java 平台试试
    unlimitedsola
        41
    unlimitedsola  
       2018-05-10 07:24:45 +08:00
    爱招谁招谁去+1
    CRVV
        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;
    ____}
    }
    hubin0203
        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 的哦==
    kiddult
        44
    kiddult  
       2018-05-10 19:56:05 +08:00
    @Cbdy 你答案也是用了内部匿名类,只不过变量 v 没有显式放到 Field 而已
    Cbdy
        45
    Cbdy  
    OP
       2018-05-11 10:47:03 +08:00 via Android
    @kiddult 对呀
    kiddult
        46
    kiddult  
       2018-05-11 19:24:36 +08:00
    @Cbdy 内部匿名类在实现的时候,是吧局部变量当构造器的参数传进去了,然后在里面维护了一套 Field,本质上只是少写了一些字
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2883 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 13:47 PVG 21:47 LAX 06:47 JFK 09:47
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86