java面试题

一、Servlet技术

   1、什么是servlet

     Sun公司定制的一种扩展web服务器端的组件规范(服务器端的Java应用程序)。具有独立于平台和协议的特性,可以生成动态的web页面,担当客户端请求与服务器端响应的中间层。

 2、与CGI区别

  Servlet与CGI的区别在于服务器的进程中,servlet是通过多线程的方式运行service方法,一个servlet实例可以服务于多个请求,一般不会被销毁。CGI对每个请求都产生新的进程,服务完成后就销毁,所以CGI效率低于servlet。

 3、servlet什么时候被实例化

  如果没设置loadOnStartup,则在第一次被调用时实例化(servlet被实例化后,tomcat会调用init()方法初始化这个对象)

  设置loadOnStartup分三种情况:

  (1)loadOnStartup < 0

    负数的情况下,web容器启动的时候不会做实例化,第一次被调用的时候被实例化

  (2)loadOnStartup > 0

  web容器启动的时候做实例化,顺序是有小到大,正整数越小的先被实例化

  (3)loadOnStartup = 0 

  web容器启动的时候做实例化,相当于最大正整数,web启动时,最后被初始化

  4、servlet声明周期

    加载servlet:tomcat第一次访问servlet的时候,tomcat会负责创建servlet实例;

    初始化:servlet实例化后,tomcat会调用init()方法初始化该实例化对象;

    处理请求:当浏览器访问servlet的时候,servlet会调用service()方法处理请求:

    销毁:当tomcat停止或servlet从tomcat删除的时候,会自动调用destroy()方法,让该实例释放占用的资源。一个servlet若长时间不被使用,也会被tomcat自动删除;

    卸载:servlet调用完destroy()方法后,等待垃圾回收。若有需要再次使用该servlet,会重新调用init()方法进行初始化。

  5、相关博文链接 

https://www.cnblogs.com/disneyland/p/4692339.html  servlet什么时候被实例化

https://blog.csdn.net/u012129558/article/details/52329543 

https://blog.csdn.net/heyanfeng22/article/details/45898661 servlet的单例理解

二、字符串

  1、String、StringBuffer和StringBuilder的区别

    相关博文链接:

    http://www.cnblogs.com/Wilange/p/7570633.html

    http://www.cnblogs.com/Wilange/p/7572125.html

  2、String str = new String("abc")和String str2 = "abc"这两句代码执行后分别会创建几个对象?

    相关博文链接:

    https://blog.csdn.net/zmx1026/article/details/46054903

 三、java的集合框架

  1.相关博客链接

    https://www.cnblogs.com/leskang/p/6029780.html LinkedList的底层数据结构

    https://blog.csdn.net/zhanglh046/article/details/52882994  HashMap的底层数据结构

    https://blog.csdn.net/dou_yuan/article/details/77675872  HashMap的底层数据结构

    https://blog.csdn.net/anxpp/article/details/51234835 HashMap的底层数据结构

    https://www.cnblogs.com/KingIceMou/p/6976574.html(HashMap扩容)

    https://blog.csdn.net/aichuanwendang/article/details/53317351(HashMap扩容JDK1.8相比JDK1.7改进)

  

  

原文地址:https://www.cnblogs.com/lmmblogs/p/9153019.html