快手java开发面经
一面
1、手撕代码:有一个有序正整数数组,找到目标元素在数组中的位置,如果有重复找出第一次出现的位置。2、手写两道sql(关于嵌套子查询的)
3、创建线程的几种方式。
4、怎样实现线程安全,对synchorized的理解,以及它与reentrantLock的区别
5、手写线程死锁
6、手撕怎样从单链表中找出最后一个元素,要求时间复杂度小于O(N)。
7、逻辑题:一个4升和9升的杯子,怎样倒出7升的水。
二面
1、自我介绍,项目介绍。2、项目中的难点是什么,怎么解决的,数据库表结构怎么设计的。
3、谈一谈mysql的优化,mysql索引的数据结构,B树和B+树的区别。
4、hashmap的底层数据结构以及put,get操作以及如何实现的
5、HashMap的线程安全问题
6、ConcurrentHashMap如何实现线程安全,ConcurrentHashMap put元素时为什么要采用自旋
7、jvm的内存模型(五大块)
8、java内存模型(工作内存和主内存)相关的问题
9、GC(垃圾标识算法,垃圾收集算法,垃圾处理器,何时触发Gc)
10、线程池的种类参数以及执行流程,拒绝策略。
11、手撕单链表逆序,分析时间复杂度。
#实习##快手##Java工程师##面经#