首页 > 面试复盘 | 杭州有赞 Java后端 一二三面
头像
DrBurry
发布于 2021-09-28 17:46
+ 关注

面试复盘 | 杭州有赞 Java后端 一二三面

首先夸下有赞的面试效率挺高的,一天就面完了三面,技术面的体验也都挺好,一面着重考察基础,二面考察项目,HR面了接近40min,是面过最久的HR面。。

一面 45min

一面的面试官挺友善的,交流起来没有太大压力。

  1. 自我介绍之后,面试官问了我比较擅长哪方面,答了MySQL和Redis之后,就狂问MySQL

  2. MySQL的B+树结构是什么?聚簇索引和非聚簇索引的区别?

  3. MySQL为什么用b+树实现索引?为什么不用红黑树、跳表、哈希?

    一开始答的比较混乱,后来面试官提示说可以对比红黑树、跳表、哈希来回答。
    首先是在相同的数据量下,红黑树的树高更高,IO次数会变多,而B+树的结构使得3层高度就能存储接近2000w的数据;
    第二是B+树的叶子节点是按照主键顺序存放,同时使用前后指针相连,在范围查询时遍历更加方便,以及可以利用磁盘预读特性将相邻节点读取出来;
    第三是哈希结构只适用于等值查询,无法在范围查询下使用。

  4. MySQL的事务实现

    ACID特性。原子性和隔离性基于undo log,持久性基于redo log。具体展开可以再讲讲redo log的两阶段提交。

  5. MySQL可重复读级别下,什么情况会出现幻读

    其实可重复读无法保证完全的隔离性。如果在事务A中,第一次select使用快照读(使用MVCC),同时另外一个事务B在第一次select的范围内插入了数据,那么如果A在第二次读时使用了当前读(for update/in share mode),此时就会出现幻读问题,因为当前读并不会使用MVCC,而是从数据库读取最新数据。

  6. 如何判断一条SQL是否使用到了索引?

    explain分析执行计划

  7. MySQL场景题:MySQL机器上CPU飙升,怎么解决

    我以为是缓存失效了,面试官说那如果是MySQL出现死锁怎么解决。于是我简单答了下打印出线程执行信息去分析,以及编写相同的事务时操作的顺序保持一致。更好的答案网上挺多博客有写。

  8. 问完MySQL之后,面试官突然邪魅一笑,说想到了一个有趣的问题,我就知道情况不妙,果然问了个让人摸不着脑袋的问题:数组下标为什么是从0开始的??

    一顿瞎掰之后,面试官让我自己后面去了解下。。后来查了一些资料发现一个大致的说法是,数组的首地址就是第一个元素的地址,如果从1开始,那么每次获得第n个元素时,都要做下n-1操作,所以多了不必要的运算。

  9. 后面就是Java相关了。HashMap中的数组容量为什么总是2的n次方?

    为了扩容时转移节点不用去重新计算hash值,通过与运算判断后直接把元素放到新数组的原位置or原位置+旧数组长度。

  10. ConcurrentHashMap中线程是怎么去协助扩容的?他是怎么知道扩容已经结束了?

  11. JVM八股:内存布局、回收算法、GC Root可达性分析、内存分配担保、CMS G1

  12. 线程池场景:核心10、总数10、队列20,瞬间60个线程请求,在线程和队列都饱和的情况下有多少个线程会触发拒绝策略?(60-10-20=30个)

  13. 简单讨论了下实习的内容,在学校做项目遇到技术问题时怎么处理

二面

二面的话会去抠项目细节,面的头很大。没有录音,写一些印象比较深刻的问题

  1. 项目是做什么的的,有哪些技术难点,为什么不用其他技术方案实现 等等等;实习做了哪些工作
  2. 悲观锁和乐观锁的场景,扣减库存的场景应使用哪一种锁?
  3. 你的项目里网关的鉴权流程?
  4. 缓存和DB一致性怎么保证?
    答了让后台的线程使用队列去串行化更新,然后面试官问可以由客户端请求的线程来更新缓存吗?
    我说可以,更新时使用分布式锁保证只有一个请求的线程在操作
  5. 接着面试官就问了分布式锁的使用会有什么问题?这里答的不是很好,后来才知道问的应该是锁的唯一性、可重入等问题。。
  6. Redis除了缓存、分布式锁还有其他场景吗?
  7. API和SPI区别
  8. 讲一下依赖倒置
  9. 项目有使用到什么设计模式吗?(策略模式)

HR面

HR面了很久,感觉很看重你对公司的意向,对过往经历问的很细。。。主要围绕下面几个部分

  1. 实习的收获,为什么不去实习公司
  2. 家庭环境、从小到大有经历过什么困难吗
  3. 团队中出现分歧怎么办
  4. 都投了哪些公司,为什么
  5. 比赛时印象最深的困难

讨论

想和大佬们讨论下

  1. 扣减库存的场景应使用乐观锁or悲观锁?
  2. 缓存DB一致性的保证有没有更好的解决方案呢?
  3. MySQL机器上CPU飙升,怎么解决?

总结

首先在基础方面自己要有比较擅长的一块,这样如果面试官给力的话会让你说自己擅长的,不然也可以引导面试官向自己擅长的部分去提问,尽量给自己加分。二面的面试官会根据你的项目去引申出一些场景题,所以对于项目使用到的技术栈还是要多去思考,之前一直背八股文,导致对于一些实际场景的使用不了解,继续改进。最后许愿offer~

更多模拟面试

全部评论

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

近期热帖

历年真题 真题热练榜 24小时
技术(软件)/信息技术类
查看全部

热门推荐