为了找到一份好的java工做,网上找来一份java面试题,对本身掌握的知识进行查缺补漏html
2015-8-20 beginjava
1.编写程序,完成文件复制功能程序员
public static void copyFile(File srcFile,File destFile)throws IOException{ if(!srcFile.exists()){ throw new IllegalArgumentException("文件:"+srcFile+"不存在"); } if(!destFile.exists()){ throw new IllegalArgumentException(destFile+"不是文件"); } FileInputStream in = new FileInputStream(srcFile); FileOutputStream out = new FileOutputStream(destFile); byte[] buf = new byte[8 * 1024]; int bytes = 0; while((bytes = in.read(buf , 0 , buf.length))!= -1){ out.write(buf,0,bytes); out.flush(); } out.close(); in.close(); } /* * 文件 */ public static void copyFileByBuffer(File srcFile,File destFile)throws IOException{ if(!srcFile.exists()){ throw new IllegalArgumentException("文件:"+srcFile+"不存在"); } if(!destFile.exists()){ throw new IllegalArgumentException(destFile+"不是文件"); } BufferedInputStream bis = new BufferedInputStream( new FileInputStream(srcFile)); BufferedOutputStream bos = new BufferedOutputStream( new FileOutputStream(destFile)); int b; while((b = bis.read())!=-1){ bos.write(b); bos.flush(); } bis.close(); bos.close(); } /* * 单字节,不带缓冲进行文件拷贝 */ public static void copyFileByByte(File srcFile,File destFile)throws IOException{ if(!srcFile.exists()){ throw new IllegalArgumentException("文件:"+srcFile+"不存在"); } if(!destFile.exists()){ throw new IllegalArgumentException(destFile+"不是文件"); } FileInputStream in = new FileInputStream(srcFile); FileOutputStream out = new FileOutputStream(destFile); int b; while((b = in.read()) != -1){ out.write(b); out.flush(); } in.close(); out.close(); }
2.Servlet建立过程及生命周期Servlet 在容器中运行时,其实例的建立及销毁等是由容器进行控制。web
建立方法有两种:面试
1.客户端请求对应的servlet,建立servletspring
2.根据web.xml中设置,建立。
1.建立servlet实例。sql
2.调用init方法对servlet初始化数组
3.根据客户端http请求,调用doxxx()方法浏览器
4.调用servlet的destory()方法销毁安全
3用sql语句分页:
select Top 页大小 from 表名 where id NOT IN ( select Top 页大小 *(页数) from 表名 order by id ) order by id
hibernate实现分页更加方便
queryObject.setFirstResult((pageNo - 1) *pageSize); queryObject.setMaxResult(pageSize);
4.list.map.set的存储特色?
list是有特定顺序的排列,能够有重复数值
set是无序的,不能够有重复数值
map储存方式为key-value方式
网上的答案:
List 以特定次序来持有元素,可有重复元素.
Set 没法拥有重复元素,内部排序.
Map 保存key-value值,value可多值
有关于储存结构的另外问题:
1.arraylist和vector的区别?
同步性:arrayList线程是不安全的,不一样步的,vector是线程是安全的,可是不一样步。
数据增加:当数据增加时,vector按默认增加的一倍,而arrayList是原来的一半。
2.说出ArrayList,Vector, LinkedList的存储性能和特性?
网上答案[暂未不理解]
ArrayList 采用的是数组形式来保存对象的,这种方式将对象放在连续的位置中,因此最大的缺点就是插入删除时很是麻烦 LinkedList 采用的将对象存放在独立的空间中,并且在每一个空间中还保存下一个连接的索引 可是缺点就是查找很是麻烦 要丛第一个索引开始
ArrayList和Vector都是用数组方式存储数据,此数组元素数要大于实际的存储空间以便进行元素增长和插入操做,他们都容许直接用序号索引元素,可是插入数据元素涉及到元素移动等内存操做,因此索引数据快而插入数据慢.
Vector使用了sychronized方法(线程安全),因此在性能上比ArrayList要差些.
LinkedList使用双向链表方式存储数据,按序号索引数据须要前向或后向遍历数据,因此索引数据慢,是插入数据时只须要记录先后项便可,因此插入的速度快.
知识补充:
(1)什么是同步?
资料:http://blog.csdn.net/treeroot/article/details/254008
(2)为何arraylist不一样步?
ArrayList中:
public boolean add(Object o) {
...
}
vector中:
public synchronized void addElement(Object obj){
...
}
synchronized意思简单说就是
lock();
add();
unlock();
(3)为何要同步?
为了防止多个线程对同一数据的修改,因此须要同步,不然会形成数据不一致。Java提供了很是方便的多线程支持,因此说同步问题比较广泛,尤为是Servlet和
JSP的线程安全问题特别明显。
(4)arrayList跟linkedList插入删除元素?
ArrayList底层的实现是数组,因此用下标访问的速度比较快,可是插入和删除元素,会有移动元素的开销,因此速度比LinkedList差。LikedList底层是链表实现的,因此插入和删除元素时间复杂度较LinkedList好,可是随即访问须要遍历元素,因此效率比ArrayList差。
5.final,finally,finaliz的区别
网上答案:
final—修饰符(关键字)若是一个类被声明为final,意味着它不能再派生出新的子类,不能做为父类被继承。所以一个类不能既被声明为 abstract的,又被声 明为final的。将变量或方法声明为final,能够保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值,而在之后的引用中只能读取,不可修改 被声明为final的方法也一样只能使用,不能重载。
finally—再异常处理时提供 finally 块来执行任何清除操做。若是抛出一个异常 ,那么相匹配的 catch 子句就会执行,而后控制就会进入 finally 块(若是有的话)。
finalize—方法名。Java 技术容许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去以前作必要的清理工做。这个方法是由垃圾收集器在肯定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的,所以全部的类都继承了它。子类覆盖 ;finalize() 方法以整理系统资源或者执行其余清理工做 finalize() 方法是在垃圾收集器删除对象以前对这个对象调用的。
----2015-8-20--end
----2015-8-21-begin
1.HASHMAP,HASHTABLE区别
HashMap是Map接口的实现类,在缺省的状况下是非同步的
Hashtable是dictionary的子类,是同步的
HashMap中,null能够做为键,这样的键只有一个;能够有一个或多个键所对应的值为null。【这句话理解起来有点怪怪的】
详细说明:第一点:Hashtable是基于陈旧的dictionary类的,而HashMap是java 1.2引进的Map接口的一个实现,
即HashMap去掉了Hashtable的一些方法,如:contains方法,相应的加上了containsValue()和containsKey()方法。
第二点:Mashtable是同步的,而HashMap的方法不是。也就是说你必须腰围HashMap提供一个同步,一个方便的方式就是利用Contional类的静态的synchronizedMap()方法,他建立一个线程安全的Map对象,并把他做为一个封装的对象来返回。
第三点:HashMap可让你将空值做为一个表的条目的key或value。HashMap中只有一条记录能够是一个空的key,但任意数量的条目能够是空的value。
具体HashMap的实现原理:http://blog.csdn.net/vking_wang/article/details/14166593
2.描述Cookie和Session的做用,区别和各自的应用范围,Session工做原理
Session用于保存每一个用户的专用信息. 每一个客户端用户访问时,服务器都为每一个用户分配一个惟一的会话ID(Session ID) . 她的生存期是用户持续请求时间再加上一段时间(通常是20分钟左右).Session中的信息保存在Web服务器内容中,保存的数据量可大可小.当 Session超时或被关闭时将自动释放保存的数据信息.因为用户中止使用应用程序后它仍然在内存中保持一段时间,所以使用Session对象使保存用户数据的方法效率很低.对于小量的数据,使用Session对象保存仍是一个不错的选择
Cookie 用于保存客户浏览器请求服务器页面的请求信息,程序员也能够用它存放非敏感性的用户信息,信息保存的时间能够根据须要设置.若是没有设置Cookie失效日期,它们仅保存到关闭浏览器程序为止.若是将Cookie对象的Expires属性设置为Minvalue,则表示Cookie永远不会过时.Cookie存储的数据量很受限制,大多数浏览器支持最大容量为4K,所以不要用来保存数据集及其余大量数据.因为并不是全部的浏览器都支持Cookie,而且数据信息是以明文文本的形式保存在客户端的计算机中,所以最好不要保存敏感的,未加密的数据,不然会影响网站的安全性
session工做原理
(1)当有Session启动时,服务器生成一个惟一值,称为Session ID(好像是经过取进程ID的方式取得的)。
(2)而后,服务器开辟一块内存,对应于该Session ID。
(3)服务器再将该Session ID写入浏览器的cookie。
(4)服务器内有一进程,监视全部Session的活动情况,若是有Session超时或是主动关闭,服务器就释放改内存块。
(5)当浏览器连入IIS时并请求的ASP内用到Session时,IIS就读浏览器Cookie中的Session ID。
(6)而后,服务检查该Session ID所对应的内存是否有效。
(7)若是有效,就读出内存中的值。
(8)若是无效,就创建新的Session。
3.String和stringbuffer进行字符串链接时的区别?
String对项内容是不可改变,StringBuffer是能够改变的,且高效;具体能够查看:http://www.cnblogs.com/springcsc/archive/2009/12/03/1616330.html
4.J2EE J是什么意思? 2是什么意思 EE是什么意思? Struts的拦截器你是怎么作的,是独立开发的,可以独立开发的到。而后问有哪几种拦截? 简单介绍下java?Spring的AOP,IOC的讲述 对struts2的了解,1,2的比较 xml的了解 J2ee的webserviced的协议?
java 2 Platform,Enterprise Edition
继承AbstractInterceptor类,覆盖intercept()方法
有struts本身的拦截器 如timer ,i18n,scop,servletconfig,token
还有自定义拦截器
Spring AOP:代理机制 Spring提供的自动代理机制
Spring的IoC来实组件之间的依赖关系注入, 使控制层与业务实现分离,即客户经过
调用业务委托接口来调用具体的业务组件的实例,避免控制层与业务层的藕合带来的维护
或升级困难。由Spring为DAO生成代理对象来为DAO添加事务服务,由IoC容器DAO的代理实例注入到业务组件中,业务组件
5.Collections,collection的区别
Collection是个java.util下的接口,它是各类集合结构的父接口。Collections是个java.util下的普通类,它包含有各类有关集合操做的静态方法。
----2015-8-21 end