补补基础——小小考题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_41622183/article/details/81434208

前言:

       这段算是比较痛苦的回忆了。那时候学java真的是意气风发了,盘里存了10个G视频java基础视频,居然都看完了。同时花费大量的时间在看视频,视频总的来说是入门,教你怎么使用却缺少原理(这些是稳扎稳打的基础呀,视频没教的)。可笑当时还很自信,直到参加了那个考试,100份的选择填空,仅仅只拿了11.67份(选择题5分一题)。

                                                     

下面是整理出的之前做的题目。

                      附:个人理解解析

         第一题:

package com.wen.demo.test.MyClass;

class Study {
    static String s = "";

    protected Study() {
        s += "study";
    }
}
class GoodStudy extends Study {
    private GoodStudy(){
        s += "good";
    }
}
public class GoodGoodStudy extends Study{

    private GoodGoodStudy() {
        s+="goodgood";
    }

    public static void main(String[] args) {
        new GoodGoodStudy();
        //试问输出结果是什么
        System.out.println(s);
    }
}

          答案:    study goodgood

          解析:这一题考的东西不多,但是考的却很细,主要考类的加载,也有虚拟机的双亲委派模型,还考了一些主动使用,总体来说很考验基础。这题不多说,如果不懂的请看之前写的两篇博客类的加载(一)类的加载(二)

      第二题:

package com.wen.demo.test.MyClass;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Test {

    public static void main(String[] args) {
        List<String > list = new ArrayList<>();
        list.add("zZzZ");
        list.add("ZzZ");
        list.add("zZz");
        list.add("ZZzz");
        // /排序
        Collections.sort(list);
        for (String s :list){
            System.out.print(s+" ");
        }
    }

}

         答案:ZZzz  ZzZ  zZz  zZzZ 

            解析:这一题就是考排序了,怎么排序呢?可以看看Collections.sort(str)的源码。里面是将集合转成Object[]后,使用数组的排序,也就是Array.sort()这个排序。这里的排序,主要是字符串的排序,而字符串中是将该字符串的首字母转换成ASCII后进行比较。例如:ZZzz字符串,获取首字母Z,对应的ASCII十进制是90,小z的ASCII十进制是122,如果相同则第二个字母进行大小对比。直至排出顺序。

      第三题:

package com.wen.demo.test.MyClass;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Test {

    public static void main(String[] args) {
        String a= null;
        //这个方法我真的没用过,原谅我基础太弱
        a.concat("abc");
        a.concat("def");
        System.out.println(a);

         /**
         * 例如:
         * String a=null
         *  a.concat(null);
         *  上述两个都不允许,会报异常
         */


    }

}

      答案是:空指针异常

        解析:concat()方法是用于拼接字符串。在在字符串的末尾拼接。他合+号类似的拼接,主要区别如下:

              (1)+和cancat()都可以用作拼接,cancat()只能接收字符串进行拼接,+也可以接收其他类型

              (2)+左右都可以为空,但是cancat()会报异常,如上例子

              (3)如果拼接空字符串,concat会稍快,在速度上两者可以忽略不计,如果拼接更多字符串建议用StringBuilder。

            (4)从字节码来看+号编译后就是使用了StringBuiler来拼接,所以一行+++的语句就会创建一个StringBuilder,多条+++语句就会创建多个,所以为什么建议用StringBuilder的原因。

       第四题:这题很好玩,请看清楚

package com.wen.demo.test.MyClass;



public class Test  {
    public static void main(String[] args) {
        int i=2;
        if(3=++i){
            System.out.println("cool");
        }else{
            System.out.println("cool java");
        }
    }
}

        下面给4个答案:

  1. A  编译失败

  2. B  cool

  3. C  java

  4. D  cool java

            答案是A,为什么请仔细看题,别问我为什么?因为这是个坑,半年前我就死在不细心上。

    第五题:

下面哪些语句会产生编译错误?
A   ​Object[] scores = {new Integer(3), 5.5, "7" + 6};
​
B   int[][] scores = {2, 7, 6}, {9, 3, 45};
​
C   String cats[] = {"Fluffy", "Spot", "Zeus"};
​
D   boolean results[] = new boolean[3] {true, false, true};
​
E   Integer results[] = {new Integer(3), new Integer(5), 8};
​
F   String[] dogs = new String[] {new String("Fido"), new String("Spike"), "Aiko"};

          答案:BD

          这个就是语法问题了,唉,这个编译器用多了,拿到卷子上。。。分分钟出事,手写代码也是一门基本功呀,即考了单词,还考语法。服气。

     第六题:


public class JavaFX  {
    public static void main(String[] args) {

        String s1 =new String("a")+"bc";
        String s2 ="ab"+ new String("c");
        System.out.println(s1==s2);
        System.out.println(s1.equals(s2));
        System.out.println(s1=="abc");
        System.out.println(s1.intern()=="abc");
        System.out.println(s1.intern()==s2.intern());
    }
}

           答案:false  true  false  true true

           解析:new String()是在堆区创建的内存区域,地址是不同的。所以s1是不等于s2的。

           equals()方法比较的是字符串的内容,内容是一致的

           “abc”是常量了,在常量池中,s1是在堆中的。

          intern()方法设计出来就是为了重复利用,其实,就是将我们new出来在堆区域中的字符串在调用Intern()后放到常量池中。

如果常量池中有了这个字符串,那么会返回这个常量的引用。所以,返回true         

          最后一个,和上面一样理解。

总结:

          唉,对于基础薄弱是太多的无奈,其实综合很多面试题,很大一部分都是基础,只是基础到不能在基础,也就是太基础了,我们往往会忽略,最终导致面试的失败。过度依赖编译器也是一个痛点,终于明白为什么以前老师不让我们用编译器了,用记事本来写,这 都是基础呀。很遗憾错过了,现在只能一点点的啃,补充自己的基本功。上面的题,是我之前参加一个java基础竞赛的赛前题目,深刻的了解到不足,但是我却在半年后才开始补自己的基础,也是一个很遗憾的事。希望大家掌握基础,然后走的更远。祝大家学习进步,事业有成。

程序人生,与君共勉~!

猜你喜欢

转载自blog.csdn.net/weixin_41622183/article/details/81434208
今日推荐