线上面试之我用AI做面试题导致没过

作者在面试中遇到多线程问题,试图利用AI智能问答快速作答,但发现AI对部分代码理解有误,强调编程面试中仍需个人扎实基础。
摘要由CSDN通过智能技术生成

事情的经过是我在Boss上面接到一个线上面试,问我会不会多线程,我肯定回答会啊,然后Hr呢发了几道题要我十分钟做完,我想都没想就答应了。当他把提发来,我躺在床上打开了AI智能问答,不到两分钟就给出答案,心想,这下稳了。后面告诉我三道错了错了两个地方,本次就不面试了。。。。。。,我心里一万个草泥马在奔腾,于是我仔细看了题目,确实是错了,看下具体情况。

具体题目入下

第一题(Ai回答错)

package com.jpa.service;

/**
 * @Author: zqf
 * @Date: 2024/03/22/9:56
 * @Description:
 */
public class Test {

    static class A {
        public void method() {
            System.out.println("A");
        }
    }

    static class B extends A {
        public void method() {
            System.out.println("B");

        }
    }

    public static void main(String[] args) {
        A a = new A();
        B b = new B();
        ((A) b).method();
    }
}

AI回答
在这里插入图片描述

正确解读
在A类中,method方法打印出"A";在B类中,method方法打印出"B"。由于B类继承自A类,并且重写了method方法,所以当调用((A) b).method()时,实际上调用的是B类中的method方法,输出结果为"B"

第二题

public class Test2 {

    // 这个方法没有实现交换a和b的值
   static void exchange(int a, int b) {
        int temp = a;
        a = b;
        b = temp;
    }

    public static void main(String[] args) {
        int a = 1;
        int b = 2;
        Test2 t = new Test2();
        t.exchange(a, b);
        System.out.println(a);
    }
}

AI回答(正确)
在这里插入图片描述解析
这段代码中的exchange方法没有实现交换a和b的值的功能。在Java中,方法参数传递的是值的副本,而不是变量本身。所以在exchange方法中交换a和b的值并不会影响到main方法中的a和b的值。
虽然引用传递中传递的是对象的引用,但并不意味着可以修改对象的引用本身。也就是说,在方法内部将形参指向一个新的对象,并不会改变原始对象的引用。

第三题(Ai回答有错误)




package com.jpa.service;

public class Test {
    static String str1 = "Hello";
    static String str2 = new String("Hello");
    static String str3 = "Hello";
    static String str4 = new String(str3);

    public static void main(String[] args) {
        System.out.println(str1 == str2);

        System.out.println(str1 == str3);

        System.out.println(str2 == "Hello");

        System.out.println(str3 == str4);
    }

AI回答
在这里插入图片描述
在这里插入图片描述

解析

实际执行结果:
在这里插入图片描述
如果是采用双引号引起来的字符串常量,首先会到常量池中去查找,如果存在就不再分配,如果不存在就分配,常量池中的数据是在编译期赋值的,也就是生成 class 文件时就把它放到常量池里了,所以 str1和 str3都指向常量池中的同一个字符串“Hello”。
关于 str2,str2采用的是 new 的方式,在 new 的时候存在双引号,所以他会到常量区中查找“Hello”,而常量区中存在“Hello”,所以常量区中将不再放置字符串,而 new 关键子会在堆中分配内存,所以在堆中会创建一个对象 Hello,str2会指向 Hello。
如果比较 str1 和 str2 的值必须采用 equals,String 已经对 eqauls 方法进行了覆盖。

经典面试题

String s1 = new String(“hello”) ;
String s2 = new String(“hello”) ;
以上代码创建了几个对象?
分析:
在这里插入图片描述

通过以上分析,大家会看到创建了 3 个对象,堆区中 2 个,常量池中 1 一个
通过以上分析,使用 String 时,不建议使用 new 关键字,因为使用 new 会创建两个对象
记住:堆区中是运行期分配的,常量池中是编译器分配的。

总结

AI在代码分析时,还是存在一定的不确定性,需要经过漫长的深度学习和训练,我们在编码时还不能完全依赖Ai给出的答案,只能作为参考,本次面试就是自己偷懒导致的后果,不过在学习AI的路上,还任重而道远。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值