当前位置: 首页 > 面试经验 >

美团20220908测开一面凉经

优质
小牛编辑
144浏览
2023-03-28

美团20220908测开一面凉经

面试官的环境感觉很嘈杂,而且办公环境很一般,初印象不是很好。
一开始说了一下用的语言之类的,之后上来就开始问了一些Java框架sprint之类的。
八股文:
Java的线程池的主要参数有哪些?一般的工作流程是什么样的?
主要参数有7个,分别是下列:
  1. corePoolSize: 线程池中的常驻核心线程数
  2. maximumPoolSize  最大线程池参数
  3. keepAliveTime   任务结束后,线程存活该指定时间后才会被释放
  4. TimeUnit 线程存活时间参数的单位,常用s,ms
  5. BlockingQueue     队列,当核心线程用完时,任务放进队列
  6. ThreadFactory    线程工厂
  7. 丢弃策略     默认Abort,直接丢弃,并抛出异常

工作流程



1.在创建了线程池之后,等待提交过来的任务请求
2.当调用execute()方法添加一个请求任务的时候,线程池会做出如下判断:
3.如果正在运行的线程数量小于corePoolSize,那么马上创建线程运行这个程序
4.如果正在运行的线程数量大于或者等于corePoolSize,那么将这个任务放入队列
5.如果这个时候队列满了并且正在运行的线程数量还小于maximumPoolSize,那么还是要创建非核心线程立刻执行这个任务
6.如果队列满了并且正在运行的线程数量大于或等于maximumPoolSize,那么线程池会启动饱和拒绝策略来执行
7.当一个线程完成任务的时候,它会从队列中取下一个任务来执行
8.当一个线程无事可做超过一定时间(keepAliveTime)时:线程会判断如果当前运行的线程数大于corePoolSize,那么这个线程就会被停掉。


当时候问了一个问题,就是如果阻塞队列是一个无界队列的话,那最大线程数还有意义嘛?
与有界队列相比,除非系统资源耗尽,否则无界的任务队列不存在任务入队失败的情况
当有新的任务到来,系统的线程数小于corePoolSize时,则新建线程执行任务。当达到corePoolSize后,
就不会继续增加,若后续仍有新的任务加入,而没有空闲的线程资源,则任务直接进入队列等待。
若任务创建和处理的速度差异很大,无界队列会保持快速增长,直到耗尽系统内存
美团效率是真的快,昨天面完,今天就挂!

#美团面试#
 类似资料: