JAVA面试题44

41次阅读

共计 1805 个字符,预计需要花费 5 分钟才能阅读完成。

    本文首发于 cartoon 的博客
     转载请注明出处:https://cartoonyu.github.io/c…

java 基础

  1. Iterator 与 ListIterator 的区别

    1. Iterator 与 ListIterator 都是 Collection 的迭代器实现,ListIterator 继承于 Iterator
    2. 遍历集合分类

      1. Iterator 可以遍历 Set,List,Queue 的实现类
      2. ListIterator 只能遍历 List 接口下的实现类
    3. 修改被迭代集合

      1. Iterator 不能对元素进行修改或者添加元素
      2. ListIterator 可以在迭代中修改添加元素
    4. 删除元素

      1. 两个都可以在迭代过程中删除元素
    5. 遍历方式

      1. Iterator 只能向下遍历
      2. ListIterator 可以向前向后遍历,同时可以获取当前迭代元素的索引
  2. synchronized 和 ReentrantLock 的区别

    1. 共同点

      1. 都是协调线程间访问互斥资源
      2. 可重入,同一线程可以多次获得同一锁
      3. 都保证了可见性和互斥性
    2. 不同点

      1. 获取锁的方式

        1. ReentrantLock 需要显式获取锁
        2. synchronized 隐式获取锁
      2. 灵活性

        1. ReentrantLock 可以响应中断,可以切换锁的公平性
        2. synchronized 不可以响应中断,锁的获取只能依靠系统调度
      3. 存在位置

        1. ReentrantLock 是 API 级别
        2. synchronized 是 JVM 级别
      4. 底层实现

        1. synchronized 是同步阻塞式的,采用悲观并发策略
        2. ReentrantLock 时同步非阻塞式的,采用乐观并发策略
  3. hasCode,equals 的了解

    1. hasCode 方法是 JVM 计算对象的哈希码的方法,计算结果会放在对象头的哈希码字段中
    2. equals 是常用的对象对比方法
    3. 重写 equals,需要重写 hashCode
    4. equals 返回 true,hashCode 也返回相等的整数
    5. equasl 返回 false,hasCode 返回不一定相等
    6. hashCode 相等,equals 对比不一定相等
    7. hashCode 不相等,equals 返回 false

JVM

  1. java 对象在 jvm 的组成

    1. 对象头

      1. 自身运行数据

        1. 哈希码
        2. GC 分代年龄
        3. 锁状态标志
        4. 线程锁
        5. 偏向线程 ID
        6. 偏向时间戳
      2. 类型指针

        1. 对象指向元数据的指针
    2. 实例数据
    3. 对齐字节
  2. 双亲委派模型的概念

    1. 双亲委派模型发生在类加载的过程中
    2. 当前类不直接负责加载,将类依次递归交给父加载器进行加载
    3. 若父加载器都不能加载,则当前类负责加载
  3. 如果我不想用这个双亲加载模型,怎么操作

    1. 自定义类加载器,重载 loadClass 方法

数据库

  1. 延迟加载是什么?Mybatis 是否支持延迟加载?

    1. 延迟加载

      1. 符合查询条件的结果只加载满足要求的部分
      2. 若信息需要更详细则再查询从关联表
    2. 延迟加载配置

      1. 查询语句中开启 fetchType
      2. 全局配置文件中
      3. 开启 lazyLoadingEnabled(开启全局延迟加载)
      4. 关闭 aggressiveLazyLoading
      5. 开启 lazyLoadTriggerMethods
  2. select 语句是怎么执行的

    1. 连接器

      1. 客户端通过账户密码进入到 mysql 服务器层中
    2. 查询缓存

      1. 查询时候执行过此条 select 语句

        1. 若执行过,直接返回缓存结果
        2. 若未执行过,进入第三步
    3. 分析器

      1. 词法分析
      2. 语法分析
    4. 优化器

      1. 通过选择索引实现查询速度的优化
    5. 执行器

      1. 操作引擎,进行查询操作并返回结果

Spring

  1. spring 的作用域

    1. singleton(多用于无状态)
    2. prototype(多用于有状态)
    3. session
    4. request
    5. global session
  2. spring 的 bean 线程安全吗

    1. prototype 以及 request 再每次被调用会产生新对象,所以是线程安全的
    2. 无状态的 singleton 线程安全,有状态的 singleton 线程不安全
    3. session 以及 global session 会造成线程竞争

设计模式

  1. 装饰者模式的原理实现以及 java 中使用场景

    1. 原理以及实现

      1. 装饰者与被装饰者有一致的行为流程
      2. 定义一个接口,接口方法为一致的行为流程
      3. 装饰者与被装饰者实现同一个接口,并重写方法实现自身逻辑
      4. 当需要装饰时,传入被装饰者到装饰者的实现逻辑中,并返回装饰者的对象
    2. 使用场景

      1. java 的 IO 相关类

算法

  1. 字符串统计最后一个单词的长度(leetcode58)

    1. 题目

      1. 给定一个仅包含大小写字母和空格 ' ' 的字符串,返回其最后一个单词的长度。

        如果不存在最后一个单词,请返回 0。

      2. 样例

        1. 输入:”Hello World”
        2. 输出:5
    2. 解法

      1. 倒序遍历去除字符串最后的所有空格
      2. 定义计数器缓存长度
      3. 循环直到遇到空格,计数器自增
正文完
 0