黑马程序员技术交流社区

标题: JavaEE面试经验分享——捷智数据技术有限公司 [打印本页]

作者: 就业高冷派    时间: 2018-6-23 17:28
标题: JavaEE面试经验分享——捷智数据技术有限公司
捷智数据技术有限公司西安分公司
公司行业:互联网/电子商务
公司规模:50-100人
公司地址:西安高新技术产业开发区科技六路与沣惠南路十字西北角摩尔中心

面试总结:
1: 什么是Web Service
从表面上看,Web Service就是一个应用程序,它向外界暴露出一个能够通过Web进行调用的API。这就是说,你能够用编程的方法透明的调用这个应用程序,不需要了解它的任何细节,跟你使用的编程语言也没有关系。例如可以创建一个提供天气预报的Web Service,那么无论你用哪种编程语言开发的应用都可以通过调用它的API并传入城市信息来获得该城市的天气预报。之所以称之为Web Service,是因为它基于HTTP协议传输数据,这使得运行在不同机器上的不同应用无须借助附加的、专门的第三方软件或硬件,就可相互交换数据或集成.
2: Session的save()、update()、merge()、lock()、saveOrUpdate()和persist()方法分别是做什么的?有什么区别?
瞬时态的实例可以通过调用save()、persist()或者saveOrUpdate()方法变成持久态;游离态的实例可以通过调用 update()、saveOrUpdate()、lock()或者replicate()变成持久态。save()和persist()将会引发SQL的INSERT语句,而update()或merge()会引发UPDATE语句。save()和update()的区别在于一个是将瞬时态对象变成持久态,一个是将游离态对象变为持久态。merge()方法可以完成save()和update()方法的功能,它的意图是将新的状态合并到已有的持久化对象上或创建新的持久化对象。
对于persist()方法,
persist()方法把一个瞬时态的实例持久化,但是并不保证标识符被立刻填入到持久化实例中,标识符的填入可能被推迟到flush的时间;
persist()方法保证当它在一个事务外部被调用的时候并不触发一个INSERT语句,当需要封装一个长会话流程的时候,persist()方法是很有必要的;
save()方法不保证第②条,它要返回标识符,所以它会立即执行INSERT语句,不管是在事务内部还是外部。至于lock()方法和update()方法的区别,update()方法是把一个已经更改过的脱管状态的对象变成持久状态;lock()方法是把一个没有更改过的脱管状态的对象变成持久状态。
3: Session加载实体对象的过程?
Session在调用数据库查询功能之前,首先会在一级缓存中通过实体类型和主键进行查找,如果一级缓存查找命中且数据状态合法,则直接返回;如果一级缓存没有命中,接下来Session会在当前NonExists记录(相当于一个查询黑名单,如果出现重复的无效查询可以迅速做出判断,从而提升性能)中进行查找,如果NonExists中存在同样的查询条件,则返回null;如果一级缓存查询失败则查询二级缓存,如果二级缓存命中则直接返回;
如果之前的查询都未命中,则发出SQL语句,如果查询未发现对应记录则将此次查询添加到Session的NonExists中加以记录,并返回null;根据映射配置和SQL语句得ResultSet,并创建对应的实体对象;将对象纳入Session(一级缓存)的管理;如果有对应的拦截器,则执行拦截器的onLoad方法;如果开启并设置了要使用二级缓存,则将数据对象纳入二级缓存;返回数据对象。
4: 如何理解Hibernate的延迟加载机制?
延迟加载就是并不是在读取的时候就把数据加载进来,而是等到使用时再加载。Hibernate使用了虚拟代理机制实现延迟加载,我们使用Session的load()方法加载数据或者一对多关联映射在使用延迟加载的情况下从一的一方加载多的一方,得到的都是虚拟代理,简单的说返回给用户的并不是实体本身,而是实体对象的代理。代理对象在用户调用getter方法时才会去数据库加载数据。但加载数据就需要数据库连接。而当我们把会话关闭时,数据库连接就同时关闭了。
延迟加载与session关闭的矛盾一般可以这样处理:
关闭延迟加载特性。这种方式操作起来比较简单,因为Hibernate的延迟加载特性是可以通过映射文件或者注解进行配置的,但这种解决方案存在明显的缺陷。首先,出现”no session or session was closed”通常说明系统中已经存在主外键关联,如果去掉延迟加载的话,每次查询的开销都会变得很大。
session关闭之前先获取需要查询的数据,可以使用工具方法Hibernate.isInitialized()判断对象是否被加载,如果没有被加载则可以使用Hibernate.initialize()方法加载对象。使用拦截器或过滤器延长Session的生命周期直到视图获得数据。Spring整合Hibernate提供的OpenSessionInViewFilter和OpenSessionInViewInterceptor就是这种做法。
5: 什么是IoC和DI?DI是如何实现的?
IOC叫控制反转,是Inversion of Control的缩写,DI(Dependency Injection)叫依赖注入,是对IoC更简单的诠释。控制反转是把传统上由程序代码直接操控的对象的调用权交给容器,通过容器来实现对象组件的装配和管理。所谓的”控制反转”就是对组件对象控制权的转移,从程序代码本身转移到了外部容器,由容器来创建对象并管理对象之间的依赖关系。依赖注入的基本原则是应用组件不应该负责查找资源或者其他依赖的协作对象。配置对象的工作应该由容器负责,查找资源的逻辑应该从应用组件的代码中抽取出来,交给容器来完成。DI是对IoC更准确的描述,即组件之间的依赖关系由容器在运行期决定,形象的来说,即由容器动态的将某种依赖关系注入到组件之中。
依赖注入可以通过setter方法注入(设值注入)、构造器注入和接口注入三种方式来实现,Spring支持setter注入和构造器注入,通常使用构造器注入来注入必须的依赖关系,对于可选的依赖关系,则setter注入是更好的选择,setter注入需要类提供无参构造器或者无参的静态工厂方法来创建对象。
6: Spring MVC的工作原理是怎样的?
客户端的所有请求都交给前端控制器DispatcherServlet来处理,它会负责调用系统的其他模块来真正处理用户的请求。
DispatcherServlet收到请求后,将根据请求的信息(包括URL、HTTP协议方法、请求头、请求参数、Cookie等)以及HandlerMapping的配置找到处理该请求的Handler(任何一个对象都可以作为请求的Handler)。
在这个地方Spring会通过HandlerAdapter对该处理器进行封装。
HandlerAdapter是一个适配器,它用统一的接口对各种Handler中的方法进行调用。
Handler完成对用户请求的处理后,会返回一个ModelAndView对象给DispatcherServlet,ModelAndView顾名思义,包含了数据模型以及相应的视图的信息。
ModelAndView的视图是逻辑视图,DispatcherServlet还要借助ViewResolver完成从逻辑视图到真实视图对象的解析工作。
当得到真正的视图对象后,DispatcherServlet会利用视图对象对模型数据进行渲染。
客户端得到响应,可能是一个普通的HTML页面,也可以是XML或JSON字符串,还可以是一张图片或者一个PDF文件。
7: 线程启动方式的区别 ?
Thread类中run()和start()方法的区别如下:
run()方法:在本线程内调用该Runnable对象的run()方法,可以重复多次调用;
start()方法:启动一个线程,调用该Runnable对象的run()方法,不能多次启动一个线程;
1) start: 用 start方法来启动线程,真正实现了多线程运行,这时无需等待run方法体代码执行完毕而直接继续执行下面的代码。通过调用Thread类的 start()方法来启动一个线程,这时此线程处于就绪(可运行)状态,并没有运行,一旦得到cpu时间片,就开始执行run()方法,这里方法 run()称为线程体,它包含了要执行的这个线程的内容,Run方法运行结束,此线程随即终止。
2) run: run() 方法只是类的一个普通方法而已,如果直接调用Run方法,程序中依然只有主线程这一个线程,其程序执行路径还是只有一条,还是要顺序执行,还是要等待 run方法体执行完毕后才可继续执行下面的代码,这样就没有达到写线程的目的。总结:调用start方法方可启动线程,而run方法只是thread的一 个普通方法调用,还是在主线程里执行。这两个方法应该都比较熟悉,把需要并行处理的代码放在run()方法中,start()方法启动线程将自动调用 run()方法,这是由jvm的内存机制规定的。并且run()方法必须是public访问权限,返回值类型为void.。 两种方式的比较 : 实际中往往采用实现Runable接口,一方面因为java只支持单继承,继承了Thread类就无法再继续继承其它类,而且Runable接口只有一个run方法;另一方面通过结果可以看出实现Runable接口才是真正的多线程
8: 阐述Spring框架中Bean的生命周期?
Spring IoC容器找到关于Bean的定义并实例化该Bean。 pring IoC容器对Bean进行依赖注入。 如果Bean实现了BeanNameAware接口,则将该Bean的id传给setBeanName方法。 如果Bean实现了BeanFactoryAware接口,则将BeanFactory对象传给setBeanFactory方法。 如果Bean实现了BeanPostProcessor接口,则调用其postProcessBeforeInitialization方法。 如果Bean实现了InitializingBean接口,则调用其afterPropertySet方法。 如果有和Bean关联的BeanPostProcessors对象,则这些对象的postProcessAfterInitialization方法被调用。 当销毁Bean实例时,如果Bean实现了DisposableBean接口,则调用其destroy方法。
9: 你如何理解AOP中的连接点(Joinpoint)、切入点(Pointcut)、增强(Advice)、引介(Introduction)、织入(Weaving)、切面(Aspect)这些概念?
①连接点(Joinpoint):所谓连接点是指那些被拦截到的点。在spring中,这些点指的是方法,因为spring只支持方法类型的连接点;
  ②切入点(Pointcut):所谓切入点是指我们要对哪些连接点(Joinpoint)进行拦截的定义;
  ③增强/通知(Advice):所谓通知是指拦截到Joinpoint之后所要做的事情就是通知.通知分为前置通知,后置通知,异常通知,最终通知,环绕通知(切面要完成的功能);
  ④引介(Introduction):引介是一种特殊的通知在不修改类代码的前提下, Introduction可以在运行期为类动态地添加一些方法或Field;
  ⑤Weaving(织入):是指把增强应用到目标对象来创建新的代理对象的过程;
  ⑥Proxy(代理):一个类被AOP织入增强后,就产生一个结果代理类;
  ⑦Aspect(切面):是切入点和通知的结合,以后咱们自己来编写和配置的;


作者: 小公举    时间: 2018-6-25 14:27
你最棒
作者: hello!!!    时间: 2018-6-25 14:43

作者: 从容微笑    时间: 2018-6-25 15:07
好多啊,辛苦了,好厉害
作者: 760486198    时间: 2018-6-25 15:24

好厉害!
好厉害!
好厉害!
好厉害!
好厉害!
好厉害!
好厉害!
好厉害!
好厉害!
好厉害!
作者: 大晨晨    时间: 2018-6-25 15:28

作者: 仙人掌Sandy1    时间: 2018-6-25 15:52
好厉害!
好厉害!
好厉害!
好厉害!
好厉害!
好厉害!
好厉害!
作者: 专找bug    时间: 2018-6-25 15:53
我会好好努力学习的
作者: yy1134787753    时间: 2018-6-25 16:46
感谢,辛苦啦
作者: little_superman    时间: 2018-6-25 17:20
6666666666666666666666666
作者: 逆风TO    时间: 2018-6-25 17:49
感谢分享  一定要找个好工作
作者: 零度☆黎明    时间: 2018-6-25 19:45
不错, 不错 ..................
作者: JavaEE风清扬    时间: 2018-6-25 20:15
感谢分享....................
作者: yujq    时间: 2018-6-25 20:24
多看看
作者: fujiangbo    时间: 2018-6-25 20:55
厉害
作者: 耙丫丫    时间: 2018-6-25 22:05

作者: 黑马程序员啊    时间: 2018-6-25 23:07
6666666666666666666666666666
作者: hongping    时间: 2018-6-26 09:05

作者: duanshaobo    时间: 2018-6-26 09:30
在盒子里睡着的美梦,一打开就无影无踪,睡醒的人哭着想回家,可离家的人不会相信他
作者: 致橡树    时间: 2018-6-26 10:13
水军11号顶顶顶顶顶顶顶顶瞎jb顶顶
作者: 兮兮哈哈    时间: 2018-6-26 11:14
是不是 还那么爱迟到
熬夜工作又睡不好
等你 完成你的目标
要戒掉逞强的嗜好
作者: 小伙啊    时间: 2018-6-26 12:58
6666666666666
作者: xiaoheizi    时间: 2018-6-26 13:09

作者: 举个栗子    时间: 2018-6-26 13:09

作者: ruoquan    时间: 2018-6-26 13:10
很厉害的啊。。。
作者: 王航    时间: 2018-6-26 13:25
6666666666666
作者: xuanxushuai01    时间: 2018-6-26 13:36
日了狗了
作者: 半个程序员    时间: 2018-6-26 14:02
键盘敲烂,月薪过万,你最棒。。
作者: 谢先森    时间: 2018-6-26 14:09
感谢分享 祝你工作顺利
作者: ouweina    时间: 2018-6-26 14:11
666666666666666666666666666
作者: ouweina    时间: 2018-6-26 14:13

作者: 疯子小花花    时间: 2018-6-26 14:13

作者: zhuyanting    时间: 2018-6-26 15:19

作者: zhaosongzhi    时间: 2018-6-26 15:44
命中率百分之八十  66666666
作者: zhaosongzhi    时间: 2018-6-26 15:44
命中率80%,666666666666
作者: zhaosongzhi    时间: 2018-6-26 15:45
666666666666666666
作者: zhaosongzhi    时间: 2018-6-26 15:46

作者: huochaochao    时间: 2018-6-26 17:50
666666666666
作者: 殷凯老师    时间: 2018-6-26 19:47

感谢分享!!!!!!!!!!!!!!!!!!!!
作者: 疯言峰语02    时间: 2018-6-26 21:34
6666666666666666
作者: zplxwl    时间: 2018-6-26 21:40
很好很好很好
作者: 这是一个师哥    时间: 2018-6-27 06:06
  西安 黑马就是厉害
作者: 1098018910    时间: 2018-6-27 09:22


好厉害!
好厉害!
好厉害!
好厉害!
好厉害!
好厉害!
好厉害!
好厉害!
好厉害!
作者: 就业高冷派    时间: 2018-6-27 10:50
为祖国贡献,不喊累
作者: dajiahao    时间: 2018-6-27 13:23
666666666666666666666
作者: SunYan    时间: 2018-6-27 13:29
黑马6666666666666666666666666
作者: 同心筑梦1    时间: 2018-6-27 16:14

作者: 小航子    时间: 2018-6-27 17:12
6666666666666666
作者: 淡写薰衣草的香    时间: 2018-6-27 17:20

作者: mydorling11    时间: 2018-6-27 19:22
老铁66666老铁66666老铁66666老铁66666老铁66666老铁66666
作者: json0314    时间: 2018-6-27 19:39
棒棒哒
作者: #风萧萧#    时间: 2018-6-28 12:09
好多啊,辛苦了,好厉害
作者: superbaby    时间: 2018-6-28 12:17
不错, 不错 ..................
作者: 巴拉拉小魔仙    时间: 2018-6-28 14:59

作者: 黑马小王子123    时间: 2018-6-28 16:24

6666666666666666666666666666
作者: SharkSSB    时间: 2018-6-28 16:29

作者: kdhdjdj    时间: 2018-6-28 17:16

作者: 哦嗨呦    时间: 2018-6-28 17:18
顶!!!!!!!!!!!
作者: 多喝点热水~    时间: 2018-6-28 17:30
              
作者: 小西西哦    时间: 2018-6-28 17:34
666666666666666666666666666666666666666
作者: 温柔一刀!喵!    时间: 2018-6-28 17:38
这些老师一看就是非常认真在做这件事,真的很赞
作者: 小西西哦    时间: 2018-6-28 17:43
6666666666666666666666666666666
作者: 小丹子    时间: 2018-6-28 17:56
你最棒
作者: 凯凯小王子    时间: 2018-6-29 11:22
撸起袖子加油干
作者: 小丹子    时间: 2018-6-30 18:36
感谢楼主分享!
作者: 就业高冷派    时间: 2018-8-8 10:04
小公举 发表于 2018-6-25 14:27
你最棒

感谢大家支持~
作者: 就业高冷派    时间: 2018-8-8 10:05
hello!!! 发表于 2018-6-25 14:43

感谢大家支持~
作者: 就业高冷派    时间: 2018-8-8 10:05
从容微笑 发表于 2018-6-25 15:07
好多啊,辛苦了,好厉害

感谢大家支持~
作者: 就业高冷派    时间: 2018-8-8 10:05
760486198 发表于 2018-6-25 15:24
好厉害!
好厉害!
好厉害!

感谢大家支持~
作者: 就业高冷派    时间: 2018-8-8 10:05
大晨晨 发表于 2018-6-25 15:28

感谢大家支持~
作者: 就业高冷派    时间: 2018-8-8 10:05
仙人掌Sandy1 发表于 2018-6-25 15:52
好厉害!
好厉害!
好厉害!

感谢大家支持~
作者: 就业高冷派    时间: 2018-8-8 10:05
专找bug 发表于 2018-6-25 15:53
我会好好努力学习的

感谢大家支持~
作者: 就业高冷派    时间: 2018-8-8 10:05
yy1134787753 发表于 2018-6-25 16:46
感谢,辛苦啦

感谢大家支持~
作者: 就业高冷派    时间: 2018-8-8 10:05
little_superman 发表于 2018-6-25 17:20
6666666666666666666666666

感谢大家支持~
作者: 就业高冷派    时间: 2018-8-8 10:05
逆风TO 发表于 2018-6-25 17:49
感谢分享  一定要找个好工作

感谢大家支持~
作者: 就业高冷派    时间: 2018-8-8 10:05
零度☆黎明 发表于 2018-6-25 19:45
不错, 不错 ..................

感谢大家支持~
作者: 就业高冷派    时间: 2018-8-8 10:05
JavaEE风清扬 发表于 2018-6-25 20:15
感谢分享....................

感谢大家支持~
作者: 就业高冷派    时间: 2018-8-8 10:05
yujq 发表于 2018-6-25 20:24
多看看

感谢大家支持~
作者: 就业高冷派    时间: 2018-8-8 10:05
fujiangbo 发表于 2018-6-25 20:55
厉害

感谢大家支持~
作者: 就业高冷派    时间: 2018-8-8 10:05
耙丫丫 发表于 2018-6-25 22:05

感谢大家支持~
作者: 就业高冷派    时间: 2018-8-8 10:05
黑马程序员啊 发表于 2018-6-25 23:07
6666666666666666666666666666

感谢大家支持~
作者: 就业高冷派    时间: 2018-8-8 10:05
hongping 发表于 2018-6-26 09:05

感谢大家支持~
作者: 就业高冷派    时间: 2018-8-8 10:05
duanshaobo 发表于 2018-6-26 09:30
在盒子里睡着的美梦,一打开就无影无踪,睡醒的人哭着想回家,可离家的人不会相信他 ...

感谢大家支持~
作者: 就业高冷派    时间: 2018-8-8 10:06
致橡树 发表于 2018-6-26 10:13
水军11号顶顶顶顶顶顶顶顶瞎jb顶顶

感谢大家支持~
作者: 就业高冷派    时间: 2018-8-8 10:06
兮兮哈哈 发表于 2018-6-26 11:14
是不是 还那么爱迟到
熬夜工作又睡不好
等你 完成你的目标

感谢大家支持~
作者: 就业高冷派    时间: 2018-8-8 10:06
小伙啊 发表于 2018-6-26 12:58
6666666666666

感谢大家支持~
作者: 就业高冷派    时间: 2018-8-8 10:06
小伙啊 发表于 2018-6-26 12:58
6666666666666

感谢大家支持~
作者: 就业高冷派    时间: 2018-8-8 10:06
xiaoheizi 发表于 2018-6-26 13:09
{ ...

感谢大家支持~
作者: 就业高冷派    时间: 2018-8-8 10:06
举个栗子 发表于 2018-6-26 13:09

感谢大家支持~
作者: 就业高冷派    时间: 2018-8-8 10:06
ruoquan 发表于 2018-6-26 13:10
很厉害的啊。。。

感谢大家支持~
作者: 就业高冷派    时间: 2018-8-8 10:06
王航 发表于 2018-6-26 13:25
6666666666666

感谢大家支持~
作者: 就业高冷派    时间: 2018-8-8 10:06
xuanxushuai01 发表于 2018-6-26 13:36
日了狗了

感谢大家支持~
作者: 就业高冷派    时间: 2018-8-8 10:06
半个程序员 发表于 2018-6-26 14:02
键盘敲烂,月薪过万,你最棒。。

感谢大家支持~
作者: 就业高冷派    时间: 2018-8-8 10:06
ouweina 发表于 2018-6-26 14:11
666666666666666666666666666

感谢大家支持~
作者: 就业高冷派    时间: 2018-8-8 10:06
ouweina 发表于 2018-6-26 14:13

感谢大家支持~
作者: 就业高冷派    时间: 2018-8-8 10:06
疯子小花花 发表于 2018-6-26 14:13

感谢大家支持~
作者: 就业高冷派    时间: 2018-8-8 10:06
疯子小花花 发表于 2018-6-26 14:13

感谢大家支持~
作者: 就业高冷派    时间: 2018-8-8 10:06
zhuyanting 发表于 2018-6-26 15:19

感谢大家支持~
作者: 就业高冷派    时间: 2018-8-8 10:07
zhaosongzhi 发表于 2018-6-26 15:44
命中率百分之八十  66666666

感谢大家支持~
作者: 就业高冷派    时间: 2018-8-8 10:07
zhaosongzhi 发表于 2018-6-26 15:44
命中率80%,666666666666

感谢大家支持~




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2