JAVA面试知识点

1、 线程wait()sleep()的区别

sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用sleep不会释放对象锁。

waitObject类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。

这两者的施加者是有本质区别的.
sleep()
是让某个线程暂停运行一段时间,其控制范围是由当前线程决定,也就是说,在线程里面决定.好比如说,我要做的事情是 "点火->烧水->煮面",而当我点完火之后我不立即烧水,我要休息一段时间再烧.对于运行的主动权是由我的流程来控制
.

wait(),首先,这是由某个确定的对象来调用的,将这个对象理解成一个传话的人,当这个人在某个线程里面说"暂停!",也是thisOBJ.wait(),这里的暂停是阻塞,还是"点火->烧水->煮饭",thisOBJ就好比一个监督我的人站在我旁边,本来该线程应该执行1后执行2,再执行3,而在2处被那个对象喊暂停,那么我就会一直等在这里而不执行3,但正个流程并没有结束,我一直想去煮饭,但还没被允许,直到那个对象在某个地方说"通知暂停的线程启动!",也就是thisOBJ.notify()的时候,那么我就可以煮饭了,这个被暂停的线程就会从暂停处继续执行
.
其实两者都可以让线程暂停一段时间,但是本质的区别是一个线程的运行状态控制,一个是线程之间的通讯的问题。

 

2switch中接受的合法参数有哪些类型?

package org.logic;

public class TestSwith {

 /**
  * @param args
  */
 public void Test(){
  int i=1;
  char c='a';
  short st=1;
  double ft=1.1;
  byte bt='a';
  String string="cjj";
  int a=0,b=0,s;
  switch(st){//
可以用的类型有:
int ,char,short,byte
      //
不可以有
String float,double
  case 1 : s=a+b; break;
  
  }
  switch(bt){
  
  }
 }
 public static void main(String[] args) {
  // TODO Auto-generated method stub

 }

}

3ErrorException的区别

error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况。

exception
表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况。

简要的叙述 error exception   Error Exception 都继承自 Throwable ,他们下列不同处:

  Exceptions 1 .可以是 可被控制 (checked) 不可控制的 (unchecked)

                      2 .表示一个由程序员导致的错误 3 .应该在应用程序级被处理  

 Errors           1 总是 不可控制的 (unchecked)

                       2 经常用来用于表示系统错误或低层资源的错误

                       3 如何可能的话,应该在系统级被捕捉

 

4字符串的对比,对象引用,对象在内存中的分配

package org.string;

public class TwoString {

 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  String s="HelloWord";
  String ss="Hello"+"Word";
  String sss=new String("HelloWord");
  String ssss=new String("HelloWord");
  System.out.println(s==ss);
  System.out.println(s==sss);
  System.out.println(sss==ssss);
 }
}

true
false
false

5变量的作用域,优先级

package org.string;

public class Test {

 /**
  * @param args
  */
 public static void change(String s){
  s=s+"Word";
 }
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  String ss="Hello";
  change(ss);
  System.out.println(ss);
 }
}

Hello

6Javathrowthrows的区别

throws 是说明符 是在告诉你抛出异常的可能性 并不对异常做出处理 throw是一个处理方法 throw IOException即已经将IOException做了抛出的处理。

throws 用在方法声明的后面,表示这个方法可能会有异常生成,

throw 用在具体语句中,表示产生了一个异常,

前者是声明用的,后者是一次具体的应用。

 

7final, finally, finalize的区别
final?
修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract的,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,不能重载

finally?
再异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块(如果有的话)。

finalize?
方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的,因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。

 

8、,&&&的区别。
&
是位运算符。&&是布尔逻辑运算符

 

9HashMapHashtable的区别
都属于Map接口的类,实现了将惟一键映射到特定的值上。

HashMap
类没有分类或者排序。它允许一个 null 键和多个 null 值。

Hashtable
类似于 HashMap,但是不允许 null 键和 null 值。它也比 HashMap 慢,因为它是同步的。

 

10Collection Collections的区别。
Collections
是个java.util下的类,它包含有各种有关集合操作的静态方法。

Collection
是个java.util下的接口,它是各种集合结构的父接口。

 

11同步和异步有何异同,在什么情况下分别使用他们?举例说明

如果数据将在线程间共享。例如正在写的数据以后可能被另一个线程读到,或者现在读的数据已经被另一个线程写过,那么这些数据就是共享数据,必须进行同步存取。

       当应用程序在对象上调用了一个需要花费很多时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步编程,在很多情况下采用异步编程途径往往更有效率。

12abstrac class interface 有什么区别?

声明方法的存在而不去实现它的类叫做抽象类(abstrac class),它用于创建一个体现某些基本行为的类,并为类声明方法,但不能在该类中实现该方法的情况。不能创建抽象类的实例,但是可以创建该抽象类类型的变量,让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。抽象类的子类实现父类中的所以方法,否则任然为抽象类。

接口(interface)是抽象类的变体。在接口中所以的方法都是抽象的。多继承可以实现这样的接口而实现。接口只可以定义static final 变量。Instanceof 运算符可以用来决定某对象是否实现了某个接口。通常的动态联编就是利用接口实现。

12heapstack有什么区别

     

13forwardredirect的区别

       Forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把内容再发给浏览器,浏览器根本不知道服务器发送的内容从哪里来,所以地址栏的地址还是原来的地址。

       Redirect是服务端根据逻辑方式发送一个状态码,告诉浏览器重新去请求那个地址,一般来说浏览器会用刚才请求的所以参数重新请求,所以session,request参数都可以获取。

14JSP中动态INCLUDE与静态INCLUDE的区别

       动态include 实现,它总是会检查所包含文件中的的动态变化,适用于包含动态页面,并且可以带参数。

       静态include <%@ include file=”include.html” %> 实现,适用于包含静态页面。

15GC是什么? 为什么要有GC?

       GCGabage Collection )垃圾回收器。内存处理是编程人员容易出现问题的地方,忘记或者是错误的内存回收会导致程序或系统的不稳定甚至崩溃,JAVA提供的GC可以自动检测对象是否超过作用域从而达到自动回收内存的目的。

16Math.round(11.5)等于多少? Math.round(-11.5)等于多少?

round方法返回与参数最接近的长整数,参数加1/2后求其floor.

所以Math.round(11.5)12      Math.round(-11.5)11

17说出数据连接池的工作机制是什么?

       J2EE服务器启动时会建立一定数量的池连接,并且一直维持不少于此数目的池连接。客户端程序需要连接时,池驱动程序就会返回一个未使用的池连接并且将其标记为“忙”。如果当前没有空闲连接,池驱动程序就创建一定数量的连接,新建连接的数量是由配置参数决定的。当使用的池连接调用完成后,池驱动程序将此连接标记为“空闲”,其他调用就可以使用这个连接。

18char型变量中能不能存贮一个中文汉字?为什么?

       可以,因为JAVA是以UNICODE编码的,一个char16个字节,所以可以存放一个中文汉字。

你可能感兴趣的:(JAVA面试知识点)