慧择面试总结
一面(电话面):
主要问题:
1、session和cookie的区别:
(1)cookie是保存在客户端,session是保存在服务端的。
(2)cookie存放在本地,不安全。
(3)单个cookie的数据不能超过4K,很多浏览器一个站点最多保存50个cookie。
2、JAVA的反射机制:
反射是指在程序的运行状态中,可以构造任意一个类的对象,可以了解任意一个对象所属的类,可以了解任意一个类的成员变量和方法,可以调用任意一个对象的属性和方法。这种动态获取程序信息以及动态调用对象的功能称为Java语言的反射机制。
3、JAVA的强引用、软引用、弱引用、虚引用:
Java中提供这四种引用类型主要有两个目的:第一是可以让程序员通过代码的方式决定某些对象的生命周期;第二是有利于JVM进行垃圾回收。
强引用:我们使用的大部分引用实际上都是强引用,这是使用最普遍的引用。如果一个对象具有强引用,当内存空间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不回收这种对象。
软引用:用来描述一些有用但并不是必需的对象。对于软引用关联着的对象,只有在内存不足的时候JVM才会回收该对象。这个特性很适合用来实现缓存:比如网页缓存、图片缓存等。
弱引用:弱引用也是用来描述非必需对象的,当JVM进行垃圾回收时,无论内存是否充足,都会回收被弱引用关联的对象。弱引用与软引用的区别在于:只具有弱引用的对象拥有更短暂的生命周期。
虚引用:并不影响对象的生命周期。如果一个对象与虚引用关联,则跟没有引用与之关联一样,在任何时候都可能被垃圾回收器回收。虚引用主要用来跟踪对象被垃圾回收的活动。
4、HTTP的格式:
请求格式:
请求方法URI协议/版本
请求头(Request Header)
请求正文
相应格式:
协议/版本 状态码 描述
响应头(Response Header)
响应正文
5、Spring IOC: 控制反转。
由IoC容器帮对象找相应的依赖对象并注入,而不是由对象主动去找。平时的java应用开发中,我们要实现某一个功能或者说是完成某个业务逻辑时至少需要两个或以上的对象来协作完成,在没有使用Spring的时候,每个对象在需要使用他的合作对象时,自己均要使用像new object() 这样的语法来将合作对象创建出来,这个合作对象是由自己主动创建出来的,创建合作对象的主动权在自己手上,自己需要哪个合作对象,就主动去创建,创建合作对象的主动权和创建时机是由自己把控的,而这样就会使得对象间的耦合度高了,A对象需要使用合作对象B来共同完成一件事,A要使用B,那么A就对B产生了依赖,也就是A和B之间存在一种耦合关系,并且是紧密耦合在一起,而使用了Spring之后就不一样了,创建合作对象B的工作是由Spring来做的,Spring创建好B对象,然后存储到一个容器里面,当A对象需要使用B对象时,Spring就从存放对象的那个容器里面取出A要使用的那个B对象,然后交给A对象使用,至于Spring是如何创建那个对象,以及什么时候创建好对象的,A对象不需要关心这些细节问题(你是什么时候生的,怎么生出来的我可不关心,能帮我干活就行),A得到Spring给我们的对象之后,两个人一起协作完成要完成的工作即可。
所以控制反转IoC(Inversion of Control)是说创建对象的控制权进行转移,以前创建对象的主动权和创建时机是由自己把控的,而现在这种权力转移到第三方,比如转移交给了IoC容器,它就是一个专门用来创建对象的工厂,你要什么对象,它就给你什么对象,有了 IoC容器,依赖关系就变了,原先的依赖关系就没了,它们都依赖IoC容器了,通过IoC容器来建立它们之间的关系。这是我对Spring的IoC(控制反转)的理解。DI(依赖注入)其实就是IOC的另外一种说法。
6、Spring AOP: 动态代理。
在每次运行时生成AOP动态代理对象。AOP不会去修改字节码,而是在内存中临时为方法生成一个AOP对象。这个AOP对象包含了目标对象的全部防范,并在特定的切点做了增强处理,回调原对象。
SPRING AOP有两种动态代理方式,JDK和CGLIB。
JDK动态代理通过反射来接收被代理的类,并要求代理的类必须实现一个接口。CGLIB是一个代码生成的类库,可以在运行时动态的生成某个类的子类,通过继承的方式做动态代理,若是final类,则不能被CGLIB代理。
7.jpa实现分页的查询方式:
ExampleMatcher和Specification。
8.项目相关。
2面(现场面):
主要是项目相关。
其余问题:
1、怎么理解java中的序列化和字节码?
把对象转换为字节序列的过程称为对象的序列化。
把字节序列恢复为对象的过程称为对象的反序列化。
对象的序列化主要有两种用途:
1) 把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中;
2) 在网络上传送对象的字节序列。
2、springboot中starter的工作流程?
1) Springboot在启动时扫描项目所依赖的jar包。
2) 寻找包含spring.factories配置加载AutoConfiguration类。
3) 根据@conditional注解的条件,进行自动配置并将Bean注入到spring容器。