蔚来Java
一面
20分钟
Java运行时数据区?堆和栈有什么区别,为什么要这么设计?
②对于一个方法而言,其栈帧本身的大小是固定的(即在编译后便是确定的),但是一个方法中可能会动态申请很多内存(即很多内存的申请与释放是编译期无法确定的),因此需要去一个动态的内存块——堆里面申请。
③只要持有相应的引用/指针,不同的线程可以通过堆很方便地共享数据(这也是线程通信最常见的方式);而线程私有的栈则可以用于保存线程的状态(上下文),使得多线程切换执行后,线程能恢复到之前的状态。
Java线程有几种启动方式
MySQL有哪些索引?B+树相对B树的特点?B+树节点的子节点数是确定的么?
①有B+树、自适应哈希索引、倒排索引
②B+树的非叶子结点不存储数据,只存储索引,因此一个硬盘页中可以存放更多的索引结点,使得整个树的结构更加扁平,从而减少IO次数。而且B+树的叶子结点相互间串成链表,有助于实现范围查询。
③因为索引是以B+树节点的形式存储在硬盘的每个页中的,而硬盘的最小存储单位
页
的大小通常是固定的(约4KB),因此用页的大小除每个节点的大小,就可以得出每个节点的子节点数的近似值(对于非叶子结点,每个节点只存储了主键和一个存储了子节点指针的列表,因此大小是已知的,而叶子节点就很难确定了)算法
二面
40分钟
- 从输入一个域名到结果返回,都会经历哪些过程?
- Redis可以用来干什么?Redis为什么快?
- 既然提到了分布式主键,那除了Redis的incr还有什么方案?
- Java的几种垃圾收集算法
- 讲讲HashMap
- 讲讲MySQL的MVCC
- 算法