美文网首页
java基础面试题1

java基础面试题1

作者: 重新崛起 | 来源:发表于2018-08-08 22:48 被阅读0次

    1,hashMap与hashTable区别

        使用Entry数组来实现hash表

        hashTable是线程安全的,hashMap不是,但是hashTable已基本废弃,如果要使用同步的话可以使用concurrenthashmap或者使用其他方法,这里可以深入探究;

        hashMap支持null键和null值

    2,JVM启动过程

    一:JVM装入环境,JVM提供的方式是操作系统的动态连接文件.

    二:装载JVM.dll

    三:初始化JVM,获得本地调用接口

    四:运行Java程序

    这方面需要加深理解

    3,怎么避免死锁

    1,加锁顺序

    2,加锁限时

    3,死锁检测

    4,synchronized同步方法和同步代码块的区别

    同步代码块获取一个对象的监视器,更加灵活;

    同步方法相当于在获取this这个对象的监视器;

    非静态的同步方法是锁定类的实例,静态的同步方法是锁定类的。


    5,java new 一个对象的的过程

    分配内存空间;

    初始化对象置为0;

    设置必要的对象信息(对象头中的一些信息);

     Java程序执行init进行初始化赋值。

    6,如何判断一个单向链表是不是循环链表(不能更改链表的状态)

    用两个指针,一个指针一次跳一步,另一个指针一次跳两步,如果它们能相遇,说明存在环。

    如何将一个单向链表反转?

    8,排序算法代码实现过程

    9,sleep(),wait(),notify(),notifyAll()

    sleep()不会释放对象锁,wait()会释放对象锁。

    notify()唤醒wait()阻塞住的线程,但并不立即释放对象锁,需要等synchronized代码块执行完或者wait()方法调用来释放对象锁。

    notifyAll()唤醒所有等待的线程。

    10,StringBuffer和StringBuilder的区别

    12,如何书写一个单例模式

    public class Singleton4 {//我们通过volatile声明变量来禁止指令重排序

        private Singleton4(){}

        private static volatile Singleton4 single;

        public static Singleton4 getInstance(){

            if(single==null){

            synchronized (Singleton4.class) {

            if(single==null)

            single=new Singleton4();

            }

        }

            return single;

        }

    }

    13,ArrayList和LinkedList比较以及适用于什么场景

    ArrayList查询更快,LinkedList插入删除更快。

    原因:ArrayList是基于索引的数据结构,插入删除需要更新索引,更改数组大小等,尽量给定合适的初始大小,

    14,equals()和hashcode()的关系。

           equals()方法未重写的话,比较的是两个对象地址是否相等,即是否是同一个对象,和==效果一样。

            一般我们覆盖equals()方法,来比较两个对象的内容是否相等。

            hashCode(),获取对象hash码,确定对象在散列表中的存储位置,散列表包括hashMap,hashTable,hashSet.

            hashCode()只有在对象需要存储在散列表中才起作用。

            如果对象不存储在散列表的数据结构中,equals()和hashcode()没有任何关系,

            如果需要存储在散列表的数据结构中,重写equals方法,一定也要重写hashcode方法。

    原因:在散列表中,hashcode相同的两个对象,equals不一定相同

                                    equals相同,hashcode一定要相同

    hashcode相同是equals相同的必要条件,那么在散列表添加的时候先判断一下hashcode是否相同,如果hashcode不相同,equals即使相同也不起作用,例如hashSet中可能存在重复元素。

            当equals方法被重写时,通常有必要重写 hashCode 方法,以维护 hashCode 方法的常规协定,该协定声明相等对象必须具有相等的哈希码。

    15,哪些Java集合不允许具有重复元素

    Set < E > 是一个不包含重复元素的 collection。更确切地讲,set 不包含满足 e1.equals(e2) 的元素对 e1 和 e2,并且最多包含一个 null 元素。

    16,字符串常量池,运行时常量池,class文件常量池,intern()方法,它们之间的关系

            直接使用双引号声明出来的String对象会直接存储在字符串常量池中.

    API中描述如下:

    public String intern()

            返回字符串对象的规范化表示形式。

            一个初始为空的字符串池,它由类 String 私有地维护。

            当调用 intern 方法时,如果池已经包含一个等于此 String 对象的字符串(用 equals(Object) 方法确定),则返回池中的字符串。否则,将此 String 对象添加到池中,并返回此 String 对象的引用。

            它遵循以下规则:对于任意两个字符串 s 和 t,当且仅当 s.equals(t) 为 true 时,s.intern() == t.intern() 才为 true。

            所有字面值字符串和字符串赋值常量表达式都使用 intern 方法进行操作。字符串字面值在 Java Language Specification 的 §3.10.5 定义。

    返回:

            一个字符串,内容与此字符串相同,但一定取自具有唯一字符串的池。

    注意:jdk7 以后字符常量池不在Perm区域了,这块做了调整。字符串常量池中不需要再存储一份对象了,可以直接存储堆中的引用。


    18,java异常分类,RuntimeException和Exception关系


    runtimeException(运行时异常):是未检查异常,程序员的错,不需要try..catch...或者throws处理。

    19,final关键字的作用及用法

            修饰类:该类不能被继承

            修饰方法:明确禁止该方法在子类中被覆盖

            修饰变量:对于一个final变量,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改;如果是引用类型的变量,则在对其初始化之后便不能再让其指向另一个对象。

    20,静态代码块,构造代码块,构造函数。

    静态代码块在类加载时被执行,只执行一次;构造代码块依托构造函数,但先于构造函数执行。

    单个类时:静态代码块>构造代码块>构造函数

     父子类使用时:1,new一个父类对象(代码在子类中执行,会加载子类),父类静态代码块,子类静态代码块,父类构造代码块,父类构造函数

                            2,new一个子类对象,父类静态代码块,子类静态代码块,父类构造代码块,父类构造函数,子类构造代码块,子类构造函数。

                        3,new一个父类对象,接着new一个子类对象。父类静态代码块,子类静态代码块,父类构造代码块,父类构造函数,父类构造代码块,父类构造函数,子类构造代码块,子类构造函数

    相关文章

      网友评论

          本文标题:java基础面试题1

          本文链接:https://www.haomeiwen.com/subject/ekwxbftx.html