zoukankan      html  css  js  c++  java
  • Java面试归来。。囧

      昨天TX面试Java方向,自己感觉悲剧了。。。好多问题没有回答出来。不过也难怪,自己对Java了解的太不深入了,这次正好给自己上了一课。下面的是一些我不知道的问题,不能在同一个地方摔倒第二次了!

    1.JVM如何加载一个class?

      面试官一问到我这个问题我就傻了,学习Java前后才不长时间,哪接触过这么深入的问题!

         Java中类的加载是通过ClassLoader实现的,它的目的是动态加载Java类和Resource。Class文件由编辑器生成,可以被任何一种JVM加载。

      JVM使用类加载器加载类文件,并创建Class 对象,类加载器都是ClassLoader的子类实例。ClassLoader子类需要重载loadClass方法以实现用户自己的类加载方式。ClassLoader 其实就是读取文件,按照CLASSPATH配置的顺序。然后解析后转化为类。

      loadClass方法中使用findLoadedClass方法检查类是否已经被加载,如果返回为null,则表示还没有被加载,于是在其Parent类加载器重寻找_parent.loadClass;如果仍然返回null,则要在系统中查找,findSystemClass;如果仍然没有,则抛出异常。也就是逐级检查是否加载。

    2.ArrayList与LinkedList的区别?

    这个问题让我囧了很久。。。就是最简单的数组与链表的区别嘛!当时我没有反应过来,加上自己没有多少底气,就没说出来!唉,告诫自己要多加学习啊!

    Java中ArrayList和LinkedList都是继承自List类的,前者是数组,后者是链表。

    ArrayList是动态的增长数组,适合总长度未知情况下使用;LinkedList优点在于可以方便插入删除操作,且提供额外的get,remove,insert方法在LinkedList的首部或尾部。

    3.快速排序和堆排序的区别?

    这个我能说出各自的排序过程,但是不知道总结二者有什么区别。。。。

    只能说快排每次是最高效地选择范围,而堆排序是每次肯定不是在正确的范围选择,因为每次都得进行堆调整。

    还有一些问题下次再列出来。

    加油!

  • 相关阅读:
    查看dll定义的宏
    循环调用dll库的界面时,首次正常,再次无响应
    strftime使用%F格式化日期失败
    自己程序生成的二维码部分手机无法识别
    Drools规则
    idea快捷键
    风控文档笔记
    工作笔记
    工具方法
    BIO,NIO,AIO
  • 原文地址:https://www.cnblogs.com/pengwang/p/2030139.html
Copyright © 2011-2022 走看看