快手北京商业化部门,一二三面同一天搞完,隔两天HR面,再隔天谈薪+OC。
一面(50分钟)1.自我介绍;
2.交流项目:
项目介绍、问一些项目细节是如何实现的、某些极端情况有无考虑、数据库表如何设计;
3.HashMap:
HashMap的数据结构;
put方法的细节;
map中链表特别长之后会有什么变化;
扩容为什么每次都是扩大2倍,或者说为什么容量是2的幂次;
put操作和扩容的先后顺序;
4.线程池:线程池的参数;
5.单例模式:
是什么?有啥用?
有几种实现方式?静态内部类实现单例模式为什么属于懒汉式的?
写代码(双检锁实现)
为什么要有两个if(singleton==null)?
用volatile关键字修饰的作用
为什么实例化对象不是原子操作?包含哪些步骤?
如果不加volatile关键字会出现什么问题?
使用private修饰构造函数的作用?
反射了解吗?
反射能访问private的方法或字段吗?
即然利用反射机制可以破坏单例模式,有什么方法避免呢?(一开始回答使用个字段标识是否已经实例化,但似乎行不通;然后回答了改成enum、饿汉式实现单例;)
6.MySQL数据库:
事务隔离级别,及其解决的问题;
详细说说脏读、脏写、不可重复读和幻读;
为什么用了MVCC还不能解决幻读?
快照读和当前读;
说说聚簇索引和非聚簇索引;
索引的数据结构;
B+树的优势;(回答中提到了B+树更矮,面试官直接逼问“B+树真的更矮吗”
)7.写代码
leetcode 15.三数之和(面试用的代码平台运行不了,只讲了代码思路)
8.面试时间快到了,问我“哪些你比较了解,但是在本轮面试没考察的,我可以反馈给下轮面试官”(回答了JVM、JUC、Redis、Netty、计算机网络);
二面(50分钟)1.自我介绍;
2.TCP为什么要三次握手、四次挥手?
3.并发事务下会出现什么问题(脏写、脏读、不可重复读、幻读)?解决方法(事务隔离级别)?
4.说说Spring中IoC和AOP;
5.说说动态代理的两种实现方式(回答JDK、CGLib);
6.静态代理和动态代理的区别;
7.Session和Cookie的区别;什么场景下使用?怎么保存Session?(说了Redis)
8.ThreadLocal的作用;
9.死锁是什么?产生的原因?产生的条件?怎么解决?
10.MyBatis的作用;
11.用过dubbo吗?你会怎么实现远程过程调用(RPC)?
12.两个栈怎么实现队列?说说思路;
13.写代码:
字符循环右移(ABCDEFG->DEFGABC)
14.介绍简历中的项目,自己在其中负责的工作;怎么部署的?
15.场景题:班级、学生、课程怎么设计数据库表;
16.场景题:某用户在快手刷视频时,怎么进行视频去重,让用户看过的不再刷到?(回答利用Java或redis中的set数据结构保存已看过的id)怎么从大量的短视频中选出其中合适部分呈现给用户?(回答推荐算法)
17.反问环节;
三面(40分钟)1.自我介绍;
2.城市意向;岗位意向;公司意向(互联网、国企、制造业)
3.Java用了几年了?对哪些框架、工具比较熟?
4.自己感觉python和java的区别?
5.对加班的看法?
6.遇到哪些印象深刻的困难?
7.遇到困难怎么解决?
8.最近关注了哪些行业热点?(聊了ChatGPT)
9.最近看了哪些书?
10.用得比较多的Java工具(回答集合、线程池);
11.MyBatis的底层原理、运行流程?(回答不太了解,然后问你会怎么实现MyBatis);
12.用过哪些设计模式?
13.如设计一个系统,你会怎么为功能分层?(回答了MVC)
14.说说个人优缺点;
15.面试官介绍部门的情况,负责的业务和功能,问我倾向哪个;
16.个人爱好;
17.喜欢什么类型的公司?
18.反问。
HR面(20分钟)交流了一些比较常规的问题,例如城市意向;岗位意向;个人爱好;优缺点;对哪一面印象深;
问了我当前offer情况;
补充211硕,秋招投了两次快手,笔试机会都没有
;23年2月投了快手春招,直接流程中止
;4月捞起来面试了
;面试总结:
一面的面试官给我的感觉是倾向于重点考察知识点的深度;首先项目抠得不是特别深入,会从简历中所写的重难点问起,然后问一些极端场景是否有考虑到,应该是在考察面试者是否对所做项目有无深入的思考和理解;其次,八股方面会从一个基础的问题问起,然后不断的深入。
二面的面试官问的问题是比较跳跃性的,知识点之间可能不太关联,比较考察基本知识面的广度。
三面的面试官应该是部门主管吧,人很和蔼,技术性问题考察的比较少,比较关注回答问题时的条理性。
快手的面试算是我秋招、春招中很不错的面试体验。面试官准时、有礼貌和有耐心,面试过程中没有啥特别怪异刁钻的问题。