其他分享
首页 > 其他分享> > 敖丙:春招字节跳动、蘑菇街四轮面试,分别问了啥?

敖丙:春招字节跳动、蘑菇街四轮面试,分别问了啥?

作者:互联网

前言

这又是一期读者的面经分享,很巧的是,他在蘑菇街面了三轮,最后虽然没过,但是也希望分享出来大家瞅瞅。

我这周可能会单独做个大厂面试流程的视频,涉及每一轮的考察点注意事项,如果觉得有必要,可以留言让我知道你们想看啥。

面试经历

一. 11.20 字节跳动一面Java开发,直接挂(耻辱开头……)

  1. 介绍主要项目,怎么做的;
    • 本来想简要介绍做的业务,但面试官要求详细介绍,所以二十分钟都在介绍业务;
    • 送命问题:数据量多少?说了实话,实际使用单表1000—10000级别。导致后面基本上面试官根本不想问问题了……
  2. 对 Spring 的理解?
  3. 对 AOP 的理解?
  4. 讲一下 Java 的静态代理和动态代理
    然后就没了,进入问问题环节…… 当然知道已经凉了。面试官说的问题主要在于,在研究所的技术栈还是太落后,说互联网的思路和我们这种人不一样。在提了并没有什么实际性的建议之后,结束面试。

收获:

  1. 第一次面试,终于踏出了这一步;
  2. 认识到了自己与一线大互联网公司的差距,待继续努力;
  3. 由于面试时的准备方向错误,在数据量方面的成果无心之失直接判了死刑,并没有表达出来真正的性能和准备的内容。以后准备,一定要向大数据量、优化等方向考虑!
  4. 表达能力太差。【对…… 的理解?】这种问题一抛出来,尝试用浅显易懂的方式

二. 12.04 蘑菇街一面高级 Java 开发

  1. 介绍主要项目(大概二十五分钟左右);

    • 经过上一次失败,这次梳理了业务的主线,比较熟练的介绍了业务,依旧花了十五分钟,不过中间穿插了询问项目方面的问题;
    • 询问问题:
    • (1) 动态模板的数据源从哪儿来?答:资源目录注册,通过各个数据服务获取;
    • (2) 增量数据比较多的情况下,数据源怎么处理?答:一方面,数据源通常都是数量比较固定的内容,由各个业务来封装处理,对于增量数据比较多的情况,使用动态模板的关联表模式;另一方面,数据源数据比较多的时候,通常会使用树状结构,数据服务有通用的懒加载处理方式,不会出现性能瓶颈;
    • (3) 动态模板怎么做数据的逻辑处理?答:动态模板只负责数据的记录,关于逻辑处理是另外一个业务,在简历中也有介绍。然后介绍了动态汇总的设计逻辑,大概十分钟。(说明面试官对做的项目有兴趣,并且我的回答已经有了引导性)
    • (4) 如果逻辑处理过程中并没有抛出技术性的异常,而是计算错误的异常(类似于 1+1,结果算出来是 3 的错误),有没有什么处理?(问的是有没有计算监控功能)答:没有,只是较为严密的关注了技术上的异常,计算上的错误没有处理。如果真的处理了这种问题,需要通过运维人员在配置页面中清除 Redis 缓存。
  2. 线程池基础
    • 对于一个普通的线程池,coreSize = 5, maxSize = 10,阻塞队列长度 20,且插入线程是永久执行的,那么不断插入线程,线程池中的数量以及对应的反应如何?答:该问题只需了解线程池的运作原理即可回答。
  3. Spring AOP

    • 类内部调用 AOP 问题:a() 方法被 @Around 注解用来输出日志,b() 方法没有 AOP 注解,但 b() 方法内部调用 a() 方法,那么调用 b() 方法会有怎么样的输出?答:不会有日志输出。因为这是类内部调用,而 AOP 是通过代理进行的,类内部调用不会调用代理类,不走代理所以不会有日志输出。如果想要有日志输出,需要在该类中通过 AopProxy 将代理对象(命名为 proxy)获取,然后在 b() 方法中通过 proxy 调用 a() 方法;
  4. 为什么临时决定找工作?答:因为比较熟悉这里的工作,想找挑战。

  5. 向面试官提问问题。问了问业务内容,技术栈。

三. 12.13 蘑菇街二面高级 Java 开发

整体就是介绍主要项目,时间总共四十分钟左右。

  1. 动态模板
    • 动态模板的主线流程已经比较熟练了,该方面流程介绍没有什么问题。
    • 询问问题:
    • (1) 动态模板的数据源从哪儿来?答:资源目录注册,通过各个数据服务获取;
    • (2) 动态模板里面的数据怎么来?答:用户添加了模板之后,往里面录入数据;
  2. 有堆 Dump 和数据库连接池优化经验,怎么做的?

  3. 动态汇总统计

也就是说,改一次数据,会导致一个服务的五次查询,如果集群里有十个服务,那么改一次数据就会触发五十次查询。但是从业务的角度来看,改了一个表的数据只需要清除该表的缓存即可,其他四个表的缓存并不需要修改,也就是粒度太粗,所以我第一步是将粒度细化到表的级别。

  1. 简历上写了使用 ZK 的分布式锁,为什么要选用这种实现方式?使用场景是怎么样的?

另一方面,大量并发同时查询汇总结果时,由于服务做了负载均衡,所以集群中的服务都会接收到请求,缓存中没有汇总结果,会所有大量服务进行计算。但其实只需要一个服务进行缓存的计算即可,其他服务的计算属于资源浪费行为。
所以我对一个需要进行汇总的业务使用了分布式锁,用查询条件作为锁,获取到该锁的服务进行计算,并负责将计算结果置入缓存,
其他服务在尝试获取该锁的时候失败,返回一个默认的结果,这样便避免了多余的计算。

  1. 有什么需要问面试官的问题?问了问业务内容,技术栈。

    四. 12.20 蘑菇街三面高级 Java 开发(失败)

共 40 分钟左右;

  1. 自我介绍

  2. 简历上写有 JVM 优化经历,怎么做的?

  3. 如果设计一个自动监控系统,如何设计?如何实现?

絮叨

可以看出每一面都不容易哈,大家真的要好好学习呀。

Tips:我有个读者已经面进我们公司做我的同事了,丙丙还和他约了一楼咖啡厅喝茶,到时候也会分享出来。
敖丙:春招字节跳动、蘑菇街四轮面试,分别问了啥?

标签:面试官,缓存,服务,字节,ZK,Spring,春招,敖丙,模板
来源: https://blog.51cto.com/14689292/2545810