标签:
为了找到一份好的java工作,网上找来一份java面试题,对自己掌握的知识进行查缺补漏
2015-8-20 begin
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 在容器中运行时,其实例的创建及销毁等是由容器进行控制。
创建方法有两种:
1.客户端请求对应的servlet,创建servlet
2.根据web.xml中设置,创建。
1.创建servlet实例。
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使用双向链表方式存储数据,按序号索引数据需要前向或后向遍历数据,所以索引数据慢,是插入数据时只需要记录前后项即可,所以插入的速度快.
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
标签:
原文地址:http://my.oschina.net/u/1782502/blog/495042