Java面试题个人总结+答案.docx
- 文档编号:6819398
- 上传时间:2023-01-10
- 格式:DOCX
- 页数:9
- 大小:21.36KB
Java面试题个人总结+答案.docx
《Java面试题个人总结+答案.docx》由会员分享,可在线阅读,更多相关《Java面试题个人总结+答案.docx(9页珍藏版)》请在冰豆网上搜索。
Java面试题个人总结+答案
本人最近参加了大大小小很多公司的面试,在这里我把自己面试遇到的问题给大家说一下
JAVA基础篇
1、在java类加载器中,系统类加载器和用户自定义加载器那个先加载?
(遇到这个问题时感觉很意外,没有想到会问这样的问题)
先加载系统类加载器
Java类加载器加载类顺序依次为:
JVM类加载器:
这个模式会加载JAVA_HOME/lib下的jar包
扩展类加载器:
会加载JAVA_HOME/lib/ext下的jar包
系统类加载器:
这个会去加载指定了classpath参数指定的jar文件
用户自定义类加载器:
sun提供的ClassLoader是可以被继承的,允许用户自己实现类加载器
2、堆和栈分别存放什么?
栈:
基本数据类型和对象的引用
堆:
对象和数组
3、String、StringBuffer、StringBuilder的区别
(1)String是不可变对象,也就是说每次修改String都是新建了一个对象并赋值
(2)StringBuffer是字符缓冲区,修改它不会新建对象,可以使用append()方法和delete()方法修改StringBuffer的值
(3)StringBuilder可以替代StringBuffer,它是一个单线程使用的类,和StringBuffer比速度快、效率高,但是是非安全的
(4)三者都是被final修饰的(这一点面试官的问我的时候一直在说,你确定吗?
搞得我有点虚)
4、Java的异常和错误有什么区别?
(1)Error
Error是JVM的错误,这种错误会严重影响程序的运行,设计者不会设计程序代码去捕捉这种错误,因为即使捕捉到也无法给予适当的处理,比如内存溢出。
(2)Exception
Exception包含了一般性的异常,这些异常同在在捕捉到之后便可做妥善的处理,以确保程序继续运行。
Exception有很多种分类,从Exception产生的时机上我们可以把Exception分为
①运行时异常
运行时异常是指程序运行过程中可能出现的非正常状态
②非运行时异常
非运行时异常是指方法声明时throws的异常
5、&和&&的区别
&是位运算符,表示按位与运算。
&&是逻辑运算符,表示逻辑与。
在条件判断的时候&必须逐一检查各个条件,&&具有短路功能,只要一个条件为false则不会进行后续的判断。
6、abstractclass和interface的区别
(1)abstractclass是抽象类,声明方法的存在而不去实现它的类叫做抽象类,它用于创建一个体现某些基本行为的类。
抽象类中不能有构造方法、不能有静态方法,抽象类不能被实例化。
抽象类中可以有变量、可以有普通方法、可以有抽象方法,在继承抽象方法后,必须实现它的所有抽象方法。
(2)interface是接口,接口中的变量必须是静态常量(staticfinal),接口中的方法必须都是抽象方法(abstract),不过由于接口中所有变量、方法修饰符都一致,因可以不写。
接口的实现必须实现接口中所有的方法。
7、final、finally、finalize的区别
(1)final是用来描述变量、方法、类的关键字,表示变量值不可变、方法不可被重写、类不可被继承
(2)finally是异常处理的关键字,表示finally块里面的代码一定会被运行到
(3)finalize是Object类中的protected方法,垃圾回收器执行的时候会调用被回收的类的此方法。
8、接口是否可以继承接口?
抽象类是否可以实现接口?
抽象类是否可以实现实体类?
(1)接口可以继承接口
(2)抽象类里可以有普通方法,因此抽象类可以实现接口,只需要实现接口内所有方法就可以了
(3)抽象类里可以有普通方法,变量也不需要是常量,因此抽象类可以实现实体类
9、一个”.java”源文件中是否可以包含多个类(非内部类)?
有什么限制?
可以。
必须只有一个类名与文件名相同且该类以public修饰
10、java是怎么通过包名.类名来获得该类的实例的?
通过Class.forName()方法
11、介绍一下集合?
①Collection:
是最基本的集合接口,一个collection代表一组Object,即collection的元素。
②List:
是collection的扩展,作用是收集对象,并以索引方式保留收集对象的顺序。
其元素有放入顺序,元素可重复。
1)ArrayList:
利用类似于数组的形式来存储数据,它的随机访问速度极快。
2)LinkedList:
内部实现是链表,它适合于在链表中间需要频繁的插入和删除操作。
3)Vector:
与ArrayList相似,但是两者不同,Vector主要用在事先不知道数组的大小,或者只是需要一个可以改变大小的数组的情况。
4)ArrayList与Vector的区别:
ArrayList是非线程安全的,效率高
Vector是基于线程安全的,效率低。
③Set:
也是collection的扩展,在Set中的元素对象要求不能重复(注意:
元素虽然无放入顺序,但是元素在set中的位置是有该元素的HashCode决定的,其位置其实是固定的) 。
常用实现类有HashSet和TreeSet。
1)HashSet:
其核心是HashMap,HashSet中存放的值为HashMap中的key,这也就是HashSet不允许重复的原因。
2)TreeSet:
底层由平衡二叉树实现,它会将投入其中的元素自动排序,这就要求投入其中的元素是可排序的,也就是说,存放的必须是同一种数据类型。
其实现自动排序的实质是compareable
publicintcompareTo(Objectobj){
if(equals(obj)){
return0;
}else{
Return1;
}
}
这个方法称为比较器,可以比较两个对象,如果对象都一致相等,则返回0
④Map:
没有继承collection接口,提供key到value的映射,也就是说,它是一种把键对象和值对象进行关联的容器。
1)HashMap:
key不允许重复,如果后面的key重复,则会覆盖前面的值,key允许为null,但是只能有一个。
2)TreeMap:
key如果是一个对象的话,这个对象所在的类一定要实现compareable接口,并且重写compareTo方法。
3)HashMap与HashTable比较:
HashMap:
非线程安全,高效率,支持null
HashTable:
线程安全,低效率,不支持null
12、list、set和map的遍历方法比较:
List:
可以用for循环、foreach循环和Iterator迭代。
Set:
可以用foreach循环和Iterator迭代。
Map:
HashMap只能用Iterator迭代。
13、写一个单例设计模式:
PublicclassApple{
PrivatestaticAppleapple;
PrivateApple(){
}
PublicstaticApplegetApple(){
If(null==apple){
apple=newApple();
returnapple;
}else{
returnapple;
}
}
}
14、说说static关键字:
Static表示“全局”或“静态”的意思,可以用来修饰成员变量和成员方法,也可以形成静态代码块,还可以用来修饰类,但只能修饰内部类。
①static变量:
被static修饰的变量叫静态变量或者类变量;没有被static修饰的变量叫实例变量。
二者的区别是:
静态变量:
在内存中只有一个拷贝(节省内存),jvm只会为静态分配一次内存,而且在加载类的过程中就完成静态变量的内存分配。
可用类名直接访问(方便),也可以用对象来访问(不推荐)。
静态变量一般用于对象之间需要共享值时。
实例变量:
每创建一个实例,就会为实例分配一次内存,实例变量在内存中可以有多个拷贝,互不影响(灵活)。
②静态方法:
它可以直接通过“类名.静态方法”来访问,任何的实例亦可以调用。
静态方法中不能用this和super关键字。
不能直接访问所属类的实例变量和实例方法,只能访问所属类的静态变量和成员方法。
③static代码块:
static代码块也叫静态代码块,是在类中独立于类成员的static语句块,可以有多个,位置也可以随便放,它不在任何的方法体内,jvm在加载类时会执行这些静态代码块,如果有多个,则会按照他们在类中出现的先后顺序一次执行它们,而且每个代码块只会执行一次。
15、Servlet的生命周期:
①加载和实例化:
在Servlet容器检测到需要这个Servlet来响应第一个请求时,创建Servlet实例。
②初始化:
在Servlet实例化后,容器将调用Servlet的init()方法初始化这个对象。
③请求处理:
Servlet容器将调用Servlet的service()方法对请求进行处理。
④服务终止:
当容器检测到一个Servlet的实例应该从服务中被移除的时候,容器就会调用实例的destroy()方法
16、jsp九大内置对象范围比较:
排序为:
Application>Session>Request>Page=Response=out=PageContext=config=exception。
Application:
服务器启动到停止这段时间。
Session:
Http会话开始到结束这段时间(浏览器打开到关闭)
Request:
Http请求开始到结束这段时间,即一个jsp页面发出请求到另一个jsp页面之间。
Page:
页面执行,当前页面从打开到关闭这段时间,它只能在同一个页面中有效
Response:
页面执行,包含了客户请求的有关信息,但jsp中很少用到它。
Out:
页面执行,向客户端输入内容时常用的对象
PageContext:
页面执行,取得任何范围的参数,通过它可以获得out、Requset、Response、Session、application等对象。
Config:
页面执行,取得服务器的配置信息。
Exception:
仅在错误处理页面
17、jsp和servlet的区别与联系:
①JSP第一次运行的时候会编译成Servlet,驻留在内存中以供调用
②JSP是web开发技术,Servlet是服务器端运用的小程序
③JSP更多的是进行页面显示,Servlet更多的是处理业务,即JSP是页面,Servlet是实现JSP方法
④开发界面是JSP时,可以直接编写:
而Servlet中则需要这样写:
out.println("
18、final关键字的作用
(1)final修饰的基本数据类型的值不可被改变,final修饰的引用类型的引用不可变而引用的值还是可以变的
(2)final修饰的方法不可被重写
(3)final修饰的类不可被继承
(4)final修饰的基本数据类型的形参在方法体内不可以被重新赋值,final修饰的引用类型的形参不可以被赋予一个新的引用
数据库方面
1、问你怎么同时更新一个表中的两个字段?
(假设表名为A,要更新的字段分别为name、age)
updateAsetname=‘姚明’,age=35whereid=10;
2、给student添加一个来自classes的外键:
(这个很容易被我们自己忽视)
altertablestudentaddconstraintfk_stu_clsforeignkey(cid)referencesclasses(cid);
3、数据库三范式:
属性唯一、记录唯一、表唯一
4、查询结果按tid排序(降序):
select*fromtestorderbytiddesc;(默认是按升序的)
5、oracle的左外连接
Select*fromdeptdleftouterjoinempeond.deptno=e.deptno
orderbyd.deptno,e.ename;
SSH框架
1、hibernate和JDBC相比有什么优势?
1.对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。
2.Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现。
他很大程度的简化DAO层的编码工作
3.hibernate使用Java反射机制,而不是字节码增强程序来实现透明性。
4.hibernate的性能非常好,因为它是个轻量级框架。
映射的灵活性很出色。
它支持各种关系数据库,从一对一到多对多的各种复杂关系。
2、为什么要用struts?
JSP、Servlet、JavaBean技术的出现给我们构建强大的企业应用系统提供了可能。
但用这些技术构建的系统非常的繁乱,所以在此之上,我们需要一个规则、一个把这些技术组织起来的规则,这就是框架,Struts便应运而生。
3、为什么要用spring?
AOP让开发人员可以创建非行为性的关注点,称为横切关注点,并将它们插入到应用程序代码中。
使用AOP后,公共服务(比如日志、持久性、事务等)就可以分解成方面并应用到域对象上,同时不会增加域对象的对象模型的复杂性。
IOC允许创建一个可以构造对象的应用环境,然后向这些对象传递它们的协作对象。
正如单词倒置所表明的,IOC就像反过来的JNDI。
没有使用一堆抽象工厂、服务定位器、单元素(singleton)和直接构造(straightconstruction),每一个对象都是用其协作对象构造的。
因此是由容器管理协作对象(collaborator)。
Spring即使一个AOP框架,也是一IOC容器。
Spring最好的地方是它有助于您替换对象。
有了Spring,只要用JavaBean属性和配置文件加入依赖性(协作对象)。
然后可以很容易地在需要时替换具有类似接口的协作对象。
4、什么是MVC模式?
有什么作用?
MVC全名ModelViewController,即模型-视图-控制器,是一种非常经典的软件架构模
式。
从设计角度看,它将多个设计模式在一种解决方案中结合起来,用来解决许多设计问题。
MVC模式把用户界面交互分拆到不同的三个角色中,即:
(1)模型:
持有所有的数据、状态和程序逻辑,独立于视图和控制器。
(2)视图:
用来呈现模型。
视图通常直接从模型中取得它要显示的状态和数据。
对于相同
的信息可以有多个不同的显示形式或视图。
(3)控制器:
位于视图和模型中间,负责接收用户的输入,将输入进行解析并反馈给模型,
通常有一个模型具有一个控制器。
5、hibernate的三种状态:
瞬时状态
持久状态
游离状态
6、C/S和B/S的区别:
优点:
C/S:
占用网速小,对于一些网速比较慢的电脑有明显的优势。
B/S:
不需要安装客户端,只需要浏览器就能打开。
缺点:
C/S:
需要安装客户端,有时候需要更新。
B/S:
对网速的需求大,对于一些网速慢的电脑不适合。
7、struts2的核心是什么?
它与struts1有什么关系?
struts2的核心是WebWork,与struts1没关系
8、列举五个struts2中的拦截器:
①alias:
实现在不同请求中相似参数别名的转换。
②autowiring:
自动装配的拦截器,主要用于当struts2和spring整合时,struts2可以使用自动装配的方式来访问spring容器中的bean。
③createSession:
该拦截器负责创建一个httpSession对象,主要用于那些需要有httpSession对象才能正常工作的拦截器。
④debugging:
当使用struts2的开发模式时,这个拦截器会提供更多的调试信息。
⑤exception:
这个拦截器负责处理异常,它将异常映射为结果。
⑥fileUpload:
这个拦截器主要用于文件上传,它负责解析表单文件域中的内容。
⑦i18n:
支持国际化的拦截器,它负责把所选的语言、区域放入用户session中。
⑧params:
这是一个最基本的拦截器,它负责解析HTTP请求中的参数,并将参数值设置成对应的Action属性值。
⑨token:
防止重复提交,它检查传到Action中的token,从而防止多次提交。
⑩validation:
通过执行XXXAction-validation.xml中定义的校验器,从而完成数据校验。
9、Spring注入方法:
①设值注入:
通过setter访问容器实现
②构造注入:
通过构造函数实现
③P命名空间注入
10、spring实现注解的配置:
component-scanbase-package="entity,dao"> 其中base-package是指需要扫描的基类包,多个包之间用逗号隔开,默认扫描所有类路径
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 试题 个人 总结 答案