zoukankan      html  css  js  c++  java
  • java 面试题整理

     java面试题

      1.接口和抽象类的区别

      

    抽象类 接口
    抽象类中可以有默认方法 在java8之前,不能有默认方法
    extends implements
    抽象类中可以有构造器 接口中不能有构造器
    抽象类中可以使用public protected  接口中是完全是public
    添加方法时,可以不修改子类现有的代码 子类必须实现新添加的方法

      2.什么是不可变对象?

       不可变对象一旦被创建,状态就不能被修改。任何修改都会新创建一个新的对象,如String Integer 等包装类。

      3.java中几种创建对象的方式?

      ①采用new的方式 ②通过反射进行创建  ③采用clone 的方式进行创建 ④通过序列化机制进行

      4.equals 和hashcode()的联系?

      如果连个对象的equals不相等,有可能产生的hash值会相等,可能会出现碰撞的情况,如果equals相等,那么hashcode肯定是相等的。

      在hashcode中不能使用随机数

      5.final、finalize、finally 的不同之处?

      final 是最终的,修改的对象和变量的值不可进行更改。 finalize 在对象回收之前调用一次,但是不知道具体的时间。finally 表示,发生异常也会执行的操作。

      6.线程wait()和sleep()的区别?

      sleep 睡眠后不会让出资源, wait()会进行资源的让出,sleep 时间到的话就会执行,wait() 需要进行唤醒,notify() 或者notifyall()

      7. Java中浅拷贝和深拷贝?

       浅拷贝针对对象而言,如果对象属性是非引用型,则非引用的部分重新进行赋值,也就是clone出来的对象这些属相相互不影响,如果是引用型,则会影响,他们是

        拷贝的是对象的地址。(String类型非常特殊,虽然属于引用类型,但是不能当做这个 包装类型也例外)

       深拷贝:完全拷贝一个新的对象

       深拷贝实例:

    Object clone = super.clone();
            Student st = (Student)clone;
            Address clone1 = (Address)st.getAddress().clone();
            st.setAddress(clone1);
            return super.clone();

       8.ThreadLocal(线程变量副本)?

      threadlocal为每个变量维护一个线程变量,采用空间转化时间的方式,为每个使用该线程的变量提供一个副本。主要解决多线程中,数据不一致的问题,它的本质是数据

      的隔离,Synchronized 是数据的共享。

      9. JVM ?

      java 虚拟机,它屏蔽了与操作平台相关的信息,这就是java虚拟机的“一次编译,到处运行”的原因。

      JRE :java 程序运行的环境,普通的用户只需要安装JRE就可以了。

      JDK: 是程序开发人员用来编译、调试java程序用的包,包含了JRE

      10. java 内存模型?

      ①程序计数器  ②java虚拟机栈 ③本地方法栈 ④java堆 ⑤方法区 ⑥运行时常量池

      12 . lock与synchronized 的区别?

        lock还具有锁投票 定时锁等候,中断锁等候。

        synchronized  如果A占着锁不放,B会一直等待。

        lock 如果A 不释放,B会中断等候,去干别的事情。

          ①lock() 如果获得了锁,立即返回,否则一直在休眠等待

           ②trylock() 如果获得锁,立即返回true,否则返回false

          ③tryLock(long timeout,TimeUnit unit), 如果获取了锁定立即返回true,如果别的线程正持有锁,会等待参数给定的时间,在等待的过程中,如果获取了锁定,就

           返回true,如果等待超时,返回false

           ④lockInterruptibly:如果获取了锁定立即返回,如果没有获取锁定,当前线程处于休眠状态,直到或者锁定,或者当前线程被别的线程中断

        synchronized 出现异常时候,会自动释放锁,但是lock不会。  

        在竞争不是非常激烈的情况下,使用synchronized 比较好。激烈的话,使用lock

      13. volatile 的使用场景:

        为了解决多线程中,变量改变后,无法通知其他线程。使用的条件:对变量的操作不依赖当前值,改变量没有包含具有其他变量的不变式 不保证原子性

      14. CAS 无锁算法?

        当多个线程尝试使用CAS更改同一个变量的时候,只有一个变量能够成功,失败的线程并不会被挂起,而是被告知竞争失败。

      15.线程池的作用?

      ① 降低资源的消耗,通过重复利用,减小创建和销毁的消耗。

      ② 提高相应的速度,当任务到达时候,任务不需要等待线程的创建就能够立即执行。

      ③ 提高线程的管理性

      16 . 一直hash性

        hash算法称为散列算法,就是通过散列算法,将数据存储到一个指定的地址上面,下次如果添加的时候,set就通过这个地址来进行判断这个地址是否有值。

        这样就大大降低了消耗。

        数组的特点:寻找地址快,插入和删除困难。

        链表的特点:寻地址难,插入和删除简单。

        hashMap 可以接受null键和值(线程非安全的),而hashtable 不能(线程安全的)

      17 . SpringIOC (控制反转 和依赖注入)

        通过注入的方式构建springbean,通过反射机制实例化bean并建立依赖关系

        springbean 一般都单例模式,每一个请求会产生新的bean实例,

     

      

     

      

     

  • 相关阅读:
    第一册:lesson forty five。
    第一册:lesson forty three。
    马化腾2015港大演讲。
    Swing实现文件选择(目录选择)附导出
    SVN强制注释
    Websphere内存溢出的日志
    sql server2008 搭建链接服务器成功后查询时报Cannot obtain the schema rowset "DBSCHEMA_TABLES_INFO" for OLE DB provider "SQLNCLI10" for linked server "XXXXX". 的解决方法
    UML图例
    jSP的3种方式实现radio ,checkBox,select的默认选择值。
    通过js子页面回写父页面,改变父页面控件的值
  • 原文地址:https://www.cnblogs.com/chengyangyang/p/10399080.html
Copyright © 2011-2022 走看看