Java面试题-团结湖-面试的时候才发现自己不会的东西有很多

3。面向对象的三个特征有(多选)

A:封装

B:继承

C:多态

D:命名空间

解答:ABC


4。当操作一个数据集合时,绝大多数操作是在集合的前部或者中间位置新增或者删除数据。

若不考虑查找要求,那么下列哪个类的执行效率最高?

A:java.util.ArrayList

B:java.util.LinkedList

C:java.util.Vector

D:效率相同

解答:不考虑查找就肯定链表效率高B


5。考虑以下代码的输出是什么?

public static void testString(){

String s1 = "abc" + "def";

String s2 = new String(s1);

if(s1 == s2){

System.out.println("1");

}else if(s1.equals(s2)){

System.out.println("2");

}else {

System.out.println("0");

}

}

A:2

B:1

C:0

D:无输出

解答:在JAVA中利用"=="比较变量时,系统使用变量在"栈"中所存的值作为比较的依据。

基本数据类型在"栈"中存的是其内容值,而对象类型在"栈"中存的是地址,这些地址指向"堆"中的对象。

java.lang包中的Object类有public boolean equals(Object obj)方法,它比较两个对象是否相等。

其它对象的equals方法仅当被比较的两个引用指向的对象内容相同时,对象的equals()方法返回true。

String重写了equals方法,当两个字符串内容相同则返回true

总之,"=="和"!="比较的是地址.也可认为"=="和"!="比较的是对象句柄;而equals()比较的是对象内容.

或者说,,"=="和"!="比较的是"栈"中的内容,而equals()比较的是"堆"中的内容.

new String 就会产生一个新的地址所以 s1 == s2 返回false,equals比较内容相同,故答案为A

扩展1:s1不变,s2= "abcdef" 答案选B,因为s1在编译的时候就把两部分合并了,在字符串池中只有一个字符串

扩展2:intern()方法当调用 intern 方法时,如果池已经包含一个等于此 String 对象的字符串(该对象由 equals(Object) 方法确定),

则返回池中的字符串。否则,将此 String 对象添加到池中,并且返回此 String 对象的引用。

它遵循对于任何两个字符串 s 和 t,当且仅当 s.equals(t) 为 true 时,s.intern() == t.intern() 才为 true。

所有字面值字符串和字符串赋值常量表达式都是内部的。

简而言之就是调用intern方法会从字符串池中取(有则取没有则添加)

对于new String是在字符串池之外新建的对象(和字符串池中的不同),示例如下:

String s1 = "abc" + "def";

String s2 = new String(s1);

String s3 = new String("abcdef");//和字符串池中的不同

s2 = s2.intern();// s2虽然初始时候是new的,但马上去字符串池中获取这个字符串了

System.out.println(s1 == s2);// true

System.out.println(s1 == s3);// false

System.out.println(s1.equals(s2));// true

扩展3:toUpperCase()方法的调用如果字符串本身就是大写,调用后返回的仍是对象本身,

否则返回一个新的对象(不是从字符串池中获取),如下示例:

String s1 = "abcdef";

String s2 = "ABCDEF";

String s3 = s1.toUpperCase();

String s4 = s2.toUpperCase();

System.out.println(s2 == s3);// false 证明s3是一个新的对象,不是从字符串池中返回

System.out.println(s2 == s4);// true 证明返回的是对象本身

toLowerCase()方法类似。



6。以下哪种手段可以解决乱码问题(多选)

A:new String(str.getBytes(ENCODE_TYPE_A), ENCODE_TYPE_B)

B:设置编码过滤器

C:所有的地方使用同一种编码

D:设置中间件的URL编码类型


解答:都可以


7。以下关于方法 public void output(int arg1, String... arg2) 中参数 String... arg2的说法正确的是(多选)

A:语法错误

B:JDK5的新语法

C:可代替数组类型的参数

D:只能是方法的最后一个参数


解答: String... arg2 表示可变长参数方法,是JDK5的新特征,也就是在方法定义中可以使用个数不确定的参数

在调用方法的时候,如果能够和固定参数的方法匹配,也能够与可变长参数的方法匹配,则选择固定参数的方法

如果要调用的方法可以和两个可变参数匹配,则出现错误

一个方法只能有一个可变长参数,并且这个可变长参数必须是该方法的最后一个参数

public static void m(String[] ss) {

System.out.println("------数组开始输出------");

for (int i = 0; i < ss.length; i++) {

System.out.println(ss[i]);

}

System.out.println("------数组结束输出------");

}


public static void m1(String s, String... ss) {

System.out.println("------可变长参数开始输出------");

for (int i = 0; i < ss.length; i++) {

System.out.println(ss[i]);

}

System.out.println("------可变长参数结束输出------");

}

public static void main(String[] args) throws Exception {


String[] ss = { "aaa", "bbb", "ccc" };

m(ss);

m1("");

m1("aaa");

m1("aaa", "bbb");

}

以上程序输出结果为:

------数组开始输出------

aaa

bbb

ccc

------数组结束输出------

------可变长参数开始输出------

------可变长参数结束输出------

------可变长参数开始输出------

------可变长参数结束输出------

------可变长参数开始输出------

bbb

------可变长参数结束输出------

说明选项C不正确,可变长参数不可以代替数组类型参数

故选项为AC


8。关于抽象类,以下哪种描述是正确的(多选)

A:抽象类不能实例化

B:抽象类中必须有抽象方法

C:抽象类必须被继承

D:抽象类可以继承于具体类


解答:抽象类和接口都不可被实例化

在abstract class 中可以有自己的数据成员,也可以有非abstarct的成员方法,

而在interface中,只能够有静态的不能被修改的数据成员(public static final的,不过在 interface中一般不定义数据成员),所有的成员方法都是abstract的。

实现抽象类和接口的类必须实现其中的所有方法。抽象类中可以有非抽象方法。接口中则不能有实现方法

接口中定义的变量默认是public static final 型,且必须给其初值,所以实现类中不能重新定义,也不能改变其值。

接口中的方法默认都是 public,abstract 类型的。

抽象类中可以不存在抽象方法,比如我定义一个空白抽象类

抽象类可以继承于具体类

故答案为AD


9。关于接口,以下哪种描述是正确的(多选)

A:接口可以继承另一个接口

B:抽象类可以实现接口

C:具体类可以实现多个接口


解答:BC


10。关于异常的描述,下面哪些是错误的(多选)

A:异常可以被抛出

B:异常可以被捕获

C:自定义异常都是Exception的子类

D:error是一种特殊的异常


解答:D我被多选迷惑了,竟然选了ABC

Error和Exception是两个级别的错误

Error是编译级别的,Exception是运行级别的

jdk 类结构为 Throwable (可抛出的) 他下面分为 Erorr 和 Exception。 Exception 又有RuntimeException。而一般说的异常是只Exception类以及其子类。


11。关于final修饰符的作用,以下哪项是错误的?

A:被修饰的类不可继承

B:被修饰的变量不可修改

C:被修饰的方法不可被重载

D:被修饰的方法不可被重写


解答:C


12。关于finally的描述,以下哪项是不正确的(多选)

A:finally语句块内的代码一定会被执行

B:finally语句块必须跟在catch语句块后面

C:finally语句块的代码在return之前被执行

D:finally语句块的代码在return之后被执行


解答:AD

return之前没有System.exit() ;之类的直接让应用停下来的代码的话, finally中的代码就会执行 并且是在return之前执行


13。以下哪些是JSP的隐含对象(多选)

A:request

B:response

C:session

D:HttpServlet


解答:ABC


14。Servlet中如何获取请求参数?

String username = request.getParameter("username");


15。Filter可以实现Servlet的功能吗?

A:可以

B:不可以

C:两者没有关系


解答:Servlet Filter是一个过滤器,在web.xml中声明..当每产生一个请求时会分别调用init(),destory(),doFilter()....

在doFilter方法中实现你要做的事..如果一个类继承了HttpServlet就说明这个类是一个Servlet.

也需要在web.xml中声明..并定义对应的servlet-mapping的<url-pattern>当请求是以声明的请求结尾时会调用这个servlet..

如果一个类既实现了Filter又继承了HttpServlet..那这个类也可以看做是Servlet也可以是一个Filter...

当一个请求尾符合Servlet定义的<url-pattern>时,会调用Servlet的server方法.也会调用doFilter方法..

故答案为B不可以两者各有各的工作



16。struts2如何获取请求参数(多选)

A:通过Action的属性自动获取

B:通过与Action绑定的模型自动获取

C:通过HttpServletRequest获取

D:通过HttpServletResponse获取


解答:ABC


17。<input type="text" name="t_name" size="width" value="initialization" >在浏览器显示的文本框中内容为

A:text

B:t_name

C:initialization

D:width


解答:C


18。如何解决JavaScript的跨域问题(多选)

A:让访问方与被访问方处于同一个域下

B:通过后台代理

C:JSONP

D:不存在这个问题


解答:

http://zhidao.baidu.com/question/470756123.html

a.html中有一个frame引用了其它网站的b.html。

b.html需要操作a.html中的页面元素。

因跨域问题,而无法实现。

b里再通过iframe调用与a.html同域的一个html代理页,比如叫c.html

c.html里,可以调用a.html的方法,比如a.html里预设了一个function a(){},用来改变页面元素,则在c里,可以直接top.a()来调用。

当然通过b调用c.html的时候,可以传一些参数过来,这样就可以动态修改a了

JSONP是一个非官方的协议,它允许在服务器端集成Script tags返回至客户端,通过javascript callback的形式实现跨域访问(这仅仅是JSONP简单的实现形式)。

http://zhidao.baidu.com/question/283934334.html

如果你能修改iframe中的内容,可以在iframe里建立一个form,把数据post到父窗口中,设置好target就行了。反之亦然,可以把父窗口中数据post到iframe里。这就和javascript没多大关系了,完全走服务器端,不存在跨域问题。

以前我们集成一个企业信箱的时候就是这么做的。 

或者用2楼的方式,用反向代理,原理就是把其他域名“映射/代理”为你父窗口的域名,推荐用nginx, 配置很简单。

答案应该是ABC吧


19。JQuery语句开头的 $ 可以改为其他形式吗?(多选)

A:可以

B:不可以

C:可直接用jQuery代替

D:以上都对


解答:AC

var jq=jQuery.noConflict()

这样就把$替换成jq了

(function($){

    //在这里面的语句都可用 你自定义的符号表示jQuery

    //现在是$表示, 当然你把function中的参数用$$表示的话, $$就表示 jQuery了

})(jQuery)


20。ExtJs中,如何使GridPanel产生横向滚动条?

A:设置sm属性

B:设置cm属性

C:设置forceFix属性

D:设置autoExpandColumn属性


解答:

rid = new Ext.grid.GridPanel({

...

  viewConfig: {

   ...

   forceFit:true-------问题出在此属性

  },

说明:

forceFit : Boolean 

True表示为自动展开/缩小列的宽度以适应grid的宽度,这样就不会出现水平的滚动条。

forceFit是使列强制适应grid的总宽度,把forceFit:true这个属性去掉就行了


21。以下关于Ajax的说法,哪些是正确的?

A:JavaScript是异步通讯

B:JavaScript是同步通讯

C:专门用于页面的局部刷新的组件

D:也可以处理流类型的响应


解答A


22。关于XML元素定义正确的是

A:<header>wei</header>

B:<header>wei<header>

C:<header>wei<Header>


解答A


23。Spring中以下那种不是实例化bean的方法?

A:构造方法

B:setter方法


解答B


24。以下那种不是Spring中的Advice(通知)类型?

A:Around Advice

B:Before Advice

C:After Returning Advice

D:Before Returning Advice


解答:http://www.2cto.com/kf/201303/196931.html

Spring AOP 中 advice 的四种类型 before after throwing advice around

1:before advice将在方法执行前执行,创建一个实现MethodBeforeAdvice接口的类能够定义执行方法前的操作。

2:after advice在方法运行返回结果后将执行这个 afterReturning方法,创建的这个类必须实现:AfterReturningAdvice接口

3:after throwing advice 当方法执行抛出一个异常后,会执行这个方法,创建一个类实现:ThrowsAdvice接口,

创建一个afterThrowing拦截:IllegalArgumentException异常。

4:Around advice这个advice 联合了上面的三个advices,在方法执行期间执行,创建一个类实现MethodInterceptor接口,

需要在方法中执行Object result = methodInvocation.proceed();方法才能得到执行,否则方法不会执行。

故选择D


25。关于Spring特性中Ioc的描述错误的是?

A:Ioc就是指程序之间的关系由程序代码直接控制

B:所谓控制反转,是指控制权有应用代码转移到外部容器,控制权的转移

C:Ioc将控制创建的职责搬进了框架中,并把它从应用代码脱离开来

D:当使用Spring的Ioc容器时只需指出组件需要的对象,在运行时Ioc容器会根据XML配置数据提供给它


解答:http://zhidao.baidu.com/question/21539946.html

控制反转(IoC = Inversion of Control)

IoC,就是由容器控制程序之间的关系,而非传统实现中,由程序代码直接操控。

这也就是所谓“控制反转”的概念所在:控制权由应用代码中转到了外部容器,控制权的转移,是所谓反转。

IoC将控制职责搬进了框架中,并脱离应用代码。

涉及到配置的地方,意思是说在传统的容器体系结构中,如EJB,一个组件可以调用容器并问“我需要它给我做工作的对象X在哪里?”;

使用IoC容器则只需指出组件需要X对象,在运行时容器会提供给它。容器基于方法名作出这种说明,或可能根据配置数据如XML。

故选A


26。以下关于iBatis的缓存,说法错误的是?

A:iBatis默认开启缓存

B:flushInterval默认情况是不设置,也就是没有刷新间隔,缓存仅仅调用语句时刷新

C:readOnly属性可以被设置成true或者false,只读的缓存会给所有调用者返回缓存对象的相同实例

D:可读写的缓存会返回缓存对象的拷贝(通过序列化)


解答:iBatis从未接触过,答案也懒得求证了


27。Customer类中有一个Set类型的orders属性,用来存放Order订单对象,

在hibernate的Customer.hbm.xml文件中,用哪个元素映射orders属性

A:<property>

B:<one-to-many>

C:<many-to-one>

D:<set>


解答:

<set name="orders"inverse="true"cascade="all">

<key column="customer_id"></key>

<one-to-many class="com.*.Order"/>

</set>

所以应该是D

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值