2022.1.5 法本-曙光-外包岗面试总结


1.Map类下的put和putAll方法的区别

putAll方法用于合并两个map,假如两个map有重复的key值,那么用参数中的map中的key-value覆盖调用者的key-value。

2.线程池的的参数

  • corePoolSize(核心线程数)
    • 核心线程会一直存在,即使没有任务执行。
    • 当线程数量小于核心线程数的时候,即使有空闲线程,也会一直创建线程直到达到核心线程数。
    • 设置allowCoreThreadTimeout=true(默认是false)时,核心线程会超时关闭。
  • queueCapacity(任务队列容量)
    • 也叫阻塞队列,当核心线程池里的线程都在工作,此时有任务进来,会进入任务队列,排队等待线程执行。
  • maxPoolSize(最大线程数)
    • 线程池里允许存在的最大线程数量。
    • 如果任务队列已满,而当前的线程数量大于等于核心线程数时,会创建新的线程执行任务。
  • keepAliveTime(线程空闲时间)
    • 当线程空闲时间达到keepAliveTime时,线程会退出(关闭),直到线程数等于核心线程数。
    • 如果设置了allowCoreThreadTimeout=true,线程会退出直到线程数等于0.
  • allowCoreThreadTimeout(允许线程池超时(被处理))
  • rejectedExcutionHandler(任务拒绝处理器)
    • 也就是拒绝策略
    • 当线程数量达到最大线程,并且阻塞队列已满的情况下,会拒绝任务。
    • 在调用了先吃shutdown()方法之后,会等待执行完线程池的任务之后,再shutdown()。如果在调用了shutdown()方法之后、前程池关闭之前提交任务,会被拒绝。

3.stream流相关问题

  • 如何使用map方法做映射再收集
  • 如何使用groupingBy方法做分组