一面

(一面没有自我介绍环节)

先来说说你的项目吧
"介绍项目要有条理, 不然很难体现出你对于项目的把控"

  • 项目里遇到的问题, 遇到的比较棘手的问题是什么, 是怎么解决的?
  • 你是怎么保证多部门配合项目的正常运转的?

我看你用到了Redis, 讲讲你用到的场景, 用到了哪些数据格式, 有没有用到string以外的数据结构? 其他数据结构有什么优缺点吗, 是怎么实现的

Redis数据结构

Redis单个对象由: 类型、编码、底层结构指针 构成.

  • string
  • hash
    1. 可以是zipList或hashTable
    2. 字符串元素的长度都小于64bytes && list.size() < 512 ? zipList : hashTable
  • set
    1. 可以是intset或hashTable
    2. 字符串元素的长度是整数值 && list.size() < 512 ? zipList : hashTable
  • zset
    1. 可以是zipList或skipList
    2. 字符串元素的长度是整数值 && list.size() < 128 ? zipList : skipList
  • list
    1. 可以是zipList或者linkedList
    2. 字符串元素的长度都小于64bytes && list.size() < 512 ? zipList : linkedList

你用的RabbitMq, 有了解过其他的消息队列吗, 他们的区别是什么

  • 还了解过RocketMq, KafKa仅调研过但是没有投入使用.

RocketMq

  • NameServer + Broker 的模式运作, NameServer 作为注册中心, 所有Broker要定时给NameServer同步存活状态.
  • Producer —Msg—> Broker —Msg—> Consumer

RabbitMq

  • Exchange + Binding/Routing Key 模式运作, Exchange作为交换机根据路由规则把消息转发到对应的队列上.

对比

  • RabbitMq使用场景更适合中小型项目的数据处理, RocketMq本身是拥有百万级数据处理能力的.
  • RabbitMq存在可视化操作页面, 整体比较完善, 而且RocketMq考虑到维护的问题, 如果项目本身消息队列不是核心要素, 不推荐使用RocketMq(万一人家哪天不维护了怎么办).
  • 大型项目的时候, 如果有单人维护, 且业务场景比较多, 对数据可靠性要求比较高的时候考虑使用RocketMq.
  • kafka适用于更大的分布式应用, 比如说单个日志节点部署了2000个容器进行消息处理.

多线程,在项目里是怎么用的

小猪本人在项目里对于多线程的应用通常有两种:

  1. 系统Java化、拆分、新业务上线时的数据迁移 & 基础数据导入, 通过多线程来提升导入速率;
  2. 系统间RPC请求时, 需要请求多个没有业务关联的接口时, 可以先并行再串行组装, 减少远程调用其他服务的时间.

运用多线程的时候有遇到过什么问题吗

  1. 导入数据时的数据区间选定不能重复(其实就算重复了也有导入的幂等性进行保证, 但是从程序的合理性上我们要进行考虑);
  2. 导入数据 / 获取其他多个方向服务的数据时候, 如果出现了单个线程失败的情况要怎么进行处理.

多线程参数你是怎么考虑的

  • 线上单节点机器标配为4核, 所以设置为4*2=8个核心线程数,最大线程数设置为核心线程数的二倍8*2=16个. 整体原则遵循: 线程的平均完成任务耗时时长和线程数成反比.

  • 队列选用有界队列, 如果出现队列超界的情况, 就抛出异常, 跟进脚本执行的人需要查看为什么会这样 📃 (不同队列的区别和选用) To Be Continued…

  • 空闲时间、空闲时间单位视具体场景而定, 等待时间要看平均响应时间

  • 线程工厂 📃To Be Continued…

  • 拒绝策略 📃To Be Continued…

除了用于数据的组装, 数据的持久化, 有没有考虑过用其他的角度来解决多线程先并行再串行的场景

了解过其他的本地缓存吗, Caffeine在使用的时候有什么问题吗, 为什么用Caffine?

写一个算法吧, 去掉链表中的重复数字, 要保证链表的有序, 先说说你的看法, 再写;

HashMap 能保证有序吗? 应该用什么?

  • 不能, LinkedHashMap

二面

简单进行一下自我介绍

个人基本信息介绍 -> 工作履历介绍 -> 当前工作岗位职责介绍 -> 主要负责项目介绍 (视情况而定)

聚簇索引和非聚簇索引有了解吗

聚簇索引

非聚簇索引

数据库有那些系统日志? & 不同数据库系统日志的作用? & 模拟执行一个INSERT语句, 执行顺序是怎样的, 会生成哪些日志?

详述一下Redis里面的跳表?

  • 如何快速找到跳表的某一个元素?
  • 跳表如何排序?
  • 插入元素到跳表里面的时候发生了什么?
  • 跳表是如何进行遍历的?

To Be Continued….