zoukankan      html  css  js  c++  java
  • 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即可。

     

  • 相关阅读:
    Advanced Configuration Tricks
    Reviewing the Blog Module
    Editing and Deleting Data
    Making Use of Forms and Fieldsets
    Understanding the Router
    SQL Abstraction and Object Hydration
    Preparing for Different Databases
    Java学习理解路线图
    Openstack学习历程_1_视频
    CentOS安装Nginx负载
  • 原文地址:https://www.cnblogs.com/zzz222zzz/p/11886355.html
Copyright © 2011-2022 走看看