收集面试题

本文详细介绍了Java中的String,StringBuffer,StringBuilder等基本数据类型的使用区别,深入探讨了Vector,ArrayList,LinkedList等集合类的特点与应用场景,并对GET与POST请求、Session与Cookie的工作机制进行了对比分析。
一、String,StringBuffer, StringBuilder 的区别是什么?String为什么是不可变的?
String在Java中是final的类,所以不可变;StringBuffer是同步的,StringBuilder是不同步的。后2者可以通过append改变引用指向的 对象。而String则做不到,String只能通过在内存中添加新的对象,将引用指向该新对象。

二、VECTOR,ARRAYLIST, LINKEDLIST的区别是什么?
Vector是同步的,而后2者是非同步的。因此Vector的性能很差,而ArrayList类似于数组,获得索引快,插入数据效率低; LinkedList是双向链表,按序号索引数据需要进行向前或向后遍历 但 插入比较快。

三、HASHTABLE, HASGMAP,TreeMap区别
Hashtable是同步的,而HashMap是不同步的。TreeMap必须实现排序的规则。(以下为搜索答案)


Hashmap 是一个 最常用的Map,它根据键的HashCode 值存储数据,根据键可以直接获取它的值,具有很快的访问速度。HashMap最多 只允许一条记录的键为Null;允许多条记录的值为Null;HashMap不支持线程的同步,即任一时刻可以有多个线程同时写HashMap;可能 会导致数据的不一致。如果需要同步,可以用Collections的synchronizedMap方法使HashMap具有同步的能力.
Hashtable 与 HashMap类似,不同的是:它不允许记录的键或者值为空;它支持线程的同步,即任一时刻只有一个线程能写Hashtable, 因此也导致了Hashtale在写入时会比较慢。
LinkedHashMap保存了记录的插入顺序,在用Iterator遍历LinkedHashMap时,先得到的记录肯定是先插入的.在遍历的时候会比 HashMap慢。
TreeMap能够把它保存的记录根据键排序,默认是按升序排序,也可以指定排序的比较器,当用Iterator 遍历TreeMap时,得到的记录 是排过序的。

四、ConcurrentMap和HashMap的区别
http://mooncui.iteye.com/blog/380884

五、Tomcat,apache,jboss的区别
http://nneverwei.iteye.com/blog/494266

六、GET POST区别
Get方式发送的请求,请求的内容会附带显示在浏览器地址栏,长度受浏览器限制;Post方式发送的请求,内容没有长度限制,对于 密码之类的表单信息最好用post来发送。同时点击超链接,在地址栏直接发送请求的方式,以及表单的默认提交方式为Get,Post需 要显式指名表单提交的method为post。

http://www.cnblogs.com/wxf0701/archive/2008/08/17/1269798.html

七、SESSION, COOKIE区别
Session为服务器端的技术,而Cookie是客户端通过浏览器来保存少量的用户信息。Session的能在多次请求/响应中有效,但是一旦 关闭浏览器,Session将失效,而Cookie则会根据setMaxAge函数来控制有效时间,0则立即删除该Cookie,<0保存在内存中,>0则 保存在磁盘文件上。

http://yahaitt.iteye.com/blog/145820

八、Servlet的生命周期
init -> service -> destroy
init和destroy只会执行一次,而service会根据请求多次调用

九、HTTP 报文包含内容
Content-type, ip地址,端口,主机信息,请求类型,请求内容等。

十、Statement与PreparedStatement的区别,什么是SQL注入,如何防止SQL注入
PreparedStatement可以利用setter方法来防止sql注入,而Statement也不行。

十一、redirect, foward区别
redirect为重定向,重定向的地址可以任意,可以是服务器内部的页面,也可以是任意的网站,请求的地址会显示在浏览器地址栏。 而forward是转发的意思,即一次任务还没有处理完毕,将任务转发给另一web组建继续完成任务,forward会共享 request/response,而请求的地址不会显示在地址栏。

十二、关于JAVA内存模型,一个对象(两个属性,四个方法)实例化100次,现在内存中的存储状态,几个对象,几个属性,几个方法。

十三、谈谈Hibernate的理解,一级和二级缓存的作用,在项目中Hibernate都是怎么使用缓存的
十四、反射讲一讲,主要是概念,都在哪需要反射机制,反射的性能,如何优化
十五、谈谈Hibernate与Ibatis的区别,哪个性能会更高一些
十六、对Spring的理解,项目中都用什么?怎么用的?对IOC、和AOP的理解及实现原理
十七、线程同步,并发操作怎么控制
十八、描述struts的工作流程。
十九、Tomcat的session处理,如果让你实现一个tomcatserver,如何实现session机制
二十、关于Cache(Ehcache,Memcached)
二一、sql的优化相关问题
二二、oracle中 rownum与rowid的理解,一千条记录我查200到300的记录怎么查?
二三、如何分析ORACLE的执行计划?
二四、 DB中索引原理,种类,使用索引的好处和问题是什么?
二五、JVM垃圾回收实现原理。垃圾回收的线程优先级。
二六、jvm 最大内存设置。设置的原理。结合垃圾回收讲讲。

1. java中 hashcode相同, equal一定相同嘛

答: 不一定,因为hashcode,equal方法可以重写



2 . 理解spring么,它的AOP实现是基于什么原理,bean的初始化过程是那些(涉及具体的源代码),在bean factory初始化前 ,运行中,初始化后想做些事情。该怎么做?
答: spring的AOP基于cglib,对代码做混淆。 bean初始化的时候,首先读取XML配置文件,解析完成Bean的组装,由BeanFactory组装生成Bean, 可以指定是单例或者new instance, 具体可以参看我以前的博文

http://blog.youkuaiyun.com/nanjingjiangbiao/article/details/7173098



3 struts1和strus2的区别,strust2关于 ThredLocal是什么,strus2初始化部分的原理是什么。
答: 1是基于sevlert的MVC,2是基于filter。1中Action,Form分离, 2中合并在Action中。 1中Action是单例,非线程安全。 2中Action每个http request thread一个new instance.

ThreadLocal是线程变量, 将该变量副本存入当前线程的栈中,从语法级实现线程隔离。


4. 多线程用过么?

答: 不如问线程如何同步或者协同。 Java的异步包中提供, 同步阀。 线程之间通信, 一般可以通过共享变量做到。 如果大型的话, 可以用消费者生产者模式。 线程池, Java的异步包也提供API, 只需要将线程包装成FutureTask就可。


5关于jvm,它是什么样的结构?,他的Gc算法是什么,什么情况下会 out of memory?

答: 基于栈的编译器实现。 GC算法一般来说是回溯引用树,然后找到没有引用的节点,将其移入old gen, 这是 young GC, 在old gen已经全满的情况, 执行full gc。 out of memory发生在没有空间开辟内存, 不光出现在heap中, 方法区中也会。

6.连接池原理,连接池commit 后连接是否关闭。

答: JDBC协议本身定义了 con pool, WebApp初期化之后, 代码底层, 在当前JVM上创立一个ObjectMap, 每个Object中包装了对数据库的tcp连接,帐号密码等。

con pool一开始是空的, 当有新con 要求的时候, 才会在conn pool中增加object。 conn pool中的conn不会被关闭, 但过一段时间会进入休眠状态, 即钝化。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值