虾皮 | Data-infra Foundation | 二面已过
面经
自我介绍
一些课程安排(主要是听到我学校的课程里没有计网, 这估计也是没有问我计网的主要原因)
操作系统
内核态和用户态
- 从概念扯到了在Linux中的实现, 内核态本质上是内核空间和权限的集合, 说了下进入到内核态怎么发生的用户栈切换到内核栈
哪些操作是内核态的操作
- 中断, 异常, I/O等
用户进程怎么进入到内核态
- 用户进程主动发起的系统调用, 以及中断(缺页中断), 异常
系统调用和普通函数之间的区别
- 普通函数是用户创建存在elf文件的text区域里面, 系统调用是写入系统内核源码的, 通过make来完整编译出来
- 执行普通函数在用户的栈区里, 执行系统调用在这个进程的内核栈里
执行上, 普通函数和系统调用之间区别
- 系统调用会走内核栈, 申请内存也是通过伙伴系统分配物理内存, 通过slab内存管理器来分配内核对象
Linux查看和CPU相关的参数, 使用什么命令查看
- Top查看动态的排行
- ps获取快照
- perf查看某个进程的调用栈中每个函数的CPU占用比例
怎么看一个系统在内核态占用的CPU的使用率
- 当时忘记了, 和面试官说了下不记得了, 只记得怎么看内核对象的内存占用率了(slabtop), 实际上是pidstat
CPU的IO_WAIT数量是怎么统计出来的
- 大概说了IO_WAIT指的是因为IO操作被阻塞了
IO_WAIT状态的时候, CPU是忙碌的吗
- 现代IO设备里面都有DMA设施, 搬运数据的操作是交给DMA来做的, 不会阻塞CPU
什么是零拷贝
- 只有一次系统调用, 并且开启了某个内核参数以后, 能实现在内核空间不会有冗余拷贝
- 在用户态是通过mmap直接将内核缓冲区映射到用户的虚拟地址空间上的
什么是虚拟内存
- 提供完全隔离的运行地址空间, 屏蔽了操作物理内存的问题
- swap机制(也会导致程序抖动)
- 内核里一段虚拟内存对应一个vma
- 通过mm_struct管理vma
什么时候开始分配物理内存
- 触发缺页中断的时候会从伙伴系统里分配对应数量的页出来
数据库
什么是聚簇索引
- 从聚簇到非聚簇, 再到非聚簇存在回表
聚簇索引B+树的非叶子节点存储的是什么
- 我说的索引, 但是面试官想让我回答的是id, 两个人因为这个问题都笑出来了
主键是什么字段
- 64位的int, 为什么是64位的int. 不使用32位
- 32位太小了, 现在单张表很容易超
主键一般有什么修饰
- prime key
- Unique
- Autoincreament
为什么是单增的
- 能避免B+树出现页分裂
什么是联合索引
- 形式到最左前缀匹配规则到常见的用途, 索引下推和索引覆盖优化查询
MySQL的一个查询最多可以用几个索引
- 是一个trick向的问题(笑哭), 就是一个非主键索引加上回表的时候的主键索引, 两个索引, 也是说完两个人都笑了下
Java线程的状态
- CREATE, INTERRUPTABLE, BLOCK, RUNNING, STOP, TERMINATED
INTERRUPTABLE和BLOCK之间的区别
- 说了下什么时候会分别出来这两种状态, BLOCK说了IO阻塞, 让我下去重新看下
项目
我自己说项目
问为什么使用的rabbitmq
- 我回答的是调研的结果是这个mq最简单易用, 但是被问到的为什么别的更复杂, 回答的只有简单的了解
rabbitmq是保序的吗
- 我说的是, 然后扯了些可靠性保证的一些内容
rabbitmq是怎么做高可用的
- 我回答的是不清楚, 但是为了避免mq成为单点问题, 是肯定有成熟的解决方案的, 不是很难的问题, 能很容易搜到解决方案
场景题目
超大文件排序
- 两个人交流着写完了, 中间给了我一些提示
算法
原地操作的合并数组(第一个数组大小是m+n)
反问
对我的评价
我的优缺点
(没问业务是上一个面试官那问得挺清楚的)
面试总结
总体上看发挥还好, 就是Java上有点薄弱, 对于技术选型的考量上也太简单了.
自我介绍
一些课程安排(主要是听到我学校的课程里没有计网, 这估计也是没有问我计网的主要原因)
操作系统
内核态和用户态
- 从概念扯到了在Linux中的实现, 内核态本质上是内核空间和权限的集合, 说了下进入到内核态怎么发生的用户栈切换到内核栈
哪些操作是内核态的操作
- 中断, 异常, I/O等
用户进程怎么进入到内核态
- 用户进程主动发起的系统调用, 以及中断(缺页中断), 异常
系统调用和普通函数之间的区别
- 普通函数是用户创建存在elf文件的text区域里面, 系统调用是写入系统内核源码的, 通过make来完整编译出来
- 执行普通函数在用户的栈区里, 执行系统调用在这个进程的内核栈里
执行上, 普通函数和系统调用之间区别
- 系统调用会走内核栈, 申请内存也是通过伙伴系统分配物理内存, 通过slab内存管理器来分配内核对象
Linux查看和CPU相关的参数, 使用什么命令查看
- Top查看动态的排行
- ps获取快照
- perf查看某个进程的调用栈中每个函数的CPU占用比例
怎么看一个系统在内核态占用的CPU的使用率
- 当时忘记了, 和面试官说了下不记得了, 只记得怎么看内核对象的内存占用率了(slabtop), 实际上是pidstat
CPU的IO_WAIT数量是怎么统计出来的
- 大概说了IO_WAIT指的是因为IO操作被阻塞了
IO_WAIT状态的时候, CPU是忙碌的吗
- 现代IO设备里面都有DMA设施, 搬运数据的操作是交给DMA来做的, 不会阻塞CPU
什么是零拷贝
- 只有一次系统调用, 并且开启了某个内核参数以后, 能实现在内核空间不会有冗余拷贝
- 在用户态是通过mmap直接将内核缓冲区映射到用户的虚拟地址空间上的
什么是虚拟内存
- 提供完全隔离的运行地址空间, 屏蔽了操作物理内存的问题
- swap机制(也会导致程序抖动)
- 内核里一段虚拟内存对应一个vma
- 通过mm_struct管理vma
什么时候开始分配物理内存
- 触发缺页中断的时候会从伙伴系统里分配对应数量的页出来
数据库
什么是聚簇索引
- 从聚簇到非聚簇, 再到非聚簇存在回表
聚簇索引B+树的非叶子节点存储的是什么
- 我说的索引, 但是面试官想让我回答的是id, 两个人因为这个问题都笑出来了
主键是什么字段
- 64位的int, 为什么是64位的int. 不使用32位
- 32位太小了, 现在单张表很容易超
主键一般有什么修饰
- prime key
- Unique
- Autoincreament
为什么是单增的
- 能避免B+树出现页分裂
什么是联合索引
- 形式到最左前缀匹配规则到常见的用途, 索引下推和索引覆盖优化查询
MySQL的一个查询最多可以用几个索引
- 是一个trick向的问题(笑哭), 就是一个非主键索引加上回表的时候的主键索引, 两个索引, 也是说完两个人都笑了下
Java线程的状态
- CREATE, INTERRUPTABLE, BLOCK, RUNNING, STOP, TERMINATED
INTERRUPTABLE和BLOCK之间的区别
- 说了下什么时候会分别出来这两种状态, BLOCK说了IO阻塞, 让我下去重新看下
项目
我自己说项目
问为什么使用的rabbitmq
- 我回答的是调研的结果是这个mq最简单易用, 但是被问到的为什么别的更复杂, 回答的只有简单的了解
rabbitmq是保序的吗
- 我说的是, 然后扯了些可靠性保证的一些内容
rabbitmq是怎么做高可用的
- 我回答的是不清楚, 但是为了避免mq成为单点问题, 是肯定有成熟的解决方案的, 不是很难的问题, 能很容易搜到解决方案
场景题目
超大文件排序
- 两个人交流着写完了, 中间给了我一些提示
算法
原地操作的合并数组(第一个数组大小是m+n)
反问
对我的评价
我的优缺点
(没问业务是上一个面试官那问得挺清楚的)
面试总结
总体上看发挥还好, 就是Java上有点薄弱, 对于技术选型的考量上也太简单了.
全部评论
HR面已过, 等offer
佬是大数据相关的么
我本科是西南交大的 校友哇 你shopee base是深圳吗还是北京
大佬,我现也在DI实习,可以交流一下吗
相关推荐
查看29道真题和解析 点赞 评论 收藏
分享
查看2道真题和解析 点赞 评论 收藏
分享
点赞 评论 收藏
分享

