




已阅读5页,还剩47页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
面试题集锦-革努信息科技JAVA1. 什么时候用Assert? J2SE 1.4在语言上提供了一个新特性,就是assertion(断言)功能,它是该版本在Java语言方面最大的革新。assertion(断言)在软件开发中是一种常用的调试方式,很多开发语言中都支持这种机制,如C,C+和Eiffel等,但是支持的形式不尽相同,有的是通过语言本身、有的是通过库函数等。另外,从理论上来说,通过assertion方式可以证明程序的正确性,但是这是一项相当复杂的工作,目前还没有太多的实践意义。在实现中,assertion就是在程序中的一条语句,它对一个boolean表达式进行检查,一个正确程序必须保证这个boolean表达式的值为true;如果该值为false,说明程序已经处于不正确的状态下,系统将给出警告或退出。一般来说,assertion用于保证程序最基本、关键的正确性。assertion检查通常在开发和测试时开启。为了提高性能,在软件发布后,assertion检查通常是关闭的。 11) 语法表示 在语法上,为了支持assertion,Java增加了一个关键字assert。它包括两种表达式,分别如下: 1. assert expression1; 2. assert expression1: expression2; 在两种表达式中,expression1表示一个boolean表达式,expression2表示一个基本类型或者是一个对象(Object) ,基本类型包括boolean,char,double,float,int和long。由于所有类都为Object的子类,因此这个参数可以用于所有对象。 12) 语义含义 在运行时,如果关闭了assertion功能,这些语句将不起任何作用。如果打开了assertion功能,那么expression1的值将被计算,如果它的值为false,该语句强抛出一个AssertionError对象。如果assertion语句包括expression2参数,程序将计算出expression2的结果,然后将这个结果作为AssertionError的构造函数的参数,来创建AssertionError对象,并抛出该对象;如果expression1值为true,expression2将不被计算。 一种特殊情况是,如果在计算表达式时,表达式本身抛出Exception,那么assert将停止运行,而抛出这个Exception。 13) 一些assertion例子 下面是一些Assert的例子。 1. assert0 value; 2. assert0 value:value=+value; 3. assertref != null:ref doesnt equal null; 4. assertisBalanced(); 14) 编译 由于assert是一个新关键字,使用老版本的JDK是无法编译带有assert的源程序。因此,必须使用JDK1.4(或者1.5)的Java编译器,在使用Javac命令时,必须加上-source 1.4作为参数。-source 1.4表示使用JDK 1.4版本的方式来编译源代码,否则编译就不能通过,因为缺省的Javac编译器使用JDK1.3的语法规则。 一个简单的例子如下: javac -source 1.4 test.java 15) 运行 由于带有assert语句的程序运行时,使用了新的ClassLoader和Class类,因此,这种程序必须在JDK1.4(或者1.5)的JRE下运行,而不能在老版本的JRE下运行。 我们可以选择开启assertion功能,或者不开启,另外我们还可以开启一部分类或包的assertion功能,所以运行选项变得有些复杂。通过这些选项,我们可以过滤所有我们不关心的类,只选择我们关心的类或包来观察。2. Java中如何实现数据库访问?为什么使用这种方式?使用JDBC,JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序 有了 JDBC,向各种关系数据库发送 SQL 语句就是一件很容易的事。换言之,有了 JDBC API,就不必为访问 Sybase 数据库专门写一个程序,为访问 Oracle 数据库又专门写一个程序,为访问 Informix 数据库又写另一个程序,等等。您只需用 JDBC API 写一个程序就够了它可向相应数据库发送 SQL 语句。而且,使用 Java 编程语言编写的应用程序,就无须去忧虑要为不同的平台编写不同的应用程序。将Java 和 JDBC 结合起来将使程序员只须写一遍程序就可让它在任何平台上运行。3. 面向对象的特征是什么?1.抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。2. 继承:继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继 承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可 以修改或增加新的方法使之更适合特殊的需要。3.封装:封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。4. 多态性:多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。4. 数据连接池的工作机制是什么?J2EE服务器启动时会建立一定数量的池连接,并一直维持不少于此数目的池连接。客户端程序需要连接时,池驱动程序会返回一个未使用的池连接并将其表记为 忙。如果当前没有空闲连接,池驱动程序就新建一定数量的连接,新建连接的数量有配置参数决定。当使用的池连接调用完成后,池驱动程序将此连接表记为空闲, 其他调用就可以使用这个连接。5. 写一个方法,实现字符串的反转?public class Overturn public static void main(String args) String strBefore = abcdefg1234567;System.out.println(倒序前:+strBefore);char temp = strBefore.toCharArray();int length = temp.length;int s = length / 2;char tm;if (length % 2 = 0) for (int i = 0; i s; i+) tm = tempi;tempi = templength - i - 1;templength - i - 1 = tm; else for (int i = 0; i = s; i+) tm = tempi;tempi = templength - i - 1;templength - i - 1 = tm;System.out.println(倒序后:+new String(temp);6. JAVA通信编程?文档见此 网络资料:/images/java/javanet/index.htm 7. String是最基本的数据类型吗?不是,Java 只有8种基本类型:byte char short int long float double boolean8. int 和 Integer 有什么区别 ?Java 提供两种不同的类型:引用类型和原始类型(或内置类型)。Int是java的原始数据类型,Integer是java为int提供的封装类。Java为每个原始类型提供了封装类。原始类型封装类boolean Booleanchar Characterbyte Byteshort Shortint Integerlong Longfloat Floatdouble Double引用类型和原始类型的行为完全不同,并且它们具有不同的语义。引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。对象引用实例变量的缺省值为 null,而原始类型实例变量的缺省值与它们的类型有关。9. String 和StringBuffer的区别String专门定义不变字符串,而StingBuffer用来定义可变字符串。两者在性能上也有很大的区别:String比较适合短的字符串,StingBuffer适合动态增加的字符串。在实际使用过程中,要求:String+String这种在BS开发结构中不被提倡,对性能影响比较大。而StingBuffer则是比较推荐使用方法。10. 运行时异常与一般异常有何异同?异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。11. Collection 和 Collections的区别。Collection是集合类的上级接口,继承与他的接口主要有Set 和List.Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。12. &和&的区别。既是位运算符也是逻辑运算符,只是逻辑运算符,与同时作为逻辑运算符时是短路的,而并不短路13. HashMap和Hashtable的区别。HashTable的应用非常广泛,HashMap是新框架中用来代替HashTable的类,也就是说建议使用HashMap,不要使用HashTable。可能你觉得HashTable很好用,为什么不用呢?这里简单分析他们的区别。 1.HashTable的方法是同步的,HashMap未经同步,所以在多线程场合要手动同步HashMap这个区别就像Vector和ArrayList一样。2.HashTable不允许null值(key和value都不可以),HashMap允许null值(key和value都可以)。3.HashTable有一个contains(Object value),功能和containsValue(Object value)功能一样。4.HashTable使用Enumeration,HashMap使用Iterator。以上只是表面的不同,它们的实现也有很大的不同。5.HashTable中hash数组默认大小是11,增加的方式是 old*2+1。HashMap中hash数组的默认大小是16,而且一定是2的指数。6.哈希值的使用不同,HashTable直接使用对象的hashCode,代码是这样的:int hash = key.hashCode();int index = (hash & 0x7FFFFFFF) % tab.length;而HashMap重新计算hash值,而且用与代替求模:int hash = hash(k);int i = indexFor(hash, table.length);static int hash(Object x) int h = x.hashCode();h += (h 14);h += (h 10);return h;static int indexFor(int h, int length) return h & (length-1);以上只是一些比较突出的区别,当然他们的实现上还是有很多不同的,比如HashMap对null的操作。14. final, finally, finalize的区别。final-修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract的,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定 初值,而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,不能重载finally-再异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块(如果有的话)。finalize-方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的,因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。15. sleep() 和 wait() 有什么区别?sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用sleep不会释放对象锁。wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。16. Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?override(重写) 1、方法名、参数、返回值相同。2、子类方法不能缩小父类方法的访问权限。3、子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常)。4、存在于父类和子类之间。5、方法被定义为final不能被重写。overload(重载)1、参数类型、个数、顺序至少有一个不相同。2、不能重载只有返回值不同的方法名。3、存在于父类和子类、同类中。Overloaded的方法是可以改变返回值的类型。 17. error和exception有什么区别?error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况。exception 表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况18. abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized?都不能19. Serializale的作用是什么,类中有个变量使用transient声明,说这个变量有什么特点?序列化机制: 序列化分为两大部分:序列化和反序列化。序列化是这个过程的第一部分,将数据分解成字节流,以便存储在文件中或在网络上传输。反序列化就是打开字节流并重构对象。对象序列化不仅要将基本数据类型转换成字节表示,有时还要恢复数据。恢复数据要求有恢复数据的对象实例。ObjectOutputStream中的序列化过程与字节流连接,包括对象类型和版本信息。反序列化时,JVM用头信息生成对象实例,然后将对象字节流中的数据复制到对象数据成员中把一个对象的表示转化为字节流的过程称为串行化serialization,从字节流中把对象重建出来称为反串行化deserialization,transient 为不应被串行化的数据提供了一个语言级的标记数据方法。 对象的序列化(serialization)非常影响I/O的性能,尽量少用。对不需序列化的类的域使用transient关键字,以减少序列化的数据量,当串行化某个对象时,如果该对象的某个变量是transient,那么这个变量不会被串行化进去。也就是说,假设某个类的成员变量是transient,那么当通过ObjectOutputStream把这个类的某个实例保存到磁盘上时,实际上transient变量的值是不会保存的。因为当从磁盘中读出这个对象的时候,对象的该变量会没有被赋值。 volatile 在Java中设置变量值的操作,除了long和double类型的变量外都是原子操作,也就是说,对于变量值的简单读写操作没有必要进行同步。这在JVM 1.2之前,Java的内存模型实现总是从主存读取变量,是不需要进行特别的注意的。而随着JVM的成熟和优化,现在在多线程环境下volatile关键字的使用变得非常重要。在当前的Java内存模型下,线程可以把变量保存在本地内存(比如机器的寄存器)中,而不是直接在主存中进行读写。这就可能造成一个线程在主存中修改了一个变量的值,而另外一个线程还继续使用它在寄存器中的变量值的拷贝,造成数据的不一致。要解决这个问题,只需要像在本程序中的这样,把该变量声明为volatile(不稳定的)即可,这就指示JVM,这个变量是不稳定的,每次使用它都到主存中进行读取。一般说来,多任务环境下各任务间共享的标志都应该加volatile修饰。20. 写一段用JDBC连接ORACLE.public static Connection toOracle(String hostname ,String dbname ,String name , String pwd)String classname = oracle.jdbc.driver.OracleDriver;String url = jdbc:oracle:thin:+hostname+:1521:+dbname;return getConnection(classname,url,name,pwd);private static Connection getConnection(String classname ,String url,String name,String pwd)Connection con = null ; try Class.forName(classname);con = DriverManager.getConnection(url,name,pwd); catch (ClassNotFoundException e) e.printStackTrace(); catch (SQLException e) e.printStackTrace(); return con;21. STRING类型转化成DOUBLE. New Double(s);22. ARRAYLIST与VECTOR的区别。一、同步性:Vector是线程安全的,也就是说是同步的,而ArrayList是线程不安全的,不是同步的二、数据增长:当需要增长时,Vector默认增长为原来一培,而ArrayList却是原来的一半23. HASHMAP与HASHTABLE的区别。1.Hashtable是线程安全的一个Collection HashMap不是线程安全的 2.HashMap允许一个null key和多个null value 而hashtable不允许 3.public class Hashtable extends Dictionary implements Map, Cloneable, Serializable (实现的是Map而不是Set) public class HashMap extends Abstract Map implements Map, Cloneable, Serializable 24. List, Set, Map是否继承自Collection接口?Map不是继承自Collection25. 说出ArrayList,Vector, LinkedList的存储性能和特性ArrayList其实就是用数组来实现的,所以在查询数据方面速度快。Vector在功能上和ArrayList几乎一样,不过Vector类内的成员都是同步的,如果不考虑线程安全的话,还是使用ArrayList。因为同步在运行时要消耗掉大量的内存。LinkedList是由链表来实现的,所以在添加删除等操作方面速度快,同时也能有效的利用内存空间。详细差别见文档26. Javadoc有什么作用?如何使用?Javadoc工具用于在java源文件中生成基于标志的HTML文件,这些标志以注释的嵌套在/* * */内,这些HTML文件用于存储关于类和方法的信息,Javadoc实际由JDK的创建器使用的,用于生成Java API文档.详细使用说明文档27. Java中int的取值范围?-2147483648 到214748364728. 接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)?都可以29. 同步和异步有何异同,在什么情况下分别使用他们?举例说明。 如果数据将在线程间共享。例如正在写的数据以后可能被另一个线程读到,或者正在读的数据可能已经被另一个线程写过了,那么这些数据就是共享数据,必须进行同步存取。当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步编程,在很多情况下采用异步途径往往更有效率。30. abstract class和interface有什么区别?声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。 接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。 然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到 接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口。31. heap和stack有什么区别。栈是一种线形集合,其添加和删除元素的操作应在同一段完成。栈按照后进先出的方式进行处理。堆是栈的一个组成元素。详细说明见文档32. forward 和redirect的区别forward,include,redirect是jsp中web页面(jsp或servelt)的三种不同的路由关系,三个貌似相同,其实还是有许多差别的,而了解这些细微的差别,在web开发中是很重要的。 说明: 一、forward、include由javax.servlet.RequestDispatcher来封装,由包容器container提供RequestDispatcher接口的实现,其中声明如下: void forward(ServletRequest req,ServletResponse res) void include(ServeltRequest req,ServletResponse res) 可以通过两种方式得到RequestDispatcher: 1、ServletContext.getRequestDispatcher(String path); 其中这里的path必须开始为/,即这里的path必须相对于context的root. 2、ServeltRequest.getRequestDispatcher(String path) 这里的path可以为相对路径,如果path开始为/,则也认为是从context的root开始的。 二、Redirect由HttpServletResponse.sendRedirect(String location)来支持 差别: 三个都可以对用户的request进行转发,但是还是有许多的不同,差别最主要集中在如下几个方面: 1、forward与include共亨Request范围内的对象,而redirect则不行,即:如果一个javabean被声明为request范围的话,则被forward到的资源也可以访问这个javabean,而redriect则不行。 2、forward与include基本上都是转发到context内部的资源,而redirect可以重定向到外部的资源,如: req.sendRedriect();33. Static Nested Class 和 Inner Class的不同。Nested Class (一般是C+的说法),Inner Class (一般是JAVA的说法)。Java内部类与C+嵌套类最大的不同就在于是否有指向外部的引用上。注: 静态内部类(Inner Class)意味着1创建一个static内部类的对象,不需要一个外部类对象2不能从一个static内部类的一个对象访问一个外部类对象关于静态类文档一 入门 概述 应用场合(推荐自己去写实例来理解这些概念)34. GC是什么? 为什么要有GC?GC是垃圾收集器。Java 程序员不用担心内存管理,因为垃圾收集器会自动进行管理。要请求垃圾收集,可以调用下面的方法之一: System.gc() Runtime.getRuntime().gc()35. Math.round(11.5)等於多少? Math.round(-11.5)等于多少?Math.round(11.5)返回(long)12,Math.round(-11.5)返回(long)-11;36. String s = new String(xyz);创建了几个String Object?两个对象,一个是“xyx”,一个是指向“xyx”的引用对象s。37. Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?override(重写) 1、方法名、参数、返回值相同。2、子类方法不能缩小父类方法的访问权限。3、子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常)。4、存在于父类和子类之间。5、方法被定义为final不能被重写。overload(重载)1、参数类型、个数、顺序至少有一个不相同。2、不能重载只有返回值不同的方法名。3、存在于父类和子类、同类中。Overloaded的方法是可以改变返回值的类型。38. 抽象类和接口的区别,什么时候使用?简单来说, 接口是公开的,里面不能有私有的方法或变量,是用于让别人使用的,而抽象类是可以有私有方法或私有变量的, 另外,实现接口的一定要实现接口里定义的所有方法,而实现抽象类可以有选择地重写需要用到的方法,一般的应用里,最顶级的是接口,然后是抽象类实现接口,最后才到具体类实现。 还有,接口可以实现多重继承,而一个类只能继承一个超类,但可以通过继承多个接口实现多重继承,接口还有标识(里面没有任何方法,如Remote接口)和数据共享(里面的变量全是常量)的作用.39. 编程修改题,用STRING构造一个动态字符串,把其修改为STRINGBUFFER类型。String str = new String(“test“);StringBuffer strBuf= new StringBuffer(str);40. 读取文件的方法,请写一段。见45题答案41. 15位二进制转换成十进制最大值是多少。6553542. 设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。publicclassThreadTest1 privateintj; publicstaticvoidmain(Stringargs) ThreadTest1tt=newThreadTest1(); Incinc=tt.newInc(); Decdec=tt.newDec(); for(inti=0;i Threadt=newThread(inc); t.start(); t=newThread(dec); t.start(); privatesynchronizedvoidinc() j+; System.out.println(Thread.currentThread().getName()+-inc:+j); privatesynchronizedvoiddec() j-; System.out.println(Thread.currentThread().getName()+-dec:+j); classIncimplementsRunnable publicvoidrun() for(inti=0;i inc(); classDecimplementsRunnable publicvoidrun() for(inti=0;i dec(); 43. Java有没有goto?有,但不用,只是作为保留关键字44. 启动一个线程是用run()还是start()?Start()45. 给我一个你最常见到的runtime exception。ClassCastException,IndexOutOfBoundsException,NullPointerException,MissingResourceException,SecurityException, SystemException46. 数组有没有length()这个方法? String有没有length()这个方法?数组没有length()的方法,但是有length的属性,String有length()的方法47. ARRAYLIST与VECTOR的区别。见41题48. jdbc调用数据库的步骤?导入必要的类,装入JDBC驱动程序,识别数据源,分配一个Connection对象,分配一个Statement对象,使用Statement执行一个查询,从返回的ResultSet对象中检索数据,关闭ResultSet,关闭Statement对象,关闭Connection对象49. 要求:请补充以下方法体,实现一个以字符串表示的时间转为一个日期对象?比如将”2006-05-01 12:24:48”这个字符串表示的时间转换成为Java.util.Date对象,并返回。 public Date doup(String datestr)SimpleDateFormat format = new SimpleDateFormat(yyyy-MM-dd HH:mm:ss);try Date date = format.parse(datestr);return date.toString(); catch (ParseException e) e.printStackTrace(); finally return date;50. 描述一下你对接口的理解1、接口是为了实现Java中的多继承的2、程序调用接口,利用面向对象多态的特征,就可以有多种方法来实现接口,就大大降低了程序的耦合51. 构造器Constructor是否可被override?不能,因为Constructor不能被继承52. 是否可以继承String类?不能,因为是FINAL类,final类不能够被继承53. swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?可以在byte,long上,但是不能在String上54. try 里有一个return语句,那么紧跟在这个try后的finally 里的code会不会被执行,什么时候被执行,在return前还是后?会执行,在return之前55. 编程题: 用最有效率的方法算出2乘以8等於几?2356. 两个对象值相同(x.equals(y) = true),但却可有不同的hash code,这句话对不对?可以,如果自己重写equals方法的话。没有重写的情况下不对。57. 当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?是值传递,传递的值是对象的内存地址58. 当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?可以进入此对象其他未同步的方法。59. 编程题: 写一个Singleton出来。public class Singleton private static Singleton instance = null;public static synchronized Singleton getInstance() if (instance = null)instance = new Singleton();return instance;60. Java中的异常处理机制的简单原理和应用。JAVA程序违反了JAVA的语义规则时,JAVA虚拟机就会将发生的错误表示为一个异常。违反语义规则包括2种情况。一种是JAVA类库内置的语义检查。例如数组下标越界,会引发IndexOutOfBoundsException;访问null的对象时会引发 NullPointerException。另一种情况就是JAVA允许程序员扩展这种语义检查,程序员可以创建自己的异常,并自由选择在何时用 throw关键字引发异常。所有的异常都是java.lang.Thowable的子类。61. 写出一个JAVABEAN ,此JAVABEAN采用singleton模式,在产生的实例中带有一个string类型的message属性,此JAVABEAN提供一个AA方法,返回“你是”的STRING public class Singleton private static Singleton instance = null;public static synchronized Singleton getInstance() if (instance = null)instance = new Singleton();return instance;public String AA(String str) return 你是 + str;62. 垃圾回收的优点和原理。并考虑2种回收机制。1.JVM的gc概述 gc即垃圾收集机制是指jvm用于释放那些不再使用的对象所占用的内存。java语言并不要求jvm有gc,也没有规定gc如何工作。不过常用的jvm都有gc,而且大多数gc都使用类似的算法管理内存和执行收集操作。在充分理解了垃圾收集算法和执行过程后,才能有效的优化它的性能。有些垃圾收集专用于特殊的应用程序。比如,实时应用程序主要是为了避免垃圾收集中断,而大多数OLTP应用程序则注重整体效率。理解了应用程序的工作负荷和jvm支持的垃圾收集算法,便可以进行优化配置垃圾收集器。垃圾收集的目的在于清除不再使用的对象。gc通过确定对象是否被活动对象引用来确定是否收集该对象。gc首先要判断该对象是否是时候可以收集。两种常用的方法是引用计数和对象引用遍历。详细见文档63. 请说出你所知道的线程同步的方法。(1).同步代码块synchronized(object) 代码段 (2)同步函数public synchronized void sale()/.(3)lock64. 你所知道的集合类都有哪些?主要方法?参考14,27,28题65. 描述一下JVM加载class文件的原理机制?见详细文档66. char型变量中能不能存贮一个中文汉字?为什么?可以,java是使用unicode编码,一个char型两个字节67. 多线程有几种实现方法,都是什么?多线程有两种实现方法:继承Thread类,实现Runable接口68. 线程的基本概念、线程的基本状态以及状态之间的关系线程指在程序执行过程中,能够执行程序代码的一个执行单位,每个程序至少都有一个线程,也就是程序本身。Java中的线程有四种状态分别是:就绪、运行、挂起、结束概念及应用详解69. final, finally, finalize的区别。final-修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract的,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定 初值,而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,不能重载finally-再异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块(如果有的话)。finalize-方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的,因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。70. sleep() 和 wait() 有什么区别?sleep()方法是使线程停止一段时间的方法。在sleep 时间间隔期满后,线程不一定立即恢复执行。这是因为在那个时刻,其它线程可能正在运行而且没有被调度为放弃执行,除非(a)“醒来”的线程具有更高的优先级 (b)正在运行的线程因为其它原因而阻塞。wait()是线程交互时,如果线程对一个同步对象x 发出一个wait()调用,该线程会暂停执行,被调对象进入等待状态,直到被唤醒或等待时间到。71. error和exception有什么区别?Exceptions1可以是可被控制(checked) 或不可控制的(unchecked)2表示一个由程序员导致的错误3应该在应用程序级被处理Errors1总是不可控制的(unchecked)2经常用来用于表示系统错误或低层资源的错误3如何可能的话,应该在系统级被捕捉详解:了解异常与错误的区别,并且知道当你截获一个异常时,应该怎么办。 by Josh Street 许多程序员并没有意识到一个错误和一个异常是有区别的,在出现问题时,这种区别对如何操作你的代码有很重要的含意(见工具条,“简介错误与异常”)。正如Mary Campione在The Java Tutorial(Java指南)中所写的,“一个异常是在一个程序执行过程中出现的一个事件,它中断了正常指令的运行。”根据American Herita
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 转让加工机床合同范本
- 配音中介佣金合同范本
- 活动模板拍摄合同范本
- 美团不签合同只签协议
- 门面空地出租合同范本
- 酒吧工具转让合同范本
- 通信光缆采购合同范本
- 配音兼职协议合同模板
- 线上产品定金合同范本
- 研究合同协议模板模板
- 2025年辅警笔试题库行测及答案指导
- 运维7×24小时服务保障方案
- 2025年建筑行业员工劳动合同
- 《医疗机构医疗质量安全专项整治行动方案》解读课件
- 继电器知识培训课件
- 2025年辽宁省中考语文真题卷含答案解析
- 2025年国家网络安全宣传周知识竞赛题库(试题及答案)
- 《论教育》主要篇目课件
- 防止滑倒摔伤事故的安全培训
- 《新能源材料与器件》教学课件-04电化学能源材料与器件
- 轻型门刚设计中风荷体型系数取值的适用标准讨论
评论
0/150
提交评论