java面试题总结.docx
- 文档编号:10405464
- 上传时间:2023-05-25
- 格式:DOCX
- 页数:18
- 大小:285.75KB
java面试题总结.docx
《java面试题总结.docx》由会员分享,可在线阅读,更多相关《java面试题总结.docx(18页珍藏版)》请在冰点文库上搜索。
java面试题总结
一JAVA基础
1、JAVA两个核心机制:
java虚拟机:
*.java编译成*.class文件(一次编译,随处运行,跨平台)
jvm垃圾回收:
自动运行,释放那些可释放的内存空间
2、jdk:
软件开发包
jre:
java运行环境
开发需要jdk,用户只需jre(jdk包含jre)
3、环境变量:
path:
window系统执行命令时要搜寻的路径
classpath:
java在编译和运行时要找的class所在路径
4、数据类型:
基本数据类型和引用数据类型(接口,类,数组)
5、数据类型
类型自动转换:
(容量小的自动转大的)
byte、short、char->int->long->float->double
byte、short、char之间不回相互转换,他们三者在计算时首先转换为int类型
容量大的转容量小的要加强制转换
几种类型混合运算时,系统会首先自动的把所有数据转成容量最大的类型,再进行计算
特殊情况:
可直接把int类型的数据赋值给byte、short、char类型,不需要转换,只要不超出表述范围例如:
byteb1=1;
6、switch语句只能接int类型(byte/short/char能自动转成int)
7,进程:
是程序一次执行过程,或者是正在执行的一个程序
线程是程序内部的一条执行路径
线程的实现方式:
继承Thread类或者实现runnable接口
yield():
释放当前线程cpu执行权
join():
合并,A线程停止执行,直至B线程执行完
sleep():
睡眠当前线程,不会释放锁
wait():
暂停当前线程,并释放锁
notify():
唤醒正在排队等待的线程中优先级最高者结束等待
注意:
wait(),notify(),notify()只有在synchronized中才能使用
线程的生命周期:
新建--(start)--就绪----运行--阻塞--死亡
synchronized(同步监视器){}:
线程同步
要求:
所有线程必须共用同一把锁
注:
在实现的方式中,考虑同步的话,可以使用this来充当锁。
但是在继承的方式中,慎用this
释放锁的操作:
break,return,error,Exception,wait()
不会释放锁的操作:
sleep,yield
死锁:
不同的线程分别占用对方需要的同步资源不释放,都在等待对方放弃自己需要的同步资源,就形成了线程的死锁
二Ajax
局部刷新:
使用xmlHttp组件XMLHttpRequest对象进行异步数据读取
Ajax的原理简单来说通过XmlHttpRequest对象来向服务器发异步请求,从服务器获得数据,然后用javascript来操作DOM而更新页面
缺点:
页面局部刷新,导致后退功能失效
使用XMLHttpRequest对象的三个关键部分:
----onreadystatechang事件处理函数:
该事件由服务器触发,在ajax执行过程中,服务器会依靠更新xmlHttpRequest对象的readyState来通知客户端当前的通信状态。
每次readyState属性的改变都会触发readystatechange事件
----open(method,url,asynch):
向服务器发送请求
Method:
请求类型,类似get或者post
Asynch:
是否异步传送,默认true。
若为true,执行后面的脚本前,不需要等待服务器的响应;若为false,一直等到ajax请求执行完毕再继续执行
----send()
原声代码:
window.onload=function(){
document.getElementsByTagName("a")[0].onclick=function(){
//1创建一个XMLHttpRequest对象
varrequest=newXMLHttpRequest();
//2准备发送请求的数据
varurl=this.href+"&time="+newDate();
varmethod="GET";
//3调用XMLHTTPRequest对象的open方法
request.open(method,url);
//4调用XMLHTTPRequest对象的send方法
request.send(null);
//5为XMLHTTPRequest对象添加onreadystatechange响应函数
reques.onreadystatechange=function(){
if(request.readyState==4){
if(request.status==200||request.status==304){
}
}
}
}
}
传输格式:
Xml:
需要使用responseXML来获取。
结果不能直接使用,需先创建对应节点;缺点,dom解析可能会很复杂
Html:
xmlHttpRequest发送html,文本将存储在responstText属性中。
HTML代码块与innerHtml属性搭配
Json:
轻巧;是js的原生格式
VarjsonObject={“name”:
”xiaoming”,
”age”:
”12”,
”address”:
{“city”:
”beijing”,”school”:
’liuxiao’},
“teaching”:
function(){
Alert(123);
}
}
解析json:
AJAX回调函数返回的Json只是一种文本字符串,它被存储在responseText属性中
如:
varjsonStr=“{‘name’:
’xiaolong’}”
这时需要使用eval(),把字符串转成JSON对象
例如
VarjsonReponse=xhr.responseText;
Varperson=Eval(“(”+jsonResponse+”)”);
Varname=person.name;
还可以用JSON提供的json.js包,使用parseJSON()方法将字符串解析成js对象
VarjsonReponse=xhr.responseText;
Varperson=jsonReponse.parseJSON();
Jquery中的ajax
$.get(url,args,function(data){
},’JSON’)
三MyBatis
打开命令行窗口,切换到生成工具的根目录下,执行如下命令:
java-jarmybatis-generator-core-1.3.2.jar-configfilegenerator.xml-overwrite
重点说一下UserMapper.xml配置中需要注意的几个小细节问题:
1、UserMapper.xml的
2、UserMapper.xml的定义操作数据库的
一对一:
在resultMap里加上association
一对多:
collection
原理详解:
MyBatis应用程序根据XML配置文件创建SqlSessionFactory,SqlSessionFactory在根据配置,配置来源于两个地方,一处是配置文件,一处是Java代码的注解,获取一个SqlSession。
SqlSession包含了执行sql所需要的所有方法,可以通过SqlSession实例直接运行映射的sql语句,完成对数据的增删改查和事务提交等,用完之后关闭SqlSession
优点:
sql写在xml里,便于统一管理和优化
缺点:
SQL语句依赖于数据库,导致数据库移植性差,不能更换数据库
和hibernate的比较
1,Hibernate的O/RMapping实现了POJO 和数据库表之间的映射;
MyBATIS 则在于POJO 与SQL之间的映射关系。
然后通过映射配置文件,将SQL所需的参数,以及返回的结果字段映射到指定POJO。
2,Hibernate数据库移植性很好,MyBatis的数据库移植性不好,不同的数据库需要写不同SQL
3,MyBatis容易掌握,而Hibernate门槛较高
Mybatis基础:
#{...}和${...}的区别:
#{…}解释为JDBCpreparedstatement的一个参数标记。
而将${…}解释为字符串替换
要使用LIKE语句该怎么写?
拼接通配符
select * from foo where bar like '%' || '${value}' || '%'
如何获取自动生成的(主)键值?
insert into names (name) values (#{name})
在mapper中如何传递多个参数?
使用@param注解
四SpringMVC
SpringMvc是什么:
步骤:
1,配置web.xml,添加配置DispatcherServlet
--配置DispatcherServlet-->
--配置DispatcherServlet的一个初始化参数:
配置SpringMVC配置文件的位置和名称-->
springmvc.xml
2,配置spirngMVC.xml
--配置自定扫描的包-->
component-scanbase-package="com.XXX.springmvc">
component-scan>
--配置视图解析器:
如何把handler方法返回值解析为实际的物理视图-->
3,Controller
@Controller
publicclassHelloWorld{
/**
*1.使用@RequestMapping注解来映射请求的URL
*2.返回值会通过视图解析器解析为实际的物理视图,对于InternalResourceViewResolver视图解析器,会做如下的解析:
*通过prefix+returnVal+后缀这样的方式得到实际的物理视图,然会做转发操作
*/WEB-INF/views/success.jsp
*@return
*/
@RequestMapping("/helloworld")
publicStringhello(){
System.out.println("helloworld");
return"success";
}
}
@RequestMapping
可定义方法,也可定义类
method属性来指定请求方式,如:
method=RequestMethod.POST
Params属性:
param表示请求必须包含param的参数;!
param表示请求必须不能不含param的参数
如:
@RequestMapping(value="testParamsAndHeaders",params={"username",
"age!
=10"},headers={"Accept-Language=en-US,zh;q=0.8"})
@RequestMapping(value=”/delete”,params="method=midea.mfp.product.detail.list",produces="application/json;charset=utf-8")
@RequestParam映射请求的参数
Value请求参数的参数名
Required该参数是否必须
DefaultValue默认值
如:
@requestMapping(value=’test’)
PublicStringtest(@RequestParam(value=’username’)){
}
SpringMVC请求参数:
1,@RequestParam映射请求的参数
2,使用pojo作为参数
3,通过servlet原生api
SpringMVC处理模型数据的方法
1,modelAndView
2,Map
3,SessionAttribute
@ModelAttribute标记的方法,会在每个目标方法执行之前被SpringMvc调用
视图解析器:
1,InternalResourceView
2,如果使用了jstl标签,springMVC会自动把InternalResourceView转成jstlVIEW
SpringMVC返回json
加注解:
@ResponseBody及加上几个jar包
SpringMVC和Struts2的对比
原理:
1.springmvc请所有的请求都提交给DispatcherServlet,它会委托应用系统的其他模块负责负责对请求进行真正的处理工作。
2.DispatcherServlet查询一个或多个HandlerMapping,找到处理请求的Controller.
3.DispatcherServlet请请求提交到目标Controller
4.Controller进行业务逻辑处理后,会返回一个ModelAndView
5.Dispathcher通过iewResolver视图解析器,找到ModelAndView对象指定的视图对象
6.视图对象负责渲染返回给客户端。
六Struts2
框架:
替程序员完成一部分的代码,从而提高开发效率;使用框架必须遵循框架的规则
Struts是什么:
Struts2是基于MVC设计模式的Web应用程序框架
处理流程:
用户提交一个请求,服务器接收,并且交给struts2的核心过滤器(web.xml里配置的StrutsPrepareAndExceteFilter)来进行处理,Struts2的过滤器调用struts2的一系列处理器来进行处理(如:
解析struts.xml配置文件,和用户提交的action请求对比,如果找不到就返回404,如果找到就进行下一步处理。
),知道调用对应的action类中的execute方法执行,执行完后再进行一系列处理到核心过滤器,由核心过滤器返回给服务器,服务器对浏览器进行相应的响应
工作原理
在Struts2框架中的处理大概分为以下几个步骤
1客户端初始化一个指向Servlet容器(例如Tomcat)的请求
2这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:
SiteMeshPlugin)
3接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请是否需要调用某个Action
4如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy
5ActionProxy通过ConfigurationManager询问框架的配置文件,找到需要调用的Action类
6ActionProxy创建一个ActionInvocation的实例。
7ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。
8一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。
返回结果通常是(但不总是,也可能是另外的一个Action链)一个需要被表示的JSP或者FreeMarker的模版。
在表示的过程中可以使用Struts2框架中继承的标签。
在这个过程中需要涉及到ActionMapper
请求
-->filter
-->调用filterDispatcher,询问ActionMapper是否调用Action
-->是的话就把请求交给Actionproxy
-->Actionproxy通过ConfigurationManager访问配置文件找到对应action类
-->Actionproxy创建ActionInvocation实例(在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用)
-->执行完毕,返回结果
线程安全:
在一个进程中有多个线程并发执行,每个线程执行过程中,变量值是相同的,执行结果也是相同的
Struts2是多实例的,每次请求都会重新创建新的action对象,所以线程安全
Struts1和servlet是单例的
Struts2和Struts1的区别
1,Struts1依赖于ServletAPI,因为当一个Action被调用时HttpServletRequest和HttpServletResponse被传递给execute方法。
Struts2不依赖于容器,通过ActionContex可以获取到request和response
2,Struts1是单实例,Struts2是多实例的,所以Struts2是线程安全的
Struts2和SpringMVC的区别
1,SpringMVC基本实现0配置,开发效率高于Struts2
2,SpringMVC的入口是servlet,而Struts2是filter
3,Struts2是类级别的拦截,SpringMVC是方法级别的拦截
Struts2的优缺点:
常用配置
解决乱码
Resulttype:
Chain--链接下一个action
Dispatcher--转发
Rediret--重定向
Action的三种实现方式
1,实现action接口:
好处--使代码更加规范
如publicclassHello1ActionimplementsAction{
PublicStringexecute()throwsException{
ReturnSUCCESS;
}
}
2,继承ActionSupport类
好处:
可以继承一些功能,如验证(推荐使用)
如publicclassHello2ActionextendsActionSupport{
PublicStringexecute()throwsException{
ReturnSUCCESS;
}
}
3,定义一个pojo类
好处:
自定义一个普通java类即可
publicclassHelloAction{
PublicStringexecute(){
Return“success”;
}
}
以对象的方式处理表单数据
PublicclassAction{
PrivateUseruser;//记得要生成get,set方法
PublicStringexecute(){
}
}
获取servletApi:
(推荐用一,四种)
方式一:
通过ActionContext对象获取(解耦)
1,获取session:
ActionContext.getContext().getSession().put(“uaer”,name);
2,获取request--HttpServletRequest对象的attribute
Maprequest=(Map)ActionContext.getContext().get(“request”);
3,获取application:
Mapapplication=(Map)ActionContext.getContext().getApplication();
4,获取parameters:
Mapparameter=(Map)ActionContext.getContext().getParameters();
方式二:
通过ActionContext直接获取HttpServletRequest
HttpServletRequestrequest=(HttpServletRequest)ActionContext.getContext().get(StrutsStatics.HTTP_REQUEST);
request.getSession();
方式三:
实现servletRequestAwqre接口
方式四:
通过ServletActio
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 试题 总结