java中常见的面试题总结(二)

1、子类可以访问所有(子类与超类)的 public 和 protected 方法

2、Java 实例变量不需要初始化,局部变量必须初始化。

3、Java 不支持 goto 关键字。

4、线程属于一次性消耗品,在执行完run()方法之后,线程便会正常结束了,线程结束后便会销毁,不能再次start,只能重新建立新的线程对象。

5、所有异常类的基类:java.Lang.throwable

6、通过一个对象的引用访问静态成员属性或者方法时,访问操作只与所声明的引用类型相关;与引用对象是否为null无关,因为访问静态成员不需要实例化对象;即便引用不为null,也与运行时多态无关,因为静态成员是类相关的。

7、类是对象的模板,对象是类的具体实例。

8、引用传递也是一种值传递,并不会修改原来的引用的值,即myArray引用的值没有变化,还是和原来一样;但是由于引用传递是引用数据在堆中的地址,因此可以通过引用传递修改数据类型在堆中的值,但是引用传递并不能修改原来的引用的值。

9、数组作为参数是引用传递,在 doIt 方法中可以修改数组的值。

10、java静态函数中不能调用菲静态函数的方法。

11、java多线程的实现方法:

        1>.集成Thread类,Override它的run方法;

        2>.实现Runnable接口,实现run方法;

        由于java只能单继承,第一种方法只能继承一个Thread;第二种则可以实现多继承。

12、java提供的用于并发编程的同步器有:

        1>.Semaphore类:①是一个信号量,它可以限制同时访问某一资源的线程数量。(可以用来实现生产者-消费者模型等。) ②可以轻松完成信号控制,可以控制某个资源可被同时访问的个数,通过acquire()获取一个许可,如果没有就等待,而release()释放一个许可。

        2>.CyclicBarrier类:①是一个同步工具类,它可以使一组线程相互等待,直到所有的线程都到某个屏障点后再同时执行。CyclicBarrier的使用需要指定参与线程的数量,并通过await()方法等待所有线程到答屏障点,同时通过reset()方法将屏障重置,可以用于多次使用。

        await()方法,当一次都没有被调用,计数便会减少1,并阻塞住当前线程。当计数减至0时,阻塞解除,所有在此CyclicBarrier上面阻塞的线程开始运行。

        3>.CountDownLatch类:①是一个同步工具类,它可以使一个或多个线程等待其他线程完成操作后再执行。CountDownLatch的使用需要指定计数器的初始值,并通过await()方法等待计数器归零,同时通过countDown()方法将计数器减一。②倒计数门闩(阻止前进)。CountDownLatch.await()方法在倒计数为0之前会阻塞当前线程。

        4>.synchronized关键字:使用该关键字可以对代码块或方法进行同步,使得在同一时刻只有一个线程可以执行该代码块或方法。

        5>.ReentrantLock类:是一个可重入的互斥锁,它可以和synchronized关键字一样实现对临界区的同步。使用ReentrantLock时需要手动获取和释放锁。

        6>.Condition接口:是一个条件变量,它可以和Lock一起使用,可以实现更加灵活的线程同步。

13、当一个实体类集成一个抽象类,必须实现抽象类中的抽象方法。

14、abstract修饰的类是抽象类,是可以继承的,而final修饰的类表示不能被继承。

15、String,StringBuffer,StringBuilder(运行速度由慢而快)三者的区别:

        String是字符串常量,而StringBuffer和StringBulider是字符串变量;String对象一旦创建该对象是不可更改的,而后两者的对象是变量,是可以更改的。

        使用场景:

        String:适用于少量的字符串操作的情况;

        StringBuffer:适用于多线程下的字符缓冲区进行大量操作的情况;

        StringBuilder:适用于单线程下的字符缓冲区进行大量操作的情况;

        在线程安全上:

        StringBuffer:线程安全,StringBuilder:线程不安全

16、volatile:轻量级的同步机制,能保证数据的可见性,但不能保证数据的原子性;

17、java跨平台特性是因为JVM的存在,它可以执行.class字节码文件,而不是.java源代码。

18、ThreadLocalMap中使用开放地址法 - 线性探测法:当前哈希槽有其他对象占了,顺着数组索引寻找下一个,直到找到为止。来处理散列冲突HashMap中使用的是分离链表法

19、final、finally、finalize三者的区别:

        1>.final:可以修饰类、变量、方法,修饰类表示该类不能被继承、修饰方法表示该方法不能被重写、修饰变量表示该变量是一个变量不能被重新赋值。

        2>.finally:一般作用在try-catch代码块中,在处理异常的时候,通常我们将一定要执行的代码方法finally代码块中,表示不管是否出现异常,该代码块都会执行,一般用来存放一些关闭资源的代码。

        3>.finalize:是一个方法,属于Object类的一个方法,而Object类是所有类的父类,该方法一般由垃圾回收器来调用,当我们调用System的gc()方法的时候,由垃圾回收器调用finalize(),回收垃圾。

20、方法重载与方法重写的区别:

        方法重载(overload):是一个类中多态性的一种表现

        1、必须是同一个类;

        2、方法名相同;

        3、参数类型不同(个数不同、顺序不同、类型不同);

        官网总结:

        1、参数类型、个数、顺序至少有一个不相同;

        2、不能重载只有返回值不同的方法名;

        3、存在于父类和子类、同类中;

        方法重写(override):

        1、方法名与形参列表必须一致;

         2、子类的权限修饰符必须要大于或者等于父类的权限修饰符;

         3、子类的返回值类型必须要小于或等于父类的返回值类型;

         4、子类抛出的异常类型要小于或者等于父类抛出的异常类型;

        官网总结:

        1、方法名,参数、返回值相同;

        2、子类方法不能小于父类方法的访问权限;

        3、子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常)

        4、存在于父类和子类之间;

        5、方法被定义为final不能被重写。

21、java classLoader 类加载器:

        1、classLoader就是用来动态加载class文件到内存当中用的

        2、classLoader使用的是双亲委托模型来搜索类的

     3、java默认提供的三个classLoader是Boostrap ClassLoader,Extension ClassLoader,App ClassLoader。

22、super 与 this的区别:

        super注意点:

        1、super调用父类的构造方法,必须在构造方法的第一个

        2、super必须在出现在子类的方法或者构造方法中

        3、super和this不能同时调用构造方法

        this:代表的对象不同

        this:本身调用着这个对象

        super:代表父类对象的应用

        前提:

        this:没有继承也可以使用

        super:只能在继承的子类当中使用

        构造方法:

        this():本类的构造方法

        super():父类的构造方法

23、常见的代码优化技术有:复写传播,删除死代码,强度削弱,归纳变量删除

24、java的引用类型:

        强引用:不会被回收

        软引用:空间不足被回收

        弱引用:JVMGC时回收

        虚引用:形同虚设,随时可能被回收

25、四类八种基本数据类型

  1. 第一类:整数类型 byte,short,int,long
  2. 第二类:浮点型 float,double
  3. 第三类:逻辑型 boolean(它只有两个值可取true,false)
  4. 第四类:字符型 char

26、ArrayList和LinkenList 的区别:  

 27、Java对象初始化顺序:         

  1. 父类静态代码块,父类静态成员变量(同级,按代码顺序执行)
  2. 子类静态代码块,子类静态成员变量(同级,按代码顺序执行)
  3. 父类普通代码块,父类普通成员变量(同级,按代码顺序执行)
  4. 父类构造方法
  5. 子类普通代码块,子类普通成员变量(同级,按代码顺序执行)
  6. 子类构造方法

     注意点:

        静态内容只在类加载时执行一次,之后不再执行

        默认调用父类的无参构造方法,可以在子类构造方法中利用super指定调用父类的哪个构造方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值