2017-8-30面试题总结
1.使用final 关键字修饰一个变量时,是引用不能变还是引用对象不能变。
答:引用对象不能变,final Student stu = new Student();
stu.setName("小明");
错:stu = new Student();
2.abstract(抽象类)和interface(接口) 有何区别
回答这个问题,首先得一步一步的比较,在抽象类中成员属性可以只声明不赋值会有默认的初始值,接口中所有成员属性默认都是public static final 修饰的常量,不能没有初始值。抽象类中,方法可以是抽象方法,也可以是普通的方法,或者static修饰的方法。main方法也没有问题。可以有构造方法。接口中所有的方法都是抽象的。不能有static修饰的方法。抽象类的抽象方法只能继承他去实现。接口是通过实现。说完他们的不同点,再说他们的相同点,他们都有抽象方法。而却他们都不能new。
3.java八大数据类型
byte 、short 、int 、float 、lang 、double 、 boolean 、char
他们都有相对应的包装类。他们之间可以隐式转换为相应的类型
4.instanceof 是什么
instanceof 是比较运算符,比较两个类型是否是同一种类型
String a = new String("s"); if(a instanceof String){}
5. Integer 和 int 有什么区别。
Integer是int 的包装类。Integer初始值是null,int的初始值是0。使用Integer类型声明对象可以调用包装类里的方法。而int 不行。在jsp开发中el表达式Integer在页面显示的是空字符串。int在页面显示的是0
6.子类是否能够重写父类的static(静态)方法。
不能
7. String a = "a";创建了几个对象。String s = new String("s");创建了几个对象。String s = "a"+"s";又创建了几个对象。
String str = new ("a"+"s"); 又创建了几个?以下解释是针对String常量池中是什么都没有的。
一、创建一个"a"对象,放在常量池中。
二、创建了两个对象,new 是一个"s" 又是一个,new 的那个对象放在堆里,"s"放在常量池里。s变量指向堆里的对象,堆里的对象又引用常量池里的"s"。
三、创建了一个对象,放在常量池中。首先,在编译期间。"a"+"s" 会默认变成"as",然后运行时直接使用。
四、创建了两个,首先看完上面三个解释,第四个就无需解释了。
(注:这四个答案都是我自己所理解。如有错误希望提点。谢谢!)
9.hashMap 和 hashTabel 有什么区别。
首先他们的实现不同,hashMap是实现Map接口。hashTab
象。String s = "a"+"s";又创建了几个对象。
String str = new ("a"+"s"); 又创建了几个?以下解释是针对String常量池中是什么都没有的。
一、创建一个"a"对象,放在常量池中。
二、创建了两个对象,new 是一个"s" 又是一个,new 的那个对象放在堆里,"s"放在常量池里。s变量指向堆里的对象,堆里的对象又引用常量池里的"s"。
三、创建了一个对象,放在常量池中。首先,在编译期间。"a"+"s" 会默认变成"as",然后运行时直接使用。
四、创建了两个,首先看完上面三个解释,第四个就无需解释了。
(注:这四个答案都是我自己所理解。如有错误希望提点。谢谢!)
9.hashMap 和 hashTabel 有什么区别。
首先他们的实现不同,hashMap是实现Map接口。hashTable是继承Dictionary类。所编写的。
hashMap 允许一个null键,多个null值。hashTable不允许有null键或null值。线程安全问题:hashTable是线程安全的,因为线程安全,所以速度稍微的慢一点。hashMap是线程不安全的,速度快。
10.list和map有什么区别,
他们所继承的接口不同。list是继承了colliction接口,map是map接口,底下有hashMap。
11.说出ArrayList和LinkedList的区别
ArrayList是先进先出,有下标,获取元素比较快,再者能够交换元素。
LikedList是双向链表结构。对插入元素和删除元素较快。但是获取元素就很难的。LinkedList提供了一些方法使得它可以当作堆栈和队列来使用。
12.Spring的IOC是什么?
IOC是Spring基于工厂模式所建造的一个容器。默认在容器的对象都是单例的。Spring帮我们管理我们各个组件的对象。也叫控制反转,熟悉java的人都知道,一个功能都大多都需要很多的类(对象)来完成,以前比如B类调用A类的方法时A类的生命周期是用B类来掌控的。现在Spirng帮我们做着件事情。 把这个控制权交给Spring。能够依赖注入(在运行期间,由外部容器动态的将依赖对象注入到相应的组件中)。
13.说说Hibernate和MyBaties的区别。
首先,他们都是ORM(对象关系映射)框架。都对Java的jdbcAPI进行了封装屏蔽了底层访问细节,相对来说Hibernate门槛稍微高一点,自动化创建sql。这是一个优点同时也是一个缺点,由于自动创建sql所以相对于一些复杂的sql语句不好写。虽然也能够自己的去编写sql语句而不是hql语句。但那样也就损失了Hibernate的可移植性。Hibernate可移植性强。Mybaties简单小巧,新手也可以迅速上路。需要自己的去编写sql语句。如果更换数据库那么需要重新编写对应的sql语句。Mybaties可移植性差。
这里可能说得太乱了,进行一些总结:
Hibernate 是一个全自动的 orm 映射工具,它可以自动生成 sql 语句,ibatis 需要我们自己在 xml 配置文件中写 sql 语句,hibernate 要比 ibatis 功能负责和强大很多。因为 hibernate 自动生成 sql 语句,我们无法控制该语句,我们就无法去写特定的高效率的 sql。对于一些不太复杂的 sql 查询, hibernate 可以很好帮我们完成,但是,对于特别复杂的查询,hibernate 就很难适应了,这时候用 ibatis 就是不错的选择,因为 ibatis 还是由我们自己写 sql 语句。 总体来说: 1. hibernate 是当前最流行的对象关系 ORM 映射框架,完全可以通过对象关系映射来实现对 数据库的操作,门槛高; mybatis 是半自动化的 ORM 映射框架,只做了字段映射,需要手动写 sql,但简单,小巧, 灵活,新手也可以很快上路。 2. hibernate 移植性好(dialect),mybatis 差,不同的数据库需要写不同 SQL。 3. hibernate 拥有完整的日志系统,而 mybatis 没有自己的日志统计,需要借助 log4j 4. hibernate 有更好的二级缓存机制,可以使用第三方缓存。 MyBatis 本身提供的缓存机制不 佳。
14.MyBaties中编写sql语句时$和#有什么区别?
$ 号是不会防止sql注入的,会把实际值传入sql语句。例:order by ${user_id} 如果user_id的值是11, 传入sql的是order by user_id。如果传入的值是id则会解析为:order by id
# 号将传入的数据都视为字符串,自动的将值加上双引号。例:order by #{user_id} 如果user_id的值是11,那么解析成 order by "11"。如果传入的是id则解析为 :order by "id"
#号在很大的程度上防止了sql注入。而$号不行,一般能用#号,最好别用$号
15.Struts的优缺点
优点:
1.实现MVC模式(model,view,controller)。结构清晰使得开发者只关注业务逻辑的实现。
2.有丰富的tag 可以使用,Strtus的标签库(taglib),如能灵活应用则能大大提升开发效率。
3.页面导航。使系统的脉络更加的清晰,通过一个配置文件,即可把握整个系统各个部分之间的联系。这对于后期开发有着很大的好处。尤其是另一批开发者接手这个项目的时候。这种优势更加的明显。
4.提供了Exception处理机制
缺点:
1.需要配置forward,如果有十个展示层的jsp,需要配置十次struts,而且还不包括有时候文件目录的变更,文件的变更。需要重新修改forward。注意:每次修改配置的之后,要求重新部署整个项目。而Tomcat这样的服务器,还必须重启。
2.Struts的Action必须是thread - safe方式,它仅仅允许一个实例去处理所有请求。所以所有的Action都必须同步,这也就引起了线程安全问题。
3.前端表达式语言方面,Stuts继承了JSTL,所以他主要使用JSTL来获取数据,可是JSTL的表达式在Collection和索引属性方面处理得很弱。
4.Ajax请求比较复杂,没有很好的支持。
16.手写出SpringMVC的5个注解
@RequestMapping 、@Controller 、@RequestParm 、@PathVariable 、@ResponseBody 、
17.谈谈你对Spring的理解
Spring是一个开源的控制反转框架(Inversion of Conrol , IOC)和切面(AOP)的轻量级容器,是基于工厂模式实现的。
IOC:应用本身不负责依赖对象的创建及维护。依赖对象的创建及维护是由外部容器负责的。
ID:依赖注入是指程序运行期,由外部容器动态的将依赖对象注入到组件当中。
Spring提供了对AOP技术的良好封装。AOP称为切面编程。就是系统中有很多各不相干的类的方法。在这些众多方法中要加入某种系统功能代码,例如:日志,将入权限判断,加入异常处理。这种应用称为AOP。实现AOP功能采用的是代理技术,客户端程序不再调用目标。而调用调用代理类。代理类和目标类对外具有相同的方法声明。
采用代理机制组装起来运行,在不改变原程序的基础上对代码段进行增强处理,或增加新的功能。
AOP的作用是让我们专心做事,将复杂的需求分解出不同方面。将散布在系统中的公共功能集中解决。把必须做但又不是特别重要的任务集中解决。

浙公网安备 33010602011771号