JAVA面试题(48)

177 阅读4分钟

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

数据结构

  1. B+树的特点
    1. B+树所有数据都在叶子结点,非叶子结点只存储数据的索引
    2. 叶子结点间形成链表,范围查询相对于B树减少了检索的次数
    3. 所有非叶子结点都同时存在与子节点,都是子节点的端口元素
  2. 跳表的了解
    1. 采用以空间换时间的思路实现查询速度的提高
    2. 应用在Redis的有序集合上
    3. 操作
      1. 查询
        1. 应用多级索引进行值的比对以及层数的下沉,进而减少了遍历节点的次数
      2. 插入
        1. 抛硬币得出插入元素插入索引的层数
        2. 将插入元素按顺序插入到最底层的链表中
      3. 删除元素
        1. 删除各层包括删除元素的结点
    4. 时间复杂度
      1. O(log n)

数据库

  1. Mysql索引的了解
    1. 目的
      1. 为了加快等值查询以及范围查询的速度
    2. 分类
      1. 主键索引
      2. 普通索引
      3. 唯一索引
      4. 全文索引
      5. 多列索引
      6. 组合索引
    3. 实现
      1. B+树
      2. B树
      3. Hash树
  2. Mysql查询条件带索引的查询语句的执行流程
    1. MySQL5.6之前
      1. 最左前缀查找符合条件的第一个索引列值
      2. 回表到主键索引树查找符合条件的结果集合
    2. MySQL5.6之后
      1. 最左前缀查找符合条件的第一个索引列值
      2. 索引下推查找符合条件的下一索引值
      3. 回表到主键索引树查找符合条件的结果集合

网络

  1. 混合加密的原理以及使用场景
    1. 使用非对称加密利用随机数产生的公钥
    2. 公钥传输完成并解密后传输的双方采用对称加密的方式传输数据
    3. 解决问题
      1. 对称加密中公钥的传输问题
      2. 减少传输中使用非对称加密中加解密的时间

java

  1. 静态代理与动态代理的区别

    1. 静态代理与动态代理都是代理模式的一种实现
    2. 区别
      1. 确立对象方面
        1. 静态代理在编译时已经确立好代理对象的类型
        2. 动态代理在运行时采用反射机制动态创建对象
      2. 特点
        1. 静态代理编码相对简单,而且实际运行速度会比动态代理快
        2. 动态代码可以有效解决多对象代理编码重复性的问题

Spring

  1. AOP的概念了解
    1. AOP是Spring Framework的一个重要模块,基于Core模块进行实现
    2. AOP缓解了原来OOP编程的不同功能之间的代码耦合问题,将原来顺序化执行的程序看作一个个切面
    3. 底层实现
      1. 在字节码层面上进行代理的实现
      2. 使用JDK动态代理或者cglib代理
        1. JDK动态代理中代理类必须实现接口
        2. cglib代理不需要接口,更灵活
  2. Spring MVC的运行流程
    1. Spring MVC组件
      1. 视图解析组件
        1. ThemeResolver
        2. LocaleResolver
        3. ViewResolver
      2. 处理类组件
        1. HandlerAdapter
        2. HandlerExceptionResolver
        3. RequestToViewNameResolver
        4. MuitipartResolver
      3. 管理类
        1. HandlerMapping
        2. FlashResolver
    2. 步骤
      1. 请求到达DispatchServlet
      2. DispatchServlet调用HandlerMapping查找处理的Controller
        1. 若查找的url修饰的方法不符合Spring的要求,则调用HandlerAdapter进行请求的转换
        2. 若分发过程出错,调用HandlerExceptionResolver进行异常处理
      3. Controller调用Service进行业务逻辑的处理,Service返回结果,Controller利用RequestToViewNameResolver进行结果的包装,并返回ModelAndView对象到DispatchServlet
      4. DispatchServlet分发ModelAndView到视图渲染器
      5. 视图渲染器根据ModelAndView调用ViewResolver进行视图的渲染以及数据的填充
        1. 若请求带有对国际化的处理,调用LocaleResolver进行渲染
        2. 若请求带有不同主题的切换,调用ThemeResolver进行渲染
      6. 视图渲染返回页面到DispatchServlet,DispatchServlet返回页面到请求方

操作系统

  1. I/O的控制方式
  2. 程序直接控制
  3. 中断控制
  4. 直接内存存取方式
  5. 通道控制方式

设计模式

  1. 单例模式的四种实现
  2. 饿汉式
  3. 类加载时已经初始化对象
  4. 懒汉式
  5. 调用newInstance方法时初始化对象
  6. DCL式
  7. 双重加锁检查对象
  8. 静态内部类

算法

  1. 530. 二叉搜索树的最小绝对差