当前位置 : 主页 > 编程语言 > java >

面试题-Java基础篇(3)

来源:互联网 收集:自由互联 发布时间:2022-07-04
1.sleep()和wait()的区别 1、这两个方法来自不同的类分别是Thread和Object 2、最主要是sleep方法没有释放锁,而 wait 方法释放了锁,使得其他线程可以使用同步控制块或者方法。 3、wait,not

1.sleep()和wait()的区别

1、这两个方法来自不同的类分别是Thread和Object

2、最主要是sleep方法没有释放锁,而 wait 方法释放了锁,使得其他线程可以使用同步控制块或者方法。

3、wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在任何地方使用(使用范围)

4、sleep必须捕获异常,而wait,notify和notifyAll不需要捕获异常

2.什么是多态 多态的使用范围

多态的定义:指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。(发送消息就是函数调用)多态存在的三个必要条件

一、要有继承;

二、要有重写;

三、父类引用指向子类对象。Java中多态的实现方式:接口实现,继承父类进行方法重写,同一个类中进行方法重载。

3.java中 public/private/protected和default(默认)的区别

public:

具有最大的访问权限,可以访问任何一个在classpath下的类、接口、异常等。它往往用于对外的情况,也就是对象或类对外的一种接口的形式。

protected:

主要的作用就是用来保护子类的。它的含义在于子类可以用它修饰的成员,其他的不可以,它相当于传递给子类的一种继承的东西

default:

有时候也称为friendly,它是针对本包访问而设计的,任何处于本包下的类、接口、异常等,都可以相互访问,即使是父类没有用protected修饰的成员也可以。

private:

访问权限仅限于类的内部,是一种封装的体现,例如,大多数成员变量都是修饰符为private的,它们不希望被其他任何外部的类访问。

4.String、StringBuffer、StringBuilder有什么区别

一. String 字符串常量

二. StringBuffer 字符串变量(线程安全)

三. StringBuilder 字符串变量(非线程安全)

  • String类型是Java内的对象,是个不可变的对象,当每次对String进行改变时都需要生成一个新的String对象,然后将指针指向一个新的对象,如果在一个循环里面,不断的改变一个对象,就要不断的生成新的对象,而且对象多了,Java的垃圾自动回收机制会开始工作,所以效率很低,建议在不断更改String对象的地方不要使用String类型
  • StringBuffer 是个可变的对象,就是每次操作都是对对象本身进行操作,而不用生成新的对象,这样效率肯定就会有有很大的提高,在大部分情况下StringBuffer的效率要比String类型要高
  • StringBuilder 与StringBuffer一样是个可变的字符序列,提供与StringBuffer兼容的API,但是不能保证同步,用在字符串缓冲区被当个线程使用的情况,在单机非多线程的情况下使用StringBuilder会有比较好的效率,因为StringBuilder没有处理同步(Synchronized)问题。StringBuffer则会处理同步问题,如果StringBuilder会在多线程下被操作,则要改用StringBuffer,让对象自行管理同步问题。
  • 注意点:

    在使用StringBuffer时指定其容量,会比不指定其容量要快40%到50%左右,甚至比不指定容量的StringBuilder要快。所以在使用时最好指定其容量。这是一个良好的编程习惯,对于性能有很大的提升。

    5.说出一些常用的类,包,接口,请各举5个

    常用的类:

    BufferedReader BufferedWriter FileReader FileWirter String Integer

    常用的包:

    java.lang java.awt java.io java.util java.sql

    常用的接口:

    Remote List Map Document NodeList

    6.什么是线程同步 如何实现线程同步

    当使用多个线程来访问同一个数据时,非常容易出现线程安全问题(比如多个线程都在操作同一数据导致数据不一致),所以我们用同步机制来解决这些问题。

    实现同步机制有两个方法:

    1.同步代码块:

    synchronized(同一个数据){} 同一个数据:就是N条线程同时访问一个数据。

    2.同步方法:

    public synchronized 数据返回类型 方法名(){}

    就是使用 synchronized 来修饰某个方法,则该方法称为同步方法。对于同步方法而言,无需显示指定同步监视器,同步方法的同步监视器是 this 也就是该对象的本身(这里指的对象本身有点含糊,其实就是调用该同步方法的对象)通过使用同步方法,可非常方便的将某类变成线程安全的类,具有如下特征:

    1,该类的对象可以被多个线程安全的访问。

    2,每个线程调用该对象的任意方法之后,都将得到正确的结果。

    3,每个线程调用该对象的任意方法之后,该对象状态依然保持合理状态。

    注:synchronized关键字可以修饰方法,也可以修饰代码块,但不能修饰构造器,属性等。

    实现同步机制注意以下几点: 安全性高,性能低,在多线程用。性能高,安全性低,在单线程用。

    1,不要对线程安全类的所有方法都进行同步,只对那些会改变共享资源方法的进行同步。

    2,如果可变类有两种运行环境,当线程环境和多线程环境则应该为该可变类提供两种版本:线程安全版本和线程不安全版本(没有同步方法和同步块)。在单线程中环境中,使用线程不安全版本以保证性能,在多线程中使用线程安全版本.

    7.解释一下static关键字 被static修饰的方法 调用 静态/非静态函数的方法

    \1. 静态方法

    通常,在一个类中定义一个方法为static,那就是说,无需本类的对象即可调用此方法

    声明为static的方法有以下几条限制:

    · 它们仅能调用其他的static 方法。

    · 它们只能访问static数据。

    · 它们不能以任何方式引用this 或super。

    \2. 静态变量

    声明为static的变量实质上就是全局变量。当声明一个对象时,并不产生static变量的拷贝,而是该类所有的实例变量共用同一个static变量。静态变量与静态方法类似。所有此类实例共享此静态变量,也就是说在类装载时,只分配一块存储空间,所有此类的对象都可以操控此块存储空间,当然对于final则另当别论了

    \3. static代码块

    static关键字还有一个比较关键的作用就是 用来形成静态代码块以优化程序性能。static块可以置于类中的任何地方,类中可以有多个static块。在类初次被加载的时候,会按照static块的顺序来执行每个static块,并且只会执行一次。

    8.堆区和栈区的区别

    栈区:先进后出 存放局部变量 连续的存储空间

    堆区:存放new出来的对象,不连续的存储空间

    9.&和&&的区别

    &是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and)

    10.Java支持的数据类型有哪些?什么是自动拆装箱?

    Java语言支持的8种基本数据类型是:

    byte/short/int/long/float/double/boolean/char

    自动装箱是Java编译器在基本数据类型和对应的对象包装类型之间做的一个转化。比如:把int转化成Integer,double转化成Double,等等。反之就是自动拆箱。


    上一篇:面试题-Java基础篇(5)
    下一篇:没有了
    网友评论