首页 > 小红书java社招一面面经
头像
Jessin
编辑于 2021-07-09 10:53
+ 关注

小红书java社招一面面经

  1. hashmap的底层数据结构,put的过程
  1. hashmap是否是线程安全的,多线程下会有什么问题?concurrentHashMap底层是如何实现线程安全的。
  1. synchronized锁的升级过程。
  1. 数据库是否用了索引?用explain无法看出索引用了哪一部分?

https://blog.csdn.net/houmenghu/article/details/109580196

遇到非等值判断时匹配停止

a = ? and b = ? and c= ?
a = ? and b = ? and c > ?
a = ? and b > ? and c > ?, 只用到索引的一部分(a,b),因为b把数据阻断了,b不是定植时,c时无序的,无法使用(a,b,c)索引。

show global variables like 'optimizer_switch'\G

5.6版本后,可以开启索引下推。虽然有非等值条件,导致索引不能全部使用,但是可以利用索引条件,里面有的字段进行过滤,过滤后再回表读取真正的数据(extra=using index condition),而不是只根据部分索引查出该索引符合条件的数据(回表数据太多,回表一般是随机io,减少回表次数),然后再server层进行过滤,这样效率会很低(extra=using where):

extra=using index是覆盖索引
type=index,表示使用索引排序

http://fivezh.github.io/2020/01/19/mysql-icp/?utm_source=tuicool&utm_medium=referral

  1. spring循环引用的问题,A->B->A问题
  • spring对于单例模式,用了三级缓存
  • getBean(A)时,先实例化A,然后曝光到singletonFactories中,允许循环依赖。初始化结束后,再从提前曝光缓存earlySingletonObjects以及singletonFactories移除,挪到singletonOjbects单例缓存中。
  • getBean(B)依赖A,先在singletonObjects 中查找,如果有直接返回。如果不存在,在earlySingletonObjects中查找,这个是提前曝光,还未初始化的单例。如果不存在,在singletonFactories中查找,找到后放回earlySingletonObjects。这个时候A还没初始化。
  1. 举个不用回表的例子
    覆盖索引

    index (name, age)
    select name,age from t where namg = "xiaoming";
  2. 主键用uuid会有什么问题?

  1. 聚蔟索引和非聚蔟索引的区别,是否分别对应主键索引、辅助索引?是的
    https://www.jianshu.com/p/643850f684db
  • mysql索引,高度一般是3-4层,innodb的页大小是16kB,叶子节点是双向循环链表?一个b+树存储行数最多为2000w

https://zhuanlan.zhihu.com/p/86137284

  1. 实现LRUCache,这里可以考虑用map,节点是node,node之间通过前后指针关联,双向链表
    https://leetcode-cn.com/problems/lru-cache/

存在个问题,一批新数据会把访问很久的数据给挤出去,这里如何解决这个问题?

https://juejin.cn/post/6844904049263771662

https://segmentfault.com/a/1190000038714624

  1. jvm垃圾回收是如何做的?

  2. jvm运行时有哪些数据区

  3. 哈希冲突如何解决

  4. b+树叶子节点存的是指针吗?存的是数据

  1. 可重复读的情况下,select count(*) from t where a >= 0 and a <= 10在另一个事务执行前后效果如何?可重复读下,对于更新语句,会加锁。只不过是通过mvcc来实现可重复读,依然会出现幻读的现象,需要改为当前读
  1. CMS和G1均使用三色标记法进行标记,一开始是白色对象。
  • 黑色对象,自己和成员对象均已标记存活。
  • 灰色对象,中间状态,自己存活,但是成员对象未标记(白色)
  • 白色对象,未标记或者没有访问到(可以回收)
  • 跨代引用
  • 新生代引用老年代如何回收,直接扫描,因为新生代朝生暮死。
  • 老年代引用新生代,回收新生代时minorgc,使用card table,牺牲空间换时间,减少扫描整个老年代的时间,因为老年代的存活时间是比较长的。https://www.jianshu.com/p/f1ff4ab0fed7,g1引入了remember set
  1. write ahead log
  1. 延迟关联,解决深分页问题

http://qidawu.github.io/2019/11/26/mysql-deferred-join/

更多模拟面试

全部评论

(12) 回帖
加载中...
话题 回帖

推荐话题

相关热帖

近期热帖

近期精华帖

热门推荐