• Java面试-常见基础笔试题目


    1. Vector, ArrayList, LinkedList的区别

      Vector:①长度可变,以类似数组的形式存储于内存中,线程安全(同步),因为其大部分方法都有synchronized 关键字,正因为是同步的,所以进行频繁的数据操作时,必然会导致性能的下降。

          ②当增加的元素长度超过Vector 长度时,增加原来一倍的长度。

          ③如果是单线程应用,推荐使用ArrayList 来代替Vector 效率更高。

          ④如果是多线程应用,可以使用Vector 来代替ArrayList 实现同等功能,且能保证数据一致性。

      ArrayList:①长度可变,以类似数组的形式存储于内存中,线程不安全(异步),正因为是异步的,所以在多线程环境下使用是其常用方法是不安全的,如果一定要在多线程环境下使用,应该使用Colletions类中的静态方法synchronizedList() 对ArrayList 进行操作。例如:

    List list = Collections.synchronizedList(new ArrayList<>());

           ②当增加的元素长度超过ArrayList 长度时,增加原来50% 的长度。

           

      LinkedList:①以双向链表存储于内存中,线程不安全(异步),正因为是异步的,如果在多线程环境下使用它,用Colletions类中的静态方法synchronizedList() 对 LinkedList进行操作。例如:

    List list = Collections.synchronizedList(new LinkedList(...));

             ②因为是双向链表,LinkList 可以很方便在链表头或者链表尾插入数据,或者在指定结点前后插入数据,所以LinkList 的插入效率高于ArrayList ,但也因为是双向链表,所以查询效率低于ArrayList。

    2. static块,构造块,构造函数的执行顺序

      查看案例

    3. 重写override 跟重载overload 的区别

      重写是在子类中完全覆盖父类的方法,且方法返回值、方法名、方法参数、方法参数类型跟父类的完全一样,子类抛出的异常应该等于或者少于基类

      重载是类的内部可以允许有两个同名字的方法,但方法的参数个数或者参数类型不一样,即可称之为重载。例如:

    ①:

    void func1(int a, int b)
    void func1(int a, float b)

    ②:

    void func1(int a, int b)
    int func1(int a, int b)

    以上两种情况可以称之为重载,但下面这种情况不可以称为重载,且写法是错误的,例如:

    int  getCount(int a , int b)
    void  getCount(int a, int b)

    调用时,两个参数传进去,但是返回的是int 呢?还是void 呢?所以这种写法是不存在的,即使写了编译器也无法通过。

    4. String,StringBuilder,StringBuffer三者的区别

    ①运行速度:StringBuilder > StringBuffer > String

      因为String 一创建就是字符串常量, 而其他两者为字符串变量

    ②StringBuilder是线程不安全的,而StringBuffer,String是线程安全的

      查看详细解释

    5. synchronized的用法与区别

    ①作用于类的普通方法跟代码块,作用一样,取得的锁是对象。

    ②作用于类的静态方法,取得的锁是类,所以即使多线程操作的对象不一样,但方法是静态的,所以还是同步的

    ③作用于类,取得的锁是类,跟②是一样的。

      查看详细解释

    6. 单例模式的任意一种写法

    class Singleton {
    
        private final static Singleton INSTANCE = new Singleton();
    
        public static Singleton getInstance(){
            return INSTANCE;
        }
    }

    单例模式的8种写法参考

     7.考Java重载方法,典型的是重载方法参数优先级

    public class Test{
        
        //
        public void myMethod(Object obj) {
            System.out.println("My Object");
        }
        
        //
        public void myMethod(String str) {
            System.out.println("My String");
        }
        
        public static void main(String args[]) {
            Test t=new Test();
            t.myMethod(null);
            
        }
        
    }

      结果是输出“My String”,重载方法参数个数一样时,会自动找参数类型匹配的最接近的接口类型或者父类类型。对于这道题,null对象虽然是没有实际分配空间的,但是它也是个对象,所以优先匹配到String类型参数的方法,如果注释掉②处的代码,那么就匹配到Object 类型的代码,因为所有对象基于Object。

      总结:形参会从继承关系中从下往上开始搜索,越接近上层的优先级越低

      

  • 相关阅读:
    python mock知识02
    python+selenium实现web自动化
    接口幂等性
    Nacicat for Oracle 绿色版 亲测可用
    isinstance、流程控制(单项、双项、多项、巢状)
    算数运算符、比较运算符、赋值运算符、成员运算符、身份运算符、逻辑运算符、位运算符
    集合、字典、哈希算法、变量的缓存机制、小数据池、强制类型转换
    变量、编码知识、数据类型、字符串格式化
    Python基础(电脑基础知识、原码补码及反码)
    函数操作
  • 原文地址:https://www.cnblogs.com/convict/p/9938566.html
Copyright © 2020-2023  润新知