• Java常见的面试题(一)


    一,java数据类型

      1,基本数据类型及长度

         整型:byte(1),short(2),int(4),long(8)

         字符型:char(2)

         浮点型:float(4),double(8)

     2,引用数据类型

         类:String,System,Object,Math.......

        接口:Runnable,Serializable,Comparable........

         数组:int[],String[],char[].......

    二·,springMVC工作流程 

      (1)用户发送请求至前端控制器DispatcherServlet;

      (2) DispatcherServlet收到请求后,调用HandlerMapping处理器映射器,请求获取Handle;

      (3)处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet;

      (4)DispatcherServlet 调用 HandlerAdapter处理器适配器;

      (5)HandlerAdapter 经过适配调用 具体处理器(Handler,也叫后端控制器);

      (6)Handler执行完成返回ModelAndView;

      (7)HandlerAdapter将Handler执行结果ModelAndView返回给DispatcherServlet;

      (8)DispatcherServlet将ModelAndView传给ViewResolver视图解析器进行解析;

      (9)ViewResolver解析后返回具体View;

      (10)DispatcherServlet对View进行渲染视图(即将模型数据填充至视图中)

      (11)DispatcherServlet响应用户。

    三,abstract和interface的区别:

    (1)abstract类,是单继承,用的是关键字 extends;interface接口,可以多实现,用的关键字是implements

    (2)interface内的成员都是public修饰的;而abstract内不一定

    (3)interface的成员对象都是static、final修饰的;而abstarct内不一定;

    (4)interface内方法不能有默认实现,只有声明;而abstract内只有抽象方法不能有默认实现,其他可以有默认实现

    (5)interface被implements时,所有的抽象方法必须被实现;而abstarct类如果有抽象方法,则必须实现该抽象方法,其他的默认实现则继承过来

    四,线程、多线程、线程池

         线程:进程中负责程序执行的执行单元。一个进程中至少有一个线程。

        多线程:解决多任务同时执行的需求,合理使用CPU资源。多线程的运行是根据CPU切换完成,如何切换由CPU决定,因此多线程运行具有不确定性。

        线程池:基本思想还是一种对象池的思想,开辟一块内存空间,里面存放了众多(未死亡)的线程,池中线程执行调度由池管理器来处理。当有线程任务时,从池中取一个,执行完成后线程对象归池,这样可以避免反复创线       程对象所带来的性能开销,节省了系统的资源。

    五,产生死锁的必要条件   

         产生死锁有四个条件:互斥、请求和保持、不可抢占、循环等待。

         只要任意一个条件不成立,死锁就不会发生。

    1. 不可抢占条件:进程已获得的资源在未使用完之前不能被抢占,只能在进程使用完时由自己释放。
    2. 循环等待条件:在发生死锁时,必定存在一个由进程构成的资源循环链(进程集合{P0,P1,P2,...,Pn}中的P0正在等待一个P1占用的资源,P1正在等待P2占用的资源,......,Pn正在等待P0占用的资源)。

    六,HashMap和Hashtable的区别

    1、线程安全

    Hashtable 是线程安全的,HashMap 不是线程安全的。

    2、性能优劣

    既然 Hashtable 是线程安全的,每个方法都要阻塞其他线程,所以 Hashtable 性能较差,HashMap 性能较好,使用更广。

    如果要线程安全又要保证性能,建议使用 JUC 包下的 ConcurrentHashMap。

    3、NULL

    Hashtable 是不允许键或值为 null 的,HashMap 的键值则都可以为 null。

    4、实现方式

    Hashtable 的继承源码:

    public class Hashtable<K,V>
        extends Dictionary<K,V>
        implements Map<K,V>, Cloneable, java.io.Serializable

    HashMap 的继承源码:

    public class HashMap<K,V> extends AbstractMap<K,V>
        implements Map<K,V>, Cloneable, Serializable

    可以看出两者继承的类不一样,Hashtable 继承了 Dictionary类,而 HashMap 继承的是 AbstractMap 类。

    Dictionary 是 JDK 1.0 添加的,貌似没人用过这个,栈长我也没用过。。

    5、容量扩容

    HashMap 的初始容量为:16,Hashtable 初始容量为:11,两者的负载因子默认都是:0.75。

    当现有容量大于总容量 * 负载因子时,HashMap 扩容规则为当前容量翻倍,Hashtable 扩容规则为当前容量翻倍 + 1。

    6、迭代器

    HashMap 中的 Iterator 迭代器是 fail-fast 的,而 Hashtable 的 Enumerator 不是 fail-fast 的。

    所以,当其他线程改变了HashMap 的结构,如:增加、删除元素,将会抛出 ConcurrentModificationException 异常,而 Hashtable 则不会。

    七,springMVC中Jackson的使用

        在springmvc项目中使用ajax的时候,Controller层方法使用@ResponseBody注解,他会返回前端json对象给前端,我们方法只需要返回对象集合,对象,字符串等都可以返回json对象,这个是spring帮我们使用jackson做了

        我们只需要在spring中配置jackson即可。

     

  • 相关阅读:
    仿蘑菇街界面(2)
    centos安装qt开发环境
    ubuntu14.04 qt4 C++开发环境搭建
    ubuntu qt X11开发环境
    ubuntu14.04 qt4开发环境搭建(vnc use gnome)
    ubuntu gnome vnc
    ubuntu 14.04 vnc use gnome(ubuntu14.04 gnome for vnc4server)
    C++面向对象编程初步
    openStack CI(Continuous interaction)/CD(Continuous delivery) Gerrit/Jenkins安装及集成,插件配置
    shell programs
  • 原文地址:https://www.cnblogs.com/zzz222zzz/p/11886355.html
Copyright © 2020-2023  润新知