`
xinklabi
  • 浏览: 1562481 次
  • 性别: Icon_minigender_1
  • 来自: 吉林
文章分类
社区版块
存档分类
最新评论

Java面试题

 
阅读更多

基础部分:

 

       1.C++或Java中的异常处理机制的简单原理和应用。
  当JAVA程序违反了JAVA的语义规则时,JAVA虚拟机就会将发生的错误表示为一个异常。违反语义规则包括2种情况。一种是JAVA类库内置的语 义检查。例如数组下标越界,会引发IndexOutOfBoundsException;访问null的对象时会引发 NullPointerException。另一种情况就是JAVA允许程序员扩展这种语义检查,程序员可以创建自己的异常,并自由选择在何时用 throw关键字引发异常。所有的异常都是java.lang.Thowable的子类。
  2. Java的接口和C++的虚类的相同和不同处。
  由于Java不支持多继承,而有可能某个类或对象要使用分别在几个类或对象里面的方法或属性,现有的单继承机制就不能满足要求。与继承相比,接口有更 高的灵活性,因为接口中没有任何实现代码。当一个类实现了接口以后,该类要实现接口里面所有的方法和属性,并且接口里面的属性在默认状态下面都是 public static,所有方法默认情况下是public.一个类可以实现多个接口。
  3. 垃圾回收的优点和原理。并考虑2种回收机制。
  Java语言中一个显着的特点就是引入了垃圾回收机制,使c++程序员最头疼的内存管理的问题迎刃而解,它使得Java程序员在编写程序的时候不再需 要考虑内存管理。由于有个垃圾回收机制,Java中的对象不再有“作用域”的概念,只有对象的引用才有“作用域”。垃圾回收可以有效的防止内存泄露,有效 的使用可以使用的内存。垃圾回收器通常是作为一个单独的低级别的线程运行,不可预知的情况下对内存堆中已经死亡的或者长时间没有使用的对象进行清楚和回 收,程序员不能实时的调用垃圾回收器对某个对象或所有对象进行垃圾回收。回收机制有分代复制垃圾回收和标记垃圾回收,增量垃圾回收。
  4. 请说出你所知道的线程同步的方法。
  wait():使一个线程处于等待状态,并且释放所持有的对象的lock。
  sleep():使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法要捕捉InterruptedException异常。
  notify():唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的唤醒某一个等待状态的线程,而是由JVM确定唤醒哪个线程,而且不是按优先级。
  Allnotity():唤醒所有处入等待状态的线程,注意并不是给所有唤醒线程一个对象的锁,而是让它们竞争。
  5. 请讲一讲析构函数和虚函数的用法和作用。
  6. Error与Exception有什么区别?
  Error表示系统级的错误和程序不必处理的异常,
  Exception表示需要捕捉或者需要程序进行处理的异常。
  7. 在java中一个类被声明为final类型,表示了什么意思?
  表示该类不能被继承,是顶级类。
  8. 描述一下你最常用的编程风格。
  9. heap和stack有什么区别。
  栈是一种线形集合,其添加和删除元素的操作应在同一段完成。栈按照后进先出的方式进行处理。
  堆是栈的一个组成元素
  10.谈谈final, finally, finalize的区别。
  final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。
  finally是异常处理语句结构的一部分,表示总是执行。
  finalize是object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。
  11.anonymous inner class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)?
  可以继承其他类或完成其他接口,在swing编程中常用此方式。
  12.static nested class 和 inner class的不同,说得越多越好(面试题有的很笼统)。
  static nested class是被声明为静态(static)的内部类,它可以不依赖于外部类实例被实例化。而通常的内部类需要在外部类实例化后才能实例化。
  13.math.round(11.5)等於多少? math.round(-11.5)等於多少?
  math.round(11.5)==12
  math.round(-11.5)==-11
  round方法返回与参数最接近的长整数,参数加1/2后求其floor.
  14.short s1 = 1; s1 = s1 1;有什么错? short s1 = 1; s1 = 1;有什么错?
  short s1 = 1; s1 = s1 1; (s1 1运算结果是int型,需要强制转换类型)
  short s1 = 1; s1 = 1;(可以正确编译)
  15.sleep() 和 wait() 有什么区别?
  sleep是线程类(thread)的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用sleep不会释放对象锁。
  wait是object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyall)后本线程才进入对象锁定池准备获得对象锁进入运行状态。
  16.数组有没有length()这个方法? string有没有length()这个方法?
  数组没有length()这个方法,有length的属性。
  string有有length()这个方法。
  17.overload和override的区别。overloaded的方法是否可以改变返回值的类型?
  方法的重写overriding和重载overloading是java多态性的不同表现。重写overriding是父类与子类之间多态性的一种表 现,重载overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被"屏蔽"了。如果在一个类中定义了多个同名的方 法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(overloading)。overloaded的方法是可以改变返回值的类型。
  18.set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?
  set里的元素是不能重复的,那么用iterator()方法来区分重复与否。equals()是判读两个set是否相等。
  equals()和==方法决定引用值是否指向同一对象equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真值。
  19.给我一个你最常见到的runtime exception。
  arithmeticexception, arraystoreexception, bufferoverflowexception, bufferunderflowexception, cannotredoexception, cannotundoexception, classcastexception, cmmexception, concurrentmodificationexception, domexception, emptystackexception, illegalargumentexception, illegalmonitorstateexception, illegalpathstateexception, illegalstateexception,

 

Jsp部分:

 

1、jsp有哪些内置对象?作用分别是什么?

  答:JSP共有以下9种基本内置组件(可与ASP的6种内部组件相对应):
  request 用户端请求,此请求会包含来自GET/POST请求的参数
  response 网页传回用户端的回应
  pageContext 网页的属性是在这里管理
  session 与请求有关的会话期
  application servlet 正在执行的内容
  out 用来传送回应的输出
  config servlet的构架部件
  page JSP网页本身
  exception 针对错误网页,未捕捉的例外
  2、jsp有哪些动作?作用分别是什么?
  答:JSP共有以下6种基本动作
  jsp:include:在页面被请求的时候引入一个文件。
  jsp:useBean:寻找或者实例化一个JavaBean。
  jsp:setProperty:设置JavaBean的属性。
  jsp:getProperty:输出某个JavaBean的属性。
  jsp:forward:把请求转到一个新的页面。
  jsp:plugin:根据浏览器类型为Java插件生成OBJECT或EMBED标记
  3、JSP中动态INCLUDE与静态INCLUDE的区别?
  答:动态INCLUDE用jsp:include动作实现
  <jsp:include page="included.jsp" flush="true" />它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数
  静态INCLUDE用include伪码实现,定不会检查所含文件的变化,适用于包含静态页面
  <%@ include file="included.htm" %>
  4、两种跳转方式分别是什么?有什么区别?
  答:有两种,分别为:
  <jsp:include page="included.jsp" flush="true">
  <jsp:forward page= "nextpage.jsp"/>
  前者页面不会转向include所指的页面,只是显示该页的结果,主页面还是原来的页面。执行完后还会回来,相当于函数调用。并且可以带参数.后者完全转向新页面,不会再回来。相当于go to 语句。
JAVA部分
  1、作用域public,private,protected,以及不写时的区别
  答:区别如下:
  作用域    当前类    同一package 子孙类    其他package
  public √ √ √    √
  protected √ √ √    ×
  friendly √ √    × ×
  private    √ ×    × ×
  不写时默认为friendly
  2、ArrayList和Vector的区别,HashMap和Hashtable的区别
  答:就ArrayList与Vector主要从二方面来说.
  一.同步性:Vector是线程安全的,也就是说是同步的,而ArrayList是线程序不安全的,不是同步的
  二.数据增长:当需要增长时,Vector默认增长为原来一培,而ArrayList却是原来的一半
  就HashMap与HashTable主要从三方面来说。
  一.历史原因:Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现
  二.同步性:Hashtable是线程安全的,也就是说是同步的,而HashMap是线程序不安全的,不是同步的
  三.值:只有HashMap可以让你将空值作为一个表的条目的key或value
  3、char型变量中能不能存贮一个中文汉字?为什么?
  答:是能够定义成为一个中文的,因为java中以unicode编码,一个char占16个字节,所以放一个中文是没问题的
  4、多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么?
  答:多线程有两种实现方法,分别是继承Thread类与实现Runnable接口
  同步的实现方面有两种,分别是synchronized,wait与notify
  5、继承时候类的执行顺序问题,一般都是选择题,问你将会打印出什么?
  答:父类:
  package test;
  public class FatherClass
  {
  public FatherClass()
  {
  System.out.println("FatherClass Create");
  }
  }
  子类:
  package test;
  import test.FatherClass;
  public class ChildClass extends FatherClass
  {
  public ChildClass()
  {
  System.out.println("ChildClass Create");
  }
  public static void main(String[] args)
  {
  FatherClass fc = new FatherClass();
  ChildClass cc = new ChildClass();
  }
  }
  输出结果:
  C:\>java test.ChildClass
  FatherClass Create
  FatherClass Create
  ChildClass Create
  6、内部类的实现方式?
  答:示例代码如下:
  package test;
  public class OuterClass
  {
  private class InterClass
  {
  public InterClass()
  {
  System.out.println("InterClass Create");
  }
  }
  public OuterClass()
  {
  InterClass ic = new InterClass();
  System.out.println("OuterClass Create");
  }
  public static void main(String[] args)
  {
  OuterClass oc = new OuterClass();
  }
  }
  输出结果:
  C:\>java test/OuterClass
  InterClass Create
  OuterClass Create
  再一个例题:
  public class OuterClass {
  private double d1 = 1.0;
  //insert code here
  }
  You need to insert an inner class declaration at line 3. Which two inner class declarations are
  valid?(Choose two.)
  A. class InnerOne{
  public static double methoda() {return d1;}
  }
  B. public class InnerOne{
  static double methoda() {return d1;}
  }
  C. private class InnerOne{
  double methoda() {return d1;}
  }
  D. static class InnerOne{
  protected double methoda() {return d1;}
  }
  E. abstract class InnerOne{
  public abstract double methoda();
  }
  说明如下:
  一.静态内部类可以有静态成员,而非静态内部类则不能有静态成员。 故 A、B 错
  二.静态内部类的非静态成员可以访问外部类的静态变量,而不可访问外部类的非静态变量;return d1 出错。
  故 D 错
  三.非静态内部类的非静态成员可以访问外部类的非静态变量。 故 C 正确
  四.答案为C、E
SELEVLET部分
  Servlet方面
  1、说一说Servlet的生命周期?
  答:servlet有良好的生存期的定义,包括加载和实例化、初始化、处理请求以及服务结束。这个生存期由javax.servlet.Servlet接口的init,service和destroy方法表达。
  2、Servlet版本间(忘了问的是哪两个版本了)的不同?
  希望大家补上,谢谢
  3、JAVA SERVLET API中forward() 与redirect()的区别?
  答:前者仅是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址;后者则是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链 接。这样,从浏览器的地址栏中可以看到跳转后的链接地址。所以,前者更加高效,在前者可以满足需要时,尽量使用forward()方法,并且,这样也有助 于隐藏实际的链接。在有些情况下,比如,需要跳转到一个其它服务器上的资源,则必须使用sendRedirect()方法。
  4、Servlet的基本架构
  public class ServletName extends HttpServlet {
  public void doPost(HttpServletRequest request, HttpServletResponse response) throws
  ServletException, IOException {
  }
  public void doGet(HttpServletRequest request, HttpServletResponse response) throws
  ServletException, IOException {
  }

  }

 

编程题:

1、Java 的通信编程,编程题(或问答),用JAVA SOCKET编程,读服务器几个字符,再写入本地显示?
  答:Server端程序:
  package test;
  import java.net.*;
  import java.io.*;
  public class Server
  {
  private ServerSocket ss;
  private Socket socket;
  private BufferedReader in;
  private PrintWriter out;
  public Server()
  {
  try
  {
  ss=new ServerSocket(10000);
  while(true)
  {
  socket = ss.accept();
  String RemoteIP = socket.getInetAddress().getHostAddress();
  String RemotePort = ":"+socket.getLocalPort();
  System.out.println("A client come in!IP:"+RemoteIP+RemotePort);
  in = new BufferedReader(new
  InputStreamReader(socket.getInputStream()));
  String line = in.readLine();
  System.out.println("Cleint send is :" + line);
  out = new PrintWriter(socket.getOutputStream(),true);
  out.println("Your Message Received!");
  out.close();
  in.close();
  socket.close();
  }
  }catch (IOException e)
  {
  out.println("wrong");
  }
  }
  public static void main(String[] args)
  {
  new Server();
  }
  };
  Client端程序:
  package test;
  import java.io.*;
  import java.net.*;
  public class Client
  {
  Socket socket;
  BufferedReader in;
  PrintWriter out;
  public Client()
  {
  try
  {
  System.out.println("Try to Connect to 127.0.0.1:10000");
  socket = new Socket("127.0.0.1",10000);
  System.out.println("The Server Connected!");
  System.out.println("Please enter some Character:");
  BufferedReader line = new BufferedReader(new
  InputStreamReader(System.in));
  out = new PrintWriter(socket.getOutputStream(),true);
  out.println(line.readLine());
  in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
  System.out.println(in.readLine());
  out.close();
  in.close();
  socket.close();
  }catch(IOException e)
  {
  out.println("Wrong");
  }
  }
  public static void main(String[] args)
  {
  new Client();
  }
  };

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics