快手一面面经

详细介绍项目,详细问,

threadlocal,底层,内存泄漏问题

泛型,擦除 P和?区别

comparable和comparator的区别

类加载过程,详细说一下

  • 加载:根据查找路径找到相应的 class 文件然后导入;
  • 验证:检查加载的 class 文件的正确性;
  • 准备:给类中的静态变量分配内存空间;
  • 解析:虚拟机将常量池中的符号引用替换成直接引用的过程。符号引用就理解为一个标示,而在直接引用直接指向内存中的地址;
  • 初始化:对静态变量和静态代码块执行初始化工作。

双亲委派机制

避免重复加载 + 避免核心类篡改

双亲委派模型:如果一个类加载器收到了类加载的请求,它首先不会自己去加载这个类,而是把这个请求委派给父类加载器去完成,每一层的类加载器都是如此,这样所有的加载请求都会被传送到顶层的启动类加载器中,只有当父加载无法完成加载请求(它的搜索范围中没找到所需的类)时,子加载器才会尝试去加载类。

索引失效的场景

1.有or必全有索引;

2.复合索引未用左列字段;

3.like以%开头;

4.需要类型转换;

5.where中索引列有运算;

6.where中索引列使用了函数;

7.如果mysql觉得全表扫描更快时(数据少);

HashMap结构,转换的阈值

当链表长度大于或等于阈值(默认为 8)的时候,如果同时还满足容量大于或等于 MIN_TREEIFY_CAPACITY(默认为 64)的要求,就会把链表转换为红黑树。同样,后续如果由于删除或者其他原因调整了大小,当红黑树的节点小于或等于 6 个以后,又会恢复为链表形态。

string,stringbuilder和stringbufffer

String 真正不可变原因:

  • 保存字符串的数组被 final 修饰且为私有的,并且String 类没有提供/暴露修改这个字符串的方法。
  • String 类被 final 修饰导致其不能被继承,进而避免了子类破坏 String 不可变。

StringBuffer线程安全的,因此开销也会大些。StringBuilder是 Java SE5 引入的,使用 StringBuilder 进行字符串操作更快一点。

StringBuilder 提供了丰富而全面的方法,包括 insert()replace()substring(),甚至还有reverse(),但是最常用的还是 append()toString()

总结:

  1. 操作少量的数据: 适用 String
  2. 单线程操作字符串缓冲区下操作大量数据: 适用 StringBuilder
  3. 多线程操作字符串缓冲区下操作大量数据: 适用 StringBuffer

线程池

数据库隔离级别,RR怎么实现的,MVCC介绍一下

Redis 常用的数据结构有哪些?

  • 5 种基础数据结构 :String(字符串)、List(列表)、Set(集合)、Hash(散列)、Zset(有序集合)。
  • 3 种特殊数据结构 :HyperLogLogs(基数统计)、Bitmap (位存储)、Geospatial (地理位置)。

ZSET的原理

#春招##面经#
全部评论
有后续了吗
点赞 回复 分享
发布于 2023-05-07 10:30 河南
面试用了多久
点赞 回复 分享
发布于 2023-05-07 10:51 重庆
没有写算法题吗
点赞 回复 分享
发布于 2023-05-08 16:10 浙江
我怀疑是不是同一个面试官,问的好多一样。
点赞 回复 分享
发布于 2023-05-14 21:42 浙江
老哥,一面后多久通知的?
点赞 回复 分享
发布于 2023-07-01 16:47 河南

相关推荐

数学转码崽:一直给我推,投了又不理,理了又秒挂
点赞 评论 收藏
分享
秋招之BrianGriffin:你再跟他说华为工资也低(相对互联网)就可以享受私信爆炸了😋
点赞 评论 收藏
分享
评论
4
37
分享

创作者周榜

更多
牛客网
牛客企业服务