• 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.快速排序和堆排序的区别?

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

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

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

    加油!

  • 相关阅读:
    软件测试
    python学习之路
    好用的在线画图工具processon
    spring-boot集成dubbo
    公众号开放,关注软件开发过程中的哪些坑
    crontab 中curl命令无法正常执行
    近一月翻阅资料小结
    nginx+tomat8负载后,利用redis实现tomcat8的session共享
    centos7 安装nginx
    centos 上安装redis 3.0.5
  • 原文地址:https://www.cnblogs.com/pengwang/p/2030139.html
Copyright © 2020-2023  润新知