您的位置:首页 > 职场人生

JAVA部分面试题总结,部分答案不是很详细

2018-01-06 19:14 651 查看
1.Java中的callable和runnable的区别:
      
A:runnable和callable都代表在不同的线程中要执行的任务,runnable在jdk1.0开始就有了,callable是在jdk1.5之后增加的,主要区别是callable的run()方法可以有返回值,也可以抛出异常,runnable的返回值是void。
2.谈谈数据的加密模式,以及加密模式的顺序:
      
A:对称式和非对称式,顺序:传输加密,数据存储加密,数据完整性的鉴别,密匙管理。
3.java中interrupted()和isinterrupted()方法的区别:(thread类中的方法)
      
A:
4.sleep()和wait()的区别:
      
Sleep()是thread类的静态方法,Wait()是obj类的方法。谁调用sleep方法,谁就去睡觉。
而sleep方法没有释放锁,wait方法释放了锁。
      
Notify、notifyAll可以唤醒wait(),sleep除了用指定时间唤醒外,还可以调用interrupt()方法强行打断。
5.hashmap的数组是hashcode定位的,而很多key的到的hashcode是相同的,这时候如何定位:
      
A:hashcode实际返回的就是对象存储位置的映射,hashcode相同但是对象不同,那存储位置也就不同。
6.jvm中的哪个参数是来控制线程的栈堆大小的:
      
A:-Xss
7.java中synchronized和Reentrantlock有什么区别:
      
Reentrantlock较synchronized比之有很高的扩展性。
8.Hibernate的核心接口有哪些:
      
A:session接口:负责执行持久化对象的crud操作,session对象是非线程安全的。
             
SessionFactory接口:初始化hibernate,并负责创建session对象
             
Configuration接口:负责配置并启动hibernate,创建sessionfactory对象
             
Transaction接口:负责事物的相关操作
             
Query接口:负责执行查询的接口
             
Criteria接口:条件查询
9.struts的工作原理:
      
A:客户端浏览器发送请求,被web.Xml中配置的FilterDispatcher接收。根据struts.Xml的配置找到对应的Action类和方法,并通过ioc方式将值注入给Action,然后调用业务层处理业务,结束后,根据struts.xml配置的的结果找到对应的result,跳转到相应的页面,返回给客户端。
10.hibernate的三种状态和区别:
      
A:瞬时态:也叫自由状态,数据库没有数据与之对应。Session没有关联该对象
             
持久态:数据库可能有数据与之对应,当前与session有关联,并且相关联的session没有关闭
             
脱管态:也叫游离态,数据库有数据与之关联,但是没有与session进行关联,有oid,当托管状态发生改变时,hibernate则不能检测到。
11.ssm和ssh的区别:
 
12.redis的事物和mysql中事物的区别:
      
A:redis事物需要用到multl和exec两个命令,事物开始的时候先向redis服务器发送multl命令,然后等所有的任务都执行完成之后发送exec命令。
13.lucene和solr的区别:
      
A:solr是基于lucene开发的全文检索服务器。Lucene则是一套实现了全文检索的api
14.用户在app订阅业务使用什么设计模式:
      
A:观察者模式,又叫发布订阅模式,观察者定义了一种一对多的依赖模式,让多个观察者同时监听某一主题对象,当这个主题对象在状态发生改变时,会通知所有观察者对象,使他们能够自动更新自己,这里的主题对象就是指通知者,又叫发布者。
15.有三个线程,t1,t2,t3,怎么确保它们按顺序执行:
      
A:1.可以用线程类的join()方法在一个线程中启动另一个线程,为了确保执行的顺序,应该在t3中调用t2,在t2中调能够t1.
16.struts2和springmvc的区别:
      
A:1.springmvc的入口是一个servlet前端控制器,而struts2是一个filter过滤器。
             
2.springmvc是基于方法开发的,传递参数是通过方法的形参,可以设计为单例或者多利(建议单例),struts2是基于类开发的,传递的参数是基于类的属性,只能设计为多例。
             
3.struts2采用值栈存储请求和响应的数据,通过ognl存取数据,springmvc通过参数解析器将request对象内容解析成方法的形参,将响应的数据封装成modelandview对象,最后又将模型数据通过request对象传递到页面,jsp视图解析器默认使用jstl。
             
4.struts2有漏洞,springmvc目前还没有出现
17.spring中的beanfactory和applicationContext的联系与区别:
      
A:Beanfactory是spring中比较原始的factory,如xmlbeanfactory,原始的beanfactory无法支持spring的许多插件,如aop功能,web应用等。
      
ApplicationContext接口,是由beanFactory派生而来,因而提供了beanFactory的所有功能,ApplicationContext以一种更向面向框架的方式工作,以及对上下文进行分层、实现和继承。
18.filter和interceptor的区别:
      
A:filter基于filter接口中的dofilter回调函数,interceptor则基于java中的反射机制;
             
Filter依赖于servlet容器,interceptior则与之无关;
11059

             
Filter的过滤范围比interceptior大,filter还可以保护页面,图片,文件等,而interception只能过滤请求,只对action起作用,在action开始之前开始,在action完成之后结束。
             
Filter的过滤一般在服务器加载的时候在init方法中声明,而interception可以通过在xml中声明是guest还是user请求来辨别是否过滤
             
Interceptior可以访问action上下文,而filter则不能。
             
在action生命周期中,拦截器可以被调用多次,而过滤器只能在容器初始化的时候被调用一次。
20.java中concurrentHashMap的并发度是什么:
      
A:concurrentHashMap把实际的map划分成若干部分来实现它的可扩展性和线程安全,这种划分是使用并发度获得的。它是concurrentHashMap类构造函数的一个可选参数,默认值是16,这样在多线程下就能避免争用。
21.项目中,运行监控模块是用来处理什么业务的:
      
A:用来检测站点运行情况,设备运行情况,并将填写的结果显示到系统首页,由于追求实时性,每隔10分钟刷新一次。
22.如果你的项目中使用很多ckeditor,在保存数据的时候多出很多的html标签内容,数据库表的字段如果存储不下,怎么办:
      
A:在运行监控表中,不要存放真实的文本值,只需要存放一个标识,用指定的标识再查询文本数据库,由于在数据表中存放很多条数据,(保存的时候,大文本数据将分割保存到数据表中),将多条数据进行排序,获取所有的文本内容。
*23.现在有个需求,让你完成一个excel报表,显示字段的动态导出,你如何设计:
      
A:设计表,字段包括导出和未导出,导出和未导出又分为中文和字段名称,
24.如何实现树形结果菜单显示的数据库设计:
      
A:子节点id,父节点id,名称。子节点id和父节点id作为该表的联合主键。
25.你们项目如何实现细颗粒权限控制,简述叙述思想:
      
A:对应地址上输入url连接,但是当前登录名没有访问该url的权限,不能访问,要跳转到错误页面,
1.    定义两个注解(mid和pid,表示权限的唯一标识)
2.    将两个注解定义访问每个url对应Action类的方法上,Action类的方法上对应的两个值(mid和pid),此时表示唯一的方法。
3.    使用struts2自定义一个拦截器,在拦截器的方法中,先获取每个action类的方法,再获取每个方法上自定义的注解,在获取注解对应的两个值,mid和pid,使用当前登录人的角色的mid和pid的值查询角色权限表,判断当前角色是否具有权限。
26.java中如何停止一个线程:
      
A:java没有提供停止线程的api,在jdk1.0时有stop(),suspend()和resume()的控制方法,但是由于潜在的死锁威胁因此在后续的版本中均被抛弃了。当run()或者call()方法执行完的时候当前线程会自动结束,如果要手动结束线程,可以用volatile布尔变量来退出run()方法的循环或者取消任务来中断线程。
27.什么是threadLocal变量:
      
A:ThreadLocal是java里一种特殊的变量,每一个线程都有自己独立的变量,竞争条件被彻底消除了,它是为创建代价高昂的对象获取线程安全的好办法。
28.Linkedlist,ArrayList,Vector的区别:
      
A:ArrayList底层是采用数组实现的(并且数组里面的类型是Object类型的);当我们new一个ArrayList集合时,底层会生成一个长度为10的数组来存储对象,对于ArrayList与Vector来说,底层都是采用数组方式来实现的;对于ArrayList,所有的方法都是不同步的,而vector大部分是public的方法都是同步的。LinkedList底层是由双向循环链表实现的,对于ArrayList,查找速度非常快,增删特别慢,而linkedList则刚好相反。
29.query接口的list方法和iterator方法有什么区别:
      
A:1.获取方式:list:query.list();
                                  
Ilterator:query.iterate();
      
       2.执行sql:query.list()方法默认只会查一次数据库,而query.iterate()方法会先到数据库中把id取出来,然后真正要遍历某个对象的时候,先到缓存中去找,缓存中没有,就会以id为条件再发一条sql去数据库中找。
      
3.list只查询一级缓存,而iterate会从二级缓存中查找。
      
4.list返回的是实体对象,而iterate返回的是代理对象。
      
5.session中list第二次发出,仍然会去数据库查找。
30.cookie和session有什么区别:
      
A:1.cookie数据存放在客户的浏览器上,session的数据存放在服务器上;
             
2.cookie不是很安全。
             
3.session会在一定时间内保存在服务器上,当访问增多,会比较占用你服务器的性能,考虑到减轻服务器的压力,应当使用cookie。
             
4.单个cookie保存的数据不能超过4k,很多浏览器都限制一个站点保存20个cookie。
31.get方法和post方法的区别:
      
A:1.get是向服务器发索取数据的一种请求,而post是向服务器提交数据的一种请求;
      
       2.使用get提交数据,服务器使用request.get。。。获取值,post方式提交,服务器使用request.form获取。
             
3.get方式安全性低,post方式较为安全,但是post的效率比get低
             
4.get方式的请求参数是拼接在浏览器的请求地址上,post则是通过http post机制,将表单内各个内容放置在HTML HEADER
内一起传送到action属性所指的url地址
32.请解释下死锁,为什么会产生,产生的必要条件:
      
A:
 
33.谈谈类的加载机制:
      
A:类加载器:
             
1).Bootstrap ClassLoader:将存放于<Java_home>/lib目录中的,或者被-Xbootclasspath参数所指定的路径中的,并且是虚拟机是别的类库加载到虚拟内存中。启动类加载器无法被java程序直接引用。
             
2).Extension ClassLoader:将<java_home>/lib/ext目录下的或者被java.ext.dirs系统变量所指定的路径中的所有类库加载。开发者可以直接使用扩展类加载器。
             
3).Application ClassLoader:负责加载用户路径(classpath)上所指定的类库,开发者可直接使用。
             
类加载机制:
             
1)
 
34.内存泄漏和内存溢出的区别:
      
A:内存泄漏是指程序中间动态分配了内存,但在程序结束后没有释放这部分内存,从而造成那部分内存不可用的情况。分类:1.常发性内存泄漏;2.偶发性内存泄漏;3.一次性内存泄漏;4.隐式内存泄漏
35.在数据字典编辑的时候,如何使用ajax完成2个Form表单间的跳转:
      
A:必须存在两个页面,index.jsp和edit.jsp,在index.jsp中存在两个form表单,Form1和Form2,选择form1中元素的参数,作为访问服务器的参数,调用ajax访问服务器。将处理结果返回给edit.jsp,将edit.jsp中的内容全部放置到index.jsp中的form2中。
 
36.SpringMVC的工作流程:
      
A:1)Http请求:客户端的请求提交后,会访问DispatcherServlet控制器
             
2)寻找处理器:由DispatcherServlet控制器查询一个或多个HandlerMapping,找到处理请求的Controller
             
3)调用处理器:DispatcherServlet将请求提交到Controller
             
4)5)调用业务处理和返回结果:Controller调用业务层处理后,返回ModelAndView。
             
6)7)处理视图映射并返回模型:DispatcherServlet查询一个或多个ViewResoler视图解析器,找到ModelAndView指定的视图
             
8)Http响应:视图负责将结果返回到客户端。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java面试题总结