美团配送二面(40min)Java后端暑期实习面经

  1. 自我介绍(提到了了解Java并发、Java虚拟机)
  2. 既然你提到Java并发,那能不能谈谈你对并发的理解?(先说了单线程的一些缺点,所以需要多线程并发。但是多线程的话可能会出现线程安全的问题,就需要通过一些同步方法保证线程安全)
  3. 一般多线程会使用线程池,那你怎么设计或者怎么去使用线程池能够用得更好?(1. 先比较了两种创建线程池的方法,表示Executors可能会出现OOM,所以要自己设置参数创建线程池 2. 自己创建线程池应该是根据情况/需求选择合适的参数,如选择合适的拒绝策略,合适的阻塞队列)
  4. 那能不能讲一下你觉得的拒绝策略的选择原则?(我先简单介绍了四种拒绝策略的方式,然后就可能根据我们的需求能接受到哪种程度?最重要的,一定不能丢弃的,那就是CallerRunsPolicy,次一点的可以接收丢掉但是我们需要捕获异常去进行进一步的处理就是AbroadPolicy,剩下就是两种不太重要可以直接丢弃的就是Discard。具体是oldest还是什么,就看是越早的越重要还是越早的越不重要吧)
  5. Java中,有这么多锁,那觉得为什么要设计这么多锁呢?(首先锁是用来解决线程安全问题嘛,那又设计这么多锁,主要是因为各个锁各自的实现不太一样,各自的功能也不太一样(比如什么公平/非公平锁,读写锁、互斥锁啥啥的),这样的话不同的场景适合使用的锁也不一样,所以就需要设计多种锁)
  6. Java锁中有个很重要的synchronized关键字,你能不能讲一下他的机制?(这个问道最熟悉的东西了,我把1.6之前的重量级锁,1.6之后的锁升级 无锁->偏向锁->轻量级锁->重量级锁 的原理和升级过程全部都特别细地讲了一下)
  7. 怎么用synchronized?(两种,类锁和对象锁。对象锁就加在对象上,互斥区域就是代码块。类锁就要么就加载class上,要么加在static 方法,加载static的话就这个类的每个对象实例调用static方法的时候都会互斥。)
  8. 聊了一下项目1的过程、分工、遇到的难点、技术选型、一些项目设计的细节为什么要去这么设计 (这是一个偏嵌入式的项目 智能垃圾分类系统,主要涉及到Arduino,YOLOv4目标检测算法、QT。面试官以前在学校也做了不少嵌入式相关的,所以面试官还挺感兴趣的。谈到项目遇到的问题的时候,感觉面试官非常能get到我遇到的问题,看来他是一路踩过很多坑的)
  9. 聊了一下项目2(一个有点类似于贴吧的论坛,是大二学院实训的时候和另外6个同学一起做的,我是组长协调大家一起开发的。但是这个项目比较简单,因此就没问太多技术架构的问题,反而是问的我是怎么协调大家一起做?我在协调的时候,某些地方会不会有更好的办法?)
  10. 项目做得挺杂,嵌入式、识别、web都有做,有点杂,那你自己是想做哪个方向的呢(表示还是想做后端这一块的东西,然后吐槽了一波嵌入式的折磨,然后面试官也表示很可以get到嵌入式的折磨)
  11. 最近有没有看一些技术相关的书?
  12. 对微服务这些有没有了解?(只是零散的有一点了解,不是很系统)
  13. 实习时间能多少?(3-6个月)

反问环节
面试官能不能对我本次面试做一个评价?(说了好的和不好的。好的就感觉知识掌握还算不错,我人性格本次面试感觉下来也不错。缺点的话就是 可能不太方向match,他们现在做的大部分都是微服务、分布式之类的,我做的项目更多是有点偏嵌入式的东西。面试最后能不能通过还得想一想)

总结:
本次面试大概40min,其实没有考很多八股方面的东西,更多是对整个知识的一个理解吧,跟一面可以说是截然不同了(一面50min几乎全是在八股文,Java并发、JVM、数据库、操作系统、计网全问了,讲到后面真的讲得我真的口干舌燥)
说实话这样体验下来其实还挺不错的,感觉更可以反应出对知识体系结构的理解吧。此外面下来感觉这位面试官人也挺有意思挺好的,我感觉应该是这两个月面下来最喜欢的一个了,不过他说了方向可能不太match,感觉就是在给我打预防针了

备注一下:一面写了。一面的算法题是给两个链表,返回他们的和链表。
1 -> 2 -> 3 -> 4 -> 5
8 -> 8 -> 8
返回 1 -> 3 -> 2 -> 3 -> 3
LeetCode上面也该很容易找到。先反转链表一下算和,再把结果反转一下,时间复杂度On,空间复杂度O1。就是时间就只给了10分钟挺紧的

你可能感兴趣的:(Java,java,面试,spring,架构,职场和发展)