Java基础面试题.pdf

所需积分/C币:50 2019-11-18 13:40:55 991KB PDF
7
收藏 收藏
举报

java基础面试题
Hotspot采用了惰性评估( Lazy Evaluation)的做法,根据二八定律,消耗大部分 系统资源的只有那·小部分的代码(热点代码),而这也就是川所需要编译 的部分。JM会根据代码每次被执行的情况收集信息并相应地做出一些优化, 因此执行的次数越多,它的速度就越快。JDK9引入了一种新的编译模式 AoT( Ahead of Time Compilation),它是直接将宇节码编译成机器码,这样就 避免了丌预热等各方面的开销。JDK支持分层编译和AOT协作使用。但是, AOτ编译器的编译质量是肯定比不上川编译器的 总结:Java虚拟机(丿M)是运行Java字节码的虚拟机。丿M有针对不同系 统的特定实现( Windows, Linux, macOS),日的是使用相冋的宇节码,它们 都会给出相同的结果。字节码和不同系统的JM实现是Java语言一次编 译,随处可以运行”的关键所在 JDK 和 JRE DK是 Java Development Kit,它是功能齐全的 Java sDK。它拥有JRE所拥们 的一切,还有编译器( Javac)和工具(如 javadoc和jdb)。它能够创建和编 译程序。 RE是Java运行时环境。它是运行编译Java程序所需的所有内容的集合 包括Java虚拟机(JVM),Java类库,java命令和其他的一些基础构件。但 是,它不能用于创建新程序 如果你只是为了运行一下Java程序的话,那么你只需要安装JRE就可以了 如果你需要进行一些Java编程方面的工作,那么你就需要文装JDK了。但 是,这不是绝对的。有时,即使您不打算在计算机上进行任何Java开发,仍然 需要安装JK。例如,如果要使用JSP部署Web应用程序,那么从技术上讲, 您只是在应用程序服务器中运行Java程序。那你为什么需要JK呢?因为应用 程序服务器会将JSP转换为 Java servlet,并且需要使用JK来编译 servlet。 4 Oracle DK和 OpenJDK的对比 可能在看这个问题之前很多人和我一样并没有接触和使用过 OpenJDK。那么 Oracle和 OpenJDK之间是否存在重大差异?下面通过我通过我收集到一些资 料对你解答这个被很多人忽视的问题。 对于Java7,没什么关键的地方。 OpenJDK项目主要基于Sun捐赠的 Hotspot 源代码。此外, OpenJDK被选为Java7的参考实现,由 Oracle工程师维护。 关于ⅣM,JDK,JRE和 OpenJDK之间的区别, Oracle博客帖子在2012年有 个更详细的答案: 问: OpenJDK存储库中的源代码与用于构建 Oracle jDK的代码之间有什么区 别 答:非常接近-我们的 Oracle DK版本构建过程基于 OpenJDK7构建,只添 加了儿个部分,例如部署代码,其中包括 Oracle的Java插件和」 ava Web start 的实现,以及一些封闭的源代码派对组件,如图形光栅化器,一些开源的第三 方组件,如 Rhino,以及一些零碎的东西,如附加文档或第三方字体。展望未 来,我们的目的是开源 Oracle jDK的所有部分,除了我们考虑商业功能的部 分 总结: Oracle jDK版本将每三年发布一次,而 OpenJDK版本每三个月发布 次 2. OpenJDK是一个参考模型并且是完全廾源的,而 Oracle」DK是 OpenJDK的一个实现,并不是完全开源的; 3. Oracle jDK比 OpenJDK更稳定。 OpenJDK和 Oracle jDK的代码几乎 相同,但 Oracle jDK有更多的类和一些错误修复。因此,如果您想开发 企业/商业软件,我建议您选择 Oracle」DK,因为它经过了彻底的测试和 稳定。某些情况下,有些人提到在使用 OpenJDK可能会遇到了许多应 用程序崩溃的问题,但是,只需切换到 racle」DK就可以解决问题 4.顶级公司正在使用 Oracle jDK,例如 Android studio, Minecraft和 Intel idea开发工具,其中 Open JDK不太受欢迎; 5.在响应性和MM性能方面, Oracle jDK与 OpenJDK相比提供了更好的 性能 6. Oracle jDK不会为即将发布的版本提供长期支持,用户每次都必须通过 更浙到最新版本获得支持来获取最新版本 7. Oracle jDK根据二进制代码许可协议获得许可,而 OpenJDK根据GPL V2许可获得许可。 5.Java和C++的区别 我知道很多人没学过C++,但是面试官就是没事喜欢拿咱们Java和C++比 呀!没办法!!!就算没学过C++,也要记下米! 都是面向对象的语言,都支持封装、继承和多态 Java不提供指针来直接访问内存,程序内存更加安全 Java的类是单继承的,C++艾持多重继承;虽然Java的类不可以多 继承,但是接口可以多继承。 Java有自动内存管理机制,不需要程序员手动释放无用内存 6.什么是Java程序的主类应用程序和小程序的主 类有何不同 一个程序中可以有多个类,但只能有一个类是主类。在Java应用程序中,这 个主类是指包含main()方法的类。而在Java小程序中,这个主类是一个继 承白系统类」 Applet或 Applet的子类。应用程序的主类不一定要求是pubi 类,但小程序的主类要求必须是 public类。主类是Java程序执行的入口点 7.Java应用程序与小程序之间有那些差别 简单说应用程序是从主线程启动(也就是man()方法)。 applet小程序没有 main方法,主要是嵌在浏览器贞面上运行(调川init)线程或者run0来启动),嵌 入浏览器这点跟fash的小游戏类似。 8.字符型常量和字符串常量的区别 形式上:字符常量是单引号引起的一个字符字符串常量是双引号引起的 若干个字符 2.含义上:字符常量相当于一个整形值(ASc值,可以参加表达式运算字 符串常量代表一个地址值(该字符串在内存中存放位置) 3.古内存大小字符常量只占2个字节字符串常量占若十个字节(至少一个 字符结束标志)(注意:char在Java中占两个字节) java编程思想第四版:2.2.2节 Java要确定每种基本类型所占存储空间的大小。它们的大小并不像其 机器硬件架构的变化而变化。这种所占存储空间大小的不变性是Java程序 编写的程序更具可移植性的原因之一。 基本类型大小最小值 最大值 包装器类 boolean Boolean char 16-bit Unicode o Unicode 216- U cHaracter byte 8 bits-128 +127 Byte short 16bts-215 +215=1 Short int 32 bitsI-231 231-1 Integer long 64 bi 63 203-1 Long float 32 bits IEEE754 IEEE754 Float double 64 bits IEEE754 IEEE754 Double void Void 9.构造器 Constructor是否可被 override 在讲继承的时候我们就知道父类的私有属性和构造方法并不能被继承,所以 Constructor也就不能被 override(重写),但是可以 overload(重载),所以 你可以看到一个类中有多个构造函数的情况。 10.重载和重写的区别 重载:发生在同一个类中,方法名必须相同,参数类型不同、个数不同、顺序 不同,方法返回值和访问修饰符可以不同,发生在编译时。 重写:发生在父子类中,方法名、参数列表必须相同,返回值范围小于等于父 类,抛出的异常范围小于等于父类,访问修饰符范围大于等于父类;如果父类 方法访问修饰符为 private则子类就不能重写该方法 11.Java面向对象编程三大特性:封装继承多态 封装 封装把一个对象的属性私有化,同时提供一些可以被外界访问的属性的方法, 如果属性不想被外界访问,我们大可不必提供方法给外界访问。但是如果一个 类没有提供给外界访问的方法,那么这个类也没有什么意义了。 继承 继承是使用存在的类的定义作为基础建立新类的技术,新类的定义可以增加 新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类。通过 使用继承我们能够非常方便地复用以前的代码。 关于继承如下3点请记住 1.子类拥有父类非 private的属性和方法 2.了类可以拥有自己属性和方法,即子类可以对父类进行扩展。 3.子类可以用自己的方式实现父类的方法。(以后介绍) 多态 所谓多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发 出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变 量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中 实现的方法,必须在由程序运行期间才能决定。 在Java中有两种形式可以实现多态:继承(多个子类对同一方法的重写)和接 口(实现接口并覆盖接口中同一方法) 12 String String Buffer和 StringBuilder的区别 是什么 String为什么是不可变的 可变性 简单的来说: String类中使用 final关键字字符数组保存字符串, private ina1 char value[],所以 String对象是不可变的。而 String Builder与 String Buffer都继承自 Abstractstring Builder类,在 Abstractstring Builder中 也是使用字符数组保存字符串char[] value但是没有用fnal关键字修饰,所以 这两种对象都是可变的。 String Builder与 String Buffer的构造方法都是调用父类构造方法也就是 Abstractstring Builder实现的,人家可以自行查阅源码。 AbstractString Builder, java abstract class AbstractstringBuilder implements Appendable, CharSequence i charl value int count AbstractstringBuilder i AbstractstringBuilder (int capacity)( value new char[] 线程安全性 String中的对象是不可变的,也就可以理解为常量,线程安全。 AbstractstringBuilder是 String Builder与 String Buffer的公共父类,定义了 些字符串的基本操作,如 expand Capacity、 append、 Insert、 indexof等公 共方法。 String Buffer对方法加冋步锁或者对调用的方法加∫冋步锁,所以 是线程安全的。 String Builder并没有对方法进行加同步锁,所以是非线程安全 的 性能 每次对 String类型进行改变的吋候,都会生成个新的 String对象,然后将 指针指向新的 String对象。 String Buffer每次都会对 StringBuffer对象本身 进行操作,而不是生成新的对象并改变对象引用。相同情况下使用 String Builder相比使用 String Buffer仅能获得10%~15%左右的性能提升, 但却要冒多线程不安全的风险 对于三者使用的总结: 1.操作少量的数据= String 2.单线程操作字符牛缓冲区下操作大量数据= StringBuilder 3.多线程操作字符串缓冲区下操作大量数据= String Buffer 13.自动装箱与拆箱 装箱:将基本类型用它们对应的引用类型包装起来; 拆箱:将包装类型转换为基本数据类型; 14.在一个静态方法内调用一个非静态成员为什么是 非法的 由于静态方法可以不通过对象进行调用,因此在静态方法里,不能调用其他非 静态变量,也不可以访问非静态变量成员 15.在Java中定义一个不做事且没有参数的构造 方法的作用 Java程序在执行子类的构造方法之前,如果没有用 super0来调用父类特定 的构造方法,则会调用父类中“没有参数的构造方法。因此,如果父类中只定 义了有参数的构造方法,而在子类的构造方法中又没有用 super0来调用父类 中特定的构造方法,则编译时将发生错误,因为Java程序在父类中找不到没 有参数的构造方法可供执行。解决办法是在父类里加上一个不做事且没有参数 的构造方法

...展开详情
试读 21P Java基础面试题.pdf
立即下载 低至0.43元/次 身份认证VIP会员低至7折
一个资源只可评论一次,评论内容不能少于5个字
  • 签到新秀

    累计签到获取,不积跬步,无以至千里,继续坚持!
关注 私信 TA的资源
上传资源赚积分or赚钱
    最新推荐
    Java基础面试题.pdf 50积分/C币 立即下载
    1/21
    Java基础面试题.pdf第1页
    Java基础面试题.pdf第2页
    Java基础面试题.pdf第3页
    Java基础面试题.pdf第4页
    Java基础面试题.pdf第5页

    试读结束, 可继续读2页

    50积分/C币 立即下载 >