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即可。

 

posted @ 2019-11-18 23:19  zzz222zzz  阅读(163)  评论(0编辑  收藏  举报