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中。