`

本人java笔试常见题目小结

    博客分类:
  • java
阅读更多

注:这是本人java笔试常见题目小结,不是笔试题大全,也不一定是其他公司常见面试题。

1.Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?

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

 

2.servlet的生命周期

web容器加载servlet,生命周期开始。通过调用servlet的init()方法进行servlet的初始化。通过调用service()方法实现,根据请求的不同调用不同的do***()方法。结束服务,web容器调用servlet的destroy()方法。

servlet生命周期.jpg 见附件

 

3.说出ArrayList,Vector, LinkedList的存储性能和特性
ArrayList
Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,如果元素的数目超出了内部数组目前的长度它们都需要扩展内部数组的长度,Vector缺省情况下自动增长原来一倍的数组长度,ArrayList是原来的50%,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢Vector由于使用了synchronized同步方法保证线程安全,通常性能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快

4.final, finally, finalize的区别。 
  final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。
finally
是异常处理语句结构的一部分,表示总是执行。
finalize
Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。

 

5.forward 和redirect的区别
forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原来的地址。
    redirect就是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,一般来说浏览器会用刚才请求的所有参数重新请求,所以session,request参数都可以获取。

6.JSP中动态INCLUDE与静态INCLUDE的区别?
动态INCLUDE用jsp:include动作实现 <jsp:include page="included.jsp" flush="true" />它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数。
静态INCLUDE用include伪码实现,不会检查所含文件的变化,适用于包含静态页面<%@ include file="included.htm" %>

7.设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。
以下程序使用内部类实现线程,对j增减的时候没有考虑顺序问题。
public class ThreadTest1{
  private int j;
  public static void main(String args[]){
ThreadTest1 tt=new ThreadTest1();
Inc inc=tt.new Inc();
Dec dec=tt.new Dec();
for(int i=0;i<2;i++){
Thread t=new Thread(inc);
t.start();
t=new Thread(dec);
t.start();
}
}
  private synchronized void inc(){
j++;
System.out.println(Thread.currentThread().getName()+"-inc:"+j);
  }
  private synchronized void dec(){
j--;
System.out.println(Thread.currentThread().getName()+"-dec:"+j);
  }
  class Inc implements Runnable{
public void run(){
for(int i=0;i<100;i++){
inc();
}
}
  }
  class Dec implements Runnable{
public void run(){
for(int i=0;i<100;i++){
dec();
}
 }
  }
}

8.编程题: 写一个Singleton出来。
Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。
一般Singleton模式通常有几种种形式:
第一种形式: 定义一个类,它的构造函数为private的,它有一个static的private的该类变量,在类初始化时实例话,通过一个public的getInstance方法获取对它的引用,继而调用其中的方法。
public class Singleton {
private Singleton(){}
      //在自己内部定义自己一个实例,是不是很奇怪?
      //注意这是private 只供内部调用
      private static Singleton instance = new Singleton();
      //这里提供了一个供外部访问本class的静态方法,可以直接访问  
      public static Singleton getInstance() {
        return instance;   
      }
    }
    第二种形式:
public class Singleton {
  private static Singleton instance = null;
  public static synchronized Singleton getInstance() {
  //这个方法比上面有所改进,不用每次都进行生成对象,只是第一次     
  //使用时生成实例,提高了效率!
  if (instance==null)
    instance=new Singleton();
return instance;   }
}
其他形式:
定义一个类,它的构造函数为private的,所有方法为static的。
一般认为第一种形式要更加安全些

9.编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出为“我ABC”而不是“我ABC+汉的半个”。

public class SubStringTest {

	public static void main(String[] args) {
		String inStr = "我ABC";
		String str = subString(inStr, 4);
		System.out.println(str);

		inStr = "我ABC汉DEF";
		str = subString(inStr, 6);
		System.out.println(str);
	}

	/**
	 * 字符串按字节截取
	 * @param str 原字符
	 * @param len 截取长度
	 * @return String
	 * @author zheng
	 */
	public static String subString(String str, int len) {
		if (str == null || ("").equals(str)) {
			return "";
		}
		byte[] strByte = null;
		try {
			strByte = str.getBytes("GBK");
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
		int strLen = strByte.length;
		if (len >= strLen || len < 1) {
			return str;
		}
		int count = 0;
		for (int i = 0; i < len; i++) {
			int value = (int) strByte[i];
			if (value < 0) {
				count++;
			}
		}
		if (count % 2 != 0) {
			len = (len == 1) ? len + 1 : len - 1; 
		}
		
		return str.substring(0, len-1);
	}
}

 

 

  • 大小: 18.7 KB
  • 大小: 9.1 KB
分享到:
评论
12 楼 J-catTeam 2010-03-26  
seraphim871211 写道
J-catTeam 写道
crabboy 写道
diaodou 写道
Singleton必须添加private构造函数,不然就失去singleton的意义了。而且,性能太差了,会继续追问有很有更好的方式?


对这个话题请继续谈谈。。。。

我也觉得奇怪:性能差在哪里


Singleton类肯定要提供默认的private构造函数,要不然就不叫Singleton了。
另外,楼主的第一种方式是空间换时间。第二种方式:
引用

第二种形式:
public class Singleton {
  private static Singleton instance = null;
   public static synchronized Singleton getInstance() {
  //这个方法比上面有所改进,不用每次都进行生成对象,只是第一次     
  //使用时生成实例,提高了效率!
  if (instance==null)
    instance=new Singleton();
return instance;   }
}


在每次调用Singleton.getInstance()方法的时候都用synchronized同步确实会影响性能,实际上除了第一次instance==null时需要同步,初始化之后同步是没有必要的。通常会这样写:
public class Singleton{
    private volatile static Singleton instance = null;

    private Singleton(){}

    public static Singleton getInstance(){
        if(instance == null){
        	synchronized(Singleton.class){
        		if(instance == null){
        			instance = new Singleton();
        		}
        	}
        }
        
        return instance;
    }
}

上述代码保证了只在第一次初始化时同步多线程的安全,性能也不错。唯一的缺点是可能在某些老式的JVM上还是会出现多线程不安全的问题。


多线程不安全又体现在哪里了? 我承认 synchronized(Singleton.class){
        if(instance == null){
        instance = new Singleton();
        }
        }这种写法较之在方法前同步性能在理论上确实是好,但是他的目的不是为了性能吧,因为仅仅是多了一句if代码。应该是为了保持至始至终产生一个单例。
11 楼 tou3921 2010-03-26  
都2年了,这些面试题怎么好像都一样
10 楼 heropei 2010-03-26  
貌似我收藏了一个更全的...呵呵!
9 楼 seraphim871211 2010-03-26  
J-catTeam 写道
crabboy 写道
diaodou 写道
Singleton必须添加private构造函数,不然就失去singleton的意义了。而且,性能太差了,会继续追问有很有更好的方式?


对这个话题请继续谈谈。。。。

我也觉得奇怪:性能差在哪里


Singleton类肯定要提供默认的private构造函数,要不然就不叫Singleton了。
另外,楼主的第一种方式是空间换时间。第二种方式:
引用

第二种形式:
public class Singleton {
  private static Singleton instance = null;
   public static synchronized Singleton getInstance() {
  //这个方法比上面有所改进,不用每次都进行生成对象,只是第一次     
  //使用时生成实例,提高了效率!
  if (instance==null)
    instance=new Singleton();
return instance;   }
}


在每次调用Singleton.getInstance()方法的时候都用synchronized同步确实会影响性能,实际上除了第一次instance==null时需要同步,初始化之后同步是没有必要的。通常会这样写:
public class Singleton{
    private volatile static Singleton instance = null;

    private Singleton(){}

    public static Singleton getInstance(){
        if(instance == null){
        	synchronized(Singleton.class){
        		if(instance == null){
        			instance = new Singleton();
        		}
        	}
        }
        
        return instance;
    }
}

上述代码保证了只在第一次初始化时同步多线程的安全,性能也不错。唯一的缺点是可能在某些老式的JVM上还是会出现多线程不安全的问题。

8 楼 J-catTeam 2010-03-26  
<div class="quote_title">superheizai 写道</div>
<div class="quote_div">
<div class="quote_title">zdz8207 写道</div>
<div class="quote_div">
<span style="color: #00008b;"><span style="color: #000000;"><span style="color: #000000;"><span style="color: #000000;"><br></span></span></span></span>
<p><span style="color: #00008b;"><span style="color: #000000;"><span style="color: #000000;"><span style="color: #000000;"><span style="color: #ff0000;"><strong>8.编程题: 写一个Singleton出来。</strong></span><br>Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。<br>一般Singleton模式通常有几种种形式:<br>第一种形式: 定义一个类,它的构造函数为private的,它有一个static的private的该类变量,在类初始化时实例话,通过一个public的getInstance方法获取对它的引用,继而调用其中的方法。<br>public class Singleton {<br>private Singleton(){}<br>      //在自己内部定义自己一个实例,是不是很奇怪?<br>      //注意这是private 只供内部调用<br>      private static Singleton instance = new Singleton();<br>      //这里提供了一个供外部访问本class的静态方法,可以直接访问  <br>      public static Singleton getInstance() {<br>        return instance;   <br>      } <br>    } <br>    第二种形式: <br>public class Singleton { <br>  private static Singleton instance = null;<br>  public static synchronized Singleton getInstance() {<br>  //这个方法比上面有所改进,不用每次都进行生成对象,只是第一次     <br>  //使用时生成实例,提高了效率!<br>  if (instance==null)<br>    instance=new Singleton();<br>return instance;   } <br>} <br>其他形式:<br>定义一个类,它的构造函数为private的,所有方法为static的。<br>一般认为第一种形式要更加安全些 <br></span></span></span></span></p>
<span style="color: #000000;"><span style="color: #000000;"><span style="color: #000000;">
<p> </p>
<p>这个好像会这么写:</p>
<p> </p>
<p>public class SingletonClass{</p>
<p>  private static class ResourceHolder{</p>
<p>      public Instance instance=new Instance();</p>
<p>    }</p>
<p> </p>
<p>  public Instance getInstance(){</p>
<p> </p>
<p>    return SingletonClass.ResouceHolder.instance;</p>
<p>  }</p>
<p> </p>
<p>  public static class Instance{</p>
<p> </p>
<p>}</p>
<p> </p>
<p>}</p>
<p> </p>
<p> </p>
<p> </p>
<p>}</p>
<p><span><span><span><span style="color: #000000;"><span style="color: #000000;"><span style="color: #000000;">或者用枚举实现吧。</span></span></span></span></span></span></p>
<p> </p>
</span></span></span>
<p> </p>
<p> </p>
</div>
<p> </p>
</div>
<p><br>private static class ResourceHolder { public static Instance instance = new Instance(); } public static Instance getInstance() { return Test.ResourceHolder.instance; } public static class Instance { } 这样子的,你的代码有误。单例模式不在于你可以有多种写法,而在于应用场景和意义。懒汉,饿汉同步饿汉 ==每一种都有一种意义</p>
7 楼 J-catTeam 2010-03-26  
crabboy 写道
diaodou 写道
Singleton必须添加private构造函数,不然就失去singleton的意义了。而且,性能太差了,会继续追问有很有更好的方式?


对这个话题请继续谈谈。。。。

我也觉得奇怪:性能差在哪里
6 楼 crabboy 2010-03-26  
diaodou 写道
Singleton必须添加private构造函数,不然就失去singleton的意义了。而且,性能太差了,会继续追问有很有更好的方式?


对这个话题请继续谈谈。。。。
5 楼 tianshiyeben 2010-03-26  
很好  很强大
4 楼 diaodou 2010-03-26  
Singleton必须添加private构造函数,不然就失去singleton的意义了。而且,性能太差了,会继续追问有很有更好的方式?
3 楼 尤迪安 2010-03-26  
nottjoe 写道
就这么简单的面试题啊~~~~~~

简单也是知识,知道了更好,不知道就再记一遍。
2 楼 superheizai 2010-03-26  
<div class="quote_title">zdz8207 写道</div>
<div class="quote_div">
<span style="color: #00008b;"><span style="color: #000000;"><span style="color: #000000;"><span style="color: #000000;"><br></span></span></span></span>
<p><span style="color: #00008b;"><span style="color: #000000;"><span style="color: #000000;"><span style="color: #000000;"><span style="color: #ff0000;"><strong>8.编程题: 写一个Singleton出来。</strong></span><br>Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。<br>一般Singleton模式通常有几种种形式:<br>第一种形式: 定义一个类,它的构造函数为private的,它有一个static的private的该类变量,在类初始化时实例话,通过一个public的getInstance方法获取对它的引用,继而调用其中的方法。<br>public class Singleton {<br>private Singleton(){}<br>      //在自己内部定义自己一个实例,是不是很奇怪?<br>      //注意这是private 只供内部调用<br>      private static Singleton instance = new Singleton();<br>      //这里提供了一个供外部访问本class的静态方法,可以直接访问  <br>      public static Singleton getInstance() {<br>        return instance;   <br>      } <br>    } <br>    第二种形式: <br>public class Singleton { <br>  private static Singleton instance = null;<br>  public static synchronized Singleton getInstance() {<br>  //这个方法比上面有所改进,不用每次都进行生成对象,只是第一次     <br>  //使用时生成实例,提高了效率!<br>  if (instance==null)<br>    instance=new Singleton();<br>return instance;   } <br>} <br>其他形式:<br>定义一个类,它的构造函数为private的,所有方法为static的。<br>一般认为第一种形式要更加安全些 <br></span></span></span></span></p>
<span style="color: #000000;"><span style="color: #000000;"><span style="color: #000000;">
<p> </p>
<p>这个好像会这么写:</p>
<p> </p>
<p>public class SingletonClass{</p>
<p>  private static class ResourceHolder{</p>
<p>      public Instance instance=new Instance();</p>
<p>    }</p>
<p> </p>
<p>  public Instance getInstance(){</p>
<p> </p>
<p>    return SingletonClass.ResouceHolder.instance;</p>
<p>  }</p>
<p> </p>
<p>  public static class Instance{</p>
<p> </p>
<p>}</p>
<p> </p>
<p>}</p>
<p> </p>
<p> </p>
<p> </p>
<p>}</p>
<p><span><span><span><span style="color: #000000;"><span style="color: #000000;"><span style="color: #000000;">或者用枚举实现吧。</span></span></span></span></span></span></p>
<p> </p>
</span></span></span>
<p><span style="color: #00008b;">
</span></p>
<p> </p>
</div>
<p> </p>
1 楼 nottjoe 2010-03-26  
就这么简单的面试题啊~~~~~~

相关推荐

    Java常见笔试_面试题目深度剖析

    Java常见笔试_面试题目深度剖析

    Java常见笔试,面试题目深度剖析

    Java常见笔试,面试题目深度剖析

    Java常见笔试、面试题目深度剖析

    这份资源"Java常见笔试、面试题目深度剖析"显然是为了帮助求职者更好地准备相关考试而设计的。以下将对Java笔试和面试的一些核心知识点进行详细的阐述: 1. **基础语法**:Java的基础包括变量、数据类型、运算符、...

    JAVA笔试常见试题

    这份“JAVA笔试常见试题”集合了历届二级Java笔试的题目,涵盖了基础语法、面向对象编程、集合框架、多线程、异常处理、IO流、网络编程、数据库操作等多个关键领域。以下是这些知识点的详细说明: 1. **Java基础...

    java笔试常见的算法题

    全排序、二分查找、冒泡排序、阶乘、最大公约数、最小公倍数、...这是里面包含的算法,本人在准备笔试的时候找的,算法尽量采用最优的。 所有的代码均经过测试,个人觉得没有问题,如果哪位大牛找到错误,欢迎批评指正

    Java常见笔试、面试题目深度剖析第二、三讲下载地址

    根据提供的信息,我们可以深入探讨与“Java常见笔试、面试题目深度剖析第二、三讲”相关的知识点。虽然直接的视频或文档链接无法在此处查看,但根据标题和描述中提到的信息,我们可以推测出讲座可能涉及的一些核心...

    Java笔试题集合-常见java笔试题目

    以下是一些常见的Java笔试题及其相关的知识点: 1. **基础语法** - **数据类型**:Java有八种基本数据类型,包括整型(byte, short, int, long)、浮点型(float, double)、字符型(char)和布尔型(boolean)。...

    ]Java常见笔试、面试题目深度剖析

    ]Java常见笔试、面试题目深度剖析

    java笔试题,java程序员常见的笔试

    Java编程语言在笔试题目中经常会涉及许多核心概念和特性,以下是对这些知识点的详细说明: 1. **访问修饰符的区别**: - `public`:任何地方都可以访问。 - `private`:只能在同一个类中访问。 - `protected`:...

    Java常见笔试、面试系列深度剖析第3讲

    在本节"Java常见笔试、面试系列深度剖析第3讲"中,我们将深入探讨Java编程语言的一些关键概念和常见问题,这些内容对于准备Java相关的笔试和面试至关重要。讲解由张龙和风中叶两位专家主讲,他们将分享丰富的经验与...

    香港JAVA面试笔试题目

    香港的JAVA程序员面试笔试题目可能涵盖以下几个关键领域: 1. **基础语法**:面试可能会开始于一些基本的语法问题,如类、对象、封装、继承、多态等概念。此外,接口、抽象类的区别及其使用场景也是常见的面试题。 ...

    java笔试题笔试题

    java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 ...

    风中叶 Java常见笔试、面试题目深度剖析Java 笔试 面试 题目

    总的来说,《风中叶 Java常见笔试、面试题目深度剖析》涵盖了Java开发的诸多重要领域,通过学习和练习其中的题目,开发者不仅可以巩固基础,还能提升解决问题的能力,为成功通过Java相关的笔试和面试打下坚实的基础...

    Java经典笔试题目

    Java作为一门广泛使用的编程语言,其笔试题目...以上各个知识点都是Java程序员需要掌握的核心内容,通过这份“Java经典笔试题目”文档的练习,可以帮助开发者巩固基础,提升解决实际问题的能力,为面试做好充分准备。

    Java笔试常见英语题(附答案).doc

    【Java笔试常见英语题解析】 1. **Java中如何区分程序消息和错误消息的输出** ...以上知识点涵盖了Java编程中的常见问题,对于Java笔试来说至关重要。理解并掌握这些概念将有助于应对各种Java编程面试和笔试挑战。

    农行Java笔试题

    【标题】"农行Java笔试题"涉及到的Java知识点涵盖了编程基础、面向对象特性、集合框架、多线程、异常处理、IO流、网络编程、数据库操作等多个领域,这些都是Java程序员必须掌握的核心技能。 首先,从编程基础角度来...

    java面试笔试资料java笔试题大集合及答案题库java笔试题汇总资料188个合集.zip

    java面试笔试资料java笔试题大集合及答案题库java笔试题汇总资料...阿里2015实习生-客户端笔试题目解析.docx 面试帮-IT面试宝典.apk 面试题库 高吞吐低延迟Java应用的垃圾回收优化.docx 黑马程序员入学Java精华总结.pdf

    JAVA笔试题目下载

    Java笔试题目是企业在招聘Java开发人员时常用的筛选方式,它主要测试应聘者对Java语言的基础知识、编程能力、逻辑思维以及问题解决能力。本部分将根据"JAVA笔试题目"这一主题,深入解析Java笔试中可能出现的重点知识...

Global site tag (gtag.js) - Google Analytics