JAVA面试题(44)

原文链接: https://juejin.im/post/5d3c678be51d4510aa0115ff

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

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. 循环直到遇到空格,计数器自增

转载于:https://juejin.im/post/5d3c678be51d4510aa0115ff

你可能感兴趣的:(JAVA面试题(44))