java笔试题收集(更新中……)

1.怎么处理ajax的缓存?

ajax缓存:当再次请求同一url时,浏览器会直接取出缓存里的内容返回,而不向服务器端发送请求.这只有在提交方式使用get时才会发生,解决方法是在url后面加上一个参数来告诉浏览器这是一个新的请求,通常可以用new Date()来生成时间戳.而post方式提交每次都会向服务器发送请求,不要考虑缓存.

Ajax缓存  在控制层 返回到页面前添加
response.setHeader("Cache-Control","no-cache");
response.setHeader("Pragma","no-cache");

2.struts的启动流程?

流程:
¤     客户请求匹配Action URI 样式的路径。
¤     容器将请求传递给ActionServlet。
¤     如果这个是模块化应用,ActionServlet 选择响应的模块。
¤     ActionServlet 查询路径的映射。
¤     如果映射标明了一个form bean,ActionServlet 看是否已经有一个实例,或者创建一个新的实例。如果已经有一个form bean,ActionServlet 重设它,并根据HTTP请求重新组装它。
¤     如果 mapping 的 validate 属性设置为 true, 它将调用 form bean 的validate 方法。
¤     如果失败,Servlet 将控制转发到input 属性标明的路径,控制流终止。
¤     如果mapping 标明一个Action 类型,如果它已经存在或已经实例化,它将被重用。
¤     Action的perform 或 execute 方法被调用,并传递一个实例化的form bean (或者 null)。
¤     Action 可以组装form bean, 调用业务对象,以及其他需要做的事情。
¤     Action 返回一个ActionForward 给ActionServlet。
¤     如果ActionForward 指向另一个 Action URI,重新开始; 否则,显示页面或者其他资源,流程结束。

3.2个字符串比较大小?如:String str1="a"; String str2="b";

4.abstract class Something {
   private abstract String doSomething ();
}

该段代码有错吗?

答案: 错。abstract的methods不能以private修饰。abstract的methods就是让子类implement(实现)具体细节的,怎么可以用private把abstract
method封锁起来呢? (同理,abstract method前不能加final)。

5.看看下面的代码段错在哪里?

public class Something {
   void doSomething () {
       private String s = "";
       int l = s.length();
   }
}

答案: 错。局部变量前不能放置任何访问修饰符 (private,public,和protected)。final可以用来修饰局部变量
(final如同abstract和strictfp,都是非访问修饰符,strictfp只能修饰class和method而非variable)。

6. 下面该段代码是否有错,若是有错错在哪里?
abstract class Name {
   private String name;
   public abstract boolean isStupidName(String name) {}
}

答案: 错。abstract method必须以分号结尾,且不带花括号。

7.Collection 和 Collections的区别?
Collection是集合类的上级接口,继承与他的接口主要有Set 和List.
Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。

8.Overload和Override的区别?
方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被"屏蔽"了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型

9.abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized?
都不能

10.4棵树,怎么栽让他们两棵树之间的距离相等
4个等边三角形

11.Error与Exception有什么区别?
Error表示系统级的错误和程序不必处理的异常,
Exception表示需要捕捉或者需要程序进行处理的异常。

12.谈谈final, finally, finalize的区别
final—修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract的,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,不能重载。
  finally—再异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块(如果有的话)。
  finalize—方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的,因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。

13.Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)?

匿名的内部类是没有名字的内部类。不能extends(继承) 其它类,但一个内部类可以作为一个接口,由另一个内部类实现。

14.用1、2、2、3、4、5这六个数字,用java写一个main函数,
打印出所有不同的排列,如:512234、412345等,要求:"4"不能在第三位,
"3"与"5"不能相连。

import java.util.ArrayList;      
import java.util.List;      
     
public class GetAll {      
 List list=new ArrayList();      
 public GetAll(){      
  list.add("22");      
 }      
 public void AllOrder(String str){      
  List listlin=new ArrayList();      
  for(int i=0;i<list.size();i++){      
   String nstr=(String )list.get(i);      
   nstr=str+nstr;      
   String cmpstr=nstr;      
   listlin.add(nstr);      
   nstr=ChangeStr(nstr);      
   while(!cmpstr.equals(nstr)){      
    listlin.add(nstr);      
    nstr=ChangeStr(nstr);      
   }      
  }      
  list.clear();      
  list.addAll(listlin);      
 }      
       
 public void OutAll(){      
  //过虑      
  for(int j=0;j<list.size();j++){      
   String outstr=(String)list.get(j);      
   if((outstr.indexOf("3")+1==outstr.indexOf("5")) || (outstr.indexOf("3")-1==outstr.indexOf("5"))||(outstr.indexOf("4")==2))      
                    continue;      
             System.out.println("-----------"+outstr);      
         
  }      
 }      
 public String ChangeStr(String str){      
  char arr[]=str.toCharArray();      
  char first=arr[0];      
  str=str.substring(1,str.length())+first;      
  return str;      
 }      
 public static void main(String args[]){      
  GetAll getall=new GetAll();      
  getall.AllOrder("1");      
  getall.AllOrder("3");      
  getall.AllOrder("4");      
  getall.AllOrder("5");      
  getall.OutAll();      
 }      
} 


15.看看下面这个代码段是否有错?

interface  A{
   int x = 0;
}
class B{
   int x =1;
}
class C extends B implements A {
   public void pX(){
      System.out.println(x);
   }
   public static void main(String[] args) {
      new C().pX();
   }
}

答案:错误。在编译时会发生错误(错误描述不同的JVM有不同的信息,意思就是未明确的x调用,两个x都匹配(就象在同时import java.util和java.sql两个包时直接声明Date一样)。对于父类的变量,可以用super.x来明确,而接口的属性默认隐含为 public static final.所以可以通过A.x来明确。

16.来自:pupi 一道java面试题

碰到一个java题目,要求1000!(1000*999*998...*2*1)的值。

BigDecimal big = new BigDecimal(1); 
   for(int i=1; i<1001; i++) { 
     big = big.multiply(new BigDecimal(i)); 
     } 
   big.setScale(100); 
   System.out.println(big); 

17.来自:SpringArt 一著名软件公司的java笔试算法题!

原题如下:用1、2、2、3、4、5这六个数字,用java写一个main函数,打印出所有不同的排列,如:512234、412345等,要求:"4"不能在第三位,"3"与"5"不能相连.
解决思路:强化题目,用1、2、2、3、4、5这六个数字排列“递增”序列。其他要求不变。

import java.util.Iterator; 
import java.util.TreeSet; 

public class TestQuestion { 

private String[] b = new String[]{"1", "2", "2", "3", "4", "5"}; 
private int n = b.length; 
private boolean[] visited = new boolean[n]; 
private int[][] a = new int[n][n]; 
private String result = ""; 
private TreeSet set = new TreeSet(); 

public static void main(String[] args) { 
new TestQuestion().start(); 
} 

private void start() { 

// Initial the map a[][] 
for (int i = 0; i < n; i++) { 
for (int j = 0; j < n; j++) { 
if (i == j) { 
a[i][j] = 0; 
} else { 
a[i][j] = 1; 
} 
} 
} 

// 3 and 5 can not be the neighbor. 
a[3][5] = 0; 
a[5][3] = 0; 

// Begin to depth search. 
for (int i = 0; i < n; i++) { 
this.depthFirstSearch(i); 
} 

// Print result treeset. 
Iterator it = set.iterator(); 
while (it.hasNext()) { 
String string = (String) it.next(); 
// "4" can not be the third position. 
if (string.indexOf("4") != 2) { 
System.out.println(string); 
} 
} 
} 

private void depthFirstSearch(int startIndex) { 
visited[startIndex] = true; 
result = result + b[startIndex]; 
if (result.length() == n) { 
// Filt the duplicate value. 
set.add(result); 
} 
for(int j = 0; j < n; j++) { 
if (a[startIndex][j] == 1 && visited[j] == false) { 
depthFirstSearch(j); 
} else { 
continue; 
} 
} 

// restore the result value and visited value after listing a node. 
result = result.substring(0, result.length() -1); 
visited[startIndex] = false; 
} 
} 


  *  3,5不能相连:实际要求这个连通图的结点3,5之间不能连通, 可在构造图结构时就满足改条件,然后再遍历图。
代码中请注意这几行:
// 3 and 5 can not be the neighbor.
a[3][5] = 0;
a[5][3] = 0;

18.Hibernate外键关联,做多表链接查询出的字段如果没有实体bean与之相对应,该如何解决?
Hibernate的sessionfactory和session的区别是什么?如何处理session线程不安全问题?
Hibernate如何实现动态查询?DetachedCriteria与Criteria的区别是什么?
Jdk1.6的新技术Annotation有什么特点和作用?大量应用在哪些领域,具体是如何做的举例
你对搜索引擎lucene的原理能讲述一下吗?他有那些常用的框架?


19.如何实现一个表达式的验证,例如{01}=({09}+{02})-{03};花括号的内部是代号,不需要管,怎样验证它,包括=,_,*,/,(,),;使它成为合格的表达式?

可以通过正则表达式,括号一定要是对应的,表达式的左边必须是只有一个,表达式的右边可以使多个,包括加减乘除和括号。

20.
1 实现telnet到某台主机,在判断正确登陆下,输入ipconfig提取出
登陆主机的ip地址及"ip address"值.

2 实现socket,能接收几个客户端发出的请求,解析出来,假设包的结构为
序列 long 名称 string 次数 int,将这些数据再打包发给客户端.

3 举出你常用的设计模式及场景

4 请举出用程序能快速消耗CPU的的几个方法

5 人民币大小写转换问题

6 写出测试的V模型的含义

7 一个bug report一般包括哪几部分,请说明

21.

你可能感兴趣的:(java,Ajax,Hibernate,bean,正则表达式)