慧择面试总结

一面(电话面):
主要问题:
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容器。

全部评论

相关推荐

我是产品经理,请攻击我最薄弱的地方,请各位开发大大知无不言
龙吟风歌:听说你还在搞什么原创,搞来搞去好像也就这样
点赞 评论 收藏
分享
2024-11-28 15:01
已编辑
三亚学院 前端工程师
在拧螺丝的西红柿很热情:学校放最前,一旦让看的人找了,找到了还不是比较好的学校,你就寄了,坦诚点放前面
点赞 评论 收藏
分享
断电再接线:1. 简历排版方面,你这内容比较少,一页放完。各模块之间建议用明显的分隔线分开,现在一眼看上去非常乱。教育经历留白太多。项目经历格式不统一。 2. 第一个项目,硬件设计太笼统,硬件架构规划是指板级电路设计还是FPGA逻辑设计?FPGA时序逻辑设计具体指的什么?实现的三个低速协议以及使用协议进行控制时序,是指什么? 3. 第二个项目,我觉得你可以和第一个项目整合一下,合并为一个项目。第二个项目说实话随便买个zynq开发板都有一直petalinux的教程,作为一个独立的项目不合适的,更像是一个小作业。 4. 第三个项目,项目内容这里,其实和环境搭建之类的东西提一嘴就好了,环境准备和编译安装工具链这种东西没多大必要写,实在要写的话可以 说 使用docker 独立sdk环境之类的。你说的这个工具我没用过,我用的比较多的是busybox和buildroot,是基于menuconfig进行配置的,如果scratch也是类似的模式的话,那我觉得这个项目也经不起细推。你可以往内核裁剪那方向靠,我说的这两个工具你也可以看看。 5. 你熟悉这些接口时序的话,你可以进一步去看一下驱动开发,然后面试的时候突出这个作为重点。第三个项目也可以将驱动开发给补充进去。因为单编内核和构建文件系统,其实很多时候是体力劳动。 6. 特长这里,独立成一个荣誉奖项的模块,把你获得的奖学金和竞赛奖项放一起。数模的话,写了国赛,美赛就不用写了。 7. 总的来说可以了,你简历上写的东西你只要都熟悉,找个实习还是没问题的。 8. 嵌入式分为硬件,底层软件和应用软件,看你的经历我建议你往底层靠,多去熟悉常用的通信接口,去看内核和驱动,网络编程这块也可以去了解一下。然后去**刷刷hot100
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客企业服务