爱奇艺Java实习1、2面,超级高效率好评
一面
线下面试,没有自我介绍,帅气老哥上来就盯着简历问项目
项目
- 做了哪方面的东西
- 我说了我这个项目的思路,怎么实现的我的需求的。
- 然后问表的设计,给张纸写一下项目表的结构,索引字段。
- 然后巴拉巴拉建联合索引,覆盖索引优化,聚簇索引等等。
- 然后写走索引的SQL
- 上面索引提到了B+树,然后被问B+树的数据结构,用B+树有哪些好处。
- 巴拉巴拉
- 在纸上写一下主键索引的B+树是个什么样子的,你建的索引又是什么样子
- 巴拉巴拉
- 之前说的都是逻辑上的,了解MySQL索引文件在磁盘页上是具体怎么存储和分布的吗
- 不了解。。。
- 给一个用户权限管理系统要怎么建表怎么实现授权,不用开源框架的话。
- 不太会啊。。我就说了下建表的思路,扯到了范式巴拉巴拉,然后还说错了一些…
- 说如果要给你的项目加削峰、限流等访问控制你会怎么做?
- 随便扯了点
Redis
- 会使用Redis是吧
- 是的看过那本Redis设计与实现。
- 项目中怎么用的,缓存了哪些数据。
- 巴拉巴拉
- Redis 数据类型和数据结构有哪些
- 我刚开始巴拉巴拉,他说就书上的对吧那本书我也看过算了不用说了
- 就说说
Zset
的数据结构吧- 跳表+字典或压缩列表
- 说说什么是跳表,有什么好处
- 巴拉巴拉
- 然后问跳表确定高度的算法
- 抛硬币算法
- 为什么Redis用跳表实现Zset而不用B+树 ?
- 稍微说了一下,他说回答对了一半,但是这个问题是拓展题,问题不大,后面你可以去了解一下。
Java并发
- 并发用的多吗
- 不多
- 手撕代码:写一个生产者消费者的代码三个线程循环打印123
- 我用Semaphore写完,他看了下说应该没什么问题
- 然后问能不能用ReentrantLock和Condition写。
- 我ok,可能代码量要大一点,需要点时间,他:那就不写了
- 讲讲ReentrantLock吧。
- 我巴拉巴拉LockSupport.park,重入,非公平和公平的实现方式,CAS,AQS
- 那再讲讲AQS
- 我巴拉巴拉阻塞队列,volatile state,
- 那就再讲讲volatile
- 我巴拉巴拉可见性,防止重排序,然后说到JMM内存模型,缓存一致性协议
- 然后然后写了个代码,考察指令重排序相关的,保证不被重排序应该给哪个变量加volatile。(感觉自己指令重排序问题还需要更深一点的理解,到计组执行层面是如何做的)
- 然后他说并发这方面就没什么问题了
MySQL事务
- 然后看了看简历,又看到了MySQL事务,说说事务的隔离级别,MySQL默认级别,每个隔离级别会出现什么问题,举个例子。
- MySQL如何实现的可重复读和读已提交
- 讲了一下MVCC
- MVCC工作原理
- 简单说了下undo log巴拉巴拉
- 说什么是幻读现象,举个例子,在MySQL中会出现幻读现象吗?
- 扯了一下当前读和快照读。
最后说应该没有什么问题了,我去叫下同事来二面。(擅长的JVM、集合类一个没问,Spring也一个没问)
二面
(二面面试官看上去是大佬)
- 上来问我的研究方向,研一主要在帮导师干活对吧,课上的怎么样了
- 介绍一下简历上的项目,做了哪些工作,怎么做的
- 本科专业是学硬件方面比较多是吗
- 从学校问过来方便吗
- 研二来实习和导师说好了吗
- 问更喜欢算法还是开发
- 当然是开发
- 开发是自己学的对吧,说说自己的学习方法和学习路线
- 先跟着从入门到……的路线学习基础,然后从GitHub、技术博客、书籍、Stack Overflow拓展深度。
- 然后疯狂介绍这边组里的业务大概15分钟。
- 然后问前端会多少
- 只能看懂前端代码,稍微调调,不会Vue等框架,没有开发过完整的项目
- 看了看简历,问Nginx是怎么用的,
- 我说了下怎么给我的博客做请求过滤,实现Https,请求转发。
- 然后问Linux掌握的怎么样
- 我说了一下我接触Linux的经历,展示了一下我的云服务器探针,网站,说一般使用是完全没有问题的
- 然后问Git会用吗
- 最后问实习找的怎么样了
- 然后说和leader沟通一下,等HR通知。然后送我出了公司……
总体面试感受极佳~感觉不像是你问我答的考试而是有一种交流技术的感觉
HR面
大概2面完之后隔了一个半小时电话来了(当时我还在小卖部挑雪糕呢没想到这么快),说恭喜面试通过,问了下个人基本情况,然后说马上发邮件OFFER
从约面试到发OFFER总共不超过24小时~~