java基础面试题

1.String,StringBuffer, StringBuilder 的区别是什么?String为什么是不可变的?
String对象是不可变对象,每次修改都相当于生成新的对象。StringBuffer是可变对象,每次修改都针对其本身。
StringBuffer跟StringBuilder基本类似,但StringBuffer是线程安全的,StringBuilder是非线程安全的,效率上比StringBuffer高。
StringBuffer使用时最好指定容量,这样会比不指定容量快30%-40%,甚至比不指定容量的StringBuilder还快。


2.Vector,ArrayList, LinkedList的区别是什么?
Vector跟ArrayList都是基于数组的线性表,但Vector是线程安全的,ArrayList是非线程安全的,效率上比Vector高。
LinkedList是基于链表的线性表,是非线程安全的,在set和get操作上,ArrayList的效率高于LinkedList。
而在add和remove操作上,LinkedList占优。
linkedlist比arraylist更占内存,因为linkedlist每个节点上还要存储对前后两个节点的引用。


3.HashMap,Hashtable的区别?
HashMap和Hashtable都实现了Map接口,但Hashtable是线程安全的,HashMap是非线程安全的,所以效率比Hashtable高。
还有HashMap的key和value值可以为null,而Hashtable的key和value值不能为null。


4、ConcurrentHashMap和Hashtable的区别?

两者均应用于多线程中,是线程安全的,但当HashTable增大到一定程度时,其性能会急剧下降。因为迭代时会被锁很长时间。
而ConcurrentHashMap则通过引入分割来保证锁的个数不会很大。
简而言之就是HashTable会锁住真个map,而ConcurrentHashMap则只需要锁住map的一个部分。


5.Tomcat,Apache,Jboss的区别?

Tomcat是Servlet容器,用于解析jsp,servlet,是一个轻量级高效的容器,但不支持EJB。
Apache是http服务器,类似于IIS可以用来建立虚拟站点,编译处理静态页面。支持SSL技术,支持多个虚拟机功能。
Jboss是应用服务器,运行EJB的JavaEE应用服务器,遵循JavaEE规范,能够提供更多平台支持和更多集成功能,如数据库连接,JCA。
其对servlet的支持是通过集成其他servlet容器来实现的。如tomcat。


6.get,post的区别?

①get请求用来从服务器上获得资源,而post是用来向服务器提交数据; 
②get将表单中数据按照name=value的形式,添加到action 所指向的URL 后面,并且两者使用"?"连接,而各个变量之间使用"&"连接;post是将表单中的数据放在HTTP协议的请求头或消息体中,传递到action所指向URL; 
③get传输的数据要受到URL长度限制(1024字节);而post可以传输大量的数据,上传文件通常要使用post方式; 
④使用get时参数会显示在地址栏上,如果这些数据不是敏感数据,那么可以使用get;对于敏感数据还是应用使用post; 
⑤get使用MIME类型application/x-www-form-urlencoded的URL编码(也叫百分号编码)文本的格式传递参数,保证被传送的参数由遵循规范的文本组成,例如一个空格的编码是"%20"。
⑤对于get方式,服务区端用request.QueryString获取变量值,对于post方式,服务器端用request.Form获取提交的数据。
  
7.session和cookie的区别?
cookie数据保存在客户端,不安全,存储的数据量有限。
session数据保存在服务器,有特定的sessionID标识,存储的数据量大,安全性高。占用服务器资源。
单个cookie保持的数据不超过4k,很多浏览器都限制要给站点最多保存20个cookie。


8.servlet的生命周期?

1,实例化一个Servlet,并且调用init()初始化
2,调用service()方法,根据具体的请求调用doget()或者dopost()或者其他
3,卸载webApp之前,先调用destroy(),销毁示例,释放相应的资源;


9、Statement与PreparedStatement的区别,什么是SQL注入,如何防止SQL注入?
PreparedStatement预编译SQL语句,性能更好。无须拼接SQL语句,编程更简单,可以防止SQL注入,安全性更好。
SQL注入指通过SQL命令插入到web表单提交,或输入域名,或页面请求的查询字符串,最终达到欺骗服务器执行恶意SQL命令。


10、redirect与forward的区别?
redirect服务器根据逻辑,发送一个状态码,告诉浏览器去请求那个地址,因此可以从浏览器中看到跳转后的链接地址。
forword是服务器请求资源,服务器直接访问目标地址的URL,把那个URL 的响应内容读取过来,然后把这些内容再发给浏览器,
浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原来的地址。
redirect不能共享数据,forward转发页面和转发到页面可以贡献request中的数据。redirect用于注销,forward用于登陆。forward效率高于redirect。



你可能感兴趣的:(Java基础,java面试题)