zoukankan      html  css  js  c++  java
  • Java面试题解析(一)

    本文是面试题目系列的第一篇,题目主要来自 GitChat 上一个课程,在此特别记录自身想的答案和在网上查询的结果,分享出来,大家共同学习。如果有不对的地方,欢迎大家指出。

    Java基础


    JDK 和 JRE有什么区别

    JDK:Java Development Kit,java开发包,其包括JRE和一些Java工具,如javac,javap等

    开发环境(编译,调试,分析工具)和运行环境

    JRE:Java Runtime environment,Java运行时环境,其包括JVM和Java运行过程中所需要的一些核心类库.如lang,util等常用的...

    --

    == 和equals的区别是什么

    对于基本类型来说,== 是用来比较两者的字面值是否相同的,基本类型没有equals方法

    对于引用来说,== 是用来比较两者的引用是否相同,equals是用来比较引用指向的对象是否相同的

    自定义对象如果需要比较两者是否相同,需要开发者自己手动重写equals()方法,一般重写这个方法也会带着重写hashcode()方法


    两个对象的 hashCode() 相同,则 equals() 也一定为 true,对吗

    不对,hashcode()只是将对象按照一定的Hash算法生成对应的16进制字符串,因为有长度的限制,因此必定会出现重复的情况,但他们的equals()此时并不一定相同.


    final 在 java 中有什么作用

    final是Java中的一个关键字.

    • 定义基本变量:变量是常量,在第一次声明值后就无法修改.
    • 定义对象:对象的引用无法修改,即无法指向其他的对象,但对象内部的值可以修改
    • 定义方法:方法无法被重写,一般用来表示方法已经完善了,不希望别人重写该方法
    • 定义类:类无法被继承,Java中的String等类就无法被继承.

    java 中的 Math.round(-1.5) 等于多少

    
        public void testMath(){
            log.info("-1.8:,{}",Math.round(-1.8));
            log.info("-1.5:,{}",Math.round(-1.5));
            log.info("-1.2:,{}",Math.round(-1.2));
            log.info("1.2:,{}",Math.round(1.2));
            log.info("1.5:,{}",Math.round(1.5));
            log.info("1.8:,{}",Math.round(1.8));
        }
    
    // 运行结果
    2019-04-04 10:59:32.599  INFO 8076 --- [           main] com.jrookie.service.DemoServiceTest      : -1.8:,-2
    2019-04-04 10:59:32.600  INFO 8076 --- [           main] com.jrookie.service.DemoServiceTest      : -1.5:,-1
    2019-04-04 10:59:32.600  INFO 8076 --- [           main] com.jrookie.service.DemoServiceTest      : -1.2:,-1
    2019-04-04 10:59:32.600  INFO 8076 --- [           main] com.jrookie.service.DemoServiceTest      : 1.2:,1
    2019-04-04 10:59:32.600  INFO 8076 --- [           main] com.jrookie.service.DemoServiceTest      : 1.5:,2
    2019-04-04 10:59:32.601  INFO 8076 --- [           main] com.jrookie.service.DemoServiceTest      : 1.8:,2
    

    通过结果可以看出除了-1.5都像是四舍五入的结果,但通过分析源码可以得出
    其结果是数据+0.5再向下取整即可


    String 属于基础的数据类型吗

    String属于Java核心类库的对象

    /**
    * 内部由不可变的char数组来实现,这也解释了为什么String是不可变的类型
    */
    public final class String
        implements java.io.Serializable, Comparable<String>, CharSequence {
     private final char value[];
    

    java 中操作字符串都有哪些类?它们之间有什么区别

    • String:最基本的字符串类型,创建后不可变
    • StringBuilder:其内部的char[]数组都是可变,因此是可变类型
    • StringBuffer:也是可变类型,但其内部大量使用了synchronized关键字,表明内部的方法都是线程安全的.

    因此在性能比较上:String > StringBuilder > StringBuffer
    但如果想要用可变类型,可以直接使用StringBuffer,这个是线程安全的,且性能和StringBuilder相比,并没有差很多.


    String str="i"与 String str=new String(“i”)一样吗

    不一样,String str="i",是声明一个引用直接指向字符串常量池,而String str=new String(“i”),会生成一个堆对象,引用指向该对象,该对象再指向字符串常量池.


    如何将字符串反转

    多种解法及其编码实现

    • 数组的方式引入第三方数据,作为存储
    • 直接在原数据上进行操作.可以考虑使用异或的方式来交换数据,效率更高

    StringBuilder 和 StringBuffer 中封装好了对应的反转操作,可以直接使用


    String 类的常用方法都有那些


    抽象类必须要有抽象方法吗

    根据下面的代码实例,表明应该是可以的

    public abstract class AbstractDemoClass {
        public void test(){
            System.out.println("hello,world");
        }
    }
    

    普通类和抽象类有哪些区别

    • 抽象类不可以被实例化

    普通类不能包含抽象方法


    抽象类能使用 final 修饰吗

    不可以,抽象类必须要有子类来继承它,实现其中的抽象方法,才可以实例化,如果用final来修饰的话,该类就无法被继承,那么这个抽象类就没有用处了.


    接口和抽象类有什么区别

    • 抽象类作为类只可以单继承,但接口可以实现多个
    • 抽象类可以有方法的实现,Java在8之前不能有方法的实现(Java8之后提供了一个默认方法实现的功能)
    • 接口中的方法全部默认为pubic的,抽象类中可以自定义

    抽象类可以有构造函数,接口不能有构造函数


    java 中 IO 流分为几种

    分为字节流和字符流,其中每个又细分为输入和输出,因此一共有四种流,分为为InputStream,OutputStream,Reader,Writer.

    在处理字节流和字符流之间的转换问题时,注意编码的问题.


    BIO、NIO、AIO 有什么区别

    BIO

    同步阻塞模型,A调用B,A需要收到B的返回结果才可以继续执行,B去立即执行

    NIO

    非阻塞IO,A调用B,A不用收到结果就可以继续执行

    AIO

    异步非阻塞IO,A调用B,B返回给A保证会执行,然后A继续干其他事,当B干完了后通知A,再让A来处理数据

    操作基于事件和回调机制


    Files的常用方法都有哪些

    对应collection的Collections类,是对File的操作类,封装了一些常用方法:

    • Files. exists():检测文件路径是否存在。
    • Files. createFile():创建文件。 [ createFile():创建文件。]
    • Files. createDirectory():创建文件夹。
    • Files. delete():删除一个文件或目录。
    • Files. copy():复制文件。
    • Files. move():移动文件。
    • Files. size():查看文件个数。
    • Files. read():读取文件。
    • Files. write():写入文件。
  • 相关阅读:
    stm32 SPI DMA读取ADS8345数据
    Minigui3.0.12完美安装,折腾了一天。终于看到了
    qvfb2的安装,在ubuntu10.4上安装成功
    户口从杭州人才市场迁移到武汉万科魅力之城的过程
    禁止minigui 3.0的屏幕保护
    想穿越回到儿时记录那些幸福
    TIM2定时闪灯程序。。。
    关于minigui的皮肤控件无法显示问题
    插件框架内核的设计
    用“序列图”描述技术方案
  • 原文地址:https://www.cnblogs.com/JRookie/p/10721056.html
Copyright © 2011-2022 走看看