乐趣区

JAVA面试题47

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

java

  1. java 对象引用类型以及对象回收的策略

    1. 强引用

      1. 通过显式的 new 或反射生成对象
      2. 不会被回收
    2. 软引用

      1. 在内存不足的时候会回收
    3. 弱引用

      1. 无论内存是否足够,GC 都会回收
    4. 虚引用

      1. 无论什么时候都会被回收
  2. java 注解的作用

    1. 文档生成
    2. 编译检查
    3. 标识功能
  3. 乐观锁与悲观锁的区别

    1. 数据的修改认为上

      1. 乐观锁认为数据不会被修改
      2. 悲观锁认为数据总被修改
    2. 锁的种类上

      1. 乐观锁对写操作不加锁
      2. 悲观锁在读写操作都加锁
    3. 执行方法上

      1. 乐观锁通过版本号以及 CAS 算法实现
      2. 悲观锁通过锁的等待与释放实现
    4. 执行效率上

      1. 乐观锁比悲观锁的效率高
    5. 数据正确性上

      1. 悲观锁比乐观锁的要好
    6. 使用场景

      1. 悲观锁用于写操作频繁的场景
      2. 乐观锁用于读操作频繁的场景
  4. CAS 与 synchronized 的使用场景

    1. CAS 不断自旋更新选定的值,用于读操作频繁的场景
    2. synchronized 通过锁的竞争以及释放进行互斥资源的访问,用于写操作频繁的场景

数据库

  1. 数据库 select 语句的执行流程(客户端到存储引擎)

    1. 客户端通过 TCP 三次握手与服务端进行连接
    2. 连接器判断账号信息是否有效
    3. 有效,则进入第三步
    4. 无效,连接器返回 Access denied 的错误
    5. 查询缓存中是否有执行的记录

      1. 不建议使用,可以通过 query_cache_type 关闭,MySQL 8.0 去除了查询缓存的功能
      2. 有执行记录,则返回上次执行结果
      3. 没有执行记录,进入第四步
    6. 分析器进行词法分析,语法分析

      1. 词法分析

        1. 判断输入的 SQL 语句中的关键词的含义
      2. 语法分析

        1. 判断 SQL 是否合法
        2. 若合法,进入第五步
        3. 若不合法,返回 You have an error in your SQL syntax 错误到客户端
    7. sql 语句经过优化器选择最佳执行策略

      1. 多索引情况下的最佳索引的选择
      2. 多表关联时决定表的连接顺序
    8. sql 语句交由执行器进行存储引擎的操作并返回结果

      1. 根据 from 找到需要查询的表,根据 where 形成有效的结果集合
      2. (如果有 order by,对数据进行排序)select 返回结果
  2. 数据库更新语句的执行流程(客户端到存储引擎)

    1. 客户端通过 TCP 三次握手与服务端进行连接
    2. 连接器判断账号信息是否有效

      1. 有效,则进入第三步
      2. 无效,连接器返回 Access denied 的错误
    3. 查询缓存中是否有执行的记录

      1. 不建议使用,可以通过 query_cache_type 关闭,MySQL 8.0 去除了查询缓存的功能
      2. 有执行记录,则返回上次执行结果
      3. 没有执行记录,进入第四步
    4. 分析器进行词法分析,语法分析

      1. 词法分析

        1. 判断输入的 SQL 语句中的关键词的含义
      2. 语法分析

        1. 判断 SQL 是否合法
        2. 若合法,进入第五步
        3. 若不合法,返回 You have an error in your SQL syntax 错误到客户端
    5. sql 语句经过优化器选择最佳执行策略
    6. sql 语句交由执行器进行存储引擎的操作并返回结果
    7. 两段式提交

      1. 检查并读入相关数据页到内存
      2. 将更新语句的操作行写入内存

        1. 写入操作记录到 readlog 中,处于 prepare 状态
        2. 写入操作记录到 binlog 中
        3. 事务提交,处于 commit 状态
  3. mysql 执行计划的了解

    1. 指定场景

      1. server 层中的分析器中
    2. 作用

      1. 得出最佳 sql 执行情况,加快访问速度以及减少资源的消耗
    3. 使用 explain+sql 语句进行计划的查看
    4. 相关概念

      1. type(连接的类型)
      2. possible_keys(可能使用到的索引)
      3. key(使用到的索引)
  4. Mysql 中 Text 与 Blob 的区别
  5. 存储数据表现形式
  6. Text 只能存储文本型数据
  7. Blob 存储二进制的大数据
  8. 大小写敏感
  9. Text 大小写不敏感
  10. Blob 大小写敏感
  11. 使用场景
  12. Text 存储大文本
  13. Blob 存储小文件型数据

计网

  1. TCP 滑动窗口的了解

    1. 滑动窗口是 TCP 发送进程控制数据发送的速度以及数据传输可靠性的重要保证
    2. 有关概念

      1. 从左到右是自定义指针 p1,p2,p3
      2. p1 左的数据都是已发送已收到确认的数据,p1 就是发送进程的发送窗口的左边界
      3. p3 右的数据当前时刻不允许发送的数据,p3 是发送进程发送窗口的右边界
      4. p2 在 p1 与 p3 之间

        1. p1 至 p2 的数据,是已发送未确认的数据。收到确认后,p1 进行右移;若出现丢失或者超时,重传 p1 与 p2 之间的数据
        2. p2 至 p3 是允许发送未发送的数据区间。
    3. TCP 的发送窗口根据服务器端回传的确认报文或者拥塞控制进行扩大或缩小。
  2. 对称加密与非对称加密的区别以及常见算法
  3. 区别
  4. 对称加密用同一密钥进行加密与解密
  5. 非对称加密用公钥进行加密,私钥进行解密
  6. 常见算法
  7. 对称加密

    1. DES

      1. AES
  8. 非对称加密

    1. DSA

      1. RSA

操作系统

  1. 用户态与内核态的区别

    1. 操作范围

      1. 用户态在内存中运行
      2. 内核态可以操作 IO,外设等
    2. 执行指令

      1. 用户态只能执行非特权指令
      2. 内核态可以执行特权指令
    3. 抢夺处理机

      1. 用户态可以抢占处理机
      2. 内核态不可以抢占处理机
  2. 磁盘调度算法

    1. 先来先服务
    2. 最短距离优先
    3. 扫描算法
    4. 循环扫描算法

算法

  1. 学生出勤记录 I

    [
    ](https://leetcode-cn.com/probl…

退出移动版