zoukankan      html  css  js  c++  java
  • 基础面试题(一)

    1. JAVA跨平台原理

    由于各操作系统(windowlinux)支持的指令集,不是完全一致的。就会让我们的程序在不同的操作系统上要执行不同程序的代码。Java开发了适用于不同操作系统及位数的JAVA虚拟机来屏蔽各个系统之间的差异,提供统一的接口。

    Java 程序从源代码到运行一般有下面3步:

    所以只需要在不同的系统上安装对应的Java虚拟机(JVM),就可以运行java代码。

    Java虚拟机(JVM)是运行 Java 字节码的虚拟机。JVM有针对不同系统的特定实现(Windows,Linux,macOS),目的是使用相同的字节码,它们都会给出相同的结果。字节码和不同系统的 JVM 实现是 Java 语言“一次编译,随处可以运行”的关键所在。

     

    2. 面向对象的特征有哪些方面

      有四大基本特征:封装、抽象、继承、多态

      封装:将对象封装成一个高度自治和相对封闭的个体(private)。对象的状态(属性)由这个对象自己的行为(方法)来读取和改变(get/set)。例如:自己的名字自己改。

      抽象:抽象就是找出一些事务的相似和共性之处,然后将这些事务归为一个类,这个类只考虑这些事务的相似和共性之处。就是把现实生活中的对象,抽象为类。例如:张三李四都有很多共同之处,年龄、发量等。

      继承:在定义和实现一个类的时候,可以在一个已经存在的类的基础上来进行。把这个已经存在的类所定义的内容作为自己的内容,并可以加入若干新的内容,或修改原来的方法(重写override)使之更适合特殊的需要。例如:遗产的继承

      多态:同一个接口,使用不同的实例而执行不同操作。

        在Java中有两种形式可以实现多态:继承(多个子类对同一方法的重写)和接口(实现接口并覆盖接口中同一方法)。

    3.抽象类和接口的区别

     第一,概念上不一样。

      接口是对动作的抽象,抽象类是对本质的抽象。通俗一点来说就是,接口表示这个对象能做什么,抽象类表示这个对象是什么。举例,抽象类是人,说明他们都是人。人可以吃东西,狗也可以吃东西。可以定义“吃东西”是一个接口,让这些类去实现它。所以,在Java里面,一个类就只能继承一个类(抽象类),而可以实现多个接口(动作)。

     第二,使用不一样。

      抽象类可以有构造方法,接口中不能有构造方法。

      抽象类中可以有普通成员变量,接口中没有普通成员变量

      抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。

      抽象类中的抽象方法的访问类型可以是public,protected和默认类型(虽然

    eclipse下不报错,但应该也不行),但接口中的抽象方法只能是public类型的,并且默认即为public abstract类型。

      抽象类中可以包含静态方法,接口中不能包含静态方法

      抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static final类型,并且默认即为public static final类型。

      一个类可以实现多个接口,但只能继承一个抽象类。

    4.重写和重载

      重写:发生在父子类中。方法名、参数列表必须相同,返回值范围小于等于父类,抛出的异常范围小于等于父类,访问修饰符范围大于等于父类。如果父类为private,则子类就不能重写该方法。

      重载:发生在同一个类中。方法名必须相同,参数类型、个数、顺序不同,方法返回值和访问修饰符可以不同,发生在编译时。

    5.==和equals的区别

      == 用来判断两个变量之间的值是否相等。变量可以分为基本数据类型变量,引用类型。如果是基本数据类型的变量直接比较值,引用类型要比较对应的引用的内存首地址。

      equals用来比较两个对象是否长得一样,判断两个对象某些对象是否一样。实际上就是调用对象的equals方法进行比较。

        在网上看到有人这样说“

        equals() : 它的作用也是判断两个对象是否相等。但它一般有两种使用情况:

    • 情况1:类没有覆盖 equals() 方法。则通过 equals() 比较该类的两个对象时,等价于通过“==”比较这两个对象。
    • 情况2:类覆盖了 equals() 方法。一般,我们都覆盖 equals() 方法来比较两个对象的内容是否相等;若它们的内容相等,则返回 true (即,认为这两个对象相等)。

          ”

        其实意思是一样的。例如基本数据类型(int,string等)是重写了object的equals()方法,所以比较的是值,类似“==”的作用。

    6.String、StringBulider、StringBuffer。

      在java中提供三个类(String、StringBulider、StringBuffer)来表示和操作字符串,字符串就是多个字符的集合。

      String是内容不可变的字符串,底层使用了一个不可变的字符数组(final),源码可查(private final char value[];),可以使用append 追加字符串,重新开辟空间组成新的字符串(新的中间对象),麻烦不推荐。

      StringBuilder 和 StringBuffer 是内容可以改变的字符串,底层使用可变的字符数组(没有使用final)修饰。

      StringBuilder 和 StringBuffer 的区别是:

        StringBuffer是线程安全的,但是效率较低。StringBuilder是线程不安全的,但是效率较高。

     7.Java 中 IO 流分为几种?

      按功能来分:输入流(input)、输出流(output)。

      按类型来分:字节流和字符流。

      字节流和字符流的区别是:字节流按 8 位传输以字节为单位输入输出数据,字符流按 16 位传输以字符为单位输入输出数据。

    8. BIO、NIO、AIO 有什么区别?

    • BIO:Block IO 同步阻塞式 IO,就是我们平常使用的传统 IO,它的特点是模式简单使用方便,并发处理能力低。
    • NIO:Non IO 同步非阻塞 IO,是传统 IO 的升级,客户端和服务器端通过 Channel(通道)通讯,实现了多路复用。
    • AIO:Asynchronous IO 是 NIO 的升级,也叫 NIO2,实现了异步非堵塞 IO ,异步 IO 的操作基于事件和回调机制。
  • 相关阅读:
    Redis基础学习(三)—Key操作
    Redis基础学习(二)—数据类型
    Redis基础学习(一)—Redis的安装
    Bootstrap基础学习(二)—表单
    Bootstrap基础学习(一)—表格与按钮
    List去除重复的元素
    jQuery 将表单序列化为Json对象
    SpringMVC基础学习(三)—参数绑定
    CentOS 7.1安装Elasticsearch和Storm
    Python多线程中join函数与setDaemon函数使用说明
  • 原文地址:https://www.cnblogs.com/fzzzjjj/p/11260003.html
Copyright © 2011-2022 走看看