面试题1

1.servlet生命周期

   servlet生命周期分为三个阶段:

  1)初始化阶段,调用init()函数。

  2)响应客户请求阶段,调用service()函数。

  3)终止阶段,调用destory()函数。

2.servlet是线程安全的吗?

servlet不是线程安全的,因为servlet默认是单例模式,通常再容器中只实例化一个对象。所以当多线程调用servlet对象时,就会线程不安全。

3.servlet接口的5个方法?

  init()、service()、destory()、getServletInfo()、getServletConfig()//返回一个servletConfig对象。

4.get请求与post请求。

get请求通过url携带参数,而post的参数在request body中。

post请求比get请求更安全,因为它的参数暴露在url中。

对参数的数据类型,GET只接受ASCII字符,而POST没有限制。

其实post与get请求并无本质区别:  https://www.cnblogs.com/logsharing/p/8448446.html

get请求会发送一个数据包,post会发送两个。

5.hashMap与hashTable

 1)hashMap是非线程安全的,hashTable是线程安全的。

 2)hashMap允许key和value都为null值,而hashTable都不可以为null。

 3)由于线程安全问题,hashMap效率要高于hashTable。

 4)hashTable是同步的,hash Map不是。如果要保证线程安全的话,一般使用ConcurrentHashMap来实现。因为 HashTable实现线程安全的方式太低效了, 直接在方法上加了 synchronized 关键字来实现的。

6.链表:

  https://www.cnblogs.com/ysocean/p/7928988.html

7.多态性的体现

 1)方法的重写。

 2)方法的重载。

 3)抽象类

 4)接口。

7.java的单继承和多实现

 java只能继承一个类,而可以实现多个接口。

8.什么时候用hashMap?

当存储键值对时,它可以存储null值,是无序的,非同步的。HashMap存储着Entry(hash,key,value,next)对象。

9.单例模式的使用场景

    1)、项目中的配置文件,如数据库的连接信息等,通常会用单例对象读取并存储。

    2)、Hibernate的SessionFactory应作为单例使用。

    3)、Servlet是典型的单例对象,这个对象是由Tomcat服务器创建并维护的。

    4)、Spring容器中的bean对象,默认都是单例模式。

    5)、Spring容器也应设置成单例。

    6)、统计网站的访问量。

10.同步的实现方式

    1)同步方法:给方法名前加一个synchronized关键字,这个方法可以是静态的也可以是非静态的,但不能是抽象类的抽象方法,也不能是接口中的抽象方法。线程在执行同步方法时是具有排他性的,当一个线程进入到对象中的同步方法时,这个对象的所有同步方法都被锁定了。在此期间这个对象的所有同步方法都被锁定了,其它任何线程都不能访问这个对象的其他同步方法,但是可以访问其它非同步方法的。

    2)同步块:同步块是指通过锁定一个指定的对象,来对同步块中所包含的代码进行同步,而同步方法是对这个方法内的代码进行同步的,而这种情况下锁定的就是该方法所属的主体对象自身。如果这个方法是静态同步方法呢?那么线程锁定的就不是这个类的对象了,也不是这个类自身,而是这个类对应的java.lang.Class类型的对象。同步方法和同步块之间的相互制约只限于同一个对象之间,所以静态同步方法只受它所属类的其它静态同步方法的制约,而跟这个类的实例(对象)没有关系。

    如果一个对象中既有同步方法也有同步块,那么当一个线程访问其中的一个同步方法或同步块时,其他线程无法访问其他同步方法或同步块。

详情:https://www.cnblogs.com/duanxz/p/3709608.html?utm_source=tuicool&utm_medium=referral

11.wait与sleep的区别

      对于sleep()方法,我们首先要知道该方法是属于Thread类中的。而wait()方法,则是属于Object类中的。

      sleep()方法导致了程序暂停执行指定的时间,让出cpu给其他线程,但是他的监控状态依然保持者,当指定的时间到了又会自动恢复运行状态。在调用sleep()方法的过程中,线程不会释放对象锁。

     而当调用wait()方法的时候,线程会放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象调用notify()方法后本线程才进入对象锁定池准备获取对象锁进入运行状态。

12.java各类型所占字节数

     Int: 4 字节
     Short: 2字节
     Long: 8字节
     Byte: 1字节
     Character: 2字节
     Float: 4字节
     Double: 8字节

13.jsp页面向后台传值的四种方式?

 1)通过Form表单提交传值 客户端通过Form表单提交到服务器端,服务器端通过request.getParameter(String xx);来取得参数(xx)为参数名称。通过get/post方式进行提交。

 2)通过隐藏域传值

    通过在表单中加入一个隐藏域来提交到服务器端,这种方式的好处是可以在客户端加入一些自己想要加入的参数,以便得到相应的值。

   客户端代码:<input type="hidden" name="id" value=""/>

   服务器端取值:String id=request.getParameter("id");

  3)通过URL传值 这种传值方式是通在Java代码 来进行传值。xx.jsp表示提交到处理的页面,后面的?号后的是要传的参数和其值,参数与参数之间用&进行分离。

 4)通过JavaBean进行传值 即通过Java中的自省机制,将所有表单的值传入到一个JavaBean中。

原文地址:https://www.cnblogs.com/menbo/p/9858718.html