• 每日五问(java)


    一.Integer与int之间的区别
    (1)int类型可以直接定义一个变量名称赋值即可,Integer需要new关键字去创建对象。
    (2)基本类型和Integer类型混合使用时候,java会自动通过拆箱和装箱实现类型转化
    (3)Interger作为一个对象类型它内部封装了一些属性和方法我们可以利用这些方法去操作数据
    (4)Integer作为成员变量默认值为null,int默认值为0
    回答:Integer与int的区别有很多
    (1)作为成员变量来说Integer的默认值为null,int的默认值为0
    (2)Integer存储在堆内存,int类型是直接存储在栈空间
    (3)Integer是一个对象类型,它封装了很多的方法和属性,我们在使用时候更加灵活
    为什么要设计成封装类型我认为java本身就是一个面向对象的语言,一切操作都是以对象为基础的,比如说向集合里的存储的元素也只支持存储Object类型普通类型是无法通过集合来存储的。
    二.Mybatis是如何进行分页的
    (1)逻辑分页
    先查询出所有的数据缓存到内存里面再根据业务需要的一些需求从内存的数据里面筛选出合适的数据进行分页。
    (2)物理分页
    直接用数据库所支持的分页语法来实现比如Mysql提供的关键词limit
    1.在Mybaits Mapper 配制文件里面直接写分页SQl
    2.通过RowBounds实现逻辑分页(不适合数据量访问较大的场景)
    3.通过Interceptor拦截器实现,我们可以通过拦截需要分页的select语句里面去动态拼接分页的关键字从而去实现分页查询。

    回答:
    第一种是直接在Select语句上增加数据库提供的分页关键字,然后在应用程序里面传递当前页,以及每页展示的条数
    第二种使用Mybatis提供的RowBounds对象,实现内存级别的分页
    第三种基于MyBatis里面的Interceptor拦截器,在select语句执行前动态拼接分页关键字。
    三.Mybatis 中#{}和${}的区别是什么

    首先,Mybatis 提供到的#号占位符和 $ 号占位符,都是实现动态 SQL 的一种方式,通过这两种方式把参数传递到 XML 之后,在执行操作之前,Mybatis 会对这两种占位符进行动态解析。#号占位符,等同于 jdbc 里面的?号占位符。它相当于向 PreparedStatement 中的预处理语句中设置参数.
    而 PreparedStatement 中的 sql 语句是预编译的,SQL 语句中使用了占位符,规定了 sql 语句的结构。并且在设置参数的时候,如果有特殊字符,会自动进行转义。所以#号占位符可以防止 SQL 注入。
    所以 $ 和#最大的区别在于,前者是动态参数,后者是占位符,动态参数无法防止 SQL 注入的问题,所以在实际应用中,应该尽可能的使用#号占位符。另外,$符号的动态传参,可以适合应用在一些动态 SQL 场景中,比如动态传递表名、动态设置排序字段等。
    四Spring如何解决循环依赖
    如果在代码我本把两个或者多个Bean相互之间去持有对方的引用就会发生循环依赖循环依赖会导致注入发生死循环。
    第一种是两个bean相互依赖利于A依赖于B B依赖与A
    第二种是三种bean相互依赖A依赖B B依赖C C依赖A
    第三种子我依赖 也就是 A依赖A
    spring设计了三种缓存去解决这些问题Spring会从一级缓存中去找如果发现一级缓存没有找到,就去二级缓存找,如果一二级缓存都没有找到Spring就会去实例化这个Bean,而这个新初始化的Bean就会被认为是早期Bean放到二级缓存中,同时加入一个标记是表示它是否存在循环依赖,如果不存在就放到二级缓存 如果存在就标记它存在循环依赖然后等待下一次轮询的时候去复制也就是解析@Autowired注解等@Autowired复制完成后会将bean放入一级缓存
    Spring一级缓存存放所有成熟的Bean 二级缓存存放所有早期Bean先取一级缓存再取二级缓存 三级缓存是用来存储代理bean当调用getBean()方法的时候发现目标bean需要通过代理工厂去创建,这个时候会把创建好的实例保存三级缓存最终呢也会把复制好的Bean同步到一级缓存。
    有四种情况下的循环依赖无法被解决
    (1)多实例Bean通过setter注入的时候不能解决循环依赖问题,
    (2)构造器注入bean的情况下不能去解决
    (3)单例的代理Bean通过Setter注入的情况下不能解决循环依赖
    (4)设置的@DependsOn注解的Bean不能解循环依赖
    五.简述 java 垃圾回收机制?
    在 java 中,程序员是不需要显示的去释放一个对象的内存的,而是由虚拟机自行执行。在JVM 中,有一个垃圾回收线程,它是低优先级的,在正常情况下是不会执行的,只有在虚拟机空闲或者当前堆内存不足时,才会触发执行,扫面那些没有被任何引用的对象,并将它们添加到要回收的集合中,进行回收。

  • 相关阅读:
    不同规模的企业如何借助宁盾LDAP统一用户认证实现安全和效率需求?
    Android的权限管理系统工作原理详解
    SQL Serve---嵌套查询
    【虹科新品】 HK-MR430&330绝对式光纤编码器(上)
    Response响应数据 [JavaWeb][Servlet]
    wireshark流量分析
    Kotlin学习(一)
    C++ GDAL提取多时相遥感影像中像素随时间变化的数值数组
    插入排序算法
    Android MotionLayout
  • 原文地址:https://blog.csdn.net/Nicholas_giao/article/details/127649509