一面(15:00~16:20 110min)
面试(15:00~15:56)
一面是两个面试官面试,对数据库底层原理,毕业设计和项目流程进行了狠狠的拷打,最终进行了一道sql和一道算法的笔试,笔者觉得总体面试很偏底层,感觉答的很一般。
- 自我介绍
- 实习了多久时间,分别在哪实习?
- 技术栈呢,你的两个项目都是Java写的吗?
- 挑一个项目讲?(一个是遇到线上问题,排查并且解决了,一个是自己有高并发大流量的设计在里面,想要了解哪一个)
- 线上问题(从业务场景,到遇到第一个问题,再到遇到第二个问题排查和解决)
- 为什么会有提交表单无法提交的问题?(token问题)
- token过期时间怎么设置的?(12h)
- 为什么设置12h,感觉不合理(因为一开始没有发现问题,无法兜底,所以提交失败会先放redis,然后用定时任务提交,设置12h也是考虑自己休息和能处理问题的时间段)
- 数据库TIME和TIMESTAMP有什么区别?(不太清楚,平时都是存毫秒时间戳)
- 毫秒时间戳用什么类型存储(bigint)
- 数据库ACID?
- 数据库事务隔离级别?(答出来三个)
- 你怎么设计的数据库事务隔离级别?(因为笔者说了毕设是数据库内核研发。目前只有可串行化,后续会拿工厂模式适配)
- 线程和进程有什么区别?(讲解了线程,进程,协程,虚拟线程)
- 编码怎么实现可串行化?(加大锁,面试官说这样性能太差)
- 对Oceanbase哪些了解?(数据类型,内存模型,底层数据结构,和Mysql对比)
- 查询优化器怎么设计,你从你怎么调研,怎么区别,然后怎么实现了操作来讲?(看了书,了解到Mysql中是冷热分离的LRU链表,我觉得这样做缓存被淘汰上层无法感知,所以采用引用计数)
- 什么LRU?
- 说下引用计数怎么实现缓存框架?(三个map分别维护,实际缓存的数据,资源引用个数,正在被获取的资源)
- 如何一个线程正在读缓存,但是其他线程正在修改怎么办?(并发怎么解决的?在一个map中value为True代表正在被引用,那么其他线程会先sleep 1ms然后再查询,代码里写的while(true)如果没有获取就一直查询)
- 如果A修改了一块缓存,后续b要查询这块缓存,说一下你的引用计数的流程?(已经被拷打晕了)
- 讲一下项目,从一个用户的角度说有那些功能?(学生,教师角度描述)
- 通过AI生成错题是什么样的流程?(promot工程,错题表,根据题目的年级-科目-知识点生成)
- 项目亮点?(对热点点赞数据进行了异步写+写聚合,用了Redis+Rocketmq+Lua消费者批量消费,然后拿做写聚合)
- 用的哪家大模型,没有做训练么?(星火,没有训练,但是提出了用milvus训练多模态的数据,讲解了大概的原理,顺口提了一嘴Ob也支持向量)
- 说一下怎么利用大模型进行数据分析的?(导入Excel配置Promot,让大模型Json格式输出,适配Echars的数据格式,适配条形图,雷达图,饼图等)
- 面试官介绍了Base,薪资,需要提前去北京实习,问了手上有哪些在走流程?(同程,马力)
- 数字马力哪个部门?(不清楚,没有oc也没有感谢信)
笔试
- 查询平均分大于87的学生.(没写出来🤣)
- lc 简单题. (比较笨的写出来了,写完需要和面试官探讨)
结尾
面试官介绍了团队负责Oceanbase的数据转移,并且技术栈是Python.(我了解到Ob已经完全适配了Mysql,面试官说其实Orancle也基本适配了,我回答说自己其实Python也用到很多,主要是用刷算法和爬虫)
总结
底层拷打很严厉,面试官知识面很广很广,强度很高。