发布于 

同程旅行一面

09.21 同程旅行一面

面试时间30min左右

  1. 自我介绍;

  2. 投的工作地点是哪里?能提前来实习吗?

  3. 挑一个最熟悉的技术讲一讲;

    这里我直接开始讲我看过HashMapConcurrentHashMap的源码,HashMap怎么怎么样,ConcurrentHashMap怎么怎么样,怎么怎么实现线程安全的,怎么实现多线程下并发扩容的,讲了七八分钟,然后就被打断了,说可以了可以了。

  4. 这些源码是看视频别人讲解的还是自己真的去看了的?

  5. 挑一个项目介绍一下;

    讲了下项目,然后讲了下短行验证码登录和微信扫码登录的流程。

  6. 你的验证码存在Redis里,如果Redis突然挂了该怎么办呢?

    我一想,这不就是缓存击穿嘛,然后就说可以将数据写到数据库之前,加互斥锁,保证只有一个请求落到数据库上。

  7. 在大量请求的情况下,如果加互斥锁每次只允许一个请求,效率太低了,有其他的方法吗?

    我说如果Redis没有挂的情况下,可以用Redis的分布式锁来解决这个问题,但是如果现在Redis挂了,那可以用RabbitMQ来做,将消息先存放在MQ里,然后在消费端开启线程池消费消息,实现解耦和流量削峰。

  8. 开启线程池后,怎么保证消息是按序消费的,不会重复消费呢?

    我说可以给每个消息加一个全局唯一id,这样能解决这个问题。

  9. 有没有更简单的方法?不用MQ

    寄!这里确实不知道,后面反问环节问了下面试官,他说其实可以通过限流、熔断或者服务降级来解决这个问题。

  10. JDK现在最新的版本到哪了知道吗?

    我说记得好像是到JDK 21了。

  11. 那你知道JDK 21有哪些新特性吗?

    大寄特寄!我说我平时只用过JDK 8,不太了解JDK 21的新特性。

    然后说我了解一些JDK 9的改变,JDK 9里面String的底层从char[]改成了byte[]


    下来查了一下JDK 21一些新特性:

    • 虚拟线程;
    • 顺序集合:顺序集合中的元素有确定的出现顺序;
    • 记录类型的模式:可以结构记录对象中的值,方便地提取记录中的组件;
    • switch的模式匹配:增强 Java 中的 switch 表达式和语句,允许在 case 标签中使用模式。当模式匹配时,执行 case 标签对应的代码;
    • 分代式ZGC:增强 Z 垃圾回收器(ZGC)来支持不同的世代。年轻和年老的对象分别存放在不同的世代中,使得年轻的对象可以更加频繁的被回收;
    • 字符串模板:可以把任何字符串转换成任意类型的对象。

  12. 平时有没有去github上关注优秀的开源项目,看看源码?

  13. 项目里Redis是怎么部署的?了解Redis里的集群和哨兵模式这些吗?

  14. 项目里有用到什么设计模式吗?介绍一下;

    这里我就说了一下用到了模板方法,比如各种xxxxTemplate,讲了一下模板方法好处,然后说我们项目主要是由Spring框架开发的,Spring其实已经帮我们封装好了很多设计模式,比如:工厂模式balabalbal、单例模式balablabal、代理模式balablaba、模板方法balablaba等等。

  15. 最近有没有看什么书?

    我说在看虚拟机相关的书,然后继续追问是什么书?我说《深入理解虚拟机》,面试官说那个书有些老了,但是里面有很多内容确实很经典也很重要。

  16. 反问环节。


本站由 Cccccpg 使用 Stellar 主题创建。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。