快手JAVA开发工程师面经
一面
- 自我介绍和项目
- 是否用过缓存(很少)
- 介绍一下多线程(线程,JAVA默认线程池,自定义线程池参数,线程安全集合,锁)
- 编程:一个有序数组和一个给定target,返回数组中target出现的次数
- 反问
二面
- 场景:系统每次推送8篇文章(show事件流),用户可能点击这几篇文章中的某几个(click事件流),现在要将这两种事件配对,如何做。
- 扩展:cache结构怎么设计,怎么尽可能准假遗漏少地匹配所有的事件,怎么估算cache大小,如果task出错怎么恢复
- 编程:一个大数组,所有元素互不相同,找topK(这里我说过堆和bitset,但是面试官更想知道一个基于快排的思路的解法,但是我不会)
- 编程:一个二叉树,层序遍历并输出,要求每一行开头输入行号
三面
三面面试官感觉好厉害,把我问懵了简直
- 自我介绍(主要介绍实习,项目,以及自己熟悉的领域)
- 是否熟悉本科的课程:操作系统,编译原理,计算机网络之类的。
- 平常使用什么系统,linux怎么看网络丢包率,怎么查复杂均衡问题,怎么看线程状态。实验室机器参数,几个物理核,几个虚核,几个线程。
- 一个网络连接池,coreSize=10, maxSize=100,怎么设计?当QPS增加的时候,怎么增加连接数,空闲时怎么降低连接数,说一下策略。(我答的类似线程池)
- 这样设计有什么问题,该怎么解决。
- 一个消息队列应该具有什么特点,怎么设计,主要解决什么问题
- NoSQL数据库了解吗,这种数据库能够当成消息队列使用吗,为什么?
- 分布式系统应该具有什么特点?
- 反问
中午HR打来电话,已OC,貌似没有HR面。
#快手##面经##校招##Java工程师#