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

1.Java中的callablerunnable的区别:

       Arunnablecallable都代表在不同的线程中要执行的任务,runnablejdk1.0开始就有了,callable是在jdk1.5之后增加的,主要区别是callablerun()方法可以有返回值,也可以抛出异常,runnable的返回值是void

2.谈谈数据的加密模式,以及加密模式的顺序:

       A:对称式和非对称式,顺序:传输加密,数据存储加密,数据完整性的鉴别,密匙管理。

3.javainterrupted()和isinterrupted()方法的区别:(thread类中的方法)

       A

4.sleep()和wait()的区别:

       Sleep()是thread类的静态方法,Wait()是obj类的方法。谁调用sleep方法,谁就去睡觉。

sleep方法没有释放锁,wait方法释放了锁。

       NotifynotifyAll可以唤醒wait(),sleep除了用指定时间唤醒外,还可以调用interrupt()方法强行打断。

5.hashmap的数组是hashcode定位的,而很多key的到的hashcode是相同的,这时候如何定位:

       Ahashcode实际返回的就是对象存储位置的映射,hashcode相同但是对象不同,那存储位置也就不同。

6.jvm中的哪个参数是来控制线程的栈堆大小的:

       A-Xss

7.javasynchronizedReentrantlock有什么区别:

       Reentrantlocksynchronized比之有很高的扩展性。

8.Hibernate的核心接口有哪些:

       Asession接口:负责执行持久化对象的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.ssmssh的区别:

 

12.redis的事物和mysql中事物的区别:

       Aredis事物需要用到multlexec两个命令,事物开始的时候先向redis服务器发送multl命令,然后等所有的任务都执行完成之后发送exec命令。

13.lucenesolr的区别:

       Asolr是基于lucene开发的全文检索服务器。Lucene则是一套实现了全文检索的api

14.用户在app订阅业务使用什么设计模式:

       A:观察者模式,又叫发布订阅模式,观察者定义了一种一对多的依赖模式,让多个观察者同时监听某一主题对象,当这个主题对象在状态发生改变时,会通知所有观察者对象,使他们能够自动更新自己,这里的主题对象就是指通知者,又叫发布者。

15.有三个线程,t1t2t3,怎么确保它们按顺序执行:

       A1.可以用线程类的join()方法在一个线程中启动另一个线程,为了确保执行的顺序,应该在t3中调用t2,在t2中调能够t1.

16.struts2springmvc的区别:

       A1.springmvc的入口是一个servlet前端控制器,而struts2是一个filter过滤器。

              2.springmvc是基于方法开发的,传递参数是通过方法的形参,可以设计为单例或者多利(建议单例),struts2是基于类开发的,传递的参数是基于类的属性,只能设计为多例。

              3.struts2采用值栈存储请求和响应的数据,通过ognl存取数据,springmvc通过参数解析器将request对象内容解析成方法的形参,将响应的数据封装成modelandview对象,最后又将模型数据通过request对象传递到页面,jsp视图解析器默认使用jstl

              4.struts2有漏洞,springmvc目前还没有出现

17.spring中的beanfactoryapplicationContext的联系与区别:

       ABeanfactoryspring中比较原始的factory,如xmlbeanfactory,原始的beanfactory无法支持spring的许多插件,如aop功能,web应用等。

       ApplicationContext接口,是由beanFactory派生而来,因而提供了beanFactory的所有功能,ApplicationContext以一种更向面向框架的方式工作,以及对上下文进行分层、实现和继承。

18.filterinterceptor的区别:

       Afilter基于filter接口中的dofilter回调函数,interceptor则基于java中的反射机制;

              Filter依赖于servlet容器,interceptior则与之无关;

              Filter的过滤范围比interceptior大,filter还可以保护页面,图片,文件等,而interception只能过滤请求,只对action起作用,在action开始之前开始,在action完成之后结束。

              Filter的过滤一般在服务器加载的时候在init方法中声明,而interception可以通过在xml中声明是guest还是user请求来辨别是否过滤

              Interceptior可以访问action上下文,而filter则不能。

              action生命周期中,拦截器可以被调用多次,而过滤器只能在容器初始化的时候被调用一次。

20.javaconcurrentHashMap的并发度是什么:

       AconcurrentHashMap把实际的map划分成若干部分来实现它的可扩展性和线程安全,这种划分是使用并发度获得的。它是concurrentHashMap类构造函数的一个可选参数,默认值是16,这样在多线程下就能避免争用。

21.项目中,运行监控模块是用来处理什么业务的:

       A:用来检测站点运行情况,设备运行情况,并将填写的结果显示到系统首页,由于追求实时性,每隔10分钟刷新一次。

22.如果你的项目中使用很多ckeditor,在保存数据的时候多出很多的html标签内容,数据库表的字段如果存储不下,怎么办:

       A:在运行监控表中,不要存放真实的文本值,只需要存放一个标识,用指定的标识再查询文本数据库,由于在数据表中存放很多条数据,(保存的时候,大文本数据将分割保存到数据表中),将多条数据进行排序,获取所有的文本内容。

*23.现在有个需求,让你完成一个excel报表,显示字段的动态导出,你如何设计:

       A:设计表,字段包括导出和未导出,导出和未导出又分为中文和字段名称,

24.如何实现树形结果菜单显示的数据库设计:

       A:子节点id,父节点id,名称。子节点id和父节点id作为该表的联合主键。

25.你们项目如何实现细颗粒权限控制,简述叙述思想:

       A:对应地址上输入url连接,但是当前登录名没有访问该url的权限,不能访问,要跳转到错误页面,

1.    定义两个注解(midpid,表示权限的唯一标识)

2.    将两个注解定义访问每个url对应Action类的方法上,Action类的方法上对应的两个值(midpid),此时表示唯一的方法。

3.    使用struts2自定义一个拦截器,在拦截器的方法中,先获取每个action类的方法,再获取每个方法上自定义的注解,在获取注解对应的两个值,midpid,使用当前登录人的角色的midpid的值查询角色权限表,判断当前角色是否具有权限。

26.java中如何停止一个线程:

       Ajava没有提供停止线程的api,在jdk1.0时有stop(),suspend()和resume()的控制方法,但是由于潜在的死锁威胁因此在后续的版本中均被抛弃了。当run()或者call()方法执行完的时候当前线程会自动结束,如果要手动结束线程,可以用volatile布尔变量来退出run()方法的循环或者取消任务来中断线程。

27.什么是threadLocal变量:

       AThreadLocaljava里一种特殊的变量,每一个线程都有自己独立的变量,竞争条件被彻底消除了,它是为创建代价高昂的对象获取线程安全的好办法。

28.LinkedlistArrayListVector的区别:

       AArrayList底层是采用数组实现的(并且数组里面的类型是Object类型的);当我们new一个ArrayList集合时,底层会生成一个长度为10的数组来存储对象,对于ArrayListVector来说,底层都是采用数组方式来实现的;对于ArrayList,所有的方法都是不同步的,而vector大部分是public的方法都是同步的。LinkedList底层是由双向循环链表实现的,对于ArrayList,查找速度非常快,增删特别慢,而linkedList则刚好相反。

29.query接口的list方法和iterator方法有什么区别:

       A1.获取方式:listquery.list();

                                   Ilteratorquery.iterate();

              2.执行sqlquery.list()方法默认只会查一次数据库,而query.iterate()方法会先到数据库中把id取出来,然后真正要遍历某个对象的时候,先到缓存中去找,缓存中没有,就会以id为条件再发一条sql去数据库中找。

       3.list只查询一级缓存,而iterate会从二级缓存中查找。

       4.list返回的是实体对象,而iterate返回的是代理对象。

       5.sessionlist第二次发出,仍然会去数据库查找。

30.cookiesession有什么区别:

       A1.cookie数据存放在客户的浏览器上,session的数据存放在服务器上;

              2.cookie不是很安全。

              3.session会在一定时间内保存在服务器上,当访问增多,会比较占用你服务器的性能,考虑到减轻服务器的压力,应当使用cookie

              4.单个cookie保存的数据不能超过4k,很多浏览器都限制一个站点保存20cookie

31.get方法和post方法的区别:

       A1.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完成2Form表单间的跳转:

       A:必须存在两个页面,index.jspedit.jsp,在index.jsp中存在两个form表单,Form1Form2,选择form1中元素的参数,作为访问服务器的参数,调用ajax访问服务器。将处理结果返回给edit.jsp,将edit.jsp中的内容全部放置到index.jsp中的form2中。

 

36.SpringMVC的工作流程:

       A1Http请求:客户端的请求提交后,会访问DispatcherServlet控制器

              2)寻找处理器:由DispatcherServlet控制器查询一个或多个HandlerMapping,找到处理请求的Controller

              3)调用处理器:DispatcherServlet将请求提交到Controller

              45)调用业务处理和返回结果:Controller调用业务层处理后,返回ModelAndView

              67)处理视图映射并返回模型:DispatcherServlet查询一个或多个ViewResoler视图解析器,找到ModelAndView指定的视图

              8Http响应:视图负责将结果返回到客户端。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值