首页 > 编程语言 >Java面试题(一)

Java面试题(一)

时间:2022-10-30 22:00:56浏览次数:53  
标签:面试题 Java 对象 spring 事务 bean mybatis 注解

1、什么是自动装配,有哪些方式

  spring会自动中上下文中寻找并给bean装配与其相关的属性
  自动装配方式
    1、byName:把与bean的属性具有相同名字的其他bean自动装配到bean的对应属性中
    2、byType:把与bean的属性具有相同类型的其他bean自动装配到bean的对应属性中(若有多个, 则抛出异常)
    3、contratc(构造器):把与bean的构造器入参具有相同类型的其他bean自动装配到bean的构造器的对应入参中(查找时通过bean的类型来确定)
    4、autodetect:先尝试使用contructor进行自动装配,如果失败再尝试使用byType(不推荐使用)
    5、no(默认):不进行自动装配,通过显式设置ref属性来进行装配
2、对象创建的过程

  1、类加载检查:检查能否再常量池中定位到这个类的符号引用,并检查是否被加载、解析和初始化,如果没有,先执行类加载过程

  2、分配内存:为创建出来的对象分配内存,内存大小在类加载完成后便可确定。分配内存的方式有两种:

    1)指针碰撞:内存连续,已分配的和未分配的内存使用指针分割,每次将指针移动一个对象占用的大小
    2)空闲列表:内存不连续,用集合存储所有可用内存碎片的地址,每次给对象分配内存时,找一个足够大小的内存碎片来存储
  3、初始化:为对象的成员变量和静态变量赋初始值
  4、设置对象头:对象分为对象头、对象数据、对齐填充。对象头包括mark word(锁信息、gc分代年龄、hashcode)、class point(类元信息的指针)
  5、执行init方法:为对象的变量赋真正的值

3、DCL(双重检查锁)单例模式需不需要volatile

  需要。防止因为指令重排序而获取到未初始化完成的对象
4、对象在内存中的布局(对象与数组的不同)

  对象:对象头(mark word、class point)、对象数据、对齐填充
  数组:对象头(mark word、class point、数组长度)、数据、对齐填充

5、对象头包括什么

     mark word(锁信息、gc分代年龄、hashcode值)、class point(类元信息指针)、(数组还包含数组长度)
6、对象怎么定位

  句柄访问、直接指针访问
7、对象怎么分配

  1、尝试分配到栈中(对象无逃逸),分配到栈中的对象无需GC,随方法结束而销毁
  2、无法分配到栈中,如果对象过大,直接分配到堆中的Old区
  3、小对象,线程私有本地分配(TLAB)
  4、TLAB失败,分配到Young区中的Eden区
  5、经过Survivor区的翻转,最后进入Old区

8、一个Object占多少字节

  16
9、class实例在方法区还是堆中

  在堆中

10、BeanFactory和ApplicationContext的区别

  相同:都可以做为Spring的容器,ApplicationContext是BeanFactory的子接口
  不同:
    1、BeanFactory是延迟加载,ApplicationContext容器启动时就会创建所有bean
    2、ApplicationContext提供在监听器中注册bean的事件
    3、ApplicationContext支持国际化
    4、对于BeanPostProcessor、BeanFactoryPostProcessor,ApplicationContext是自动注册,BeanFactory是手动注册

11、mybatis插件运行原理和开发流程 

  mybatis四大组件:Executor、StatementHandler、ParameterHandler、ResultSetHandler
  mybatis框架对四大组件提供了简单易用的扩展机制,支持使用插件对四大核心组件进行拦截。本质上借助底层的动态代理。
  原理:
    1)每个创建出来的对象不是直接返回的,而是interceptorChain.pluginAll()
    2)获得所有的Interceptor,调用interceptor.plugin()返回target封装后的对象
    3)使用插件为目标对象创建代理对象,AOP四大核心组件,然后拦截对象的每一次执行
  开发插件:使用@Intercepts注解

12、mybatis的优缺点

  优点:
    1)简单易学
    2)与jdbc相比,减少了大量冗余代码
    3)sql与代码分离,降低耦合度
    4)可手写sql,较灵活
    5)可编写动态sql
    6)通过映射标签,支持对象与数据库字段的ORM映射
  缺点:
    1)sql编写工作量大
    2)sql语句依赖数据库,数据库移植性差

13、mybatis和hibernate的区别

  1)mybatis易上手
  2)mybatis是半自动orm框架,hibernate是全自动orm框架
  3)mybatis sql写着xml文件中,较灵活,方便优化
  4)hibernate有更完善的缓存和日志机制
  5)hibernate数据库移植性好,mybatis较差

14、mybatis中${}和#{}的区别

  ${}是字符串拼接(statement),会引起sql注入,#{}是占位符(prepareStatement)
15、spring、springMVC、springboot的区别 

  spring是一个容器,整合各种框架。
  springMVC是spring下的专注于web层的框架。
  springboot是spring的快速开发包,可简化配置,快速整合其他框架的脚手架

16、springboot自动装配的原理

  从@SpringBootApplication注解看起,它由多个注解组成,主要注解包括三个@SpringBootConfiguration、@ComponentScan和@EnableAutoConfiguration
@SpringBootConfiguration注解同样由多个注解组合而成,主要注解为@Configuration,声明此为配置类。
@ComponentScan注解为组件扫描注解,扫描启动类的同级路径及子路径的组件。
@EnableAutoConfiguration注解同样是组合注解,主要包括@AutoConfigurationPackage和@Import两个注解,进入@AutoConfigurationPackage注解,发现导入了一个注册类AutoConfigurationPackages.Registrar.class,将启动类所在包及子包下的所有组件扫描到Spring容器中。回到@EnableAutoConfiguration并进入@Import(AutoConfigurationImportSelector.class),AutoConfigurationImportSelector.class实现了ImportSelector接口并重写了selectImports方法,查找META-INF/spring.factorie文件,并根据文件中的路径加载对应的配置类

17、springMVC的工作流程

  1、用户发起请求到前端控制器(DispatcherServlet)
  2、前端控制器请求处理器映射器(HandlerMapping)返回执行链
  3、将执行链发送给处理器适配器(HandlerAdaptor)
  4、交由处理器(Handler)执行后返回ModelAndView对象
  5、通过视图解析器(ViewResolver)解析后返回View
  6、渲染视图
  7、返回给用户 

18、spring事务的传播方式

  REQUIRED:有事务加入这个事务,没有事务创建新的事务
  REQUIRED_NEW:创建新的事务,当前存在事务则将事务挂起
  SUPPORTS:使用当前事务,无事务则不使用事务
  NOT_SUPPORTS:不使用事务,当前存在事务则挂起
  MANDATORY:使用当前事务,不存在则抛异常
  NEVER:不使用事务,有事务则抛出异常
  NESTED:当前存在事务,则嵌套事务,不存在则创建新的事务

19、spring核心

  AOP:面向切面编程的思想,减少重复代码,降低耦合性,提高维护性。
  IOC:控制翻转,将对象交由spring容器创建
  DI:依赖注入,创建对象时自动设置所需要的值

20、springMVC的九大内置组件

  HandlerMapping:处理器映射器
  HandlerAdapter:处理器适配器
  HandlerExceptionResolver:异常处理器
  ViewResolver:视图解析器
  LocaleResolver:当前环境处理器(国际化)
  ThemeResolver:主题处理器
  RequestToViewNameTranslator:视图名称翻译器
  MultipartResolver:文件处理器
  FlashMapManager:参数传递处理器(重定向中传递参数)

21、spring单例bean是否线程安全

  spring框架并没有对bean进行多线程的封装处理,如果单例bean是无状态的,则不存在线程安全问题,如果是有状态的,则是线程不安全的。

标签:面试题,Java,对象,spring,事务,bean,mybatis,注解
From: https://www.cnblogs.com/heavenplus/p/16841840.html

相关文章

  • ES6与JavaScript学习总结
    菜鸟的ES6与JavaScript学习总结说明一、概述(1)什么是javascript?(2)什么是ES6(3)ES6和JavaScript的关系(4)ES6的浏览器兼容情况二、语法(1)变量(2)箭头函数(3)解构赋值(4)数组操作(5)字符串......
  • java 获取远程PDF文件并批量下载
    packagepdf;importcn.hutool.core.date.DateUtil;importcn.hutool.core.io.IoUtil;importcn.hutool.core.util.CharsetUtil;importlombok.extern.slf4j.Slf4j;......
  • JavaWeb之连接数据库操作
    亲爱的学弟学妹,我知道你们是因为什么搜到这篇博客的,我也很懂你们现在的心情,此时此刻举目无亲面对着建民老师的高要求,你们或许十分无助,所以我写下这篇博客,因为我淋过雨所以......
  • 学习记录23java拼图小游戏
    拼图目标GUI(GraphicalUserInterface,图形用户接口)这是指采用图形化的方式显示操作界面,几乎所有的语言都有GUI的知识java中有两套完整的体系:AWT包(出现的比较早,可能......
  • Java线程实现/创建方式
    Java线程实现/创建方式继承Thread类:Thread类本质上是实现了Runnable接口的一个实例,代表一个线程的实例。启动线程的唯一方法就是通过Thread类的start()实例方法。st......
  • 【面试题】 为什么说 bind 的实现非常考验对原型链的理解?
    前言bind的实现其实非常考验对原型链的理解。bind和apply,call是JS修改this指向的三把利器......
  • 【笔记09】Javascript - 函数 - 闭包
    【笔记09】Javascript-基本概念-(闭包)内部函数被return 到外部。functiona(){functionb(){varbbb=234;console.log(aaa);}varaaa=......
  • Java JMS
    JMS​​JSR343:JavaTMMessageService2.0​​​MOM系列文章之-JMS2spec.解读​​JMS2.0的新变化​​MOM系列文章之-FinalConsistency讨论​​SunJavaSystem......
  • Javaweb基础知识复习------AJAX
    AJAX相关知识复习简而言之,就是可以用AJAX+HTML代替JSP页面,也可以进行异步交互,更关心部分界面Ajax案例后端代码就是一个servlet文件,前端页面的代码也不是很常用,可以在下......
  • JavaScript是什么?
    从头认识JavaScriptJavaScript简称‘JS’,是一款用来在网页中添加一些动态效果与交互功能的客户端语言,虽然如今看来这是前端工程师的必修课,但其实这在前后端还没有分离的......