java面试题和技巧.docx
- 文档编号:7837266
- 上传时间:2023-01-26
- 格式:DOCX
- 页数:13
- 大小:27.84KB
java面试题和技巧.docx
《java面试题和技巧.docx》由会员分享,可在线阅读,更多相关《java面试题和技巧.docx(13页珍藏版)》请在冰豆网上搜索。
java面试题和技巧
3.1 StaticNestedClass和InnerClass的不同。
StaticNestedClass是被声明为静态(static)的内部类,它可以不依赖于外部类实例被实例化。
而通常的内部类需要在外部类实例化后才能实例化。
3.2 JSP中动态INCLUDE与静态INCLUDE的区别?
动态INCLUDE用jsp:
include动作实现 includepage="included.jsp"flush="true"/>它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数。 静态INCLUDE用include伪码实现,它不会检查所含文件的变化,适用于包含静态页面<%@includefile="included.htm"%> 3.3 什么时候用assert. assertion(断言)在软件开发中是一种常用的调试方式,很多开发语言中都支持这种机制。 在实现中,assertion就是在程序中的一条语句,它对一个boolean表达式进行检查,一个正确程序必须保证这个boolean表达式的值为true;如果该值为false,说明程序已经处于不正确的状态下,系统将给出警告或退出。 一般来说,assertion用于保证程序最基本、关键的正确性。 assertion检查通常在开发和测试时开启。 为了提高性能,在软件发布后,assertion检查通常是关闭的。 3.4 GC是什么? 为什么要有GC? GC是垃圾收集的意思(GabageCollection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的显示操作方法。 3.5 shorts1=1;s1=s1+1;有什么错? shorts1=1;s1+=1;有什么错? shorts1=1;s1=s1+1;(s1+1运算结果是int型,需要强制转换类型) shorts1=1;s1+=1;(可以正确编译) 3.6 Math.round(11.5)等於多少? Math.round(-11.5)等於多少? Math.round(11.5)==12 Math.round(-11.5)==-11 round方法返回与参数最接近的长整数,参数加1/2后求其floor. 3.7 Strings=newString("xyz");创建了几个StringObject? 两个 3.8 设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1.写出程序。 以下程序使用内部类实现线程,对j增减的时候没有考虑顺序问题。 packagetest; publicclassThreadTest1{ privateintj; publicstaticvoidmain(Stringargs[]){ ThreadTest1tt=newThreadTest1(); Incinc=tt.newInc(); Decdec=tt.newDec(); for(inti=0;i<2;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<3;i++){ inc(); } } } classDecimplementsRunnable{ publicvoidrun(){ for(inti=0;i<3;i++){ dec(); } } } } 3.9 Java有没有goto? Java中的保留字,现在没有在Java中使用。 3.10 启动一个线程是用run()还是start()? 启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行。 这并不意味着线程就会立即运行。 run()方法可以产生必须退出的标志来停止一个线程。 2.1 HashMap和Hashtable的区别。 HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable. HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。 HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey.因为contains方法容易让人引起误解。 Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Mapinterface的一个实现。 最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap就必须为之提供外同步。 Hashtable和HashMap采用的hash/rehash算法都大概一样,所以性能不会有很大的差异。 2.2 final,finally,finalize的区别。 final用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。 finally是异常处理语句结构的一部分,表示总是执行。 finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。 2.3 sleep()和wait()有什么区别? sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。 调用sleep不会释放对象锁。 wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。 2.4 Overload和Override的区别。 Overloaded的方法是否可以改变返回值的类型? 方法的重写Overriding和重载Overloading是Java多态性的不同表现。 重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。 如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写(Overriding)。 子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被"屏蔽"了。 如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。 Overloaded的方法是可以改变返回值的类型。 2.5 error和exception有什么区别? error表示恢复不是不可能但很困难的情况下的一种严重问题。 比如说内存溢出。 不可能指望程序能处理这样的情况。 exception表示一种设计或实现问题。 也就是说,它表示如果程序运行正常,从不会发生的情况。 2.6 同步和异步有何异同,在什么情况下分别使用他们? 举例说明。 如果数据将在线程间共享。 例如正在写的数据以后可能被另一个线程读到,或者正在读的数据可能已经被另一个线程写过了,那么这些数据就是共享数据,必须进行同步存取。 当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步编程,在很多情况下采用异步途径往往更有效率。 2.7 abstractclass和interface有什么区别? 声明方法的存在而不去实现它的类被叫做抽象类(abstractclass),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。 不能创建abstract类的实例。 然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。 不能有抽象构造函数或抽象静态方法。 Abstract类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。 取而代之,在子类中实现该方法。 知道其行为的其它类可以在类中实现这些方法。 接口(interface)是抽象类的变体。 在接口中,所有方法都是抽象的。 多继承性可通过实现这样的接口而获得。 接口中的所有方法都是抽象的,没有一个有程序体。 接口只可以定义staticfinal成员变量。 接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。 当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。 然后,它可以在实现了该接口的类的任何对象上调用接口的方法。 由于有抽象类,它允许使用接口名作为引用变量的类型。 通常的动态联编将生效。 引用可以转换到接口类型或从接口类型转换,instanceof运算符可以用来决定某对象的类是否实现了接口。 2.8 heap和stack有什么区别。 栈是一种线形集合,其添加和删除元素的操作应在同一段完成。 栈按照后进先出的方式进行处理。 堆是栈的一个组成元素。 2.9 forward和redirect的区别 forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原来的地址。 redirect就是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,一般来说浏览器会用刚才请求的所有参数重新请求,所以session,request参数都可以获取。 2.10 EJB与JavaBean的区别? JavaBean是可复用的组件,对JavaBean并没有严格的规范,理论上讲,任何一个Java类都可以是一个Bean.但通常情况下,由于JavaBean是被容器所创建(如Tomcat)的,所以JavaBean应具有一个无参的构造器,另外,通常JavaBean还要实现Serializable接口用于实现Bean的持久性。 JavaBean实际上相当于微软COM模型中的本地进程内COM组件,它是不能被跨进程访问的。 EnterpriseJavaBean相当于DCOM,即分布式组件。 它是基于Java的远程方法调用(RMI)技术的,所以EJB可以被远程访问(跨进程、跨计算机)。 但EJB必须被布署在诸如Webspere、WebLogic这样的容器中,EJB客户从不直接访问真正的EJB组件,而是通过其容器访问。 EJB容器是EJB组件的代理,EJB组件由容器所创建和管理。 客户通过容器来访问真正的EJB组件。 一、笔试题: A)JAVA基础多项选择题,比较简单,略 B)问答: 1)ajax原理、如何实现刷新数据及优点? 2)门面模式的解释、适用场合? 3)写6个linux常用命令? 4)SQL语句题,较简单 C)编程: 1)有三个线程ID分别是A、B、C,请有多线编程实现,在屏幕上循环打印10次ABCABC… 2)假如有字符串“6sabcsssfsfs33”,用最有快速的方法去掉字符“ab3”,不能用java内置字符串方法(indeOf,substring,replaceAll等)? 二、上机题: Java上机实现统计某一目录下每个文件中出现的字母个数、数字个数、空格个数及行数? 三、面试题: 1、说说JVM原理? 内存泄露与溢出区别,何时产生内存泄露? 2、用java怎么实现有每天有1亿条记录的DB存储? mysql上亿记录数据量的数据库如何设计? 3、mysql支持事务吗? DB存储引擎有哪些? 4、mvc原理,mvc模式的优缺点,如果让你设计你会怎么改造MVC? 5、hibernate支持集群吗? 如何实现集群? 6、tomcat最多支持并发多少用户? 7、map原理,它是如何快速查找key的? map与set区别? 8、描术算法,如何有效合并两个文件: 一个是1亿条的用户基本信息,另一个是用户每天看电影连续剧等的记录,5000万条。 内存只有1G? ? ? 9、在1亿条用户记录里,如何快速查询统计出看了5个电影以上的用户? 10、Spring如何实现IOC与AOP的,说出实现原理? 期待大家的探讨,共同提高,多谢 找工作要面试,有面试就有对付面试的办法。 以下一些题目来自我和我朋友痛苦的面试经历,提这些问题的公司包括IBM,E*Trade,Siebel,Motorola,SUN,以及其它大小公司。 面试是没什么道理可讲的,它的题目有的不合情理、脱离实际。 有在纸上写的,有当面考你的,也有在电话里问的,给你IDE的估计很少(否则你赶快去买彩票,说不定中)。 所以如果你看完此文后,请不要抱怨说这些问题都能用IDE来解决。 你必须在任何情况下准确回答这些问题,在面试中如果出现一两题回答不准确很有可能你就被拒之门外了。 当然这些都是Java的基本题,那些面试的人大多数不会问你Hibernate有多先进,Eclipse的三个组成部分,或commanddesignpattern,他们都是老一辈了,最喜欢问的就是基础知识。 别小看了这些基础,我朋友水平一流,结果就栽在一到基础知识的问题下,和高薪无缘。 好了废话少说,开始正题。 下面是答案 第一,谈谈final,finally,finalize的区别。 final? 修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。 因此一个类不能既被声明为abstract的,又被声明为final的。 将变量或方法声明为final,可以保证它们在使用中不被改变。 被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。 被声明为final的方法也同样只能使用,不能重载 finally? 再异常处理时提供finally块来执行任何清除操作。 如果抛出一个异常,那么相匹配的catch子句就会执行,然后控制就会进入finally块(如果有的话)。 finalize? 方法名。 Java技术允许使用finalize()方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。 这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。 它是在Object类中定义的,因此所有的类都继承了它。 子类覆盖finalize()方法以整理系统资源或者执行其他清理工作。 finalize()方法是在垃圾收集器删除对象之前对这个对象调用的。 第二,AnonymousInnerClass(匿名内部类)是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)? 匿名的内部类是没有名字的内部类。 不能extends(继承)其它类,但一个内部类可以作为一个接口,由另一个内部类实现。 第三,StaticNestedClass和InnerClass的不同,说得越多越好(面试题有的很笼统)。 NestedClass(一般是C++的说法),InnerClass(一般是JAVA的说法)。 Java内部类与C++嵌套类最大的不同就在于是否有指向外部的引用上。 具体可见http: // 注: 静态内部类(InnerClass)意味着1创建一个static内部类的对象,不需要一个外部类对象,2不能从一个static内部类的一个对象访问一个外部类对象 第四,&和&&的区别。 &是位运算符。 &&是布尔逻辑运算符。 第五,HashMap和Hashtable的区别。 都属于Map接口的类,实现了将惟一键映射到特定的值上。 HashMap类没有分类或者排序。 它允许一个null键和多个null值。 Hashtable类似于HashMap,但是不允许null键和null值。 它也比HashMap慢,因为它是同步的。 第六,Collection和Collections的区别。 Collections是个java.util下的类,它包含有各种有关集合操作的静态方法。 Collection是个java.util下的接口,它是各种集合结构的父接口。 第七,什么时候用assert。 断言是一个包含布尔表达式的语句,在执行这个语句时假定该表达式为true。 如果表达式计算为false,那么系统会报告一个Assertionerror。 它用于调试目的: assert(a>0);//throwsanAssertionerrorifa<=0 断言可以有两种形式: assertExpression1; assertExpression1: Expression2; Expression1应该总是产生一个布尔值。 Expression2可以是得出一个值的任意表达式。 这个值用于生成显示更多调试信息的String消息。 断言在默认情况下是禁用的。 要在编译时启用断言,需要使用source1.4标记: javac-source1.4Test.java 要在运行时启用断言,可使用-enableassertions或者-ea标记。 要在运行时选择禁用断言,可使用-da或者-disableassertions标记。 要系统类中启用断言,可使用-esa或者-dsa标记。 还可以在包的基础上启用或者禁用断言。 可以在预计正常情况下不会到达的任何位置上放置断言。 断言可以用于验证传递给私有方法的参数。 不过,断言不应该用于验证传递给公有方法的参数,因为不管是否启用了断言,公有方法都必须检查其参数。 不过,既可以在公有方法中,也可以在非公有方法中利用断言测试后置条件。 另外,断言不应该以任何方式改变程序的状态。 第八,GC是什么? 为什么要有GC? (基础)。 GC是垃圾收集器。 Java程序员不用担心内存管理,因为垃圾收集器会自动进行管理。 要请求垃圾收集,可以调用下面的方法之一: System.gc() Runtime.getRuntime().gc() 第九,Strings=newString("xyz");创建了几个StringObject? 两个对象,一个是“xyx”,一个是指向“xyx”的引用对象s。 第十,Math.round(11.5)等於多少? Math.round(-11.5)等於多少? Math.round(11.5)返回(long)12,Math.round(-11.5)返回(long)-11; 第十一,shorts1=1;s1=s1+1;有什么错? shorts1=1;s1+=1;有什么错? shorts1=1;s1=s1+1;有错,s1是short型,s1+1是int型,不能显式转化为short型。 可修改为s1=(short)(s1+1)。 shorts1=1;s1+=1正确。 第十二,sleep()和wait()有什么区别? 搞线程的最爱 sleep()方法是使线程停止一段时间的方法。 在sleep时间间隔期满后,线程不一定立即恢复执行。 这是因为在那个时刻,其它线程可能正在运行而且没有被调度为放弃执行,除非(a)“醒来”的线程具有更高的优先级 (b)正在运行的线程因为其它原因而阻塞。 wait()是线程交互时,如果线程对一个同步对象x发出一个wait()调用,该线程会暂停执行,被调对象进入等待状态,直到被唤醒或等待时间到。 第十三,Java有没有goto? Goto? java中的保留字,现在没有在java中使用。 第十四,数组有没有length()这个方法? String有没有length()这个方法? 数组没有length()这个方法,有length的属性。 String有有length()这个方法。 第十五,Overload和Override的区别。 Overloaded的方法是否可以改变返回值的类型? 方法的重写Overriding和重载Overloading是Java多态性的不同表现。 重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。 如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写(Overriding)。 子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。 如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。 Overloaded的方法是可以改变返回值的类型。 第十六,Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别? Set里的元素是不能重复的,那么用iterator()方法来区分重复与否。 equals()是判读两个Set是否相等。 equals()和==方法决定引用值是否指向同一对象equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真值。 第十七,给我一个你最常见到的runtimeexception。 ArithmeticException,ArrayStoreException,BufferOverflowException
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 试题 技巧