美文网首页
Java面试题(难度递增)

Java面试题(难度递增)

作者: Binary_r | 来源:发表于2021-08-04 13:37 被阅读0次

    1星:Java的基本数据类型有哪些
    boolean,char,byte,short,int,long,float,double

    1星:==和equals的区别
    引用地址比较和对象内容比较

    1星:String类型在Java中是不可变的
    不可变对象可以提高String Pool(字符串常量池)的效率和安全性

    1星:HashMap 和 Hashtable 有什么区别?
    一. HashMap可以接受null键和值,HashTable不行
    二. HashTable是线程安全的,通过synchronized来保证,而HashMap线程不安全
    三. HashMap的迭代器是fail-fast迭代器,而HashTable的enumerator迭代器不是fail-fast.

    2星:在程序开发中,异常的处理方式

    2星:值传递和引用传递
    值传递是对基本型变量而言的,传递的是该变量的一个副本,改变副本不影响原变量.
    引用传递一般是对于对象型变量而言的,传递的是该对象地址的一个副本, 并不是原对象本身 。 所以对引用对象进行操作会同时改变原对象.

    2星:深拷贝和浅拷贝的区别是什么?
    浅拷贝:被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象。换言之,浅拷贝仅仅复制所考虑的对象,而不复制它所引用的对象。
    深拷贝:被复制对象的所有变量都含有与原来的对象相同的值,而那些引用其他对象的变量将指向被复制过的新对象,而不再是原有的那些被引用的对象。换言之,深拷贝把要复制的对象所引用的对象都复制了一遍。

    3星:当一个线程调用了cancel方法时,内部如何处理的
    调用calcel方法,传入true会中断线程停止任务,传入false则会让线程正常执行至完成
    1:主线程调用子线程的cancel方法时,会在子线程内部设置中断标志位置为true
    2:当子线程此时为运行状态,则不会对此线程产生任何影响
    3:当子线程从等待状态进入到运行状态时,会判断当前线程的中断标志是否为true
    4:结束任务的正常运行状态,并抛出InterruptedException

    3星:如果你提交任务时,线程池队列已满。会时发会生什么?
    如果你使用的LinkedBlockingQueue,也就是无界队列的话,没关系,继续添加任务到阻塞队列中等待执行,因为LinkedBlockingQueue可以近乎认为是一个无穷大的队列,可以无限存放任务;
    如果你使用的是有界队列比方说ArrayBlockingQueue的话,任务首先会被添加到ArrayBlockingQueue中,ArrayBlockingQueue满了,则会使用拒绝策略RejectedExecutionHandler处理满了的任务,默认是AbortPolicy。

    3星:Java的内存划分
    寄存器:记录正在执行的JVM指令的地址
    本地方法栈:保存native方法进入区域的地址
    方法区:method(方法区)又叫静态区,存放所有的①类(class),②静态变量(static变量),③静态方法,④常量和⑤成员方法
    堆内存:类的对象放在heap中
    栈内存:对象的引用存放在堆内存中

    3星:Java的垃圾回收算法有哪些
    引用计数法
    可达性分析算法
    标记-清除算法
    分代收集算法

    4星:请简述可达性分析算法和垃圾回收过程
    GCRoots的对象做为起点,从起点开始向下搜索,搜索的走过路径叫引用链,当一个对象到GCRoots没有引用链时,判断对象死亡。
    在jvm中,做为GCRoots的对象:
    虚拟机栈(栈桢中的本地变量表)中的引用的对象
    方法区中的类静态属性引用的对象
    方法区中的常量引用的对象
    本地方法栈中JNI的引用的对象
    当一个对象进入到垃圾回收过程时,会调用对象的finalize方法

    相关文章

      网友评论

          本文标题:Java面试题(难度递增)

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