java基础笔试题.pdf
《java基础笔试题.pdf》由会员分享,可在线阅读,更多相关《java基础笔试题.pdf(64页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Java基础部分基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语法,集合的语法,i o 的语法,虚拟机方面的语法,其他。有些题来自网上搜集整理,有些题来自学员面试后的反馈,说真的,少数一些网上的面试题,我真怀疑其是否还有存在价值!1、一个”.java”源文件中是否可以包括多个类(不是内部类)?有什么限制?可以有多个类,但只能有一个public的类,并 且 public的类名必须与文件名相一致。2、Java 有没有 goto?java中的保留字,现在没有在java中使用。3、说说&和&的区别。&和&都可以用作逻辑与的运算符,表示逻辑与(and),当运算符
2、两边的表达式的结果都为true时,整个运算结果才为tru e,否则,只要有一方为false,则结果为false。&还具有短路的功能,即如果第一个表达式为fa lse,则不再计算第二个表达式,例如,对 于 if(str!=null&!str.equals)表 达 式,当 str为 null时,后面的表达式不会执行,所以不会出现NullPointerException如果将&改为&,则会抛出 NullPointerException 异常。If(x=33&+y0)y 会增长,If(x=33&+y0)不会增长&还可以用作位运算符,当&操作符两边的表达式不是boolean类型时,&表示按位与操作,我们
3、通常使用OxOf来与一个整数进行&运算,来获取该整数的最低4个bit位,例如,0 x31&OxOf的结果为0 x01。备注:这道题先说两者的共同点,再说出&和&的特殊之处,并列举一些经典的例子来表明自己理解透彻深入、实际经验丰富。4、在 JAVA中如何跳出当前的多重嵌套循环?在Java中,要想跳出多重循环,可以在外面的循环语句前定义一个标号,然后在里层循环体的代码中使用带有标号的break语句,即可跳出外层循环。例如,ok:for(int i=0;i10;i+)(for(int j=0;j10;j+)(System,out.println(ai=v+i+“门二”+j);if(j=5)break
4、 ok;)另外,我个人通常并不使用标号这种方式,而是让外层的循环条件表达式的结果可以受到里层循环体代码的控制,例如,要在二维数组中查找到某个数字。int arr =1,2,3,4,5,6,7,9;boolean found=false;for(int i=0;iarr.length&!found;i+)for(int j=0;jarri.length;j+)S y s t e m,o u t.p r i n t i n(ui=w+i +”,j=+j);i f (a r r i j =5)(f o u n d =t r u e;b r e a k;5、switch语句能否作用在byte上,能否作
5、用在long上,能否作用在String?在 switch(exprl)中,e x p rl只能是一个整数表达式或者枚举常量(更大字体),整数表达式可以是int基本类型或Integer包装类型,由于,byte,short,char都可以隐含转换为i n t,所以,这些类型以及这些类型的包装类型也是可以的。显然,long和 String类型都不符合switch的语法规定,并且不能被隐式转换成int类型,所以,它们不能作用于swtich语句中。6、short si=1;si=si+1;有什么错?short si=1;si+=1;有什么错?对 于 short si=1;si=si+1;由于sl+1运算
6、时会自动提升表达式的类型,所以结果是in t型,再赋值给short类 型 s i 时,编译器将报告需要强制转换类型的错误。对 于 short si=1;si+=1;由 于+=是 java语言规定的运算符,java编译器会对它进行特殊处理,因此可以正确编译。7、char型变量中能不能存贮一个中文汉字?为什么?char型变量是用来存储Unicode编码的字符的,unicode编码字符集中包含了汉字,所以,char型变量中当然可以存储汉字啦。不过,如果某个特殊的汉字没有被包含在unicode编码字符集中,那么,这 个 char型变量中就不能存储这个特殊汉字。补充说明:unicode编码占用两个字节,
7、所以,char类型的变量也是占用两个字节。备注:后面一部分回答虽然不是在正面回答题目,但是,为了展现自己的学识和表现自己对问题理解的透彻深入,可以回答一些相关的知识,做到知无不言,言无不尽。8、用最有效率的方法算出2 乘以8 等於几?2 3,因为将一个数左移n位,就相当于乘以了 2的n次方,那么,一个数乘以8只要将其左移3位即可,而位运算cpu直接支持的,效率最高,所以,2乘 以8等於几的最效率的方法是2 ro u n d,这些方法的作用与它们的英文名称的含义相对应,例如,ceil的英文意义是天花板,该方法就表示向上取整,所 以,Math.ceiI(lL3)的结果为12,Math.ceil(-
8、11.3)的结果是-11;floor的英文意义是地板,该方法就表示向下取整,所以,Math.floor(l 1.6)的结果为 U,Math.floor(-11.6)的结果是-12;最难掌握的是round方法,它表示“四舍五入”,算法为Math.floor(x+0.5),即将原来的数字加上0.5后再向下取整,所以,Math.round。1.5)的结果为 12,Math.round(-11.5)的结果为-11。16、下面的代码有什么不妥之处?1.if(username.equals(t6zxx,)2.int x=1;return x=l?true:false;17、请说出作用域public,pri
9、vate,protected,以及不写时的区别这四个作用域的可见范围如下表所示。说明:如果在修饰的元素上面没有写任何访问修饰符,则表示friendly。作用域 当前类 同一 package子孙类 其 他 packagepublic 4 4 4 dprotected 4 4yxfriendly 7 7 x xprivate 4 x x x备注:只要记住了有一4 种访问权限,4 个访问范围,然后将全选和范围在水平和垂直方向上分别按排从小到大或从大到小的顺序排列,就很容易画出上面的图了。18、Overload 和 Override 的区别。Overloaded 的方法是否可以改变返回值的类型?Ove
10、rload是重载的意思,Override是覆盖的意思,也就是重写。重 载 Overload表示同一个类中可以有多个名称相同的方法,但这些方法的参数列表各不相同(即参数个数或类型不同)。重 写 Override表示子类中的方法可以与父类中的某个方法的名称和参数完全相同,通过子类创建的实例对象调用这个方法时,将调用子类中的定义方法,这相当于把父类中定义的那个完全相同的方法给覆盖了,这也是面向对象编程的多态性的一种表现。子类覆盖父类的方法时,只能比父类抛出更少的异常,或者是抛出父类抛出的异常的子异常,因为子类可以解决父类的一些问题,不能比父类有更多的问题。子类方法的访问权限只能比父类的更大,不能更小
11、。如果父类的方法是private类型,那么,子类则不存在覆盖的限制,相当于子类中增加了一个全新的方法。至 于 Overloaded的方法是否可以改变返回值的类型这个问题,要看你倒底想问什么呢?这个题目很模糊。如果几个Overloaded的方法的参数列表不一样,它们的返回者类型当然也可以不一样。但我估计你想问的问题是:如果两个方法的参数列表完全一样,是否可以让它们的返回值不同来实现重载Overload。这是不行的,我们可以用反证法来说明这个问题,因为我们有时候调用一个方法时也可以不定义返回结果变量,即不要关心其返回结果,例如,我们调用map.remove(key)方法时,虽然remove方法有返
12、回值,但是我们通常都不会定义接收返回结果的变量,这时候假设该类中有两个名称和参数列表完全相同的方法,仅仅是返回类型不同,java就无法确定编程者倒底是想调用哪个方法了,因为它无法通过返回结果类型来判断。override可以翻译为覆盖,从字面就可以知道,它是覆盖了一个方法并且对其重写,以求达到不同的作用。对我们来说最熟悉的覆盖就是对接口方法的实现,在接口中一般只是对方法进行了声明,而我们在实现时,就需要实现接口声明的所有方法。除了这个典型的用法以外,我们在继承中也可能会在子类覆盖父类中的方法。在覆盖要注意以下的几点:1、覆盖的方法的标志必须要和被覆盖的方法的标志完全匹配,才能达到覆盖的效果;2、
13、覆盖的方法的返回值必须和被覆盖的方法的返回一致;3、覆盖的方法所抛出的异常必须和被覆盖方法的所抛出的异常一致,或者是其子类;4、被覆盖的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行覆盖。overload对我们来说可能比较熟悉,可以翻译为重载,它是指我们可以定义一些名称相同的方法,通过定义不同的输入参数来区分这些方法,然后再调用时,VM 就会根据不同的参数样式,来选择合适的方法执行。在使用重载要注意以下的几点:1、在使用重载时只能通过不同的参数样式。例如,不同的参数类型,不同的参数个数,不同的参数顺序(当然,同一方法内的几个参数类型必须不一样,例如可以是 fun(
14、int,float),但是不能为 fun(int,int);2、不能通过访问权限、返回类型、抛出的异常进行重载;3、方法的异常类型和数目不会对重载造成影响;4、对于继承来说,如果某一方法在父类中是访问权限是priavte,那么就不能在子类对其进行重载,如果定义的话,也只是定义了一个新方法,而不会达到重载的效果。19、4 月 21号班同学贡献的一些题?朱 w enchao,女:3500,21 岁搞了多个重载方法,参数分别是int,char,和 double,然后将double x=2,传递进去,会选择哪个方法?说说对javaee中的session的理解,你是怎么用session的?陈 yong,
15、4000一个房子里有椅子,椅子有腿和背,房子与椅子是什么关系,椅子与腿和背是什么关系?如果房子有多个椅子,就是聚合关系,否则是一种关联关系,当然,聚合是一种特殊的关联。椅子与腿和背时组合关系。说说has a 与 is a 的区别。答:is-a表示的是属于得关系。比如兔子属于一种动物(继承关系)。has-a表示组合,包含关系。比如兔子包含有腿,头等组件;工厂模式的类图20.5 月 15号班同学贡献的一些题?1.线程如何同步和通讯。同学回答说synchronized方法或代码块!面试官似乎不太满意!只有多个synchronized代码块使用的是同一个监视器对象,这 些 synchronized代码
16、块之间才具有线程互斥的效果,假 如a 代码块用o b jl作为监视器对象,假如 b 代码块用obj2作为监视器对象,那么,两个并发的线程可以同时分别进入这两个代码块中。这里还可以分析一下同步的原理。对于同步方法的分析,所用的同步监视器对象是this接着对于静态同步方法的分析,所用的同步监视器对象是该类的Class对象接着对如何实现代码块与方法的同步进行分析。2.ClassLoader 如何加载 class。jvm里有多个类加载,每个类加载可以负责加载特定位置的类,例如,bootstrap类加载负责加载jre/lib/rt.jar中的类,我们平时用的jdk中的类都位于rt.jar中。extcla
17、ssloader 负责加载 jar/lib/ext/*.jar 中的类,appclassloader 负责 classpath 指定的目录或jar中的类。除了 bootstrap之外,其他的类加载器本身也都是java类,它们的父类是ClassLoadero3.Servlet的生命周期4.抽象类的作用5.ArrayList如何实现插入的数据按自定义的方式有序存放class MyBean implements Comparable(public int compareTo(Object obj)if(!obj instanceof MyBean)throw new ClassCastExcepti
18、on()具体异常的名称,我要查jdk文档。MyBean other=(MyBean)obj;return age other.age?1:age=other.age?0:-l;class MyTreeSet private ArrayList datas=new ArrayList();public void add(Object obj)for(int i=0;i“zxx,male,28,30000Person,既然大家都要这么干,并且没有个统一的干法,于是,sun公司就提出一种统一的解决方案,它会把对象变成某个格式进行输入和输出,这种格式对程序员来说是透明(transparent)的,但是
19、,我们的某个类要想能被sun的这种方案处理,必须实现 Serializable 接口。ObjectOutputStream.writeObject(obj);Object obj=ObjectInputStream.readObject();假设两年前我保存了某个类的一个对象,这两年来,我修改该类,删除了某个属性和增加了另外一个属性,两年后,我又去读取那个保存的对象,或有什么结果?未知!sun的jdk就会蒙了。为此,一个解决办法就是在类中增加版本后,每一次类的属性修改,都应该把版本号升级一下,这样,在读取时,比较存储对象时的版本号与当前类的版本号,如果不一致,则直接报版本号不同的错!9.has
20、hCode方法的作用?说(网友提供的一段,待改进:hashcode这个方法是用来鉴定2 个对象是否相等的。那你会说,不是还有equals这个方法吗?不错,这 2 个方法都是用来判断2 个对象是否相等的。但是他们是有区别的。一般来讲,equals这个方法是给用户调用的,如果你想判断2 个对象是否相等,你可以重写equals方法,然后在代码中调用,就可以判断他们是否相等了。简单来讲,equals方法主要是用来判断从表面上看或者从内容上看,2 个对象是不是相等。举个例子,有个学生类,属性只有姓名和性别,那么我们可以认为只要姓名和性别相等,那么就说这2 个对象是相等的。hashcode方法一般用户不会
21、去调用,比如在hashmap中,由于key是不可以重复的,他在判断key是不是重复的时候就判断了 hashcode这个方法,而且也用到了 equals方法。这里不可以重复是说equals和 hashcode只要有一个不等就可以了!所以简单来讲,hashcode相当于是一个对象的编码,就好像文件中的md5,他和equals不同就在于他返回的是in t型的,比较起来不直观。我们一般在覆盖equals的同时也要覆盖hashcode,让他们的逻辑一致。举个例子,还是刚刚的例子,如果姓名和性别相等就算2 个对象相等的话,那 么 hashcode的方法也要返回姓名的hashcode值加上性别的hashco
22、de值,这样从逻辑上,他们就一致了。要从物理上判断2 个对象是否相等,用=就可以了。)lO.webservice 问得很多11.设计出计算任意正整数的阶层。12.在oracle数据库中需要查询出前8 条记录的sql语句怎么写?13.什么是SO A,谈谈你的SOA的理解。service orientiedarchitecture14.如何实现线程间的通讯。新题目:编程:1.编写一个函数将一个十六进制数的字符串参数转换成整数返回。String str=13abF;int len=str.length;int sum=0;for(int i=0;ilen;i+)char c=str.char At(
23、len-1 -i);int n=Character.digit(c,16);sum+=n*(l(4*i);)其实,也可以用Integer.parseint(str 6),但面试官很可能是想考我们的编码基本功。编程2:银行贷款的还款方式中最常用的是一种叫“等额本息”,还款法,即借款人在约定还款期限内的每一期(月)归还的金额(产生的利息+部分本金)都是相等的,现有一笔总额为T 元的N 年期住房贷款,年利率为R,要求算出每一期的还款的本金和利息总额,请写出解决思路和任意一种编程语言实现的主要代码。思路:既然是按月还款,那我就要将N 年按月来计算,即要还N*12个月,这样就可以求出每月要还的本金。由于
24、每月要还的那部分本金所欠的时间不同,所以,它们所产生的利息是不同的,该部分本金的利息为:部分本金额*所欠月数*月利率。应该是这么个算法,如果利息还计利息,如果月还款不按年利率来算,老百姓算不明白的。int monthMoney=T/N/12;float monthRate=R/12;int totalMonth=N*12;float totalRate=0;for(int i=l;i=totalMonth;i+4-)totalRate+=monthMoney*monthRate*i;)int result=monthMoney+totalRate/N/12;几道题:l.*Spring的 D I
25、是什么(学员注:除了 IOC,AOP这些概念,还不太清楚D I的概念)2.*任意数字序列“123456”之类,输出它们所有的排列组合3.*什么是AOP(学员注:会用,但感觉说不清楚)我注:由上面这些题,可以看出,思想很重要,只有琢磨思想和原理的人才能很好地回答这些问题!2 题的答案:String str=xafdvs”;char J arrl=str.toChar Array();char arr2=Arrays.copyOf(arrl,arrl.length);for(int i=0;iarrl.length-1 ;i+)for(int j=i+1;j 构造器 Constructor 是否可
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 基础 笔试
限制150内